udp streaming

唐突に、Chinachu(使うには至ってないけど)の、録画してるものをリアルタイムでストリーミングというのが気になった。
実際に予約録画までやってないのだけど、設定ファイルを見る限り、デバイスからのストリームをteeで分岐して、ファイルに落としつつ、

 cvlc - --sout "#standard{access=http,mux=ts,dst=:20772/dtvts}"

がstdoutを喰ってサーバ起動。vlcのheadless版なんてのがあったのだなあ(詠嘆)。オプションは良く分からんけど、http://HOST:20772/dtvts にアクセスするとHLSで降ってくるのかしら。トランスコードはしてなくて、内部的にSegmenterを持っている感じ?
これでいこうかとも思ったが、multimedia/vlcは依存portsが多すぎて、おうち録画サーバにXorgが入っちゃうのはなあ、というわけで本題。
見るとしたらクライアント側はWindowsVLCなのだけど、こいつは「ネットワークストリームを開く」で、udp:// から始まるストリームを受けられる模様。udpでTSファイルをそのまま流せば見れるのか?ということで、foltiaで録画してあるファイルをnetcatしてみる。

 $ nc -u 192.168.0.2 9870 < 2270-1-20111007-0155.m2t

192.168.0.2はWindows側。VLCudp://@:9870 を開くと。。。む。むう。一応映像は流れたが、フレームの順序が入れ替わっている感じ。キャッシュを300ms→10000msに増やすもやってみたがダメ。udpだから到着順序は保障されてないとは言え、LANやぞ。。。
他にudpで流せるやつないかなあと思って、ぐぐっているうちに思い出したのが、tstools(multimedia/tstools)だったのでした。サーバになるやつがあったような気がする。

 # portmaster multimedia/tstools

サーバじゃないけど何かそれっぽいのがあるぞ、ということで、

 $ tsplay 2270-1-20111007-0155.m2t 192.168.0.2:9870

同じようにVLCudp://@:9870 を開くと。。。おぉ!出た!!なんかよさげだ。
これでもいいと言えばいいんだが、サーバじゃないので、他の端末から見るのが面倒な感じ。というわけで、マルチキャストだ。

 $ tsplay -i 192.168.0.1 2270-1-20111007-0155.m2t 224.0.0.23:9870

VLCでも udp://@224.0.0.23:9870 とすると。。。おぉ!!これも出た!!!
ふむ。録画してるものの同時ストリーミングもいいけど、外からチャンネル切り替えできるようにして、普通に視聴にも使えそうな。