4.0.0 (2022-04-30)
⚠ BREAKING CHANGES
- Remove small/large gap config, always jump gaps (#4125)
- config:
manifest.dash.defaultPresentationDelayhas been replaced bymanifest.defaultPresentationDelay(deprecated in v3.0.0) - config: Configuration of factories should be plain factory functions, not constructors; these will not be invoked with
new(deprecated in v3.1.0) - player:
shaka.Player.prototype.addTextTrack()has been replaced byaddTextTrackAsync(), which returns aPromise(deprecated in v3.1.0) - ui:
shaka.ui.TrackLabelFormathas been renamed toshaka.ui.Overlay.TrackLabelFormat(deprecated in v3.1.0) - ui:
shaka.ui.FailReasonCodehas been renamed toshaka.ui.Overlay.FailReasonCode(deprecated in v3.1.0) - offline:
shaka.offline.Storage.prototype.store()returnsAbortableOperationinstead ofPromise(deprecated in v3.0.0) - offline:
shaka.offline.Storage.prototype.getStoreInProgress()has been removed; concurrent operations are supported, so callers don't need to check this (deprecated in v3.0.0) shaka.util.Uint8ArrayUtils.equalhas been replaced byshaka.util.BufferUtils.equal, which can handle multiple types of buffers (deprecated in v3.0.0)- manifest:
shaka.media.SegmentIndex.prototype.destroy()has been replaced byrelease(), which is synchronous (deprecated in v3.0.0) - manifest:
shaka.media.SegmentIterator.prototype.seek(), which mutates the iterator, has been replaced byshaka.media.SegmentIndex.getIteratorForTime()(deprecated in v3.1.0) - manifest:
shaka.media.SegmentIndex.prototype.merge()has become private; usemergeAndEvict()instead (deprecated in v3.2.0) - plugin:
AbrManagerplugins must implement theplaybackRateChanged()method (deprecated in v3.0.0) - plugin:
shaka.extern.Cue.prototype.spacerhas been replaced by the more clearly-namedlineBreak(deprecated in v3.1.0) - plugin:
IUIElementplugins must have arelease()method (notdestroy()) (deprecated in v3.0.0) - Remove deprecated features, update upgrade guides (#4089)
- Remove support for Safari 12 and iOS 12 (#4112)
- hls: HLS disabled in old browsers/platforms due to incompatibilities (#3964)
Features
shaka.util.Uint8ArrayUtils.equalhas been replaced byshaka.util.BufferUtils.equal, which can handle multiple types of buffers (deprecated in v3.0.0) (ac5acc8)- Add Dockerfile and docker build instructions (925de19)
- add modern EME support for FairPlay (#3776) (6d76a13)
- add new methods to FairPlayUtils (#4029) (f1eeac1)
- add option for segment-relative VTT timings (#4083) (f382cc7)
- Add separate audio and video MIME types to Track API (#3892) (74c491d), closes #3888
- Allow WebP and AVIF image streams (#3856) (9f3fb46), closes #3845
- config:
manifest.dash.defaultPresentationDelayhas been replaced bymanifest.defaultPresentationDelay(deprecated in v3.0.0) (ac5acc8) - config: Configuration of factories should be plain factory functions, not constructors; these will not be invoked with
new(deprecated in v3.1.0) (ac5acc8) - dash: Construct ClearKey PSSH based on MPD ContentProtection (#4104) (b83b412)
- dash: Parse ClearKey license URL in MPD (#4066) (19e24b1)
- demo: Add Apple Advanced HLS Stream (TS) with raw AAC (#3933) (1becadf)
- demo: Added demo asset with raw AAC. (014c7b3), closes #2337
- DRM: add drmInfo to license requests (#4030) (abe846e)
- DRM: add initData and initDataType to license requests (#4039) (bdc5ea7)
- HLS: Containerless format support (36d0b54), closes #2337
- hls: HLS disabled in old browsers/platforms due to incompatibilities (#3964) (0daa00f)
- hls: make a head request if hls subtitles have no extension (#4140) (19e12b5)
- hls: parse EXT-X-GAP (#4134) (42eecc8)
- HLS: Re-add TS support to Safari (#4097) (8a3bed7)
- hls: Read EXT-X-PROGRAM-DATE-TIME (#4034) (89409ce), closes #2337
- manifest:
shaka.media.SegmentIndex.prototype.destroy()has been replaced byrelease(), which is synchronous (deprecated in v3.0.0) (ac5acc8) - manifest:
shaka.media.SegmentIndex.prototype.merge()has become private; usemergeAndEvict()instead (deprecated in v3.2.0) (ac5acc8) - manifest:
shaka.media.SegmentIterator.prototype.seek(), which mutates the iterator, has been replaced byshaka.media.SegmentIndex.getIteratorForTime()(deprecated in v3.1.0) (ac5acc8) - offline:
shaka.offline.Storage.prototype.getStoreInProgress()has been removed; concurrent operations are supported, so callers don't need to check this (deprecated in v3.0.0) (ac5acc8) - offline:
shaka.offline.Storage.prototype.store()returnsAbortableOperationinstead ofPromise(deprecated in v3.0.0) (ac5acc8) - offline: improve the speed of offline downloads (#4168) (73f6de3)
- only polyfill MCap for non Android-based Cast devices. (#4170) (11321d8)
- player:
shaka.Player.prototype.addTextTrack()has been replaced byaddTextTrackAsync(), which returns aPromise(deprecated in v3.1.0) (ac5acc8) - plugin:
AbrManagerplugins must implement theplaybackRateChanged()method (deprecated in v3.0.0) (ac5acc8) - plugin:
IUIElementplugins must have arelease()method (notdestroy()) (deprecated in v3.0.0) (ac5acc8) - plugin:
shaka.extern.Cue.prototype.spacerhas been replaced by the more clearly-namedlineBreak(deprecated in v3.1.0) (ac5acc8) - Public release of Sindarin (sjn) translation easter egg (#4033) (9029d06)
- Remove deprecated features, update upgrade guides (#4089) (ac5acc8)
- Remove small/large gap config, always jump gaps (#4125) (0fd1999)
- Remove support for Safari 12 and iOS 12 (#4112) (8bb7044)
- ui:
shaka.ui.FailReasonCodehas been renamed toshaka.ui.Overlay.FailReasonCode(deprecated in v3.1.0) (ac5acc8) - ui:
shaka.ui.TrackLabelFormathas been renamed toshaka.ui.Overlay.TrackLabelFormat(deprecated in v3.1.0) (ac5acc8) - ui: Add quality selection for audio-only content (#3649) (adc3502), closes #2071
- UI: Add video fullscreen support for iOS (#3853) (8d1b5e6), closes #3832
Bug Fixes
- Add explicit release() for FakeEventTarget (#3950) (f1c1585)
- Add missing module export in generated typescript defs (feefd7b)
- Avoid WebCrypto randomUUID when CMCD disabled (4731c76)
- cea: make a more robust CEA MP4 parser (#3965) (2687b95)
- Clear buffer on seek if mediaState is updating (#3795) (9705639), closes #3299
- cmcd: Fix Symbol usage in CMCD on Xbox One (#4073) (4005754), closes #4072
- css: Fix missing % in calculation (#4157) (1c86195)
- dash: Account for bandwidth before filtering text stream (#3765) (0b04aec), closes #3724
- dash: Fix performance regression (#4064) (298b604)
- dash: Fix playback of Dolby Atmos (#4173) (d51fe23), closes #4171
- Fix broken deps file generation on Windows (#4086) (9660ce8), closes #4085
- Fix CMCD property mangling (#3842) (fa5932c), closes #3839
- Fix CMCD top bitrate reporting (#3852) (922778a), closes #3851
- Fix compiler error introduced in #3864 (#3906) (0635e2c)
- Fix download of some HLS assets (#3934) (36ca820)
- Fix duplicate CMCD parameters in HLS live content (#3875) (f27401c), closes #3862
- Fix encryption detection to work around broken platforms (#4169) (c5f474e)
- Fix exception in StreamingEngine for EMSG with HLS (#3887) (48433ab), closes #3886
- Fix exceptions when quickly shutting down src= on Safari (#4088) (ca08230), closes #4087
- Fix MediaCapabilities polyfill on Safari (0201f2b), closes #3696 #3530
- Fix memory leak in DASH live streams with inband EventStream (#3957) (b7f04cb)
- Fix misdetection of HEVC support on MS Edge (#3897) (dfb3699), closes #3860
- Fix missing throughput in CMCD for HLS live (#3874) (df55944), closes #3873
- Fix playback failure due to rounding errors (1cc99c1), closes #3717
- Fix playRangeEnd for certain content (#4068) (5c81f3b), closes #4026
- Fix support for TTAF1 namespace (old version of TTML) (#3864) (771619f), closes #3009
- Fix usage of Shaka without polyfills (dfc44cb)
- hls: Fixed buffering issue with live HLS (#4002) (c438e85)
- HLS: skip whitespace in attributes (#3884) (ea6c02a)
- hls: Support playing media playlists directly (#4080) (48dd205), closes #3536
- image: Fix HLS image track issues (264c842), closes #3840
- image: Fix thumbnails issues (#3858) (087a9b4)
- offline: Clean up orphaned segments on abort (#4177) (c07447f)
- offline: Speed up offline storage by ~87% (#4176) (c1c9613), closes #4166
- performance: Eliminate use of ES6 generators (#4092) (57c7324), closes #4062
- Revert "Add missing module export in generated typescript defs" (#4175) (fe4f5c6), closes #4167
- Select first of identical audio streams (#3869) (a6d8610)
- Support multiple chapter tracks with same language (#3868) (8c626ae), closes #3597
- text: Fix caption overlap. (bf67d87), closes #3850 #3741
- text: Fix webvtt offset in sequence mode (#3955) (a4e9267), closes #2337
- text: Inherit alignment from regions. (e9df8fb)
- text: Made nested cues inherit region (#3837) (3ff48cb), closes #3743
- text: Remove caption wrapper bgColor (#3838) (0117441), closes #3745
- ttml: Center subtitles by default (#4023) (f2f24d5)
- UI: Add cursor pointer to range elements (#4059) (33e8400), closes #3220
- UI: Fix text UI not updating when text is disabled (#3867) (9f53d39), closes #3728