jrtplib-2.9建立了三个socket
rtpsock 专用来接收rtp数据包 邦定一个偶数端口
rtcpsock 专用来接收rtcp数据包 邦定rtpsock端口+1
sendsock 专门用来发送数据包 邦定0,系统自动分配
NAT协议转换表(示意,不完整)
专用地址 专用端口 外部地址 外部端口 传输层协议
如下假设:
172.29.26.30 用4000端口给60.212.212.130的40000端口发数据
假设NAT路由器的ip为202.102.154.3 它给影射的端口是 40000
然后60.212.212.130用非40000端口把数据发给202.102.154.3的
40000端口,我们学校的情况是172.29.26.30数不到数据。
然后60.212.212.130用40000端口把数据发给202.102.154.3的
40000端口,172.29.26.30就能到数据。
也就是说rtp发送方的发送端口(sendsock的端口)必须是已知固定的,请求发送方必须把请rtp求数据包的
目的port设置为该端口。
可是rtpjrtp-2.9的发送端口是自动分配的。
解决方案:
修改rtp库,使其sendsock邦定可获得已知端口。请求端连接该端口。
但是无法解决,多个客户端请求时,rtp服务器如何监听和发送数据并发处理。
监听时recvfrom要占用端口
发送数据要占用同样的端口
不知如何是好。