【Linux】UVC対応カメラをCentOSで認識させる

動画のストリーミングライブ配信の調査でffmpegとffserverでライブ配信したときのメモ。

まずはUSBカメラをCentOSに認識させるところから。UVC(USB Video Device Class)対応カメラなら共通のドライバをインストールすることで対応可能。

Linux kernelのバージョンが2.6.26以上ならUVCドライバが標準でついているので別途インストールは必要ないらしい。最近のUbuntuだったらカーネルのバージョンが新しいので標準でついている。

やってみたのはCentOS5.2でkernel 2.6.18-92.1.22.el5。64bit OS。

ちなみにカーネルのバージョンを確かめるのは
# uname –a

UVCドライバについてはまずここ(英語)を参照。サポートしているデバイスの一覧があるので自分のWebカメラが対応しているか確認。

そこの下の方にリンクがあるけど、ドライバはここのページからダウンロード。ページの上にあるgzのリンクから落とす。

サーバに配置して解凍+インストール

# tar xzvf uvcvideo-14d5abfc0d7e.tar.gz
# cd uvcvideo-14d5abfc0d7e
# make
# make install

コンパイルに必要なgccとかkernel-develは先にインストールが必要

これでログファイルを監視しながらUSBを挿してみる

# tail -f /var/log/messages

挿した瞬間に次のメッセージが表示されればOK。

kernel: usb 1-1: configuration #1 chosen from 1 choice
kernel: Linux video capture interface: v2.00
kernel: uvcvideo: Found UVC 1.00 device <unnamed> (046d:0992)
kernel: input: UVC Camera (046d:0992) as /class/input/input3
kernel: usbcore: registered new driver uvcvideo
kernel: USB Video Class driver (v0.1.0)

ちゃんと/dev/video0ができている。

別の環境(CentOS 5.2 i686)でコンパイルしたときは下のエラーでコンパイルできなかった。

File not found: /lib/modules/2.6.18-128.1.10.el5/build/.config at ./scripts/make_kconfig.pl line 32, <IN> line 4.
make[1]: *** `config-compat.h' に必要なターゲット `.myconfig' を make するルールがありません.  中止.

kernel-develをインストールしてないだけかと思い別途インストールしても直らない。

どうやらkernel-develを参照したいみたいなのでシンボリックリンクを手動で作成。

# mv /lib/modules/2.6.18-128.1.10.el5/build /lib/modules/2.6.18-128.1.10.el5/build.bak
# ln -s /usr/src/kernels/2.6.18-128.1.16.el5-686/ /lib/modules/2.6.18-128.1.10.el5/build

これでmakeとmake installが通った。

実は64bitのCentOSがVMware Server 2.0がインストールされていて、ゲストのCentOSにffmpegをインストールしていたので、2つドライバをインストールする必要があったのです。

ゲストマシンにUSBを認識させるためには「USB Controller」を追加して、上に出てくるUSBマークから選択して有効にする。

image

これで無事、ホストに接続されたUSBカメラをゲストで認識することができた。