使用 socat 多播 mpeg-2 流

using socat to multicast an mpeg-2 stream

我有一个损坏的 ts 文件,其中包含一些 MPEG-2 流,偶尔会有故意的数据包错误。我的想法是在我尝试构建的另一个应用程序上分析流并检测错误。

如果我使用socat作为

socat -u open:test.ts udp:localhost:1234
sleep 0.001

它在那个套接字上正确地发送了文件的内容,我可以在我的客户端应用程序中监听那个端口来分析传输流数据包。现在,我希望我的应用程序支持多播 well.For,我使用类似

socat -u open:test.ts udp:239.48.208.1:1234
sleep 0.001

并在我的应用程序上收听该多播地址。我什么也没收到。因为我知道多播地址在我的防火墙内是有效的,所以我假设这是 socat 一开始就没有发送任何数据包的问题。所以,我认为这不是使用 socat.

通过网络发送文件内容的正确方法

虽然它不一定是 MPEG-2 流。我只想知道如何在特定的多播地址和端口上多播二进制文件的内容。

这个我没试过,但是socat的作者Gerhard Rieger在dest-unreach.org上有很多详细的例子。第一个示例是公共网络 192.168.10.* 上的多播客户端和多个接收服务器。客户端192.168.10.1发送到多播地址,接收 服务器可能会发送响应数据包。在任何服务器上,例如192.168.10.2,我们有

socat UDP4-RECVFROM:6666,ip-add-membership=224.1.0.1:192.168.10.2,fork EXEC:hostname

这意味着接收到 224.1.0.1 的多播,并为每个数据包创建一个进程。进程(例如hostname)可以发回一个或多个回复包。 192.168.10.2 是用于接收的接口(每个服务器都不同);请参阅 ip-add-membership.

的 socat 手册页

在发送客户端我们有

socat STDIO UDP4-DATAGRAM:224.1.0.1:6666,range=192.168.10.0/24

从 stdin 发送数据进行多播。它将打印任何收到的回复。