Navigator: requestMediaKeySystemAccess() 方法
requestMediaKeySystemAccess()
方法是 Navigator
接口的一部分,它返回一个 Promise
,该 MediaKeySystemAccess
对象可用于访问特定的媒体密钥系统,而该系统又可用于创建用于解密媒体流的密钥。
此方法是 加密媒体扩展 API 的一部分,该 API 为 Web 带来了对加密媒体和 DRM 保护视频的支持。
此方法可能对用户可见,例如,请求访问一个或多个系统资源。在决定何时调用 requestMediaKeySystemAccess()
时,请考虑这一点;您不希望这些请求在不方便的时间发生。一般来说,此函数应仅在您即将通过调用返回的 MediaKeySystemAccess
对象的 createMediaKeys()
方法创建和使用 MediaKeys
对象时调用。
语法
requestMediaKeySystemAccess(keySystem, supportedConfigurations)
参数
keySystem
-
标识密钥系统的字符串。例如
com.example.somesystem
或org.w3.clearkey
。 supportedConfigurations
-
一个非空
Array
,其元素符合由MediaKeySystemAccess.getConfiguration
返回的对象。将使用第一个具有可满足配置的元素。每个对象可能具有以下属性
注意:
videoCapabilities
或audioCapabilities
可能是空的,但不能两者都为空!label
可选-
配置的可选标签,默认值为
""
。此标签保留用于使用MediaKeySystemAccess.getConfiguration
获取的配置。 initDataTypes
-
一个字符串数组,指示支持的初始化数据格式的数据类型名称(默认为空数组)。这些名称是名称,例如
"cenc"
、"keyids"
和"webm"
,它们在 加密媒体扩展初始化数据格式注册表 中定义。 audioCapabilities
-
支持的音频功能数组。如果数组为空,则内容类型不支持音频功能。
数组中的每个对象都具有以下属性
contentType
-
一个字符串,指示媒体资源的媒体 MIME 类型,例如
"audio/mp4;codecs=\"mp4a.40.2\"
。请注意,空字符串无效,并且如果 MIME 类型定义包括参数(例如codecs
),则这些参数也必须包含在内。 encryptionScheme
-
与内容类型关联的加密方案,例如
cenc
、cbcs
、cbcs-1-9
。此值应由应用程序设置(默认值为null
,表示可以使用任何加密方案)。 鲁棒性
-
与内容类型关联的鲁棒性级别。空字符串表示任何解密和解码内容类型的能力都是可以接受的。
videoCapabilities
-
支持的视频功能数组。数组中的对象与
audioCapabilities
中的对象形式相同。 distinctiveIdentifier
-
一个字符串,指示实现是否可以使用“独特标识符”(或独特永久标识符)来执行与从此配置创建的任何对象关联的任何操作。允许的值为
required
-
返回的对象必须支持此功能。
optional
-
返回的对象可以支持此功能。这是默认值
not-allowed
-
返回的对象不得支持或使用此功能。
persistentState
-
一个字符串,指示返回的对象是否必须能够持久化会话数据或任何其他类型的状态。这些值与
distinctiveIdentifier
相同,并且具有相同的含义:required
、optional
(默认值)、not-allowed
。当不允许持久化状态时,只能创建“临时”会话。 sessionTypes
-
一个字符串数组,指示必须支持的会话类型。允许的值包括
temporary
-
一个会话,其中许可证、密钥和与会话相关的记录或数据不会被持久化。应用程序不需要管理这种存储。实现必须支持此选项,并且它是默认值。
persistent-license
-
一个会话,其中许可证(以及可能与会话相关的其他数据)将被持久化。即使许可证被销毁,许可证和相关密钥的记录也会被持久化,从而证明许可证及其包含的密钥不再可被客户端使用。
返回值
一个 Promise
,它会以一个 MediaKeySystemAccess
对象来实现,该对象表示由 keySystem
和 supportedConfigurations
描述的媒体密钥系统配置。
异常
如果发生错误,则返回的 Promise
将被一个 DOMException
拒绝,该异常的名称指示发生了哪种错误。
NotSupportedError
DOMException
-
指定的
keySystem
不受平台或浏览器的支持,或者supportedConfigurations
指定的配置均无法满足(例如,contentType
中指定的codecs
都不可用)。 SecurityError
DOMException
-
此功能的使用被
Permissions-Policy: encrypted-media
阻止。 TypeError
-
keySystem
是一个空字符串,或者supportedConfigurations
数组为空。
示例
以下示例展示了如何使用 requestMediaKeySystemAccess()
,指定密钥系统和配置。
const 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((keySystemAccess) => {
/* use the access to get create keys */
});
规范
规范 |
---|
加密媒体扩展 # navigator-extension-requestmediakeysystemaccess |
浏览器兼容性
BCD 表格仅在浏览器中加载