web-dev-qa-db-ja.com

4つの/ dev / videoエントリ、ただし1つのカメラ

Dell XPS 9370を使用していますが、カメラが1台だけであることがわかっています。だが ls /dev/video*結果は/dev/video0 /dev/video1 /dev/video2 /dev/video3、つまり4つの異なるカメラデバイス。
これらの4台のカメラは、アプリケーションなどにバブルアップします。 Skypeには4つのカメラがリストされていますが、最初のカメラ(/dev/video0)は機能します。

他のエントリの出所を誰かが知っていますか?または、それらを上位層から隠す方法は?

ここで与えられた答え https://unix.stackexchange.com/questions/512759/multiple-dev-video-for-one-physical-device は良い答えです。 Skypeにも同じ問題があり、カーネルを4.4.xから5.1.xにアップグレードしたときにSkypeが起動したため、どこかでuvcvideoモジュールが異なる出力を生成しました。しかし、それはの出力が指摘されています

v4l2-ctl --device=/dev/video* --all

は、各エントリが異なる機能を持っていることを示しています。私のlogitech usbカメラの場合、1つだけがビデオキャプチャを持っています。したがって、これはおそらくSkypeのバグであり、カーネルがおそらくバグを自分で修正した後に発生し、「ビデオキャプチャ」機能を持つエントリを表示するだけではありません。

3
sabby

各カメラには2番目のメタデータデバイスがあります 追加 出力用 タイムスタンプ情報 または フレームごとの詳細メタデータ

v4l2-ctl デバイスに関する詳細情報を取得し、v4l2-ctl --list-formats --device /dev/videoXに動画ストリームが含まれているかどうかを確認します。

ビデオデータを使用するデバイスのみを一覧表示するには:

for dev in `find /dev -iname 'video*' -printf "%f\n"`
do
  v4l2-ctl --list-formats --device /dev/$dev | \
    grep -qE '\[[0-9]\]' && \
    echo $dev `cat /sys/class/video4linux/$dev/name`
done

これを fzf と組み合わせると、カメラを選択してプログラムを起動できます。

for dev in `find /dev -iname 'video*' -printf "%f\n"`;do; v4l2-ctl --list-formats --device /dev/$dev | grep -qE '\[[0-9]\]' && echo $dev `cat /sys/class/video4linux/$dev/name`;done | fzf | awk '{ printf("/dev/%s", $1) }' | xargs guvcview --device
2
James EJ

各デバイスが何であるかを確認するには、これを実行します(そして、video0の数値をvideo1に変更します)。

cat /sys/class/video4linux/video0/name

Dell XPS 9370をグーグルすると、このモデルには通常のWebカメラに加えて赤外線カメラも搭載されており、赤外線カメラは顔認識による認証に使用できます。 https://wiki.archlinux.org/index.php/Dell_XPS_13_(9370)

たとえばIRカメラを無効にする場合は、dmesgなど、システムに関する詳細情報が必要です。

2
Karl R.