我对这个问题的普遍性抱歉。我尝试过很多东西,但似乎没什么用。
我有一台服务器? (我们称之为服务器A ),它位于一个局域网中,那里也有一个IP-Webcam。该网络摄像头不断在地址上提供RTSP源...让我们说...... rtsp://192.168.1.50:554/cam.sdp
。相机无法访问外部世界(它必须保留在LAN中,因此只能访问服务器A ,不能访问服务器B ),但服务器A 。遗憾的是,服务器A 没有公共IP,因此我无法从世界上任何地方进入服务器A 。 服务器A 可以出去,如果它想要,但没有人可以进入服务器A ......(这是一个被宠坏的小子...当它是一个孩子时太多的玩具)
现在,在上述外部世界中还有另一台服务器(服务器B ,是原创的),它是具有公共IP和所有内容的常规Web服务器。该服务器允许人们进入它(没有被宠坏,非常好......设置桌子,做菜......那种东西)。 服务器A 和服务器B 都是我的计算机并运行Ubuntu 12.04和我设计的一些Python应用程序(服务器B 实际上正在运行Django,但是我认为这不太相关)。我的意思是我可以控制两台服务器上发生的事情。我可以安装/卸载软件包,我可以打开端口,关闭端口......无论需要什么(如果我愿意,我甚至可以格式化它们,虽然我不认为这会有多大帮助...或者是...谁知道?)
_____________ _____________
----------- | | | |
__ | | | | | |
| \| WebCam |================| Server A |===========| INTERNET |===========| Server B |
|__/| | ->/cam.sdp <--| |----------------- > --------------> * |
| | |___________| |___________|
-----------
问题是:如何通过服务器A 将RTSP流转储到服务器B 的指定套接字上并打开它(具有能够理解的程序) RTSP供稿,例如VLC)?
我猜我可能需要类似RTSP代理的东西吗?但我真的不知道从哪里开始。
任何提示,链接......都将不胜感激。
提前谢谢
答案 0 :(得分:4)
我不知道RTSP,但它似乎是一个标准的TCP协议。尝试在服务器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
。
答案 1 :(得分:0)
RTSP是针对流服务器的TCP控制协议。该协议使用OPTION命令来获取有关流的信息。当客户端具有有关服务器的足够信息并且它的功能可以发送带有“传输字符串”的PLAY命令告诉它。如何进行流传输,通常在UDP端口554上进行。在发送PLAY之前,客户端应准备执行recfrom(SRV UDP,PORT)。有些传输命令也可以使服务器在TCP上进行流传输。 这样说,我想您可以在本地NET上编写自己的RTSP + DATA代理。请记住,您还必须传递各方之间一直在进行的所有TCP标头,并告知客户端当前帧等。在“云”服务器上,您需要另一个自定义软件才能获取您发送的内容并将其自身公开为rtsp源。
答案 2 :(得分:0)
RTSP是一种控制协议,通常在端口554上运行,但是视频流是使用SDP协商的端口,这意味着在握手时,将确定用于RTP传输(UDP)的端口,并且对于每种传输,端口号都会变化。因此,也许您需要转发一系列端口或将传输端口固定为固定值。