Thin shaka adapter around `cml.cmcd.CmcdReporter`. The vendored
reporter owns CMCD state, encoding, key filtering, sequence numbers,
and event-mode dispatch. The adapter translates shaka's player /
`
Constructor
new CmcdManager(player, config)
Thin shaka adapter around `cml.cmcd.CmcdReporter`. The vendored
reporter owns CMCD state, encoding, key filtering, sequence numbers,
and event-mode dispatch. The adapter translates shaka's player /
`` events into reporter calls, and shaka's request/response
shapes into CML's HttpRequest/HttpResponse shapes.
Adapter responsibilities:
1. Lifecycle: construct/start/stop CmcdReporter from configure() / reset()
2. Player wiring: + Player events → reporter.update.
State-change events (PLAY_STATE/BITRATE_CHANGE/BACKGROUNDED_MODE)
auto-fire from update() since v2.4.0; adapter only invokes
recordEvent() for non-state-change events (MUTE/UNMUTE/ERROR/etc.).
3. Request mode: applyRequestData → reporter.createRequestReport
4. Response mode: applyResponseData → reporter.recordResponseReceived
5. Event mode: requester callback → NetworkingEngine.request
6. Config translation: shaka.extern.CmcdConfiguration → CmcdReporterConfig
7. Public-API back-compat: re-exports for StreamingFormat / EventType /
PlayerState
Parameters:
- Source:
Members
EventType :string
Public re-export of CMCD v2 event types. Literal form per the
Closure-tooling constraint above. Values match `cml.cmcd.CmcdEventType`
exactly; unit-test asserts identity.
Type:
Properties:
| Name |
Value |
Type |
Description |
BITRATE_CHANGE |
bc
|
string
|
|
PLAY_STATE |
ps
|
string
|
|
PLAYBACK_RATE |
pr
|
string
|
|
ERROR |
e
|
string
|
|
TIME_INTERVAL |
t
|
string
|
|
CONTENT_ID |
c
|
string
|
|
BACKGROUNDED_MODE |
b
|
string
|
|
MUTE |
m
|
string
|
|
UNMUTE |
um
|
string
|
|
PLAYER_EXPAND |
pe
|
string
|
|
PLAYER_COLLAPSE |
pc
|
string
|
|
RESPONSE_RECEIVED |
rr
|
string
|
|
AD_START |
as
|
string
|
|
AD_END |
ae
|
string
|
|
AD_BREAK_START |
abs
|
string
|
|
AD_BREAK_END |
abe
|
string
|
|
SKIP |
sk
|
string
|
|
CUSTOM_EVENT |
ce
|
string
|
|
- Source:
PlayerState :string
Public re-export of CMCD v2 player states. Literal form per the
Closure-tooling constraint above. Values match `cml.cmcd.CmcdPlayerState`
exactly; unit-test asserts identity.
Type:
Properties:
| Name |
Value |
Type |
Description |
STARTING |
s
|
string
|
|
PLAYING |
p
|
string
|
|
SEEKING |
k
|
string
|
|
REBUFFERING |
r
|
string
|
|
PAUSED |
a
|
string
|
|
WAITING |
w
|
string
|
|
ENDED |
e
|
string
|
|
FATAL_ERROR |
f
|
string
|
|
QUIT |
q
|
string
|
|
PRELOADING |
d
|
string
|
|
- Source:
Public re-export of CMCD streaming-format values. The literal object
form is required for Closure tooling: clutz (TypeScript-defs gen)
and `generateExterns.js` reject `@export`ed `@enum`s whose RHS is a
MemberExpression / alias. The 4 values match
`cml.cmcd.CmcdStreamingFormat` exactly; a unit test asserts value
identity.
Type:
Properties:
| Name |
Value |
Type |
Description |
DASH |
d
|
string
|
|
HLS |
h
|
string
|
|
SMOOTH |
s
|
string
|
|
OTHER |
o
|
string
|
|
- Source:
lastPlayerState_ :string
Type:
- Source:
reporter_ :cml.cmcd.CmcdReporter
Type:
- Source:
Per-request `ts` values for TTFB/TTLB derivation in
`applyResponseData`. CmcdReporter cannot observe request-send time;
the adapter measures it.
Type:
- Source:
sf_ :cml.cmcd.CmcdStreamingFormat|undefined
Streaming format set once at manifest-load time. CTA-5004 / CTA-5004-B
define `sf` as a stable manifest-type indicator (`'d'`/`'h'`/`'s'`/
`'o'`); the value does not reflect the low-latency state.
Type:
-
cml.cmcd.CmcdStreamingFormat
|
undefined
- Source:
startTimeOfLoad_ :number
Type:
- Source:
video_ :HTMLVideoElement
Type:
- Source:
Methods
allKeysForVersion_(version) → {Array<string>}
Parameters:
| Name |
Type |
Description |
version |
number
|
undefined
|
|
- Source:
Returns:
-
Type
-
Array<string>
appendSrcData(uri, mimeType) → {string}
Apply CMCD data to streams loaded via ``. Forces
query-mode encoding regardless of configured `useHeaders`, since
direct media loads cannot carry custom request headers.
Parameters:
| Name |
Type |
Description |
uri |
string
|
|
mimeType |
string
|
|
- Source:
Returns:
-
Type
-
string
appendTextTrackData(uri) → {string}
Apply CMCD data to a sidecar text track URI.
Parameters:
| Name |
Type |
Description |
uri |
string
|
|
- Source:
Returns:
-
Type
-
string
applyRequestData(typenon-null, requestnon-null, contextopt)
Apply CMCD data to a request via the reporter.
Parameters:
- Source:
applyResponseData(typenon-null, responsenon-null, contextopt)
Apply CMCD data to a response.
Parameters:
- Source:
applyTextData(requestnon-null)
Apply CMCD data to a sidecar text request.
Parameters:
- Source:
applyToRequest_(requestnon-null, datanon-null)
Push a CMCD-applied request through `createRequestReport`. Mutates
`request` in place to preserve shaka's existing applyRequestData
contract.
Parameters:
- Source:
buildExternalUriData_() → {cml.cmcd.Cmcd}
Persistent CMCD baseline used by `appendSrcData` /
`appendTextTrackData`. These bypass the reporter (browsers can't
observe headers for direct media loads, so we always force query
mode regardless of configured `useHeaders`); `sn` is omitted since
the reporter's per-target counters don't apply.
- Source:
Returns:
-
Type
-
cml.cmcd.Cmcd
calculateRtp_(stream, segment) → {number}
Computed `rtp` (requested maximum throughput) for a segment.
Parameters:
- Source:
Returns:
-
Type
-
number
Update the manager's configuration. If `enabled` flips or any
material field changes, the reporter is torn down and recreated.
Parameters:
- Source:
encodeOptionsForUri_(uri) → {cml.cmcd.CmcdEncodeOptions}
Encode options for direct `cml.cmcd.appendCmcdQuery` calls
(`appendSrcData`, `appendTextTrackData`). `baseUrl` lets CML
relativize `nor` URLs root-relative; `version` filters keys per
spec; `reportingMode = REQUEST` pins the request-mode key filter.
Parameters:
| Name |
Type |
Description |
uri |
string
|
|
- Source:
Returns:
-
Type
-
cml.cmcd.CmcdEncodeOptions
getBufferLength_(type) → {number}
Buffer length in milliseconds for a media type.
Parameters:
| Name |
Type |
Description |
type |
string
|
|
- Source:
Returns:
-
Type
-
number
getCurrentTime_() → {number}
- Source:
Returns:
-
Type
-
number
getDataForSegment_(context, requestUrinullable) → {Object<string, *>}
Build the per-segment CMCD payload from shaka's request context.
Parameters:
- Source:
Returns:
-
Type
-
Object<string, *>
getObjectType_(context) → {cml.cmcd.CmcdObjectType|undefined}
Map a shaka request context to a CMCD object type.
Parameters:
- Source:
Returns:
-
Type
-
cml.cmcd.CmcdObjectType
|
undefined
getObjectTypeFromMimeType_(mimeType) → {cml.cmcd.CmcdObjectType|undefined}
Map a mimeType to a CMCD object type. Used by `appendSrcData`.
Parameters:
| Name |
Type |
Description |
mimeType |
string
|
|
- Source:
Returns:
-
Type
-
cml.cmcd.CmcdObjectType
|
undefined
getRemainingBufferLength_(type) → {number}
Remaining buffer length in milliseconds.
Parameters:
| Name |
Type |
Description |
type |
string
|
|
- Source:
Returns:
-
Type
-
number
Resolve `sf` from the manifest-parser advanced-request type.
Parameters:
- Source:
Returns:
-
Type
-
cml.cmcd.CmcdStreamingFormat
|
undefined
getStreamType_() → {cml.cmcd.CmcdStreamType}
- Source:
Returns:
-
Type
-
cml.cmcd.CmcdStreamType
getTopBandwidth_(type) → {number}
Top-bandwidth value across variants for a given object type.
Parameters:
| Name |
Type |
Description |
type |
cml.cmcd.CmcdObjectType
|
undefined
|
|
- Source:
Returns:
-
Type
-
number
makeRequester_() → {function(!Object): !Promise<{status: number}>}
Build the `requester` callback CmcdReporter uses for event-mode
dispatch. Routes through NetworkingEngine so the request inherits
auth / retry / filters.
- Source:
Returns:
-
Type
-
function(!Object): !Promise<{status: number}>
maybeStartReporter_()
Construct the reporter if `enabled` is set and a video element is
available. No-ops if either precondition fails.
- Source:
removeCmcdQueryFromUri_(uri) → {string}
Strip the CMCD query parameter from a URL.
Parameters:
| Name |
Type |
Description |
uri |
string
|
|
- Source:
Returns:
-
Type
-
string
reset()
Reset the manager. Stops the reporter and clears session-scoped
state. The video element reference is preserved — shaka's lifecycle
keeps it attached across `unload()`/`load()` cycles, and only
`detach()` releases it.
- Source:
responseModeEnabled_() → {boolean}
Whether any configured `eventTarget` subscribes to the `'rr'`
(response-received) event. Saves recording response-received calls
into the reporter when no target consumes them.
- Source:
Returns:
-
Type
-
boolean
setBuffering(buffering)
Forwarded from Player buffering observer; translates to a
REBUFFERING / PLAYING player-state transition.
Parameters:
| Name |
Type |
Description |
buffering |
boolean
|
|
- Source:
setLowLatency(lowLatency)
No-op shim retained for Player call-site back-compat. Phase 1
dropped the non-spec `'ld'`/`'lh'` StreamingFormat values; CTA-5004
does not define LL-specific values, so low-latency content emits
`sf=d` (DASH) or `sf=h` (HLS).
Parameters:
| Name |
Type |
Description |
lowLatency |
boolean
|
|
- Source:
Set the media element and start the reporter (if enabled).
Parameters:
- Source:
setPlayerState_(statenon-null)
Player-state deduplication: skip the update + recordEvent pair if
the new state is identical to the last-emitted one. Without this,
`` events can fire repeatedly on stable states (e.g.,
`playing` after every minor stall) and spam the reporter.
Parameters:
| Name |
Type |
Description |
state |
cml.cmcd.CmcdPlayerState
|
|
- Source:
setStartTimeOfLoad(startTimeOfLoad)
Set start time of load; trigger autoplay-driven start if applicable.
Parameters:
| Name |
Type |
Description |
startTimeOfLoad |
number
|
|
- Source:
setupEventListeners_()
Wire `` and Player events to reporter calls per spec
§ "Player state ↔ reporter state mapping".
- Source:
toReporterConfig_(cfgnon-null) → {cml.cmcd.CmcdReporterConfig}
Translate `shaka.extern.CmcdConfiguration` into
`cml.cmcd.CmcdReporterConfig`. Field renames:
- `useHeaders` → `transmissionMode` enum
- `version: 1|2` → `CMCD_V1` / `CMCD_V2` constants
- top-level `targets` → `eventTargets` (Phase 3 experimental rename)
- per-target `timeInterval` → `interval`
- per-target `includeKeys` → `enabledKeys`
Empty `includeKeys` is expanded to all valid keys for the version,
since CML's reporter early-returns when `enabledKeys` is empty.
Parameters:
- Source:
Returns:
-
Type
-
cml.cmcd.CmcdReporterConfig