Skip to content

Common Media Client Data

CTA-5004 - Common Media Client Data ( CMCD) defines data that is collected by the media player and is sent as a custom HTTP header or query parameter alongside each object request to a CDN. This enables use cases such as log analysis, quality of service monitoring, prioritization of requests, cross correlation of performance problems with specific devices and platforms and improved edge caching.

CMCD version 1 is fully supported in dash.js. CMCD version 2 fields are gradually being added to dash.js.

Configuration Options

dash.js offers various configuration options related to CMCD. The following settings can be configured:

SettingDescription
applyParametersFromMpdEnable if dash.js should use the CMCD parameters defined in the MPD
enabledEnable or disable the CMCD reporting.
sidGUID identifying the current playback session.Should be defined in UUID format
cidA unique string to identify the current content. If not specified it will be a hash of the MPD URL.
rtpThe requested maximum throughput that the client considers sufficient for delivery of the asset. If not specified this value will be dynamically calculated in the CMCDModel based on the current buffer level.
rtpSafetyFactorThis value is used as a factor for the rtp value calculation: rtp = minBandwidth * rtpSafetyFactor. If not specified this value defaults to 5. Note that this value is only used when no static rtp value is defined.
modeThe method to use to attach cmcd metrics to the requests. 'query' to use query parameters, 'header' to use http headers.If not specified this value defaults to 'query'.
enabledKeysThis value is used to specify the desired CMCD parameters. Parameters not included in this list are not reported.
includeInRequestsSpecifies which HTTP GET requests shall carry parameters. If not specified this value defaults to ['segment', 'mpd].
versionThe version of the CMCD to use. If not specified this value defaults to 1.

For a full documentation of all CMCD related options please refer to our API documentation.

Example configuration:

js
player.updateSettings({
    streaming: {
        cmcd: {
            applyParametersFromMpd: true,
            enabled: false,
            sid: null,
            cid: null,
            rtp: null,
            rtpSafetyFactor: 5,
            mode: 'query',
            enabledKeys: ['br', 'd', 'ot', 'tb', 'bl', 'dl', 'mtp', 'nor', 'nrr', 'su', 'bs', 'rtp', 'cid', 'pr', 'sf', 'sid', 'st', 'v'],
            includeInRequests: ['segment', 'mpd'],
            version: 1
        }
    },
})

CMCD Version 2

CMCD version 2 extends version 1 with additional keys and new reporting modes. dash.js supports CMCD v2 based on the Common Media Library. To enable it, set version: 2 in the CMCD settings.

Additional keys

Among others, the following v2 keys are reported by dash.js:

KeyDescription
ltcLive latency: the delay between the live edge and the current playback position
msdMedia start delay: time from the playback request until the first frame is rendered
staPlayer state (e.g. playing, paused, seeking)
eEvent that triggered an event mode report

Reporting modes

In addition to the v1 request mode (CMCD data attached to segment and MPD requests as query parameters or HTTP headers), version 2 introduces dedicated reporting targets. dash.js supports these via the eventTargets setting:

  • Response mode: reports are sent to a reporting endpoint after a response was received (rr event).
  • Event mode: reports are triggered by player events such as play state changes (ps) or errors, or periodically via a time interval (t).
  • Batching: reports can be collected and sent in batches using the batchSize attribute.

Each target is configured individually:

js
player.updateSettings({
    streaming: {
        cmcd: {
            enabled: true,
            version: 2,
            eventTargets: [
                {
                    enabled: true,
                    url: 'https://example.com/cmcd/response-mode',
                    events: ['rr'],
                    includeInRequests: ['segment']
                },
                {
                    enabled: true,
                    url: 'https://example.com/cmcd/event-mode',
                    events: ['ps'],
                    interval: 10,
                    enabledKeys: ['e', 'msd', 'sta']
                }
            ]
        }
    },
})

Example

An example illustrating CMCD reporting can be found in our dash.js sample section. A dedicated CMCD v2 example including response and event mode reporting is available in the CMCD v2 sample.