PlayReady DRM Now Compatible with Bitmovin

Written by:
August 7th, 2015

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

Playready MPEG-DASHThe 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

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 support@bitcodin.com.

Tags: , , , , , , , , , , , , , , , , , , ,

Simple Share Buttons