1 个摄像头的多个 /dev/video 设备导致 udev 规则出现问题

eul*_*ler 6 webcam udev 18.04

由于从 ubuntu 16.04(内核4.15.0-60-generic)升级到 18.04(内核5.0.0-27-generic)v4l 现在每个物理设备返回多个 /dev/video 设备。当尝试使用 udev 规则将视频设备映射到别名时,这会导致问题。/dev/video 设备之一可以流式传输视频,另一个不能。我创建的 udev 别名似乎并没有始终选择正确的 /dev/video 索引(具有流功能的索引)。

我知道这篇文章与此非常相似:

四个 /dev/video 条目但只有一个摄像头

但是,接受的答案(Skype 错误)并没有充分解决我遇到的 udev 问题。

我看到有人在堆栈交换上有类似的问题:

https://unix.stackexchange.com/questions/512759/multiple-dev-video-for-one-physical-device

但是,尚未接受任何答复。

附加信息

电脑品牌/型号:Asus ROG GL503V

网络摄像头品牌/型号:Genius WideCam F100、罗技 C920 等。

v4l2-ctl --list-devices

返回:

USB2.0 PC CAMERA: USB2.0 PC CAM (usb-0000:00:14.0-11):
 /dev/video4
 /dev/video5

USB_Camera: USB_Camera (usb-0000:00:14.0-3):
 /dev/video0
 /dev/video1

HD Pro Webcam C920 (usb-0000:00:14.0-4.1):
 /dev/video6
 /dev/video7

USB2.0 HD UVC WebCam: USB2.0 HD (usb-0000:00:14.0-7):
 /dev/video2
 /dev/video3
Run Code Online (Sandbox Code Playgroud)

以下是 Genius WideCam F100 的详细介绍:

user@AsusROG:~$ sudo v4l2-ctl --list-devices
USB_Camera: USB_Camera (usb-0000:00:14.0-3):
    /dev/video0
    /dev/video1

USB2.0 HD UVC WebCam: USB2.0 HD (usb-0000:00:14.0-7):
    /dev/video2
    /dev/video3

user@AsusROG:~$ sudo v4l2-ctl --device=/dev/video0 --all
Driver Info (not using libv4l2):
    Driver name   : uvcvideo
    Card type     : USB_Camera: USB_Camera
    Bus info      : usb-0000:00:14.0-3
    Driver version: 5.0.21
    Capabilities  : 0x84A00001
        Video Capture
        Metadata Capture
        Streaming
        Extended Pix Format
        Device Capabilities
    Device Caps   : 0x04200001
        Video Capture
        Streaming
        Extended Pix Format
Priority: 2
Video input : 0 (Camera 1: ok)
Format Video Capture:
    Width/Height      : 640/480
    Pixel Format      : 'YUYV'
    Field             : None
    Bytes per Line    : 1280
    Size Image        : 614400
    Colorspace        : sRGB
    Transfer Function : Default (maps to sRGB)
    YCbCr/HSV Encoding: Default (maps to ITU-R 601)
    Quantization      : Default (maps to Limited Range)
    Flags             : 
Crop Capability Video Capture:
    Bounds      : Left 0, Top 0, Width 640, Height 480
    Default     : Left 0, Top 0, Width 640, Height 480
    Pixel Aspect: 1/1
Selection: crop_default, Left 0, Top 0, Width 640, Height 480
Selection: crop_bounds, Left 0, Top 0, Width 640, Height 480
Streaming Parameters Video Capture:
    Capabilities     : timeperframe
    Frames per second: 30.000 (30/1)
    Read buffers     : 0
                     brightness 0x00980900 (int)    : min=-64 max=64 step=1 default=0 value=0
                       contrast 0x00980901 (int)    : min=0 max=95 step=1 default=32 value=32
                     saturation 0x00980902 (int)    : min=0 max=100 step=1 default=55 value=55
                            hue 0x00980903 (int)    : min=-2000 max=2000 step=1 default=0 value=0
 white_balance_temperature_auto 0x0098090c (bool)   : default=1 value=1
                          gamma 0x00980910 (int)    : min=100 max=300 step=1 default=165 value=165
           power_line_frequency 0x00980918 (menu)   : min=0 max=2 default=1 value=1
      white_balance_temperature 0x0098091a (int)    : min=2800 max=6500 step=10 default=4600 value=4600 flags=inactive
                      sharpness 0x0098091b (int)    : min=1 max=7 step=1 default=2 value=2
         backlight_compensation 0x0098091c (int)    : min=0 max=1 step=1 default=0 value=0
                  exposure_auto 0x009a0901 (menu)   : min=0 max=3 default=3 value=3
              exposure_absolute 0x009a0902 (int)    : min=50 max=10000 step=1 default=166 value=166 flags=inactive
user@AsusROG:~$ sudo v4l2-ctl --device=/dev/video1 --all
Driver Info (not using libv4l2):
    Driver name   : uvcvideo
    Card type     : USB_Camera: USB_Camera
    Bus info      : usb-0000:00:14.0-3
    Driver version: 5.0.21
    Capabilities  : 0x84A00001
        Video Capture
        Metadata Capture
        Streaming
        Extended Pix Format
        Device Capabilities
    Device Caps   : 0x04A00000
        Metadata Capture
        Streaming
        Extended Pix Format
Priority: 2
Run Code Online (Sandbox Code Playgroud)

这是我安装的各种 v4l 软件包的版本:

ii libv4l-0:amd64 1.14.2-1 amd64 Collection of video4linux support libraries
ii libv4l-dev:amd64 1.14.2-1 amd64 Collection of video4linux support libraries (development files)
ii libv4l2rds0:amd64 1.14.2-1 amd64 Video4Linux Radio Data System (RDS) decoding library
ii libv4lconvert0:amd64 1.14.2-1 amd64 Video4linux frame format conversion library
ii v4l-utils 1.14.2-1 amd64 Collection of command line video4linux utilities
Run Code Online (Sandbox Code Playgroud)

这是摘录自lsusb

Bus 001 Device 017: ID 0458:708c KYE Systems Corp. (Mouse Systems) Genius WideCam F100

以及相关的 udev 规则:

KERNEL=="video?", SUBSYSTEM=="video4linux", ATTRS{idVendor}=="0458", ATTRS{index}=="0", ATTRS{idProduct}=="708c", SYMLINK+="v4l/hd_cam"
Run Code Online (Sandbox Code Playgroud)

任何投入将不胜感激

ign*_*cio 3

正如在此相关问题ATTR{index}中所注意到的,当设备是真实摄像头或仅为元数据时,的值会有所不同。人们应该使用该规则ATTR{index}=="0"来获取真实的设备。


use*_*.dz 0

第二设备提供关于来自第一设备的视频数据的元数据。此补丁引入了新设备:

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 视频类设备,这主要只是提供更准确的时间戳信息。对于像英特尔实感系列这样的相机,提供有关图像捕获方式的更广泛的数据

据推测,这些数据被分割到一个单独的设备节点中,因为它无法轻松地以兼容的方式传递到主设备节点上。但这有点痛苦,因为(a)不关心此元数据的应用程序现在需要过滤掉额外的设备,并且(b)关心元数据的应用程序需要一种将两个设备绑定在一起的方法。

复制自: https: //unix.stackexchange.com/a/539573