* Error and switch on SourceBuffer append requests for non-existing tracks
(muxed "audiovideo" append over unmuxed "video" and "audio" SourceBuffer)
Related to #1510
* Handle queued appends for pending source buffers
* Convert build packager to rollup
* Add an es module target (#2910)
* UMD build worker injection (#5107)
* Add ES5 syntax check for UMD builds (#5301, #5288)
* Add common rollup config
* handle `self` not existing (happens in nodejs. The check that makes sure the dist file can be required in node and not throw was failing because of this.)
* Disable coverage in CI
* Add `config.workerPath` option and "hls.worker.js" build output (#5107)
* Include transmuxer-interface id ("main" and "audio") in Web Worker setup and error logs
Co-authored-by: Tom Jenkinson <tom@tjenkinson.me>
* Implement ErrorController …
Add Error Handling Integration Tests
Handle missed probe transmux probe with with FRAG_PARSING_ERROR
Handle encrypted init segment and subtitle decryption failure with FRAG_DECRYPT_ERROR
Remove delay when retrying after timeout
Trigger FRAG_LOADING after request is made
ERROR event data type must include an error property
Add stats to network loader error callbacks to allow error handling to use request timing
Remove use of console.warn from mp4-tools
Add missing TypeScript type exports
* Remove console.assert statements
Resolves#5218Closes#5221
* Remove unused frag buffered monitor
* Add Load Policies and deprecate frag/level/manifest timeout and retry config options
* Switch on FRAG_PARSING_ERROR or continue trying fragLoadPolicy.default.errorRetry.maxNumRetry (6) times
Fixes#5011
* Switch on FRAG_PARSING_ERROR or continue trying fragLoadPolicy.default.errorRetry.maxNumRetry (6) times 2/2
Fixes#5011
* Do not reload level after calling stopLoad() and startLoad()
Warn on currentFrag context reference change and use currentFrag to maintain correct stats ref
Fixes#5230
* Implement ErrorActions and Pathway Switching
* Fix part timeout handling
Cleanup frag stats handoff
* Update retry rules to require http status or timeout error (deprioritizes retry on parse errors)
* Retry audio and subtitle playlist loading after failure on level switch when no alternate is available
* Load Steering Manifest
* Make UA check lazy for legacy unsupported MP3 in MP4 container check
* Add Redundant Streams tests
* Add FRAME-RATE to Redundant Stream group key and level sorting
Optimize MANIFEST_PARSED level filtering
Optimize Media Playlist check
* Do not group Variant levels with PATHWAY-ID into Fallback Stream URLs (unless building without Content Steering support)
Store and return seperate LevelAttributes per Fallback Stream URL
Align Level audio and text group ids with Fallback Stream URLs (Level._urlId)
* Content Steering Pathway grouping and selection
#5074
* Support removeLevel and improve capLevelController with level index changes
* Pathway Clone Variants
* Pathway Clone Rendition Groups
* Fix audio track alignment with timescales that differ and smooth switch when attributes do not change
* Always emit LEVEL_SWITCHING on Pathway change to ensure audio and subtitle tracks update as well
* Fix unregister listeners in fps and latency controller
* Unit test clean up
* Update README for Content Steering
Set stream controller state to IDLE when fragment loading/parsing/appending is aborted or fails
Evict back-buffer on FRAG_CHANGED at TARGET_DURATION intervals making fewer MSE remove requests
Emit FRAG_CHANGED on part change and fix other methods relying on `getAppendedFrag` for ranges where only parts were buffered
Only emit LIVE_BACK_BUFFER_REACHED in live streams
Per 3b07036 the LIVE_BACK_BUFFER_REACHED event is technically part
of the public API and should be supported as a deprecated event.
Generics convention enforcement prohibits creating an alias of the
BACK_BUFFER_REACHED event, so this commit adds a duplicate for the
old name.
Per conversation in #3457 this commit adds a backBufferLength
configuration to set the backbuffer constraint for both live
and VOD content.
The original liveBackBufferLength config property has been
deprecated and defaults to null, but is still supported
for live content.
Use a single transmuxer session for contiguous streams
Use part data in ABR estimation
Send FRAG_LOADED event for each part loaded
Sync audio tracks to main using PDT initially
Include part index in more fragment streaming logs
Make buffer blocking always async so that we never get stuck in an load-abort-buffer loop
Fix part loading fragment loaded/total estimation
Clear fragment elementary info and stats.loaded when removing fragment from fragment-tracker
Cleanup live backbuffer removal
Cleanup fragment-tracker eviction from buffer flushes
Load main fragment at `this.nextLoadPosition` when loading candidate is already loaded
Named exports can be more easily tree-shook or deadcode detected by the
available options that can do that, so using them over default exports
could make a future optimization easier to do.
* Refactor seek handler to always cancel fragment load if the loader exists, regardless of controller state
* Refactor fragment timing to only update on transmux complete instead of every progress event
* Refactor buffer-controller to execute all sourceBuffer actions as enqueued operations
These changes ensure that Hls.js is able to ensure order of SB operations, as well as prevent progressive appends from deadlocking other operations
JW8-8934