デバイス名を固定する

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

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

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

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

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

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

 dmesgやlsusb

dmesg
[text]
uvcvideo: Found UVC 1.00 device UCAM-DLG200H (056e:7007)
[/text]

lsusb
[text]
Bus 001 Device 015: ID 056e:7007 Elecom Co., Ltd
[/text]

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

[bash]
sudo vi /etc/udev/rules.d/10-local.rules
[/bash]

[text]
#web camera for UCAM-DLG200H
KERNEL=="video*",BUS=="usb",SUBSYSTEM=="video4linux",SYSFS{idProduct}=="7007",SYS FS{idVendor}=="056e",SYMLINK+="webcam"
[/text]

udevを再起動は必要ない

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

確認

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

追記

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

参考


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です