有没有办法将RTP/RTSP/RTCP封装成一个TCP连接?

有没有办法将RTP/RTSP/RTCP封装成一个TCP连接?

这是我的设置:

我有两个黑匣子使用某种无线电相互通信。两个黑盒可以同时发送/接收。

我可以使用预定义端口上的 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 routeA 和 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.1D 进行。如果连接不是双向的,您可能会遇到麻烦,我不确定。

(我已经使用稍微不同的设置对此进行了测试,但无法测试单向连接。我还没有测试 VLC 流,如下所述)。

现在,您可以在 A 上启动发送 VLC 实例的流,并在 D 上启动接收 VLC 实例的流。理论上,所有协议都应该有效(如果无线电连接是双向的),请全部尝试。如果无线电连接是单向的,则 RTP 和 UDP应该工作。这目的地10.0.2.2对于UDP和RTP方法,流的地址是(D的隧道地址)。如果您通过 HTTP 发送,接收者需要类似vlc http://10.0.2.1:8080/go.mpg.

相关内容