Uruchomienie więcej niż jednej kamery internetowej USB w systemie Debian / Linux powoduje następujący błąd:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
To, co początkowo wydawało się problemem programistycznym w OpenCV, przerodziło się w poszukiwanie tajemniczego problemu ze sprzętem / oprogramowaniem po tym, jak te same błędy powstały podczas uruchamiania sera i xawtv.
Najwyraźniej jest to spowodowane tym, że kamery internetowe żądają całej dostępnej przepustowości na kontrolerze hosta USB. Mając to na uwadze, postanowiłem uruchomić wireshark i capinfos, aby zobaczyć, ile pasma wykorzystuje pojedyncza kamera.
4 megabits per second at 320x240
14 megabits per second at 640x480
32 megabits per second at 1280x720
Ciekawy! To może wyjaśniać, dlaczego działają dwie kamery o rozdzielczości 320 x 240, ale zawodzi każda wyższa rozdzielczość. To tak, jakby mój kontroler USB działał tylko z szybkościami USB 1, ale lsusb pokazuje obie kamery należące do urządzenia, które podobno obsługuje 480 megabitów na sekundę.
W jednym z rozwiązań zaproponowano wymuszenie na kamerach internetowych obliczania zużycia przepustowości zamiast żądania maksymalnej wartości, uruchamiając następujące polecenia:
sudo rmmod uvcvideo
sudo modprobe uvcvideo quirks=128
Niestety nie miało to znaczenia, więc postanowiłem spróbować innego rozwiązania. Post na StackOverflow zasugerował moim kamerom internetowym użycie niższego FPS lub skompresowanego formatu wideo, takiego jak MJPEG, ale po uruchomieniu listy v4lctl żadna z moich kamer nie obsługuje zmiany trybu wideo.
I właśnie tam utknąłem. Dlaczego dwie kamery działające znacznie poniżej maksymalnej prędkości USB 2 powodują ten błąd?
ps: To nie jest problem z miejscem na dysku, df nie wyświetla żadnych zmian po uruchomieniu kamer internetowych.
pps: Jeśli to robi różnicę, oto wynik działania lsusb