Linux Install Memo

サーバー管理者によるLinux関連ソフトのインストールメモ

Home » □LinuxでUstream(ffmpeg使って高解像度配信!?)

□LinuxでUstream(ffmpeg使って高解像度配信!?)

実家のライブカメラが壊れたので、AxisとかPanasonicのネットワークカメラをあれこれ物色したけど、どうにも高いというか、また壊れたらなーと思って、今回はLinuxでUSBのWebCam使ってUstreamが出来ないかな、と調べてみた。

最近のLinuxならUSBウェブカムは大抵UVC対応なので、プスッと挿して最初から入っているビューアー(レコーダー)ソフトを使うと何の句もなく見ることが出来る。で、見れるのは/dev/video0とかにカメラが繋がっているからで、FlashについてもLinuxにちゃんとインストールできれば、最低解像度でさっくりUstreamが出来ちゃったりするんだけど、どう見てもこれってQCamレベルの画質(160×120)。

ビューアー(レコーダー)ソフトでは1280×720とか、カメラがサポートしている解像度で見れるので、それでやって欲しいんですけど…FireFoxとかでブラウザからやろうとすると無理みたい。

で、高解像度にするならFME…といいたいところだけど、Linux用のなんてでていない。

でていないけど、データとしては高解像度になっているので、これをUstream側にポイッとできればいいわけで、みんなあれこれがんばっています。

ちょっと前だとv4l2loopbackとかでループバックさせた上でWebcamstudioを使うとかがあったけど、でもJavaを入れたりとか面倒なのと、当然Javaなので重い。他にもデスクトップ配信をするためのツールが幾つかあったりするけど、こちとらWebCamの映像をそのままUstreamで中継したいのでちょっと違う。

で、2011年02月あたりに日経なんたらで、ffmpegを使ってFMEの代わりとし、高解像度で中継する、と言う記事が出たらしい。でもこれには落ちがあって、いろいろがんばっても二~三分(百数十秒)するとffmpegが止まるという。確かに試してみるとそれくらいで止まって、ご丁寧なことにコマンドプロンプトに戻る。
これはいただけない、なんでこんなの記事にした!?さすが日経なんたら。

いろいろ調べてみると、ffmpegは2010年06月あたりにlibrtmpを経由してrtmpプロトコルに対応するようになったらしい。rtmpプロトコルって何ぞや、と言うとFMEとかとUstream送出用クライアントとの間でやりとりするリアルタイムメッセージプロトコルというものらしい。

でもこれって時間と言うよりデータ量で止まってしまっているんじゃないかと思う。だいたい5MBちょい(6MB行かない)流すとぷつっと止まる。で、rtmpと5MBで検索するとこんなサイトが引っかかったりするので、なんか問題解決に少し近づいてきた感があるんですけどどうでしょう?

ま、もう少しがんばってみます。
HDなUSBカメラ(Microsoftとかロジクールのとか)で見てみると、すげーきれいにUstreamできるんで、何とかしたい。

2011.09.28 追記1

librtmpのmanは見たほうがいいね。Vine6のffmpegはPentium-M(1.3GHz…つまりThinkPad X31)にインストールするのにえらい時間がかかったけど、librtmpにも対応しているみたいだったし。と言うわけでリンクおいときます。

2011.09.28 追記2

家に帰ってきてから早速あることを試してみた。一度/dev/video0からflvフォーマットで5MBを超えるファイルが作れるかということから。これはあっさりと10MBが余裕で作れた。つづいて、作った10MBのファイルをflvのままrtmpで出力すると…4MBでffmpegが止まる。これはつまりffmpegがどうのというわけではなくて、librtmpがアレなのか、ffmpegがlibrtmpをうまく使えていないということか。ますますソースを見ないといけなくなりそうな感じだな…

2011.09.29 追記3

その後もあちこちウロウロしたり、GoogleChrome先生の力を借りながらあちこちの海外サイトを見ても、やっぱりffmpegではUstremがうまく出来ないらしい。

こんなサイトがあったので、自分も思うところがあってwiresharkを入れて見てみたけど、自分の場合には動きがちょっと違った。というか、ブラウザでUstreamで配信開始しなくても、単にffmpegでだらだら送信するだけでもやっぱりこけるのでなんだかよく判らない。まぁこのサイトの人もjustin.tvを薦めているみたいだし、確かにこれでもやりたかったことはできそうなので、Ustreamはあきらめてjustin.tvで長時間ストリーミングを試すことにする。

ちなみにffmpegが落ちても再びストリーミングを開始するようなシェルスクリプトにしたので、ストリーミングそのものはマシンかカメラでもハングしない限りは延々と続く…と思うんだけどどうでしょう?

2011.10.05 追記4

上記からjustin.tvにだらだらと長時間ストリーミングしているんですが、なんかしらのタイミングで中継が途切れたとしても、無限ループなスクリプトにしたので、見た感じずーっと中継しているように見えます。(過去の中継記録とかみると、10時間とか86時間くらい中継した形跡もある)

これでいいんじゃね?という気になってます。が、justin.tvのサイトを見てみると、時々いい解像度で中継している人がいるんだけど、これってH.264でストリーミングしているのかなぁ?X31だとそこまではちょっと非力なんじゃないかと思って試していないけど、気が向いたら試してみるかな?

2011.10.31 追記5

このサイトも収まっているサーバーにWEBCAMつなげようとしたら、Vine5.xでffmpegパッケージとかが古かったのでrtmpに対応していなかった。なのであらためて本家からffmpegの最新版(0.8.5)を取ってきてインストールしてみる。もともとVineはself-buildでffmpegを入れるので、残りの必要なライブラリ(librtmpとdevel)を入れて、もともとのパッケージのffmpegで表示される./configureオプションの最初の方だけ(笑)をコピーしてmakeしてみる。果たして!?

2011.11.02 追記6

気分的にはまだ11.01なんだけど、一応これを書いている時点では02日ってことで。
本シリーズ、衝撃の完結となりました。詳しくは「□LinuxでUstream(ffmpegで高解像度配信!!完結編)」をご覧ください。

 

Name of author

Name: admin

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です