MediaKeys:getStatusForPolicy() 方法
MediaKeys 介面的 getStatusForPolicy() 方法用於根據指定的策略要求,檢查內容解密模組 (CDM) 是否會允許使用這些金鑰呈現加密的媒體資料。
該方法返回一個 Promise,該 Promise 會解析為一個字串,指示金鑰相對於所有指定的策略要求的狀態。如果解析值為 "usable",則內容可以以理想的質量進行解密和呈現。其他值表示無法使用金鑰呈現內容的具體原因;在某些情況下,它們會提示回退選項,例如以較低的質量播放內容。
目前,策略限制僅包括對最低支援 HDCP 版本的限制。
請注意,該方法會根據限制檢查一個“假設的金鑰”。應用程式無需先建立真實的金鑰並使用 MediaKeySession 獲取真實的許可證,而且 MediaKeys 甚至不必附加到音訊或影片元素。
語法
getStatusForPolicy(policy)
引數
policy可選-
一個具有以下可選屬性的物件
minHdcpVersion可選-
一個字串,指示用於檢查可用性的最低 HDCP 版本的語義版本,例如
1.0、1.4、2.2、2.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
<pre id="log"></pre>
JavaScript
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 |
瀏覽器相容性
載入中…