Playing protected content with EZDRM

Overview

Nearly every license provider, such as Irdeto or EZDRM, requires a few special information being sent to the DRM license server, or responds with a proprietary format. Instead of integrating a few license providers into the core of our player, we decided to provide necessary configuration options via the player configuration.

Widevine

var conf = {
  ...
  source: {
    dash: 'DASH_MANIFEST_URL',
    drm: {
      widevine: {
        LA_URL: 'http://widevine-dash.ezdrm.com/proxy?pX=EZDRM_ACCOUNT_ID'
      }
    }
  }
};

Please replace the following placeholders in the code:

  • DASH_MANIFEST_URL: The URL to the DASH manifest (MPD) file.
  • EZDRM_ACCOUNT_ID: Your EZDRM account ID.
    If your setup requires the sending of customData to the license server, this can be added to the license server URL as well:
var conf = {
  ...
  source: {
    dash: 'DASH_MANIFEST_URL',
    drm: {
      widevine: {
        LA_URL: 'http://widevine-dash.ezdrm.com/proxy?pX=EZDRM_ACCOUNT_ID&CustomData=BASE64_ENCODED_CUSTOM_DATA'
      }
    }
  }
};

Please replace the following placeholders in the code:

  • DASH_MANIFEST_URL: The URL to the DASH manifest (MPD) file.
  • EZDRM_ACCOUNT_ID: Your EZDRM account ID.
  • BASE64_ENCODED_CUSTOM_DATA: EZDRM customData to send along with the license request.

PlayReady

var conf = {
  ...
  source: {
    dash: 'DASH_MANIFEST_URL',
    drm: {
      playready: {
        LA_URL: 'http://playready.ezdrm.com/cency/preauth.aspx?pX=EZDRM_ACCOUNT_ID'
      }
    }
  }
};

Please replace the following placeholders in the code:

  • DASH_MANIFEST_URL: The URL to the DASH manifest (MPD) file.
  • EZDRM_ACCOUNT_ID: Your EZDRM account ID.
    If your setup requires the sending of customData to the license server, this can be added to the license server URL as well:
var conf = {
  ...
  source: {
    dash: 'DASH_MANIFEST_URL',
    drm: {
      playready: {
        LA_URL: 'http://playready.ezdrm.com/cency/preauth.aspx?pX=EZDRM_ACCOUNT_ID&t=BASE64_ENCODED_CUSTOM_DATA'
      }
    }
  }
};

Please replace the following placeholders in the code:

  • DASH_MANIFEST_URL: The URL to the DASH manifest (MPD) file.
  • EZDRM_ACCOUNT_ID: Your EZDRM account ID.
  • BASE64_ENCODED_CUSTOM_DATA: EZDRM customData to send along with the license request.

FairPlay

var conf = {
  ...
  source: {
    hls: 'HLS_MANIFEST_URL',
    drm: {
      fairplay: {
        LA_URL: 'http://fps.ezdrm.com/api/licenses/CONTENT_ID',
        certificateURL: 'CERTIFICATE_URL',
        prepareContentId: function(contentId) {
          var uri = contentId;
          var uriParts = uri.split('://', 1);
          var protocol = uriParts[0].slice(-3);
          uriParts = uri.split(';', 2);
          contentId = uriParts.length > 1 ? uriParts[1] : '';
          uriParts = contentId.split('?', 2);
          contentId = uriParts.length > 1 ? uriParts[0] : contentId;
          return protocol.toLowerCase() == 'skd' ? contentId : '';
        },
        prepareLicenseAsync: function(ckc) {
          return new Promise(function(resolve, reject) {
            var reader = new FileReader();
            reader.addEventListener('loadend', function() {
              resolve(new Uint8Array(reader.result));
            });
            reader.addEventListener('error', function() {
              reject(reader.error);
            });
            reader.readAsArrayBuffer(ckc);
          });
        },
        prepareMessage: function(event, session) {
          return new Blob([event.message], {type: 'application/octet-binary'});
        },
        headers: {
          'content-type': 'application/octet-stream'
        },
        useUint16InitData: true,
        licenseResponseType: 'blob'
      }
    }
  }
};

Please replace the following placeholders in the code:

  • HLS_MANIFEST_URL: The URL to the HLS manifest (M3U8) file.
  • CONTENT_ID: The content ID for the given asset, which should be in the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
  • CERTIFICATE_URL: The URL to the Fairplay certificate. This needs to be accessible for the player.

Complete example for Widevine, PlayReady and FairPlay

var conf = {
  ...
  source: {
    dash: 'DASH_MANIFEST_URL',
    hls: 'HLS_MANIFEST_URL',
    drm: {
      widevine: {
        LA_URL: 'http://widevine-dash.ezdrm.com/proxy?pX=EZDRM_ACCOUNT_ID'
      },
      playready: {
        LA_URL: 'http://playready.ezdrm.com/cency/preauth.aspx?pX=EZDRM_ACCOUNT_ID'
      },
      fairplay: {
        LA_URL: 'http://fps.ezdrm.com/api/licenses/CONTENT_ID',
        certificateURL: 'CERTIFICATE_URL',
        prepareContentId: function(contentId) {
          var uri = contentId;
          var uriParts = uri.split('://', 1);
          var protocol = uriParts[0].slice(-3);
          uriParts = uri.split(';', 2);
          contentId = uriParts.length > 1 ? uriParts[1] : '';
          uriParts = contentId.split('?', 2);
          contentId = uriParts.length > 1 ? uriParts[0] : contentId;
          return protocol.toLowerCase() == 'skd' ? contentId : '';
        },
        prepareLicenseAsync: function(ckc) {
          return new Promise(function(resolve, reject) {
            var reader = new FileReader();
            reader.addEventListener('loadend', function() {
              resolve(new Uint8Array(reader.result));
            });
            reader.addEventListener('error', function() {
              reject(reader.error);
            });
            reader.readAsArrayBuffer(ckc);
          });
        },
        prepareMessage: function(event, session) {
          return new Blob([event.message], {type: 'application/octet-binary'});
        },
        headers: {
          'content-type': 'application/octet-stream'
        },
        useUint16InitData: true,
        licenseResponseType: 'blob'
      }
    }
  }
};

Please replace the following placeholders in the code:

  • DASH_MANIFEST_URL: The URL to the DASH manifest (MPD) file.
  • HLS_MANIFEST_URL: The URL to the HLS manifest (M3U8) file.
  • CONTENT_ID: The content ID for the given asset, which should be in the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
  • CERTIFICATE_URL: The URL to the Fairplay certificate. This needs to be accessible for the player.
  • EZDRM_ACCOUNT_ID: Your EZDRM account ID.