Releases: video-dev/hls.js
v1.6.8
Summary
HLS.js v1.6.8 includes bug fixes and improvements over the last release.
Changes Since The Last Release
- Interstitials improvements and fixes (#7425) @robwalch
- Unblock audio appends when video source buffer is at end-of-stream (#7442)
- Fix FairPlay Streaming EME "encryption" event handling (#7440)
- Timestamp offset stability fix for muxed "audiovideo" mp4 (#7436)
- Reset TS video parser with init segment (#7403)
- Ignore offsets related to default_display_window_flag in HEVC-TS demuxer (#7418) @devoldemar
- Improve
recoverMediaErrordocumentation in API.md (#7447) @robwalch
Demo Page
https://a0b0d665.hls-js-dev.pages.dev/demo/
API and Breaking Changes
If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.
Feedback
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.
v1.6.7
Summary
HLS.js v1.6.7 includes bug fixes and improvements over the last release.
Changes Since The Last Release
- Fix Widevine KEYID parsing (#7380) @robwalch
- Resolves No Playback of fmp4 + CBCS w/ Widevine (#7369) @Trevor-Uplynk
- Fix
requireKeySystemAccessOnStartwith Live HLS or start offset (#7383) @grabofus - Initialize key-system access on first segment request with encrypted segments (#7384) @robwalch
Demo Page
https://4e5546da.hls-js-dev.pages.dev/demo/
API and Breaking Changes
If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.
Feedback
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.
v1.6.6
Summary
HLS.js v1.6.6 includes bug fixes and improvements over the last release.
Changes Since The Last Release
- Fix parse PSSH box error (#7320) @yajin2021
- Use SourceBuffer
timestampOffset(#7311) @robwalch- Resolves audible artifacts on first audio segment boundary (#7310) @cjpillsbury
- MediaCapabilities enhancements (#7354)
- Support interstitial schedule navigation on INTERSTITIAL_ASSET_ENDED (#7329)
- Fix QuotaExceededError regression caused by change in Chrome 138 (#7368)
- Resolves stalling caused by change to QuotaExceededError
code(22 -> 0) shipped in Chome 138 (#7367) @spiralman
- Resolves stalling caused by change to QuotaExceededError
- Fix unnecessary setting of MediaSource duration with stale value (#7326)
- Resolves LL-HLS buffer append errors where playlist duration is shorter than latest append (#7321) @SangwonOh
- Fix errors in SourceBuffer creation when media parsed codec is unsupported (#7304)
- Resolves playback failure when unable to parse AAC mp4a codec correctly (#7302) @denivladislav and (#7355) @doublex
- Fix subtitle segment loading at live start (#7349)
- Update next load position if currentTime is not being used on seek (#7342)
- Resolves loading correct segments after seeking in rare startup scenarios (#7327) @AlexanderSlesarenko
- Functional test runner setup changes for running in Safari locally (#7313)
Demo Page
https://6fdff299.hls-js-dev.pages.dev/demo/
API and Breaking Changes
If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.
Feedback
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.
v1.6.5
Summary
HLS.js v1.6.5 includes bug fixes and improvements over the last release.
Changes Since The Last Release
Demo Page
https://7127ae6b.hls-js-dev.pages.dev/demo/
API and Breaking Changes
If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.
Feedback
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.
v1.6.4
Summary
HLS.js v1.6.4 fixes a regression in fragmented mp4 audio segment handling introduced in v1.6.3.
Changes Since The Last Release
- Fix mp4 audio sample duration calculation regression (#7290) @robwalch
- #7199 introduced a regression by skipping sample based duration calculation for audio tracks
Demo Page
https://5f099c29.hls-js-dev.pages.dev/demo/
API and Breaking Changes
If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.
Feedback
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.
v1.6.3
Summary
HLS.js v1.6.3 includes bug fixes and improvements over the last release.
Changes Since The Last Release
New configuration options
- Added config
preserveManualLevelOnErroroption (#7280) @brodiddev - Added config
requireKeySystemAccessOnStart(EME clear to encrypted transition) (#7216) @grabofus - Added config
startOnSegmentBoundarysynchronizing live start position with program boundary (#7211) @krseager - Added config
liveSyncMode?: 'edge' | 'buffered'to change live catch up seek behavior (#7210) @whdudtod1273
Interstitials
- Fixed appending of Interstitials in place that exceed X-PLAYOUT-LIMIT (#7182) @robwalch
- Support late X-PLAYOUT-LIMIT update with append-in-place interstitials (#7257)
- Skip Interstitial assets that error rather than falling back to primary for entire break (#7263)
- Fixed interstitial "_HLS_primary_id" value in asset requests (#7260)
EME
- Setting
requireKeySystemAccessOnStartfixes Chrome PIPELINE_DECODE_ERROR on clear to encrypted transition (#7216) @grabofus - Prevent same MediaKeys from being set on media element by eme-controller (#7284) @robwalch
- Fix MediaKeys cleanup on player destroy and reuse (#7287)
MSE and codec selection
- Prevent overlapping track appends in muxed fmp4 on discontinuity (#7199, #7247) @robwalch
- Fixed seeking into jagged discontinuity sequence boundary (#7274)
- Fix handling of variants with mixed video codecs starting with "avc1" (#7205)
- Improved HEVC codec parsing (#7177)
Misc
- Added missing type exports for modules exported in hls.mjs (#7225) @robwalch
- ESLint "for of" loops with no-for-loops (#7202) @satyam73
- Documentation: added note regarding ESM use with old browsers (#7203) @nebutch
- Added iptvplayer.stream to README.md (#7212) @korchix
Demo Page
https://b96cca92.hls-js-dev.pages.dev/demo/
API and Breaking Changes
If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.
Feedback
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.
v1.6.2
Summary
HLS.js v1.6.2 includes bug fixes and improvements over the last release.
Changes Since The Last Release
- Fix live "discontinuity sequence mismatch" regression (#7168) @robwalch
- Do not skip loading of parts that were previously buffered (#7167)
Demo Page
https://e5abc373.hls-js-dev.pages.dev/demo/
API and Breaking Changes
If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.
Feedback
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.
v1.6.1
Summary
HLS.js v1.6.1 includes bug fixes and improvements over the last release.
Changes Since The Last Release
- Fix streaming interruption from exception thrown setting MediaSource duration (#7148) @robwalch
- Make appendBuffer errors fatal when HTMLMediaElement.error is present (#7147)
- Guard against exceptions when parsing incomplete codec boxes (#7146)
- Warn on muxed mp4 with alt-audio (unsupported media configuration) (#7153)
- Support disabling alternate audio with config (#7154)
- Timeout
mediakeySession.remove()and only call for persistent-license sessions (#7050) @JackPu - Add workaround for Xbox One
keyStatuses.forEachcallback not work well (#7150)
Demo Page
https://26b6689f.hls-js-dev.pages.dev/demo/
API and Breaking Changes
If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.
Feedback
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.
v1.6.0
Summary
HLS.js v1.6.0 introduces support for HLS Interstitials with new API features, media support, and playback enhancements.
New features in release version 1.6
- HLS Interstitials Support (#6591, #6756, #6852, #6894, #6898, #6900, #6903, #6904, #6905, #6913, #6914, #6915, #6991, #7002, #7014, #7024, #7030, #7049, #7077, #7124, #7131) @robwalch, @matvp91
- Improved support for DolbyVision profiles 8 and 10 with supplemental codecs parsing (#7120, #7095) @timitt, @robwalch
- AES-256 and AES-256-CTR encryption methods (#6018) @jvary
- H.265/HEVC in MPEG2-TS (#5847, #6724, #6194, #6268, #6940) @devoldemar
- CMAF KLV Metadata (set
enableEmsgKLVMetadatatotrueto enable) (#6674) @glynd - Added APIC ID3 parsing via @svta/common-media-library ID3 refactor (#6260) @felipeYoungi
- Support playback of unknown CODECS with browser mime-type support (#6620) @robwalch
- #EXT-X-BITRATE support (#6843)
- CMCD "nor" added (#6091) @littlespex
- Improved stall detection and buffer gap handling (#6941)
- Flush MSE rendering pipeline when crossing video buffer holes with audio (#6972)
- Media Playlist parser validation errors (#7119)
API changes in release version 1.6
- Added
config.detectStallWithCurrentTimeMsused to specify the maximum amount of time in milliseconds before aBUFFER_STALLED_ERRORis reported when the media elementscurrentTimehas not advanced while playing (#6941) - Added
config.nudgeOnVideoHolewhether or not to nudge the playhead when crossing over video buffer gaps to flush the rendering pipeline and ensure smooth playback through video buffered ranges (#6972) - Added
config.enableInterstitialPlaybackset to false to disable Interstitial playback without turning off Interstitials parsing and events - Added
config.interstitialsControllerset tonullto disable Interstitials support completely - Added
config.interstitialAssetListLoadPolicydefines the loading policy of X-ASSET-LIST JSON - Added
config.liveSyncOnStallIncrease(#6455) @vk342 - Added
config.maxDevicePixelRatioto limit browser value when capping level to media element dimensions (#6825) @signalwerk - Added
config.videoPreference.videoCodecvideo codec selection preference option (#6483) - Added config options specifically for Interstitial asset player instances:
config.primarySessionIdidentifies the parent player session that spawned the asset player (read fromhls.sessionId)config.assetPlayerIdidentifies logs from asset playersconfig.timelineOffsetoffsets MSE appends for gapless playback
- Support
config.fetchSetupoptional async result (#6714) @zce - Added
hls.bufferedToEndread-only indicates when EOS has been appended (media is buffered from currentTime to end of stream) - Added
hls.bufferingEnabledread-only flag toggled withpauseBuffering()andresumeBuffering() - Added
hls.hasEnoughToStartgetter returns whether enough is buffered to seek to start position (#6571) - Added
hls.inFlightFragments - Added
hls.interstitialsManagerread-onlyInterstitialsManagerornull. TheInterstitialsManageris an interface for accessing program information and methods for seeking across items and skipping Interstitials. - Added
hls.latestLevelDetailsread-onlyLevelDetailsobject of the most up-to-date HLS variant Playlist data - Added
hls.loadLevelObjread-onlyLevelobject of selected level (variant) ornull - Added
hls.loadingEnabledread-only flag toggled withhls.startLoad()andhls.stopLoad() - Added
hls.pathwayPriorityContent-Steering setting (#6295) @PavelFomin90 - Added
hls.pathwaysgetter (#6997) @grabofus - Added
hls.sessionIdread-onlyHlsinstance UUID - used to assign a value to the _HLS_primary_id query parameter of interstitial requests - Added
hls.startPositionread-only the resolvedstartPositionthat playback will begin at once media is appended - Support setting
hls.targetLatency(#6473) @vk342 - Added
hls.transferMedia()detaches and returns MediaSource and SourceBuffers non-destructively - Added
hls.urlread-only value of the currently playing url (fromhls.loadSource(url)) (#6411) @ibobo - Added
Events.MEDIA_ENDEDevent (#6141) - Added
Events.STALL_RESOLVEDevent (#6941) - Added
Events.EVENT_CUE_ENTERUsed internally to determine when the playhead has entered a time-range replaced by an Interstitial event. - Added
levelInfo: LeveltoLevelLoadingDataandLevelLoadedDataevent data - Added
track: MediaPlaylisttoTrackLoadingDataandTrackLoadedDataevent data (audio and subtitle events) - Added
withoutMultiVariant: booleantoLevelLoadedDataevent - Added
LevelDetais.expiredread-only indicates live playlist data is no longer valid for fragment loading - Added
LevelDetais.requestScheduledto improve live playlist reload scheduling - Added read-only
Fragment.bitrateandFragment.byteLengthgetters - Several
Fragmentproperties have been replaced with accessors:get baseurl(),get/set stats(),get/set programDateTime(). Class property accessors are not enumerable. This impacts copying object properties and serialization.Fragment.statsremain enumerable with (#6999) - Enhancements:
hls.startLoad()takes a second optional argument to skip seeking on start (otherwise, HLS.js seeks following to the first optionalstartPositionargument on append)hls.attachMedia()supports transferring MediaSource and SourceBuffers fromHlsinstances withhls.transferMedia()hls.recoverMediaError()seeks to the value ofcurrentTimebefore the source reset is performed (#6297)
- New Events:
ASSET_LIST_LOADINGwhen a request is made for an X-ASSET-LIST JSON objectASSET_LIST_LOADEDwhen a response is received for an X-ASSET-LIST JSON objectINTERSTITIALS_UPDATEDwhen Interstitials are added, removed, or the schedule is updated following a variant playlist update or updated asset durations from X-ASSET-LIST JSON or asset playlist and media parsingINTERSTITIALS_BUFFERED_TO_BOUNDARYwhen the forward buffer reaches the boundary of the following schedule item (Interstitial event or primary segment)INTERSTITIAL_ASSET_PLAYER_CREATEDwhen an asset player instance is created to stream an Interstitial asset (will always be before attaching media to the asset player)INTERSTITIAL_STARTEDwhen streaming of an Interstitial event containing one or more assets has begun (may occur before X-ASSET-LIST JSON is loaded or playback has started)INTERSTITIAL_ENDEDwhen streaming of an Interstitial event containing one or more assets has ended - before resuming primary or starting the next eventINTERSTITIAL_ASSET_STARTEDwhen streaming of an Interstitial asset has begun (following the beginning of the event or the end of the last asset)INTERSTITIAL_ASSET_ENDEDwhen streaming of an Interstitial asset has ended (before the next asset or the event ending)INTERSTITIAL_ASSET_ERRORwhen an error occurs starting or streaming an Interstitial asset (this can include non-fatal errors such as stalling and errors that will end streaming of the asset, resulting in the schedule advancing to the next asset or fallback to primary)INTERSTITIALS_PRIMARY_RESUMEDwhen playback of primary content has begun or resumed from an Interstitial eventBUFFERED_TO_ENDwhen the last audio and video segments in the playlist have been appended (EOS signaled on all SourceBuffers)AUDIO_TRACK_UPDATEDsimilar to LEVEL_UPDATED fired for any update to audio group playlistsSUBTITLE_TRACK_UPDATEDsimilar to LEVEL_UPDATED fired for any update to subtitle group playlists
- Updated Events
MEDIA_ATTACHING,MEDIA_ATTACHED,MEDIA_DETACHING, andMEDIA_DETACHEDinclude additional information (depending on whether media is being transferred)
- New Errors
- Type:
NETWORK_ERROR- details:
ASSET_LIST_LOAD_ERRORnetwork error loading asset list - details:
ASSET_LIST_LOAD_TIMEOUTnetwork timeout error loading asset list - details:
ASSET_LIST_PARSING_ERRORasset list was not valid JSON or missing required data
- details:
- Type:
OTHER_ERROR- details:
INTERSTITIAL_ASSET_ITEM_ERRORan issue interrupted or prevented asset playback. This will result in skipping the remainder of the asset or falling back to primary content. The eventerrorwill contain more details. This type of error differs from theINTERSTITIAL_ASSET_ERRORevents forwarded from asset player errors. - details:
ATTACH_MEDIA_ERRORwhen callingattachMediawith falseymediaargument (#6556) @agajassi
- details:
- Type:
Enhancements
- Reduce workers across instances (#6550) @robwalch
- Upgrade TypeScript to 5.8 (#7084, #7099)
- Update all type imports to explicitly use the type keyword. (#6332) @cjpillsbury
- Tidy import statements with linter rules (#6378) @robwalch
- Add strict type checking for Uint8Array/ArrayBuffer (#5849) @robwalch
- Log playback rate adjustments. (#7115) @mstyura
- Separate the calculation of the next level into a protected method (#7040) @Kouji-Koike
- Do not close key session on detach (wait until destroy) (#6966) @JackPu
- Make latency-controllers getters safe to call after destroyed (#7015) @robwalch
- Use WebCrypto by default for AES decryption (#6015) @robwalch
- Lazy init CEA608 parsers (#6127) @robwalch
- Use unique logger configurations across instances (#6131, #6198, #6242) @robwalch
- Use average for level sorting and abandon rules check (#6135, #6146) @robwalch
- Handle
ManagedMediaSource"endstreaming" events without aborting requests (#6186) @robwalch - ...
v1.6.0-rc.2
Summary
HLS.js v1.6.0-rc.2 includes bug fixes and improvements over the last release.
Changes Since The Last Release
- Added support for supplemental codec with muxed audio-video segments (#7120) @timitt
- Log playback rate adjustments. (#7115) @mstyura
- Allow primary segment prefetching for interstitial resumption (#7124) @robwalch
- Fix fmp4 track timestamp alignment for non-av tracks (#7126)
- Media Playlist parser validation errors (#7119)
See the previous release candidate release notes for more v1.6 changes:
https://github.com/video-dev/hls.js/releases/tag/v1.6.0-rc.1
Demo Page
https://9951b1e2.hls-js-dev.pages.dev/demo/
API and Breaking Changes
If you are upgrading from version v0.14.17 or lower, see the MIGRATING guide for API changes between v0.14.x and v1.0.0.
Feedback
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.