* Interstitials improvements
- Add interstitialPlayer to InterstitialsManager and simplify interface
- Fix and cover expected playback state in interstitial event callbacks (where currentTime is derived from transitional controller state)
- Fix live start in append-in-place interstitial seeking to second start position when primary starts buffering after starting in interstitial
- Simplify playout-limit handling in asset player
- Add padding to flush front buffer call (prevents start of audio segment from being removed in Safari)
- Fix an issue where buffering an interstitial in place gets stuck when the video buffer is full, but the audio buffer is not (use combined buffer in stream-controller when there is no alt-audio source)
- Fix typos (Interstitals > Interstitials)
* Add `interstitialsManager.interstitialPlayer.assetPlayers` tests - verify playingIndex player is present for relevant asset events
* 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.
* Changes to support returning CMAF based KLV data to your HLS client
This leverages the existing metadata callbacks for ID3 tags
Not sure this is the best way, but it works for my simple testing
* Run through prettier
* Add enableEmsgKLVMetadata option (default false)
* Commiting API change for new config option enableEmsgKLVMetadata
* Added details of the new config enableEmsgKLVMetadata (default false) and exposing of MetadataSchema along with changes to the FRAG_PARSING_METADATA event
* Add `preferManagedMediaSource` API.md doc entry, and only emit BUFFER_FLUSHED with removed ranges in ManagedMediaSource "bufferedchange" event
* Add BufferedChangeEvent TypeScript interface
based on w3c proposal https://github.com/w3c/media-source/issues/320
* 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
* Fire STEERING_MANIFEST_LOADED event when loading a Content Steering Manifest
* Use steeringManifest instead of response inside STEERING_MANIFEST_LOADED content
* Fire STEERING_MANIFEST_LOADED between clonePathways and updatePathwayPriority
people should be using that over latest so that things don't break when we release v2 with potentially breaking changes. Main readme already used v1 url
* Relax TTFB timeout on manifest request
(Add support for LoadPolicy `maxTimeToFirstByteMs` of Infinity and similarly ignore value of 0)
* Add LoadPolicy API documentation
* 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>
* Handle fragments and parts with a GAP tag/attribute
* Improve GAP fragment picking, post gap buffering, and level switching error resolution
* Cleanup FRAG_GAP error creation and inlcude current buffer length in forward gap buffer limit
* Fix gap jump over waiting for data stall when buffer length is larger than maxBufferHole but less than one second
* Warn when observing "seeked" event with empty buffer (Related to #5274)
* Handle forward buffering past GAP tags in alt audio Playlists
* Fix GAP tag handling with Redundant Streams
* Implement penalty box for Redundant Streams
* add a script that will deploy the `netlify` dir to cloudflare pages
* switch everything from netlify over to cf pages
* fix wrangler version
* add `/` to api-docs url
* fix name of cloudflare dev project
* 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
* Implement EXT-X-DEFINE Variable Substitution
Add support EXT-X-START in Multi-Variant Playlist
Add Content-Steering Multi-Variant Playlist parsing (#5074)
* Return parse error on undefined Variable Reference
Only track/return first parse error
Fix typos
* Use same error handling as FRAG_PARSING_ERROR for LEVEL_PARSING_ERROR
* Minor improvements to esdocs generated docs
* Use logical assignment on playlistParsingError
Co-authored-by: Rob Walch <rob@jwplayer.com>
* create an interface for abr controllers
* use AbrComponentApi interface in abr-controller.ts
* update docs for custom abr controllers
* remove clearTimer from abr interface and documentation
* create an interface for abr controllers
* use AbrComponentApi interface in abr-controller.ts
* update docs for custom abr controllers
* remove clearTimer from abr interface and documentation
* Add support for com.apple.fps keySystem
* Improve support for DRM key-systems and key handling
Resolves#2833#2737#4318#4538
* Update README `licenseXhrSetup` example
* Update api-extractor markdown
* Attach CDM on start when even when initial fragments do not have a key associated with them
* Handle expired key status correctly
* Map key-sessions by key ID and log key ID more often than URI
* Support "clear-lead" key-session creation without new config
* Emit and handle FRAG_PARSING_ERROR from transmuxers (#5018)
* Emit and handle FRAG_PARSING_ERROR from transmuxers
Related to #5011
* Switch levels on Key and Fragment parsing errors or escalate to fatal error
* Route all key-system errors to `onFragmentOrKeyLoadError`
* Populate EMEKeyError.err for better demo error logging
* Remove `useEmeEncryptedEvent` and mark `widevineLicenseUrl` as deprecated in API.md
* Add support for EXT-X-SESSION-KEY tags (for key-system access on manifest loaded)
#4927
* Throw before licenseXhrSetup if key was removed
* Make key session promise chain more consice
* Stop on fatal key system errors
* Only request access to key-systems for keys matching those found in the config one at time (to avoid gaining access to WV and PR on Edge)
* Modify key-system helpers so that it's easier to support additional key-system strings
* Add undocumented `generateRequest` ("Content ID") filter
Co-authored-by: Vincent Valot <vincent.valot@bedrockstreaming.com>