TCPとUDPを使用したストリーミングバイトには根本的な違いがあります...
- TCPは、バイトストリームの終わりを検出するとEOFを通信します
- UDPはデータの送信を停止するだけです(つまり、データ停止のもう一方の端に通知しません)
その結果、TCPの例は機能しますが、UDPの例は機能しません。これは、mplayerが取得しているバイトをいつ処理するかがわからないためです。
これを解決する1つの方法は、両側でタイムアウトを使用することです...最初に、時間指定の終了でクライアントを起動します(サブシェルのnc部分をバックグラウンドで処理して、ブロックされないようにします)。
(nc -q 1 -u -l -p 65535 > [movie].avi&); sleep 10; fuser -k 65535/udp;\
mplayer [movie].avi; rm [movie].avi
次にサーバーを起動します...この場合、ファイルをudp/65535の192.168.12.238にプッシュすることを示します
(cat [movie].avi | nc -u 192.168.12.238 65535&); sleep 10; \
fuser -n udp ,192.168.12.238,65535 -k
最後に、シェルコマンドをシーケンス処理してネットワーク転送を終了するのに十分な長さのタイムアウトを選択してください(有線イーサネットLANを使用している場合、通常はかなり高速です)。