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);
一旦浏览器实现了 MediaStream 构造函数(预定用于Firefox 44)。