首页 > 解决方案 > 使用 socat 多播 mpeg-2 流

问题描述

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

如果我使用socat作为

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

它在该套接字上正确发送文件的内容,我可以在我的客户端应用程序中侦听该端口以分析传输流数据包。现在,我希望我的应用程序也支持多播。为此,我使用类似的东西

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

并在我的应用程序上收听该多播地址。我什么也没收到。因为我知道多播地址在我的防火墙内是有效的,所以我假设这是socat没有首先发送任何数据包的问题。所以,我认为这不是使用socat通过网络发送文件内容的正确方法。

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

标签: unixudpsocat

解决方案


这个我没试过,但是在dest-unreach.org上有很多详细的例子,作者是 socat 的作者 Gerhard Rieger。第一个示例是一个多播客户端和多个接收服务器位于公共网络 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 是接收的接口(因此在每个服务器上有所不同);请参阅 socat 手册页ip-add-membership

在发送客户端上,我们有

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

它从标准输入发送数据以进行多播。它将打印任何收到的回复。


推荐阅读