WebRTC:通道、曲目和流与 RTP SSRC 和 RTP 会话之间的关系
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
"A MediaStream consists of zero or more MediaStreamTrack objects, representing various audio or video tracks. Each MediaStreamTrack may have one or more channels. The channel represents the smallest unit of a media stream, such as an audio signal associated with a given speaker, like left or right in a stereo audio track."
这阐明了什么是频道。
几个最近的 RFC(例如 8108)提到需要在一个 RTP 会话中发送多个流。每个流在 RTP 级别都有自己的 SSRC。
在统一计划的 RFC 中,参考始终是最低级别的流(不是轨道或频道)。在 RFC 3550 中,基本 RTP RFC,没有对通道的引用。
这些 RFC 中提到的 RTP 流是否表明流是媒体的最低来源,与 WebRTC 中使用的通道相同,如上文所述?
曲目 (WebRTC) 的频道和带有 SSRC 的 RTP 流之间是否存在一对一的映射?
例如,一个网络摄像头生成一个媒体流,它可以有一个音频媒体轨道和一个视频媒体轨道,每个轨道使用单独的 SSRC 在 RTP 数据包中传输,从而产生两个 SSRC。那是对的吗?现在如果有一个立体声网络摄像头(或者一些类似的设备,比如说两个麦克风 - 通道?)。这会生成具有三个不同的唯一 SSRC 的三个 RTP 流吗?
ICE候选测试成功后是否建立了一个五元组连接的单一RTP会话?或者在对等点之间的同一组 port-ip-UDP 连接上可以有多个 RTP 会话吗?
任何澄清这一点的文件都将不胜感激。
That clarifies what a channel is.
不完全是。只有 audio 曲目有频道。除非您将 web audio to split up 音频 MediaStreamTrack
用于单个频道,否则该音轨是对等连接的最低级别。 *
这是因为多个音频通道,就像视频的多个帧一样,是有效载荷的一部分,由编解码器编码和解码。实际上,您可以在接收器的 MedaiStreamTrack 上使用网络音频分离器来分离音频通道,前提是它们幸存下来。
*) 还有data channels,但它们不同,与媒体流和曲目无关。
Is the RTP stream ... the same as channels as that term is used in WebRTC, and as referenced above?
没有。粗略地说,你可以说:
RTP 流 == MediaStreamTrack。
但这还不是全部,因为 sender.replaceTrack(withTrack)
。简而言之,您可以在实时通话期间随时将正在发送的曲目替换为不同的曲目,而无需重新协商您的连接。重要的是,在这种情况下,另一方的 receiver.track
不会改变,只有它的输出会改变。这将管道与通过它的内容分开。
所以在发送方,更公平地说:
RTP流==当前输出一个发送者(来自pc.getSenders()
)
...而在接收方,它更简单,而且总是正确地说:
RTP 流 == receiver.track
有道理吗?
MediaStream 怎么样?
在 modern WebRTC 中,MediaStream
是哑容器——您可以使用 stream.addTrack(track)
和 stream.removeTrack(track)
随意添加或删除曲目——另外,RTCPeerConnection
仅处理 tracks。例如:
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?
在 MediaStreamTrack
和 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
没有区别。立体声音轨仍然是单个音轨(和单个 RTP 流)。
Or can there be multiple RTP sessions over the same set of port-ip-UDP connection between peers?
不是同时。但是多个轨道可以共享同一个会话,除非你使用非默认:
new RTCPeerConnection({bundlePolicy: 'max-compat'});
如果您不这样做,或使用 any other mode,则同类曲目可能会捆绑到单个 RTP 会话中。
来自 Mozilla 网站:https://developer.mozilla.org/en-US/docs/Web/API/Media_Streams_API
"A MediaStream consists of zero or more MediaStreamTrack objects, representing various audio or video tracks. Each MediaStreamTrack may have one or more channels. The channel represents the smallest unit of a media stream, such as an audio signal associated with a given speaker, like left or right in a stereo audio track."
这阐明了什么是频道。
几个最近的 RFC(例如 8108)提到需要在一个 RTP 会话中发送多个流。每个流在 RTP 级别都有自己的 SSRC。 在统一计划的 RFC 中,参考始终是最低级别的流(不是轨道或频道)。在 RFC 3550 中,基本 RTP RFC,没有对通道的引用。
这些 RFC 中提到的 RTP 流是否表明流是媒体的最低来源,与 WebRTC 中使用的通道相同,如上文所述? 曲目 (WebRTC) 的频道和带有 SSRC 的 RTP 流之间是否存在一对一的映射?
例如,一个网络摄像头生成一个媒体流,它可以有一个音频媒体轨道和一个视频媒体轨道,每个轨道使用单独的 SSRC 在 RTP 数据包中传输,从而产生两个 SSRC。那是对的吗?现在如果有一个立体声网络摄像头(或者一些类似的设备,比如说两个麦克风 - 通道?)。这会生成具有三个不同的唯一 SSRC 的三个 RTP 流吗?
ICE候选测试成功后是否建立了一个五元组连接的单一RTP会话?或者在对等点之间的同一组 port-ip-UDP 连接上可以有多个 RTP 会话吗?
任何澄清这一点的文件都将不胜感激。
That clarifies what a channel is.
不完全是。只有 audio 曲目有频道。除非您将 web audio to split up 音频 MediaStreamTrack
用于单个频道,否则该音轨是对等连接的最低级别。 *
这是因为多个音频通道,就像视频的多个帧一样,是有效载荷的一部分,由编解码器编码和解码。实际上,您可以在接收器的 MedaiStreamTrack 上使用网络音频分离器来分离音频通道,前提是它们幸存下来。
*) 还有data channels,但它们不同,与媒体流和曲目无关。
Is the RTP stream ... the same as channels as that term is used in WebRTC, and as referenced above?
没有。粗略地说,你可以说:
RTP 流 == MediaStreamTrack。
但这还不是全部,因为 sender.replaceTrack(withTrack)
。简而言之,您可以在实时通话期间随时将正在发送的曲目替换为不同的曲目,而无需重新协商您的连接。重要的是,在这种情况下,另一方的 receiver.track
不会改变,只有它的输出会改变。这将管道与通过它的内容分开。
所以在发送方,更公平地说:
RTP流==当前输出一个发送者(来自pc.getSenders()
)
...而在接收方,它更简单,而且总是正确地说:
RTP 流 == receiver.track
有道理吗?
MediaStream 怎么样?
在 modern WebRTC 中,MediaStream
是哑容器——您可以使用 stream.addTrack(track)
和 stream.removeTrack(track)
随意添加或删除曲目——另外,RTCPeerConnection
仅处理 tracks。例如:
for (const track of stream.getTracks()) {
pc.addTrack(track, stream);
}
Is there a one-to-one mapping between
channels ofa track and RTP stream with a SSRC?
在 MediaStreamTrack
和 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
没有区别。立体声音轨仍然是单个音轨(和单个 RTP 流)。
Or can there be multiple RTP sessions over the same set of port-ip-UDP connection between peers?
不是同时。但是多个轨道可以共享同一个会话,除非你使用非默认:
new RTCPeerConnection({bundlePolicy: 'max-compat'});
如果您不这样做,或使用 any other mode,则同类曲目可能会捆绑到单个 RTP 会话中。