5.0.0
Major release. The embedded subtitle overlay pipeline was rebuilt from the ground up, and one public symbol was renamed.
Breaking
setNativeSubtitleForPiP(_:)is nowsetNativeSubtitleRendering(_:). The native WebVTT legible rendition is selected whenever the video leaves the host's own view hierarchy (a PiP window, an AirPlay receiver, or a wired external display), not just PiP. Pure rename, no behavior change: update the call site and you are done.
Changed
- Embedded subtitle overlay pipeline reworked: packet tap replaces the side-demuxer readers (#112). The overlay path used to open a second demuxer per selected embedded subtitle track and seek it around to reconstruct stateful PGS lines after seeks, fast-forwards, and audio switches. That model needed eleven rounds of hardening and still regressed on index-starved remote sources. The producer now retains every embedded subtitle stream it already demuxes in a compressed
SubtitlePacketStore(300 s / 32 MB), and a playhead-paced drainer decodes cues from the store, running the same stale-arrival gate, successor trim, and retention rules as before. The software host feeds the store through its own tap. The side readers, reuse pool, re-arm coalescing, condemned latch, and cross-thread read-abort chain are deleted (~1350 lines). No extra connections, no reconstruction seeks: post-seek recovery is bounded by decode speed, not remote I/O.
Added
bufferedPositionfor host scrub bars (#33). Reports the disk cache's contiguous read-ahead frontier on native direct play so hosts can draw a buffered band.- Interlaced live TV (#107). Interlaced H.264 routes to the software path with bwdif deinterlacing; DVB teletext decodes through libzvbi into WebVTT cues.
- Cache-backed VOD scrub stills (#106). Single-connection VOD sources render scrub thumbnails from the segment cache instead of opening a second origin connection.
- Remote-HLS audio tap delivery (#95).
installAudioTap()now delivers on the remote-HLS path (VOD and live), withaudioTapHasDeliverySourcefor host fail-loud andaetherctl audiotap --remotefor verification. - Subtitle-preserving reduced-master fallback (#98). Display-rejection fallback stages master to reduced to media, keeping HDR and subtitle renditions;
nativeSubtitleRenditionsServedis published for host external-subtitle windows. SubtitleImage.canvasSize(#112). Bitmap cues carry their composition canvas size so hosts can map them onto the rendered video rect (defaulted, source-compatible).- Stats surface. Declared source video bitrate (Matroska
BPSfallback), nominal frame rate, audio bitrate, and bridge output.
Fixed
- Multi-clip / multi-title Blu-ray timeline (#105). Fold on observed clip bases rather than MPLS inTime, 0-based display axis, decoy-playlist defeat, MPLS duration trust, selected-title stills.
- DV P5 still tone-map (#103). Matches libplacebo BT.2390 and applies the RPU reshaping curves.
- Backward-scrub cold read reconnects fast (#93, #96). The starved detour fetch is bounded to a ~4 s budget instead of riding the 15/35 s socket timeouts.
- Stall-recovery nudge reads the rendered frame (#115), instead of a stale pre-grace capture that skipped VOD playback backward on re-engage.
- AVAudioSession category declared off-main (#114), clearing the hang-risk diagnostic from the engine constructor.
- Cold DV/HDR master start gates on real track readiness (#35), and the backpressure wedge detector is suspended until the first rendered frame.
- Resolved content lengths shared across demuxer opens (#112) via
SourceContentLengthCache, so a starved size probe no longer collapses an open to forward-only streaming. - Synthetic PGS END flush gated on a complete object (#112), clearing "Invalid object id 0" on split m2ts.
- Native legible renditions (Sodalite#38): no
FORCED=YESon host-managed renditions, deselected in fullscreen until the host selects. The deselect is pinned unconditionally as soon as the legible group loads and re-asserted on a 40 ms cadence for the first second, so a system caption preference no longer flashes cues for up to ~0.5 s at video start on iOS. - Wired HDMI external display keeps loopback + master (Sodalite#34).
Thanks to ijuniorfu, dlev02, fubag, tresby, and rrgomes for the reports, logs, and retests that drove this release.
Full diff: 4.12.1...5.0.0