第6回 Linux + Che-ez! SPY(Z)でストリーミング配信(ハードウェア編)
2002/8/2
FreeBSDの話題ばかりでは顧客満足度(CS)が伸びないので、今回はFreeBSDよりも圧倒的にユーザが多い(と思われる)Linuxの話題をします。
そもそもの発端は、SoftwareDesign2002/7月号に「Linuxで楽しむストリーミング」という特集があって、それを参考にしながら実験してみました。
最近流行のRealによるリアルタイム配信をしたかったのですが、特集ではRealServerについての説明はあったのですが、エンコーダの説明が無かったのでその辺でちょっとだけ苦労しました。
1.ハードウェアの選択
ビデオデバイスとオーディオデバイスがあります。オーディオは比較的楽に設定できると思うのでここでは説明しません。
というか、私がやったときは特になにも設定しなくても動いていたので、説明のしようがないのです(汗)
ということで、ビデオデバイスの話です。SoftwareDesignの特集には3つの方法が紹介されています。
(1)ビデオキャプチャカード
(2)USBカメラ
(3)DVカメラとIEEE1394
今回は(2)のUSBカメラで配信することにしました。
特集ではOV511チップを使ったCreativeのWebCAM3がいいと書いてあったのでさっそく秋葉に探しにいったのですが、WebCAM3は生産完了していて、どこにも置いてありません。かなり入手困難です。
最新のWebCAM5はOV511チップじゃないので心配が残ります。
そこで、いろいろと動作報告を見てみると、Che-ez! babeをLinuxで動かしたという報告があったのでこれを使わせてもらうことにしました。
それに万が一Webカメラとして動かなくてもデジカメとして使えますから失敗時のダメージも少なくて済みます(笑)
2.システム構成
PC:Toshiba Dynabook3380(PentiumII-400MHz 128MB)
OS:RedHatLinux 7.2 kernel2.4.7
配信サーバ:RealServer 8.0.2 Free版
エンコーダ:RealProducer8.5 Free版
USB:UHCIドライバ
カメラ:Che-ez! SPY(Z)
オーディオ:Dynabook内蔵(maestro)
3.カーネルの準備
カーネルの準備といってもそれほどたいしたことは無いと思います。
Video for Linuxを有効になっていればカーネルの再構築をする必要はありません。
私がインストールした2台のPCにははじめからVideo for Linuxがデフォルトで有効になっていたのでたぶんなにもしなくてもいいでしょう。
ですが、後述するChe-ez!を認識させてあげるためには、少なくともkernel-sourceが入っていないとダメなようです。
rpmで確認して入っていなければ入れておきましょう。
# rpm -qa | grep kernel
kernel-headers-2.4.7-10
kernel-source-2.4.7-10
kernel-2.4.7-10
こんな感じで出ればいいです。
出なかったらrpmなどで入れてあげましょう。
万が一のことを考えるとkernelの開発環境は入っていた方がいいので、RedHatのインストール時に「カーネル開発者」にチェックを入れておくことをおすすめします。これを入れておけばgccやらmakeやらカーネルの素やらが全部入ってくれます。
4.モジュールのインストール
さっそくモジュールを組み込みます。
Che-ez!はstv680というモジュールを組み込むのですが、RedHat7.2では標準ではモジュールが添付されていません。
私はこのモジュールをLINUX STV680 USER SUPPORTのページで入手しました。
さっそく展開してmakeしてみましょう。
% tar zxvf stv680-0.25.tar.gz
% cd stv680-0.25
% make
gcc -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -fomit-f
rame-pointer -pipe -march=i586 -malign-functions=4 -fno-strict-aliasing -DMODU
LE -DMODVERSIONS -include /usr/src/linux/include/linux/modversions.h -c stv680.c
-o stv680.o
stv680.c:1:13: /usr/src/linux/include/linux/modversions.h: そのようなファイルや
ディレクトリはありません
make: *** [stv680.o] エラー 1
怒られてしまいました。
modversions.hが無いと言われます。
それもそのはず、RedHat7.2の場合/usr/src/linux-2.4.7-10/include/linux/modversions.hにあるのです。
ということでパッチをあてます。stv680.patch
といっても動作保証はできません。要するにmodversions.hにうまいこと導いてあげればいいのでそんなに難しくないと思います。
% patch -p0 < stv680.patch
% make
gcc -D__KERNEL__ -I/usr/src/linux-2.4.7-10smp/include -Wall -Wstrict-prototypes
-O2 -fomit-frame-pointer -pipe -march=i586 -malign-functions=4 -fno-strict-ali
asing -DMODULE -DMODVERSIONS -include /usr/src/linux-2.4.7-10/include/linux/m
odversions.h -c stv680.c -o stv680.o
ちなみにわが家にあるRedHatはSMPで動かしているのでuname -rの結果が2.4.7-10smpになってしまうため上記のパッチだけではダメでした。
SMP用に汎用的なパッチを書くと面倒なので、linux-2.4.7-10のシンボリックリンクをlinux-2.4.7-10smpに作って逃げました。
すぐにmake installしたいところですが、いったんモジュールを仮組み込みしないとうまくいかないようです。
% su -
# cd /path/to/stv680-0.25
# insmod ./stv680.o
stv680.o: unresolved symbol video_unregister_device_Rsmp_a5512cf0
stv680.o: unresolved symbol video_register_device_Rsmp_f59adb7b
stv680.o: unresolved symbol video_proc_entry_Rsmp_db04a241
# make install
`stv680.o' -> `/lib/modules/2.4.7-10smp/kernel/drivers/usb/stv680.o'
depmod -a
insmodするとなんか怒られるのですが、とりあえずうまくいっているのでほっとくことにします。
これでデバイスは生きます。
USBにChe-ez!を挿してみます。
dmesgなどでデバイスが出てきたら成功です。
他にも確認のために/proc/devicesや/proc/video/stv680/video0などを見てみましょう。
本来ならここでキャラクタデバイスを作成するのですが、stv680をmake installするときに勝手に作ってくれたようなのでほっといてもいいようです。
# dmesg | tail
〜省略〜
Linux video capture interface: v1.00
usb.c: registered new driver stv680
stv680.c: [stv680_probe:1575] STV(i): STV0680 camera found.
stv680.c: [stv680_probe:1603] STV(i): registered new video device: video0
stv680.c: [usb_stv680_init:1676] STV(i): usb camera driver version v0.25 registe
ring
stv680.c: STV0680 USB Camera Driver v0.25
#
# cat /proc/devices
〜省略〜
81 video_capture
〜省略〜
#
# cat /proc/video/stv680/video
driver_version : v0.25
model : STV0680
in use : no
streaming : no
num_frames : 2
Current size : 0x0
swapRGB : (auto) off
Palette : 0
Frames total : 0
Frames read : 0
Packets dropped : 0
Decoding Errors : 0
以上でハードウェア編はおしまいです。
次のRealのインストールはソフトウェア編に続きます。
<参考文献>
Software Design 2002/7月号 Linuxで楽しむストリーミング
Che-ez! babeでWebカメラ Dyscipus.jp
SourceForge LINUX STV680 USB SUPPORT