การใช้งานเว็บแคม USB มากกว่าหนึ่งตัวใน Debian / Linux จะทำให้เกิดข้อผิดพลาดดังต่อไปนี้:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
สิ่งแรกที่ดูเหมือนจะเป็นปัญหาการเขียนโปรแกรมใน OpenCV กลายเป็นการแสวงหาปัญหาฮาร์ดแวร์ / ซอฟต์แวร์ลึกลับหลังจากข้อผิดพลาดเดียวกันถูกผลิตโดยใช้ชีสและ xawtv
เห็นได้ชัดว่ามันเกิดจากเว็บแคมที่ร้องขอแบนด์วิดท์ที่มีอยู่ทั้งหมดบนตัวควบคุมโฮสต์ USB เมื่อคำนึงถึงสิ่งนี้ฉันจึงตัดสินใจใช้wiresharkและcapinfosเพื่อดูว่าแบนด์วิธที่กล้องตัวเดียวใช้
4 megabits per second at 320x240
14 megabits per second at 640x480
32 megabits per second at 1280x720
! ที่น่าสนใจ นั่นอาจอธิบายได้ว่าทำไมกล้องสองตัวที่ความละเอียด 320x240 ทำงาน แต่ความละเอียดที่สูงกว่านั้นล้มเหลว มันเหมือนกับว่าคอนโทรลเลอร์ USB ของฉันทำงานที่ความเร็ว USB 1 เท่านั้น แต่lsusb ก็แสดงให้เห็นทั้งเว็บแคมที่เป็นของอุปกรณ์ที่รองรับ 480 เมกะบิตต่อวินาที
ทางออกหนึ่งที่เสนอให้บังคับให้เว็บแคมคำนวณการใช้แบนด์วิดท์แทนการร้องขอสูงสุดโดยเรียกใช้คำสั่งต่อไปนี้:
sudo rmmod uvcvideo
sudo modprobe uvcvideo quirks=128
น่าเสียดายที่ไม่ได้สร้างความแตกต่างดังนั้นฉันจึงตัดสินใจลองวิธีอื่น โพสต์บน StackOverflowแนะนำให้เว็บแคมของฉันใช้ FPS ที่ต่ำกว่าหรือรูปแบบวิดีโอที่บีบอัดเช่น MJPEG แต่หลังจากเรียกใช้รายการ v4lctlมันไม่ปรากฏว่าเว็บแคมของฉันรองรับการเปลี่ยนโหมดวิดีโอ
และนั่นคือสิ่งที่ฉันติดอยู่ ทำไมเว็บแคมสองเว็บที่ทำงานได้ต่ำกว่าความเร็วสูงสุดของ USB 2 จะทำให้เกิดข้อผิดพลาดนี้หรือไม่
ps: มันไม่ใช่ปัญหาพื้นที่ดิสก์ df ไม่เปลี่ยนแปลงเมื่อเว็บแคมเริ่มทำงาน
pps: ถ้ามันสร้างความแตกต่างนี่คือผลลัพธ์ของ lsusb