Copyright © 2024 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
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 the Encrypted Media Extensions Stream Format Registry [EME-STREAM-REGISTRY].
This section describes the status of this document at the time of its publication. 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 a Group Note using the Note track.
This Group Note is endorsed by the Media Working Group, but is not endorsed by W3C itself nor its Members.
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.
The W3C Patent Policy does not carry any licensing requirements or commitments on this document.
This document is governed by the 03 November 2023 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 1077efec-c0b2-4d02-ace3-3c1e52e2fb4b
.
The PSSH box format is as follows. It follows version 1 of the 'pssh' box as defined in [CENC].
1
0
when 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)
];
As well as sections marked as non-normative, all authoring guidelines, diagrams, examples, and notes in this specification are non-normative. Everything else in this specification is normative.
The key words MAY, MUST, RECOMMENDED, SHALL, and SHOULD in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here.