如果您使用 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.label
。MediaStreamTrack.label
提供使用者可理解的串流來源裝置名稱,例如 FaceTime HD Camera (內建) (05ac:8510)。
請查看這些實際運作情形:在有相機的 Chrome 裝置上開啟 simpl.info/gum,並查看 Chrome 開發人員工具主控台。在這個示範中,傳遞給 getUserMedia()
回呼的 MediaStream 物件 stream
位於全域範圍內,因此可以從主控台進行檢查。呼叫 stream.getTracks()[0]
即可查看這個串流的 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
會提供串流來源的名稱,例如相機或麥克風的類型。
如要進一步瞭解 MediaStream
和 MediaStreamTrack
,請參閱 Mozilla Developer Network 網站;HTML5 Rocks 則是在擷取音訊和影片一文中,提供了 getUserMedia()
的絕佳簡介。
我們誠摯感謝你對 Chrome 的異動提供寶貴意見。您可以在這個頁面和這裡瞭解這些淘汰作業的相關錯誤,也可以在「要實作的 Intent」中查看更多討論和詳細資料。