Ejecutar más de una cámara web USB en Debian / Linux da como resultado el siguiente error:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
Lo que inicialmente parecía ser un problema de programación en OpenCV se convirtió en una búsqueda de un misterioso problema de hardware / software después de que se produjeran los mismos errores al ejecutar cheese y xawtv.
Aparentemente es causado por cámaras web que solicitan todo el ancho de banda disponible en el controlador host USB. Con eso en mente, decidí ejecutar wireshark y capinfos para ver cuánto ancho de banda usaba una sola cámara.
4 megabits per second at 320x240
14 megabits per second at 640x480
32 megabits per second at 1280x720
¡Interesante! Eso podría explicar por qué funcionan dos cámaras a 320x240 pero falla cualquier resolución más alta. Es como si mi controlador USB solo funcionara a velocidades de USB 1, pero lsusb muestra ambas cámaras web que pertenecen a un dispositivo que supuestamente admite 480 megabits por segundo.
Una solución propuso obligar a las cámaras web a calcular su uso de ancho de banda en lugar de solicitar su máximo ejecutando los siguientes comandos:
sudo rmmod uvcvideo
sudo modprobe uvcvideo quirks=128
Lamentablemente, eso no marcó la diferencia, así que decidí probar otra solución. Una publicación en StackOverflow sugirió decirles a mis cámaras web que utilicen un formato de video comprimido o FPS más bajo como MJPEG, pero después de ejecutar la lista v4lctl , no parece que ninguna de mis cámaras web admita cambiar su modo de video.
Y ahí es donde estoy atrapado. ¿Por qué dos cámaras web que funcionan muy por debajo de la velocidad máxima de USB 2 producirían este error?
ps: no es un problema de espacio en disco, df no muestra ningún cambio cuando se inician las cámaras web.
pps: si hace la diferencia, aquí está la salida de lsusb