まず、いくつかの仕様:私のコンピュータはHP EliteBook 8460pです。統合されたChicony HP HDウェブカメラが付属しています。
私の問題は、多くのアプリ(少なくともSkypeとguvcview)が同じWebカメラに複数の行を表示していることです。実際にこれを行うと、ls -l /dev | grep video
次の結果が表示されます。
crw-rw---- 1 root video 29, 0 Apr 16 08:13 fb0
crw-rw---- 1 root video 243, 0 Apr 16 08:13 media0
crw-rw----+ 1 root video 81, 0 Apr 16 08:13 video0
crw-rw----+ 1 root video 81, 1 Apr 16 08:13 video1
私は2/dev/video[n]
つの(統合)ウェブカメラを持っています。 Skypeはうまく機能します/dev/video0
が、うまくいきません/dev/video1
。 guvcviewも同様です。
Logitechカメラなどの他のUSBウェブカメラを接続すると、次の結果が表示されますdmesg
。
[21222.638802] usb 2-2: new high-speed USB device number 20 using xhci_hcd
[21222.970684] usb 2-2: New USB device found, idVendor=046d, idProduct=08c2, bcdDevice= 0.05
[21222.970755] usb 2-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[21222.972518] uvcvideo: Found UVC 1.00 device <unnamed> (046d:08c2)
[21226.044535] uvcvideo 2-2:1.0: Entity type for entity Extension 4 was not initialized!
[21226.044538] uvcvideo 2-2:1.0: Entity type for entity Extension 8 was not initialized!
[21226.044540] uvcvideo 2-2:1.0: Entity type for entity Extension 10 was not initialized!
[21226.044541] uvcvideo 2-2:1.0: Entity type for entity Extension 9 was not initialized!
[21226.044543] uvcvideo 2-2:1.0: Entity type for entity Extension 3 was not initialized!
[21226.044545] uvcvideo 2-2:1.0: Entity type for entity Processing 2 was not initialized!
[21226.044547] uvcvideo 2-2:1.0: Entity type for entity Camera 1 was not initialized!
[21226.044746] input: UVC Camera (046d:08c2) as /devices/pci0000:00/0000:00:1c.7/0000:25:00.0/usb2/2-2/2-2:1.0/input/input35
[21226.137559] usb 2-2: Warning! Unlikely big volume range (=3072), cval->res is probably wrong.
[21226.137569] usb 2-2: [5] FU [Mic Capture Volume] ch = 1, val = 4608/7680/1
そして次ls -l /dev/ | grep video
:
crw-rw---- 1 root video 29, 0 Apr 16 08:13 fb0
crw-rw---- 1 root video 243, 0 Apr 16 08:13 media0
crw-rw---- 1 root video 243, 1 Apr 16 14:06 media1
crw-rw----+ 1 root video 81, 0 Apr 16 08:13 video0
crw-rw----+ 1 root video 81, 1 Apr 16 08:13 video1
crw-rw----+ 1 root video 81, 2 Apr 16 14:06 video2
crw-rw----+ 1 root video 81, 3 Apr 16 14:06 video3
3つの新しい項目: /dev/media1
、/dev/video2
および/dev/video3
。
さらに、最大4つの新しいデバイスを追加できるSonyウェブカメラ(CEVCECM)も発見されました。丸太dmesg
:
[21927.665747] usb 2-2: new high-speed USB device number 23 using xhci_hcd
[21927.817330] usb 2-2: New USB device found, idVendor=05e3, idProduct=0608, bcdDevice= 9.01
[21927.817339] usb 2-2: New USB device strings: Mfr=0, Product=1, SerialNumber=0
[21927.817343] usb 2-2: Product: USB2.0 Hub
[21927.824119] hub 2-2:1.0: USB hub found
[21927.824814] hub 2-2:1.0: 4 ports detected
[21928.113733] usb 2-2.4: new high-speed USB device number 24 using xhci_hcd
[21928.223184] usb 2-2.4: New USB device found, idVendor=054c, idProduct=097b, bcdDevice=21.12
[21928.223192] usb 2-2.4: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[21928.223197] usb 2-2.4: Product: CEVCECM
[21928.223201] usb 2-2.4: Manufacturer: Sony
[21928.223206] usb 2-2.4: SerialNumber: DHZD10412EUHK1
[21928.227506] uvcvideo: Found UVC 1.00 device CEVCECM (054c:097b)
[21928.242592] uvcvideo: Unable to create debugfs 2-24 directory.
[21928.242780] uvcvideo 2-2.4:1.0: Entity type for entity Extension 7 was not initialized!
[21928.242783] uvcvideo 2-2.4:1.0: Entity type for entity Extension 3 was not initialized!
[21928.242785] uvcvideo 2-2.4:1.0: Entity type for entity Processing 2 was not initialized!
[21928.242787] uvcvideo 2-2.4:1.0: Entity type for entity Camera 1 was not initialized!
[21928.242877] input: CEVCECM: CEVCECM as /devices/pci0000:00/0000:00:1c.7/0000:25:00.0/usb2/2-2/2-2.4/2-2.4:1.0/input/input38
生成されたデバイスファイルには次のものが含まれますls -l /dev | grep video
。
crw-rw---- 1 root video 29, 0 Apr 16 08:13 fb0
crw-rw---- 1 root video 243, 0 Apr 16 08:13 media0
crw-rw---- 1 root video 243, 1 Apr 16 14:18 media1
crw-rw----+ 1 root video 81, 0 Apr 16 08:13 video0
crw-rw----+ 1 root video 81, 1 Apr 16 08:13 video1
crw-rw----+ 1 root video 81, 2 Apr 16 14:18 video2
crw-rw----+ 1 root video 81, 3 Apr 16 14:18 video3
crw-rw----+ 1 root video 81, 4 Apr 16 14:18 video4
crw-rw----+ 1 root video 81, 5 Apr 16 14:18 video5
5つの新しい項目:/dev/media1
および/dev/video2
。/dev/video5
私は使用するのに正しいファイルがこれらだと思います/dev/media[n]
が、Skypeとguvcviewはどういうわけかそうではありません/dev/video[n]
。
たとえば、Webcamoidを使用すると、この問題は発生しません。
誰でもアイデアがあれば楽しくなりますよ。その間ずっと調査します…
--- 2019-05-14 修正済み ---
興味深い情報を得ましたv4l2-ctl --device=/dev/video* --all
。 Chicony HP HD Webカメラの場合、デバイス機能が異なる2つのデバイスファイルがあります。
# Devices capabilities for /dev/video0
Video Capture
Streaming
Extended Pix Format
# Devices capabilities for /dev/video1
Metadata Capture
Streaming
Extended Pix Format
USBウェブカメラでも同様の結果が得られました。結局のところ、Skypeとguvcviewができないのは、Video Capture
デバイス機能をサポートするビデオデバイスのみをリストすることです。
答え1
2番目のデバイスは、1番目のデバイスのビデオデータのメタデータを提供します。このパッチには新しいデバイスが導入されます。
V4Lメタデータインターフェースの詳細については、こちらをご覧ください。
https://linuxtv.org/downloads/v4l-dvb-apis/userspace-api/v4l/dev-meta.html
一般的なUSBビデオデバイスの場合、これは主に次の機能を提供します。より正確なタイムスタンプ情報。 Intel RealSenseシリーズなどのカメラでは、画像キャプチャ方法のより広範なデータ提供。
おそらく、このデータは互換性のある方法でプライマリデバイスノードに簡単に渡すことができないため、別々のデバイスノードに分割されます。しかし、(a)このメタデータに興味がないアプリは今や追加のデバイスをフィルタリングする必要があり、(b)メタデータに興味のあるアプリは両方のデバイスをまとめる方法が必要なため、少し苦痛です。
答え2
本当に迷惑ですが、解決策を見つけました。 udevがメタデータのデバイスノードの代わりに「実際の」カメラにシンボリックリンクを割り当てるようにします。 udev(?) と同じです。
udevadm info -n /dev/video0
「同じ」
udevadm info -n /dev/video1
ですが、ATTR{index}が異なります。だから私の2台のカメラについては、次のように終わります/etc/udev/rules.d/99-cam.rules
。
SUBSYSTEM=="video4linux", ATTRS{idVendor}=="eb1a", ATTRS{idProduct}=="299f", ATTR{index}=="0", MODE="0664", GROUP="video", SYMLINK+="cams/cam1"
SUBSYSTEM=="video4linux", ATTRS{idVendor}=="1908", ATTRS{idProduct}=="2311", ATTR{index}=="0", MODE="0664", GROUP="video", SYMLINK+="cams/cam2"
その後、/dev/cams/camX
アプリケーションで代わりに使用します。/dev/videoY