Skip to content

3.6.0

Choose a tag to compare

@superuser404notfound superuser404notfound released this 16 Jun 21:03
· 68 commits to main since this release

Added

  • SSAI ad-pod direct play for FAST channels. Server-side-ad-inserted live streams (Pluto and similar) now play their ad pods through the direct path instead of falling back to a server transcode. The producer detects a program switch when an ad creative arrives on a different video PID, parses the ad's SPS/PPS by hand to build a fresh codec config, rotates the fMP4 muxer, and emits a versioned #EXT-X-MAP per discontinuity so AVPlayer resyncs cleanly across the init and resolution change. A no-cut stall watchdog stays underneath as a safety net.
  • AES-128 clear-key direct play. Live HLS encrypted with full-segment METHOD=AES-128 (clear-key, the standard FAST-channel scheme) now direct-plays: EXT-X-KEY is parsed, the key fetched and memoised, and each segment decrypted (AES-128-CBC / PKCS7) before demux. SAMPLE-AES and keyless variants still fall back. Standard HLS, not FairPlay / Widevine.

Fixed

  • SSAI ad-pod audio sync. Audio across an ad pod is re-anchored to the video timeline at every creative boundary so it cannot accumulate drift, with an output-timestamp sanitizer at the muxer keeping the stream monotonic across the splice. Final case: amux ad creatives mux audio on a different source clock than video (audio near 2^33, video from 0); copying the video shift verbatim launched audio far into the future and hung the renderer. The audio shift is now derived from each stream's own boundary timestamp against the shared seam, sample-exact for any source base.
  • Transient slow live segment no longer tears down the session. The no-cut watchdog now distinguishes a cutter wedge (reading fast, cannot cut) from source starvation (barely reading) and gives a slow segment a backstop past the ingest reader's own retry budget, so it recovers instead of escalating to a host retune.

Changed

  • High-frequency live trace (per-request local-server lines, per-segment captures) now logs at OSLog .debug level and is not mirrored to the host log handler. Retrieve on demand with log stream --level debug.
  • A successful SDR rate-only display switch (Match Frame Rate on a 50/60 fps stream) no longer logs a misleading "panel stayed SDR despite HDR criteria" warning; that warning is now reserved for genuine HDR handshake failures.

See CHANGELOG.md.