navigator.requestMediaKeySystemAccess() is the Encrypted Media Extensions (EME) entry point for DRM / Clear Key playback. Learn key systems, configuration arrays, MediaKeySystemAccess, five examples, and try-it labs on HTTPS.
01
Kind
Method
02
Returns
Promise<MediaKeySystemAccess>
03
Status
Baseline Widely available
04
Context
Secure (HTTPS)
05
API family
Encrypted Media Extensions
06
Next step
createMediaKeys()
Fundamentals
Introduction
Streaming sites often protect video with encryption. Browsers expose the Encrypted Media Extensions (EME) API so a page can ask for a media key system, create keys, and decrypt playback in a <video> element.
requestMediaKeySystemAccess(keySystem, supportedConfigurations) is usually the first call: “Can this browser satisfy one of these configs for this key system?”
💡
No Dep / Exp / Non-standard banner
MDN marks Baseline Widely available (since March 2019). It is not Deprecated, Experimental, or Non-standard. It does require a secure context.
Concept
Understanding the requestMediaKeySystemAccess() Method
Two arguments — keySystem string and a non-empty supportedConfigurations array.
Promise result — fulfills with MediaKeySystemAccess.
First match wins — the first satisfiable configuration object is used.
Capabilities — list audio and/or video contentType MIME strings (not both empty).
Timing — call near when you will create / use MediaKeys.
Permissions Policy — may be blocked by encrypted-media policy (SecurityError).
Four facts to remember about navigator.requestMediaKeySystemAccess().
Returns
Promise
MediaKeySystemAccess
Status
Baseline
Widely available
Context
HTTPS
Secure required
API
EME
Encrypted media
Compare
📋 Clear Key vs Commercial DRM
Clear Key (org.w3.clearkey)
Commercial DRM
Purpose
Learning / simple encrypted demos
Production streaming protection
License server
Often app-managed keys
Vendor license service
Beginner demos
Ideal starting point
Needs extra accounts / SDKs
Same entry API
requestMediaKeySystemAccess
Same method, different keySystem
Hands-On
Examples Gallery
Examples stay beginner-friendly: detect EME, request Clear Key access, inspect the chosen configuration, and create MediaKeys. Full DRM playback still needs encrypted media + licenses beyond this page.
📚 Getting Started
Detect EME support and request Clear Key access.
Example 1 — Feature Detection
Confirm the method and secure context before requesting access.
navigator.requestMediaKeySystemAccess() is Baseline Widely available (MDN: since March 2019) as part of Encrypted Media Extensions. It requires a secure context. Actual DRM system ids (Widevine, PlayReady, FairPlay) still vary by browser and platform — always feature-detect and catch NotSupportedError.
✓ Baseline · Widely available
Navigator.requestMediaKeySystemAccess()
Promise → MediaKeySystemAccess for EME / DRM encrypted media.
UniversalWidely available
Google ChromeEME Baseline · Widevine common
Full support
Mozilla FirefoxEME Baseline · system-dependent DRM
Full support
Microsoft EdgeEME Baseline · Chromium / PlayReady paths
Full support
Apple SafariEME Baseline · FairPlay typical
Full support
OperaEME Baseline · Chromium-based
Full support
Internet ExplorerLegacy EME differs — prefer modern browsers
Legacy
requestMediaKeySystemAccess()Excellent
Bottom line: Detect the method on HTTPS, request a supported key system with non-empty configs, then createMediaKeys() and handle license flow or fall back.
Wrap Up
Conclusion
navigator.requestMediaKeySystemAccess() is the Baseline gateway into Encrypted Media Extensions. Start with Clear Key for learning, pass non-empty capability configs on HTTPS, then create MediaKeys when you are ready to decrypt playback.
Five things to remember about requestMediaKeySystemAccess()
Baseline EME entry point — request a key system, then create MediaKeys.
5
Core concepts
🔒01
Returns
MediaKeySystemAccess
Promise
✅02
Status
Baseline
Widely available
🎬03
Family
EME / DRM
Encrypted media
🛠04
Needs
configs + HTTPS
Non-empty
🔑05
Next
createMediaKeys()
Playback
❓ Frequently Asked Questions
It asks the browser for access to a media key system (DRM / Clear Key). If a matching configuration is supported, the Promise resolves to a MediaKeySystemAccess object you can use to create MediaKeys for decrypting encrypted media.
No. MDN marks it Baseline Widely available (since March 2019). It is not Deprecated, Experimental, or Non-standard — no status banner is required. It does require a secure context (HTTPS / localhost).
Clear Key is a simple key system defined for EME testing and non-proprietary encrypted media. Real streaming services often use commercial systems such as Widevine, PlayReady, or FairPlay (browser-dependent).
Near the time you will create and use MediaKeys — not randomly on page load. The call may trigger user-visible permission or resource prompts.
The Promise rejects with NotSupportedError when the key system is missing or none of the supportedConfigurations can be satisfied (for example unsupported codecs).
Either audioCapabilities or videoCapabilities may be empty, but not both. Each capability needs a valid contentType MIME string (include codecs parameters when required).
Did you know?
Clear Key (org.w3.clearkey) is part of the EME ecosystem so developers can practice encrypted playback without a commercial DRM vendor. Production apps still choose a platform-supported commercial system when required.