142 lines
4.7 KiB
HTML
142 lines
4.7 KiB
HTML
<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>
|