- Chrome 支援 AV1 影片解碼。
- 現在已可使用 EME 查詢支援的加密配置。
- 網頁程式開發人員可以嘗試查詢特定 HDCP 政策是否可強制執行。
- 媒體來源擴充功能現在使用PTS 做為緩衝範圍和持續時間值。
- Android Go 使用者可以在 Chrome 中開啟已下載的音訊、影片和圖片。
- 系統會針對使用 MSE 的媒體元素移除停滯事件。
AV1 影片解碼器
Chromestatus Tracker | Chromium 錯誤
EME:查詢加密配置支援
部分平台或金鑰系統僅支援 CENC 模式,某些平台或金鑰系統則僅支援 CBCS 模式。其他人仍可同時支援這兩項工具。這兩種加密配置並不相容,因此網頁程式開發人員必須能夠對要提供的內容做出明智選擇。
為了避免決定要檢查「已知」加密配置支援的平台,我們在 MediaKeySystemMediaCapability
字典中新增 encryptionScheme
金鑰,讓網站指定加密媒體擴充功能 (EME) 可使用哪種加密配置。
新的 encryptionScheme
鍵可為下列其中一個值:
'cenc'
AES-CTR 模式的完整樣本和影片 NAL 向下取樣加密。'cbcs'
AES-CBC 模式的部分影片 NAL 模式加密。
如未指定,則表示接受所有加密配置。請注意,Clear Key 一律會支援 'cenc'
配置。
以下範例說明如何查詢使用不同加密配置的兩種設定。在這種情況下,系統只會選擇其中一項。
await navigator.requestMediaKeySystemAccess('org.w3.clearkey', [
{
label: 'configuration using the "cenc" encryption scheme',
videoCapabilities: [{
contentType: 'video/mp4; codecs="avc1.640028"',
encryptionScheme: 'cenc'
}],
audioCapabilities: [{
contentType: 'audio/mp4; codecs="mp4a.40.2"',
encryptionScheme: 'cenc'
}],
initDataTypes: ['keyids']
},
{
label: 'configuration using the "cbcs" encryption scheme',
videoCapabilities: [{
contentType: 'video/mp4; codecs="avc1.640028"',
encryptionScheme: 'cbcs'
}],
audioCapabilities: [{
contentType: 'audio/mp4; codecs="mp4a.40.2"',
encryptionScheme: 'cbcs'
}],
initDataTypes: ['keyids']
},
]);
在以下範例中,系統只會查詢一個具有兩個不同加密配置的設定。在這種情況下,Chrome 會捨棄所有無法支援的功能物件,因此累積的設定可能包含一種加密配置,或同時包含這兩種加密配置。
await navigator.requestMediaKeySystemAccess('org.w3.clearkey', [{
videoCapabilities: [
{ // A video capability using the "cenc" encryption scheme
contentType: 'video/mp4; codecs="avc1.640028"',
encryptionScheme: 'cenc'
},
{ // A video capability using the "cbcs" encryption scheme
contentType: 'video/mp4; codecs="avc1.640028"',
encryptionScheme: 'cbcs'
},
],
audioCapabilities: [
{ // An audio capability using the "cenc" encryption scheme
contentType: 'audio/mp4; codecs="mp4a.40.2"',
encryptionScheme: 'cenc'
},
{ // An audio capability using the "cbcs" encryption scheme
contentType: 'audio/mp4; codecs="mp4a.40.2"',
encryptionScheme: 'cbcs'
},
],
initDataTypes: ['keyids']
}]);
實作意圖 | Chromestatus Tracker | Chromium 錯誤
EME:HDCP 政策檢查
如今 HDCP 是串流播放高解析度受保護內容的常見政策要求。而想要強制執行 HDCP 政策的網路開發人員也必須等待授權交換完成,或是以低解析度開始串流內容。因此 HDCP Policy Check API 的目標是解決這項問題。
這個建議的 API 可讓網頁開發人員查詢特定 HDCP 政策是否可強制執行,以便以最佳解析度開始播放影片,並帶來最佳使用者體驗。這個元件包含一個簡易的方法,可用來查詢與 HDCP 政策相關聯的假設金鑰狀態,而不必建立 MediaKeySession
或擷取實際授權。您不需要將 MediaKeys
附加至任何音訊或影片元素。
HDCP Policy Check API 只須透過具備 minHdcpVersion
金鑰和有效值的物件呼叫 mediaKeys.getStatusForPolicy()
,如果指定版本可提供 HDCP,傳回的承諾會以 'usable'
的 MediaKeyStatus
解析。否則,承諾會以 MediaKeyStatus
的其他錯誤值來解決,例如 'output-restricted'
或 'output-downscaled'
。如果金鑰系統完全不支援 HDCP 政策檢查 (例如清除金鑰系統),則承諾會拒絕。
簡單來說,以下是 API 目前的運作方式。請參閱官方範例,試用所有 HDCP 版本。
const config = [{
videoCapabilities: [{
contentType: 'video/webm; codecs="vp09.00.10.08"',
robustness: 'SW_SECURE_DECODE' // Widevine L3
}]
}];
navigator.requestMediaKeySystemAccess('com.widevine.alpha', config)
.then(mediaKeySystemAccess => mediaKeySystemAccess.createMediaKeys())
.then(mediaKeys => {
// Get status for HDCP 2.2
return mediaKeys.getStatusForPolicy({ minHdcpVersion: '2.2' })
.then(status => {
if (status !== 'usable')
return Promise.reject(status);
console.log('HDCP 2.2 can be enforced.');
// TODO: Fetch high resolution protected content...
});
})
.catch(error => {
// TODO: Fallback to fetch license or stream low-resolution content...
});
適用於來源試用
為了獲得網頁開發人員的意見回饋,我們先前在 Chrome 69 電腦版 (ChromeOS、Linux、Mac 和 Windows) 中新增了 HDCP Policy Check API 功能。
試用期已成功於 2018 年 11 月結束。
實驗意圖 | Chromestatus Tracker | Chromium 錯誤
MSE PTS/DTS 法規遵循
緩衝區範圍和時間長度值現在會以簡報時間戳記 (PTS) 間隔來回報,而不是以媒體來源擴充功能 (MSE) 中的解碼時戳 (DTS) 間隔來回報。
MSE 剛推出時,會針對 WebM 和 MP3 測試 Chrome 的實作方式,也就是部分媒體串流格式,在 PTS 和 DTS 之間無法區分。而且在加入 ISO BMFF (亦稱為 MP4) 之前並沒有問題。這個容器經常包含失序的呈現與解碼時間串流 (例如 H.264 等轉碼器),導致 DTS 和 PTS 出現差異。導致 Chrome 回報的緩衝範圍和時間長度值與預期不同,通常只是略有不同。這項新行為將在 Chrome 69 版中逐步推出,並讓其 MSE 實作符合 MSE 規格。
這項變更會影響 MediaSource.duration
(進而影響 HTMLMediaElement.duration
)、SourceBuffer.buffered
(進而影響 HTMLMediaElement.buffered)
和 SourceBuffer.remove(start, end)
)。
如果不確定用來回報緩衝範圍和持續時間值的方法,可以前往 chrome://media-internals
內部頁面,在記錄中搜尋「ChunkDemuxer: buffering by PTS」或「ChunkDemuxer:在 DTS 進行緩衝」。
在 Android Go 上處理媒體檢視意圖
Android Go 是一款輕量級 Android 版本,專為入門級智慧型手機而設計。有鑑於此,應用程式並不一定隨附於某些媒體檢視應用程式,因此如果使用者嘗試開啟下載的影片,就不會有任何應用程式可以處理該意圖。
為修正此問題,Android Go 上的 Chrome 69 現在會監聽媒體檢視意圖,以便使用者查看已下載的音訊、影片和圖片。換句話說,系統會取代缺少的檢視應用程式。
請注意,所有搭載 Android O 以上版本且 RAM 小於 1 GB 的 Android 裝置,都會啟用這項 Chrome 功能。
移除使用 MSE 的媒體元素「停滯」事件
如果下載媒體資料的作業無法繼續進行約 3 秒,媒體元素上就會引發「停滯」事件。使用 Media Source Extensions (MSE) 時,網頁應用程式會管理下載作業,而媒體元素則無法得知下載進度。因此,只要網站在過去 3 秒內沒有附加含有 SourceBuffer.appendBuffer()
的新媒體資料區塊,Chrome 就會在不適當的時間引發「停滯」事件。
網站可能會決定以低頻率附加大量資料,因此這不是關於緩衝健康狀態的實用信號。移除使用 MSE 的媒體元素「停滯」事件,可以消除混淆,讓 Chrome 更符合 MSE 規格。請注意,沒有使用 MSE 的媒體元素將照常出現「停滯」事件。