Использование нескольких веб-камер USB в Linux

запуск более одной USB-камеры в Debian / Linux приводит к следующей ошибке:

libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device

то, что первоначально казалось проблемой программирования в OpenCV, превратилось в поиски загадочной аппаратной / программной проблемы после того, как те же ошибки были произведены запуском cheese и xawtv.

по-видимому, это вызвано веб-камер, запрашивающих всю доступную пропускную способность на хост-контроллере USB. Имея это в виду, я решил запустить wireshark и capinfos чтобы увидеть, сколько пропускной способности используется одна камера.

4 megabits per second at 320x240
14 megabits per second at 640x480
32 megabits per second at 1280x720

Интересные! Это может объяснить, почему две камеры на 320x240 работают, но любое более высокое разрешение терпит неудачу. Это как если бы мой контроллер USB работает только на скорости USB 1, но lsusb показывает обе веб-камеры, принадлежащие устройству, которое якобы поддерживает 480 мегабит в секунду.

одно из решений предложило заставить веб-камеры вычислять их использование полосы пропускания вместо запрос их максимум, выполнив следующие команды:

sudo rmmod uvcvideo
sudo modprobe uvcvideo quirks=128

к сожалению, это не имело значения, поэтому я решил попробовать другое решение. A post на StackOverflow предложил сказать моим веб-камерам использовать более низкий FPS или сжатый формат видео, такой как MJPEG, но после запуска список v4lctl он не появляется ни один из моих веб-камер поддерживают изменение их видео режим.

и вот где я застрял. Почему две веб-камеры работают хорошо ниже максимальной скорости USB 2 приведет к этой ошибке?

ps: это не проблема дискового пространства, df не отображает никаких изменений при запуске веб-камер.

pps: если это имеет значение, вот вывод lsusb

30
задан Community
31.03.2023 21:06 Количество просмотров материала 2983
Распечатать страницу

4 ответа

Динь Динь! Удалось выяснить это с помощью хороших людей в #v4l на freenode.

короче: v4l2-ctl является лучшим инструментом для отладки проблем USB-камеры. Прочитайте все доступные команды и man-страницу, это будет весело, я обещаю. Использование v4l2-ctl я обнаружил, что одна из моих камер не поддерживает все сжатые видеоформаты. Чтобы проверить, какие режимы поддерживают камеры, выполните следующие действия команда:

v4l2-ctl -d /dev/video0 --list-formats

который должен выводить что-то вроде этого.

 ioctl: VIDIOC_ENUM_FMT
 Index       : 0
 Type        : Video Capture
 Pixel Format: 'MJPG' (compressed)
 Name        : MJPEG

 Index       : 1
 Type        : Video Capture
 Pixel Format: 'YUYV'
 Name        : YUV 4:2:2 (YUYV)

Если только формат пикселей возвращается "YUYV", "IUYV", "категории i420", или "GBRG" можно только для выполнения одной камеры на контроллер USB* поскольку эти форматы без сжатия. Использование нескольких веб-камер, которые поддерживают MJPEG или какую-либо другую форму сжатия будет работать нормально.

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

**Если вы счастливы с разрешением 320х240 или меньше.*

24
отвечен rachelderp 2023-04-02 04:54

ответ заключается в использовании модификаций uvcvideo, написанных SwDevRefugee, и описанных выше. Он и я работали вместе, чтобы получить код mod'Ed, скомпилированный для OpenWrt, с успехом. Версию Я запустить его на маршрутизатор места водителя (кровотечение края, r48130), на роутер tplink wdr3600:

результат: я могу иметь 3*C270 (logitech) работает одновременно на 1280x960 и 15 кадров в секунду в формате MJPG, через концентратор usb 2.0. У меня нет четвертого c270, чтобы подключить, огорченный.

Я также могу иметь 2*c270 и 1*GEMBIRD 640*480*15 кадров в секунду с форматом YUV, но добавление 2-го GEMBIRD приводит к страшному "не удается начать захват: нет места на устройстве" (space==пропускная способность здесь, как вы хорошо знаете:)). Обратите внимание, что для Gembird (1908:2311) == http://www.penguin.cz/~UTX по оборудованию//USB_Camera_AX2311/ .

использование процессора с 3*c270 довольно разумно на wdr3600:

Mem: 50600K used, 75444K free, 320K shrd, 3436K buff, 8800K cached

CPU:  16% usr  27% sys   0% nic  45% idle   0% io   0% irq  10% sirq

Load average: 1.20 0.85 0.44 4/60 2546

  PID  PPID USER     STAT   VSZ %VSZ %CPU COMMAND

 2240  1679 root     S    15348  12%  17% mjpg_streamer --input input_uvc.so --

 2505  1679 root     S    15368  12%  11% mjpg_streamer --input input_uvc.so --

 2239  1679 root     S    15532  12%  11% mjpg_streamer --input input_uvc.so --

если сообщество дает некоторую репутацию и поддержку, я подумайте, SwDevRefugee готов получить код в uvc-linux.

6
отвечен reikred 2023-04-02 07:11

Я посмотрел на драйвер uvcvideo и параметр модуля quirks=128 игнорируется, если поток сжат mjpeg.

мой веб-камер на выбор были С500 компании Logitech и Logitech C270, и я обнаружил, что изображение, полученное с помощью С500 на 1280х1024 это 100kbytes и изображение, полученное с помощью C270 в 1280х960-это 200kbytes.

Если я запускаю C270 на 10фпс, то требуемый битрейт 10x200000x8 = 16Mbit/сек. В Ubuntu 14.04 в модуль uvcdriver всегда выделяет 196Mbits / s независимо от частоты кадров. Для C500 это немного лучше, но все еще является свиньей пропускной способности.

Я изменил драйвер uvcvideo, так что я могу обеспечить коэффициент сжатия для драйвера через интерфейс V4L2. Это "немного hacky" в том, что я использовал атрибут priv в структуре v4l2_pix_format, чтобы указать значение. В драйвере он вычисляет размер несжатого изображения, а затем делит на коэффициент сжатия, чтобы выяснить, какую пропускную способность USB использовать.

по умолчанию я использую коэффициент сжатия 10, который позволяет большой запас, если камера сталкивается с особенно трудно сжать изображение. На C270 работает на 1280х960 и частотой 10 кадров в секунду теперь использует 41Mbit/С и я могу легко запустить 4 камер на одном автобусе.

Если кто-то заинтересован в этой функции, то я буду пытаться получить uvcvideo сопровождающих рассмотреть фактор сжатия концепция.

3
отвечен SwDevAlien 2023-04-02 09:28

Я получил, что из космоса ошибки тоже. Что сработало, так это отключить одну из камер и подключить ее к другому USB - порту на моем стационарном ПК-есть 6 или 7 USB-портов, разбросанных по нему. Запуск 'show_webcams 0 1', то вдруг поднял два изображения.

-1
отвечен Peter Thejll 2023-04-02 11:45

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя

Похожие вопросы про тегам:

bandwidth
debian
linux
usb
webcam
Вверх