WebRTC: Relationship between Channels, Tracks & Streams vis-a-vis RTP SSRC and RTP Sessions
在Mozilla网站上:https://developer.mozilla.org/en-US/docs/Web/API/Media_Streams_API
" MediaStream由零个或多个MediaStreamTrack对象组成,代表各种音频或视频Rails。每个MediaStreamTrack可以具有一个或多个通道。通道代表媒体流的最小单位,例如与音频流相关联的音频信号。给定的扬声器,例如立体声音频Rails中的左或右。"
这澄清了一个频道。
最近有几个RFC(例如8108)表示需要在一个RTP会话中发送多个流。每个流在RTP级别上都有自己的SSRC。
同样在RFC for Unified Plan中,引用始终始终是最低级别的流(而不是Rails或通道)。在RFC 3550(基本RTP RFC)中,没有对通道的引用。
这些RFC中是否提到了RTP流,这建议该流是最低的媒体源,与WebRTC中使用的术语相同,并且如上所述。
在Rails(WebRTC)和带有SSRC的RTP流之间是否存在一对一映射?
例如,网络摄像头生成媒体流,该媒体流可以具有音频媒体Rails和视频媒体Rails,每个Rails使用单独的SSRC以RTP数据包的形式传输,从而产生两个SSRC。那是对的吗?现在,如果有立体声网络摄像头(或带有这样的设备,比如说两个麦克风-通道),该怎么办?这会生成带有三个不同的唯一SSRC的三个RTP流吗?
在成功测试ICE候选人之后,是否为五元组连接建立了一个RTP会话?还是在同级之间的同一组端口-ip-UDP连接上存在多个RTP会话?
任何澄清这一点的文件将不胜感激。
That clarifies what a channel is.
不完全是。只有音轨才有频道。除非您使用Web音频将音频
这是因为多个音频通道(与视频的多个帧非常相似)是由编解码器进行编码和解码的有效载荷的一部分。实际上,您可以在接收器的MedaiStreamTrack上使用Web音频分配器来分配音频通道,只要它们能幸免。
*)也有数据通道,但是它们是不同的,并且与媒体流和Rails无关。
Is the RTP stream ... the same as channels as that term is used in WebRTC, and as referenced above?
不。粗略地说,您可以说:
RTP流== MediaStreamTrack。
但这不是全部,因为
因此在发送方,更公平地说:
RTP流==当前输出发件人(来自
...而在接收方,它更简单,而且总是这样:
RTP流== receiver.track
有道理吗?
那MediaStream呢?
在现代WebRTC中,
1 2 3 | for (const track of stream.getTracks()) { pc.addTrack(track, stream); } |
Is there a one-to-one mapping between channels of a track and RTP stream with a SSRC?
在
A webcam, [...] can have a audio media track and a video media track, each track is transported in RTP packets using a separate SSRC, resulting in two SSRCs. Is that correct?
在这种情况下是的,因为音频永远不会与视频捆绑在一起,反之亦然。
Now what if there is a stereo webcam
没有区别。立体声音频Rails仍然是单个音频Rails(和单个RTP流)。
Or can there be multiple RTP sessions over the same set of port-ip-UDP connection between peers?
不同时。但是,除非使用非默认值,否则多个Rails可以共享同一会话:
1 | new RTCPeerConnection({bundlePolicy: 'max-compat'}); |
如果您不这样做,或使用任何其他方式,则相同种类的曲目可能会捆绑到单个RTP会话中。