| <html> | |
| <head> | |
| <title>DRM Test</title> | |
| <script language="JavaScript"> | |
| function setup() { | |
| if (location.hostname == 'tests' || location.hostname == 'localhost') | |
| return; | |
| alert('This page can only be run from tests or localhost.'); | |
| // Disable all elements. | |
| var elements = document.getElementById("form").elements; | |
| for (var i = 0, element; element = elements[i++]; ) { | |
| element.disabled = true; | |
| } | |
| doTest(); | |
| } | |
| // Based on DRM detection code from https://github.com/google/shaka-player | |
| function probeSupport() { | |
| var tests = []; | |
| var testKeySystems = [ | |
| 'org.w3.clearkey', | |
| 'com.widevine.alpha', | |
| ]; | |
| var basicVideoCapabilities = [ | |
| { contentType: 'video/mp4; codecs="avc1.42E01E"' }, | |
| { contentType: 'video/webm; codecs="vp9"' } | |
| ]; | |
| var basicConfig = { | |
| videoCapabilities: basicVideoCapabilities | |
| }; | |
| var offlineConfig = { | |
| videoCapabilities: basicVideoCapabilities, | |
| persistentState: 'required', | |
| sessionTypes: ['persistent-license'] | |
| }; | |
| // Try the offline config first, then fall back to the basic config. | |
| var configs = [offlineConfig, basicConfig]; | |
| var support = {}; | |
| testKeySystems.forEach(function(keySystem) { | |
| var p = navigator.requestMediaKeySystemAccess(keySystem, configs) | |
| .then(function(access) { | |
| // We can't (yet) trust every browser to report the session types they | |
| // support in access.getConfiguration(). Therefore, we create a | |
| // MediaKeys object and try to create an offline session. | |
| // https://goo.gl/gtYT3z, https://goo.gl/rvnB1g, https://goo.gl/z0URJ0 | |
| var mediaKeys = access.createMediaKeys(); | |
| var persistentState = false; | |
| try { | |
| // This will throw if persistent licenses are not supported. | |
| mediaKeys.createSession('persistent-license'); | |
| persistentState = true; | |
| } catch (e) {} | |
| support[keySystem] = {persistentState: persistentState}; | |
| }, function() { | |
| support[keySystem] = null; | |
| }); | |
| tests.push(p); | |
| }); | |
| return Promise.all(tests).then(function() { | |
| return support; | |
| }); | |
| } | |
| function getWidevineCdmInfo() { | |
| if (!('Widevine Content Decryption Module' in navigator.plugins)) { | |
| return "Widevine CDM plugin not loaded."; | |
| } | |
| var plugin = navigator.plugins['Widevine Content Decryption Module']; | |
| return "Widevine CDM plugin:\n" + JSON.stringify({ | |
| "name": plugin.name, | |
| "filename": plugin.filename, | |
| "description": plugin.description, | |
| }, null, ' ') | |
| } | |
| function printSupport(support) { | |
| var output = document.getElementById('output'); | |
| output.textContent = getWidevineCdmInfo() + "\n\nDRM Support:\n" + support; | |
| } | |
| function doTest() { | |
| probeSupport().then(function(support) { | |
| printSupport(JSON.stringify(support, null, ' ')); | |
| }); | |
| } | |
| // Send a message to the browser process. | |
| function sendMessage() { | |
| // Create the request object. | |
| var request = {}; | |
| request.widevine_cdm_path = | |
| document.getElementById("widevine_cdm_path").value; | |
| // Results in a call to the OnQuery method in drm_test.cc | |
| window.cefQuery({ | |
| request: JSON.stringify(request), | |
| onSuccess: function(response) { | |
| alert('Widevine CDM plugin loaded successfully!'); | |
| // Registration succeeded so test again. | |
| doTest(); | |
| }, | |
| onFailure: function(error_code, error_message) { | |
| alert(error_message + ' (' + error_code + ')'); | |
| } | |
| }); | |
| } | |
| </script> | |
| </head> | |
| <body bgcolor="white" onload="setup()"> | |
| Important notes: | |
| <ul> | |
| <li>Clearkey support is built in and should always be enabled.</li> | |
| <li>Widevine support requires CDM binaries that must be downloaded from Google. Contact Google <a href="https://www.widevine.com/contact.html">here</a> for details.</li> | |
| <li>Widevine support is enabled by calling the CefRegisterWidevineCdm() function. See comments in cef_web_plugin.h for usage.</li> | |
| <li>The CefRegisterWidevineCdm() function can be called during runtime on Windows and OS X to register Widevine binaries. Use the below form to test this capability.</li> | |
| <li>Calling CefRegisterWidevineCdm() before CefInitialize() is required on Linux.</li> | |
| <li>Cefclient will call CefRegisterWidevineCdm() before CefInitialize() if "--widevine-cdm-path=<path>" is specified on the command-line.</li> | |
| <li>View extended media support information <a href="https://shaka-player-demo.appspot.com/support.html">here</a>.</li> | |
| <li>Test DRM video playback <a href="https://shaka-player-demo.appspot.com/demo/">here</a>. Select an "asset" that includes Clearkey or Widevine in the name.</li> | |
| </ul> | |
| <form id="form"> | |
| Widevine CDM Path: <input type="text" id="widevine_cdm_path" value="" size="40"> | |
| <input type="button" onclick="sendMessage();" value="Load CDM"> | |
| </form> | |
| <pre id="output"></pre> | |
| </body> | |
| </html> |