Navigator: requestMediaKeySystemAccess() 方法

Baseline 已廣泛支援

此功能已成熟,並可在多種裝置和瀏覽器版本上執行。自 2019 年 3 月以來,它已在所有瀏覽器中可用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

requestMediaKeySystemAccess() 方法屬於 Navigator 介面,它返回一個 Promise,該 Promise 會解析出一個 MediaKeySystemAccess 物件。這個物件可以用來訪問特定的媒體金鑰系統,進而用於建立用於解密媒體流的金鑰。

此方法是 Encrypted Media Extensions API 的一部分,該 API 為 Web 帶來了對加密媒體和 DRM 保護影片的支援。

此方法可能會產生使用者可見的影響,例如請求訪問一個或多個系統資源的許可權。在決定何時呼叫 requestMediaKeySystemAccess() 時,請考慮這一點;你不希望這些請求發生在不方便的時候。通常來說,此函式應僅在準備透過呼叫返回的 MediaKeySystemAccess 物件的 createMediaKeys() 方法來建立和使用 MediaKeys 物件時呼叫。

語法

js
requestMediaKeySystemAccess(keySystem, supportedConfigurations)

引數

keySystem

一個標識金鑰系統的字串。例如 com.example.some-systemorg.w3.clearkey

supportedConfigurations

一個非空的 Array,其中包含符合 MediaKeySystemAccess.getConfiguration 返回的物件的物件。第一個具有可滿足配置的物件將被使用。

每個物件可能包含以下屬性

注意: videoCapabilitiesaudioCapabilities 可能為空,但不能同時為空!

label 可選

配置的可選標籤,預設為 ""。透過 MediaKeySystemAccess.getConfiguration 獲取的配置會保留此標籤。

initDataTypes

一個字串陣列,指示支援的初始化資料格式的資料型別名稱(預設為空陣列)。這些名稱如 "cenc""keyids""webm",它們在 Encrypted Media Extensions Initialization Data Format Registry 中定義。

audioCapabilities

一個支援的音訊功能陣列。如果陣列為空,則內容型別不支援音訊功能。

陣列中的每個物件都具有以下屬性

contentType

一個字串,指示媒體資源的 MIME 型別,例如 "audio/mp4;codecs=\"mp4a.40.2\"。請注意,空字串是無效的,如果 MIME 型別定義包含引數,例如 codecs,也必須包含這些引數。

encryptionScheme

與內容型別相關的加密方案,例如 cenccbcscbcs-1-9。此值應由應用程式設定(預設為 null,表示可以使用任何加密方案)。

robustness

與內容型別相關的健壯性級別。空字串表示可以接受任何解密和解碼內容型別的能力。

videoCapabilities

一個支援的影片功能陣列。陣列中的物件與 audioCapabilities 中的物件具有相同的形式。

distinctiveIdentifier

一個字串,指示實現是否可能將“獨特識別符號”(或獨特的永久識別符號)用於與從此配置建立的任何物件相關的任何操作。允許的值為:

required

返回的物件必須支援此功能。

可選

返回的物件可以支援此功能。這是預設值。

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

瀏覽器相容性

另見