MediaKeys:getStatusForPolicy() 方法

安全上下文:此功能仅在安全上下文(HTTPS)中可用,在部分或所有支持的浏览器中。

MediaKeys 接口的 getStatusForPolicy() 方法用于根据指定的策略要求检查内容解密模块 (CDM) 是否允许使用密钥呈现加密媒体数据。

该方法返回一个 Promise,该 Promise 解析为一个字符串,指示密钥相对于所有指定策略要求的状态。如果该值解析为 "usable",则内容可以解密并在理想质量下呈现。其他值指示密钥无法用于呈现内容的原因;在某些情况下,它们暗示了备选方案,例如以较低的质量播放内容。

策略限制目前仅包括对最低支持的 HDCP 版本的限制。

请注意,该方法会根据限制检查“假设密钥”。应用程序不需要首先使用 MediaKeySession 创建真实的密钥并获取真实的许可证,并且 MediaKeys 甚至不需要附加到音频或视频元素。

语法

js
getStatusForPolicy(policy)

参数

policy 可选

具有以下可选属性的对象

minHdcpVersion 可选

一个字符串,指示要检查可用性的最低 HDCP 版本的语义版本,例如 1.01.42.22.3

注意:必须指定至少一个策略限制,因此 minHdcpVersion 仅在“技术上”是可选的。

返回值

一个 Promise,该 Promise 解析为一个字符串,指示给定指定策略密钥是否可用于解密。

该字符串可以具有以下值之一

usable

密钥当前可用于解密。

expired

密钥由于其过期时间已过而不再可用于解密。

released

密钥已被释放,不再可供 CDM 使用。但是,密钥信息可用,例如许可证销毁记录。

output-restricted

根据指定的策略,密钥存在输出限制。使用此密钥解密的媒体数据可能会被阻止呈现。状态指示源和输出(例如,您的计算机和外部显示器)之间的连接不受信任。这可能表示源、中间设备和输出之间存在 HDCP 版本不匹配,或者中间连接设备(如 HDMI 线缆或视频分配器)已损坏或不符合标准。应用程序可以选择使用更高的 HDCP 版本,或者不依赖于如此高版本的内容。您还应检查中间设备和线缆是否支持 HDCP、是否牢固连接且未损坏。

output-downscaled

根据指定的策略,密钥存在输出限制,但是如果以较低的质量播放内容,这些限制可能会放宽。如果返回此值,应用程序可能会以较低的分辨率播放内容,或者可以选择使用更高的 HDCP 版本,或使用其他不需要如此高 HDCP 版本的内容。

usable-in-future

密钥将在未来达到其开始时间后可用于解密。

status-pending

密钥的状态尚不清楚,正在确定中。

internal-error

密钥由于 CDM 中的错误而当前无法用于解密。应用程序无法执行任何操作来处理这种情况。

异常

TypeError

policy 没有定义的属性(策略限制),或属性键无效。

NotSupportedError

CDM 无法确定任何或所有策略限制的状态。

示例

检查密钥是否可以使用 HDCP 限制

此示例检查在使用最低 HDCP 版本 2.2 时密钥是否可用于解密特定视频格式。

注意:当您使用外部显示器时,状态 output-restricted 可能是由硬件 HDCP 不兼容问题引起的。如果使用笔记本电脑,您可以通过断开外部显示器的连接来“解决”此问题。

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 usuable
    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);
  }
}

结果

规范

规范
加密媒体扩展
# dom-mediakeys-getstatusforpolicy

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参阅