Repository navigation
Summary
HLS.js v1.7.4 includes bug fixes and improvements over the last release.
Changes Since The Last Release
Bug fixes and improvements
Low-latency HLS
- Fix skipping unloaded trailing parts at fragment boundaries (#8055) @darfink
- Advance part loading once all parts of a fragment are loaded (#8134, follow-up to #8055) @robwalch
- Adjust playlist position using first part start PTS (#8105, fixes #8098)
- Fix repeated audio buffer flushing when setting
nextAudioTrackduring Low-Latency HLS part loading (#8104) - Fix LL-HLS subtitle stall from one-ULP rounding in final-part comparison (#8057, fixes #8051) @akashchamp
Content protection (DRM / EME)
- Reuse attached
MediaKeysacrossloadSource(#8095, fixes #8092) @krseager - Reuse attached
MediaKeyswhenloadSourcere-attaches media, and serializesetMediaKeyscalls (#8120, fixes #8092) @matvp91- Introduces experimental, opt-in only,
reuseKeySessionsconfiguration option
- Introduces experimental, opt-in only,
- Keep pending
setMediaKeyswhen the same keys are requested while media is detached (#8076) - FairPlay Streaming: reset
MediaKeyswhen changing the MediaSource (#8131) @robwalch
Interstitials
- Set a schedule position when interstitial fallback happens with nothing playing (#8088) @Arthur031221
- Trigger
INTERSTITIAL_ENDEDfor unresolved interstitials (empty asset-list, or removed from schedule while loading) (#8090, fixes #8082) @robwalch
Alternate audio
- Prevent loop loading of audio in the next discontinuity (f86f247) @robwalch
- Complete audio track switch when switching back to the currently playing track (#8093, fixes #8089) @krseager
- Defer main
BUFFER_EOSwhile an alternate audio track switch is in progress (#8053) @brandonocasey
Subtitles & captions (WebVTT / IMSC1)
- Keep frames in IMSC1 clock times and apply
frameRateMultiplier(#8086) @luantaraschi - Keep the text before and between nested spans in IMSC1 cues (#8060, fixes #8069)
- Fix IMSC1 and subtitle loading after interstitial media detach, including IMSC1 parsing without a known
initPTS(#8077) @matvp91 - Make subtitle-stream-controller
tracksBuffereda sparse array (#8108, follow-up to #8077) @robwalch - Keep no-break space lines in WebVTT cues (#8061, fixes #5337) @lagudafuadtosin
Fragment loading & stream controllers
- Fix bytes/bits mismatch in
isFragmentNearlyDownloadedand handle unknown fragment length (#8097, fixes #8096) @krseager - Dispatch errors for dependent fragments to ensure reload (#8127, fixes #8118) @robwalch
- Improve writing of all stream controllers'
lastCurrentTimeon tick end (#8116, follow-up to #8115) - Keep stream controllers
STOPPEDwhenstopLoad()aborts a fragment load (#8125, fixes #8119) @BeyondITL-Mossaddique - Load the start fragment again when its request is aborted before anything is buffered (#8115, fixes #8109) @b84330808
MediaSource & buffering
- Mark fragments as gaps on
SourceBuffererrors (#8045, fixes #8035) @hongjun-bae - Detach instead of resetting
MediaSourcewhen the media element switched to another source (#8085, fixes #8073) @lpommers - Cancel async end-of-stream operation when ended state is no longer true (#8128, fixes #8122) @robwalch
Playlist loading & parsing
- Do not wait for previously loaded playlist to reload on switch unless stale (#8107, fixes #8091) @robwalch
- Fix parsing of
#EXTINFdurations without digits after the decimal point (#8113, fixes #8112) @Enesuygurs - Only re-align discontinuity counts forward when merging playlists (#8048) @hongjun-bae
Demuxing, remuxing & timestamps
- Fix parameter set truncation, a v1.7.0 regression introduced in a03d5b1 (#8049, fixes #8043) @robwalch
- Keep the timing of later progressive chunks of a segment (#8058, fixes #6764) @lagudafuadtosin
- Anchor
initPTSon video PTS at discontinuities reached in sequence (#8083, fixes #8064) @littlespex - Reset TS video parser when contiguity is reset (#8081) @pserb
- Keep injected silent audio frames from starting before
initPTS(#8110) @stevan-borus
Documentation
- Update the README introduction for 2026 (#8111) @robwalch
- Update README player integrations (7718b9f)
CI
- Use wrangler pages deploy instead of the deprecated pages publish (#8114) @jasontd92
Demo Page
https://ff9f8343.hls-js-dev.pages.dev/demo/
API and Breaking Changes
While breaking changes are not expected between minor versions, if you are upgrading from version v1.16 or lower, see the MIGRATING guide for changes.
The new (experimental) reuseKeySessions option (default false) keeps key sessions open across loadSource() calls, so keys that match an open session don't need a new license request.
Feedback
Please provide feedback via Issues in GitHub. For more details on how to contribute to HLS.js, see our CONTRIBUTING guide.