Dro*_*ped 7 streaming firewall iptables vlc
我想通过 VLC 接收 RTSP 流,但是当我尝试运行时
sudo -u non_root_user cvlc -vvv -I dummy rtsp://ip:port/x.sdp
Run Code Online (Sandbox Code Playgroud)
我得到:
Unable to determine our source address: This computer has an invalid IP address: 0x0
Run Code Online (Sandbox Code Playgroud)
我认为端口可能已关闭,因为当我禁用防火墙时,我能够接收流。我想问你如何设置iptables,以便我可以接收RTSP。谢谢。
您在Live555 中遇到了一个丑陋的 hack,VLC 用于提供 RTSP 客户端功能的库。(VLC 的 RTSP 服务器代码是特定于 VLC 的。)黑客试图找出您的机器在 LAN 上使用的 IP。(虽然 hack 很丑,但我不知道 Live555 有什么更好的方法来做到这一点。)
您必须在防火墙中打开 UDP 端口 15947 才能修复您遇到的错误。这是 Live555 用于此 hack 的“测试端口”。
完成此操作后,您可能还需要打开其他端口来接收流,具体取决于防火墙的工作方式。RTSP只是流控制协议,不是流传输协议。将 RTSP 视为实际流传输协议的“VCR 按钮”:播放、停止、暂停、FF、倒带……作为“播放”操作的一部分,RTSP 客户端与服务器协商流传输端口。
这样做的结果是客户端(在本例中为 VLC)将要求服务器在 RTSPSETUP
命令中的特定端口上将媒体发送给它:
SETUP rtsp://192.168.0.1:8554/42.ts/track1 RTSP/1.0
CSeq: 4
User-Agent: LibVLC/2.0.2 (LIVE555 Streaming Media v2011.12.23)
Transport: RTP/AVP;unicast;client_port=60860-60861
Run Code Online (Sandbox Code Playgroud)
也就是说,VLC 告诉 RTSP 服务器它希望通过 RTP 在端口 60860 和 60861 上传送媒体。客户端随机选择这些端口。如果您的防火墙阻止它们,即使 RTSP 协商成功,它也会阻止流传输。
在最好的情况下,您的防火墙要么不会阻止如此高的端口,要么会具有一些状态检查功能,可以在看到此 RTSP 协商时解除对它们的阻止。
如果您的防火墙确实阻止了它,您可以使用Wireshark对其进行调试。它理解 RTSP 协议。右键单击 RTSP 流中的数据包,然后说“跟随 TCP 流”。在弹出的窗口中,找到RTSPSETUP
命令。然后再次启动 Wireshark,这次查找这些端口上的 UDP 流量。(在 RTSP 客户端继续下载流或尝试下载流时,所有这些都发生了。)
归档时间: |
|
查看次数: |
10554 次 |
最近记录: |