mirror of
https://github.com/shaka-project/shaka-player.git
synced 2026-06-14 15:56:38 +03:00
202 lines
8.2 KiB
JavaScript
202 lines
8.2 KiB
JavaScript
/*! @license
|
||
* Shaka Player
|
||
* Copyright 2016 Google LLC
|
||
* SPDX-License-Identifier: Apache-2.0
|
||
*/
|
||
|
||
/**
|
||
* @fileoverview Externs for CMCD data.
|
||
* @see https://github.com/shaka-project/shaka-player/issues/3619
|
||
* @see https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf
|
||
*
|
||
* @externs
|
||
*/
|
||
|
||
/**
|
||
* @typedef {{
|
||
* br: (number|undefined),
|
||
* d: (number|undefined),
|
||
* ot: (string|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: (string|undefined),
|
||
* sid: (string|undefined),
|
||
* st: (string|undefined),
|
||
* v: (number|undefined),
|
||
* bs: (boolean|undefined),
|
||
* rtp: (number|undefined),
|
||
* msd: (number|undefined),
|
||
* ltc: (number|undefined),
|
||
* }}
|
||
*
|
||
* @description
|
||
* Client Media Common Data (CMCD) data.
|
||
*
|
||
* @property {number} br
|
||
* 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.
|
||
*
|
||
* @property {number} d
|
||
* 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.
|
||
*
|
||
* @property {string} ot
|
||
* 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.
|
||
*
|
||
* @property {number} tb
|
||
* The highest bitrate rendition in the manifest or playlist that the client
|
||
* is allowed to play, given current codec, licensing and sizing constraints.
|
||
*
|
||
* @property {number} bl
|
||
* 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’.
|
||
*
|
||
* @property {number} dl
|
||
* 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.
|
||
*
|
||
* @property {number} mtp
|
||
* 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.
|
||
*
|
||
* @property {string} nor
|
||
* 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.
|
||
*
|
||
* @property {string} nrr
|
||
* 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:
|
||
*
|
||
* - `"\<range-start\>-"`
|
||
* - `"\<range-start\>-\<range-end\>"`
|
||
* - `"-\<suffix-length\>"`
|
||
*
|
||
* @property {boolean} su
|
||
* 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.
|
||
*
|
||
* @property {string} cid
|
||
* 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.
|
||
*
|
||
* @property {number} pr
|
||
* The playback rate. `1` if real-time, `2` if double speed, `0` if not
|
||
* playing. SHOULD only be sent if not equal to `1`.
|
||
*
|
||
* @property {string} sf
|
||
* 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.
|
||
*
|
||
* @property {string} sid
|
||
* 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.
|
||
*
|
||
* @property {string} st
|
||
* Stream type
|
||
* - `v` = all segments are available – e.g., VOD
|
||
* - `l` = segments become available over time – e.g., LIVE
|
||
*
|
||
* @property {number} v
|
||
* 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.
|
||
*
|
||
* @property {boolean} bs
|
||
* 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.
|
||
*
|
||
* @property {number} rtp
|
||
* 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.
|
||
*
|
||
* @property {number} msd
|
||
* The Media Start Delay represents in milliseconds the delay between the
|
||
* initiation of the playback request and the moment the first frame is
|
||
* rendered. This is sent only once when it is calculated.
|
||
*
|
||
* @property {number} ltc
|
||
* Live Stream Latency
|
||
*
|
||
* The time delta between when a given media timestamp was made available at
|
||
* the origin and when it was rendered by the client. The accuracy of this
|
||
* estimate is dependent on synchronization between the packager and the
|
||
* player clocks.
|
||
*/
|
||
var CmcdData;
|