PlayReady MPEG-DASH
Bitmovin now supports PlayReady DRM with MPEG Common Encryption (MPEG-CENC) for MPEG-DASH streams. A few days ago we added Widevine Modular and now the next logical step was a PlayReady MPEG-DASH solution. It is also possible to combine Widevine Modular and PlayReady to encrypt your content once and be able to use it with both DRM systems.
Encrypt your Content
The easiest way to encrypt your content using PlayReady DRM is to start with one of our API clients. Currently, encryption is only supported through the API and examples are only implemented for the PHP and Python API clients. We will add comprehensive examples for all other API clients in the next few days, so stay tuned. Additionally, bitcodin (now known as Bitmovin Encoding Service) is able to encode and encrypt your content once, in a way that is compatible with PlayReady and Widevine Modular.
API Client Examples
- PHP API client PlayReady Example
- Python API client PlayReady Example
- PHP API client Combined PlayReady & Widevine Example
- Python API client Combined PlayReady & Widevine Example
Let’s look at the example using the PHP API client. The important part here is to use the PlayReadyDRMConfig object. For testing you can also use the data provided in our example below:
$playreadyDRMConfig = new PlayReadyDRMConfig(); $playreadyDRMConfig->key = ''; $playreadyDRMConfig->keySeed = 'XVBovsmzhP9gRIZxWfFta3VVRPzVEWmJsazEJ46I'; $playreadyDRMConfig->kid = '746573745f69645f4639465043304e4f'; $playreadyDRMConfig->laUrl = 'http://playready.directtaps.net/pr/svc/rightsmanager.asmx'; $playreadyDRMConfig->method = DRMEncryptionMethods::MPEG_CENC; $jobConfig = new JobConfig(); ... $jobConfig->drmConfig = $playreadyDRMConfig; $job = Job::create($jobConfig);
The parameters of the PlayReady configuration have the following meaning:
- key: You either have to provide the content encryption key directly or provide the keySeed.
- keySeed: By providing the keySeed (base64 encoded) with the kid, a content encryption key will be generated for you.
- kid: This is the unique identifier for your content key in hex format.
- laUrl: This is the URL to the PlayReady license server.
- method: Currently we only support MPEG-CENC.
Combined PlayReady DRM and Widevine DRM Encryption
It is also possible to encrypt your content to be played by PlayReady and Widevine clients. You need to get a common content encryption key and key identifier from both systems. With these values you can encrypt the content as follows:
$combinedWidevinePlayreadyDRMConfig = new CombinedWidevinePlayreadyDRMConfig(); $combinedWidevinePlayreadyDRMConfig->pssh = 'CAESEOtnarvLNF6Wu89hZjDxo9oaDXdpZGV2aW5lX3Rlc3QiEGZrajNsamFTZGZhbGtyM2oqAkhEMgA='; $combinedWidevinePlayreadyDRMConfig->key = '100b6c20940f779a4589152b57d2dacb'; $combinedWidevinePlayreadyDRMConfig->kid = 'eb676abbcb345e96bbcf616630f1a3da'; $combinedWidevinePlayreadyDRMConfig->laUrl = 'http://playready.directtaps.net/pr/svc/rightsmanager.asmx?PlayRight=1&ContentKey=EAtsIJQPd5pFiRUrV9Layw=='; $combinedWidevinePlayreadyDRMConfig->method = DRMEncryptionMethods::MPEG_CENC; $jobConfig = new JobConfig(); ... $jobConfig->drmConfig = $combinedWidevinePlayreadyDRMConfig; $job = Job::create($jobConfig);
The parameters of the combined configuration have the following meaning:
- key: This is the common content encryption key.
- kid: This is the common unique identifier for your content key in hex format.
- laUrl: This is the URL to the PlayReady license server.
- pssh: This is the value for the Widevine pssh box.
- method: Currently we only support MPEG-CENC.
Playback your PlayReady Encrypted Content in HTML5
To test your content, you can go to our HLS & MPEG-DASH DRM Test and paste the link to your MPD or HLS from your encoding job. Please note that PlayReady MPEG-DASH content can only be played on Windows 8 and IE11 and above.
We are happy to help you with MPEG-CENC and PlayReady DRM just contact us at [email protected].