Release notes version 1.9.*
When upgrading to this version, a cache flush of DASH manifests may be required due to changes in how Segment Timelines are calculated.
See also: Upgrade to a New Version.
Packager and Origin
DRM configuration with Content Protection Information Exchange (CPIX) documents
DRM with multiple keys
Packaging and delivery of AV1 encoded media
Delivery of Dolby Atmos
PlayReady and Widevine with CENC 'cbcs' encryption for HLS
DRM with rotating keys (HLS only)
Timed metadata passthrough and signaling
SCTE 35-based media splicing (for content replacement)
CMAF-based DASH output validated with DASH-IF conformance tool
Trickplay based on tiled thumbnails
PlayReady and Widevine with CENC 'cbcs' encryption for DASH
Going forward, we limit our support for new installations to Apache and recommend a switch to Apache for setups currently running on NGINX. We will continue to support NGINX for existing customers for both VOD and Live, but we won't work on feature development for it. In short, support for NGINX should be considered deprecated. Do note that this does not affect our recommendations of using NGINX in other parts of your video streaming setup, such as for (shield) caching.
See also What is the preferred webserver for media delivery? for a detailed outline and background.
Due to changes in the way that licensing of DRM options is checked in the new release, you may encounter a 'DRM no policy for encryption' error message if you are using DRM. In the event of this message please contact email@example.com to obtain the necessary licensing for DRM use. To avoid any problems, we recommend you to contact firstname.lastname@example.org to have your license checked before upgrading.
apache: write more debug logging when enabled (#5526).
nginx: corrected debug log to be off by default (#5259).
origin: fixed bug in play out of last multiplexed TS segment from CMAF source.
Fix for an edge case where multiplexed HLS TS is played out from a CMAF source and the audio and video in the stream do not have equal length. This led to an error but is working now.
cpix: add --allow-unencrypted option. (#4621)
When using CPIX, by default all audio and video tracks will be encrypted to make sure that small errors in a CPIX document cannot lead to content being played out in the clear. For uses cases that require you to leave some of a stream’s audio or video tracks in the clear, the
—allow-unencryptedoption is available.
cpix: only send query parameters to CPIX origin where applicable.
If a start or end time can be determined for the request to CPIX origin it will be appended to the request as a query parameter. The query parameter may contain either a start time, an end time, or start and end time. If no start or end time can be determined, no query parameter will be appended.
Documentation: CPIX origin.
cpix: only evaluate audio and video tracks in cpix_verify.
When using CPIX, only audio and video tracks are encrypted. Therefore,
--cpix_verifywill only check a CPIX document against audio and video tracks.
Documentation: Checking CPIX documents with cpix_verify.
packager: warn user when creating CMAF media with --package-mpd. (#4654)
When statically packaging media for DASH, you should package the content as CMAF or use the
-package_mpdoption, never both.
Documentation: Packaging for MPEG-DASH.
capture: do not use transcoding with --frame_accurate when fragment aligns to given ranges. (#4627)
--frame_accurateoption is used when capturing a stream, transcoding is no longer used when the specified time range that is to be captured aligns with segment boundaries in the stream.
Improvement to make DASH output of Unified Packager fully compliant with DASH-IF DASH validator. Instead of using the bitrate signaled in the source media to determine the value of
Representation@bandwidth, 'bandwith' is now calculated so that it represents the bandwith necessary for a player to fill its buffer (the length of which is determined by
MPD@minBufferTime) before that buffer runs empty, independent from the point in the stream at which the player starts buffering.
origin: added "msix" compatibility brand to Indexed Media Segments.
Improvement to make output more compliant with DASH-IF DASH validator.
capture, hls: do not throw bad allocation when requested fragment fails. (#4563)
Improved error message when a request for a fragment fails while capturing a HLS stream.
origin: fixed 500 error for invalid fragment offsets. (#4633)
A request for a segment with a timestamp that does not match a media segment will no longer result in a 500 error, but in a 404.
cpix: added use of external CPIX documents for multiple key DRM with Origin (DASH/HLS) and key rotation (HLS only).
To enable more advanced DRM use cases, we have implemented support for Content Protection Information Exchange, or CPIX. Using CPIX, it is now possible to implement DRM with multiple keys, as well as to rotate keys over time. Key rotation is supported for HLS only, using AES-128, SAMPLE AES or FairPlay protection.
packager: added support for tiled thumbnails. (#4298)
You can now use Unified Packager to generate a track with JPEG encoded tiled thumbnails from a video source. The tiled thumbnails are generated by decoding a frame from the source video track every 5 seconds, tiling the frames into a 3 by 5 grid, and encoding the result as a JPEG picture. These pictures are stored in the CMAF output file, in a track with special signaling for DASH packaging.
Documentation: Adding trick play to a DASH or HLS stream.
libfmp4: added support for Dolby Atmos in HLS and DASH.
Signaling as specified by Dolby is added for HLS and DASH when a Dolby Atmos track is part of a stream. Dolby Atmos is supported both for static as well as on-the-fly packaging.
origin: added EXT-X-CUE-OUT and EXT-X-CUE-IN tags, similar to the EXT-X-DATERANGE tags for SCTE 35. (#4391)
To ensure compatibility with a broad range of 3rd party services that can manipulate a manifest for content replacement, Origin ads several tags to a HLS playlist when SCTE 35 messages that signal splice points are ingested.
Documentation: Unified Origin - DAI.
libfmp4: added color description signaling in HLS/DASH unless ITU-R BT.709 is used.
Signaling of colour description that is present in the source is now added to HLS Master Playlist and DASH client manifest (MPD).
av1: updated AV1 Codec ISO Media File Format Binding to version 1.0.0, 7 September 2018.
AV1 codec is now officially supported. If you have AV1 encoded media that is packaged in MP4, you can use it with our software.
Demo: AV1 encoded VOD demo stream.
libfmp4: when an implied edit selects any portion of the composition timeline that does not map to a sample, we compensate for this so that the smallest computed CTS is zero. (#4403)
This provides a work around for issues caused by Google Chrome’s buffering by DTS rather than PTS: Chromium issue related to Google Chrome's buffering behavior.
hls: fixed duration in EXTINF tag for media segments longer than 71 minutes. (#4629)
This fix has a very specific use case: packaging subtitles in such a way that the complete subtitles are served as a single media segment for HLS (using
--fragment_duration=999999999). Before, doing this would result in a wrong value for the 'EXTINF' tag in the Media Playlist of the subtitles, if the subtitles were longer than 71 minutes. This has now been fixed.
origin: removed HLS+fMP4 10s WebVTT delay. (#4528)
For HLS TS, Origin adds a 10 second offset to the subtitles because it is industry practice to offset the media in a HLS TS stream by 10 seconds. However, this offset does not apply to fMP4 HLS. Therefore, it is no longer added for this play-out format.
packager: fixed handling multiple "pssh" boxes from pre-encrypted input.(#4050)
In a workflow that uses DRM with multiple keys, all encrypted audio and video tracks that are used to create the stream must contain the same PSSH data. From this input, Unified Packager will then generate the necessary signaling when creating the MPD (DASH client manifest).
Documentation: Encryption & DRM with Multiple Keys.
packager: fixup incorrect sample durations when changing timescale. (#4073)
For very small numbers on a 10MHz timescale, ensure that rescaling never results in 0 value.
origin: fixed 500 error for misaligned last segment. (#4374)
For content where one type of media is shorter than the overall presentation, a player may request a non-existing segment for this type of media towards the end of the presentation, when the track of this type of media has already ended but the presentation has not. Instead of returning a 500 error when such a request is made, we now return a 404.
packager: fixed overflow when decrypting huge file. (#4341)
Fix for a rare edge case where all media data of a large file was stored in a single fragment, leading to problems when decrypting it.
packager: add DRM specific signaling to HLS, DASH manifest for CENC 'cbcs' encrypted fMP4. (#3441)
It is now possible to create statically packaged HLS and DASH streams that use the same CENC 'cbcs' scheme encrypted CMAF source files with Widevine, PlayReady and FairPlay protection.
origin: fixed invalid 404 response to archive and DELETE request for broken pubpoint. (#3893)
In certain edge cases involving a publishing point that no longer worked properly, a request for the archive of that publishing point, or a request to delete it, would result in a 404 response from Origin. Because the publishing point did still exist in these cases, this response was invalid. Furthermore, it made it impossible to delete such a publishing point using the API. This behavior has now been fixed.
origin: added option --splice_media to enable media splicing based on SCTE 35 markers (requires --timed_metadata).
This option requires that your USP license includes support for timed metadata and that the --timed_metadata option is enabled on the publishing point of your livestream. When this is true and your content contains SCTE 35 markers that signal splice points, Origin can be instructed to splice the MPEG-DASH and Apple HLS media segments on these splice points by enabling the
--splice_mediaoption when creating the Live server manifest.
Documentation: Unified Origin - DAI.
origin: added option --timed_metadata to enable output of Timed Metadata in HLS and DASH.
If your USP license includes support for timed metadata, you can enable Origin to pass it through using the
--timed_metadataoption when creating the server manifest. SCTE 35 messages that Origin ingests are then automatically signaled in the MPEG-DASH and Apple HLS client manifests.
packager: added HLS+fMP4 support for Widevine, PlayReady and Fairplay. (#3776)
It is now possible to create a statically packaged fMP4 HLS stream with CENC 'cbcs' encryption that is protected by Widevine, PlayReady and FairPlay DRM.
Documentation: Packaging HTTP Live Streaming with fragmented MP4 (fMP4 HLS).
dash: when the video timescale is 10MHz and no framerate is signaled, then we rescale to 90KHz.
To avoid unexpected behavior with players that do not handle large numbers well, we normally rescale a 10MHz timescale based on frame rate. When the frame rate is not signaled we now rescale as well, to 90KHz because it fits all common frame rates. Note that this changes the timeline and the media URLs; therefore it requires a cache flush.
Impact: Need to flush your cache when upgrading (which is a recommended practice anyway).
packager: support input files that start with hyphen through "--" escape option. (#3179)
Before, it was not possible to use files with names starting with a hyphen as input. Now, you can use the the option
--to signal that the next argument on the command-line is a filename. This allows you to use filenames starting with a hyphen/minus/dash.
hevc: set short_term_ref_pic_set_idx to zero when not present. (#3569)
Updated behavior to support encoder output that uses more advanced HEVC encoding features.
origin: added trace/debug/info/notice/warning/error log functions.
Origin will now add logging to Apache's error log, based on the log level specified in the configuration of your virtual host. This is especially useful when debugging problems with features such as IsmProxyPass, which provided little to no feedback about their behavior before.
origin: URI attribute in EXT-X-KEY must be absolute (instead of relative to the server manifest).
Before, it was possible to set a path relative to the server manifest when specifying the location of the encryption key using
--hls.license_server_url. This has now been fixed.
Impact: As it is unlikely that a relative path is used to specify the location of the encryption key in a production workflow, the only expected impact of this change is that test setups that may be using this approach will stop working.
origin: removed propagation of query parameters to URI attribute in EXT-X-KEY. (#3900)
When a query parameter was part of a request for a HLS playlist in which the EXT-X-KEY tag was present, this query parameter would be appended to the URI attribute of said tag, resulting in unexpected behavior. This has now been fixed.
origin: removed propagation of query parameters to URI attribute of EXT-X-FAXS-CM tag.
When a query parameter was part of a request for a HLS playlist in which the EXT-X-FAXS-CM tag was present, this query parameter would be appended to URI attribute of said tag, resulting in unexpected behavior. This has now been fixed.
libfmp4: fixed IMSC1 subtitle packaging and codec signaling for HLS+fMP4 (#3845)
Using 1.8.* to package fMP4 HLS with IMSC1 subtitles would result in incorrect signaling of the subtitles codec in the HLS Master Playlist, resulting in the subtitles not working on Apple devices. This has now been fixed and fMP4 HLS can now be successfully packaged with IMSC1 subtitles.
origin: fixed #EXT-X-VERSION:6 when setting --hls.fmp4=false (#3822)
Using 1.8.*, with the
--hls.fmp4option explicitly set to
falseOrigin would create version 6 HLS playlists, while this should only happen when the option is set to
true(because fMP4 HLS output requires version 6 playlists). This behavior has been fixed and
--hls.fmp4=falsewill no longer determine which version Origin uses for the HLS playlists that it generates.
packager: return proper error code (e.g., "file not found") when creating a HLS master playlist instead of implicitly enabling the package_hls option.
From 1.8.*, creating a HLS Master Playlist no longer requires the use of the
--package_hlsoption. However, a mistake in the command-line while trying to statically package HLS would in some cases lead to the option being implicitly activated anyway, leading to unclear errors. This behavior has now been fixed.
origin: fixed DASH playout from server manifest with dref-ed files + Common Encryption. (#3828)
In 1.7.32 and before, Origin would encrypt all subsamples ('piff') when working with dref-ed files, while in 1.8.4 this was mistakenly changed to encryption according to the CENC's 'cenc' scheme, which uses subsample slice data. This lead to problems because slice details are not stored in dref-ed files, which store more granular subsample data only. This has been fixed by reverting to the old behavior (i.e., Origin uses 'piff' encryption when working with dref-ed files).
dash: use lowest common multiple for timescales in video tracks.
Before, a track's timescale was defined based on the track's specific characteristics, like frame rate or sample rate. Now, other tracks of the same media type are taken into consideration as well, so that their timescales can be set to a common multiple. For example: 25 and 50 fps representations will share the same timeline in an AdaptationSet. Note that this changes the timeline and the media URLs; therefore it requires a cache flush. Impact: Need to flush your cache when upgrading (which is a recommended practice anyways).
origin hls: added support for Irdeto PlayReady Scalable License.
origin dash: added support for ViaccessOrca DRM.
Documentation: Viaccess Orca.
packager: removed embedded captions from AVC when packaging trickplay. (#2529)
When extracting sync samples from an AVC encoded video file to create a sync samples only file, embedded captions are now removed.
Impact: None other than as described.
Documentation: Adding trick play to a DASH or HLS stream.