Java RTP RFC(3550)解释问题

Java RTP RFC(3550)解释问题,java,rtp,Java,Rtp,我正在做的,我遇到了一个小问题: 在第2段中,它指出: (…)参与者不得假设传入RTP或RTCP数据包的源端口可用作传出RTP或RTCP数据包的目标端口。当RTP数据包在两个方向上发送时,每个参与者的RTCP SR数据包必须发送到另一参与者指定用于接收RTCP的端口。(……) RTP没有任何机制来通知这些地址和端口(这取决于SDP或其他一些设置协议),这会使我将本段理解为“如果您从未知源接收数据,请丢弃它” 但它基本上说,当接收到带有未知SSRC的RTP或非BYE RTCP数据包时,应该向表中添

我正在做的,我遇到了一个小问题:

在第2段中,它指出:

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

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

但它基本上说,当接收到带有未知SSRC的RTP或非BYE RTCP数据包时,应该向表中添加一个新的参与者

综上所述:

  • 当收到未知SSRC时,应添加新参与者
  • 您不能将数据包的源IP/端口用作该参与者的数据包目的地
  • SDP没有定义每个RTP参与者将使用的SSRC
  • 您可以手动添加RTP参与者(通过其他方式发现),但不知道SSRC将是什么

  • 因此,百万美元的问题是:一个人应该如何处理意外的SSRC?

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

    6.3.3接收RTP或非BYE RTCP数据包

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

    <> P>关于哪个条目应被认为是有效的:

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

    我会错过什么吗?;)

  • 只有在按照第6.2.1节进行验证后,才能在收到未知SSRC-->时添加新参与者
  • 您不能将数据包的源IP/端口用作该参与者的数据包目标-->这意味着您不能期望端点A的RTP/RTCP对与端点B的RTP/RTCP对相同(除非指定)。(在第11节中,RFC不是指IP地址。)
  • SDP没有定义每个RTP参与者将使用的SSRC-->是,因为SSRC可以动态更改
  • 您可以手动添加RTP参与者(通过其他方式发现),但您不知道SSRC将是什么
    所以百万美元的问题仍然值一百万美元。我会调查和更新你。同时,如果您找到了答案,请也向我们提供最新信息。

    最大的问题是,在验证后,我如何确定新参与者的IP/端口组合,因为第11节第2段规定,“不得”使用源IP/端口,“(…)数据包必须发送到其他参与者指定接收的端口(…)”。如果是一个新的、意外的参与者(意思是通过SDP未宣布,可能有人窃听),如何指定接收IP/端口组合?