Navigator: requestMediaKeySystemAccess() 方法

安全上下文:此功能仅在 安全上下文 (HTTPS) 中,以及在 支持的浏览器 中可用。

requestMediaKeySystemAccess() 方法是 Navigator 接口的一部分,它返回一个 Promise,该 MediaKeySystemAccess 对象可用于访问特定的媒体密钥系统,而该系统又可用于创建用于解密媒体流的密钥。

此方法是 加密媒体扩展 API 的一部分,该 API 为 Web 带来了对加密媒体和 DRM 保护视频的支持。

此方法可能对用户可见,例如,请求访问一个或多个系统资源。在决定何时调用 requestMediaKeySystemAccess() 时,请考虑这一点;您不希望这些请求在不方便的时间发生。一般来说,此函数应仅在您即将通过调用返回的 MediaKeySystemAccess 对象的 createMediaKeys() 方法创建和使用 MediaKeys 对象时调用。

语法

js
requestMediaKeySystemAccess(keySystem, supportedConfigurations)

参数

keySystem

标识密钥系统的字符串。例如 com.example.somesystemorg.w3.clearkey

supportedConfigurations

一个非空 Array,其元素符合由 MediaKeySystemAccess.getConfiguration 返回的对象。将使用第一个具有可满足配置的元素。

每个对象可能具有以下属性

注意:videoCapabilitiesaudioCapabilities 可能是空的,但不能两者都为空!

label 可选

配置的可选标签,默认值为 ""。此标签保留用于使用 MediaKeySystemAccess.getConfiguration 获取的配置。

initDataTypes

一个字符串数组,指示支持的初始化数据格式的数据类型名称(默认为空数组)。这些名称是名称,例如 "cenc""keyids""webm",它们在 加密媒体扩展初始化数据格式注册表 中定义。

audioCapabilities

支持的音频功能数组。如果数组为空,则内容类型不支持音频功能。

数组中的每个对象都具有以下属性

contentType

一个字符串,指示媒体资源的媒体 MIME 类型,例如 "audio/mp4;codecs=\"mp4a.40.2\"。请注意,空字符串无效,并且如果 MIME 类型定义包括参数(例如 codecs),则这些参数也必须包含在内。

encryptionScheme

与内容类型关联的加密方案,例如 cenccbcscbcs-1-9。此值应由应用程序设置(默认值为 null,表示可以使用任何加密方案)。

鲁棒性

与内容类型关联的鲁棒性级别。空字符串表示任何解密和解码内容类型的能力都是可以接受的。

videoCapabilities

支持的视频功能数组。数组中的对象与 audioCapabilities 中的对象形式相同。

distinctiveIdentifier

一个字符串,指示实现是否可以使用“独特标识符”(或独特永久标识符)来执行与从此配置创建的任何对象关联的任何操作。允许的值为

required

返回的对象必须支持此功能。

optional

返回的对象可以支持此功能。这是默认值

not-allowed

返回的对象不得支持或使用此功能。

persistentState

一个字符串,指示返回的对象是否必须能够持久化会话数据或任何其他类型的状态。这些值与 distinctiveIdentifier 相同,并且具有相同的含义:requiredoptional(默认值)、not-allowed。当不允许持久化状态时,只能创建“临时”会话。

sessionTypes

一个字符串数组,指示必须支持的会话类型。允许的值包括

temporary

一个会话,其中许可证、密钥和与会话相关的记录或数据不会被持久化。应用程序不需要管理这种存储。实现必须支持此选项,并且它是默认值。

persistent-license

一个会话,其中许可证(以及可能与会话相关的其他数据)将被持久化。即使许可证被销毁,许可证和相关密钥的记录也会被持久化,从而证明许可证及其包含的密钥不再可被客户端使用。

返回值

一个 Promise,它会以一个 MediaKeySystemAccess 对象来实现,该对象表示由 keySystemsupportedConfigurations 描述的媒体密钥系统配置。

异常

如果发生错误,则返回的 Promise 将被一个 DOMException 拒绝,该异常的名称指示发生了哪种错误。

NotSupportedError DOMException

指定的 keySystem 不受平台或浏览器的支持,或者 supportedConfigurations 指定的配置均无法满足(例如,contentType 中指定的 codecs 都不可用)。

SecurityError DOMException

此功能的使用被 Permissions-Policy: encrypted-media 阻止。

TypeError

keySystem 是一个空字符串,或者 supportedConfigurations 数组为空。

示例

以下示例展示了如何使用 requestMediaKeySystemAccess(),指定密钥系统和配置。

js
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 表格仅在浏览器中加载

另请参阅