2015-10-09 39 views
2

在WebRTC中,我們有MediaStream和MediaStreamTrack接口。WebRTC中MediaStream接口的需求是什麼?

MediaStreamTrack表示媒體源的音頻或視頻流。所以像視頻或音頻標籤的消費者可以簡單地使用MediaStreamTrack對象並從中獲取流。那麼MediaStream接口需要什麼?

根據官方文檔,MediaStream會同步一個或多個軌道。這是否意味着它結合了來自軌道的多個流並生成單個流,以便我們獲得帶有音頻的視頻數據?

例如:視頻標籤是從MediaStream對象讀取流還是從各個軌道讀取流?

這個概念在任何地方都沒有解釋清楚。

在此先感謝。

回答

1

MediaStream已經轉變爲一個簡單的軌道容器,代表視頻和音頻在一起(一個相當常見的情況)。

它並不「結合」任何東西,它只是一個便利的東西,它們需要在時間上同步播放。沒有人喜歡嘴脣與口語不同步。

它甚至不是真正在技術上需要的,但它是一個有用的語義中的API:

  • 掌握攝像頭和麥克風(通常是視頻和音頻)從硬件輸出,並且
  • 連接它(輸出)到sinc,就像html video標記(它接受視頻音頻)。
  • 在RTCPeerConnection的遠端重組屬於一起的音頻和視頻,這意味着它們通常應該彼此同步播放(瀏覽器有更多關於遠端預期的信息,例如,如果數據包來自一個軌道丟失,但不是另一個)。

這是否是一個有用的抽象可能取決於您感興趣的詳細程度。例如,仍處於工作草案階段的RTCPeerConnection API在過去一年中已從流作爲輸入並輸出到直接處理跟蹤,因爲工作組認爲在傳輸時細節更重要(例如跟蹤帶寬使用等)

無論如何,從一個到另一個將是微不足道的:

var tracks = stream.getTracks(); 
console.log(tracks.map(track => track.kind)); // audio,video 
video.srcObject = new MediaStream(tracks); 

一旦瀏覽器實現了M ediaStream的構造函數(定義爲Firefox 44)。