Changelog

Version 41 (16/06/2026)

  • HLS: add option to remove subfolders from source (for Akamai compatibility - but may lead to collisions if misused)

Version 40 (05/02/2026)

  • HLS: fix removing multiple 'SUBTITLES=' attributes
  • HLS: avoid rare case where subtitles were attached to all stream types
  • HLS: fix wrong computed path while probing - the issue is that Akamai would not report a 404 but rather redirect to the master playlist

Version 39 (26/11/2025)

  • EBU-TT Live: unmix VTT textAlign values (before/after instead of left/right)
  • EBU-TT Live: use Region passthru whenever possible

Version 38 (18/11/2025)

  • EBU-TT Live: cover more input positioning
  • HLS/WebVTT: improve color and positioning compatibility

Version 37 (05/11/2025)

  • Fix date discrepency in WebSocket logs
  • HLS/WebVTT: add some color and position formatting
  • Mark legacy layout as deprecated

Version 36 (23/07/2025)

  • HLS: update to be compatible with the latest version 12 (revision 17)
  • HLS/WebVTT: improve X-TIMESTAMP-MAP accuracy
  • DASH HbbTV compatibility: AdaptationSet@id should be an unsigned integer. As a consequence, the SUBSTANCE_DISPLAY_NAME configuration variable shall be an unsigned integer in DASH, or any string in HLS
  • DASH: as per section 5.3.1.2 a missing time shift buffer depth is interpreted as an infinite one

Version 35 (26/10/2023)

  • adds passthrough mode
  • fixes a bug where a boolean option may not be properly parsed
  • minor log improvements

Version 34 (05/01/2023)

  • add support for secured websocket connection

Version 33 (22/11/2022)

  • add SUBSTANCE_SEGDUR_MS option to tune output segment duration
  • make default values: SUBSTANCE_GLOBAL_DELAY=0 and SUBSTANCE_SUBTITLE_DELAY=0
  • fix url error global delay is configured for HLS and a child plyalist is defined with an absolute path
  • deprecate SUBSTANCE_BASEURL_AV
  • improve termination signal handling

Version 32 (21/11/2022)

  • add support for SUBSTANCE_GLOBAL_DELAY to HLS pipelines
  • pipeline: don't stop source when exception is handled successfully
  • ttml encoder: fix missing Region when combining DEBUG_DISPLAY_TIMESTAMPS and legacy layout
  • add trailing slash by default to all configuration URLs
  • improve source download error handling and reporting
  • fix potential issues relative to DVB-DASH support
  • change default behavior for deletion of content pushed to cdn

Version 31b1 (06/10/2022)

  • support build

Version 30 (13/09/2022)

  • add option to log to a file
  • log websocket connection state
  • set HTTP push timeout to 2s. uploads are managed synchronously, upload is blocked until the current upload is complete.
  • ebu-ttd: add support for escaping
  • hls: fix when no program date time is present in source
  • hls: fix subtitle offset
  • hls: demuxer updates
  • dash: muxer updates

Version 29 (16/06/2022)

  • ttml decoder: better support for cellResolution
  • improve websocket payloads logging

Version 28 (16/06/2022)

  • fixes local subtitle cache not being properly cleaned up, resulting in ever increasing disk usage until container restart.

Version 27 (15/06/2022)

  • EBU-TT Live: avoid multi lines overwriting each other or going out of the styling box
  • HLS: fix multiline overlap in hls.js
  • Align the first received subtitle with the first output chunk (fixes most blinkings in TTML/DASH)
  • Improve formatting by following TTML BasicDE recommendations
  • Support multi-line inputs

Version 26 (10/05/2022)

  • HLS: fix date parsing when including timezone
  • Fix layout for multiline EBU-TT Live inputs
  • Be resilient to a/v encoder reboot
  • DASH/HLS: delete data it goes out of the timeshiftbuffer, unless told otherwise
  • Change default subtitle naming in player, and make it configurable
  • Customizable ebu-tt sequence ID and websocket port

Version 24 (11/03/2022)

  • Ingester: support WebSocket reconnections
  • Ingester: allow customizing sequence ID in websocket endpoint
  • Deployment: fix subtitle cache pruning
  • Fix issues at startup with some streams when computations led to negatives timestamps.

Version 23 (10/02/2022)

  • Updated docker image.
  • Add subtitle payload in debug log.
  • HLS (WebVTT) output (HLS/TS input supported only).
  • Reduce contention on evergrowing-playlist input.
  • Subtitle source: open media files in playlist directory .
  • Improve resiliency with late content, jittered/offset, and discontinuous input content and timestamps.
  • Subtitle timestamps are relative to UTC0.
  • Expose A/V baseUrl option in case our source stream is not available to the end users at the same URL.

Version 22 (07/05/2021)

  • Add sanity checks on input MPD to fail fast and explicitly.
  • Expose output transfer logs.
  • Add regulate option (generates empty samples when late).

Version 21 (26/03/2021)

  • Remove sleeps from source loop: stops faster.
  • Add an explicit BaseURL option (-b or --base-url).
  • Update log formatting.

Version 20 (11/03/2021)

  • Add an option and disable the shell by default.

Version 19 (04/03/2021)

  • Allow muxer to be rebooted for dynamic parameters support: the output stream
    timings could be discontinuous so make sure to restart the player.
  • Introduce a shell to inject dynamic value (both delays).
  • Put back BaseURL of the subtitle content to '.'. Needed because the content
    is pushed to a URL but played back from a different URL.

Version 18 (18/02/2021)

  • Add ProgramInformation in MPD to know which version was used.
  • Fix BaseURL when used with the Docker provided image.

Version 17 (10/02/2021)

  • Avoid pushing MPD too often.
  • Don't process if input MPD hasn't changed.

Version 16 (20/01/2021)

  • Add BaseURL to subtitle content to support redirected streams.

Version 15 (17/12/2020)

  • Fix installer (same code as v14).

Version 14 (17/12/2020)

  • Improve ISO8601 parsing.

Version 13 (14/10/2020)

  • Support more playlist timings formats.

Version 12 (28/05/2020)

  • Add option to specify MPD output filename.

Version 11 (29/04/2020)

  • Avoid spin loop when no input data is available.

Version 10 (16/04/2020)

  • Fix option parsing order.

Version 9 (09/04/2020)

  • Fix XML parsing (escaping).
  • Fix run after 100 hours (playlist timing parsing).
  • Add option parser.
  • Option to push to CDNs via HTTP (tested with Akamai).
  • Delete deprecated segments.

Version 8 (09/02/2020)

  • Improve timings for debug purposes.

Version 7 (05/02/2020)

  • Add a subtitle delay option.

Version 6 (27/01/2020)

  • Fix trailing characters on output manifest.

Version 5 (18/01/2020)

  • Avoid potential timings overflows in parsing.
  • On error, avoid CPU spin.
  • Pass DASH-IF conformance checks.
  • Clarify error messages.
  • Optimize packaging flags.
  • Switch to new input playlist format.

Version 4 (15/01/2020)

  • Fix ever-growing input file parsing.

Version 3 (14/01/2020)

  • Add general delay option.
  • Robustify option parsing.
  • Remove any existing subtitle before adding ours.

Version 2 (14/12/2019)

  • Add synthetic subtitles for testing.
  • Modify the MPD in-place instead of rewriting.
  • Detect more errors at startup.

Version 1 (07/10/2019)

  • Initial version.