* Fix seeking into and over multiple EXT-X-GAP segments
Fixes#6814
* Add `hls.loadLevelObj` to API - replaces internal use of `hls.levels[hls.loadLevel]`
* Flush MSE rendering pipeline when crossing video buffer holes with audio
Resolves#5631
* Don't wait to nudge when stalling with waiting event
Fixes#6169
* Add `hls.inFlightFragments` to Hls API. Used to determine if gap-controller should wait for in-flight media segments before seeking over gaps.
- Improve stall detection and reporting using "waiting" event timing
- Add `config.detectStallWithCurrentTimeMs` with a default of 1250 to configure stall detection when currentTime does not advance while playing without a "waiting" event
- Implement STALL_RESOLVED event - fires after "playing", "seeked", or "ended" event following BUFFER_STALLED_ERROR (Resolves#4273)
- Add BufferInfo to stall-related errors (BUFFER_STALLED_ERROR, BUFFER_NUDGE_ON_STALL, BUFFER_SEEK_OVER_HOLE)
- Add `stalled.start` performance timing to BUFFER_STALLED_ERROR
- Add `buffered` time range array to BufferInfo
- Only perform BUFFER_NUDGE_ON_STALL when needed (multiple buffered time ranges)
- Fix seek on start without play() request (regression in dev)
* fix: assumptions in multi-drm cases where only playready is available for playback.
* Only use selected key-system in EME "encrypted" media event handler
Resolves#6947 / Suggested changes for #6946
* chore: Refactors to improve logging in DRM mismatch cases.
* chore: More updates to improve logging in DRM mismatch cases.
* chore: Use a warn for unexpected psshInfos head count for key system
Live reload throttling per level details schedule
- Improve blocking requests with parts and low-latency mode disabled
- Defer autostart until after manifest loasded and level loaded when media playlist is source
Fixes#6858
Interstitial startup fixes
- Added `hls.loadingEnabled` getter
- Do not call startLoad when stopped and do not resume primary on first item
Fixes#6839
Break start/stop load function synchronously if loading state was changed or instance destroyed
- Fix segment loading edge cases following `removeLevel(<currentLevelIndex>)`
Addresses functional test failure: https://github.com/video-dev/hls.js/actions/runs/12124731664/job/33809171310?pr=6879
* Attempt to realign audio with main when `alignPlaylists` finds no overlap in playlist updates
#6823
* Cache audio playlist responses until main playlist is alignable
* Align on starting discontinuity tag with discontinuity-sequence (startCC is discontinuity-sequence)
* Align live playlist updates to end of last when there is no media-sequence/disconitinuity overlap and no PDT
Resolves#6685
(duplicate of #5282)
* Maintain start as long as there are no skipped segments and new details have no sliding
* Parse multiple pssh from "encrypted" init data and fix Widevine key ID extraction for playlist match
Fixes#6636
* Logging and assertion improvements per @cjpillsbury's review
* Logging and assertion improvements per @cjpillsbury's review
(cherry picked from commit a960251460)
* Parse multiple pssh from "encrypted" init data and fix Widevine key ID extraction for playlist match
Fixes#6636
* Logging and assertion improvements per @cjpillsbury's review
* Logging and assertion improvements per @cjpillsbury's review
* DateRange parsing and validation enhancements for Interstitials
Warn on invalid quoted-attribute attributes (missing quotes)
Related to #6203
* Shift DateRange metadata Cue times when media timeline is shifted
Fixes#6203
* Map DATERANGE tags to Segments with starting program date time
* DATERANGE tags after the last PDT tag that start at or after that tag should be anchored to that tag
* Handle DateRange mapping with Delta Playlist updates
Error (but parse and merge) multiple EXT-X-SKIP tags
* Do not enable subtitle options with AUTOSELECT=YES attribute
* Update and add initial selection tests for subtitle-controller
* Only pick forced subtitle option if it is the only one
Add default field to audio and subtitle selection options and forced field to subtitle selection option
* Address TextTrack change event overriding subtitle preference
Fix _TRACKS_UPDATED and _TRACK_SWITCH event order when preference is selected
* Do not auto select subtitle options with FORCED=YES attribute
* refactor CMCD controller and test to use common media library
* update build script to transpile the @svta package
* add ability to specify cmcd keys
* Use Content Steering Pathways to manage Redundant Streams and resolve their errors
* Ensure correct Pathway penalization on Playlist loading errors
* Do not reload Content Steering manifest while media is ended or detached
* Use subtitle track name and language to find and match subtitle/captions TextTrack rather than subtitleTrack index
Resolves#4571
* Fix regression in dev where AUDIO_TRACKS_UPDATED is re-dispatched with zero tracks
Allow selection of audioTrack on AUDIO_TRACKS_UPDATED (overriding default selection - Resolves#5831)
Cleanup selection of subtitleTrack on SUBTITLE_TRACKS_UPDATED (overriding default selection)
* Fix TextTrack use with ASSOC-LANGUAGE
Match the initial default/forced/autoselect choice made when playing HLS in Safari
* Make initial variant selection based on preferred codec rather than the first variant in the multivariant playlist
* Fix `minAutoLevel` and `ttfb` usage in abandon rules check
* Fix filtering of invalid video-ranges
* Log reason for ignoring start candidates with a particular codec
* Add rendition helper and move SCORE logic into getStartCodecTier
* Add support for MediaCapabilities video configuration filtering
FIxes#5707
* Add support for MediaCapabilities audio configuration filtering
Related to #5704 and #4072
* Add __USE_MEDIA_CAPABILITIES__ build const to remove MediaCapabilities checks from light build
* MediaCapabilities: Assume a framerate of 30fps since decodingInfo will throw with Level default of 0.
* Select variant with alternate video codec on video append error
* Use complete media-parsed codec name when determining if changeType should be appended
* Add `firstAutoLevel` to API.md