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