Skip to content


Choose a tag to compare
@github-actions github-actions released this 11 Apr 18:30
· 510 commits to master since this release


HLS.js v1.4.0 includes support for HLS Content Steering, EXT-X-DEFINE Variable Substitution, and preliminary support for GAP tags. An updated build process and packager provides ES module and worker script output with smaller script payloads. It also includes ABR improvements for short segments and Low-Latency HLS Parts, async xhrSetup support, new load policy error handling config options, and other bug fixes and enhancements.

Demo Page

Changes Since The Last Release

New Features

Enhancements and Bug Fixes

  • Add playlist RTT and time-to-load given buffer ahead (#5329) @iamboorrito
  • Live reload level switch and error handling improvements (#5317) @robwalch
  • Support partial RENDITION-REPORT URI matches fallback (#5176) @robwalch
  • Fix current quality reporting when seeking back from edge in Low-Latency streams (#5102) @robwalch
  • Treat TARGETDURATION as a decimal-integer assigned a minimum value of 1 (#5159) @robwalch
  • Log error and detach if MediaSource 'sourceopen' is interrupted (#5206) @robwalch
  • Fix for SourceBuffer full error handling (#5332) @robwalch
  • Fix M2TS probing when PAT packet is not found in first three packets (#5252) @robwalch
  • Fix fallback to inline worker when exception is thrown in worker (worker.onerror) (#5270) @robwalch
  • Fix initPTS change between variants (timescale or basetime change) (#5235) @robwalch
  • Handle invalid signed "tfdt" decode time values (#5333) @robwalch
  • Add cue id for date-range cues (#5169) @yajin2021
  • Fix subtitle track selection when TextTrack kind is captions (#5297) @dstreet26
  • Cleanup config on destroy since callbacks can have references to the player instance or other objects in their scope (#5279) @robwalch
  • Add ES5 syntax check for UMD builds (#5301) @thornbill
  • Fix demo bandwidth calculation / show estimated bitrate as line in bitrate graph (#4904) @silltho
  • Fix type name error (#5295) @JackPu
  • Only allow large gaps to be skipped if start gap or all fragments in range are partial (#5366) @robwalch
  • Content-Steering fix: Do not clear and reload bit-identical subtitle content (#5365) @robwalch
  • Relax TTFB timeout on manifest request (#5364) @robwalch
  • Light build optimizations and fixes (#5160) @robwalch
  • Improve bandwidth estimation and adaptive switching (#4825) @robwalch
  • Cleanup Attribute RegEx (#5208) @robwalch
  • Fix switching back to main audio from additional audio (#5170) @yajin2021
  • Do not use optional chain operator for functional tests (#5246) @tjenkinson
  • Play AES-128 stream failed sometimes (#5255) @yajin2021
  • Clear subtitle-stream-controller buffered list on detach (#5355) @robwalch
  • Remove fragments from FragmentTracker after transmux complete if fragment context changed (#5350) @tpaszun
  • Remove fragments from FragmentTracker on BUFFER_FULL (#5354) @robwalch
  • Use optional chaining operator in more places (#5243) @tjenkinson
  • TypeScript enum optimizations (#5271) @robwalch

CI and Documentation

API and Breaking Changes

New API Features and Deprecations since v1.3

Note all deprecations are soft deprecations, meaning that none of the deprecated options or attributes were removed from the runtime player. They will remain available for backwards compatibility until v2.0.

  • Added config.workerPath to support loading of a hosted hls.worker.js script over worker injection
  • xhrSetup can optionally return a Promise for async setup of XMLHttpRequest instances
  • ERROR Event enhancements:
    • All ERROR events include an error property of type Error which references either a caught exception or an Error object instantiated at the point of failure with a friendly error message
    • Added errorAction property to ERROR events, used by error-controller to resolve errors through retries and adaptive switching
    • Added stats property to ERROR events, used to gather timing information from network errors
    • Marked ERROR event err deprecated (replaced by error)
  • Added LEVEL_PARSING_ERROR to ErrorDetails, triggered when the playlist parser encounters invalid HLS content (Variable Substitution)
  • Added FRAG_GAP to ErrorDetails triggered when encountering a Segment or Part with a GAP tag or attribute, instead of attempting to load the media marked as unavailable. Error handling will attempt to switch renditions or jump the gap if a suitable replacement is not found.
  • Marked lowBufferWatchdogPeriod as deprecated (implementation missing/removed)
  • Deprecated loading timeout and retry config options in favor of new LoadPolicy options
    • A warning is logged when configuring the player with the deprecated loading settings, as they are converted to the new load policy options.

Upgrade Disclaimer

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.


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

New Contributors

Full Changelog: v1.3.5...v1.4.0