Запуск более одной веб-камеры 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
К сожалению, это не имело никакого значения, поэтому я решил попробовать другое решение. В сообщении о StackOverflow предлагалось указать моим веб-камерам использовать более низкий FPS или сжатый видеоформат, такой как MJPEG, но после запуска списка v4lctl ни одна из моих веб-камер не поддерживает изменение их видео-режима.
И вот где я застрял. Почему две веб-камеры, работающие значительно ниже максимальной скорости USB 2, могут вызвать такую ошибку?
ps: это не проблема дискового пространства, df не отображает изменений при запуске веб-камер.
pps: если это имеет значение, вот вывод команды lsusb