在Debian / Linux中运行多个USB网络摄像头会导致以下错误:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
在运行Cheese和xawtv产生相同的错误之后,最初似乎是OpenCV中的编程问题变成了对神秘的硬件/软件问题的寻求。
显然,这是由网络摄像头请求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 list之后,我的网络摄像头均未显示支持更改其视频模式。
那就是我被困住的地方。为什么两个网络摄像头在USB 2的最大速度以下运行时会产生此错误?
ps:这不是磁盘空间问题,启动网络摄像头时df不会显示任何更改。