我正在做RFC 3550 (RTP)的 Java 实现,但遇到了一个小问题:
在第 11 章第 2 段中,它指出:
(...) 参与者不得假设传入 RTP 或 RTCP 数据包的源端口可用作传出 RTP 或 RTCP 数据包的目标端口。当双向发送 RTP 数据包时,每个参与者的 RTCP SR 数据包必须发送到另一个参与者为接收 RTCP 指定的端口。(...)
RTP 没有任何机制来通知这些地址和端口(这取决于 SDP 或其他一些设置协议),这将使我将这一段理解为“如果您从未知来源接收数据,则丢弃它” .
但在第 6.3.3 节中,它基本上说,当接收到带有未知 SSRC 的 RTP 或非 BYE RTCP 数据包时,应将新参与者添加到表中。
所以总结一下:
- 当收到未知的 SSRC 时,您应该添加一个新的参与者;
- 您不能将数据包的源 IP/端口用作该参与者的数据包目标;
- SDP 没有定义每个 RTP 参与者将使用的 SSRC;
- 您可以手动添加 RTP 参与者(以其他方式发现)但您不知道 SSRC 将是什么。
所以百万美元的问题是:应该如何处理意外的 SSRC?