2015-02-24 27 views
1

我有一个与this question非常相似的问题,但所提供的解决方案对我而言并不适用。实际上我想做一些与众不同的事情,所以也许有更好的办法。处理UDP数据包并同时转发它们

我希望将UDP单播数据包(视频流)发送到服务器。服务器会将这些数据包转发到另一台计算机。或者,登录服务器的用户可以使用类似mplayer的方式观看视频流。我非常肯定我可以将视频流传输到服务器和视频源的最终目的地,但我真的希望服务器能够控制它。

第一次尝试: 下载nmap以获取ncat工具。以为我可以使用它来下载和管道字节mplayer和转发与另一个ncat进程。我可以管到mplayer,它运作的很好,我不能同时转发。如果我使用的是Linux,显然我可以使用Tee和流程替换,但我正在寻找Windows解决方案。

第二次尝试 我发现一种解决方案,这种类型的隐含管道到多个程序将可能在PowerShell中。但是我发现二元管道不起作用。

第三次尝试 我试图编程一个tee-like可执行文件,它将发球到两个程序。这跟我一样近,但视频流看起来有点损坏。我认为这比其他任何问题都更重要。

第四次尝试 现在我正处在发现socat的地步,这引起了我的联系。这似乎很奇怪,但我认为解决方案将是我的服务器将数据包转发到目的地,并将数据包转发到服务器上的其他端口,该端口将与netcat或socat一起用于管道到mplayer。我宁愿不使用服务器上的另一个端口,但如果这就是我必须做的,那么确定。但正如我所说,来自另一个问题的解决方案似乎并不奏效。 Mplayer开始缓冲,然后很快停下来。

按顺序在一个单独的cmd窗口中分别对其进行运算。注意我没有尝试转发到目标计算机,只是试图让mplayer在服务器上工作。

socat UDP4-LISTEN:5000 UDP-DATAGRAM:224.10.10.10:5001

socat UDP4-recvfrom的:5001,IP-附加成员= 224.10.10.10:0.0.0.0,reuseaddr,叉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-附加会员= 224.10.10.10 :0.0.0.0,reuseaddr,fork - | mplayer -vo direct3d -cache 1024 -

我发现它会播放来自多播地址的流。但显然转发到端口5002上的单播地址是不起作用的。

回答

0

好的,我不太确定这是为什么,但netcat进程正常工作以接收来自发件人的UDP数据包并将管道传送到MPlayer不起作用。我不确定问题是什么。

所以不是:

NCAT -l -p -u 5002 | mplayer的-vo Direct3D的-cache 1024 -

我不得不使用:

socat UDP4-recvfrom的:5002,叉 - | mplayer -vo direct3d -cache 1024 -

虽然我还有一个小问题。如果我关闭MPlayer的,得到了​​一个像吨的消息:

2015年2月24日11点14分04秒socat [5888] E读(1,0x800432e8,986):破碎 管

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

相关问题