Class: shaka.util.CmcdManager

A CmcdManager maintains CMCD state as well as a collection of utility functions.

Constructor

new CmcdManager(playerInterface, config)

A CmcdManager maintains CMCD state as well as a collection of utility functions.

Parameters:
Name Type Description
playerInterface shaka.util.CmcdManager.PlayerInterface
config shaka.extern.CmcdConfiguration
Source:

Members

ObjectType :string

Type:
  • string
Properties:
Name Value Type Description
MANIFEST m string
AUDIO a string
VIDEO v string
MUXED av string
INIT i string
CAPTION c string
TIMED_TEXT tt string
KEY k string
OTHER o string
Source:

StreamingFormat :string

Type:
  • string
Properties:
Name Value Type Description
DASH d string
HLS h string
SMOOTH s string
OTHER o string
Source:

StreamType :string

Type:
  • string
Properties:
Name Value Type Description
VOD v string
LIVE l string
Source:

Version :number

The CMCD spec version
Type:
  • number
Source:

buffering_ :boolean

Type:
  • boolean
Source:

playbackStarted_ :boolean

Type:
  • boolean
Source:

sid_ :string

Session ID
Type:
  • string
Source:

starved_ :boolean

Type:
  • boolean
Source:

Methods

appendQueryToUri(uri, query) → {string}

Append query args to a uri.
Parameters:
Name Type Description
uri string
query string
Source:
Returns:
Type
string

serialize(data) → {string}

Serialize a CMCD data object according to the rules defined in the section 3.2 of [CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).
Parameters:
Name Type Description
data shaka.util.CmcdManager.Data The CMCD data object
Source:
Returns:
Type
string

toHeaders(data) → {Object}

Convert a CMCD data object to request headers according to the rules defined in the section 2.1 and 3.2 of [CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).
Parameters:
Name Type Description
data shaka.util.CmcdManager.Data The CMCD data object
Source:
Returns:
Type
Object

toQuery(data) → {string}

Convert a CMCD data object to query args according to the rules defined in the section 2.2 and 3.2 of [CTA-5004](https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf).
Parameters:
Name Type Description
data shaka.util.CmcdManager.Data The CMCD data object
Source:
Returns:
Type
string

appendSrcData(uri, mimeType) → {string}

Apply CMCD data to streams loaded via src=.
Parameters:
Name Type Description
uri string
mimeType string
Source:
Returns:
Type
string

appendTextTrackData(uri) → {string}

Apply CMCD data to side car text track uri.
Parameters:
Name Type Description
uri string
Source:
Returns:
Type
string

apply_(requestnon-null, datanon-null, useHeaders)

Apply CMCD data to a request.
Parameters:
Name Type Description
request shaka.extern.Request The request to apply CMCD data to
data shaka.util.CmcdManager.Data The data object
useHeaders boolean Send data via request headers
Source:

applyManifestData(requestnon-null, manifestInfo)

Apply CMCD data to a manifest request.
Parameters:
Name Type Description
request shaka.extern.Request The request to apply CMCD data to
manifestInfo shaka.util.CmcdManager.ManifestInfo The manifest format
Source:

applySegmentData(requestnon-null, segmentInfo)

Apply CMCD data to a segment request
Parameters:
Name Type Description
request shaka.extern.Request
segmentInfo shaka.util.CmcdManager.SegmentInfo
Source:

applyTextData(requestnon-null)

Apply CMCD data to a text request
Parameters:
Name Type Description
request shaka.extern.Request
Source:

createData_() → {shaka.util.CmcdManager.Data}

Create baseline CMCD data
Source:
Returns:
Type
shaka.util.CmcdManager.Data

getBufferLength_(type) → {number}

Get the buffer length for a media type in milliseconds
Parameters:
Name Type Description
type string
Source:
Returns:
Type
number

getObjectType_(segmentInfo)

The CMCD object type.
Parameters:
Name Type Description
segmentInfo shaka.util.CmcdManager.SegmentInfo
Source:

getObjectTypeFromMimeType_(mimeTypenon-null) → {shaka.util.CmcdManager.ObjectType|undefined}

The CMCD object type from mimeType.
Parameters:
Name Type Description
mimeType string
Source:
Returns:
Type
shaka.util.CmcdManager.ObjectType | undefined

getStreamType_() → {shaka.util.CmcdManager.StreamType}

Get the stream type
Source:
Returns:
Type
shaka.util.CmcdManager.StreamType

getTopBandwidth_(type) → {number}

Get the highest bandwidth for a given type.
Parameters:
Name Type Description
type string
Source:
Returns:
Type
number

setBuffering(buffering)

Set the buffering state
Parameters:
Name Type Description
buffering boolean
Source:

Type Definitions

Data

Client Media Common Data (CMCD) data.
Type:
  • {br: (number|undefined), d: (number|undefined), ot: (shaka.util.CmcdManager.ObjectType|undefined), tb: (number|undefined), bl: (number|undefined), dl: (number|undefined), mtp: (number|undefined), nor: (string|undefined), nrr: (string|undefined), su: (boolean|undefined), cid: (string|undefined), pr: (number|undefined), sf: (shaka.util.CmcdManager.StreamingFormat|undefined), sid: (string|undefined), st: (shaka.util.CmcdManager.StreamType|undefined), v: (number|undefined), bs: (boolean|undefined), rtp: (number|undefined)}
