Skip to content

AetherEngine 1.3.1

Choose a tag to compare

@superuser404notfound superuser404notfound released this 23 May 12:16
· 457 commits to main since this release

AetherEngine 1.3.1

Patch release on top of 1.3.0. Two production fixes plus one diagnostic.

Producer: empty-cache restart now fires after far scrubs

mediaSegment(at:)'s empty-cache decision used to fall back to a "wait for cold-start producer" branch whenever index ≤ 2, assuming the only context in which the cache became empty was right after a fresh producer launch at baseIndex 0. A scrub-forward followed by a scrub-back exposed the assumption: after the cache window slid away from the current producer (now at baseIndex 1314 after a forward scrub), a subsequent back-scrub to seg-0 hit an empty cache, fell into the "wait" branch, and AVPlayer timed out for 30 s before getting a 404 with CoreMediaErrorDomain -12938.

Fix tracks lastRestartIndex on the segment provider and restarts when |index − lastRestartIndex| > 2. Cold start (lastRestartIndex = 0, AVPlayer requests seg-0) still waits; back-scrubs to a position far from the producer trigger a clean restart at the requested index.

DV Profile 5: master playlist on HDR-ready non-DV panels

1.3.0 routed every non-DV-capable panel's DV5 source via the media playlist. That works on SDR-locked panels (where tvOS 26 rejects bare dvh1.05 master CODECS with -11868), but on an HDR-capable non-DV panel currently in HDR mode it forced a DV→SDR tonemap when DV→HDR10 would have been the better choice. Per DrHurt's #63 morning test on AetherEngine#4, the master path is accepted on HDR-capable non-DV panels and tonemaps to HDR10 properly.

New per-state matrix for DV5:

Panel state Routing
DV-capable in DV mode master (unchanged)
DV-capable SDR-locked, match off media (unchanged)
Non-DV in HDR mode master (changed, was media)
Non-DV SDR-locked, match off media (unchanged, master gets -11868)

DV8.1 and DV8.4 dispatch unchanged.

Diagnostic: A/V gap at audio gate

The [HLSSegmentProducer] audio gate open: log line now reports the source-time gap between video's first kept packet and audio's first kept packet (gapMs=X.X). A separate WARNING line fires when the gap exceeds 50 ms, surfacing lip-sync drift in support logs without needing to read frame headers.

Engine pin

For Sodalite hosts: bump Package.resolved to 44c3a05 (or use the 1.3.1 tag).