2016-10-14 17:56:41 +02:00
< html >
< head >
< title > DRM Test< / title >
< script language = "JavaScript" >
2017-11-09 20:00:47 +01:00
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();
}
2016-10-14 17:56:41 +02:00
// 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;
2017-11-09 20:00:47 +01:00
// Results in a call to the OnQuery method in drm_test.cc
2016-10-14 17:56:41 +02:00
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 >
2017-11-09 20:00:47 +01:00
< body bgcolor = "white" onload = "setup()" >
2016-10-14 17:56:41 +02:00
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 >
2017-11-09 20:00:47 +01:00
< form id = "form" >
2016-10-14 17:56:41 +02:00
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 >