Skip to content

5.2.0

Choose a tag to compare

@superuser404notfound superuser404notfound released this 16 Jul 12:05

Software-path live raw-TS playback and teletext subtitles, validated end to end against Australian FTA broadcasts (#107).

Added

  • Teletext subtitles render on the overlay with page-state semantics (#107). DVB teletext (libzvbi) captions now reach subtitleCues on every software session shape. libzvbi emits page content open-ended ("until replaced") and page erases as rect-less clear events; both now carry a text trim that closes earlier open cues at the event start, so live roll-up captions build and replace cleanly instead of accumulating. Open-ended windows are additionally capped at 120 s as a ghost-line bound. Validated against 1080i25 H.264 with captions on page 801, deinterlaced through the existing bwdif path. Thanks to tresby for the tuner access that made the live validation possible.
  • aetherctl play. Full load+play session smoke test: 1 Hz transport telemetry, --live / --dvr-window, --subs <codec-or-lang> cue logging, and --host-calls mimicry of host post-load call sequences. Fails loud when the clock does not advance or a selected subtitle track produces no cues, the two silent failure modes this release fixes.

Fixed

  • Mid-stream-joined sources no longer freeze on the first frame (#107). A live tuner MPEG-TS opened without isLive, live without a DVR window, or a capture file cut mid-broadcast delivers its first samples hours past the load anchor; the combined demux loop armed the synchronizer at the load anchor (0 on a fresh load), scheduling every A/V sample far in the future: one frame rendered, then video froze with silent audio. The clock now re-anchors at the first decoded sample PTS when it deviates from the load anchor by more than 2 s (SWClockAnchorPolicy); positions stay session-relative through the anchor's session zero while sourceTime rides the raw source axis, matching the native path's currentTime/sourceTime split. Head-of-stream offsets and resume alignment are preserved by the tolerance.
  • Live-DVR sessions feed subtitle packets again (#107). The live reader loop only ring-buffered audio/video; subtitle packets never reached the session packet store, starving the overlay drainer on every live+DVR session.
  • Host rate changes before clock arming no longer wedge the session (#107). A setRate issued between load() and the demux loop's clock arming requested a rate at a clock time where no media will ever exist; AVSampleBufferRenderSynchronizer's delayed-rate-change machinery then held the effective rate at 0 permanently, freezing the session while the reader kept filling. setRate / pause / play-resume now gate the synchronizer call on the armed-clock latch, and arming applies the latest host rate. AudioOutput logs every clock mutation (seekClock / setRate / pause) for future transport diagnostics.

Host adoption notes

  • Raw live sources (tuner MPEG-TS over HTTP) should load with isLive: true and a dvrWindowSeconds; SourceProbe.isLive flags no-duration network streams so hosts can reload accordingly.
  • Teletext text cues arrive on subtitleCues like every other text codec; hosts render them in their own overlay (there is no native AVKit caption rendering on the software path).