![有没有办法将RTP/RTSP/RTCP封装成一个TCP连接?](https://linux22.com/image/118214/%E6%9C%89%E6%B2%A1%E6%9C%89%E5%8A%9E%E6%B3%95%E5%B0%86RTP%2FRTSP%2FRTCP%E5%B0%81%E8%A3%85%E6%88%90%E4%B8%80%E4%B8%AATCP%E8%BF%9E%E6%8E%A5%EF%BC%9F.png)
这是我的设置:
我有两个黑匣子使用某种无线电相互通信。两个黑盒可以同时发送/接收。
我可以使用预定义端口上的 TCP 客户端套接字向每个黑盒发送/接收数据。
我可以发送/接收文件,但它不像用于演示目的的视频那么性感。
FILE --> APP --> BLACKBOX_TX --RADIO--> BLACKBOX_RX --> APP --> FILE
这就是我想做的:
我想将视频从一侧发送到另一侧,同时能够从 TX 侧和 RX 侧看到视频。当然,神奇的事情发生在 RX 端,我应该能够无损地观看视频,因为这就是黑匣子的作用。
这是我的问题:
几年前我曾使用 VLC 通过 RTP 及其两个朋友 RTSP 和 RTCP 发送视频。我是否有机会通过将所有流连接复用到一个 TCP 连接(朝向 TX 侧)并从一个 TCP 连接(从 RX 侧)解复用来使用相同的功能?
VLC --> [PROXY] --> BLACKBOX_TX --RADIO--> BLACKBOX_RX --> [PROXY] --> VLC
我对任何其他不涉及 VLC 的解决方案持开放态度。黑盒+TCP是必须的。
谢谢,
索克斯
答案1
我将重复我对设置的理解,并希望它是正确的;如果没有,请更新问题。这是一张图片,IP地址是组成的:
Computer A Blackbox B Blackbox C Computer D
Laptop etc. Embedded Embedded Laptop
10.0.0.1/24 --- 10.0.0.2/24 ... 10.0.1.2/24 --- 10.0.1.1/24
Port 123 Port 123
因此,A 和 B 通过以太网 (LAN) 连接,B 和 C 通过无线电连接,C 和 D 再次通过以太网连接。 B 和 C 上运行一个应用程序,它侦听端口 123,并通过无线电将来自或发送到该端口的所有内容转发到另一端。您想要在 A 和 D 上运行 VLC 并流式传输视频以演示所涉及的延迟。
socat
在这种情况下,我会按以下方式建立隧道。在 A 上,
socat TCP4:10.0.0.2:12 TUN:10.0.2.1/24,iff-up
在 B 上,
socat TCP4:10.0.1.2:12 TUN:10.0.2.2/24,iff-up
检查ip route
A 和 D 是否有类似的内容
10.0.2.0/24 dev tun0 proto kernel scope link src ...
这种方式假装 A 和 D 直接连接,就像通过 LAN 一样,如下图所示:
A D
10.0.2.1/24 ---- 10.0.2.2/24
tun0 tun0
通过从 A 进行测试是否有效ping 10.0.2.2
,如果无线电连接是双向的,则从ping 10.0.2.1
D 进行。如果连接不是双向的,您可能会遇到麻烦,我不确定。
(我已经使用稍微不同的设置对此进行了测试,但无法测试单向连接。我还没有测试 VLC 流,如下所述)。
现在,您可以在 A 上启动发送 VLC 实例的流,并在 D 上启动接收 VLC 实例的流。理论上,所有协议都应该有效(如果无线电连接是双向的),请全部尝试。如果无线电连接是单向的,则 RTP 和 UDP应该工作。这目的地10.0.2.2
对于UDP和RTP方法,流的地址是(D的隧道地址)。如果您通过 HTTP 发送,接收者需要类似vlc http://10.0.2.1:8080/go.mpg
.