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が入っちゃうのはなあ、というわけで本題。
見るとしたらクライアント側はWindowsのVLCなのだけど、こいつは「ネットワークストリームを開く」で、udp:// から始まるストリームを受けられる模様。udpでTSファイルをそのまま流せば見れるのか?ということで、foltiaで録画してあるファイルをnetcatしてみる。
$ nc -u 192.168.0.2 9870 < 2270-1-20111007-0155.m2t
192.168.0.2はWindows側。VLCで udp://@:9870 を開くと。。。む。むう。一応映像は流れたが、フレームの順序が入れ替わっている感じ。キャッシュを300ms→10000msに増やすもやってみたがダメ。udpだから到着順序は保障されてないとは言え、LANやぞ。。。
他にudpで流せるやつないかなあと思って、ぐぐっているうちに思い出したのが、tstools(multimedia/tstools)だったのでした。サーバになるやつがあったような気がする。
# portmaster multimedia/tstools
サーバじゃないけど何かそれっぽいのがあるぞ、ということで、
$ tsplay 2270-1-20111007-0155.m2t 192.168.0.2:9870
同じようにVLCで udp://@:9870 を開くと。。。おぉ!出た!!なんかよさげだ。
これでもいいと言えばいいんだが、サーバじゃないので、他の端末から見るのが面倒な感じ。というわけで、マルチキャストだ。
$ tsplay -i 192.168.0.1 2270-1-20111007-0155.m2t 224.0.0.23:9870
VLCでも udp://@224.0.0.23:9870 とすると。。。おぉ!!これも出た!!!
ふむ。録画してるものの同時ストリーミングもいいけど、外からチャンネル切り替えできるようにして、普通に視聴にも使えそうな。