MediaKeys

Baseline 广泛可用 *

此功能已成熟,并可在多种设备和浏览器版本上运行。自 2019 年 3 月以来,它已在所有浏览器中可用。

* 此特性的某些部分可能存在不同级别的支持。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

MediaKeys 接口属于加密媒体扩展 API(Encrypted Media Extensions API),代表了一组密钥,相关联的 HTMLMediaElement 可以在播放期间使用这些密钥来解密媒体数据。

实例属性

无。

实例方法

MediaKeys.createSession()

返回一个新的 MediaKeySession 对象,它代表了与内容解密模块 (CDM) 进行消息交换的上下文。

MediaKeys.getStatusForPolicy()

返回一个 Promise,该 Promise 解析为一个状态字符串,指示 CDM 是否会根据指定的策略要求允许使用这些密钥播放加密媒体数据。

MediaKeys.setServerCertificate()

返回一个 Promise,其值是一个用于加密发往许可证服务器的消息的服务器证书。

示例

检查密钥是否可用于 HDCP 限制

此示例展示了如何使用 getStatusForPolicy() 来检查密钥是否能够在 HDCP 版本最低要求为 2.2 的设置中解密特定的视频格式。有关更多信息,请参阅 MediaKeys: getStatusForPolicy() 方法文档。

HTML

html
<pre id="log"></pre>

JavaScript

js
const config = [
  {
    videoCapabilities: [
      {
        contentType: 'video/mp4; codecs="avc1.640028"',
        encryptionScheme: "cenc",
        robustness: "SW_SECURE_DECODE", // Widevine L3
      },
    ],
  },
];

getMediaStatus(config);

async function getMediaStatus(config) {
  try {
    const mediaKeySystemAccess = await navigator.requestMediaKeySystemAccess(
      "com.widevine.alpha",
      config,
    );
    const mediaKeys = await mediaKeySystemAccess.createMediaKeys();
    const mediaStatus = await mediaKeys.getStatusForPolicy({
      minHdcpVersion: "2.2",
    });
    log(mediaStatus);

    // Get the content or fallback to an alternative if the
    // keys are not usable
    if (mediaStatus === "usable") {
      console.log("HDCP 2.2 can be enforced.");
      // Fetch the high resolution protected content
    } else {
      log("HDCP 2.2 cannot be enforced");
      // Fallback other content, get license, etc.
    }
  } catch (error) {
    log(error);
  }
}

结果

规范

规范
加密媒体扩展
# mediakeys-interface

浏览器兼容性