Release notes version 1.7.*
packager: fixed 'File too large to map' error.
origin: when creating WebVTT from TTML we now collapse "p" elements that have the same timing information into a single cue. (#1894).
origin: media that is indexed by either a TrackFragmentRandomAccessBox ("tfra") or SegmentIndexBox ("sidx") overrides timing information in the media segment. (#1896).
dash: added cea-608 signaling through Accessibility element (#1448).
dash: removed @minWidth and @minHeight attributes. It is unclear what the units are and they are not really relevant.
dash: added support for live stream events (--archiving=1 --dvr_window_length=0)
dash: added end-of-stream inband event message to the last media segment (live stream events only).
We have made many improvements for DASH (see below), so please verify that your player is working as expected.
dash: added live time signaling urn:mpeg:dash:utc:http-iso:2014. (#1447)
dash: compare Representation timelines and only move them to the AdaptationSet when they are identical. This makes it easier to spot GOP alignment errors.
dash: do not output empty AdaptationSets (e.g. empty subtitles).
dash: always write @sar (conforming to DVB-DASH specification ETSI TS 103 285).
dash: added a trickmode AdaptationSet when the --fixed_gop option is present.
dash: moved more common attributes and elements from Representations to AdaptationSet. E.g. @startWithSAP, @mimeType, @maxPlayoutRate, @codingDependency, EssentialProperty.
dash: always write AdaptationSet@Role descriptor (conforming to DVB BlueBook A168 and DASH-IF Interoperability Points).
dash: the propagating of query parameters has changed. Query parameters passed in the MPD URL are now added as an EssentialProperty with UrlQueryInfo (at the MPD level) and it is up to the player to add them to the Media Segment URLs (new since ISO/IEC 23009-1:2016).
packager: added --use_dref_no_subs. (#1444)
packager: remove any AUD/SPS/PPS/FILLER when preprocessing AVC1 (conforming to AVC1 specification ISO/IEC 14496-15).
libfmp4: added new Dynamic Track selection using count operator to filter expressions.
libfmp4: allow for empty media segments (i.e. media segments with a duration but no samples, useful for sparse tracks). (#1553)
origin: fixed missing dash fragments caused by timescale conversion. (#1459)
packager: fixed --track_role for subtitles (sidecars).
dash: fixed formatting of the HEVC constraint flags in the @codecs field.
nginx: fixed unintentional request interception by POST handler in proxy_pass context.
libfmp4: fixed huge timestamp parsing for TTML with subs/stpp. (#1414)
libfmp4: fixed writing of URIBox (was missing version and flags).
libfmp4: fixed precondition failed 'prev_file == bucket_file' in output_bucket.cpp:1651 (bucket_t* fmp4::file_can_merge()).
libfmp4: fixed duplicate namespace prefix in TTML. (#1307)
libfmp4: fixed reading iso8601 timestamp suffix 'Z' (indicates zero UTC offset).
libfmp4: reordered EXT-X-KEY tag so that it is listed before the EXTINF tag.
origin: Fixed unintentional leaking of 304 Not Modified
package: clear sub-sample information when running preprocessing step.
hls: added EXT-X-SESSION-KEY in master playlist, which makes it possible to use Download to own for HTTP Live Streaming (HLS).
libfmp4: fixed regression of reading > 4GB "mdat" boxes.
origin: added support for inserting Timed Metadata (ID3 tags) in HLS.
packager: added support for reading Timed Metadata from a meta-macro-file.
origin: added playout support for basic WebVTT styling (#1213).
packager: fixed precendence --track_language over TTML file xml:lang attrib.
libfmp4: fixed reading number of bits in slice_group_change_cycle.
libfmp4: added support for VP9 ISO BMFF packaging and DASH application. This is according to the draft document titled VP Codec ISO Media File Format Binding (2015.12.3).
libfmp4: added --hls.no_elementary for devices (e.g. Abox 42 M20) not supporting audio elementary streams.
libfmp4: Common Encryption leaves slice_header() in the clear for AVC.
libfmp4: added CHANNELS attribute for AUDIO groups in HLS.
libfmp4: added support for MM:SS.mmm WebVTT timestamps (#1174).
packager: added preprocessor step when loading "avc1" video from MP4 files. Ignoring any AUD/SPS/PPS NAL units that are present in the access units.
libfmp4: set sample_is_depended_on to unknown for P and B frames.
libfmp4: merge multiple unprotected NALs into a single Subsample clear range for efficient representation.
packager: only create sub-sample information ("subs" box) for unencrypted video tracks and dref-ed files.
package-hls: when --hls.optimized (optimized PES placement) is used, we only write a 3-byte startcode (instead of the required 4-byte startcode) for the AUD NAL.
package-iss: only write a single entry for each fragment in the "tfra" box. Multiple CDNs do not support multiple random-access samples and fail to deliver the media fragments.
origin: fixed parsing of Smooth Streaming URL for trackNames including a period ('.').
package-mpd: added option --segment_list to include SegmentList and SegmentTimeline elements in the MPD that are derived from the "sidx" box.
nginx: fixed header response to correctly calculate expires time.
libfmp4: filter expressions use the definitions of FourCC as specified in the server manifest file.
libfmp4: added support for Latens.
libfmp4: fixed display last captions in each segment (#1057).
libfmp4: improved rounding of sample durations when changing media timescales (creating better compressed timelines for Smooth Streaming and MPEG-DASH).
origin: added EXT-X-PROGRAM-DATE-TIME for VOD media playlists (when date >= year 2014).
package-hls: added support for Discretix DRM.
origin: added support for "framerate" variable to filter expression.
package-mpd: added Dolby Vision Support for packaging to fragmented mp4 suitable for MPEG-DASH.
origin: added support for Adding Common Encryption for MPEG-DASH.
origin: added support for Adding Primetime DRM for MPEG-DASH.
origin: added support for Blanking.
libfmp4: remove dependency on the movie "trex" box by always specifying default values (if any) for samples in the "tfhd" box.
origin: fixed last modified time for proxied VOD content to be last modified time of manifest file.
capture: added support for multiple SPS/PPS headers.
libfmp4: added support in "tfra" box for multiple random-access points in a single "moof".
package-hls: calculates and writes the max_bitrate for all tracks.
dash: removed default "org.w3.clearkey" ClearKey signaling. Use --clearkey.drm_specific_data= to add the signaling specifically.
package-hls: added AVERAGE-BANDWIDTH to I-FRAME-STREAM-INF.
package-hls hls: calculate bandwidth on a per media segment basis.
packager: override the default "subt/stpp" with "text/dfxp" when
mp4split: a license key file name must contain a '.' e.g. 'license.key', otherwise the input is interpreted as base64.
libfmp4: fixed transdrm for HDS + Adobe Access.
package-hls: fixed ismt -> WebVTT playlist packaging
packager: when specifying drm_specific_data with a file path, the file name must contain a '.' for example: drm_specific_data.bin
dash: added "org.w3.clearkey" ClearKey signaling.
libfmp4: fixed reading of version 1 "pssh" boxes.
nginx: fixed error handling http response (#998)
package-hls: added support for Adobe Primetime DRM SAMPLE-AES
origin-hls: added support for Adding Primetime DRM SAMPLE-AES
libfmp4: fixed DFXP style attribute bug (#997)
packager: when generating output MP4 files, we now keep the order of the source audio and text tracks as given on the commandline.
download-to-own: added support for resume, and byte-range requests.
libfmp4: added support for sub-sample information (for smpte-tt image based subtitles).
hls: When playing back SAMPLE-AES encrypted HLS content, Adobe Flash requires the private_data_indicator_descriptor to be listed first.
live: fixed announcement of last HLS fragment when specifying an ending time in the future.
libfmp4: use Last-Modified header from server manifest file when using IsmProxyPass.
hls: use the three-character (ISO 639-2) language when no two-character (ISO 639-1) language is assigned.
origin: extended the Publishing Point API, added create, read, update and delete (CRUD) functions.
hevc: use aspect ratio information from video codec to determine the visual presentation size (instead of the width and height from the "tkhd" box).
dash: group audio representations according to dvb-dash rules.
capture: set retry time to 60 seconds (was 6) when running as --daemon.
capture: when running as --daemon, only sleep and ignore stdin.
live: added Restart and Catch-up TV options.
hls: updated --variant_set to use expressions.
libfmp4: fixed WebVTT to DFXP conversion when missing cue identifiers.
origin-hls: added AVERAGE-BANDWIDTH to EXT-X-STREAM-INF.
origin-hls: use same targetduration for media playlists and iframe playlists.
libfmp4: use external PlayReady Object when passed as iss.drm_specific_data.
package-hls: fix for calculating the bandwidth over media segments.
transdrm: fixed an issue with too agressive optimization of buckets causing the error FMP4_500 precondition failed 'aux_bucket->size == sample.aux_size'.
package-hls: added Playready Envelope encryption.
hls: added --fixed_gop option for HLS I-frame playlists.
hls: refactored master playlist generation.
hls: only output lowest bitrate i-frame playlist for video tracks that have the same spatial resoltion.
dash: added DFXP fourcc as supported text track.
hls: write elementary audio streams for ec3 instead of mpeg-ts when using --hls.no_multiplex.
live: fixed announcement of embedded c608 captions when encoder restarts.
dash: when using SegmentTimeline (this is the default for the isoff-live profile), then default to use fragment addressing. This is required for signaling of discontinuities, missing fragments, use of variable durations of encoded fragments.
dash: do not use a @presentationTimeOffset for live when using SegmentTimeline.
dash: added Adobe Access "pssh" box for Common Encryption.
mpd: added cenc:pssh to mpd when using --mpd.inline_drm.
hls: subtitles served as SMPTETT now use the start time of the track as reference point (instead of the fragment time).
package-hls: write elementary audio streams for ec3 instead of mpeg-ts.
capture: added support for decryting sample-aes elementary audio streams.
hls: added sample-aes for ec3.
nginx: feature parity with apache: adding usp_handle_f4f, usp_disable_mmap, s3_secret_key and s3_access_key; renamed keyword ism to usp_enable_ism; but no download to own or progressive download (for nginx lacking an extensible bucket api like apache has).
packager: added --disable_selective_nal_encryption option.
libfmp4: Set the PacketSize for Smooth Streaming to the constant sample size for ac3 audio.
libfmp4: use nAvgBytesPerSec from "wfex" box to set average bitrate.
--hls.no_multiplex: output elementary audio streams and mpeg-ts video.
dts: added support for 96KHz and 192KHz audio tracks.
live: scan avc video tracks for embedded c608 subtitles.
packager: do not add empty playready embedded license store.
nginx: updated configuration Options to be on par with Apache
libfmp4: fixed TTML namespace prefix in DFXP caption markup (#902)
piff: encrypt all NAL units with a fixed clear prefix.
hls: round TARGETDURATION to nearest integer (instead of ceil).
origin-hls: added EXT-X-I-FRAMES-ONLY to keyframe only playlist.
origin-hls: added CLOSED-CAPTIONS=NONE attribute.
hls: removed #EXT-X-DISCONTINUITY from VOD WebVTT subtitle playlists (#859)
mpeg-dash: subtitles served as fragmented MP4 now use the start time of the track as reference point (instead of the fragment time).
libfmp4: added "pasp" box (PixelAspectRatio).
mpeg-dash: added @presentationTimeOffset.
package-mpd: add support for external sidecar files, like WebVTT and TTML.
hls: scan avc1 payload for sps and pps and only insert sequence header when absent.
package-hls: fixed zero duration in iframe playlist when presentation ends with a fragment containing a single keyframe.
dvb-dash: added common encyption support.
hls: added FRAME-RATE attribute.
hls: skip NAL FILLER padding data.
libfmp4: added writing of delay edit for fMP4.
libfmp4: add explicit edit box when it is missing and composition time offsets are used.
libfmp4: when writing fMP4, replace the edit list entry MediaTime=ct_offset by negative-composition-time offsets.
libfmp4: added support for decrypting f4f files allowing adkm to clear and transdrm from adobe protected to other formats.
packager: when writing progressive MP4 rescale the timescale to a sensible value when the source timescale is 10.000.000.
packager: added "tfxd" box for fragments when brand "isml" is used.
hls: added --hls.subtitles_subformat=SMPTETT option.
package-hls: do not switch to audio elementary stream output (.aac, .ac3) when audio stream is longer than video stream.
transdrm: fixed transdrm for HDS playout (#847).
dash: only use a KID:CEK pair of a CENC compatible system (#850).
origin: added work around for Inlet encoder that pushes a "moov" box with duplicate trackIDs.
capture: read license-key from file.
libfmp4: disable negative composition time offsets (and use edit list to compensate for the ct_offset) by forcing --brand=iso2.
libfmp4: use "iso4" when creating (progressive) mp4 files with negative-composition-times.
libfmp4: when encrypting for PIFF/CENC, treat each NAL unit as a separate subsample.
origin: return samplerate from server manifest for ec-3 when no fourcc data is specified in the (1.4.57) server manifest.
packager: when a key IV value is specified, use it as-is.
libfmp4: fixed KeyFrames for Smooth Streaming for encrypted content on disk.
libfmp4: only write PlayReady ProtectionHeader in Smooth Streaming client manifest.
origin: fixed transdrm issue when re-encrypting subsample.
origin: added --hds.no_onfi flag. Setting this flag skips inserting any onFI message.
origin: add EXT-X-ENDLIST when live event is finished and we are not archiving.
origin: do not encrypt text/subtitle tracks for HLS.
libfmp4: upgraded AES backend to OpenSSL >= 1.0.1 to allow AES-NI hardware acceleration.
origin: use AAC-LC base samplerate for AAC SBR and AAC SBR+PS for Smooth Streaming.
live: updated announcement of media segments in HLS playlists. Now taking into account only the group of tracks that have identical trackname(s).
origin: remove dvr_window_length and time_shift from the query parameters for media segments (for ISS, HDS and DASH).
package: always interpret WebVTT as UTF-8 (but use BOM for SRT files)
libfmp4: use aspect ratio information from video codec to determine the visual presentation size (instead of the width and height from the "tkhd" box).
capture: use DiplayWidth and DisplayHeight in Smooth Streaming manifest as ratio to set the "tkhd" fields.
origin: fixed reading sample encryption data for files over 4GB.
libfmp4: better file/http buckets merge, combining many single reads into one.
hls: fixed stuffing of PAT and PMT.
hls: removed PROGRAM-ID and EXT-X-ALLOW-CACHE.
libfmp4: fixed comparison of fractions for large denominators.
package-hls: added AVERAGE-BANDWIDTH to EXT-X-STREAM-INF.
origin-hls: added EXT-X-INDEPENDENT-SEGMENTS. This is just for protocol version 3 and higher. We may change this in the future to always add it for all protocol versions.
dvb-dash: use application/mp4 as mime-type for subtitles.
libfmp4: use "subt" as handler type and "stpp" as fourcc for XML based subtitles (ttml, dfxp, smpte-tt, ebu-tt).
origin: do not encrypt text/subtitle tracks for Smooth Streaming and MPEG-DASH.
remix: create m3u8 master playlist from MPD.
dash: keep MPD@availabilityStartTime fixed.
libfmp4: fixed io_cached_range hit for "mfra" box.
origin-hls: when muxing audio/video, prefer to use the same source URL.
origin: fixed duplicate query arguments when using HTTP as source.
dvb-dash: remove SPS/PPS from avcC record for avc3.
dvb-dash: added @contentType attribute.
mp4split: only scan for embedded subtitles when the track id matches the predicate track id (when given).
mp4split: only read a single batch when we are interested in a single sample.
origin: doubled samplerate for SBR, set FourCC to AACP for AAC SBR+PS, use maximum values of SPS for avcC.
origin: added tfxd box for live smooth (required by osmf smooth plugin)
dvb-dash: added @minFrameRate and @maxFrameRate in Adaptation Set.
dvb-dash: write @scanType always for all Representations.
dvb-dash: updated @minWidth and @maxWidth to take @sar into account.
dash: grouping of representations incorrectly used the pixel aspect ratio, instead of the picture aspect ratio.
packager: fixed writing a single bucket larger than 4GB.
dvb-dash: move common Representation attributes and elements to Adaptation Set.
dvb-dash: added @startWithSAP=1 for Audio Adaptation Set.
hds: only add onFI messages to primary renditions and never for alternate renditions.
origin: when ingesting a (DVR) archive, calculate the created_at instead of using wallclock time NOW.
origin: use the maximum window length to calculate the expiry time instead of only the dvr_window_length.
origin: remove dvr_window_length and time_shift from the query parameters for media segments.
mp4split: don't scan the complete file for embedded subtitles.
package-hls: create a set of audio-only variants based on group_id.
dvb-dash: insert SPS/PPS after AUD for avc3.
packager: added support for importing older VC1/WMA fragmented isma/ismv files that have missing "trex" boxes or signal an incorrect "trex" version.
origin: fixed bitrate calculation for 64-bit MP4 files.
dvb-dash: group audio representations using @codecs, @audioSamplingRate and AudioChannelConfiguration.
origin: added --mpd.minimum_update_period option (defaults to 8 hours).
origin: added --mpd.availability_start_time option (default to unix epoch).
origin: fixed parsing of HDS SegN-FragM URL when the presentation name contains a period "." character.
origin: fixed 'missing drm options for hls' for Marlin encrypted HLS.
package-hls: fixed path resolving for --iframe-index-file option (resolved against path of the output filename).
dash: add signaling for all known DRM systems.
libfmp4: synthesize Widevine and PlayReady "pssh" box when possible.
packager: added decryption support when packaging to (fragmented)-mp4.
live: only announce fragments so that multiplexed audio and video is completely available.
packager: synthesize "pssh" box for Widevine when no drm_specific_data is given.
http: fixed crash when HTTP backend returns an empty Content-Type header.
origin: added Irdeto PlayReady DRM support for HLS playout (#475)
package-hls: fixed variants to only use unique groups.
package-hls: support win32 backslashes for encrypt-key-file option.
remix: write EXT-X-DISCONTINUITY by checking clip alignment.
fixed time_to_sequence to support large denominators.
Please note that an update to 1.7 also requires a new key.
ingest: fixed race condition with file locking and dual-ingest setup.
ingest: fixed "404 stream not found" error when a second encoder starts pushing while the first encoder has not announced the streams yet.
packager: added support for converting (basic) WebVTT to dfxp.
libfmp4: fixed bug when creating HLS V4 video only playlist. Work-around is to use --hls.no_audio_only.
origin: added extended EXT-X-KEY statement in m3u playlists for Marlin (Adding Marlin DRM, #663)
capture: try harder when configuring the encoder. The Intel Media SDK returns an error instead of a warning on some SDK versions. In the case of a warning or error we now continue trying more settings.
origin: added new playout format --hls.playout=SAMPLE_AES_STREAMINGKEYDELIVERY. This adds signaling for the KEYFORMAT="com.apple.streamingkeydelivery" to the m3u8 playlist.
libfmp4: avoid the loading of all the samples when scanning for embedded captions. Only scan the first AVC sample for SEI message.
libfmp4: option to combine multiple reads (maxRanges) into a single GET request. currently maxRanges is set to 1 since S3 doesn't support multiple ranges.
packager: added support for writing "dref"-ed fragmented MP4.
origin: added support for reading "dref"-ed fragmented MP4.
origin: added "piff" to "cenc" CENC and PIFF (Multi DRM) support.
package-hls: added --create-iframe-playlist option.
origin: fixed PES size of metadata stream.
mp4split: added key=KID:CEK option.
origin: added progressive download of fragmented MP4 (.ismv), also known as Download to own for HTTP Live Streaming (HLS), from a server manifest. Note that you will need the package_iis policy as well as the option --progressive_playout. This is only available in Apache since it uses "Transfer-Encoding: Chunked" and also requires a HTTP 1.1 client. HTTP Range requests are not supported. When a range is requested the reponse is a 200 and the complete file is returned.
hls: added playready-envelope encryption.
dash: added --mpd.profile option for specifying the URN of the "Interoperability Point"
hls: tightly pack keyframes in MPEG TS. This fixes the BYTERANGE sometimes being off by the size of a TS packet.
hds: do not use @alternate attribute in version 2 manifests when the audio is the "primary rendition".
live: fixed purging for archive_segment_length/dvr_window_length greater than 429 seconds in combination of a large timescale (10.000.000).
libfmp4: added support for "ttml" in "stsd" as output by Carcon Coder.
hls/hds: added support for "avc3".
hds: OSMF 2.0 based players crash/stop-responding when SCRIPTDATA is present in the alternate audio track. Do not add onFI messages in alternate audio fragments.
package-hls: calculate the BANDWIDTH for iframe-index playlists using the duration of the media segment. This makes sure that the BANDWIDTH in the iframe-index is never larger than the one specified in the prog-index.
package-mpd: added Widevine ("cenc" encryption, plus Widevine signaling).
origin: fixed the one sample missing in each audio fragment bug. This happened when using MP4 as source and Smooth Streaming as playout due to a rounding error caused by different source and destination timescales. A possible workaround is to use the option --iss.minimum_fragment_length=N and set N to the GOP duration.
origin: added Irdeto SKE DRM support for HLS playout (#449)
package-hls: skip consecutive I-frames when generating the iframe playlist.
use "cenc" instead of "piff" in "schm" box (except for "isml"/"piff" brands).
package-hls: added EXT-X-INDEPENDENT-SEGMENTS
capture: 404/412 status codes now return exit failure after retrying 3 times.
mp4split: added support for specifying fractions (numerator / denominator) for minimum_fragment_length options. For example you can now exacly specify 29.97002997 by using 30000/1001.
capture: updated to Media SDK 2014 R2
package-hls: made ID3 tags compatible.
package-hls: added --encrypt-iv to specify IV.
package-hls: fixed length of audio_setup_information in ID3 tag.
mp4split: Lowered memory requirements when decrypting content.
package-hls: added option "iframe-index-file"
package-hls: fixed byterange offset in iframe-index when used in combination with --output-single-file.
mp4split: added HEVC as supported codec for Smooth Streaming.
cff: removed "free" box (used for padding) after "ftyp".
added Conax Contego HLS encryption with PlayReady DRM. (--conax.key_id, --conax.content_key, --conax.license_server_url, --conax.key_iv=<8 BYTES, NONCE ONLY!>).
hls: updated ID3 Tags to use sps_rbsp and sei_rbsp
mp4split: Changed console output from stdout to stderr (DEBUG build only).
Fixed #518 (purging audio timestamps from db). This occured when multiple tracs were posted as a single stream. A possible work-around is to publish audio/video streams separately to the publishing point.
libfmp4: moved Smooth Streaming client manifest reader into library.
mp4split: Lowered memory requirements when packaging encrypted content.
corrected writing of relative URLs with a ":" in the first segment.
mp4split: added pdin/bloc/ainf/meta/trik boxes for CFF.
mp4split: set duration in mvhd box (as well as mehd box) for PIFF compatibility.
Added hashing to IV when creating a fragmented-MP4 file and dynamic playout of smooth/dash fragments.
Do not try and update live server manifest files when they are missing metadata. This may happen with live streams pushed by FFmpeg using -vcodec copy. The @systemBitrate attribute is zero in that case.
hls: signal version 2 protocol when IV is used.