Radiant Media Player

Detecting EME and CDM support in a browser for MPEG-DASH DRM

Last updated on June 6, 2016


Introduction

In this blog post we will review how to detect Encrypted Media Extensions (EME) and Content Decryption Module (CDM) support in a browser for various DRM technologies when streaming with MPEG-DASH.

It is assumed you have a fair understanding of JavaScript, MPEG-DASH, EME and DRM in order to process the information present on this page. A good introduction to EME can be found here.


Detecting EME and requestMediaKeySystemAccess support

In order to decrypt a DRM encrypted MPEG-DASH stream we first need to test for EME support. No EME support means no DRM decryption. JavaScript snippet (function):

var hasEMESupport = function() {
  var eme = "MediaKeys" in window || "WebKitMediaKeys" in window || "MSMediaKeys" in window;
  if (eme) {
    return true;
  }
  return false;
};

Having EME support in a browser is not enough to play MPEG-DASH DRM encrypted content. The browser needs a CDM to decrypt a given DRM. A CDM is specific to a DRM technology. The CDM is built within the browser.

Using the requestMediaKeySystemAccess method from a browser navigator object, we can detect if a specific CDM is supported within a browser.

As of June 2016 requestMediaKeySystemAccess is supported in:

  • Chrome 42+
  • MS Edge
  • Latest Firefox and Opera

JavaScript snippet (function) to detect requestMediaKeySystemAccess method availability:

var hasRMKSASupport = function() {    
  var requestMediaKeySystemAccess = "requestMediaKeySystemAccess" in window.navigator;
  if (requestMediaKeySystemAccess) {
    return true;
  }
  return false;
}

Detecting specific DRM/CDM support

Here is a list of supported CDM as of June 2016 for major browsers on the market:

  • Widevine CDM: Chrome 34+, Opera 31+, Firefox 47+(1)
  • Playready CDM: IE11 on Windows 8+, MS Edge
  • Clear Key CDM: latest Chrome and Firefox

(1) Firefox support for Widevine CDM is currently in testing phase.

Firefox and some other browsers may also support Adobe Primetime DRM but this is currently unsupported with Radiant Media Player.

JavaScript snippet to detect specific DRM support - you need to couple it with the hasEMESupport and hasRMKSASupport previously mentioned functions:

var config = [{
  "initDataTypes": ["cenc"],
  "audioCapabilities": [{
    "contentType": "audio/mp4;codecs=\"mp4a.40.2\""
  }],
  "videoCapabilities": [{
    "contentType": "video/mp4;codecs=\"avc1.42E01E\""
  }]
}];
try {
  navigator.
  requestMediaKeySystemAccess("com.widevine.alpha", config).
  then(function(mediaKeySystemAccess) {
    console.log('widevine support ok');
  }).catch(function(e) {
    console.log('no widevine support');
    console.log(e);
  });
} catch (e) {
  console.log('no widevine support');
  console.log(e);
}
try {
  navigator.
  requestMediaKeySystemAccess("com.microsoft.playready", config).
  then(function(mediaKeySystemAccess) {
    console.log('playready support ok');
  }).catch(function(e) {
    console.log('no playready support');
    console.log(e);
  });
} catch (e) {
    console.log('no playready support');
  console.log(e);
}
try {
  navigator.
  requestMediaKeySystemAccess("org.w3.clearkey",config).
  then(function(mediaKeySystemAccess) {
    console.log('clearkey support ok');
  }).catch(function(e) {
    console.log('no clearkey support');
    console.log(e);
  });
} catch (e) {
  console.log('no clearkey support');
  console.log(e);
}
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 3.0 License.