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

瀏覽器相容性