【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マークから選択して有効にする。
これで無事、ホストに接続されたUSBカメラをゲストで認識することができた。
なんとかうちの娘犬の様子を見ようと同じようにCentOSでUVCカメラを認識させようとしていますが、なかなか進みません。
返信削除開示していただいている情報どおり、まず
File not found...となったので、
# mv /lib/modules...
# ln -s /usr/src/kernels...を実行、次に
#make....したところ
やはり、File not found:
困っています。
私の場合、uvcvideo-214c94aa62aa
kernel version 2.6.18
どの情報をお知らせしたら適切な回答をいただけるかも分からずスミマセン。
なにか解決のヒントをいただけると幸いです。
こんにちは。
返信削除カーネルのバージョンによってコマンドが少し違うので、チェックポイントとしては、
・yum install kernel-develでkernel-develがインストールされているか
・kernel-develのインストール先をちゃんとシンボリックリンクとしたか(kernelバージョンによって違うのでフォルダがあるか確認)
・ちゃんとシンボリックリンクを貼ればfile not foundで怒られるファイルが存在するはず
ざっと思いつくのはこんな感じでしょうか。
ストリーミングのサーバをたてたいと思い、まずはUSBカメラをLINUXのサーバに認識させたいなっと思っているところ、このページにたどり着きました。
返信削除非常に丁寧に記載されていて本当に助かりました。現在make中です。
ありがとうございました。
いちおう怪しいものではないので。。。。いちおう、自分のブログのリンク張っていきますが。。。技術的なものではないです。。。。すんません。
以前コメントさせていただいたzom2です。記載されております記事を元にCentOS 5.4で挑戦しておりました。
返信削除コードのダウンロード、make、make installまで終わり、UVC対応のカメラロジクールC200を取り寄せ、接続したところ、Apr 12 00:05:32 localhost kernel: usb 1-4: new high speed USB device using ehci_hcd and address 5
Apr 12 00:05:32 localhost kernel: usb 1-4: configuration #1 chosen from 1 choice
Apr 12 00:05:33 localhost kernel: v4l1_compat: disagrees about version of symbol struct_module
とmessagesログに出力され、/dev/video0が存在していません。
・・・・もしこの現象についてご存じでしたら教えていただければと思います。
よろしくお願いいたします。
> zom2さん
返信削除こんにちは。
その現象に出会ったことはないですが、ログメッセージを見る限り、インストールしたドライバでC200にアクセスするのができないのかな?
ドライバとカメラ間の問題のような気がします。
ありがとうございます。
返信削除もうちょっと自分でなんとかしてみます。。。。やっぱubuntuがいいのか・・・な。