3.7.0
·
10 commits
to main
since this release
Added
isSeeking/seekTargetpublished seek signal.AetherEngine.isSeekingis true from seek entry until the seek physically lands (not the optimistic.playingflip), uniform across programmaticseek(to:)and native AVKit transport-bar scrubs.seekTargetcarries the in-flight destination on the source-PTS axis. A host coordinating playback across devices can gate on these to tell a deliberate seek from a rebuffer or underflow skip without inferring it fromcurrentTimejumps. (#38)AetherEngine.maxSupportedRate. Exposes the highest forward rate the active path plays reliably (2.0 for video, 3.0 for an audio-only session) so a host can size its speed picker against the real cap. (#39)
Fixed
- Seek on the native loopback-HLS path no longer bounces back through the pre-seek position. A seek wrote the target clock optimistically and flipped state back to
.playingwithout waiting for AVPlayer's seek to physically land, so the 100 ms periodic time observer kept publishing the stale pre-seek clock until the seconds-late loopback seek completed.seek(to:)now awaits the real AVPlayer completion, and the native host suppresses the periodic observer's stale reads while a seek is in flight, so the clock holds the target across the landing. (#37) - Hang on MKV sources with a missing or out-of-bounds Cues index. When a file's Cues seek index is absent or points past EOF (truncated / mis-muxed remux), libavformat's matroska seek degrades the VOD cue-prewarm into a multi-GB linear forward scan, tens of minutes (a de-facto hang) on a large remote source. The prewarm seek is now bounded by a deadline; on timeout it falls back to the existing segment plan so playback starts promptly. Healthy files are unaffected. (#41)
- Playback above 2x no longer goes abnormal. AVPlayer's HLS fast-forward is undefined above 2x for video (an audio-only session plays cleanly to 3x); driving a higher rate sent both audio and video abnormal.
setRate(_:)now clamps the requested rate to the path's ceiling. (#39)
Acknowledgements
- @RomanLiberda for the Cues-index hang fix (#41), device-verified at 1h to 11s on a 72 GB source.
- @rrgomes for the precise root-cause analysis of the seek clock-bounce and the in-flight-signal capability request (#37, #38).
- @utopiaraw for reporting the above-2x instability and @DrHurt for pinning the AVPlayer rate ceiling (#39).
Public API additions: AetherEngine.isSeeking, AetherEngine.seekTarget, AetherEngine.maxSupportedRate. Source-compatible (minor bump).