1

我有一个与此问题非常相似的问题,但提供的解决方案对我不起作用。实际上我想做一些不同的事情,所以也许有更好的方法。

我希望将 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 上的单播地址是行不通的。

4

1 回答 1

0

好的,我不太确定为什么会这样,但是 netcat 进程可以正常接收来自发送者的 UDP 数据包并通过管道传输到 MPlayer 在这里不起作用。我不确定问题是什么。

所以而不是:

ncat -l -u -p 5002 | mplayer -vo direct3d -cache 1024 -

我不得不使用:

socat UDP4-RECVFROM:5002,fork - | mplayer -vo direct3d -cache 1024 -

虽然我还有一个小问题。如果我关闭 MPlayer,我会收到大量消息,例如:

2015/02/24 11:14:04 socat[5888] E write(1, 0x800432e8, 986): 断管

此外,如果我从命令行按 Ctrl-C,它需要尝试几次,然后当 MPlayer 停止时,我的键盘不再工作,我必须启动一个新的 cmd 窗口。

于 2015-02-24T19:16:32.660 回答