coderef

Encrypted media extensionsBaseline · Widely available

The mediaKeys property of HTMLMediaElement and the navigator.requestMediaKeySystemAccess() method control the playback of content subject to digital rights management. Also known as EME.

Supported in all major browsers for at least 30 months — safe to use without fallbacks. Baseline since Mar 25, 2019. Widely available since Sep 25, 2021.

Browser support

DesktopChrome
1–41Not supported
42+Supportedsince Apr 14, 2015
Current: 155
Edge
12–12Not supported
13+Supportedsince Nov 12, 2015
Current: 154
Firefox
1–37Not supported
38+Supportedsince May 12, 2015
Current: 157
Safari
1–12Not supported
12.1+Supportedsince Mar 25, 2019
Current: 27
MobileChrome Android
18–41Not supported
42+Supportedsince Apr 15, 2015
Current: 155
Firefox Android
4–37Not supported
38+Supportedsince May 12, 2015
Current: 157
Safari iOS
1–12Not supported
12.2+Supportedsince Mar 25, 2019
Current: 27

How to use

This feature is Baseline widely available — use it freely, no fallback needed.

Example

Full syntax and examples are on MDN: encrypted event.

Feature detection

JS · check before using
if ("MediaEncryptedEvent" in globalThis) {
  // MediaEncryptedEvent is available
} else {
  // load a polyfill or use a fallback
}

Sub-features

Support for each part of the feature (45). The overall table above shows when the whole feature works.

Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
HTMLMediaElement.encrypted_event42133812.1423812.2
HTMLMediaElement.mediaKeys42133812.1423812.2
HTMLMediaElement.setMediaKeys42133812.1423812.2
HTMLMediaElement.waitingforkey_event557913312.15513312.2
MediaCapabilities.decodingInfo.configuration_parameter.keySystemConfiguration8080129✕80129✕
MediaEncryptedEvent42133812.1423812.2
MediaEncryptedEvent.MediaEncryptedEvent42133812.1423812.2
MediaEncryptedEvent.initData42133812.1423812.2
MediaEncryptedEvent.initDataType42133812.1423812.2
MediaKeyMessageEvent42133812.1423812.2
MediaKeyMessageEvent.MediaKeyMessageEvent42133812.1423812.2
MediaKeyMessageEvent.message42133812.1423812.2
MediaKeyMessageEvent.messageType42133812.1423812.2
MediaKeySession42133812.1423812.2
MediaKeySession.close42133812.1423812.2
MediaKeySession.closed42133812.1423812.2
MediaKeySession.expiration42133812.1423812.2
MediaKeySession.generateRequest42133812.1423812.2
MediaKeySession.keyStatuses42133812.1423812.2
MediaKeySession.keystatuseschange_event55795212.1555212.2
Show 25 more
Sub-featureChromeEdgeFirefoxSafariChrome AndroidFirefox AndroidSafari iOS
MediaKeySession.load42133812.1423812.2
MediaKeySession.message_event55795212.1555212.2
MediaKeySession.remove42133812.1423812.2
MediaKeySession.sessionId42133812.1423812.2
MediaKeySession.update42133812.1423812.2
MediaKeyStatusMap42133812.1423812.2
MediaKeyStatusMap.@@iterator42164512.1424512.2
MediaKeyStatusMap.entries42163812.1423812.2
MediaKeyStatusMap.forEach42134712.1424712.2
MediaKeyStatusMap.get42134512.1424512.2
MediaKeyStatusMap.has42134512.1424512.2
MediaKeyStatusMap.keys42163812.1423812.2
MediaKeyStatusMap.size42133812.1423812.2
MediaKeyStatusMap.values42163812.1423812.2
MediaKeySystemAccess42133812.1423812.2
MediaKeySystemAccess.createMediaKeys42133812.1423812.2
MediaKeySystemAccess.getConfiguration42134312.1424312.2
MediaKeySystemAccess.keySystem42133812.1423812.2
MediaKeys42133812.1423812.2
MediaKeys.createSession42133812.1423812.2
MediaKeys.getStatusForPolicy7379128✕73128✕
MediaKeys.setServerCertificate42133812.1423812.2
Navigator.requestMediaKeySystemAccess42133812.1423812.2
iframe.allow.encrypted-media647974✕6479✕
http.headers.Permissions-Policy.encrypted-media8888✕✕88✕✕