5

我为这个问题的一般性道歉。我尝试了很多东西,但似乎没有任何效果。我有服务器?(我们称它为Server A),它驻留在局域网中,其中还有一个 IP 网络摄像头。该网络摄像头不断在地址上提供 RTSP 提要……比方说…… rtsp://192.168.1.50:554/cam.sdp。摄像机无法访问外部世界(它必须留在局域网中,因此只能访问服务器 A,不能访问服务器 B),但服务器 A可以。遗憾的是,服务器 A没有公共 IP,因此我无法从世界任何地方访问服务器 A。服务器 A可以出去,但没有人可以进入服务器 A……(真是个被宠坏的小子……小时候玩具太多了)

现在,在前面提到的外部世界中还有另一台服务器(服务器 B是原始服务器),它是一个普通的 Web 服务器,它的公共 IP 等等。该服务器允许人们进入它(没有被宠坏,非常好......摆桌子,洗碗......那种东西)。服务器 A服务器 B都是我的计算机,运行 Ubuntu 12.04 和我设计的一些 Python 应用程序(服务器 B实际上运行 Django,但我认为这不太相关)。我的意思是我可以控制两台服务器中发生的事情。我可以安装/卸载软件包,我可以打开端口,关闭端口......任何需要的东西(如果我愿意,我什至可以格式化它们,尽管我认为这不会有太大帮助......或者是......谁知道?)

                               _____________                                    _____________
    -----------                |           |                                    |           |   
 __ |         |                |           |                                    |           |     
|  \| WebCam  |================| Server A  |===========|  INTERNET  |===========| Server B  |
|__/|         | ->/cam.sdp  <--|           |----------------- > --------------> *           | 
    |         |                |___________|                                    |___________|
    -----------

问题是:如何使用服务器 A抓取 RTSP 流,将其转储到服务器 B的指定套接字并打开它(使用能够理解 RTSP 提要的程序,例如 VLC)?

我猜我需要像 RTSP 代理这样的东西,也许吧?但我真的不知道从哪里开始。

任何提示,链接......将不胜感激。

先感谢您

4

4 回答 4

6

我不知道 RTSP,但它似乎是一个标准的 TCP-only 协议。尝试在服务器 A 上运行:

ssh -g -R 554:192.168.1.50:554 server_B_hostname

这将打开服务器 B 上的公共端口 554,并从 A 的角度将其转发到 192.168.1.50:554。

某些服务器已将 sshd 配置为拒绝 ssh -g -R 转发(没有充分理由)。如果可以,您应该检查服务器 B 上的 /etc/ssh/sshd_config 并添加AllowTcpForwarding yes.

于 2013-12-22T00:52:39.190 回答
2

RTSP 是一种控制协议,通常在端口 554 上运行,但视频流是使用 SDP 协商的端口,这意味着在握手时将决定用于 RTP 传输 (UDP) 的端口,并且对于每个传输,端口号会有所不同。因此,您可能需要转发一系列端口或将传输端口固定为固定值。

于 2020-05-16T05:49:13.557 回答
2

查看

https://github.com/aler9/rtsp-simple-server

这将使您能够设置被宠坏的小子服务器以获取 ipcam rtsp 流并将其推送到服务器 B。

您将需要能够在服务器 A 上运行这个东西,最好在服务器 B 上也能从服务器 A 接收发布的流。您可以使用加密、tls 等...

于 2022-01-12T01:04:51.093 回答
0

RTSP 是面向流服务器的 TCP 控制协议。该协议使用 OPTION 命令来获取有关流的信息。当客户端有足够的关于服务器的信息并且它的功能可以发送一个带有“传输字符串”的 PLAY 命令来告诉它。如何流式传输,通常在 UDP 端口 554 上。客户端在发送 PLAY 之前,应准备好进行 recfrom(SRV UDP, PORT)。有一些传输命令也可以使服务器在 TCP 上进行流式传输。这么说我猜你可以在本地 NET 上编写自己的 RTSP+DATA 代理。请记住,您还必须在各方之间传递所有 TCP 标头,告诉客户端当前帧等。在“云”服务器上,您需要另一个自定义软件才能获取您发送的内容并将其自身公开为 rtsp 源。

于 2019-01-13T05:15:33.070 回答