После обновления с 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"
Любой вклад будет принят с благодарностью.
Как замечено в этот связанный вопрос , значение ATTR {index}
отличается, когда устройство является реальной камерой или только метаданными. Нужно использовать правило ATTR{index}=="0"
, чтобы получить реальное устройство.
Второе устройство предоставляет метаданные о видеоданных с первого устройства. Новые устройства были представлены этим патчем:
Дополнительная информация о интерфейс метаданных V4L можно найти здесь:
https://linuxtv.org/downloads/v4l-dvb-apis/uapi/v4l/dev-meta.html
Для обычных устройств USB Video Class: в основном это просто обеспечивает более точную информацию о метках времени. Для таких камер, как линейка Intel RealSense, предоставьте более широкий спектр данных о том, как было снято изображение.
Предположительно, эти данные были выделены в отдельный узел устройства, потому что их было сложно доставить на основной узел устройства совместимым способом. Однако это немного неудобно, так как (а) приложения, которые не заботятся об этих метаданных, теперь должны отфильтровывать дополнительные устройства, и (б) приложения, которые заботятся о метаданных, нуждаются в способе связать два устройства вместе. .
Скопировано с: https://unix.stackexchange.com/a/539573