在WebRTC中,我们有MediaStream和MediaStreamTrack接口。
MediaStreamTrack表示媒体源的音频或视频流。因此,像视频或音频标签这样的消费者可以简单地获取MediaStreamTrack对象并从中获取流。那么MediaStream接口需要什么呢?
根据官方文档,MediaStream会同步一个或多个曲目。这是否意味着它结合了来自曲目的多个流,并生成一个流,以便我们有视频数据和音频?
例如:视频标记是从MediaStream对象读取流,还是从单个曲目读取流?
这个概念在任何地方都没有解释清楚。
提前谢谢。
最佳答案
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)。