Release notes version 1.12.*

Version 1.12.14 (2023-12-08)

  • libfmp4: Timed Metadata is no longer repeated across media segments, but only inserted in the media segment where the DASHEventMessage's presentation time is within the time interval of the media segment.

Version 1.12.13 (2023-11-30)

  • live: fixed manifest egress performance regression introduced in 1.12.12.

  • remix: added audio silence / empty subtitle padding to fill up start and end of playlist (#9293).

  • manifest_edit: ensure different live manifests get different ETag headers (#9297).

Version 1.12.12 (2023-11-07)

  • hls: fixed regression (introduced in 1.11.18) that the start_index query parameter got ignored when supress_query_parameters was also specified (#9299).

  • av1: fixed parsing of num_cb_points and num_cr_points in film_grains_params() structure.

  • hls: use the duration specified in the splice_insert and segmentation descriptors for the PLANNED-DURATION attribute (instead of DASHEventMessage@duration).

  • hls: handle SCTE 35 messages as pairs with a starting time and ending time. so that we can accurately check whether the message is active for the DVR given.

  • hls: added support for cancelling splice_insert messages.

  • Do not output zero duration WebVTT cues when using millisecond precision (#9298).

  • Truncate SegmentIndexBox ('sidx') to 65535 entries (#9295).

  • package-hls: fixed regression introduced in 1.12.3 when packaging to HLS transport stream (#9290).

  • capture: fixed upward relative path in MPD@BaseURL (#9291).

Virtual Channel

  • Add access time to API and manifest proxy access logs (#250)

  • Allow HEAD requests to manifest proxy (#246)

  • Fix gaps in DASH multi-period output (#248)

  • Clean up manifest proxy debug logging (#241)

Version 1.12.11 (2023-10-03) GA

  • manifest_edit: enabled selection by Descriptor Elements in mpd plugins (#9284).

  • manifest_edit: fixed wrong text encoding when reading yaml configuration (#9287).

Virtual Channel

  • Enable full Manifest Edit functionality (#245).

Version 1.12.10 (2023-09-20) RC

  • av1: check supported encryption schemes for AV1 ('cenc' and 'cbcs') (#9278).

  • manifest_edit: serialize minimumUpdatePeriod and timeShiftBufferDepth (#9269).

  • manifest_edit: new use case for selectively removing EXT-X-MEDIA entries from an HLS main playlist (#9259).

  • manifest_edit: removed space from comma-separated list of Adaptation Set ids in DASH Adaptation Set Switching use case (#9280).

  • packager: do not remove duplicate tracks in HLS video groups (#9275).

  • removed support for Amazon Linux.

Virtual Channel

  • Improve handling of errors in HLS media sequence counting when a transition to a live source does not work as expected (#243).

  • Change transition worker to continuously check manifests to ensure correct state is maintained (#238).

  • Fix DASH incorrect period ID and start time when producing multi-period output on base channel (#240).

  • Correctly set MPD@minimumUpdatePeriod and MPD@timeShiftBufferDepth in dynamic manifests (#236).

Version 1.12.9 (2023-07-24)

  • av1: fixed parsing trailing bits when reading HDR metadata (#9265).

  • manifest_edit: updated to PyYAML 6.0.1 to avoid installation issues on Alpine (see

  • live: ignore HEVC CodecPrivateData in LiveServerManifestBox (#9264).

  • vod2live: set last-modified and expiry cache headers based on wallclock time and duration of media segments (#9257). No longer announces media that crosses wallclock time.

  • dash: added SupplementalProperty for backwards compatible HLG content.

  • remix: improved performance when referencing multiple dref-ed URLs (#9250).

Virtual Channel

  • Fix creation of check transition task for live transitions (#234).

Version 1.12.8 (2023-06-21) GA

  • hls: add the EXT-X-DATERANGE tag to the media segment if it overlaps the first half of its duration (#9247).

  • dash: fixed encrypting of Dolby Vision backwards compatibility tracks using CPIX (#9255).

  • live: when the duration of a DASHEventMessage is undefined, replace it, when possible, with the maximum duration of any SCTE 35 segmentation descriptors (#9240).

  • av1: fixed an assert in the AV1 parser that triggered when encrypting a track with multiple tiles and applying encryption (#9253).

  • Removed support for Alpine Linux 3.16.

  • Soon to be discontinued: Amazon Linux and Debian 11.

  • Nginx: updated Nginx to 1.24.0 (latest stable version as of 2023-04-11). Please note that Nginx is deprecated.

Manifest Edit

Note that due to, installations of manifest_edit on Alpine Linux (used in many Docker containers) can fail with a Cython-related error, when installing the PyYAML module.

This has been solved in 1.12.9 beta, but if you require 1.12.8 GA or an older version, you can work around the installation error by running the following command (as root) before installing the manifest_edit package:

apk add py3-pip py3-wheel  # (if not already installed)
python3 -m pip install --no-build-isolation Cython==0.29.36 PyYAML==6.0

Typically, these would be on their own RUN lines in a Dockerfile, inserted before the RUN line that installs the manifest_edit package.

Virtual Channel

  • Output separate DASH periods for ad breaks (#203)

    • Database changes related to this feature may break DASH output for existing channels and they will need to be recreated.

  • Add MANIFEST_PROXY_HOST option for transition worker to connect to remote manifest proxy (#225).

  • Properly handle request with vend in the future by capping it to current wallclock time (#229).

  • Set correct Expires and Cache-Control: max-age headers when serving a live manifest, based on the expected next segment time (#226).

Version 1.12.7 (2023-06-02)

  • hls: fixed announcement of audio setup information for encrypted EC3 (#9252).

  • live: fixed serving the very last announced media segment when splicing is enabled (#9249).

  • live: fixed announcing media segment in DASH before it is fully available (#9227).

  • package-hls: changed assert into a warning message when the (audio) track is too short for the given (video) source description's timeline (#9251).

  • Added support for Debian 12.

Version 1.12.6 (2023-05-17)

  • packager: fixed a single tick alignment error in the fearless algorithm.

  • remix: pad audio and subtitle tracks to the video duration.

  • remix: when remix calculates the DASHEventMessage@duration it now uses the video track as leading timeline (#9245).

  • origin: stopped quoting query strings in manifest_edit invocations (#9246).

Version 1.12.5 (2023-05-10)

  • vod2live: only set cache headers when producing live manifests (#9222).

  • remix: automatically set the DASHEventMessage@duration for SCTE 35 segmentation descriptors.

  • removed support for Ubuntu 18.

Virtual Channel

  • Fix HLS keyframe playlist segment URLs (#224)

  • Update HLS media sequence to account for extra segments added for ad insertion or playlist looping (#223)

Version 1.12.4 (2023-04-21)

  • live: Fixed ingest edge-case where first fragment pushed into CLOSED publishing point with --restart_on_encoder_reconnect is not immediately visible (#9209).

  • live: Fixed Expired / Cache-Control: max-age HTTP headers when output segment length longer than input fragments (#9232).

Virtual Channel

  • Support optional hls_minimum_fragment_length configuration in live source SMIL head (#217).

  • Give more informative error message when requesting manifest with invalid vbegin, vend, or t query parameter (#218)

  • Set correct timeShiftBufferDepth on dynamic DASH manifests with fixed vbegin (#219)

  • Allow custom RabbitMQ connection string for Celery by setting CELERY_BROKER environment variable (#221)

  • Correctly set start and end times on EXT-X-DATERANGE tags not attached to an EXT-INF (#222)

Manifest Edit

  • New DASH Adaptation Set Splitting plugin, allowing moving Representations from the Adaptation Set they have been assigned to by the Origin to a dedicated one.

Version 1.12.3 (2023-03-24) GA

  • hls: fixed duration signaling in media playlist when using --source-description option (#9233).

Manifest Edit

  • added m3u8 main use case for media URI rewriting, useful to activate m3u8_media use cases.

  • added m3u8 media use case to allow custom tags for timed metadata signalling in HLS.

Virtual Channel

  • Fix #EXT-X-MEDIA-SEQUENCE for streams with variable EXTINF durations (#216)

Version 1.12.2 (2023-03-21) RC

  • libfmp4: write AOMedia ID3 timed metadata as version 1 Event Message box (emsg) (#9229).

  • live: ignore Timed Metadata tracks when determining live edge (#9207).

  • remix: improved support for nPVR archives with seq@isContinuous attribute (#8250, #9144).

  • packager: fixed ismv (profile brand iso2) packaging of movie fragments (moof) containing multiple track fragments (traf) (#8250).

Virtual Channel

  • Fix incorrect headers set on manifest proxy response (#206)

  • Allow configuration of external Redis and RabbitMQ (#211)

Version 1.12.1 (2023-01-10) GA

New product. Meet Unified Virtual Channel

Unified Virtual Channel is a solution that delivers a traditional TV-like experience. The API-based solution repurposes live sources and media previously prepared for VOD streaming, into new live linear channels. Create custom linear channels, niche and pop-up channels, pre-recorded music events, FAST services, and more. Simplify your workflow with an easy-to-integrate API-based solution. Mix existing VOD content with live streams, along with seamless transitions. Customize and localize your content, and monetize your stream with ads. Software-only. Easy. Quick. Find more information on our website.

Operating System Support

  • Added support for Alpine linux 3.17.

  • Soon to be discontinued: Debian 11, Ubuntu 18.

  • Removed support for CentOS 7.

  • Removed support for Alpine linux 3.15.

Find out more about supported operating systems in our documentation.

New features

  • live: allow more advanced SCTE 35 configuration options (Advanced SCTE 35 configurations) (#9172).

  • trickplay: add the scheme to the kind box to signal a video track for trickplay playback when using the --trickplay option (#9140).

  • capture: preserve c608 captions signaling after keyframe insertion (#8982)


SCTE 35 & Custom Timed Metadata

  • hls: keep event messages with identical presentation times in receiving order. Previously pairs of SCTE 35 markers (CUE-IN/CUE-OUT) might have been reordered (#9178).

  • hls: fixed media segment splicing when SCTE 35 cue moves out of DVR window (#9179).

  • live: fixed early termination of SCTE 35 ad break for short DVR windows (#9176).

Unified Origin, Unified Remix & Unified Packager

  • origin: removed ContentProtection element from MPD@AdaptationSet containing thumbnail images (#9193).

  • remix: read required media data in VOD2Live output more efficiently (#9197).

  • remix: support frame accurate clipping for ''avc3'' format (#9186).

  • libfmp4: instead of returning a 404, return an empty manifest instead (#8996).

  • libfmp4: added support for reading the SampleEncryptionBox when a constant IV is in use and no saiz/saio boxes are present (#9175).

  • live: fixed assertion failure when ingesting duplicate track with distinct TrackName attributes (#9195).

  • live: fixed time_shift when used with virtual sub clip that extends beyond live-edge (#9180).

  • live: fixed TrackName MSS StreamBox property ingest (#9169).

  • dash: always use a @timescale so that the @duration is always accurately specified when using number addressing in MPEG DASH (#8795).

  • mp4: remove incorrectly signaled (non-IDR samples) from the sync-sample table when prepping an AVC track (#9173).

  • hls: fixed announcement of last media segment in muxed playlists where audio is lagging compared to the video track (#9145).

  • hls: added support for HLS/TS and encrypted remixed source content (#9162).

  • manifest_edit: added writing of custom EXTINF tags (#9185).

  • origin: added UspForceContentLength directive, to be used in combination with the UspOutputFilter directive, for running Manifest Edit (as described in Manifest Edit-related configuration).

  • fixed issue preventing transition creation when maximum number of channel is reached (#201)

Version 1.12.0 (2023-01-04) RC

Virtual Channel

  • Fix DASH BaseURL calculation for transitions (#199)