A execução de mais de uma webcam USB no Debian / Linux resulta no seguinte erro:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
O que inicialmente parecia ser um problema de programação no OpenCV se transformou em uma busca por um misterioso problema de hardware / software depois que os mesmos erros foram produzidos pela execução de cheese e xawtv.
Aparentemente, isso é causado por webcams solicitando toda a largura de banda disponível no controlador host USB. Com isso em mente, decidi executar o wireshark e o capinfos para ver quanta largura de banda uma única câmera usava.
4 megabits per second at 320x240
14 megabits per second at 640x480
32 megabits per second at 1280x720
Interessante! Isso pode explicar por que duas câmeras de 320x240 funcionam, mas qualquer resolução maior falha. É como se meu controlador USB estivesse operando apenas na velocidade USB 1, mas o lsusb mostra as duas webcams pertencentes a um dispositivo que supostamente suporta 480 megabits por segundo.
Uma solução proposta forçou as webcams a calcular seu uso de largura de banda em vez de solicitar o máximo executando os seguintes comandos:
sudo rmmod uvcvideo
sudo modprobe uvcvideo quirks=128
Infelizmente, isso não fez diferença, então decidi tentar outra solução. Uma publicação no StackOverflow sugeriu que minhas webcams usassem um FPS menor ou formato de vídeo compactado como MJPEG, mas depois de executar a lista v4lctl , não parece que nenhuma das minhas webcams suporta a alteração do modo de vídeo.
E é aí que eu estou preso. Por que duas webcams operando bem abaixo da velocidade máxima do USB 2 produziriam esse erro?
ps: não é um problema de espaço em disco, o df não mostra alterações quando as webcams são iniciadas.
pps: se isso faz diferença, aqui está a saída do lsusb