在 iptables 中启用 RTSP

在 iptables 中启用 RTSP

我想通过 VLC 接收 RTSP 流,但是当我尝试运行时

sudo -u non_root_user cvlc -vvv -I dummy rtsp://ip:port/x.sdp 

我得到:

Unable to determine our source address: This computer has an invalid IP    address: 0x0

我认为端口可能被关闭,因为当我禁用防火墙时,我能够接收流。我想问你如何设置 iptables 以便我可以接收 RTSP。谢谢。

答案1

你遇到过一个丑陋的黑客直播555,VLC 库用于提供 RTSP 客户端功能。 (VLC 的 RTSP 服务器代码是 VLC 特定的。)黑客尝试找出您的计算机在 LAN 上使用的 IP。 (尽管这个 hack 很丑陋,但我不知道 Live555 有更好的方法来做到这一点。)

您必须在防火墙中打开 UDP 端口 15947 才能修复您遇到的错误。这是 Live555 用于此黑客攻击的“测试端口”。

完成此操作后,您可能还需要打开其他端口来接收流,具体取决于防火墙的工作方式。 RTSP只是一个流控制协议,而不是流送货协议。将 RTSP 视为实际流传输协议的“VCR 按钮”:播放、停止、暂停、快进、快退......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

也就是说,VLC 告诉 RTSP 服务器它希望通过 RTP 在端口 60860 和 60861 上传送媒体。客户端随机选择这些端口。如果您的防火墙阻止它们,即使 RTSP 协商成功,它也会阻止流传输。

在最好的情况下,您的防火墙要么不会阻止如此高的端口,要么会具有一些状态检查功能,可以在看到此 RTSP 协商时取消阻止它们。

如果您的防火墙确实阻止了它,您可以使用以下命令进行调试Wireshark。它理解 RTSP 协议。右键单击 RTSP 流中的数据包并说“跟随 TCP 流”。在弹出的窗口中,找到RTSPSETUP命令。然后再次启动 Wireshark,这次查找这些端口上的 UDP 流量。 (所有这一切都是在 RTSP 客户端继续下载流或尝试下载流的同时进行的。)

相关内容