Skip to main content
Version: v2

Changelog

[11.10.0] - 2026-09-18​

  • Added Low-Latency HLS and HESP-3 output to every channel, no configuration needed: main.m3u8 keeps serving standard HLS, while main.hesp.m3u8 serves the same renditions with partial segments and the HESP-3 tags. Every playlist accepts a latency query parameter (milliseconds) naming the end-to-end latency the player asks for and is sized for it: HOLD-BACK (now declared on every playlist) and PART-HOLD-BACK follow the buffer that latency leaves the player once the encoder's share is spent, the HESP-3 multivariant playlist publishes that buffer as EXT-X-HESP-TARGET-BUFFER (at least 0.5 s), and a buffer of more than four segment durations is served as standard HLS. Every media playlist of a channel carries the same EXT-X-SERVER-CONTROL, as the HLS specification requires
  • HESP-3 media playlists signal how far the stream has progressed into the segment in production (EXT-X-HESP-PROGRAM-DATE-TIME), and every media playlist response carries the engine's clock at generation (x-hesp-origin-now), so a joining player lands at a predictable distance from live even when the playlist was served from a cache
  • Added SCTE-35 ad break signaling to HLS, enabled by the new optional hls.scte35 config key (off by default): splice_insert cues in an MPEG-TS ingest are exposed in every media playlist as EXT-X-DATERANGE tags carrying the SCTE35-OUT / SCTE35-IN payloads, and segments are cut at the splice points so an ad decision server can splice on segment boundaries. When off, the SCTE-35 PID of the ingest is left unparsed
  • Added SCTE-35 time_signal cues from an MPEG-TS ingest to the EXT-X-DATERANGE tags of every HLS media playlist, alongside the splice_insert cues. Advertisement, placement opportunity and promo segmentation descriptors open a range with SCTE35-OUT and PLANNED-DURATION and close it with SCTE35-IN, END-DATE and DURATION, paired by their segmentation event id; other segmentation descriptors and time signals without any mark their time with SCTE35-CMD. A segment boundary is cut at every time signal that carries an avail, DTMF or segmentation descriptor
  • EXT-X-DATERANGE START-DATE and END-DATE attributes are now written in the same form as EXT-X-PROGRAM-DATE-TIME: UTC with a Z suffix and millisecond precision, instead of +00:00 with a varying number of fraction digits
  • Kept HLS playlists and published media available for 10 seconds after graceful shutdown, with EXT-X-ENDLIST signaling the end of the stream
  • Fixed engine crashes when an MPEG-TS ingest carries an SCTE-35 section that fails validation; such sections are now skipped with a warning without interrupting playback
  • Fixed SCTE-35 cues padded with alignment stuffing before their checksum being rejected instead of forwarded to the HLS playlists
  • Fixed HESP playback failing to start when the player requested an initialization segment slightly ahead of the live edge
  • Fixed SRT ingest in listener mode (?mode=listener) binding a random port instead of the configured one, which left the channel restarting on "no live data" forever; localport in the ingest URL also no longer crashes the engine
  • Fixed renditions whose aspect ratio differs from the source (such as a portrait 9:16 ladder fed by a 16:9 ingest) being encoded with non-square pixels, which Chrome rendered squeezed while Safari rendered it correctly. Such renditions now keep square pixels and are letterboxed to fit, so they render identically in every browser

[11.9.0] - 2026-09-03​

  • Sorted media playlists in HLS multivariant playlists by descending preference score
  • Fixed brief gaps between contiguous DVB-TTML subtitles when cue durations differ from packet timing
  • Fixed HLS multivariant playlists not declaring CLOSED-CAPTIONS=NONE on variants when no closed captions are configured, as the specification requires
  • Removed the EXT-X-INDEPENDENT-SEGMENTS tag from HLS media playlists; it stays declared once in the multivariant playlist, matching Apple's validation guidance
  • Improved the quality of GPU-encoded H.264 renditions at 720p and above, which were encoded with the H.264 Main profile while CPU-encoded renditions of the same rung used High. All renditions at 720p and above now use High at the same bitrate, worth around 1 VMAF point at a 1080p 6.5 Mbps rung and more at lower bitrates. Renditions below 720p stay on Main for decoder compatibility, and the CODECS attribute in HLS manifests changes accordingly for the affected renditions
  • Fixed H.265 and H.264 ingests the GPU decoder cannot handle (such as 4:2:2 chroma subsampling) leaving the channel stuck in a reconnect loop; those streams now fall back to software decoding