Properties:
Name Type Description
br number The encoded bitrate of the audio or video object being requested. This may not be known precisely by the player; however, it MAY be estimated based upon playlist/manifest declarations. If the playlist declares both peak and average bitrate values, the peak value should be transmitted.
d number The playback duration in milliseconds of the object being requested. If a partial segment is being requested, then this value MUST indicate the playback duration of that part and not that of its parent segment. This value can be an approximation of the estimated duration if the explicit value is not known.
ot shaka.util.CmcdManager.ObjectType The media type of the current object being requested: - `m` = text file, such as a manifest or playlist - `a` = audio only - `v` = video only - `av` = muxed audio and video - `i` = init segment - `c` = caption or subtitle - `tt` = ISOBMFF timed text track - `k` = cryptographic key, license or certificate. - `o` = other If the object type being requested is unknown, then this key MUST NOT be used.
tb number The highest bitrate rendition in the manifest or playlist that the client is allowed to play, given current codec, licensing and sizing constraints.
bl number The buffer length associated with the media object being requested. This value MUST be rounded to the nearest 100 ms. This key SHOULD only be sent with an object type of ‘a’, ‘v’ or ‘av’.
dl number Deadline from the request time until the first sample of this Segment/Object needs to be available in order to not create a buffer underrun or any other playback problems. This value MUST be rounded to the nearest 100ms. For a playback rate of 1, this may be equivalent to the player’s remaining buffer length.
mtp number The throughput between client and server, as measured by the client and MUST be rounded to the nearest 100 kbps. This value, however derived, SHOULD be the value that the client is using to make its next Adaptive Bitrate switching decision. If the client is connected to multiple servers concurrently, it must take care to report only the throughput measured against the receiving server. If the client has multiple concurrent connections to the server, then the intent is that this value communicates the aggregate throughput the client sees across all those connections.
nor string Relative path of the next object to be requested. This can be used to trigger pre-fetching by the CDN. This MUST be a path relative to the current request. This string MUST be URLEncoded. The client SHOULD NOT depend upon any pre-fetch action being taken - it is merely a request for such a pre-fetch to take place.
nrr string If the next request will be a partial object request, then this string denotes the byte range to be requested. If the ‘nor’ field is not set, then the object is assumed to match the object currently being requested. The client SHOULD NOT depend upon any pre-fetch action being taken – it is merely a request for such a pre-fetch to take place. Formatting is similar to the HTTP Range header, except that the unit MUST be ‘byte’, the ‘Range:’ prefix is NOT required and specifying multiple ranges is NOT allowed. Valid combinations are: - `"\-"` - `"\-\"` - `"-\"`
su boolean Key is included without a value if the object is needed urgently due to startup, seeking or recovery after a buffer-empty event. The media SHOULD not be rendering when this request is made. This key MUST not be sent if it is FALSE.
cid string A unique string identifying the current content. Maximum length is 64 characters. This value is consistent across multiple different sessions and devices and is defined and updated at the discretion of the service provider.
pr number The playback rate. `1` if real-time, `2` if double speed, `0` if not playing. SHOULD only be sent if not equal to `1`.
sf shaka.util.CmcdManager.StreamingFormat The streaming format that defines the current request. - `d` = MPEG DASH - `h` = HTTP Live Streaming (HLS) - `s` = Smooth Streaming - `o` = other If the streaming format being requested is unknown, then this key MUST NOT be used.
sid string A GUID identifying the current playback session. A playback session typically ties together segments belonging to a single media asset. Maximum length is 64 characters. It is RECOMMENDED to conform to the UUID specification.
st shaka.util.CmcdManager.StreamType Stream type - `v` = all segments are available – e.g., VOD - `l` = segments become available over time – e.g., LIVE
v number The version of this specification used for interpreting the defined key names and values. If this key is omitted, the client and server MUST interpret the values as being defined by version 1. Client SHOULD omit this field if the version is 1.
bs boolean Buffer starvation key is included without a value if the buffer was starved at some point between the prior request and this object request, resulting in the player being in a rebuffering state and the video or audio playback being stalled. This key MUST NOT be sent if the buffer was not starved since the prior request. If the object type `ot` key is sent along with this key, then the `bs` key refers to the buffer associated with the particular object type. If no object type is communicated, then the buffer state applies to the current session.
rtp number Requested maximum throughput The requested maximum throughput that the client considers sufficient for delivery of the asset. Values MUST be rounded to the nearest 100kbps. For example, a client would indicate that the current segment, encoded at 2Mbps, is to be delivered at no more than 10Mbps, by using rtp=10000. Note: This can benefit clients by preventing buffer saturation through over-delivery and can also deliver a community benefit through fair-share delivery. The concept is that each client receives the throughput necessary for great performance, but no more. The CDN may not support the rtp feature.
Source:

ManifestInfo

Type:
Properties:
Name Type Description
format shaka.util.CmcdManager.StreamingFormat The manifest's stream format
Source:

PlayerInterface

Type:
  • {getBandwidthEstimate: function(): number, getBufferedInfo: function(): shaka.extern.BufferedInfo, getCurrentTime: function(): number, getManifest: function(): shaka.extern.Manifest, getPlaybackRate: function(): number, isLive: function(): boolean}
Properties:
Name Type Description
getBandwidthEstimate function Get the estimated bandwidth in bits per second.
getBufferedInfo function Get information about what the player has buffered.
getCurrentTime function Get the current time
getManifest function Get the manifest
getPlaybackRate function Get the playback rate
isLive function Get if the player is playing live content.
Source:

SegmentInfo

Type:
  • {type: string, init: boolean, duration: number, mimeType: string, codecs: string, bandwidth: (number|undefined)}
Properties:
Name Type Description
type string The media type
init boolean Flag indicating whether the segment is an init segment
duration number The duration of the segment in seconds
mimeType string The segment's mime type
codecs string The segment's codecs
bandwidth number | undefined The segment's variation bandwidth
Source: