unix - 使用 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 流。我只想知道如何在特定的多播地址和端口上多播二进制文件的内容。
解决方案
这个我没试过,但是在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
它从标准输入发送数据以进行多播。它将打印任何收到的回复。
推荐阅读
- asp.net - 如何修复“无法加载文件或程序集“Spss”或其依赖项之一。试图加载格式不正确的程序。'?
- python - 如何检测我的控制器中的哪个特定按钮在 pygame 中被释放
- deployment - 构建为 jar 时找不到带有接口的 EJB
- java - 我想将“标准”输出流(System.out)链接到 PrintWriter 流。但是我不能。为什么?
- realm - 当`changesetPublisher`发出集合变更集时不更新视图
- ruby-on-rails - Rails wikedPDF 错误:无法生成 PDF
- flutter - 在充满相同小部件的列表中删除特定小部件
- c# - ASP.NET Core Identity :在前一个操作完成之前在此上下文上启动了第二个操作
- mysql - 列出所有在闰年执导“喜剧”电影的导演
- pandas - 包含字符串的对象列在转换为分类数据类型后保留字符串类型(Pandas Categorical)