RTP 规范规定,给定 RTP 流的 RTCP 数据包将在主 RTP 端口 +1 的端口上发送。例如,如果视频到达 RTP 端口 9010,那么在端口 9011 上,您可以期待 RTCP 数据包。
当我协商单播流(通过 RTSP 协议)时,我必须建议我希望将视频发送给我的一对端口(1 个用于 RTP,1 个用于 RTCP)...
现在,我知道如果我绑定一个端口为 0 的套接字,系统将从临时范围中选择一个空闲端口...我遇到的问题是我实际上需要一对端口,并且我需要 RTCP 端口是RTP端口的+1(事实上,我想我需要RTP端口是偶数)。
有没有办法找到一对空闲端口?这通常是如何完成的?
您会得到一个随机的,然后尝试下一个。
If the bind()
第二个端口上的调用失败EADDRINUSE
,冲洗并重复...
无论如何,在大多数系统上,如果两个调用足够接近,您可能不必重复该序列。
临时端口通常是按顺序分配的,因此下一个端口不空闲的唯一方法是,如果该端口已被长期存在的进程使用(在 UDP 上不太可能),或者其他人偷偷进入bind()
在你们两个之间打电话。
同样,如果您需要 RTP 端口为偶数,则只需随机选择第一个端口,如果返回奇数端口,只需重试 - 根据上述情况,下一个端口很可能是偶数!如果没有,请冲洗并重复...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)