Chạy nhiều webcam USB trong Debian / Linux sẽ xảy ra lỗi sau:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
Điều ban đầu dường như là một vấn đề lập trình trong OpenCV đã biến thành một nhiệm vụ cho một vấn đề phần cứng / phần mềm bí ẩn sau khi các lỗi tương tự được tạo ra bằng cách chạy phô mai và xawtv.
Rõ ràng đó là do webcam yêu cầu tất cả băng thông có sẵn trên bộ điều khiển máy chủ USB. Với ý nghĩ đó, tôi quyết định chạy wireshark và capinfos để xem một camera được sử dụng bao nhiêu băng thông.
4 megabits per second at 320x240
14 megabits per second at 640x480
32 megabits per second at 1280x720
Hấp dẫn! Điều đó có thể giải thích tại sao hai camera ở 320x240 hoạt động nhưng độ phân giải cao hơn đều thất bại. Như thể bộ điều khiển USB của tôi chỉ hoạt động ở tốc độ USB 1, nhưng lsusb hiển thị cả hai webcam thuộc về một thiết bị được cho là hỗ trợ 480 megabit mỗi giây.
Một giải pháp đề xuất buộc các webcam phải tính toán mức sử dụng băng thông thay vì yêu cầu mức tối đa của chúng bằng cách chạy các lệnh sau:
sudo rmmod uvcvideo
sudo modprobe uvcvideo quirks=128
Thật không may, điều đó không có sự khác biệt, vì vậy tôi quyết định thử một giải pháp khác. Một bài đăng trên StackOverflow đã đề nghị các webcam của tôi sử dụng định dạng video FPS hoặc nén thấp hơn như MJPEG, nhưng sau khi chạy danh sách v4lctl, nó không xuất hiện một trong hai webcam của tôi hỗ trợ thay đổi chế độ video của họ.
Và đó là nơi tôi bị mắc kẹt. Tại sao hai webcam hoạt động tốt dưới tốc độ tối đa của USB 2 sẽ gây ra lỗi này?
ps: Đây không phải là vấn đề về dung lượng ổ đĩa, df hiển thị không thay đổi khi webcam được khởi động.
pps: Nếu nó tạo ra sự khác biệt, thì đây là đầu ra của lsusb