Navigator.requestMediaKeySystemAccess()
The Navigator.requestMediaKeySystemAccess() method returns a Promise which delivers a MediaKeySystemAccess object that can be used to access a particular media key system, which can in turn be used to create keys for decrypting a media stream. This method is part of the Encrypted Media Extensions API, which brings support for encrypted media and DRM-protected video to the web.
This method may have user-visible effects such as asking for permission to access one or more system resources. Consider that when deciding when to call requestMediaKeySystemAccess``(); you don't want those requests to happen at inconvenient times. As a general rule, this function should be called only when it's about time to create and use a MediaKeys object by calling the returned MediaKeySystemAccess object's createMediaKeys() method.
Syntax
promise = navigator.requestMediaKeySystemAccess(keySystem, supportedConfigurations);
Parameters
keySystem-
A
DOMStringidentifying the key system. For examplecom.example.somesystemororg.w3.clearkey. supportedConfigurations-
A non-empty
Arrayof objects conforming to the object returned byMediaKeySystemAccess.getConfiguration. The first element with a satisfiable configuration will be used.
Return value
A Promise that, when resolved, delivers a MediaKeySystemAccess object to your fulfillment handler function. The fulfillment handler receives as input just one parameter:
mediaKeySystemAccess-
A
MediaKeySystemAccessobject representing the media key system configuration described bykeySystemandsupportedConfigurations
Exceptions
In case of an error, the returned Promise is rejected with a DOMException whose name indicates what kind of error occurred.
NotSupportedError-
Either the specified
keySystemisn't supported by the platform or the browser, or none of the configurations specified bysupportedConfigurationscan be satisfied (if, for example, none of thecodecsspecified incontentTypeare available). TypeError-
Either
keySystemis an empty string or thesupportedConfigurationsarray is empty.
Specifications
Browser compatibility
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Internet Explorer | Opera | Safari | WebView Android | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | |
requestMediaKeySystemAccess |
42
["The spec requires that the passed
supportedConfigurations option contain at least one of audioCapabilities or videoCapabilities, and that said parameters include a codec string.", "The function does not exist in insecure contexts. This was not enforced until Chrome 58."] |
13 |
38
["Starting in Firefox 55, if neither
audioCapabilities nor videoCapabilities is specified in supportedConfigurations, a warning is output to the web console.", "In addition, starting in Firefox 55, if in supportedConfigurations, either audioCapabilities's or videoCapabilities's contentType value doesn't specify a \"codecs\" substring to define allowed codecs within the media wrapper, a warning is output to the web console. See note below table for example and correction.", "In the future, if neither audioCapabilities nor videoCapabilities is specified in the supportedConfigurations, a NotSupported exception will be thrown."] |
No |
29
["The spec requires that the passed
supportedConfigurations option contain at least one of audioCapabilities or videoCapabilities, and that said parameters include a codec string.", "The function does not exist in insecure contexts. This was not enforced until Opera 45."] |
13.1 |
43
["The spec requires that the passed
supportedConfigurations option contain at least one of audioCapabilities or videoCapabilities, and that said parameters include a codec string.", "The function does not exist in insecure contexts. This was not enforced until version 58."] |
42
["The spec requires that the passed
supportedConfigurations option contain at least one of audioCapabilities or videoCapabilities, and that said parameters include a codec string.", "The function does not exist in insecure contexts. This was not enforced until Chrome 58."] |
38
["Starting in Firefox 55, if neither
audioCapabilities nor videoCapabilities is specified in supportedConfigurations, a warning is output to the web console.", "In addition, starting in Firefox 55, if in supportedConfigurations, either audioCapabilities's or videoCapabilities's contentType value doesn't specify a \"codecs\" substring to define allowed codecs within the media wrapper, a warning is output to the web console. See note below table for example and correction.", "In the future, if neither audioCapabilities nor videoCapabilities is specified in the supportedConfigurations, a NotSupported exception will be thrown."] |
29
["The spec requires that the passed
supportedConfigurations option contain at least one of audioCapabilities or videoCapabilities, and that said parameters include a codec string.", "The function does not exist in insecure contexts. This was not enforced until Opera 45."] |
13.4 |
4.0
["The spec requires that the passed
supportedConfigurations option contain at least one of audioCapabilities or videoCapabilities, and that said parameters include a codec string.", "The function does not exist in insecure contexts. This was not enforced until Samsung Internet 7.0."] |
Firefox compatibility notes
Firefox 55 outputs a warning to the console if a candidate MediaKeySystemConfiguration included in supportedConfigurations includes an audioCapabilities or videoCapabilities object whose value of contentType doesn't specify a "codecs" substring defining which codecs within the media wrapper format should be allowed.
For example:
let clearKeyOptions = [ { initDataTypes: ['keyids', 'webm'], audioCapabilities: [ { contentType: 'audio/webm' } ], videoCapabilities: [ { contentType: 'video/webm' } ] } ]; navigator.requestMediaKeySystemAccess('org.w3.clearkey', clearKeyOptions) .then(function(keySystemAccess) { /* use the access to get create keys */ });
The code above works in Firefox up to version 55, but version 55 onwards will output a warning to console, because "codecs" is not included in the contentType strings. This could be corrected as follows:
let clearKeyOptions = [ { initDataTypes: ['keyids', 'webm'], audioCapabilities: [ { contentType: 'audio/webm; codecs="opus"' }, { contentType: 'audio/webm; codecs="vorbis"' } ], videoCapabilities: [ { contentType: 'video/webm; codecs="vp9"' }, { contentType: 'video/webm; codecs="vp8"' } ] } ]; navigator.requestMediaKeySystemAccess('org.w3.clearkey', clearKeyOptions) .then(function(keySystemAccess) { /* use the access to get create keys */ });
In this revised example, the audio and video capabilities include possible codecs which should be permitted, and therefore are valid requests.
See also
© 2005–2021 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/Navigator/requestMediaKeySystemAccess