[11.8.1] - 2026-08-06​

  • Fixed RTMP ingest failing with "stream not found" against servers that only offer the stream as live

[11.8.0] - 2026-07-29​

  • Added Dolby Atmos encoding
  • Added Dolby Vision Profile 8.1 output
  • Fixed language tags in HLS manifests not following the standard (e.g. en should be used instead of eng)
  • Fixed HLS SDR variants missing the video range declaration that players require when HDR variants are also offered
  • Changed an ingest that connects but sends no data to be treated the same as an ingest that does not connect: the channel stays in the waiting state instead of showing an error, and stops after the ingest timeout

[11.7.2] - 2026-07-22​

  • Fixed MPEG-TS ingests failing when the initial PMT does not announce all tracks yet (e.g. audio only), which are completed by a later PMT update

[11.7.1] - 2026-07-13​

  • Fixed the S3 DVR and VOD root manifests being written without video codecs in CODECS at stream start

[11.7.0] - 2026-07-13​

  • Added an HLS SCORE attribute so players prefer H.265 renditions over H.264 when they can decode them
  • Added support for DVB-TTML on ingests to generate captions for distribution
  • Added the ability to auto-generate captions and translations
  • Fixed HLS variants referencing a CLOSED-CAPTIONS group when no captions are configured
  • Fixed various HLS DVR issues with channels stopping and starting with ABR ladder changes in between
  • Fixed an issue where the stream would be stuck on large DTS jumps in the ingest

[11.5.2] - 2026-07-01​

  • Fixed ingest failing for high-bit-depth or 4:2:2 sources (e.g. H.264 High 4:2:2 10-bit)

[11.5.1] - 2026-06-17​

  • Enabled the PlayReady key system by default

[11.5.0] - 2026-06-16​

  • Added BT.709 SDR to HDR10 conversion following the Dolby + MovieLabs best practices
  • Carried custom in-stream metadata as ID3
  • Exposed the active codec in the CMSD header
  • Added CODECS attribute to the HLS multivariant playlist
  • Added support for H.265 HLS
  • Added support for NVIDIA (NVENC) hardware encoding / decoding
  • Fixed duplicate per-frame closed-caption SEI when encoding below the source frame rate
  • Fixed SCTE-35 segmentation descriptor parsing failing when optional sub-segment fields are absent
  • Fixed Nielsen ID3 emsg event duration
  • Stopped the engine going into Error state when the ingest is not available yet

[11.4.0] - 2026-06-08​

  • Added support for single ingest
  • Fixed metric updates lagging behind and being dropped
  • Fixed the bitrate metric being reported too high
  • Fixed metrics stopping permanently after an interruption

[11.3.0] - 2026-05-19 (unavailable)​

  • Added targetBuffer to HESP manifest
  • Added holdBack to HLS media playlists
  • Added support for packaging multiple frames per chunk in HESP
  • Added support for SEI metadata to EMSG metadata conversion
  • Added support for single ingest
  • Added margin to bandwidth in HESP manifest

[11.1.0] - 2026-04-20​

  • Added support for PlayReady
  • Added support for DRM with both CENC and CBCS encryption

[11.0.0] - 2026-04-07​

  • Fixed MPEG-TS HLS not returning 404 when sub playlists do not exist yet

[10.13.0] - 2026-03-31​

  • Added image overlay support
  • Fixed MPEG-TS HLS not returning 404 when sub playlists do not exist yet

[10.12.1] - 2026-03-26​

  • Made protection optional in the HESP manifest instead of returning an empty one when no DRM is configured

[10.12.0] - 2026-03-06​

  • Allowed enabling / disabling of individual protocols
  • Optimized encode of HLS when HESP is disabled
  • Improved quality of de-interlacing
  • Improved quality of video scaler
  • Disabled PlayReady

[10.9.0] - 2026-01-30​

  • Initial changelog