This feature is well established and works across many devices and browser versions. It’s been available across browsers since March 2019.
* Some parts of this feature may have varying levels of support.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
The MediaKeys interface of Encrypted Media Extensions API represents a set of keys that an associated HTMLMediaElement can use for decryption of media data during playback.
None.
MediaKeys.createSession()Returns a new MediaKeySession object, which represents a context for message exchange with a content decryption module (CDM).
MediaKeys.getStatusForPolicy()Returns a Promise that resolves to a status string indicating whether the CDM would allow the presentation of encrypted media data using the keys, based on specified policy requirements.
MediaKeys.setServerCertificate()Returns a Promise to a server certificate to be used to encrypt messages to the license server.
This example shows how getStatusForPolicy() can be used to check if keys can decrypt a particular video format in a setup that has a minimum HDCP version of 2.2. For more information, see the MediaKeys: getStatusForPolicy() method documentation.
<pre id="log"></pre>
const config = [
{
videoCapabilities: [
{
contentType: 'video/mp4; codecs="avc1.640028"',
encryptionScheme: "cenc",
robustness: "SW_SECURE_DECODE", // Widevine L3
},
],
},
];
getMediaStatus(config);
async function getMediaStatus(config) {
try {
const mediaKeySystemAccess = await navigator.requestMediaKeySystemAccess(
"com.widevine.alpha",
config,
);
const mediaKeys = await mediaKeySystemAccess.createMediaKeys();
const mediaStatus = await mediaKeys.getStatusForPolicy({
minHdcpVersion: "2.2",
});
log(mediaStatus);
// Get the content or fallback to an alternative if the
// keys are not usable
if (mediaStatus === "usable") {
console.log("HDCP 2.2 can be enforced.");
// Fetch the high resolution protected content
} else {
log("HDCP 2.2 cannot be enforced");
// Fallback other content, get license, etc.
}
} catch (error) {
log(error);
}
}
| Specification |
|---|
| Encrypted Media Extensions> # mediakeys-interface> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
MediaKeys |
42 | 13 | 38 | 29 | 12.1 | 42 | 38 | 29 | 12.2 | 4.0 | 43 | 12.2 |
createSession |
42 | 13 | 38 | 29 | 12.1 | 42 | 38 | 29 | 12.2 | 4.0 | 43 | 12.2 |
getStatusForPolicy |
73 | 79 | 128 | 60 | No | 73 | 128 | 52 | No | 11.0 | 73 | No |
setServerCertificate |
42 | 13 | 38 | 29 | 12.1 | 42 | 38 | 29 | 12.2 | 4.0 | 43 | 12.2 |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/MediaKeys