web-dev-qa-db-ja.com

1つの物理デバイスに複数の/ dev / video

最初のいくつかの仕様:私のコンピューターはHP EliteBook 8460pです。統合されたChicony HP HD Webカメラが付属しています。

私の問題は、多くのアプリケーション(少なくとも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]があり、1つの(統合された)Webカメラしかありません。 Skypeは/dev/video0では適切に機能しますが、/dev/video1では機能しません。 guvcviewについても同様です。

Logicoolなどの別のUSB Webカメラを接続すると、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デバイス機能をサポートするビデオデバイスのみをリストすることです。

9
kagmole

2番目のデバイスは、1番目のデバイスからのビデオデータに関するメタデータを提供します。このパッチによって新しいデバイスが導入されました:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=088ead25524583e2200aa99111bea2f66a86545a

V4Lメタデータインターフェースの詳細については、こちらをご覧ください。

https://linuxtv.org/downloads/v4l-dvb-apis/uapi/v4l/dev-meta.html

工場のUSBビデオクラスデバイスの実行の場合、これは主に より正確なタイムスタンプ情報 を提供します。 IntelのRealSenseラインなどのカメラの場合、 画像のキャプチャ方法に関する幅広いデータを提供します

このデータは、互換性のある方法でプライマリデバイスノードに簡単に配信できなかったため、別のデバイスノードに分割されたと考えられます。 (a)このメタデータを気にしないアプリケーションは余分なデバイスを除外する必要があり、(b)メタデータを気にするアプリケーションは2つのデバイスを結合する方法が必要なので、少し面倒です。

7