Linuxを使ってストリーミング配信(Ubuntu 10.10)

(2010年某日)

アナログTVカードでストリーミング配信に挑戦してみた。
クライアント側ではユーチューブのようにFlashを使いブラウザで視聴できるようにする。
用途は、個人的な利用を前提としたものだ。

ストリーミングの概要

最終的に、TVをFlashで再生してブラウザ上からコントロール出来るようにする。
Linuxシステムに接続したTVキャプチャカードから、WindowsPCのブラウザへの、リアルタイム・ネットワーク配信ということ。
(追記)
元々はキャプチャカードで受信した放送を直接配信するシステムであったが、世のデジタル放送への移行後は、手持ちのHDDレコーダーからS-Video端子を通して、ということになる。レコーダーのコントロールは、別途リモートコントロールシステムを構築して行う。

環境 ubuntu10.10
TVキャプチャカード M2TV/PCI

まずはubuntuを9.10から10.04、そして10.10にアップグレードしてみた。
マシンが遅いので、二日に分けてアップグレード(約3時間づつかかった)
何とはなしにdmesgを確認すると…ん!?

[   16.743666] ivtv0: Initialized card: YUAN MPG160, Kuroutoshikou \
ITVC15-STVLP, I/O Data GV-M2TV/PCI

以前はなかったM2TV/PCIの文字が!!
今更こんな古いカードいじったりする人がいるんだろうか
もしかして、ここで書いたことを誰かが見て、ソースに反映した…のか?

などと妄想しつつ、作業を続ける。

ffesrverでストリーミング配信

ffmpegをビルドしてみる
 gitでソースを取得
 configureのオプションはそこらにあるものを適当に参考にした
 libmp3lameとか、libx264とか、必要なライブラリをとかはとりあえず、enableしておく

ffserver.confの設定
 ffserver.conのひな形から適当にasfの設定をしてみる。
 配信に関する書式・指定方法はこのffserver.confを見れば一目瞭然かな。
 ビットレートやサイズについての警告が出る場合があるが、とりあえず無視して問題なし。
 このエラーというかwarningは、ffserver.confを編集をすると発生するらしいが実害はない。また、メッセージを出したくない場合は、ストリームをfeedへ突っ込む際に生成される一時ファイルを消すと解消するらしい(該当ファイルは/tmp以下にある-ffserver.conf参照)。

ffserver -f /etc/ffserver.conf &
ffmpeg -i /dev/video0 http://127.0.0.1:8090/feed1.ffm

とりあえず、今回はローカルのTVチューナーカードなので、アドレスはローカルホストでOK
/etc/ffserver.confで配信する動画のfpsやビットレートの設定をしているので、ffmpegコマンドでビットレートなどを指定してやる必要はない。
デインターレースなどを噛ませたいときなどは適当にオプションを加えてやればいい。

あとはクライアント側でブラウザにhttp://xxx.xxx.xxx.xxx:yyyy/test.asfなどと入れれば再生できる
FirefoxとVLCで確認

感想
音の遅延が酷いので、原因を探ることもなく断念



VLCでストリーミング配信


ubuntuのパッケージ版でpvrが有効化されていたかは失念したが、今回は自前でビルドして配信することにした。
デフォルトではpvrが有効化されないので、configureオプションではpvrをenableするのを忘れないこと。

まずは、生のmpegで配信できるか確認。
cvlc pvr:// pvr-device="/dev/video0" '#starndard{access=http{pass=takeone,pwd=777},mux=ps,dst=192.168.128\
:8090/stream.mpg}'

クライアントPCのvlcで、[ネットワークストリームを開く]から上で指定したアドレスを入力すると問題なく視聴できる。

ここで、Flowplayerに流す為、FLVで配信しようと試みたところ

cvlc pvr:// pvr-device="/dev/video0" --sout '#transcode{vcodec=FLV1,fps=24,vb=800,width=352,height=240\
,deinterlace,acodec=mp3,ab=128,samplerate=22050}:standard{access=http{user=takeone,pwd=777}\
,mux=ffmpeg{mux=flv},dst=:8091/stream.flv}'
エラーがでた
It seems your FFMPEG (libavcodec) installation lacks the following encoder: MPEG Audio layer 1/2/3
パッケージを入れ忘れたらしい
sudo apt-get install libavcodec-extra-52

これで配信できた。

使用感
パスワードをかけられるので個人使用用途には使い勝手がよい
酷い音ずれもなく、特に問題は見られない
ただ、多少負荷が高いような気もする。

TIPS
vlc --list
で利用可能なモジュールが表示される
vlc -p pvr --advanced --help-verbose
などとすると、モジュールについての詳細、指定可能なオプションが確認出来る


FlowPlayer

ストリーミングの準備が整ったので、FlowPlayerで再生してみた
上記vlcの設定で特に問題もなく、なくすんなり再生できた


チャンネル変更コマンド

チャンネル変更コマンドを発行し、番組情報をmc2xmlから取得するCGIを作成


セキュリティ

apache、vlcの認証を使って他からの接続を抑制する。
NTTからレンタルされた、ひかり電話端末+ルーターのPR-200NEのパケットフィルタリングがおざなりなので、ufwで簡単にパケットフィルタリングをすることにした。






最終更新:2018年02月28日 04:54