This specification defines the
"cenc" Initialization Data format for use with the Encrypted Media Extensions [ENCRYPTED-MEDIA].
This format is commonly used with the ISO Common Encryption ('cenc') Protection Scheme for ISO Base Media File Format Stream Format [EME-STREAM-REGISTRY].
This specification also defines a common SystemID and PSSH box format for use with Encrypted Media Extensions.
This format's Initialization Data Type string
"cenc" refers to the [CENC] spec that defines the PSSH boxes that comprise the format.
It does not relate to or imply a stream format, including the use of the 'cenc' protection scheme.
Stream formats are indicated by the content types as defined in Encrypted Media Extensions Stream Format Registry [EME-STREAM-REGISTRY].
This section describes the status of this document at the time of its publication. Other documents may supersede this document. A list of current W3C publications and the latest revision of this technical report can be found in the W3C technical reports index at https://www.w3.org/TR/.
This document was published by the Media Working Group as an Editor's Draft.
Comments regarding this document are welcome. Please send them to email@example.com (archives).
Publication as an Editor's Draft does not imply endorsement by the W3C Membership. This is a draft document and may be updated, replaced or obsoleted by other documents at any time. It is inappropriate to cite this document as other than work in progress.
This document was produced by a group operating under the W3C Patent Policy. W3C maintains a public list of any patent disclosures made in connection with the deliverables of the group; that page also includes instructions for disclosing a patent. An individual who has actual knowledge of a patent which the individual believes contains Essential Claim(s) must disclose the information in accordance with section 6 of the W3C Patent Policy.
This document is governed by the 1 March 2019 W3C Process Document.
The format is one or more concatenated Protection System Specific Header ('pssh') boxes [CENC], each for a unique SystemID. One of the concatenated 'pssh' boxes SHOULD use the Common SystemID and PSSH Box Format.
[CENC] also specifies storage of a 'pssh' box base64-encoded in an XML element of the form
<cenc:pssh (base64 'pssh')>.
For example, [MPEGDASH] manifests may provide 'pssh' boxes in this format, each contained in a ContentProtection Descriptor element identified by a SystemID.
These 'pssh' boxes may be decoded and concatenated by an application to provide equivalent Initialization Data to that stored in movie or movie fragment boxes.
When such Initialization Data is provided by the application, an implementation (the user agent and/or CDM) MUST :
Examine the series of 'pssh' boxes to find the first 'pssh' box that the CDM instance supports. This includes checking the SystemID, box version, and system-specific values.
If no such supported box is found, the provided data SHALL be considered "not supported by the CDM."
When Initialization data is provided with initDataType
"cenc", Clear Key implementations MUST look for and use the PSSH box with the Common SystemID.
This section defines a common open SystemID and PSSH box format.
Key System implementations supporting the
"cenc" Initialization Data Format MUST support this SystemID and format.
Media resources for use with Encrypted Media Extensions SHOULD contain appropriate PSSH box(es) for this SystemID.
Use of this SystemID is RECOMMENDED for applications, packagers, and implementors. Use of other SystemIDs with the Encrypted Media Extensions APIs is discouraged. 'pssh' box(es) for this SystemID SHOULD be included in all new or repackaged content so that the content can be used with any compliant Key System. For existing content, applications may alternatively obtain a 'pssh' box containing this SystemID or another Initialization Data Type (e.g., "keyids" Initialization Data Format [EME-STREAM-REGISTRY]) from another source.
Implementations MAY support other SystemIDs for backwards compatibility with existing streams.
The SystemID is
The PSSH box format is as follows. It follows version 1 of the 'pssh' box as defined in [CENC].
0when constructing this box. When processing, if dataSize is non-zero the Data field SHALL be ignored.
This section is non-normative.
The following example contains two key IDs.
var pssh = [ 0x00, 0x00, 0x00, 0x44, 0x70, 0x73, 0x73, 0x68, // BMFF box header (68 bytes, 'pssh') 0x01, 0x00, 0x00, 0x00, // Full box header (version = 1, flags = 0) 0x10, 0x77, 0xef, 0xec, 0xc0, 0xb2, 0x4d, 0x02, // SystemID 0xac, 0xe3, 0x3c, 0x1e, 0x52, 0xe2, 0xfb, 0x4b, 0x00, 0x00, 0x00, 0x02, // KID_count (2) 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, // First KID ("0123456789012345") 0x38, 0x39, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, // Second KID ("ABCDEFGHIJKLMNOP") 0x49, 0x4a, 0x4b, 0x4c, 0x4d, 0x4e, 0x4f, 0x50, 0x00, 0x00, 0x00, 0x00, // Size of Data (0) ];