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,它解析為一個字串,指示在給定策略下金鑰是否可用於解密。

該字串可以具有以下值之一

usable

金鑰目前可用於解密。

expired

由於到期時間已過,金鑰不再可用於解密。

released

金鑰已釋放,不再可供 CDM 使用。但關於金鑰的資訊仍然可用,例如許可證銷燬記錄。

output-restricted

根據指定策略,金鑰存在輸出限制。使用此金鑰解密的資料媒體可能會被阻止呈現。該狀態表明源和輸出之間的連線(例如,您的計算機和外部顯示器)不受信任。這可能表明源、中間裝置和輸出之間存在 HDCP 版本不匹配,或者 HDMI 線纜或影片分配器等中間連線裝置已損壞或不符合標準。應用程式可以選擇使用更高版本的 HDCP,或不要求如此高版本 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 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);
  }
}

結果

規範

規範
加密媒體擴充套件
# dom-mediakeys-getstatusforpolicy

瀏覽器相容性

參見