【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カメラをゲストで認識することができた。

コメント

  1. なんとかうちの娘犬の様子を見ようと同じようにCentOSでUVCカメラを認識させようとしていますが、なかなか進みません。
    開示していただいている情報どおり、まず
    File not found...となったので、
    # mv /lib/modules...
    # ln -s /usr/src/kernels...を実行、次に
    #make....したところ
    やはり、File not found:
    困っています。
    私の場合、uvcvideo-214c94aa62aa
    kernel version 2.6.18
    どの情報をお知らせしたら適切な回答をいただけるかも分からずスミマセン。
    なにか解決のヒントをいただけると幸いです。

    返信削除
  2. こんにちは。
    カーネルのバージョンによってコマンドが少し違うので、チェックポイントとしては、

    ・yum install kernel-develでkernel-develがインストールされているか

    ・kernel-develのインストール先をちゃんとシンボリックリンクとしたか(kernelバージョンによって違うのでフォルダがあるか確認)

    ・ちゃんとシンボリックリンクを貼ればfile not foundで怒られるファイルが存在するはず

    ざっと思いつくのはこんな感じでしょうか。

    返信削除
  3. ストリーミングのサーバをたてたいと思い、まずはUSBカメラをLINUXのサーバに認識させたいなっと思っているところ、このページにたどり着きました。
    非常に丁寧に記載されていて本当に助かりました。現在make中です。
    ありがとうございました。
    いちおう怪しいものではないので。。。。いちおう、自分のブログのリンク張っていきますが。。。技術的なものではないです。。。。すんません。

    返信削除
  4. 以前コメントさせていただいた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が存在していません。

    ・・・・もしこの現象についてご存じでしたら教えていただければと思います。

    よろしくお願いいたします。

    返信削除
  5. > zom2さん
    こんにちは。
    その現象に出会ったことはないですが、ログメッセージを見る限り、インストールしたドライバでC200にアクセスするのができないのかな?
    ドライバとカメラ間の問題のような気がします。

    返信削除
  6. ありがとうございます。
    もうちょっと自分でなんとかしてみます。。。。やっぱubuntuがいいのか・・・な。

    返信削除

コメントを投稿

このブログの人気の投稿

【.NET】DataGridViewを選択した際に背景色を変更しない

【PostgreSQL】ROWNUMのように行番号(現在行)を取得するROW_NUMBER

Can't open PID file /var/run/nginx.pid (yet?) after start: Too many levels of symbolic links