关于java:RTP RFC (3550) 解释问题

RTP RFC (3550) interpretation question

我正在执行 RFC 3550 (RTP) 的 Java 实现,但遇到了一个小问题:

在第 11 章第 2 段中,它指出:

(...) A participant MUST NOT assume that the source port of the incoming RTP or RTCP packet can be used as the destination port for outgoing RTP or RTCP packets. When RTP data packets are being sent in both directions, each participant's RTCP SR packets MUST be sent to the port that the other participant has specified for reception of RTCP. (...)

RTP 没有任何机制来通知这些地址和端口(这取决于 SDP 或其他一些设置协议),这会让我将这一段理解为"如果您从来源不明,直接丢弃".

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

总结一下:

  • 当收到未知的 SSRC 时,您应该添加一个新的参与者;
  • 您不能将数据包的源 IP/端口用作该参与者的数据包目标;
  • SDP 没有定义每个 RTP 参与者将使用的 SSRC;
  • 您可以手动添加 RTP 参与者(以其他方式发现)但您不知道 SSRC 将是什么。
  • 所以百万美元的问题是:应该如何处理意外的 SSRC?


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


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

    6.3.3 Receiving an RTP or Non-BYE RTCP Packet

    When an RTP or RTCP packet is received from a participant whose SSRC is not in the member table, the SSRC is added to the table, and the value for members is updated once the participant has been validated as described in Section 6.2.1.

    关于哪个条目应该被认为是有效的:

    (...) New entries MAY be considered not valid until multiple packets carrying the new SSRC have been received (see Appendix A.1), or until an SDES RTCP packet containing a CNAME for that SSRC has been received.(...)

    我可能遗漏了什么吗? ;)