video-dev/hls.js
 Watch   
 Star   
 Fork   
6 days ago
hls.js

v1.7.0-beta.2

Summary

HLS.js v1.7.0-beta.2 includes bug fixes and improvements over the last beta release.

Demo Page

https://e29be494.hls-js-dev.pages.dev/demo/

Changes Since The Last Release

https://github.com/video-dev/hls.js/compare/v1.7.0-beta.1...v1.7.0-beta.2

Features & Enhancements

  • CMCDv2 Support: custom events, custom keys and ec (#7887) @cotid-qualabs

Bug fixes

  • Support EXT-X-MEDIA-SEQUENCE declaration after EXT-X-SKIP (#7905) @hongjun-bae
  • Treat un-demuxable fragments as a gap to prevent infinite reloading (#7900)

Interstitials

  • Fix Low-Latency Live join with interstitial preroll (PRE,ONCE) (#7908) @robwalch
  • Fix Live Interstitial midroll buffering and playback (#7913)

Low-Latency HLS

  • Fix Low-Latency HLS subtitle part loading (#7893) @robwalch

I-Frame support

  • Fix remuxing of encrypted I-Frame segments (#7896) @robwalch
  • Fix AES byte-range addressed I-Frame decryption (#7892)

Regressions in dev / v1.7.0-beta.1

  • Fix subtitle buffering up to or past media buffer (#7921) @robwalch
  • Fix fatal KEY_SYSTEM_ERROR handling (#7920)
  • Fix autoStartLoad:false and deferred startPosition (#7903)
  • Fix uncaught init segment abort errors (#7904)

Build and CI

  • Lint em-dash chars (#7899) @robwalch

For the complete list of v1.7 changes, on top of those above, see the beta.1 release notes: https://github.com/video-dev/hls.js/releases/tag/v1.7.0-beta.1

Feedback

Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

2026-06-03 01:34:28
hls.js

v1.7.0-beta.1

Summary

HLS.js v1.7.0 adds I-frame playlist support, improved playback of protected content, and CMCD v2 for standardized streaming analytics. It also delivers smoother audio-track switching, faster startup via parallel init-segment loading, and broad fixes across Low-Latency HLS, subtitles, interstitials, and live streaming.

Highlights to try in this release:

  • I-frame playback — call hls.createIFramePlayer() and loadMediaAt(time) to render frames from a stream's #EXT-X-I-FRAME-STREAM-INF variants in a video element, or load an #EXT-X-I-FRAMES-ONLY media playlist directly.
  • Smoother audio switching — set hls.nextAudioTrack (or pass flushImmediate to setAudioOption) to schedule a seamless audio-rendition change that avoids stalls and added live latency.
  • CMCD v2 — set cmcd.version: 2 to enable it, and configure cmcd.eventTargets to send standardized event reports to an external analytics endpoint.
  • Faster startup — alternate audio and video init segments now load in parallel; try a stream with separate audio/video renditions.
  • Tune live resilience — new errorPenaltyExpireMs, abrSwitchInterval, and appendTimeout config options, plus the PLAYLIST_UNCHANGED_ERROR and MEDIA_SOURCE_REQUIRES_RESET events.

Changes Since The Last Release

https://github.com/video-dev/hls.js/compare/v1.6.15...v1.7.0-beta.1

Features

  • HLS I-FRAME playlist support#EXT-X-I-FRAME-STREAM-INF and #EXT-X-I-FRAMES-ONLY (#7757, #7791) @robwalch
    • Optimized I-frame parsing (#7794)
    • "mjpg" image I-frame support (#7862)
    • Parse I-frame multivariant tags that end at EOF without a trailing newline (#7851) @rudemateo
    • Play single-keyframe fMP4 segments and parse tfhd default_sample_size correctly (#7884) @rudemateo
  • CMCD v2 — upgrade Common Media Client Data reporting to the CMCD v2 specification (#7725) @littlespex
  • Smooth audio track switching via the hls.nextAudioTrack API (#7575) @krseager

New API, events & config options

  • hls.iframeVariants, hls.createIFramePlayer()HlsIFramesOnly.loadMediaAt(time) : render frames from a stream's #EXT-X-I-FRAME-STREAM-INF variants in a video element (#7757, #7791) @robwalch
  • hls.createImageIFramePlayer()HlsImageIFramesOnly.attachImage(image) : render "mjpg" image I-frame variants (#7862) @robwalch
    • iframeCacheLimit config option (default 2 MB) : cap I-frame data cached for rendering
  • hls.nextAudioTrack getter/setter : Smooth audio switching (#7575) @krseager
    • nextAudioTrackBufferFlushForwardOffset config option (default 0.25) : forward buffer retained when scheduling a seamless switch
  • Add optional flushImmediate argument to hls.setAudioOption (#7795) @krseager
  • hls.audioForwardBufferInfo getter : get audio-specific forward buffer info (#7865) @robwalch
  • PLAYLIST_UNCHANGED_ERROR event : Max Unchanged Live Updates (#7704) @dzianis-dashkevich
    • liveMaxUnchangedPlaylistRefresh config option (default Infinity) : unchanged live refreshes allowed before the error fires
  • MEDIA_SOURCE_REQUIRES_RESET error event : MediaSource closed while attached or ended on append error (#7699) @christriants
    • Started with: Track "sourceended" event and handle ManagedMediaSource recovery (#7697) @zalishchuk
    • Additional work (#7702, #7707) @robwalch
  • Only emit FRAG_PARSING_USERDATA when text samples are found (#7686) @XephyrKenny
  • Add subtitleTrack and closedCaptions properties to CUES_PARSED event (#7843) @robwalch
  • cmcd.version and cmcd.eventTargets config (plus cmcd.includeKeys and a custom cmcd.loader) : enable CMCD v2 and report events to an external analytics endpoint (#7725) @littlespex
  • abrSwitchInterval config option (#7669) @christriants
  • appendTimeout config option : SourceBuffer append operation timeout handling (#7670) @dzianis-dashkevich
  • errorPenaltyExpireMs config option : Re-elect penalized level after configurable penalty expiry (#7771) @Harshit661000
  • Add xhrSetup context arg and loader context types (#7831 @robwalch, #7762 @dzianis-dashkevich)
  • loopBackBufferFlush config option : flush the back-buffer on looped streams (#7869) @dzianis-dashkevich
  • handleMpegTsVideoIntegrityErrors config option ('process' | 'skip') : how to handle corrupt MPEG-TS video (#7094) @mstyura
  • emsgKLVSchemaUri config option (default urn:misb:KLV:bin:1910.1) : schema URI for MISB KLV emsg metadata (#7668) @jacorbello
  • skipBufferHolePadding config option (default 0.1) : padding applied when skipping buffer holes/gaps (#7630) @krseager

Enhancements

Content protection (DRM)

  • DRM and multi-key handling improvements for improved protected playback (#7517) @robwalch
  • Resolve usable keys from the latest key session before requesting another, and resolve setMediaKeys once attached (#7879, #7615) @robwalch
  • Parse the Widevine key id from the EXT-X-KEY PSSH (and encrypted event initData) when KEYID is absent (#7775, #7415) @robwalch @yajin2021
  • Support playback of elementary (containerless) audio encrypted with Sample-AES (#7479) @Yesterday17
  • Load the key for the fragment of a selected LL-HLS part so encrypted parts decrypt correctly (#7874) @robwalch

Audio switching, live & buffering

  • Smooth audio track switching (#7575) @krseager
  • Error and stop streaming after max unchanged live updates (#7704) @dzianis-dashkevich
  • Download init segments in parallel for a faster start (#7867) @krseager
  • Flush the back-buffer for looped streams (#7869) @dzianis-dashkevich
  • Improve audio/video append synchronization (#7842) @robwalch
  • Avoid an audio buffer flush on the first track switch (#7696)
  • Reach the "ended" state reliably when a playlist ends with empty or gap segments (#7609)
  • Better playlist alignment when PDT is inconsistent across renditions (#7482)

Timed metadata & track management

  • Extract MISB KLV timed metadata from MPEG-TS and CMAF streams (#7668) @jacorbello, including when audio is present (#7673) @jacorbello
  • Allow removing TextTracks that hls.js created (#7515) @xxoo
    • (Uses removable DOM <track> elements over HTMLMediaElement.addTextTrack() which does not allow removal)

Networking & resilience

  • fetch-loader retry logic for transient network failures (#7756) @dzianis-dashkevich
  • Verify byte-range responses and warn on a size mismatch (#7701) @robwalch
  • Detect corrupt MPEG-TS video streams (#7094) @mstyura

Performance, memory & lifecycle

  • Cap the selected level to the player size with ResizeObserver, and make nextLevelSwitch more responsive (#7108) @robwalch
  • Clear the resolved fragment/part URL cache when done to reduce memory use (#7731)
  • More reliable transmuxer teardown on destroy() (#7863)
  • Keep inherited logger methods intact on destroy() (#7864)
  • Improve M2TS init-segment handling and append-queue logging (#7695)
  • Remove dead code and some unused exports for a smaller bundle (#7882)

Bug fixes

Playback start, seeking & timestamps

  • Fix backward seeking that led to stalling or elevated buffering (#7577) @krseager
  • Fix certain Tizen devices getting stuck seeking over buffer gaps (#7630) @krseager
  • Fix an endless loop in the gap controller on bad streams (zero-duration segments) (#7661) @robwalch
  • Restore playback after page restoration from bfcache in Safari (#7683) @christriants
  • Restart loading from recoverMediaError() when autoStartLoad is disabled (#7693) @robwalch
  • Roll initPTS forward when needed by earlier segments (#7537) @robwalch
  • Correct a computeInitPts rollover that caused a segment-0 loop (#7752) @christriants
  • Adjust initPTS when a level switch drops the opening GoP (#7700) @robwalch
  • Do not update initPTS on small drift caused by playlist segment-duration rounding (#7792) @robwalch

Rendering & codecs

  • Work around Chrome silently evicting coded frames on PTS overlap (#7807) @robwalch
  • Pad the initial PTS of remuxed MPEG-TS to avoid Chrome rendering glitches (#7805) @robwalch
  • Drop bad MP4 data instead of failing the append (#7815) @robwalch
  • HEVC: set sync samples from IRAP VCL NALs (#7861) @gemxx
  • HEVC: correct access-unit sample boundaries in Safari (#7854) @gemxx
  • Switch away from containerless EC-3 audio that hls.js cannot demux (Safari) instead of stalling (#7873) @robwalch
  • Handle implicit HE-AAC for AAC Main at low sample rates (#7835) @robwalch

Audio tracks

  • Fix switching back to main (audio-only) after end-of-stream is buffered (#7645) @robwalch
  • Fix AES-128 decryption failure on alternate audio when a shared key load is pending (#7834) @robwalch
  • Fix audio TS segment duration calculation (#7646) @robwalch
  • Stop AUDIO_TRACK_LOAD_TIMEOUT from following the errorRetry policy in playlistLoadPolicy (#7506) @CongCong-1228

Content protection (DRM)

  • Fix PlayReady on some devices (#7631) @KunXi-Fox
  • Fix PlayReady key endianness (#7510) @ShubhamSharma2311
  • Fix an eme-controller type error that depended on promise state (#7877) @bwallberg
  • Fix licenseXhrSetup return types and a selectKeySystem nested-Promise anti-pattern (#7888) @robwalch

Subtitles & captions

  • Decrypt LL-HLS VTT AES parts per-part (#7881) @hongjun-bae
  • Fix Low-Latency HLS VTT subtitle part loading (#7626) @robwalch
  • Align WebVTT segments missing an X-TIMESTAMP-MAP header with the media timeline (#7852) @robwalch
  • Fix WebVTT loading by disabling progressive loading for WebVTT (#7649) @krseager
  • Cache initial cues added to a TextTrack so the browser does not remove them (#7809) @robwalch
  • Fix CEA-608 cursor clamping so position stays within the column array bounds (#7666) @chelleccarlyle

Live, interstitials & content steering

  • Fix live join following an interstitial preroll (#7846) @robwalch
  • Fix interstitial live start with a short sliding window (#7799)
  • Do not reset interstitials when seeking between assets (#7650)
  • Fix an interstitial-controller exception on legacy engines where media.play() returns no Promise (#7586) @malickyeu
  • Fix fallback to primary on live start (#7651) @robwalch
  • Content Steering: apply URI-REPLACEMENT HOST to the hostname only (#7655)
  • Pathway Cloning: apply PARAMS after PER-VARIANT-URIS (#7710)

Live updates & playlist parsing

  • Keep PLAYLIST_UNCHANGED_ERROR non-fatal so playback can reach the end of the playlist (#7812) @robwalch
  • Support an EXT-X-DISCONTINUITY-SEQUENCE declaration after the first media segment (#7750)
  • Detect stream end after a live-to-VOD transition when endListFragments is stale (#7754) @alchemyyy
  • Fix the initial reload time of a live playlist loaded with hls.loadSource() (#7875) @robwalch
  • Do not request a video buffer flush or EOS when the main playlist is audio-only (#7868)
  • Fix "Missing format identifier #EXTM3U" playlist parsing errors (#7533)
  • Multivariant playlist parsing fixes (#7523)

Buffering, memory & recovery

  • Recover from QuotaExceededError by evicting the back-buffer and retrying (#7749) @alchemyyy
  • Limit buffering while paused outside the live sliding window (#7788) @robwalch
  • Prevent loop-loading of segments whose appends were dropped (#7797)
  • Make part.gap writable and handle part muxing errors as gaps (#7814)
  • Forward transmuxer worker errors correctly (#7883)

Build and CI

  • Correct interstitial env vars and content-steering condition (#7727) @zalishchuk
  • Update Chrome configuration for macOS in build.yml (#7698) @robwalch
  • Increase minimum Windows test version for saucelabs (#7602)
  • Use BrowserStack to run macOS CI tests (#7836)
  • Update minimum browser support documentation and build config (#7880)
  • Update to TypeScript 5.9 (#7607)
  • Add dev container support for contributors (#7758) @tjenkinson

Documentation and README

  • Create SECURITY.md (#7685) @pr4v33n7-sa
  • Fix links for API Docs in README (#7637) @daniemo2
  • Add Labra-Flex to 'They use HLS.js in production!' section (#7419) @aaskaoui
  • Add missing config options to API.md (#7628) @krseager
  • Update README Alternative setup for 2026 browsers (#7844) @robwalch
  • Fix HLS.js product name in issue templates (#7828) @karlhorky
  • Document testing with BrowserStack and SauceLabs (#7780) @robwalch

Demo

  • Fix TypeError on playlist load/reload inside of 3rd party library Chart.js for demo page (#7801) @krseager
  • Add an hlsjsConfig query param to populate the demo editor (#7473) @quentinms

Demo Page

https://9f9035b8.hls-js-dev.pages.dev/demo/

Special thanks

Beyond the code contributors credited above, a big thank you to the community members whose issue reports drove fixes and improvements in this release:

  • @gdplayerto (#4958), @iamsyk (#6374), @Hyddan (#6680), @luwes (#6777), @Tzipi-kaltura (#7524), @twilson90 (#7531), @knuthaug (#7535), @bmarshall (#7536), @AfLosada (#7541), @dchan-harmonicinc (#7554), @xtne6f (#7556), @MosheMaorKaltura (#7572), @matvp91 (#7641), @doublex (#7667), @thexeos (#7677), @gjanblaszczyk (#7687), @wei-li-dwango (#7808), @foliovision (#7833), @philhar88 (#7845), @robybales3 (#7850), and @mrlika (#7876)
  • @flagoworld, whose PR #7453 informed the live media playlist reload fix (#7875)

Feedback

Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

2026-04-14 00:50:12
hls.js

v1.6.16

Summary

HLS.js v1.6.16 includes bug fixes and improvements over the last release.

Changes Since The Last Release

https://github.com/video-dev/hls.js/compare/v1.6.15...v1.6.16

  • Fix Interstitials live start with short sliding window (#7799)
  • Limit buffering while paused outside live sliding window (#7788)

Demo Page

https://121bff6b.hls-js-dev.pages.dev/demo/

Feedback

Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

2026-03-06 06:27:20
hls.js

v1.7.0-alpha.1

Summary

HLS.js v1.7.0-alpha.1 is a pre-release marking a number of significant changes since the last v.16.x patch (all "v1.16.16-canary releases since v1.7.0-alpha.0 should have been versioned as 1.7 canary). This is not a feature-complete release. See the v1.7.0 milestone page and planning board for more info.

Changes Since The Last Release

https://github.com/video-dev/hls.js/compare/v1.7.0-alpha.0...v1.7.0-alpha.1

API additions

  • hls.nextAudioTrack getter/setter : Smooth audio switching (#7575) @krseager
  • PLAYLIST_UNCHANGED_ERROR event : Max Unchanged Live Updates (#7704) @dzianis-dashkevich
  • MEDIA_SOURCE_REQUIRES_RESET error event (MediaSource closed while attached or ended on append error) (#7699) @christriants
    • Started with: Track "sourceended" event and handle ManagedMediaSource recovery (#7697) @zalishchuk*
    • Additional work (#7702, #7707) @robwalch
  • Only emit FRAG_PARSING_USERDATA when text samples are found (#7686) @XephyrKenny
  • abrSwitchInterval config option (#7669) @christriants
  • appendTimeout config option : append operation timeout handling (#7670) @dzianis-dashkevich

Enhancements

  • Implemented smooth audio switching (#7575) @krseager
  • Max Unchanged Live Updates (#7704) @dzianis-dashkevich
  • Support playback for elementary audio stream encrypted using Sample-AES (#7479) @Yesterday17
  • DRM and Multi-key handling improvements (#7517) @robwalch Resolve setMediaKeys only once media is attached (#7615)
  • Verify byte-range responses (#7701)
  • Improve playlist alignment when PDT across playlists is inconsistent (#7482)
  • Clear Fragment and Part resolved url cache (#7731)
  • Prevent audio buffer flush on first track switch (#7696)
  • Append queue logging and M2TS init segment handling (#7695)
  • Resolve end-of-stream (for "ended" event) with empty or gap segments at end of playlist (#7609)
  • Add SourceBuffer append operation timeout handling (#7670) @dzianis-dashkevich
  • Check integrity of MPEG-TS video stream. (#7094) @mstyura
  • feat: Add MISB KLV metadata extraction from MPEG-TS and CMAF streams (#7668) @jacorbello
  • Allow KLV parsing when audio is available (follow up to #7668) (#7673) @jacorbello

Bug fixes

  • fix: handle page restoration from bfcache in Safari (#7683) @christriants
  • fixed issue with seeking backward leading to stalling OR elevated buffering (#7577) @krseager
  • fix: cea608 parser make sure pos is within bounds of chars array which has size of NR_COLS (#7666) @chelleccarlyle
  • Fix WebVTT loading issue when progressive is enabled by disabling progressive loading for WebVTT (#7649) @krseager
  • Fixed issue where certain Tizen devices would get stuck seeking over buffer gaps (#7630) @krseager
  • Fix issue where some devices not works with PlayReady (#7631) @KunXi-Fox
  • Fixed exception in interstitial-controller on legacy platforms where media.play() does not return a Promise (#7586) @malickyeu
  • Fix Pathway Cloning PARAMS applied after PER-VARIANT-URIS (#7710) @robwalch
  • Fixed Content Steering URI-REPLACEMENT: HOST applies to the Hostname, (#7655)
  • Adjust initPTS when switching results in dropped GoP at start (#7700)
  • Fix Low-Latency HLS VTT subtitle part loading (#7626)
  • Restart loading in recoverMediaError when autoStartLoad is disabled (#7693)
  • Fix endless while loop in gap controller with bad streams (#7661)
  • Fix fallback to primary on live start (#7651)
  • Do not reset interstitial when seeking between assets (#7650)
  • Fix switching back to main audio(-only) after end-of-stream buffered (#7645)

Build and CI

  • fix(build-config): correct interstitial env vars and content-steering condition (#7727) @zalishchuk
  • Update Chrome configuration for macOS in build.yml (#7698, #7698) @robwalch
  • Increase minimum Windows test version for saucelabs (#7602) @robwalch

Documentation and README

  • Create SECURITY.md (#7685) @pr4v33n7-sa
  • Fix links for API Docs in README (#7637) @daniemo2
  • Add Labra-Flex to 'They use HLS.js in production!' section (#7419) @aaskaoui
  • Updated documentation (#7628) @krseager

Demo Page

https://a24cf9ae.hls-js-dev.pages.dev/demo/

Feedback

Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

2025-11-19 07:41:53
hls.js

v1.6.15

Summary

HLS.js v1.6.15 includes bug fixes and improvements over the last release.

Changes Since The Last Release

https://github.com/video-dev/hls.js/compare/v1.6.14...v1.6.15

Content Protection:

Interstitials:

  • Fixed reloading interstitial asset-list when seeking between assets in append-in-place mode (Fixes #7640 reported by @KunXi-Fox) (#7640) by @robwalch
  • Fixed Interstitials fallback to primary on live start with empty asset-list (Fixes #7641 reported by @matvp91) (#7641)

Streaming:

Demo Page

https://b5567215.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.

2025-11-01 05:13:09
hls.js

v1.6.14

Summary

HLS.js v1.6.14 includes bug fixes and improvements over the last release.

Changes Since The Last Release

https://github.com/video-dev/hls.js/compare/v1.6.13...v1.6.14

  • Fixed #7608: exception calling setMediaKeys with Interstitial preroll (#7615)
  • Fixed #7581: exception on legacy platforms where media.play() does not return a Promise with Interstitials (#7586)

Demo Page

https://6c1eb7c9.hls-js-dev.pages.dev/demo/

Feedback

Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.

2025-10-07 05:53:47
hls.js

v1.7.0-alpha.0

Summary

HLS.js v1.7.0-alpha.0 marks the creation of branch patch/v1.6x for LTS maintenance and merging of changes slated for 1.7.0 into development (master).

See the HLS.js Release Planning and Backlog board for more details on planned work, the deployments page for canary builds, and the roadmap for overall release features and theme.

2025-09-22 22:31:43
hls.js

v1.6.13

Summary

HLS.js v1.6.13 includes bug fixes and improvements over the last release.

The initPTS fix addresses an edge-case introduced in v1.6.6 with #7311, where hls.js began using MSE timestampOffset in place or remapping media timestamps.

The content protection related fixes address issues resulting from an expectation for a KEYID attribute or a key ID value in the EXT-X-KEY tag or its URI.

Changes Since The Last Release

https://github.com/video-dev/hls.js/compare/v1.6.12...v1.6.13

  • Fix seeking back in live with timestamp wrapping (#7537) @robwalch
    • Fixes "fragParsingError" after seeking back in live - regression introduced in 1.6.6 with #7311 (#7536) @bmarshall
  • Use Widevine KEYID or parse PlayReady when level keys are present (#7545)
    • Fixes FairPlay parsing error - regression introduced in 1.6.11 (#7542) @Jason239
  • Get KEYID from init segment 'tenc' when not found elsewhere (#7547)
    • Fixes Widevine key parsing error - regression introduced in 1.6.11 with #7527 (#7541) @AfLosada

Demo Page

Get demo url from https://github.com/video-dev/hls.js/tree/deployments

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.

2025-09-09 23:08:08
hls.js

v1.6.12

Summary

HLS.js v1.6.12 includes bug fixes and improvements over the last release.

Changes Since The Last Release

https://github.com/video-dev/hls.js/compare/v1.6.11...v1.6.12

  • Fixed PlayReady regression introduced v1.6.11:
    • Fix PlayReady key endianness (#7510) @ShubhamSharma2311
    • Error handling for PlayReady key with no status change (#7527) @robwalch
  • Use (incomplete) Widevine PSSH parsing when KEYID attribute missing from playlist KEY tags (#7415) @yajin2021
  • Multivariant Playlist parsing fixes (#7523) @robwalch
    • Add missing stats.parsing.end timing to manifest events
    • Use playlist CODECS in mime-type when handling unknown codecs (fixes handling of AIV example content)
  • Setup as audio-only when main segment has no video and CODECS is missing (#7530)
  • Fix live reload failure after empty playlist response (“no EXTM3U delimiter” error) (#7533)

Demo Page

https://37434c54.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.

2025-08-26 01:10:32
hls.js

v1.6.11

Summary

HLS.js v1.6.11 includes bug fixes and improvements over the last release.

Changes Since The Last Release

https://github.com/video-dev/hls.js/compare/v1.6.10...v1.6.11

Bug Fixes

  • Fix Interstitial asset events not firing when attaching primary before last asset on PLAYOUT-LIMIT update (#7467) @robwalch
    • Issue reported by @martmol (follow up to #7239)
  • Handle EME key status errors such as "internal-error" and "output-restricted" before appending segments (#7414)
    • Fixes: Playback ends when the "keySystemStatusInternalError" occurs (#7413) @yajin2021
    • Fixes: HDCP error when playing manifests with both HD and SD levels (#7469) @mudit2108
  • Defer segment requests when network connection is lost (#7476) @robwalch
    • Resolves: Regression due to treating HTTP status 0 differently from 404 (#7471) @Frenzie
  • Fix exception when seeking to program end (#7478) @robwalch

Tasks

  • Add ESLint syntax rules to restrict async syntax (#7480) @robwalch
  • Improve functional test logs (#7481)

Documentation

  • Fix syntax in recoverMediaError example in API.md (#7470) @tmatth

Demo Page

https://9f517588.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.