在 Debian/Linux 中运行多个 USB 网络摄像头会导致以下错误:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
Run Code Online (Sandbox Code Playgroud)
在运行 cheese 和 xawtv 产生相同的错误后,最初似乎是 OpenCV 中的一个编程问题变成了对神秘硬件/软件问题的探索。
显然,这是由网络摄像头请求 USB 主机控制器上的所有可用带宽引起的。考虑到这一点,我决定运行wireshark和capinfos来查看单个摄像头使用了多少带宽。
4 megabits per second at 320x240
14 megabits per second at 640x480
32 megabits per second at 1280x720
Run Code Online (Sandbox Code Playgroud)
有趣的!这或许可以解释为什么两个 320x240 的摄像头可以工作,但任何更高的分辨率都失败了。就好像我的 USB 控制器仅以 USB 1 的速度运行,但lsusb显示属于一个据称支持每秒 480 兆位的设备的两个网络摄像头。
一种解决方案提出强制网络摄像头计算其带宽使用情况,而不是通过运行以下命令来请求最大带宽:
sudo rmmod uvcvideo
sudo modprobe uvcvideo quirks=128
Run Code Online (Sandbox Code Playgroud)
不幸的是,这没有什么区别,所以我决定尝试另一种解决方案。StackOverflow 上的一篇文章建议告诉我的网络摄像头使用较低的 FPS 或像 MJPEG …