несколько устройств / dev / video для одной камеры, вызывающие проблемы с правилами udev

После обновления с 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, но только одна камера

Однако, принятый ответ ( ошибка в скайпе) не решает проблему udev, с которой я сталкиваюсь.

Я вижу, у кого-то есть похожий вопрос по обмену стека:

https://unix.stackexchange.com/questions/512759/multiple-dev-video-for-one- физическое устройство

Однако ответ не был принят.

Дополнительная информация :

Марка / модель компьютера: Asus ROG GL503V

Марка / модель веб-камеры: Genius WideCam F100, Logitech 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

Вот подробный взгляд на 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

Вот версии различных Установленные мной пакеты 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

вот выдержка из 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"

Любой вклад будет принят с благодарностью.

4
задан 6 September 2019 в 02:27

2 ответа

Как замечено в этот связанный вопрос , значение ATTR {index} отличается, когда устройство является реальной камерой или только метаданными. Нужно использовать правило ATTR{index}=="0", чтобы получить реальное устройство.

0
ответ дан 11 May 2020 в 12:17

Второе устройство предоставляет метаданные о видеоданных с первого устройства. Новые устройства были представлены этим патчем:

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 Video Class: в основном это просто обеспечивает более точную информацию о метках времени. Для таких камер, как линейка Intel RealSense, предоставьте более широкий спектр данных о том, как было снято изображение.

Предположительно, эти данные были выделены в отдельный узел устройства, потому что их было сложно доставить на основной узел устройства совместимым способом. Однако это немного неудобно, так как (а) приложения, которые не заботятся об этих метаданных, теперь должны отфильтровывать дополнительные устройства, и (б) приложения, которые заботятся о метаданных, нуждаются в способе связать два устройства вместе. .

Скопировано с: https://unix.stackexchange.com/a/539573

0
ответ дан 18 November 2020 в 15:49

Другие вопросы по тегам:

Похожие вопросы: