RTP RFC(3550)解释问题

3
我正在进行Java实现RFC 3550 (RTP),但是我遇到了一个小问题:
第11章的第2段中,它指出:
"(...)参与者不得假定传入RTP或RTCP数据包的源端口可以用作传出RTP或RTCP数据包的目标端口。当RTP数据包在双向发送时,每个参与者的RTCP SR数据包必须发送到另一个参与者指定接收RTCP的端口。(...)"
RTP没有任何机制来通知这些地址和端口(这取决于SDP或其他设置协议),这使我理解这段话为“如果您从未知来源接收数据,请将其丢弃”。

但是在6.3.3节中,基本上说当接收到未知SSRC的RTP或非BYE RTCP数据包时,应该将新参与者添加到表中。

因此,总结一下:

  1. 当接收到未知的SSRC时,应添加新参与者;
  2. 不能使用数据包的源IP/端口作为该参与者数据包的目标;
  3. SDP不定义每个RTP参与者将使用哪个SSRC;
  4. 可以手动添加RTP参与者(通过其他方式发现),但不知道SSRC会是什么。

所以百万美元的问题是:如何处理意外的SSRC?

2个回答

2
  1. 当收到未知的SSRC时,您应该根据第6.2.1节中的规定进行验证后再添加新参与者。
  2. 不能将数据包的源IP/端口用作该参与者的数据包目的地。这意味着您不能期望端点A的RTP / RTCP对与端点B的对相同(除非已明确指定)。 (RFC第11节没有讨论IP地址。)
  3. SDP不定义每个RTP参与者将使用的SSRC,因为SSRC可以在运行时更改。
  4. 您可以手动添加RTP参与者(通过其他方式发现),但是您不知道SSRC会是什么。

所以百万美元的问题仍然值得一百万美元。 我们将研究并更新您。 同时,如果您找到答案,请也更新我们。


0

根据我对RFC的理解,你的问题的答案在第6.3.3节中:

6.3.3 接收RTP或非BYE RTCP数据包

当从成员表中不存在的参与者接收到RTP或RTCP数据包时,将该SSRC添加到表中,并在验证参与者的过程中更新成员值,如第6.2.1节所述。

关于哪个条目应被视为有效:

(...) 新条目可以被认为是无效的,直到接收到多个携带新SSRC的数据包(请参见附录A.1),或者直到接收到包含该SSRC的CNAME的SDES RTCP数据包。(...)

我有什么遗漏吗?;)


重要问题是,当新参与者通过验证后,我如何确定其IP / Port组合,因为第11节第2段规定源IP / Port“必须不”使用,而“(…)数据包必须发送到其他参与方指定的接收端口(…)”。如果是新的、意外的参与者(即未经SDP通知,可能是某人窃听),接收IP / Port组合是如何指定的? - biasedbit

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接