デバイス名を固定する

linuxでウェブカメラを接続すると自動で/dev/video0というデバイス名でマッピングしてくれます。
それはよいのですが、ウェブカメラを複数台接続する場合、接続順によっては/dev/video0と/dev/video1が入れ替わってしまいます。

これを解決するにはudevを利用するとよいです。

udevは/dev/udev/rules.dにルールファイルを置くことでそのルールに従ってデバイスをマッピングしてくれる仕組みです。

例:USBのウェブカメラを/dev/webcamにマッピング

 必要なことはルールファイルを作成することだけです。

プロダクトIDとベンダーIDを調べる

 dmesgやlsusb

dmesg

uvcvideo: Found UVC 1.00 device UCAM-DLG200H (056e:7007)

lsusb

Bus 001 Device 015: ID 056e:7007 Elecom Co., Ltd

調べた情報を元にルールファイルを記述

sudo vi /etc/udev/rules.d/10-local.rules
#web camera for UCAM-DLG200H
KERNEL=="video*",BUS=="usb",SUBSYSTEM=="video4linux",SYSFS{idProduct}=="7007",SYS    FS{idVendor}=="056e",SYMLINK+="webcam"

udevを再起動は必要ない

 udevdを再起動しなくてもファイルが更新されれば有効。

確認

 これでUSBのウェブカメラを抜き差ししてみると、/dev/webcamが生成され利用出来るようになります。

追記

 ・上記の方法で利用できたような気がするのだが、後で触ってみたらmjpeg-streamerからはアクセス出来ない。ffmpegからはできるので、mjpeg-streamerの使い方が悪いのか処理が悪いのか。
  ソース直して、引数のシンボリックリンクをリアルパスで渡すようにしてみたけどダメ。realpathで取得したパスをデバイス名に指定するようにしたら一応できるようになった。
  ついでにv4l2のAPI仕様書っぽいの見つけたのでメモVideo for Linux Two API Specification

参考

このエントリーをはてなブックマークに追加
Share on Facebook

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>