我有一个与此问题非常相似的问题,但提供的解决方案对我不起作用。实际上我想做一些不同的事情,所以也许有更好的方法。
我希望将 UDP 单播数据包(视频流)发送到服务器。服务器会将这些数据包转发到另一台计算机。或者,登录到服务器的人将能够使用 mplayer 之类的东西观看视频流。我很确定我可以将视频从视频源流式传输到服务器和最终目的地,但我真的希望服务器能够控制它。
第一次尝试: 下载nmap获取ncat工具。以为我可以用它来下载字节并将字节传输到 mplayer 并与另一个 ncat 进程一起转发。我可以通过管道连接到 mplayer,效果很好,只是不能同时转发。如果我使用的是 Linux,显然我可以使用 tee 和进程替换,但我正在寻找 Windows 解决方案。
第二次尝试 我找到了一种解决方案,可以在 PowerShell 中隐含管道到多个程序。但我发现二进制管道不起作用。
第三次尝试 我试图编写一个类似于 tee 的可执行文件,它可以连接到两个程序。这与我得到的差不多,但视频流似乎有点损坏。我认为这更多的是性能问题。
第四次尝试 现在我发现了 socat ,这让我想到了我所链接的问题。这看起来很奇怪,但我认为一个解决方案是让我的服务器将数据包转发到目标,并将数据包转发到服务器上的不同端口,该端口将与 netcat 或 socat 一起使用以管道传输到 mplayer。我宁愿不使用服务器上的另一个端口,但如果那是我必须做的,那么好的。但就像我说的那样,另一个问题的解决方案似乎不起作用。Mplayer 开始缓冲,然后很快停止。
按此顺序在单独的 cmd 窗口中运行其中的每一个。请注意,我还没有尝试转发到目标计算机,只是想让 mplayer 在服务器上工作。
socat UDP4-LISTEN:5000 UDP-DATAGRAM:224.10.10.10:5001
socat UDP4-RECVFROM:5001,ip-add-membership=224.10.10.10:0.0.0.0,reuseaddr,fork UDP-DATAGRAM:192.168.16.33:5002
ncat -l -u -p 5002 | mplayer -vo direct3d -cache 1024 -
根据 MPlayer 的输出,我似乎收到了大约 924 个字节。
虽然我会继续学习 socat,但我的想法很新鲜。我假设我没有正确运行 socat,但我不确定问题出在哪里。如果有人能指出我的错误或提供替代解决方案,我将不胜感激。谢谢。
编辑:
我做了一些更多的测试,如果我改变第二个 socat 来做到这一点:
socat UDP4-RECVFROM:5001,ip-add-membership=224.10.10.10:0.0.0.0,reuseaddr,fork - | mplayer -vo direct3d -cache 1024 -
我发现它会从多播地址播放流。但显然转发到端口 5002 上的单播地址是行不通的。