L'esecuzione di più di una webcam USB in Debian / Linux provoca il seguente errore:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
Quello che inizialmente sembrava essere un problema di programmazione in OpenCV si è trasformato in una ricerca di un misterioso problema hardware / software dopo che gli stessi errori sono stati prodotti eseguendo cheese e xawtv.
Apparentemente è causato da webcam che richiedono tutta la larghezza di banda disponibile sul controller host USB. Con questo in mente ho deciso di correre Wireshark e capinfos per vedere quanto la larghezza di banda di una singola telecamera utilizzata.
4 megabits per second at 320x240
14 megabits per second at 640x480
32 megabits per second at 1280x720
Interessante! Ciò potrebbe spiegare perché due fotocamere a 320x240 funzionano ma una risoluzione più elevata non riesce. È come se il mio controller USB funzionasse solo a velocità USB 1, ma lsusb mostra entrambe le webcam appartenenti a un dispositivo che presumibilmente supporta 480 megabit al secondo.
Una soluzione ha proposto di forzare le webcam a calcolare l'utilizzo della larghezza di banda invece di richiedere il massimo eseguendo i seguenti comandi:
sudo rmmod uvcvideo
sudo modprobe uvcvideo quirks=128
Sfortunatamente ciò non ha fatto differenza, quindi ho deciso di provare un'altra soluzione. Un post su StackOverflow ha suggerito di dire alle mie webcam di usare un FPS inferiore o un formato video compresso come MJPEG, ma dopo aver eseguito l'elenco v4lctl non appare che nessuna delle mie webcam supporti il cambio della loro modalità video.
Ed è qui che sono bloccato. Perché due webcam che funzionano ben al di sotto della velocità massima di USB 2 genererebbero questo errore?
ps: non è un problema di spazio su disco, df non mostra alcun cambiamento all'avvio delle webcam.
pps: se fa la differenza, ecco l'output di lsusb