内网无法播放公网rtsp流的问题
用vlc的vlm功能搭了一个视频点播系统,放在AWS上,有公网IP(假设公网IP为11.11.11.11)。
然后在内网用vlc等播放器播放rtsp://11.11.11.11:8554/vod1。
在我家播放没有问题,但换了一个新环境,播放不了,用wireshark抓包发现,rtsp连接已经建立起来,PLAY会话后服务器也不停向客户端发送视频流和音频流的rtp包了,但内网机器却抓不到rtp包。
经分析,rtsp在SETUP会话时分别指定了服务器和客户端rtp和rtcp通信时要用到的端口号。SETUP后客户端向服务器发送了两包rtp和rtcp包用的也是指定的端口,但是路由器在转发这些包时应该是把指定端口号换成了其它端口号,因此服务器发现端口号不对,向客户端回复了ICMP,说unreachable port,其后服务器在PLAY会话后开始向客户端(路由器公网IP)指定端口发rtp包,而路由器对这些端口号的数据包没有转发给内网机器。
在我家抓包发现路由器转发rtp和rtcp包时没有改变内网数据包中的端口,所以播放没有问题。
问题:
1、不知以上我分析的对不对,如果真是这样,在无法对路由器设置端口转发的情况下,如何才能让内网播放rtsp流呢?我试过rtp over rtsp,即用rtsp的tcp连接来传rtp包,但vlc目前好像还不支持。
2、按照udp协议,路由器在出口时应该会将内网IP和端口改成自己的公网IP和另外的端口,为什么在我家试的时候总是端口一致呢?路由器能设置尽量使用内网原来数据包中的端口号吗?