Commit Graph
157 Commits
Author SHA1 Message Date
Constanza DibuenoandGitHub d9dedb412e feat(cmcd): custom events, custom keys and ec (#7887)
Adds `cmcd.reporterCallback` config option, enabling custom key and custom event reporting for CMCD v2.
2026-06-05 09:33:49 -07:00
8814807e8e feat(cmcd): upgrade to CMCD v2 using @svta/cml-cmcd CmcdReporter (#7725)
* Migrate CMCD from @svta/common-media-library to @svta/cml-cmcd and add v2 version support

Replace the monolithic @svta/common-media-library package with the scoped
@svta/cml-cmcd@2.1.0 and @svta/cml-utils@1.3.0 packages for CMCD
functionality. The old package is retained for non-CMCD imports (ID3, UTF8).

Add a `version` option to CMCDControllerConfig (defaults to 1 for backwards
compatibility) that controls CMCD encoding version. When set to 2, the
controller uses CMCD v2 Structured Field Value encoding via the new library.

Key changes:
- Update all CMCD imports to use @svta/cml-cmcd single entry point
- Update uuid import to use @svta/cml-utils
- Update tsconfig moduleResolution to "bundler" for exports field support
- Adapt CMCD data fields (br, bl, mtp, tb, nor) to v2 array types
- Pass version through to CmcdEncodeOptions for version-aware encoding

https://claude.ai/code/session_01FmnN6xNSm9Qo17tp52ag3U

* Add CMCD v2 data fields and CmcdReporter event-mode reporting

Phase 3: Add new CMCD v2 data fields to the controller:
- Stream type (st): Detect VOD/LIVE/LOW_LATENCY from level details
  based on live flag, canBlockReload, and canSkipUntil properties
- Player state (sta): Track player state transitions via media element
  events (waiting, playing, pause, seeking, ended) and hls.js ERROR
  events for fatal errors. Maps to CmcdPlayerState enum values.
- Both fields are only included when version >= 2

Phase 4: Integrate CmcdReporter for event-mode reporting:
- Add eventTargets config option (CmcdEventReportConfig[]) for v2
  event reporting endpoints
- Instantiate CmcdReporter when version >= 2 and eventTargets are
  configured, with session/content ID and transmission mode
- Record PLAY_STATE events on player state transitions
- Record ERROR events on fatal hls.js errors
- Record BITRATE_CHANGE events on level switches
- Stop and flush reporter on controller destroy

Add unit tests for v2 version encoding, stream type detection (VOD,
LIVE, LOW_LATENCY), and player state inclusion.

https://claude.ai/code/session_01FmnN6xNSm9Qo17tp52ag3U

* Export CMCD v2 types and add comprehensive test coverage

Phase 6: Re-export CMCD types and constants from exports-named.ts for
ESM consumers: CmcdObjectType, CmcdStreamType, CmcdStreamingFormat,
CmcdPlayerState, CmcdEventType, CmcdHeaderField, CMCD_V1, CMCD_V2,
and type exports for Cmcd, CmcdEncodeOptions, CmcdEventReportConfig,
CmcdVersion. Add @svta/cml-cmcd, @svta/cml-utils, and
@svta/cml-structured-field-values to api-extractor bundledPackages
so external types are inlined in the rolled-up dist/hls.d.ts.

Phase 7: Add tests for:
- v2 fragment data includes version, stream type, and player state
- v2 headers mode includes v2 fields in CMCD headers
- Reporter is not created without eventTargets or for v1
- Reporter is created with v2 + eventTargets
- Reporter.stop(true) is called on destroy
- Play state events are recorded on state transitions
- Error events are recorded on fatal hls.js errors
- Duplicate player state events are deduplicated

Phase 8: Verified TypeScript type-check, all Rollup build configs
(full, fullEsm, light), and api-extractor declaration bundling.

https://claude.ai/code/session_01FmnN6xNSm9Qo17tp52ag3U

* fix: remove @svta/common-media-library

* feat: update cmcd-controller to use CML's CmcdReporter

* chore: update CML packages

* fix: build system cleanup

* fix: export clean up

* fix: api-extractor rebuild

* revert: build config change

* fix: address code review comment about muxed buffers

* feat(cmcd): route event report requests through xhrSetup/fetchSetup hooks

CmcdReporter sends CMCD v2 event reports via a requester function that
defaults to bare fetch(), bypassing customer auth headers and credentials
configured via xhrSetup/fetchSetup. Add a createCmcdRequester adapter
that routes through the same setup hooks applied to media/playlist requests.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(cmcd): add CMCD v2 e2e tests and upgrade @svta/cml-cmcd to 2.2.0

Add end-to-end tests for CMCD v2 covering query mode, header mode, event
mode, key filtering, and version comparison (v1 vs v2). Fix eventTargets
enabledKeys mapping bug in CMCDController where includeKeys was not being
mapped to the library's enabledKeys parameter, causing event reports to
have no enabled keys.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix: return 204 for event mode responses

* refactor(cmcd): use CmcdReporter default requester, add loader config option

Remove createCmcdRequester function and allow users to pass a custom
loader via cmcd.loader config. When not provided, CmcdReporter uses
its default fetch-based requester.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

* chore: update api file

* chore: update CMCD package for revision B changes

* fix(cmcd): address review feedback on controller, tests, and docs

- Swap native 'ended' listener for hls Events.MEDIA_ENDED
- Reset + recreate reporter on MANIFEST_LOADING so loadSource() on an
  existing Hls instance behaves like a fresh CMCD session
- Replace this.reporter! assertions with if (this.reporter) blocks
- Use hls.latestLevelDetails in getStreamType
- Tighten low-latency detection to require details.partList (TODO #7729)
- Document version, eventTargets (with child properties), and loader
  config options in docs/API.md
- Extend setupEach test harness with a streamController.getLevelDetails
  mock to support latestLevelDetails lookup

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: update @svta/cml-cmcd to 2.3.1

* chore: update CML versions

* refactor(cmcd): use addEventListener/removeEventListener helpers

Replace direct media.addEventListener/removeEventListener calls with the
shared helpers from utils/event-listener-helper. The helpers minify
better and guard against duplicate listener registration, matching the
pattern used by base-stream-controller, buffer-controller, and
gap-controller.

* fix(cmcd): resolve SEEKING state when seek lands while paused

After a seek, the native 'seeked' event fires but no 'playing' or
'pause' event follows when the media was already paused. Add an
'onSeeked' handler that transitions SEEKING -> PAUSED in that case.
PLAYING and REBUFFERING transitions are still handled by the existing
'playing' and 'waiting' listeners.

* chore(cmcd): drop unused karma timeout config

The browserNoActivityTimeout and client.mocha.timeout overrides were
added during an earlier iteration of the CMCD e2e tests. The e2e suite
now sets its own describe-level timeout, so the karma-level overrides
aren't needed.

* fix(cmcd): use mainForwardBufferInfo for buffer length

Defers to hls.mainForwardBufferInfo for VIDEO/MUXED so reported bl matches
the player's authoritative forward-buffer view (handles alt-audio vs muxed
SourceBuffer selection, backward-seek/paused maxBufferHole=0, gap skipping,
and live/interstitial buffer-before-seek). Audio path keeps the direct
SourceBuffer query pending #7858 but mirrors the paused -> hole=0 rule.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* test(cmcd): add failing tests for getBufferLength buffer-info sources

* fix(cmcd): use hls.audioForwardBufferInfo in getBufferLength (resolves #7858 TODO)

* refactor(cmcd): drop unused audioBuffer field and BUFFER_CREATED wiring

* fix(cmcd): derive object type from variant codecs / elementary streams

Resolves Rob's review feedback on #7725.

getObjectType now accepts an optional Level | LevelSwitchingData and
resolves main-fragment ot by (1) variant audioCodec/videoCodec, then
(2) Fragment.elementaryStreams when parsed, otherwise undefined. The
hls.audioTracks.length heuristic is removed — it misclassified
muxed fMP4 with alt audio renditions, audio-only main playlists, and
video-only variants.

getBufferLength and getTopBandwidth now branch on Fragment.type
instead of CmcdObjectType, so audio-only main playlists correctly
draw from hls.levels / mainForwardBufferInfo.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(cmcd): emit br/tb/bl for single-rendition fragments

The br/tb/bl block in applyFragmentData was gated on ot ∈ {VIDEO,AUDIO,MUXED}.
For single-rendition streams with no master playlist (muxed-fmp4, mp3 audio-
only), the variant carries no codec metadata, and the fragment's
elementaryStreams aren't populated until after the request fires — so
getObjectType returns undefined and the gate skipped these fields entirely.

Widen the gate to also run when ot is null and frag.type is 'main' or
'audio'. getBufferLength and getTopBandwidth already branch on frag.type,
not ot, so they return correct values regardless of ot resolution.

Also tighten the loose-equality MUXED check to strict equality.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(cmcd): keep bl fresh on event reports via buffer-info listener

bl was only written to per-request CMCD payloads in applyFragmentData,
never to the reporter's persistent data (this.data) or recordEvent
payloads. Since events are built as { ...this.data, ...perEventData,
e, ts, sn }, bl never appeared on TIME_INTERVAL, PLAY_STATE,
BITRATE_CHANGE, or other event reports.

Register listeners on BUFFER_APPENDED and BUFFER_FLUSHED that call
reporter.update({ bl: [...] }) using a no-fragment buffer-length
helper — min(main, audio) when both buffer sources exist, otherwise
whichever is available. This makes bl available on all subsequent
event reports while keeping per-request bl unchanged (fragment-
specific value still flows through applyFragmentData).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(cmcd): gate variant-codec ot inference on audioTracks; prefer parsed streams

CODECS in a STREAM-INF describes the variant plus any alternate renditions it
references, so an audioCodec value can belong to an alt audio track rather than
the main variant. Only infer MUXED/AUDIO from the variant's audio+video codecs
when no audio media options exist; videoCodec always implies VIDEO.

Also reorder getObjectType so parsed fragment.elementaryStreams take precedence
over variant codec hints — the parsed segment is ground truth when available.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* fix(cmcd): defer reporter creation to MANIFEST_LOADING, one per session

Two TIME_INTERVAL events with sn=0 fired back-to-back at the start of
playback. The CMCDController created the reporter in its constructor
(firing the initial t event via start()) and then immediately tore it
down and recreated it on MANIFEST_LOADING (firing another t event with
sn=0 from the new reporter's fresh counter).

Move reporter creation out of the constructor — it now lives only in
onManifestLoading, giving one reporter per master manifest. Construct
CMCDController before PlaylistLoader so its MANIFEST_LOADING listener
registers first and the reporter exists when the manifest request
applies CMCD data.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: fix lint issue

* chore: fix lint issue

* chore: fix lint issue

* fix(cmcd): set initial sta on MEDIA_ATTACHING; default to PRELOADING

Per CTA-5004-B, sta should be present from the first CMCD request and
should reflect the actual playback context. Previously the controller
defaulted to STARTING ("s") at construction, which inflated the msd
metric (measured from STARTING → PLAYING) by counting time before play
was instructed.

Changes:

- Listen to MEDIA_ATTACHING (sync from hls.attachMedia) instead of
  MEDIA_ATTACHED (async from buffer-controller). This lets us read
  media.autoplay before the first manifest URL is built when attachMedia
  is called before loadSource.
- On MEDIA_ATTACHING, set state to STARTING when media.autoplay is true,
  otherwise PRELOADING ("d").
- In onManifestLoading, when no media is attached yet (load-before-attach
  order), set state to PRELOADING so the first manifest still carries
  sta.
- Add a 'play' media-event listener that transitions PRELOADING →
  STARTING on the first play() call. Subsequent play events (post-pause)
  are no-ops since this.initialized is set by onPlaying.
- Guard onSeeking/onSeeked on this.initialized: per spec, SEEKING is
  "after starting", and STARTING/PRELOADING should persist through
  pre-playback seeks. Mirrors the existing onWaiting guard for
  REBUFFERING.

Tests:

- Unit: new "initial sta matrix (attach order × autoplay)" describe
  covering the 4 attach-order/autoplay combinations.
- E2E: new "Group 6: initial sta matrix" covering all 6 combinations of
  autoplay × autoStartLoad × attach order against a real stream.
- Existing e2e manifest-mode tests restored to assert sta=s (autoplay=T,
  attach→load matches the default test setup).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* feat(cmcd): adopt cml-cmcd 2.4.0 auto-fire and recorder helper

- Add ratechange listener; reporter.update({ pr }) auto-fires PLAYBACK_RATE
- Drop local sta dedup guard and explicit recordEvent calls in
  setPlayerState and onLevelSwitching; rely on library auto-fire and br
  write-through
- Replace CmcdRequestCollector mock with CmcdReportRecorder in e2e tests

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>

* chore: update cml-cmcd to version 2.4.0

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-05-26 17:11:54 -07:00
Dennis DashkevichandRob Walch 86e7131b30 implemented flush-back-buffer-for-looped-streams 2026-05-26 09:14:26 -07:00
Rob WalchandGitHub 8dd7373bf3 Add "mjpg" image I-Frame support (#7862) 2026-05-21 10:59:32 -07:00
Rob WalchandGitHub c7c28767d0 Add support for #EXT-X-I-FRAME-STREAM-INF and #EXT-X-I-FRAMES-ONLY (#7757) 2026-04-06 12:12:41 -07:00
Dzianis DashkevichandGitHub 3112e7071b feat: Max Unchanged Live Updates (#7704) 2026-01-26 22:58:48 -08:00
Yury YarashevichandRob Walch ceb24f18a1 #7064: Check integrity of MPEG-TS video stream. 2026-01-15 18:28:28 -08:00
Kyle SeagerandGitHub d10ce09808 Implemented smooth audio switching (#7575)
Authored-by: Kyle Seager <kyle.seager@mydirectv.com>
2026-01-15 10:23:36 -08:00
Jeremy CorbelloandGitHub b83ec76d74 feat: Add MISB KLV metadata extraction from MPEG-TS and CMAF streams (#7668) 2025-12-09 17:10:01 -08:00
Dzianis DashkevichandGitHub a13b5cefc1 feat: Add SourceBuffer append operation timeout handling (#7670) 2025-12-09 14:15:42 -08:00
Chris TriantafilisandGitHub 8059e45c0e feat: Add abrSwitchInterval config option (#7669)
* Add abrSwitchInterval configuration parameter

* Update nextLoadLevel to use abrSwitchInterval config option

* Add tests for abrSwitchInterval
2025-12-09 11:22:14 -08:00
Kyle SeagerandGitHub 36078f82ac Fixed issue where certain Tizen devices would get stuck seeking over buffer gaps (#7630)
Authored-by: Kyle Seager <kyle.seager@mydirectv.com>
2025-11-14 15:19:33 -08:00
Kyle SeagerandGitHub 66d523e66b Merge pull request #7628 from krseager/improve-hls-js-documentation
Update API documentation
2025-11-07 14:18:17 -05:00
Rob WalchandGitHub 1e3453e1b1 Fix interstitial asset events not firing when attaching primary early for playout-limit change (#7467)
* Fix interstitial asset events not firing when attaching primary early for playout-limit change
* Add log message helper for timeline position updates
2025-08-20 16:08:06 -07:00
Tristan MatthewsandRob Walch c64313bd2d Fix syntax in recoverMediaError example in API.md
This also addresses some formatting issues found by prettier.
2025-08-19 12:09:58 -07:00
Matt JoinerandGitHub 5ea8f781be Minor improvements to docs (#7459) 2025-08-14 10:00:37 -07:00
Rob WalchandGitHub 84e4fbdc3f Improve recoverMediaError documentation in API.md (#7447) 2025-08-04 16:08:08 -07:00
whdudtod1273andGitHub f50d6e5ffb Prevent playback freeze by checking buffer availability before updating playback position (#7210) 2025-05-08 11:35:42 -07:00
Kyle SeagerandGitHub 80f5c99b3e Enable synchronizing live start position with program boundary (#7211)
* Added `startOnSegmentBoundary` config option to sync start position with segment boundary

* Resolves #7209

---------

Authored-by: Kyle Seager <ks3773@exo.att.com>
2025-05-05 14:34:29 -07:00
Rob WalchandGitHub 0cd55b85f1 Interstitials live start, buffering, and manager fixes and docs update (#7030)
* 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
2025-02-25 17:28:39 -08:00
Rob WalchandGitHub b9f85e9c78 Fix seeking into and over multiple EXT-X-GAP segments (#6988)
* 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]`
2025-02-03 17:27:09 -08:00
Rob WalchandGitHub 305a3a7477 Flush MSE rendering pipeline when crossing video buffer holes with audio (#6972)
* 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.
2025-01-31 16:23:13 -08:00
Stefan HuberandGitHub f53373f586 feat: maxDevicePixelRatio limits the browser's value (#6825) 2024-11-14 11:03:54 -08:00
Rob WalchandGitHub 06f0e755d4 HLS Interstitials Support (#6591) 2024-10-03 15:19:12 -07:00
Rob Walch 306cd1d572 Add videoPreference.videoCodec to API.md 2024-09-13 08:53:04 -07:00
Glyn DaviesandGitHub 5eb0e32837 CMAF KLV support via Metadata callback (#6674)
* 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
2024-09-09 15:12:53 -07:00
Rob WalchandGitHub 37c2b389dc Update API.md to reflect maxBufferHole v1.0 default (#6578) 2024-08-02 14:18:00 -07:00
iBoboandGitHub 8f8e4922a6 Add public url getter to return the currently playing url (#6411)
* Add public url getter to return the currently playing url

* Add entry in the docs for get url

* Fix TOC
2024-07-03 11:58:03 -07:00
9da3d96d2c Support setting targetLatency (#6473)
* Allow setting targetLatency

* fix prettier warnings

* fix failing test liveSyncOnStallIncrease

* restore test liveSyncOnStallIncrease

---------

Co-authored-by: Rob Walch <robwalch@users.noreply.github.com>
2024-07-01 08:05:44 -07:00
vk342andGitHub 8555f8b09c Add liveSyncOnStallIncrease config option (#6455)
* add liveSyncOnStallIncrease config option

* update hls.js.api.md
2024-06-28 14:04:23 -07:00
Andreas HermannandGitHub 18419d772e Clarify capLevelToPlayerSize docs in API.md (#6384) 2024-05-06 11:57:22 -07:00
Pavel FominandRob Walch 977c603dd2 API.md update removeLevel
fix after rebase
2024-03-20 14:46:17 -07:00
Rob Walch 74f634ffdd Update API.md for CMCD includeKeys 2024-02-07 17:17:01 -05:00
Rob Walch e93f0bbcdd Fix regression that removed (unofficial) support for startLevel above max level index
Fixes #6172

(cherry picked from commit 88d54a9602)
2024-02-06 16:59:49 -08:00
Rob WalchandGitHub fad22f2ef3 Merge pull request #6006 from video-dev/feature/is-supported-codec-expansion
Expand isSupported check to allow alternative codecs
2023-12-04 17:21:14 -08:00
Rob Walch df759ae3f0 Add isMSESupported check
Add named exports for and expose statically: `isSupported`, `isMSESupported`, and `getMediaSource`
2023-11-30 16:37:24 -08:00
Evan BurtonandRob Walch e651e83066 Add videoPreference config option for HDR/SDR VIDEO-RANGE selection and priority
Resolves #2489
2023-11-30 12:40:04 -08:00
Rob Walch d4d585b3f5 API enhancements for audio and subtitle selection
Resolves #5532
2023-11-26 10:35:41 -08:00
Celeste GlavinandGitHub b52bab7587 chore(docs): add more info around backBufferLength (#5841) 2023-09-22 17:52:13 -07:00
Rob WalchandGitHub 7c5a2d2f93 Add preferManagedMediaSource API.md doc entry for ManagedMediaSource usage (#5828)
* 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
2023-09-20 08:39:21 -07:00
301be58cc4 Add config flag for maximum front buffer frontBufferFlushThreshold (#5761)
Fixes #5479

Co-authored-by: Evan Burton <eburton2@apple.com>
2023-08-31 14:03:52 -07:00
82a2589574 Custom shouldRetry in retryConfig (follow up) (#5762)
* Custom shoudRetry in retryConfig (#5658)

Co-authored-by: pfomin <pfomin@ivi.ru>

* Replace httpStatus argument with LoaderResponse in config.shouldRetry #5658

---------

Co-authored-by: Pavel Fomin <me@pavelfomin.ru>
Co-authored-by: pfomin <pfomin@ivi.ru>
2023-08-31 10:27:26 -07:00
Morgan ZolobandGitHub edcef9a954 Add additional documentation for workerPath config (#5765) 2023-08-28 12:27:53 -07:00
renovate[bot]GitHubrenovate[bot] <29139614+renovate[bot]@users.noreply.github.com>Tom Jenkinson
359197f20b chore(deps): update dependency prettier to v3 (#5646)
* chore(deps): update dependency prettier to v3

* run prettier

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Tom Jenkinson <tom@tjenkinson.me>
2023-08-22 11:24:59 +01:00
Rob WalchandGitHub b536883327 Initial selection and level filtering based on preferred codecs and MediaCapabilities (#5704)
* 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
2023-08-21 15:24:26 -07:00
Rob WalchandGitHub bc60dbfe12 Base initial bandwidth estimate on first level's bitrate (#5649)
Resolves #2754
2023-07-13 14:10:32 -07:00
Guillem CabreraandGitHub 966bd3d08b Fire STEERING_MANIFEST_LOADED event when loading a Content Steering Manifest (#5417)
* 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
2023-05-26 13:35:04 -07:00
Rob WalchandGitHub 8befacd2be Remove startLoad() as recovery method from API.md doc (#5478)
#5476
2023-05-10 14:52:30 -07:00
Tom JenkinsonandGitHub 0d7db5b7a7 reference v1 jsdelivr url in v1 api doc
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
2023-04-12 15:52:45 +01:00
Rob WalchandGitHub c5134d8a2a Relax TTFB timeout on manifest request (#5364)
* Relax TTFB timeout on manifest request
(Add support for LoadPolicy `maxTimeToFirstByteMs` of Infinity and similarly ignore value of 0)

* Add LoadPolicy API documentation
2023-04-04 11:00:34 -07:00