L'exécution de plus d'une webcam USB dans Debian / Linux entraîne l'erreur suivante:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
Ce qui semblait initialement être un problème de programmation dans OpenCV s'est transformé en quête d'un mystérieux problème matériel / logiciel après que les mêmes erreurs ont été produites en exécutant cheese et xawtv.
Apparemment, cela est dû au fait que les webcams demandent toute la bande passante disponible sur le contrôleur hôte USB. Dans cet esprit, j'ai décidé d'exécuter WireShark et Capinfos pour voir la bande passante utilisée par une seule caméra.
4 megabits per second at 320x240
14 megabits per second at 640x480
32 megabits per second at 1280x720
Intéressant! Cela pourrait expliquer pourquoi deux caméras à 320x240 fonctionnent mais toute résolution supérieure échoue. C'est comme si mon contrôleur USB ne fonctionnait qu'à des vitesses USB 1, mais lsusb affiche les deux webcams appartenant à un appareil qui prend en charge soi-disant 480 mégabits par seconde.
Une solution a proposé de forcer les webcams à calculer leur utilisation de bande passante au lieu de demander leur maximum en exécutant les commandes suivantes:
sudo rmmod uvcvideo
sudo modprobe uvcvideo quirks=128
Malheureusement, cela n'a fait aucune différence, j'ai donc décidé d'essayer une autre solution. Un message sur StackOverflow a suggéré de dire à mes webcams d'utiliser un FPS inférieur ou un format vidéo compressé comme MJPEG, mais après avoir exécuté la liste v4lctl, aucune de mes webcams ne prend en charge la modification de leur mode vidéo.
Et c'est là que je suis coincé. Pourquoi deux webcams fonctionnant bien en dessous de la vitesse maximale d'USB 2 produiraient-elles cette erreur?
ps: Ce n'est pas un problème d'espace disque, df n'affiche aucun changement au démarrage des webcams.
pps: Si cela fait une différence, voici la sortie de lsusb