3

在 WebRTC 中,我们有 MediaStream 和 MediaStreamTrack 接口。

MediaStreamTrack 表示媒体源的音频或视频流。因此,像视频或音频标签这样的消费者可以简单地获取一个 MediaStreamTrack 对象并从中获取流。那么需要什么MediaStream接口呢?

根据官方文档,MediaStream 同步一个或多个轨道。这是否意味着它结合了来自轨道的多个流并生成单个流,以便我们拥有带音频的视频数据?

例如:视频标签是从 MediaStream 对象读取流还是从各个轨道读取流?

这个概念在任何地方都没有解释清楚。

提前致谢。

4

1 回答 1

2

MediaStream已经演变成一个简单的轨道容器,将视频和音频一起表示(很常见)。

它不会“组合”任何东西,它只是为了方便将需要在时间上相互同步播放的片段保持在一起。没有人喜欢嘴唇与口语不同步。

它在技术上甚至不是真正需要的,但它在 API 中是一个有用的语义,用于:

  • 使用摄像头和麦克风(通常是视频和音频)从硬件获取输出,以及
  • 将它(输出)连接到 sinc,例如 htmlvideo标签(接受视频音频)。
  • 在属于一起的 RTCPeerConnection 的远端重构音频和视频,从某种意义上说,它们通常应该彼此同步播放(浏览器通过这种方式可以获得有关远端期望的更多信息,例如,如果来自一个轨道的数据包是丢失但不是另一个)。

这是否是一个有用的抽象可能取决于您感兴趣的详细程度。例如,仍处于工作草案阶段的 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 回答