shaka-packager/CHANGELOG.md

20 KiB

2.2.1 - 2018-09-20

Added

  • Added support for seek preroll in AAC and other audio codecs (#452). This also addressed 'Unexpected seek preroll for codecs ...' warnings.
  • Computes and sets VP9 Level in the codec config if it is not already set (#469). This fixed VP9 in ISO-BMFF files generated by FFmpeg v4.0.2 or earlier which does not have level set in the codec config.

Fixed

  • Added a workaround for TS contents with dts moving backwards (#451). So instead of generating a sample with negative duration, which ExoPlayer does not handle, use an arbitrarily short duration instead.
  • Fixed pattern signaling in seig for key rotation with cbcs (#460).
  • Fixed incorrect segment name with Time in segment_template (#472). This resulted in the first segment being overwritten and led to playback problems.
  • Fixed TTML text input passthrough in DASH (#478). This is a regression introduced in v2.2.0.

2.2.0 - 2018-08-16

Added

  • EditList support in ISO-BMFF in both input and output (#112).
  • Multi-DRM support with --protection_systems flag (#245).
  • HLS AVERAGE-BANDWIDTH support (#361).
  • Dynamic Ad Insertion preconditioning support with Google Ad Manager (#362, #382, #384).
  • Configurable UDP receiver buffer size (#411). This can help mitigate or eliminate packet loss due to receiver buffer overrun.
  • Allow non-zero text start time (#416). Needed for live text packaging.

Changed

  • Deprecated --mp4_use_decoding_timestamp_in_timeline.
  • Deprecated --num_subsegments_per_sidx.
  • Generate DASH IF IOP compliant MPD with mpd_generator by default.
  • Adjust timestamps in ISO-BMFF if there is an initial composition offset as we believe that an EditList is missing in this case (Related to #112).
  • Add an adjustable offset to transport streams (MPEG2-TS, HLS Packed Audio) (Related to #112). The offset is configurable with --transport_stream_offset_ms. The default is 0.1 seconds.
  • Set default --segment_duration to 6 seconds.
  • Set default --clear_lead to 5 seconds. Shaka Packager does not support partial encrypted segments, so if segment_duration is 6 seconds, then only the first segment is in clear, with all the following segments encrypted.
  • Set default --io_block_size to 64K.
  • Disable Legacy Widevine HLS signaling for HLS with Widevine protection system by default. Use flag --enable_legacy_widevine_hls_signaling to enable it if needed.

Fixed

  • Build failures in Windows with CJK environment (#419).
  • Segmentation fault when processing WebVTT with out of order cues (#425).
  • Support WebVTT cues without payload (#433).
  • segmentAlignment is not set correctly in static live profile for multi-period content (#435). Theoretically it could happen for single period content as well, but with very low possibility of occuring.
  • Segmentation fault when packaging with an empty VTT file (#446).
  • Possible file name collision when --temp_dir is used (#448).

Doc

  • Added documentation for PlayReady and FairPlay (#306).
  • Added examples for TrickPlay.
  • Fixed live HLS example (#403).
  • Fixed DockerHub instructions link (#408).
  • Added documentation for Dynamic Ad Insertion preconditioning.
  • Added instructions for missing curl CA bundle on mac.

2.1.1 - 2018-07-03

Changed

  • Warn if HLS type is not set set to LIVE for UDP inputs (#347).
  • Use new vp09 codec string for WebM by default (#406). Set command line flag: --use_legacy_vp9_codec_string if the old behavior is needed.
  • Allow trailing null bytes in NAL units, to allow contents with the H264 spec violation to be processed instead of erroring out (#418).

Fixed

  • Fix MPD@duration not set with MPDGenerator (#401). This is a regression introduced in v2.0.1.
  • Remove 'wvtt' in HLS master playlist codec string as it breaks some old Apple products, e.g. AppleTV3 (#402).
  • Fix potential text Segment Timeline not being grouped together in DASH mpd (#417), which happens when --allow_approximate_segment_timeline is set.

2.1.0 - 2018-05-22

Added

  • Support Widevine and PlayReady PSSH generation internally in packager (#245). Documentation will be updated later.
  • Support removing segments outside of live window in DASH and HLS (#223).
  • Support UTCTiming for DASH (#311).
  • Support approximate SegmentTimeline (#330) under flag --allow_approximate_segment_timeline. The flag is disabled by default and it will be enabled in a later release.
  • Support UDP Source Specific Multicast (SSM) (#332).
  • Support elementary audio (Packed Audio) for HLS (#342).
  • Support FLAC codec (#345).
  • Support AAC with program_config_element (#387).
  • Support Widevine entitlement license with dual PSSH.
  • Add license notice in --licenses.

Changed

  • Ignore unsupported audio codec in the source content (#395). This allows other supported streams to be processed and packaged.

Fixed

  • Fix bitrate for DASH on-demand profile too (#376).
  • Fix Ad Cues and EXT-X-KEY tag handling in HLS iFrames only playlist (#378, #396).
  • Skip Style and Region Blocks in the source instead of failing (#380).
  • Fix potential slice header size off by one byte in H265 (#383).
  • Fix potential partial DASH segments during live packaging (#386).
  • Fix incorrect BOM used in WEBVTT header (#397).
  • Fix TS mimetype in DASH.

2.0.3 - 2018-04-23

Changed

  • Removed --pto_adjustment flag (related to #368).

Fixed

  • Use max bitrate in Representation@bandwidth instead of average bitrate (#376).
  • Set Widevine key request content-type to JSON instead of xml (#372).
  • Fix default_language not working if 2-char code is used (#371).
  • Do not force earliest_presentation_time to 0 for VOD (#303).
  • Generate more precise time in Period@duration (#368). This avoids possible rounding error in MSE causing frames to be dropped.

2.0.2 - 2018-03-27

Added

  • Support cue alignment from multiple demuxed streams (#355).

2.0.1 - 2018-03-05

Added

  • Recognize m4s as a valid extension for init segment (#331). It is used to be allowed as the extension for media segments only.
  • Improve DASH multi-period support: calculate presentationTimeOffset and Period@duration from video segment presentation timestamps. This avoids video playback jitters due to gaps.

Fixed

  • Handle invalid WebVTT with start_time == end_time gracefully (#335).
  • Ignore invalid meta box in mp4 files, which Android's camera app generates (#319).
  • Set stream duration in init segment for mp4 with static live profile (#340).

2.0.0 - 2018-02-10

Added

  • Enhanced HLS support.
    • Support for attributes RESOLUTION, CHANNELS, AUTOSELECT and DEFAULT.
    • Live and Event playlists.
    • fMP4 in HLS (including byte range support).
    • DRM: Widevine and FairPlay.
    • I-Frame playlist.
  • Enhanced subtitle support.
    • Segmented WebVTT in fMP4.
    • Segmented WebVTT in text, for HLS.
  • Support generating DASH + HLS manifests simultaneously (#262).
  • AC3 / E-AC3 support.
  • Experimental multi-period support.
  • Raw key multi-key support.
  • DASH Trickplay.
  • Make fMP4 output CMAF compatible.
  • Support for WebM colour element.
  • Support skip_encryption stream descriptor fields (#219).
  • Improved documentation and tutorials.

Changed

  • Refactored packager code and media pipeline.
  • Exposed top level packaging interface.
  • Renamed --webm_subsample_encryption flag to --vp9_subsample_encryption flag.
  • Deprecated --availability_time_offset flag.

Fixed

  • Write manifests atomically to fix possible truncated manifests seen on clients (#186).
  • [WebM] Fix live segmenter overflow if longer than two hours (#233).
  • Fix a possible interferenace problem when re-using UDP multicast streams in different processes (#241).
  • Create directories in the output path if not exist (#276).
  • Fix order of H265 VPS, SPS, PPS in hvcC box (#297).
  • Handle additional unused mdat properly (#298).
  • Fix possible incorrect HEVC decoder configuration data (#312).
  • Handle varying parameter sets in sample when converting from NAL unit stream to byte stream (#327).

1.6.2 - 2017-04-18

Added

  • Added an option to keep parameter set NAL units (SPS/PPS for H264, SPS/PPS/VPS for H265), which is necessary if the parameter set NAL units are varying from frame to frame. The flag is --strip_parameter_set_nalus, which is true by default. This addresses #206 (the flag needs to be set to false).

Fixed

  • Fixed the problem that sliding window logic is still active with DASH static live profile (#218).
  • Fixed AAC-HE not correctly signaled in codec string (#225).
  • [WebM] Fixed output truncated if using the same file for both input and output (#210).
  • [WebM] Fixed possible integer overflow in stream duration in MPD manifest (#214).

1.6.1 - 2017-02-10

Changed

  • Enable --generate_dash_if_iop_compliant_mpd by default. This moves ContentProtection element from Representation to AdaptationSet. The feature can still be disabled by setting the flag to false if needed.

Fixed

  • MPD duration not set for live profile with static mpd (#201).

1.6.0 - 2017-01-13

Added

  • Added support for Windows (both 32-bit and 64-bit are supported).
  • Added support for live profile with static mpd by setting flag --generate_static_mpd (#142). This allows on demand content to use segment template.
  • Added support for tagging a specific audio AdaptationSet as the default / main AdaptationSet with --default_language flag (#155).
  • Added UDP options support: udp://ip:port[?options]. Currently three options are supported: reuse=1|0 whether reusing UDP sockets are allowed (#133), interface=a.b.c.d interface address, timeout=microseconds for socket timeout.
  • Added 4K and 8K encryption support (#163).

Changed

  • [WebM][VP9] Use subsample encryption by default for VP9 per latest WebM spec. The feature can be disabled by setting --webm_subsample_encryption=false.
  • [WebM] Mimic mp4 behavior: either all the samples in a segment are encrypted or all the samples are clear.
  • [WebM] Move index segment forward to right after init segment (#159).

Fixed

  • Fixed AdaptationSet switching signalling when --generate_dash_if_iop_compliant_mpd is enabled (#156).
  • [H.264] Fixed access unit detection problem if there are multiple video slice NAL units in the same frame (#134).
  • [WebVTT] Detect .webvtt as WebVTT files.
  • [WebM] Fixed keyframe detection in BlockGroup for encrypted frames.
  • [HLS] Fixed HLS playlist problem when clear lead is set to zero (#169).
  • Fixed --version command.

Deprecated

  • Deprecated flag --udp_interface_address. Use udp options instead.
  • Deprecated flags --single_segment and --profile. They are now derived from the presence of 'segment_template' in stream descriptors.

1.5.1 - 2016-07-25

Added

  • Added a runtime flag to use dts in timeline for mp4: --mp4_use_decoding_timestamp_in_timeline

Changed

  • Remove restriction that sps:gaps_in_frame_num_value_allowed_flag should be 0 in h264. Packager should not care about this flag (#126).
  • Remove restriction that sample duration cannot be zero. A warning message is printed instead (#127).

Fixed

  • Fix text formats (webvtt, ttml) not recognized problem (#130).

1.5.0 - 2016-07-12

Added

  • Added TS (output) and HLS (output) with SAMPLE-AES encryption support. Note that only H.264 and AAC are supported right now.
  • Added support for CENCv3, i.e. 'cbcs', 'cbc1', 'cens' protection schemes.
  • Added H.265 support in TS (input) and iso-bmff (input / output).
  • Added experimental Opus in iso-bmff support.

Changed

  • Change project name from edash-packager to shaka-packager. Also replaces various references of edash in the code accordingly.

1.4.1 - 2016-06-23

Fixed

  • [VP9] VPCodecConfiguration box should inherit from FullBox instead of Box.
  • [VP9] Fixed 'senc' box generation when encrypting mp4:vp9 with superframe.
  • [WebM] Close file before trying to get file size, so the file size can be correctly calculated.

Changed

  • [MP4] Ignore unrecognized mp4 boxes instead of error out.

1.4.0 - 2016-04-08

Added

  • Added support for MacOSX (#65). Thanks to @nevil.
  • Added support for Dolby AC3 and EAC3 Audio in ISO-BMFF (#64).
  • Added support for language code with subtags, e.g. por-BR is now supported.
  • Added a new optional flag (--include_common_pssh) to widevine encryption to include common system pssh box in addition to widevine pssh box.
  • Improved handling of unescaped NAL units in byte stream (#96).

Changed

  • Changed fixed key encryption to generate common system pssh box by default; overridable by specifying pssh box(es) explicitly with --pssh flag, which is now optional. --pssh should be one or more PSSH boxes instead of just pssh data in hex string format if it is specified.
  • Improved subsample encryption algorithm for H.264 and H.265. Now only video data in slice NALs are encrypted (#40).

Fixed

  • Split AdaptationSets by container and codec in addition to content_type, language. AVC/MP4 and VP9/WebM are now put in different AdaptationSets if they are packaged together.
  • Fixed index range off-by-1 error in WebM DASH manifest (#99).
  • Fixed WebM SeekHeader bug that the positions should be relative to the Segment payload instead of the start of the file.

1.3.1 - 2016-01-22

This release fixes and improves WebM parsing and packaging.

Added

  • Added 'cenc:default_KID' attribute in ContentProtection element for non-MP4, i.e. WebM mpd too #69.
  • Added WebM content decryption support #72.

Fixed

  • Fixed decoding timestamp always being 0 when trasmuxing from WebM to MP4 #67.
  • Improved sample duration computation for WebM content to get rid of possible gaps due to accumulated errors #68.
  • Fixed possible audio sample loss in WebM parser, which could happen if there are audio blocks before the first video block #71.

1.3.0 - 2016-01-15

Added

  • Added support for new container format: WebM.
  • Added support for new codecs:
    • H265 in ISO-BMFF (H265 in other containers will be added later).
    • VP8, VP9 in WebM and ISO-BMFF (experimental).
    • Opus and Vorbis in WebM.
    • DTS in ISO-BMFF.
  • Added Verbose logging through --v or --vmodule command line flags.
  • Added Subtitle support for On-Demand: allowing subtitle inputs in webvtt or ttml. Support for subtitle inputs in media files will be added later.
  • Added version information in generated outputs.

Changed

  • Store Sample Auxiliary Information in Sample Encryption Information ('senc') box instead of inside Media Data ('mdat') box.
  • Got rid of svn dependencies, now all dependencies are in git repo.
  • Switched to boringssl, replacing openssl.

Fixed (in addition to fix in 1.2.1)

  • Fixed issue #55 DASH validation (conformance check) problems.
  • Fixed AssetId overflow in classic WVM decryption when AssetId exceeds 0x8000000.
  • Fixed a memory leak due to thread object tracking #61.

1.2.1 - 2015-11-18

Fixed

  • Fixed a deadlock in MpdBuilder which could lead to program hang #45
  • Fixed a race condition in MpdNotifier which could lead to corrupted mpd #49
  • Improved support for WVM files:
    • Support files with no PES stream ID metadata.
    • Support files with multiple audio or video configurations.
  • Fixed a race condition when flushing ThreadedIoFile which may cause flush to be called before file being written; fixed another race condition in ThreadedIoFile if there is an error in reading or writing files.
  • Relaxed requirement on reserved bits when parsing AVCC #44
  • Fixed stropts.h not found issue in CentOS 7.

1.2.0 - 2015-10-01

Added

  • Added docker support. Thanks @leandromoreira.

Changed

  • Improved performance with threaded I/O.
  • Disabled gold linker by default, which does not work on Ubuntu 64bit server.
  • Delete temperary files created by packager when done.
  • Updated MediaInfo file formats.

Fixed

  • Support ISO-BMFF files with trailing 'moov' boxes.
  • DASH-IF IOP 3.0 Compliance. Some changes are controlled by flag --generate_dash_if_iop_compliant_mpd. It is defaulted to false, due to lack of player support. Will change the default to true in future releases.
    • Added @contentType to AdaptationSet;
    • For video adaptation sets, added @maxWidth/@width, @maxHeight/@height, @maxFrameRate/@frameRate and @par attributes;
    • For video representations, added @frameRate and @sar attributes;
    • For audio adaptation sets, added @lang attribute;
    • For representations with aligned segments/subsegments, added attribute @subSegmentAlignment/@segmentAlignment;
    • Added cenc:default_KID and cenc:pssh to ContentProtection elements;
    • Moved ContentProtection elements up to AdaptationSet element, controlled by --generate_dash_if_iop_compliant_mpd;
    • Moved representations encrypted with different keys to different adaptation sets, grouped by @group attribute, controlled by --generate_dash_if_iop_compliant_mpd.
  • Fixed SSL CA cert issue on CentOS.
  • Fixed a couple of packager crashes on invalid inputs.
  • Read enough bytes before detecting container type. This fixed MPEG-TS not recognized issue on some systems.
  • Generate proper tkhd.width and tkhd.height with non-square pixels.
  • Support composition offset greater than (1<<31).
  • Fixed one-sample fragment issue with generated audio streams.
  • Fixed and correct width/height in VisualSampleEntry for streams with cropping. This fixes encrypted live playback issue for some resolutions.

1.1.0 - 2014-10-14

Added

  • Added timeout support for encryption key request.
  • Support mpd generation in packager driver program.
  • Support segment template identifier Time.
  • Support configurable policy in Widevine encryption key request.
  • Support key rotation, with configurable crypto_period_duration.
  • Support UDP unicast/multicast capture.
  • Support auto-determination of SD/HD track based on a configurable flag --max_sd_pixels.
  • Support new input formats:
    • WVM (legacy Widevine format), both encrypted and clear;
    • CENC encrypted ISO-BMFF.

Changed

  • Replaced HappyHttp with curl for http request. Added https support.
  • Changed packager driver program to be able to package multiple streams.
  • Move source code into packager directory, to make it easier to third_party integration.

Fixed

  • Support 64 bit mdat box size.
  • Support on 32-bit OS.

1.0.0 - 2014-04-21

First public release.

Added

  • Repo management with gclient from Chromium.
  • Support input formats: fragmented and non-fragmented ISO-BMFF.
  • Support encryption with Widevine license server.
  • Support encryption with user supplied encryption keys.
  • Added packager driver program.
  • Added mpd_generator driver program to generate mpd file from packager generated intermediate files.