80000
NAT路由器
202.102.154.3
60000
80000
外网服务器
60.212.212.63
59999
60000 内网计算机 172.29.26.30 59999
内网计算机IP为172.29.26.30,NAT路由器IP地址为202.102.154.3,外部视频服务器IP地址为60.212.212.23。
服务器开设两个线程:监听线程和数据发送线程
监听线程用于登记客户端地址,包括IP地址和端口号,然后调用AddDestination(),加入到发送线程的回话目的端链表。其监听端口设为80000
数据发送线程用于发送rtp数据和rtcp数据包。Rtp回话创建于60000端口,在rtpsock邦定端口60000,rtcp邦定端口60001,由昨天得知sendsock必须邦定端口,修改rtp库,使其邦定端口59999。
内网计算机程序,也就是客户端程序rtp回话创建于端口60000,取出其rtpsock(该端口邦定60000端口,负责接收rtp数据包)。向服务器80000端口发送请求,这代表服务器80000端口发送数据到内网计算机60000端口的通路打开,服务器取得客户端地址,写入目标地址链表。由于客户端是要接收到服务器59999端口发来的数据,于是rtpsock发送数据到服务器的59999端口,此时服务器59999端口发送数据到客户端60000端口的数据打通。这样便可以正确的传送和接收rtp数据包。
但是这时候接收不到rtcp数据包,原因是因为服务器59999端口发送到客户端60001端口的通路没有打通。利用同样的方式既可。