3

WebRTC には MediaStream および MediaStreamTrack インターフェイスがあります。

MediaStreamTrack は、メディア ソースのオーディオまたはビデオ ストリームを表します。したがって、ビデオやオーディオ タグなどのコンシューマーは、単純に MediaStreamTrack オブジェクトを取得し、そこからストリームを取得できます。では、MediaStream インターフェイスの必要性は何でしょうか?

公式ドキュメントによると、MediaStream は 1 つ以上のトラックを同期します。これは、トラックからの複数のストリームを結合して単一のストリームを生成し、音声付きのビデオ データを作成するということですか?

例: ビデオ タグは MediaStream オブジェクトからストリームを読み取りますか、それとも個々のトラックからストリームを読み取りますか?

この概念はどこにも明確に説明されていません。

前もって感謝します。

4

1 に答える 1

2

MediaStreamは、ビデオとオーディオを一緒に表すトラックの単純なコンテナーに進化しました (非常によくあることです)。

それは何かを「結合」するのではなく、互いに時間同期して再生する必要がある断片をまとめておくのに便利なだけです。唇が話し言葉と同期しなくなるのが好きな人はいません。

技術的にはそれほど必要ではありませんが、次のような API で役立つセマンティックです。

  • カメラとマイクを使用してハードウェアから出力を取得する (通常はビデオとオーディオ)。
  • それ(出力)をhtmlvideoタグ(ビデオオーディオを受け入れる)のようなsincに接続します。
  • 一緒に属している RTCPeerConnection の遠端でオーディオとビデオを再構成します。これは、一般的に互いに同期して再生する必要があるという意味です (ブラウザは、このようにして遠端での期待についてより多くの情報を持っています。たとえば、1 つのトラックからのパケットが失われましたが、他のものではありません)。

これが有用な抽象化であるかどうかは、関心のある詳細のレベルに依存する場合があります。たとえば、まだワーキング ドラフト段階にある RTCPeerConnection API は、昨年、入力および出力としてのストリームから離れ、直接処理するようになりました。ワーキンググループは、送信に関しては詳細がより重要であると考えているためです(帯域幅の使用状況の追跡など)。

いずれにせよ、一方から他方への移動は簡単です。

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

ブラウザーが MediaStream コンストラクターを実装すると ( Firefox 44に予定されています)。

于 2015-10-10T15:13:23.553 に答える