Abstract

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.

Note

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].

Status of This Document

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/.

The working group maintains a list of all bug reports that the editors have not yet tried to address.

Implementors should be aware that this specification is not stable. Implementors who are not taking part in the discussions are likely to find the specification changing out from under them in incompatible ways. Vendors interested in implementing this specification before it eventually reaches the Candidate Recommendation stage should join the mailing list mentioned below and take part in the discussions.

This document was published by the HTML Media Extensions Working Group as a Working Group Note. If you wish to make comments regarding this document, please send them to public-html-media@w3.org (subscribe, archives). All comments are welcome.

Publication as a Working Group Note 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 5 February 2004 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 September 2015 W3C Process Document.

1. Format

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.

Note

[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.

2. Processing

When such Initialization Data is provided by the application, an implementation (the user agent and/or CDM) MUST :

  1. 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.

  2. If no such supported box is found, the provided data SHALL be considered "not supported by the CDM."

3. Use with Clear Key

When Initialization data is provided with initDataType "cenc", Clear Key implementations MUST look for and use the PSSH box with the Common SystemID.

4. Common SystemID and PSSH Box Format

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.

Note

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.

Note

Implementations MAY support other SystemIDs for backwards compatibility with existing streams.

4.1 Definition

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].

version
1
KID and KID_count
The key ID(s) represented by the PSSH box. For example, those key ID(s) used by the Movie ('moov') or Movie Fragment ('moof').
Data and DataSize
Reserved for future use. DataSize SHALL be set to 0 when constructing this box. When processing, if dataSize is non-zero the Data field SHALL be ignored.

4.2 Example

This section is non-normative.

The following example contains two key IDs.

Example 1
var pssh = [
    0x00, 0x00, 0x00, 0x4c, 0x70, 0x73, 0x73, 0x68, // BMFF box header (76 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)
];

A. References

A.1 Normative references

[CENC]
ISO/IEC. ISO/IEC 23001-7:2016, Information technology — MPEG systems technologies — Part 7: Common encryption in ISO base media file format files. International Standard. URL: https://www.iso.org/obp/ui/#iso:std:iso-iec:23001:-7:ed-3:v1:en
[ENCRYPTED-MEDIA]
David Dorwin; Jerry Smith; Mark Watson; Adrian Bateman. W3C. Encrypted Media Extensions. 5 July 2016. W3C Candidate Recommendation. URL: https://www.w3.org/TR/encrypted-media/

A.2 Informative references

[EME-STREAM-REGISTRY]
David Dorwin; Adrian Bateman; Mark Watson. W3C. Encrypted Media Extensions Stream Format Registry. URL: https://www.w3.org/TR/eme-stream-registry/
[MPEGDASH]
ISO/IEC 23009-1:2014 Information technology -- Dynamic adaptive streaming over HTTP (DASH) -- Part 1: Media presentation description and segment formats. URL: http://standards.iso.org/ittf/PubliclyAvailableStandards/c065274_ISO_IEC_23009-1_2014.zip