Chrome 69 的媒體更新功能

François Beaufort
François Beaufort

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 規格

PTS/DTS
PTS/DTS

這項變更會影響 MediaSource.duration (進而影響 HTMLMediaElement.duration)、SourceBuffer.buffered (進而影響 HTMLMediaElement.buffered)SourceBuffer.remove(start, end))。

如果不確定用來回報緩衝範圍和持續時間值的方法,可以前往 chrome://media-internals 內部頁面,在記錄中搜尋「ChunkDemuxer: buffering by PTS」或「ChunkDemuxer:在 DTS 進行緩衝」。

實作意圖 | Chromium 錯誤

在 Android Go 上處理媒體檢視意圖

Android Go 是一款輕量級 Android 版本,專為入門級智慧型手機而設計。有鑑於此,應用程式並不一定隨附於某些媒體檢視應用程式,因此如果使用者嘗試開啟下載的影片,就不會有任何應用程式可以處理該意圖。

為修正此問題,Android Go 上的 Chrome 69 現在會監聽媒體檢視意圖,以便使用者查看已下載的音訊、影片和圖片。換句話說,系統會取代缺少的檢視應用程式。

ALT_TEXT_HERE
媒體意圖處理常式

請注意,所有搭載 Android O 以上版本且 RAM 小於 1 GB 的 Android 裝置,都會啟用這項 Chrome 功能。

Chromium 錯誤

移除使用 MSE 的媒體元素「停滯」事件

如果下載媒體資料的作業無法繼續進行約 3 秒,媒體元素上就會引發「停滯」事件。使用 Media Source Extensions (MSE) 時,網頁應用程式會管理下載作業,而媒體元素則無法得知下載進度。因此,只要網站在過去 3 秒內沒有附加含有 SourceBuffer.appendBuffer() 的新媒體資料區塊,Chrome 就會在不適當的時間引發「停滯」事件。

網站可能會決定以低頻率附加大量資料,因此這不是關於緩衝健康狀態的實用信號。移除使用 MSE 的媒體元素「停滯」事件,可以消除混淆,讓 Chrome 更符合 MSE 規格。請注意,沒有使用 MSE 的媒體元素將照常出現「停滯」事件。

預計淘汰和移除的意圖 | Chromestatus Tracker | Chromium 錯誤