我有一个封闭的第三方系统,它发送一个单播UDP流(MPEG-TS),我想在同一台计算机上的两个不同程序中访问它。我不能在源上改变任何东西,甚至不能改变IP或端口。
除了编写我自己的小程序以捕获流然后创建新流并重新发送它们之外,还有其他选择吗?
似乎只有两个目标程序中的一个处理多播,所以我需要两个单播流。
答案 0 :(得分:4)
您应该能够使用socat
将单播UDP转发到多播组,或者只是将数据保存到文件中并稍后处理。
这是一个例子(这是在Linux上 - 没有任何Windows框)。收听单播端口4242
,转发到多播224.10.10.10:5252
(如果您在同一台计算机上执行所有操作,则可能需要添加ip-multicast-loop
选项):
~$ socat UDP-LISTEN:4242 UDP-DATAGRAM:224.10.10.10:5252
接收多播(需要接口地址或名称),转发到单播192.168.0.1:6666
:
~$ socat UDP-RECVFROM:5252,ip-add-membership=224.10.10.10:eth0,reuseaddr,fork \
UDP-DATAGRAM:192.168.0.1:6666
使用不同的目标地址运行上述两个(reuseaddr
选项允许它们在同一台机器上运行)。