2015-02-24 46 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窗口。