Linux でデスクトップを ustream …できない

Linux でデスクトップを ustream しようとした記録。結局できなかったんだけど、悔しいので思い出せる分だけ記録してみる。

Screencast4Linux

単純にgoogle:linux ustreamググると最初に目につくのがこのソフト。

http://yanbe.org/screencast4linux/

これを使えばすぐに達成できるに違いない!というわけで早速コンパイルを試みるもうまくいかず。
わからないなりにソースを読んだりして見たものの大した知識のない私にわかるはずもなく、半ば故意犯的に以下のように呟いたところ、

thinca:
そろそろギブアップして @yanbe さん本人に聞いてみようかとかいう考えが頭をよぎる。実際その方が速そうではあるけど…。

http://twitter.com/thinca/status/3620189249

以下のようなお答が!

yanbe:
@thinca 去年ぐらいにLinuxでビデオデバイスを扱うフレームワークVideo4LinuxからVideo4Linux2に移行してドラスティックな変化があったのですが、screencast4linuxはその変化についていけてません。obsoluteって書いておくべきでした

http://twitter.com/yanbe/statuses/3620391454

yanbe:
@thinca 同じようなことはrecordMyDesktopというソフト http://bit.ly/1jxJiL とここにおいてある http://www.naniyueni.org/archives/ の streaming.sh というスクリプトでできそうです。ご参考まで

http://twitter.com/yanbe/statuses/3620418784

ありがとうございます!せこい呟きしてすいませんでした!
というわけで早速方針転換、教えて頂いた組み合わせを試すことに。

recordMyDesktop

こちらは Portage にあったのでさっくりインストール。

# emerge recordmydesktop

とっても楽ちん。

streaming.sh

とりあえず実行する前に中身を見てみたところ、手元の環境にないコマンドなどがいくつか。先にこいつらを用意してやる必要がある。

  • vloopback.ko (カーネルモジュール)
  • xwininfo
  • mjpegtools_yuv_to_v4l

vloopback

これは仮想のビデオデバイスを作るものらしい。

入手

VideoFourLinuxLoopbackDevice < Motion < Foswiki

ここでソースを手に入れる。のはいいんだけど、vloopback-1.2.tar.gz の他にページ最下部の Attachments を見ると vloopback-1.3.diff と vloopback-1.4.diff もある。
更に別にSubversionのリポジトリもある。
1.2は現在私が使っているカーネルのバージョン gentoo-sources-2.6.30-r4 ではビルドできなさそうだし実際できなかったので、最新にして再挑戦。
普通に考えたらリポジトリが一番最新だろと思ってチェックアウトしたら、中身のバージョンは 1.3-trunk になってて???状態だったので、それに対して 1.4.diff を(大した量じゃなかったので)人力で当てた。1.3-trunk は 1.3 ともまた微妙に違っていたので。一体なんだってんだ。
多分普通に 1.2 の tar に 1.3 1.4 の順で当てれば動くと思います。試してないけど。

まあとにかくこの状態で make したらちゃんとビルドできました。

使う

モジュールとして読み込むと /dev/video0 と /dev/video1 というものができる。数字は環境に寄るらしい。で、片方が input でもう片方が output なのでそれを調べる。

# dmesg | grep vloopback
[vloopback_init] : video4linux loopback driver v1.3-trunk
[vloopback_init] : Loopback 0 registered, input: video0, output: video1
[vloopback_init] : Loopback 0 , Using 2 buffers

これにより /dev/video0 が input で /dev/video1 が output だと判明。つまり、 /dev/video0 に映像を流し込んでやると /dev/video1 はまるでその映像が WebCam から取り込まれたように扱えるわけだ。

xwininfo

これは X のウィンドウの情報を取得するものらしい。普通に Portage にあったのでインストール。

# emerge xwininfo

mjpegtools_yuv_to_v4l

なんかよくわからんけど見た限りだと yuv を v4l に変換する物の様。/dev/video0 に流し込むデータの形式は v4l (video4linux) である必要があるんですね。
streaming.sh 内では recordmydesktop の出力を ffmpeg で yuv (?) に変換した後更にこのコマンドに渡してる。ffmpeg が直接 v4l を吐ければこれ要らんのに。ブツブツ。などと言いながらブツを探す。

http://panteltje.com/panteltje/mcamip/

ここの中頃にある mjpegtools_yuv_to_v4l-0.2.tgz を頂く。これはあっけなくビルド出来たので、パスの通ってる場所に放り込んだ。

起動

streaming.sh を実行すると、初回は vloopback を読み込ませるために sudo を実行するのでパスワード入力。
続いて xwininfo はどうやらインタラクティブに情報を得るためのウィンドウを選ぶようでカーソルが十字になるので、適当なウィンドウを選ぶ。ちなみに recordmydesktop は選んだ時のウィンドウの位置をレコードするらしい。ウィンドウ追尾しないのかよ。
そうすると ffmpeg が変換を始める。vlc がインストールしてあったので、キャプチャーデバイスを開くで /dev/video1 を指定すると…。


ちゃんと撮れてる!


いやーここまで一直線に書いたけど途中かなり紆余曲折がありましたともさ。覚えてないのもあって端折ったけど。感動した。

が、しかし

vlc で再生できても意味ないんです。ustream で流すのが最終目標。

で、ustream に行って、カメラデバイスも認識されてる。よしよし、と思いきや映像が全然表示されない。一体どういうことだ。
そういやWindowsの時に出る、カメラデバイスに接続します、許可、見たいなのも出てこない。さらに試しに START BROADCAST を押しても全く反応なし。ダメだこりゃorz

今ここで止まってるところ。まーまだ完全に諦めたわけじゃないけど打つ手がないのも確か。どうしたもんかなー。