Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
166 commits
Select commit Hold shift + click to select a range
bd38f19
feat(live): make bounded startup admission configurable
yucelokan Oct 7, 2026
c3183ee
fix(vod): preserve seekability through bounded source recovery
yucelokan Oct 7, 2026
f06df43
fix(live): publish early DVR history on a stable session timeline
yucelokan Oct 7, 2026
dee39a0
feat(dvr): add opt-in live retention leases and bounded software history
yucelokan Oct 7, 2026
b40402e
fix(live): suppress only confirmed exact source replay
yucelokan Oct 7, 2026
bcadb5d
feat(preview): return cancellable resident frames with measured times…
yucelokan Oct 7, 2026
2a105d8
feat(preview): bound disposable source-backed snapshot work
yucelokan Oct 7, 2026
1da10e6
fix(disc): count a remote disc image's source bytes in telemetry
yipengfei329 Oct 7, 2026
e49f8c5
feat(native): serve VOD loopback segments while they are written
yipengfei329 Oct 7, 2026
114471c
fix(native): report a full segment volume as storageExhausted
yipengfei329 Oct 7, 2026
32854e7
feat(native): hold the picture across the item swap of an audio switch
Oct 7, 2026
99a359c
feat(native): AetherStillView carries the held picture for an AVKit-r…
Oct 7, 2026
30b3cf3
feat(held-picture): the software path and Dolby Vision hold the pictu…
Oct 7, 2026
3bf51f0
Merge branch 'feat/held-picture-audio-switch'
Oct 7, 2026
a385289
chore(release): prep 7.29.0 - audio switches hold the picture, rebuil…
Oct 7, 2026
d15e925
fix(held-picture): re-render a paused item that vends no frame; visio…
Oct 7, 2026
71a299a
test(held-picture): the paused-read tests run off the macOS CI runner…
Oct 7, 2026
6161448
Merge pull request #722 from superuser404notfound/fix/held-still-ci
superuser404notfound Oct 7, 2026
49a9f7e
Merge pull request #716 from yucelokan/codex/timestamped-resident-pre…
Oct 7, 2026
56b2b23
Merge pull request #717 from yucelokan/codex/bounded-source-snapshots
Oct 7, 2026
225f56e
Merge pull request #715 from yucelokan/codex/exact-live-replay-guard
Oct 7, 2026
7e701a7
perf(live): the replay guard hashes the packet buffer in place
Oct 7, 2026
beed2cc
chore(release): prep 7.30.0 - timestamped resident previews, bounded …
Oct 7, 2026
1c41e06
Merge pull request #713 from yucelokan/codex/bounded-vod-source-opening
Oct 8, 2026
1ff3275
docs(api): #713's surface lives in the Transport and LoadOptions tables
Oct 8, 2026
17795d3
Merge pull request #712 from yucelokan/codex/configurable-live-startup
Oct 8, 2026
711ae48
Merge pull request #714 from yucelokan/codex/live-dvr-retention-leases
Oct 8, 2026
7340979
test(source-open): #713's timing steps fire from a thread, not a star…
Oct 8, 2026
63dbe55
Merge branch 'main' into integrate/712-714
Oct 8, 2026
c18b40c
docs(api): #712's and #714's surface lives in the Live and LoadOption…
Oct 8, 2026
3ae61db
chore(release): prep 7.31.0 - VOD open recovery and seek capability, …
Oct 8, 2026
870e4f4
fix(hls): private PES registered as HEVC takes the #268 VOD ingest
Oct 8, 2026
e91b1f3
Merge pull request #723 from superuser404notfound/fix/718-hevc-regist…
superuser404notfound Oct 8, 2026
b085eee
chore(release): prep 7.31.1 - private PES registered as HEVC takes th…
Oct 8, 2026
39389fb
Merge remote-tracking branch 'origin/main' into pr-719
Oct 8, 2026
fef24b0
fix(concurrency): blocking engine work stays off the Swift cooperativ…
Oct 8, 2026
fc2a23e
test: blocking suites run off the cooperative pool, and the races tha…
Oct 8, 2026
54fb637
Merge pull request #725 from superuser404notfound/fix/cooperative-poo…
superuser404notfound Oct 8, 2026
64cb221
Merge remote-tracking branch 'origin/main' into pr-719
Oct 8, 2026
7383a40
Merge pull request #719 from yipengfei329/fix/disc-source-bytes-telem…
superuser404notfound Oct 8, 2026
5643f9d
chore(release): prep 7.31.2 - blocking work off the cooperative pool,…
Oct 8, 2026
6263d42
Merge pull request #721 from yipengfei329/feat/progressive-segment-de…
Oct 8, 2026
2c2b892
fix(native): progressive readers survive a backward seek and a seal t…
Oct 8, 2026
6a14090
Merge pull request #720 from yipengfei329/fix/storage-exhausted-error
Oct 8, 2026
f689b16
fix(native): storageExhausted carries ENOSPC and catches a full volum…
Oct 8, 2026
4b317b7
chore(release): prep 7.32.0 - progressive segment delivery, storageEx…
Oct 8, 2026
080c3cc
fix(network): never shut down or accept on a descriptor number anothe…
Oct 8, 2026
4d03d3b
test: the loopback listener never writes to a closed wake pipe; the A…
Oct 8, 2026
4edabf5
chore(release): prep 7.32.1 - the loopback server never shuts down a …
Oct 8, 2026
a20c4fb
fix(sw): a resume keeps its anchor when the first sample is preroll (…
Oct 8, 2026
874e9b4
test(aetherctl): play judges where a resume lands (#724)
Oct 8, 2026
9d246d8
fix(sw): a resume on an offset-origin source lands on its target (#724)
Oct 8, 2026
59355d9
chore(release): prep 7.32.2 - a software resume lands where it was as…
Oct 8, 2026
eda2349
fix(network): the open's first byte is judged by the open's budget, n…
Oct 8, 2026
31eb7b6
test: the trim check needs one kept chunk, not two
Oct 8, 2026
bc923ad
test: the disc release check counts accepted connections, not open ones
Oct 8, 2026
4b9d768
test: the AE#711 fixture feeds both tracks from one loop that never w…
Oct 8, 2026
4f46e68
chore(release): prep 7.32.3 - the open's first byte keeps its own bud…
Oct 8, 2026
eb6de4d
test: audit every wait against the TestWaiting rule
Oct 8, 2026
9227c1e
fix(hls): declare CHANNELS on the audio rendition, "16/JOC" for E-AC-…
kdorepos Sep 22, 2026
230c406
Merge pull request #727 from kdorepos/pr/hls-audio-channels-attribute
superuser404notfound Oct 8, 2026
77420a6
fix(hls): an untagged Atmos track gets its CHANNELS="16/JOC" renditio…
Oct 8, 2026
db9e915
fix(deps): FFmpegBuild 3.7.0, dec3 keeps a dependent substream's chan…
Oct 9, 2026
d28f89d
chore(release): prep 7.33.0 - a Blu-ray style Atmos track is Atmos in…
Oct 9, 2026
6d672f7
fix(sw): run the renderers on a session origin, not the broadcast clo…
Oct 9, 2026
de49aaf
chore(release): prep 7.33.1 - software sessions stay audible on AirPl…
Oct 9, 2026
fdfd307
fix(transport): a speed set while paused waits for play instead of st…
Oct 9, 2026
e7afcfa
chore(release): prep 7.33.2 - a speed set while paused waits for play…
Oct 9, 2026
339da32
feat(disc): play a Blu-ray BDMV folder over HTTP
yipengfei329 Oct 10, 2026
f24d73c
fix(disc): a title whose clips restart their clock declares a usable …
yipengfei329 Oct 10, 2026
7653abd
fix(disc): seek a Blu-ray title by its clips' EP maps
yipengfei329 Oct 11, 2026
a1d5744
fix(disc): recognize a DVD-Video image that has no ISO9660 bridge
yipengfei329 Oct 11, 2026
19ea366
fix(disc): fold a DVD title by cell and seek it by its time map
yipengfei329 Oct 11, 2026
eae933d
feat(audio): TrueHD object decoder and allocentric renderer for Atmos…
Oct 11, 2026
b1efde2
docs: TrueHD Atmos with heights, and LibTrueHD's license (#731)
Oct 11, 2026
8808422
fix(audio): object renderer review round 1 (#731)
Oct 11, 2026
c420191
feat(audio): APAC encoder and the init rewrite that installs its samp…
Oct 11, 2026
fbb1769
fix(audio): APAC encoder review round 1 (#731)
Oct 11, 2026
e212ef7
feat(audio): TrueHD Atmos keeps its heights, rendered to APAC (#731)
Oct 11, 2026
e90f4ee
fix(audio): spatial bridge review round 1 (#731)
Oct 11, 2026
179e101
feat(audio): prefer TrueHD Atmos within a language when rendering is …
Oct 11, 2026
87ed288
chore(deps): LibTrueHD 2.1.0, x86_64 in the iOS simulator slice (#731)
Oct 11, 2026
64925ec
fix(audio): TrueHD Atmos preference review round 1 (#731)
Oct 11, 2026
ed8f8c7
chore(release): prep 7.34.0 - TrueHD Atmos keeps its heights, rendere…
Oct 11, 2026
3e6b2ee
perf(audio): encode APAC on its own queue while the next chunk decode…
Oct 11, 2026
851f7aa
fix(audio): APAC pipeline review round 1 (#731)
Oct 11, 2026
3678637
fix(audio): settle the APAC bridge at keyframes, not inside the cut (…
Oct 11, 2026
c5debaf
fix(audio): settle the APAC bridge only where routing moves (#731)
Oct 11, 2026
5f8a611
Merge branch 'perf/apac-encode-pipeline' (#731)
Oct 11, 2026
2054ccd
chore(deps): LibTrueHD 2.2.0, TrueHD object decode about 30% faster (…
Oct 11, 2026
cc070bf
chore(release): prep 7.34.1 - TrueHD Atmos seeks about twice as fast …
Oct 11, 2026
3737062
feat(hls): persistent HTTP/1.1 transport for the HLS VOD ingest under…
Oct 11, 2026
60f5cc9
Merge branch 'feat/hls-persistent-http1' (#732)
Oct 11, 2026
a3785ca
fix(audio): ceiling speakers sit at TS 103 448's panner targets
kristofferR Oct 11, 2026
beb11d9
test(audio): pin the top front centre bed channel's target
kristofferR Oct 11, 2026
6f33409
fix(audio): objects play from the first frame after a seek in TrueHD …
kristofferR Oct 11, 2026
e9e2cdf
fix(audio): hold again on a new configuration, and release held block…
kristofferR Oct 11, 2026
8a5a04e
fix(audio): TrueHD Atmos rendered to APAC lights Atmos on tvOS
kristofferR Oct 11, 2026
54d8bfc
docs(audio): the activator is for sinks that do not show Atmos for AP…
kristofferR Oct 11, 2026
bc50c91
Merge pull request #734 from yipengfei329/feat/bdmv-folder-over-http
Oct 11, 2026
600fb6a
fix(disc): a stop unblocks a read parked in a BDMV folder clip (#734)
Oct 11, 2026
6286d0e
fix(native): track format descriptions load off the main actor (#735)
Oct 11, 2026
765f562
Merge branch 'fix/735-format-descriptions-off-main' (#735)
Oct 12, 2026
a8ef92d
chore(release): prep 7.35.0 - BDMV folders over HTTP, persistent HTTP…
Oct 12, 2026
05503c6
Merge pull request #736 from yipengfei329/feat/bluray-clpi-seek
Oct 12, 2026
d64d784
fix(disc): a Blu-ray folder seeks by its clips' EP maps too (#736)
Oct 12, 2026
a07fdb7
fix(segment): drain the interleaver before the teardown flush
Oct 12, 2026
c42f90d
chore(deps): FFmpegBuild 3.7.1, movenc no longer aborts on a queued p…
Oct 12, 2026
95bd1a7
chore(release): prep 7.35.1 - a torn-down segment muxer no longer abo…
Oct 12, 2026
60ac862
Merge branch 'fix/movenc-single-sample-fragment': a torn-down segment…
Oct 12, 2026
bf225f9
test(segment): gate the movenc exit test to macOS
Oct 12, 2026
0b4a1f0
Merge PR #737 'fix/udf-only-dvd-image': recognize a DVD-Video image t…
Oct 12, 2026
4666e3d
Merge PR #738 'fix/dvd-cell-timeline': fold a DVD title by cell and s…
Oct 12, 2026
1221167
fix(display): an SDR master's refusal no longer latches the HDR route…
Oct 12, 2026
004eea2
Merge PR #749 'fix/535-latch-hdr-master-only': an SDR master's refusa…
superuser404notfound Oct 12, 2026
7fe4845
fix(sw): recover the VideoToolbox session a screen lock invalidates (…
Oct 12, 2026
fd9c921
fix(diagnostics): preserve the custom-source probe failure cause
yucelokan Oct 11, 2026
e3f98ab
fix(demux): align origin-slot completion with playback priority
yucelokan Oct 11, 2026
4cab379
fix(live): renew playlists when segment duration outgrows the seal
yucelokan Oct 11, 2026
3149b39
Merge PR #750 'fix/739-vt-session-loss': the VideoToolbox session a s…
superuser404notfound Oct 12, 2026
9d4b20c
Merge PR #740 'fix/apac-atmos-output': loop silent Dolby Atmos beside…
Oct 12, 2026
bf7b139
fix(audio): a media services reset drops the Atmos output activator's…
Oct 12, 2026
329a072
fix(audio): the surround-downmix warning reads the sink's advertised …
Oct 12, 2026
23f548c
Merge PR #751 'fix/mat-carrier-downmix-warning': the surround-downmix…
superuser404notfound Oct 12, 2026
9ccc3ad
fix(live): preserve replay evidence across native and software recovery
yucelokan Oct 11, 2026
1b0cb2d
fix(native): recover missing video independently of audio progress
yucelokan Oct 12, 2026
48c6aaf
fix(live): preserve complete video pictures across truncated replay
yucelokan Oct 12, 2026
efd30fc
docs: record strict-pool validation and unrelated CI failure
yucelokan Oct 12, 2026
bcefdef
feat(audio): DTS:X object decoder over LibDTSX
kristofferR Oct 12, 2026
070849e
feat(audio): DTS:X keeps its heights, rendered to APAC
kristofferR Oct 12, 2026
0fa1e35
feat(audio): prefer DTS:X within a language when rendering is on
kristofferR Oct 12, 2026
f2bd8e2
docs: DTS:X with heights, and LibDTSX's license
kristofferR Oct 12, 2026
9f888d5
fix(dv): convert Profile 7 to 8.1 on every display, not only a DV one
Oct 12, 2026
1f36104
fix(audio): prefer object audio only where APAC exists
kristofferR Oct 12, 2026
c53cf05
chore(deps): pin LibDTSX 1.0.0
kristofferR Oct 12, 2026
391cb68
Merge pull request #754 from superuser404notfound/fix/p7-rpu-on-every…
superuser404notfound Oct 12, 2026
7c2cf57
Merge pull request #741 from kristofferR/fix/object-audio-hold-before…
Oct 13, 2026
c2f70cb
fix(audio): a segment cut releases the blocks the object decoder holds
Oct 13, 2026
fca9a00
chore(deps): LibTrueHD 2.2.1, rust_eh_personality exported weak (#752)
Oct 13, 2026
a16e511
Merge branch 'main' into fix/spatial-ceiling-positions
Oct 13, 2026
8657a25
Merge pull request #742 from kristofferR/fix/spatial-ceiling-positions
superuser404notfound Oct 13, 2026
510826d
fix(audio): a 5.1 bed's surrounds sit at TS 103 448's panner targets
Oct 13, 2026
54e3b8e
Merge pull request #757 from superuser404notfound/fix/spatial-five-on…
superuser404notfound Oct 13, 2026
a4e387b
docs(used-by): add GiVo Stream
superuser404notfound Oct 13, 2026
833a9f1
Merge pull request #758 from superuser404notfound/used-by/issue-743
superuser404notfound Oct 13, 2026
cee2ccc
chore(deps): LibTrueHD 2.3.0, TrueHD object decode about a third fast…
Oct 13, 2026
5fe5ee9
Merge branch 'main' into feat/dtsx-apac
Oct 13, 2026
37fccad
fix(audio): DTS:X verdict reads where playback starts, bounded in bytes
Oct 13, 2026
c3676f2
test(io): the in-flight tail wait test is bounded by the suite, not b…
Oct 13, 2026
eada970
test(ingest): the chunked accumulation bar samples until it holds, up…
Oct 13, 2026
a82a599
test(held-picture): the playing capture waits long enough to tell a h…
Oct 13, 2026
398fc5b
fix(io): a playlist served without a length is classified on the forw…
Oct 13, 2026
b0e88d1
Merge branch 'fix/ae733-playlist-on-forward-only-open'
Oct 13, 2026
8330232
chore(deps): LibDTSX 1.0.1 from superuser404notfound (#752, #755)
Oct 13, 2026
b84557c
Merge branch 'feat/dtsx-apac': DTS:X with heights through APAC (#744,…
Oct 13, 2026
371d46a
docs(cli): --atmos-bed renders DTS:X too, and the lines that say whic…
Oct 13, 2026
306e393
docs(formats): escape the colon in the DTS:X heading so the website b…
Oct 13, 2026
4a5b758
Merge pull request #745 from yucelokan/fix/custom-source-probe-error-…
superuser404notfound Oct 13, 2026
67fdcee
docs(changelog): file the #745 probe-cause entry under Unreleased
Oct 13, 2026
ea3e4fc
Merge pull request #746 from yucelokan/fix/playback-origin-callback-p…
superuser404notfound Oct 13, 2026
b141b14
fix(io): a rate-limited detour block is charged to the origin once (#…
Oct 13, 2026
397dcf7
Merge pull request #747 from yucelokan/fix/live-replay-recovery
Oct 13, 2026
7a6fc2f
fix(live): exhausted replay still reaches a host that only knows live…
Oct 13, 2026
c6365cc
chore(release): prep 7.36.0 - DTS:X keeps its heights, a repeated liv…
Oct 13, 2026
74c81b3
Merge PR #748 'fix/live-playlist-duration-renewal': renew the live pl…
Oct 13, 2026
4ab3e3c
Merge upstream AetherEngine 7.36.0 (74c81b3c) into the Silo fork
Quick104 Oct 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,15 @@ jobs:
if: ${{ !cancelled() && steps.swift-tests.outcome != 'skipped' }}
run: swift test --skip-build --filter "$AUTHORIZATION_TEST_SUITES"

# The same Swift Testing suite on a ONE-thread cooperative pool. Anything that blocks a pool
# thread (a sync read, a semaphore, a `Task.detached` around engine I/O) starves every other
# test here deterministically, instead of a different victim timing out on some later run of
# the 3-core runner. See docs/architecture.md, "Blocking work and the cooperative pool".
- name: swift test (one-thread cooperative pool)
env:
LIBDISPATCH_COOPERATIVE_POOL_STRICT: "1"
run: swift test --skip-build --disable-xctest

- name: Software VOD packet-cache regressions
run: |
bash Scripts/test-software-packet-coverage.sh
Expand Down
431 changes: 424 additions & 7 deletions CHANGELOG.md

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion Examples/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Three samples covering different audiences:
```
https://github.com/superuser404notfound/AetherEngine
```
Dependency Rule: Up to Next Major Version, starting from `7.28.3`. Add the `AetherEngine` library product to your app target.
Dependency Rule: Up to Next Major Version, starting from `7.36.0`. Add the `AetherEngine` library product to your app target.

3. **Drop the file in.** Replace the Xcode template's default `App.swift` (or whatever the generated `@main` file is called) with the contents of [`MinimalPlayerApp.swift`](MinimalPlayer/MinimalPlayerApp.swift). The file is self-contained: it defines both the `@main App` struct and the `ContentView`.

Expand Down
19 changes: 14 additions & 5 deletions Package.resolved

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 12 additions & 4 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ let package = Package(
// rebuilds still reach existing tags, which is where a pure rebuild
// belongs; anything that adds slices or enables a component is a minor
// and reaches consumers through an engine release.
.package(url: "https://github.com/superuser404notfound/FFmpegBuild", .upToNextMinor(from: "3.6.0")), // 3.6.0: an MPEG-TS audio PID is identified by its payload when its label does not name the codec: the raw dts / truehd / loas demuxers are in, so the mpegts content probe can confirm DTS, TrueHD and LATM at all (without them the lenient mp3 probe named the track, whatever the label), and a PID labelled 0x03 (MPEG-1 audio) gets the same content probe as 0x04; a DTS-HD IPTV channel opened as mp3 and never produced a frame (#641); same n8.1.3 otherwise; 3.5.0: FFmpeg n8.1.3, 268 upstream commits over n8.1.2, of which six touch code this engine ships: VP9 kept `next_refs[]` referenced across `avcodec_flush_buffers()`, so a worker could reseed its references from the pre-flush set and the first inter frame after a seek decoded against released buffers (heap OOB read and write, and this engine decodes VP9 with frame threading and flushes on every reposition); the Dolby Vision RPU parser trims trailing zero padding again, which n8.1.2 had stopped doing, so a padded RPU no longer fails the ext-block size check and loses its dynamic metadata, and the RPU partition counts are bounded; a VC-1 picture ending on a one-bit skipped macroblock keeps that macroblock instead of falling into error concealment; the `dca_core` bsf clears the profile it has just stripped; and a container channel layout survives a failed decoder open during probing. Same dav1d 1.5.4, zimg 3.0.6 and libzvbi 0.2.45 (all current upstream), same component set, same six local patches, unchanged soname majors; 3.4.0: FFmpeg learns the `dav1` sample entry in both directions, the AV1 variant of `av01` that signals Dolby Vision, so a Profile 10.0 source can be read at all and can be remuxed with the tag its packaging requires; stock FFmpeg has it in neither of its two mp4 tag tables, so the read probes as "unknown codec" and the write fails EINVAL (#547); same n8.1.2 binaries as 3.3.0 otherwise, compiled against the Xcode 27 SDKs with unchanged deployment targets; 3.3.0: every slice a shipped app can embed carries its dSYM inside the xcframework, so Xcode copies it into `.xcarchive/dSYMs` and a crash inside FFmpeg symbolicates instead of staying a list of addresses (FFmpegBuild#4); same n8.1.2 binaries as 3.2.1 apart from their UUID, the libraries just compile with `-gline-tables-only` now and the debug map is harvested before the shipped binary is stripped; 3.2.1: vc1_parser seeds its parse context from extradata, so a seek landing on an entry point alone keeps its picture size instead of falling back to 0x0 or to a size read out of the following payload (#490, FFmpeg PR 24458); 3.2.0: the legacy Flash tail, video and audio together (flv1 / vp6 / vp6f / vp6a, nellymoser, adpcm_swf, speex, and FLV's pcm_s16be / pcm_u8 / pcm_alaw / pcm_mulaw), so a pre-2008 .flv plays with sound where before only H.264-in-FLV did; flashsv stays out, it needs zlib and would have been dropped silently; 3.1.0: native .wmv / .asf, the asf demuxer plus every WMA decoder (Standard, Pro, Lossless, Voice), which is the container half of the legacy Microsoft support 2.4.3 started (FFmpegBuild#3); 3.0.0: every target, product, framework bundle and install name carries an `Aether` prefix, so this build can sit in an app that already has an FFmpeg (FFmpegKit, MobileVLCKit, mpv); same n8.1.2 binaries as 2.5.0, only names changed; 2.5.0: libzvbi 0.2.45 for GHSA-86rm-g7qf-j2fh (OOB read/write + integer underflow, reachable through the libzvbi_teletext decoder), dav1d 1.5.4, zimg 3.0.6, and the concat demuxer removed (a script demuxer selectable by probing alone, which made any stream a potential file-open primitive); 2.4.3: the legacy Microsoft video decoders (msmpeg4v1/v2/v3, wmv1/wmv2/wmv3; FFmpegBuild#3); 2.4.2: pgssubdec missing-palette recovery, replaces the 2.1.1 Epoch-Continue retain (#142); 2.4.1: qtrle decoder; 2.4.0: visionOS (xros) device + simulator slices; 2.3.0: webvtt demuxer (standalone .vtt sidecars, plus the cue settings as packet side data); 2.2.0: matroska TTS warn-only per RFC 9559 (#145 rework); 2.1.3: sup demuxer (raw PGS sidecars); 2.1.2: matroska TrackTimestampScale clamp (#145, dropped in 2.2.0); 2.1.1: pgssubdec Epoch-Continue retain (#142); 2.1.0: yadif_videotoolbox + hwupload (Metal GPU deinterlace); 2.0.0: dynamic frameworks (LGPL), zvbi GPL excision
.package(url: "https://github.com/superuser404notfound/FFmpegBuild", .upToNextMinor(from: "3.7.1")), // 3.7.1: the mp4 muxer no longer aborts the process when a fragment is flushed with a packet still queued in the interleaver behind the samples already written for its track (check_pkt had clamped them past it, so get_cluster_duration hit av_assert0(next_dts >= 0)); same n8.1.3 otherwise; 3.7.0: the mp4 muxer's dec3 box describes a DD+ track whose height channels and Atmos objects live in a dependent substream (Blu-ray style AC-3 core plus E-AC-3 dependent frame): chan_loc is derived from chanmap per TS 102 366 (upstream f10fdd6310, backported) and the TS 103 420 JOC extension is taken from the dependent substream too, so such a track is no longer described as a bare 5.1 bed and an Atmos receiver no longer reports multichannel PCM (#728); same n8.1.3 otherwise; 3.6.0: an MPEG-TS audio PID is identified by its payload when its label does not name the codec: the raw dts / truehd / loas demuxers are in, so the mpegts content probe can confirm DTS, TrueHD and LATM at all (without them the lenient mp3 probe named the track, whatever the label), and a PID labelled 0x03 (MPEG-1 audio) gets the same content probe as 0x04; a DTS-HD IPTV channel opened as mp3 and never produced a frame (#641); same n8.1.3 otherwise; 3.5.0: FFmpeg n8.1.3, 268 upstream commits over n8.1.2, of which six touch code this engine ships: VP9 kept `next_refs[]` referenced across `avcodec_flush_buffers()`, so a worker could reseed its references from the pre-flush set and the first inter frame after a seek decoded against released buffers (heap OOB read and write, and this engine decodes VP9 with frame threading and flushes on every reposition); the Dolby Vision RPU parser trims trailing zero padding again, which n8.1.2 had stopped doing, so a padded RPU no longer fails the ext-block size check and loses its dynamic metadata, and the RPU partition counts are bounded; a VC-1 picture ending on a one-bit skipped macroblock keeps that macroblock instead of falling into error concealment; the `dca_core` bsf clears the profile it has just stripped; and a container channel layout survives a failed decoder open during probing. Same dav1d 1.5.4, zimg 3.0.6 and libzvbi 0.2.45 (all current upstream), same component set, same six local patches, unchanged soname majors; 3.4.0: FFmpeg learns the `dav1` sample entry in both directions, the AV1 variant of `av01` that signals Dolby Vision, so a Profile 10.0 source can be read at all and can be remuxed with the tag its packaging requires; stock FFmpeg has it in neither of its two mp4 tag tables, so the read probes as "unknown codec" and the write fails EINVAL (#547); same n8.1.2 binaries as 3.3.0 otherwise, compiled against the Xcode 27 SDKs with unchanged deployment targets; 3.3.0: every slice a shipped app can embed carries its dSYM inside the xcframework, so Xcode copies it into `.xcarchive/dSYMs` and a crash inside FFmpeg symbolicates instead of staying a list of addresses (FFmpegBuild#4); same n8.1.2 binaries as 3.2.1 apart from their UUID, the libraries just compile with `-gline-tables-only` now and the debug map is harvested before the shipped binary is stripped; 3.2.1: vc1_parser seeds its parse context from extradata, so a seek landing on an entry point alone keeps its picture size instead of falling back to 0x0 or to a size read out of the following payload (#490, FFmpeg PR 24458); 3.2.0: the legacy Flash tail, video and audio together (flv1 / vp6 / vp6f / vp6a, nellymoser, adpcm_swf, speex, and FLV's pcm_s16be / pcm_u8 / pcm_alaw / pcm_mulaw), so a pre-2008 .flv plays with sound where before only H.264-in-FLV did; flashsv stays out, it needs zlib and would have been dropped silently; 3.1.0: native .wmv / .asf, the asf demuxer plus every WMA decoder (Standard, Pro, Lossless, Voice), which is the container half of the legacy Microsoft support 2.4.3 started (FFmpegBuild#3); 3.0.0: every target, product, framework bundle and install name carries an `Aether` prefix, so this build can sit in an app that already has an FFmpeg (FFmpegKit, MobileVLCKit, mpv); same n8.1.2 binaries as 2.5.0, only names changed; 2.5.0: libzvbi 0.2.45 for GHSA-86rm-g7qf-j2fh (OOB read/write + integer underflow, reachable through the libzvbi_teletext decoder), dav1d 1.5.4, zimg 3.0.6, and the concat demuxer removed (a script demuxer selectable by probing alone, which made any stream a potential file-open primitive); 2.4.3: the legacy Microsoft video decoders (msmpeg4v1/v2/v3, wmv1/wmv2/wmv3; FFmpegBuild#3); 2.4.2: pgssubdec missing-palette recovery, replaces the 2.1.1 Epoch-Continue retain (#142); 2.4.1: qtrle decoder; 2.4.0: visionOS (xros) device + simulator slices; 2.3.0: webvtt demuxer (standalone .vtt sidecars, plus the cue settings as packet side data); 2.2.0: matroska TTS warn-only per RFC 9559 (#145 rework); 2.1.3: sup demuxer (raw PGS sidecars); 2.1.2: matroska TrackTimestampScale clamp (#145, dropped in 2.2.0); 2.1.1: pgssubdec Epoch-Continue retain (#142); 2.1.0: yadif_videotoolbox + hwupload (Metal GPU deinterlace); 2.0.0: dynamic frameworks (LGPL), zvbi GPL excision
// Pure-Swift SMB2 client (MIT) that speaks the protocol over
// NWConnection. Replaces AMSMB2/libsmb2, which EPERMs on tvOS/iOS.
// Pinned to the 0.3.x minor: SMBClient is pre-1.0 with an actively
Expand All @@ -53,9 +53,14 @@ let package = Package(
// floor instead of backing off, so all of 5.x stopped resolving.
.package(url: "https://github.com/superuser404notfound/LibDovi", .upToNextMinor(from: "2.1.0")), // 2.1.0: dolby_vision 3.4.0, header additive only (two new CMv4.0 metadata entry points, nothing removed); 2.0.0: visionOS (xros) device + simulator slices, declared tvOS floor corrected to 17.0 (was published as 1.1.0, withdrawn: a floor raise is breaking and broke every 5.x pin that floated onto it); 1.0.2: iOS slices + x86_64 (Intel Macs)
// TrueHD decoder that also decodes the Atmos object presentation (beds, objects, OAMD) for
// `objectAudioRendering`. The Rust `truehd` crate (Apache-2.0) behind a C API, prebuilt as an
// xcframework like LibDovi so consumers need no Rust. Pinned to the minor for the same reason.
.package(url: "https://github.com/superuser404notfound/LibTrueHD", .upToNextMinor(from: "2.0.0")), // 2.0.0: SiloObjectAudio renamed after its transfer (AE#731): package LibTrueHD, product, module and xcframework TrueHD, same decoder and C API; 1.0.0: first release, as SiloObjectAudio
// `objectAudioRendering` (#731). The Rust `truehd` crate (Apache-2.0) behind a C API, prebuilt
// as an xcframework like LibDovi so consumers need no Rust. Pinned to the minor for the same reason.
.package(url: "https://github.com/superuser404notfound/LibTrueHD", .upToNextMinor(from: "2.3.0")), // 2.3.0: decodes about a third faster again (harletty's truehd speed work: blocks decoded in place, table-driven Huffman, vectorised prediction filters, whole-block matrices; truehdd#42 included), byte-identical output; 2.2.1: rust_eh_personality exported weak, so it coalesces with LibDovi's copy and a host with its own Objective-C and C++ stays within compact unwind's three personality routines (#752); same decoder; 2.2.0: decodes about 30% faster (the truehd crate with its block and PCM buffers sized to the samples they hold, truehdd#42, from a fork of upstream main until that is merged), byte-identical output; 2.1.0: x86_64 in the iOS simulator slice, so a generic iOS Simulator build of a host links; same decoder; 2.0.0: transferred from Silo-Server/SiloObjectAudio and renamed (product TrueHD), rebuilt from source; same decoder as SiloObjectAudio 1.0.0
// DTS:X decoder for `objectAudioRendering`: lossless DTS-HD MA with the encoder's height and object
// folds removed from the bed, the fixed heights, and the alternate presentations' objects placed in
// the same room coordinates as LibTrueHD's. The Rust `dca` crate (Apache-2.0) behind a C API,
// prebuilt as an xcframework like LibTrueHD. Pinned to the minor for the same reason.
.package(url: "https://github.com/superuser404notfound/LibDTSX", .upToNextMinor(from: "1.0.1")), // 1.0.1: rust_eh_personality weak (#752); dca 0.8.0 (harletty-bridge a717bae); the first two frames after a start or seek only prime the decoder
],
targets: [
.target(
Expand All @@ -64,7 +69,10 @@ let package = Package(
.product(name: "AetherFFmpegBuild", package: "FFmpegBuild"),
.product(name: "Dovi", package: "LibDovi"),
.product(name: "TrueHD", package: "LibTrueHD"),
.product(name: "DTSX", package: "LibDTSX"),
],
// Silent E-AC-3 Atmos that `AtmosOutputActivator` loops beside an APAC track on tvOS.
resources: [.copy("Resources/silent-atmos.mp4")],
linkerSettings: [
.linkedFramework("AVFoundation"),
.linkedFramework("AVKit"),
Expand Down
Loading