CPIX Signaling Behaviour

Using explicitly specified signaling

The optional <ContentProtectionData>, <HLSSignalingData> <SmoothStreamingProtectionHeaderData> and <HDSSignalingData> subelements of the <DRMSystem> element can be used to explicitly specify the DRM signaling data to be included in playlists and manifests. The platform uses the provided information as is and does not check it for consistency or correctness. This provides a lot of flexibility, but does not allow for any errors.

When using explicit signaling for '<ContentProtectionData>'

When adding explicit signaling using <ContentProtectionData> the base64 encoded XML must be a standlone. This means that the XML must well formed, parsable and not be bound to or use prefixed namespaces. For example, base64 encoding the following piece of XML would not not be valid (because of the prefixed namespace):

<cenc:pssh>AAAANHBzc2gBAAAAEHfv7MCyTQKs4zweUuL7SwAAAAHoLxhMOqpXtKzoYGteP+utAAAAAA==</cenc:pssh>

When using explicit signaling for '<HLSSignalingData>'

The information in the <HLSSignalingData> element for media playlists must include the #EXT-X-KEY tag and must be in base64 encoded binary format. It may contain multiple lines, allowing for extra lines with proprietary tags and values.

fMP4 HLS with Widevine requires information in the HLS media playlist:

#EXT-X-KEY:METHOD=SAMPLE-AES,KEYID=0x10000000100010001000100000000001,URI="data:text/plain;base64,AAAAPXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB0aDXdpZGV2aW5lX3Rlc3QiDHRlc3QgY29udGVudA==",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",KEYFORMATVERSIONS="1"

For the HLS master playlist:

#EXT-X-SESSION-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,AAAAPXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB0aDXdpZGV2aW5lX3Rlc3QiDHRlc3QgY29udGVudA==",KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",KEYFORMATVERSIONS="1"

In CPIX, this must be stored as base64 encoded binary and signaled as:

1<!-- Widevine -->
2<DRMSystem
3  systemId="EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED"
4  kid="10000000-1000-1000-1000-100000000001">
5  <PSSH>AAAAUXBzc2gBAAAA7e+LqXnWSs6jyCfc1R0h7QAAAAEQAAAAEAAQABAAEAAAAAABAAAAHRoNd2lkZXZpbmVfdGVzdCIMdGVzdCBjb250ZW50</PSSH>
6  <HLSSignalingData playlist="media">I0VYVC1YLUtFWTpNRVRIT0Q9U0FNUExFLUFFUyxLRVlJRD0weDEwMDAwMDAwMTAwMDEwMDAxMDAwMTAwMDAwMDAwMDAxLFVSST0iZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxBQUFBUFhCemMyZ0FBQUFBN2UrTHFYbldTczZqeUNmYzFSMGg3UUFBQUIwYURYZHBaR1YyYVc1bFgzUmxjM1FpREhSbGMzUWdZMjl1ZEdWdWRBPT0iLEtFWUZPUk1BVD0idXJuOnV1aWQ6ZWRlZjhiYTktNzlkNi00YWNlLWEzYzgtMjdkY2Q1MWQyMWVkIixLRVlGT1JNQVRWRVJTSU9OUz0iMSI=</HLSSignalingData>
7  <HLSSignalingData playlist="master">I0VYVC1YLVNFU1NJT04tS0VZOk1FVEhPRD1TQU1QTEUtQUVTLFVSST0iZGF0YTp0ZXh0L3BsYWluO2Jhc2U2NCxBQUFBUFhCemMyZ0FBQUFBN2UrTHFYbldTczZqeUNmYzFSMGg3UUFBQUIwYURYZHBaR1YyYVc1bFgzUmxjM1FpREhSbGMzUWdZMjl1ZEdWdWRBPT0iLEtFWUZPUk1BVD0idXJuOnV1aWQ6ZWRlZjhiYTktNzlkNi00YWNlLWEzYzgtMjdkY2Q1MWQyMWVkIixLRVlGT1JNQVRWRVJTSU9OUz0iMSI=</HLSSignalingData>
8</DRMSystem>

Note how, on lines 6 and 7, the playlist attribute indicates in which playlist type the signaling is to be placed.

Using implicitly generated signaling

As a USP-specific CPIX extension, it is possible to request generated signaling for a playout format by using an empty signaling element in the CPIX Document. This looks as follows:

1 <!-- Widevine -->
2<DRMSystem
3  systemId="EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED"
4  kid="2FCD790B-C247-4686-9372-0A4F0E29AE0D">
5  <PSSH>AAAAVXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAADUIARIQaeYvbCZ6XOK9BjAUFA34xhoGdnVhbHRvIhF1c3AtcGFkdG8xNmFiY2RlZioCSEQyAA==</PSSH>
6  <ContentProtectionData />
7  <HLSSignalingData playlist="media" />
8  <HLSSignalingData playlist="master" />
9</DRMSystem>

In the above example there is a Widevine <DRMSystem> for which neither the DASH (<ContentProtectionData>) or HLS signaling (<HLSSignalingData>) are known. By adding said elements but leaving them empty, USP is instructed to generate the signaling. The empty elements are emphasized by lines 6, 7, and 8.

Do note that, except for Marlin, a <PSSH> element with PSSH data is required for all DRM systems for which signaling can be generated, because the PSSH data provides information that is necessary to generate the signaling for the DRM systems.

To decide whether or not it will generate signaling for a given combination of playout format and DRM system, Unified Origin uses the following logic:

  • Signaling is not added to the manifest, if the element is not present in the CPIX document.

  • Signaling is copied as-is, if the element is present and contains signaling information.

  • Signaling is generated, if the element is present and empty.

The below table provides an overview of the DRM systems that Unified Origin can currently generate signaling for based on CPIX, as well as for which DRM systems it will add the provided 'PSSH' to the DASH 'init' segment:

Playout

DRM

Signaling (client manifest)

PSSH (added to 'init' segment)

_

_

Copied

Generated

Copied

MPD

Primetime


ClearKey


Irdeto CENC


Latens


Marlin

N/A


PlayReady


Verimatrix/ViewRight


ViaccessOrca


Widevine


Custom

N/A

HLS

PlayReady

N/A


Widevine

N/A


FairPlay

N/A

N/A


Custom

N/A

N/A

ISS

PlayReady

N/A


Custom

N/A

N/A

HDS

Primetime

N/A


Custom

N/A

N/A