MediaStream 淘汰項目

如果您使用 getUserMedia() 或 WebRTC,可能需要為 Chrome 45 以上版本調整程式碼。

MediaStream API 代表同步處理的媒體串流。例如,從攝影機和麥克風輸入擷取的串流會同步處理視訊與音軌。每個音軌都由 MediaStreamTrack 表示。(請不要與 <track> 元素混淆)。

Chrome 45 淘汰了三個 MediaStream

  • MediaStream.ended
  • MediaStream.label
  • MediaStream.stop()

但同時還有兩個新增項目:

  • MediaStream.active
  • MediaStreamTrack.stop()

但需要進行下列變更:

  • 使用 MediaStream.active 檢查 MediaStream 是否正在串流,而非 MediaStream.ended
  • 使用 MediaStreamTrack.stop() (而非 MediaStream.stop()) 停止串流播放。
  • 如果需要 MediaStream 的專屬 ID,請使用 MediaStream.id,不要使用 MediaStream.labelMediaStreamTrack.label 提供使用者可理解的串流來源裝置名稱,例如 FaceTime HD Camera (內建) (05ac:8510)

請查看這些實際運作情形:在有相機的 Chrome 裝置上開啟 simpl.info/gum,並查看 Chrome 開發人員工具主控台。在這個示範中,傳遞給 getUserMedia() 回呼的 MediaStream 物件 stream 位於全域範圍內,因此可以從主控台進行檢查。呼叫 stream.getTracks()[0] 即可查看這個串流的 MediaStreamTrack

顯示 Chrome 開發人員工具控制台中 MediaStream 和 MediaStreamTrack 的螢幕截圖

Stop()、已結束和運作

媒體擷取和串流 W3C 工作小組查看了將新曲目加入 MediaStream 時會發生的問題,以及空白的 MediaStream 是否已經結束,因而發現在 MediaStream 上實作 ended 沒有合理方法 (正如「永遠不會再啟動」)。在 HTML5 的「結束」部分,表示「已結束且永遠無法重新啟用」。「使用中」並不會造成這類影響:閒置的串流可以再次生效,例如加入新音軌時。工作小組決定移除造成混淆的屬性和功能,

以下範例說明如何使用「MediaStream.active」檢查串流狀態:

var gumStream;

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            gumStream = stream;
        // ...
    },
    function(error) {
        console.log('getUserMedia() error', error);
    });

// …

if (gumStream.active) {
    // do something with the stream
}

MediaStream 中移除 stop() 並不會移除任何實際功能:卸離來源裝置的程序,因此必須在 MediaStreamTrack 上完成。在 MediaStreamTrack 上使用 stop()

navigator.getUserMedia({audio: false, video: true},
    function(stream) {
            // can also use getAudioTracks() or getVideoTracks()
        var track = stream.getTracks()[0];  // if only one media track
        // ...
        track.stop();
    },
    function(error){
        console.log('getUserMedia() error', error);
    });

標籤

事實證明,沒有人能找到這個房源的運用方式!

MediaStream.label 已新增至第一個規格版本,但沒人知道 label 的用途。同時,還不清楚在透過 RTCPeerConnection 傳送的串流時,label 會發生什麼情況。

因此,W3C 工作小組已探究,無人希望,因此他們將其移除。

重整:MediaStream.id 會為 MediaStream 提供專屬 ID,而 MediaStreamTrack.label 會提供串流來源的名稱,例如相機或麥克風的類型。

如要進一步瞭解 MediaStreamMediaStreamTrack,請參閱 Mozilla Developer Network 網站;HTML5 Rocks 則是在擷取音訊和影片一文中,提供了 getUserMedia() 的絕佳簡介。

我們誠摯感謝你對 Chrome 的異動提供寶貴意見。您可以在這個頁面這裡瞭解這些淘汰作業的相關錯誤,也可以在「要實作的 Intent」中查看更多討論和詳細資料。