RTP RFC(3550)解释问题

时间:2010-09-13 05:31:23

标签: java rtp

我正在a Java implementation RFC 3550 (RTP),我遇到了一个小问题:

chapter 11第2段中,它指出:

  

(...)参与者不得假设传入RTP或RTCP数据包的源端口可用作传出RTP或RTCP数据包的目标端口。当RTP数据包在两个方向上发送时,每个参与者的RTCP SR数据包必须被发送到另一个参与者指定用于接收RTCP的端口。 (...)

RTP没有任何机制来通知这些地址和端口(这取决于SDP或其他一些设置协议),这将使我将此段理解为“如果您从未知来源接收数据,丢弃它“。

但在section 6.3.3中,它基本上表示当收到带有未知SSRC的RTP或非BYE RTCP数据包时,应将新参与者添加到表中。

总结一下:

  1. 您应该在收到未知的SSRC时添加新参与者;
  2. 您不能将数据包的源IP /端口用作该参与者的数据包目的地;
  3. SDP未定义将由每个RTP参与者使用的SSRC;
  4. 您可以手动添加RTP参与者(以其他方式发现)但您不知道SSRC会是什么。
  5. 所以百万美元的问题是:人们应该如何处理意想不到的SSRC?

2 个答案:

答案 0 :(得分:2)

  1. 您应该在收到未知的SSRC时添加新参与者 - >仅在根据第6.2.1节
  2. 部分进行验证后
  3. 您不能将数据包的源IP /端口用作该参与者的数据包目的地 - >这是说你不能指望端点A的RTP / RTCP对与端点B的对相同(除非另有说明)。 (在第11节中,RFC不是在讨论IP地址。)
  4. SDP未定义将由每个RTP参与者使用的SSRC - >是的,因为SSRC可以随时更改。
  5. 您可以手动添加RTP参与者(以其他方式发现)但您不知道SSRC将是什么。 ???
  6. 所以百万美元的问题仍值一百万美元。会研究和更新你。在此期间,如果您找到答案,请更新我们。

答案 1 :(得分:0)

根据我对RFC的解释,您对问题的回答见第6.3.3节:

  

6.3.3接收RTP或非BYE RTCP数据包

     

当从SSRC不在成员表中的参与者收到RTP或RTCP数据包时,SSRC将被添加到表中,并且一旦参与者按照第6.2节所述验证参与者,就会更新成员的值。 1。

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

  

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

我可能会遗漏一些东西吗? ;)