Debianマシンを使ってDVカメラ一つだけでustream.tvの放送をする

nogajun
nogajun

_

ustream.tvの中継で何が面倒くさいかというと中継のための機材を持っていかなければいけないこと。 カメラやマイク、ミキサー、それだけの機材をを姫路から大阪まで抱えて電車に乗ったりして運ぶのは嫌です。ホントに嫌です。

ustだけならカメラは5000円ぐらいで売ってる300万画素のWebカメラで十分だけど、音についてはマイク一つで全部拾えるぜというのは、それなりにお金を出して買わないといけないし、コンデンサマイクなんかは小さい音でも拾えるけど、それこそミキサーが必要になるので機材の軽量化からは遠くなってしまいます。

そこで、ふと思いついたのが「【インタビュー】キミもこれで「そらの」になれる! そらのダダ漏れ用ガジェット徹底聞き込み : ギズモード・ジャパン」の中にあった、「音声と動画をいっぺんにPCへ送るのに、i.LINKがいちばんスマートだったんです。」という記述。

ビデオカメラなら映像もきちんとしているし、マイクについても集音性バッチリ。しかも機材が減る!すばらしい!

うちにはテープ部分が壊れたminiDVのビデオカメラがあります。これを使って中継すれば機材は減るしクオリティも落とさず楽勝。

ということで、Debian上からDVカメラとIEEE1394ケーブル一本だけでust中継ができるか試してみました。

必要なソフト

WebcamStudioの入力ソースのメニューにDVがあるので、これを選んでおしまい。のはずでした。が、そうは問屋が下ろさない。 DVを選んでもカメラ部分だけ見ているようで音声は出ません。dvgrabを使うと映像と音声が出てきます。

すぐに挫折かと思ったところ、WebcamStudioの入力ソースにストリーミング動画を入力ができます。dvgrabが使えるならば、dvgrabでキャプチャして、webcamstudioに渡せばいいんじゃない?

ものすごく回り道だけど、dvgrabを使ってIEEE1394ソースを取り込んでicecast2でwebcamstudio宛にストリーミング。webcamstudioを使ってustream.tvの中継をおこなう。という方法を考えました。

流れとしてはこんな感じ。

DVカメラ→Oggエンコード→icecast2→webcamstudio→ustream.tvなど

インストール

DVカメラから映像音声の取り込みむdvgrab、取り込んだDVをoggにエンコードするffmepg2theora、エンコードしたoggをicecast2に渡すoggfrd、ストリーミングに必要なicecast2をインストールします。

$ sudo aptitude install dvgrab ffmpeg2theora oggfrd icecast2

icecast2はデフォルトで起動しないので/etc/default/icecast2の設定を変更して起動します。

(略)

# Edit /etc/icecast2/icecast.xml and change at least the passwords.
# Change this to true when done to enable the init.d script
ENABLE=true ← falseになっているのでtrueにする

icecast2を起動します。

$ sudo /etc/init.d/icecast2 restart

DVカメラの映像をicecast2でストリーミングする

DVカメラからIEEE1394ケーブル経由で映像と音声を取り込み、oggにエンコードしてicecast2に渡します。

$ dvgrab --format raw - | ffmpeg2theora -f dv -x 320 -y 240 -F 15 -v 10 -V 250 -c 1 -A 64 -H 22050 -o /dev/stdout - | oggfwd localhost 8000 hackme /debian.ogg

コマンドは長いですがパイプでつないでいるだけなので、一つずつ見ると簡単です。

まずdvgrabでDV raw形式キャプチャしたソースをハイフンをつけて標準出力に流します。

続いてffmpeg2theoraでOgg Theora形式にエンコードします。オプションがたくさんありますが一つつづ説明すると

  • -fは受け取る映像フォーマットです。DV Rawなのでdvです。
  • -xと-yは縦と横のピクセルです。320x240にしています。
  • -Fはフレームレートです。15fpsにしています。
  • -vは映像クオリティです。10にしています。
  • -Vはビットレートです。250kbpsにしています。
  • -cは音声チャンネルです。モノラルにしています。
  • -Aは音声のビットレートです。64kbpsです。
  • -Hは音声の周波数です。22050Hzにしています。
  • -oは標準出力に出力しています。

最後の「-」でdvgrabからのデータを受け取っています。

oggfrdを使ってエンコードしたデータをicecast2に流しています。 前から順に localhost はicecast2サーバー、 8000 はポート番号、 hackme はicecast2のデフォルトのパスワード、 /debian.ogg はソース名になります。

このコマンドを叩いたあと、ブラウザを使って http://localhost:8000/ を見るとicecast2の配信の様子が見れます。そのページに貼ってあるm3uファイル(例で言うなら http://localhost:8000/debian.ogg.m3u )をVLCやTotemなどで開くと、DVカメラのストリーミングが見られます。 見れなければストリーミングできないのでチェックします。

webcamstudioを使ってust中継

webcamstudioを起動します。

$ java -jar WebcamStudio.jar

使用したwebcamstudioのバージョンは0.55aを使いました。

webcamstudioのツールバーから、[Sources]→[ストリーム動画]を開きます。

URLの入力画面になりますが、入力の時localhostではなぜか使えないので(仕様?) http://127.0.0.1:8000/debian.ogg とIPで入力します。

DVの映像が表示されたら、webcamstudioを使って縮小の必要はないので、ControlsタブからFormatのEnable Rescalingのチェックを外します。 次にAudioタブで音声レベルを調整します。

あとはwebcamstudioを使って中継と同じように中継します。

問題点

DVソースをキャプチャしてエンコード、ストリーミングしたものをwebcamstudioに渡しているので、超絶CPU負荷が高いです。 ffmpeg2theoraだけでデュアルコアCPUのCPU一つをまるまる使ってました。

おそろしく負荷が高いのでffmpeg2theora部分をOgg Theoraの変換だけして、webcamstudioのほうで映像のサイズ変更や音声などを変えようとしたら、webcamstudioはその辺のことが苦手らしく、もっと負荷がかかってしまいました。

逆にffmpeg2theoraで映像、音声に手を加えてからwebcamstudioに渡すようにすると、負荷が下がって60〜70%ぐらいにまで下がったので今のスタイルに落ち着きました。

_ debconfのVideo Teamが使ってるDVSwitchとか資料の羅列

使ってみようと思ったけどよくわかんね。というかIEEE1394ドライバだけど古いものを使う前提になってるよね。