Skip to content

v1.7.4

Latest

Choose a tag to compare

@github-actions github-actions released this 28 Oct 18:52
142fcab

Summary

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

Changes Since The Last Release

v1.7.3...v1.7.4

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 nextAudioTrack during 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 MediaKeys across loadSource (#8095, fixes #8092) @krseager
  • Reuse attached MediaKeys when loadSource re-attaches media, and serialize setMediaKeys calls (#8120, fixes #8092) @matvp91
    • Introduces experimental, opt-in only, reuseKeySessions configuration option
  • Keep pending setMediaKeys when the same keys are requested while media is detached (#8076)
  • FairPlay Streaming: reset MediaKeys when changing the MediaSource (#8131) @robwalch

Interstitials

  • Set a schedule position when interstitial fallback happens with nothing playing (#8088) @Arthur031221
  • Trigger INTERSTITIAL_ENDED for 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_EOS while 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 tracksBuffered a 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 isFragmentNearlyDownloaded and 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' lastCurrentTime on tick end (#8116, follow-up to #8115)
  • Keep stream controllers STOPPED when stopLoad() 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 SourceBuffer errors (#8045, fixes #8035) @hongjun-bae
  • Detach instead of resetting MediaSource when 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 #EXTINF durations 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

Documentation

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.