我的目标是同时从两个网络摄像头捕获 640x480 分辨率的图像。我目前遇到一个问题,我的两个网络摄像头插入不同的 USB 端口,但使用相同的 USB 总线。因此,我收到以下错误:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
并且无法从 640x480 的两个摄像头进行捕获。因此,我希望能够将每个 Logitech 网络摄像头设置在不同的总线上,我相信这样我就可以同时从两个网络摄像头进行捕获。
这是输出系统盘显示:
总线 001 设备 001:ID 1d6b:0002 Linux Foundation 2.0 根集线器 总线 002 设备 001:ID 1d6b:0002 Linux Foundation 2.0 根集线器 总线 003 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器 总线 004 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器 总线 005 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器 总线 006 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器 总线 007 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器 总线 008 设备 001:ID 1d6b:0001 Linux Foundation 1.1 根集线器 总线 001 设备 003:ID 05ca:18b0 Ricoh Co., Ltd Sony Vaio 集成网络摄像头 总线 003 设备 002:ID 147e:1000 Upek 生物识别触摸芯片/触摸条指纹传感器 总线 002 设备 012:ID 046d:0821 Logitech, Inc. HD Webcam C910 总线 002 设备 007:ID 046d:0991 Logitech, Inc. QuickCam Pro 笔记本电脑有没有办法将每个网络摄像头设置为使用不同的 USB 总线?
答案1
答案是:这实际上不是你的问题。
有些罗技相机有 USB 带宽分配错误。让我们看看是否如此。
cat /sys/kernel/debug/usb/devices | grep "B: "
将为您提供所有 USB 集线器的当前带宽分配,输出将如下所示:
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 35/900 us ( 4%), #Int= 3, #Iso= 0
B: Alloc= 0/900 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
B: Alloc= 0/800 us ( 0%), #Int= 0, #Iso= 0
如您所见,我的 usb3 集线器目前已分配 35 mbps。但是,某些罗技相机的问题在于,它们总是会分配尽可能多的速度(480 mbps),而不管模式如何。因此,这归结为简单的算术,即 480 + 480 > 900,而第二个相机“不适合”。
只要您的相机插入同一个硬件 USB 集线器,您就会遇到该问题。
还请记住,网络摄像头通常在 MJPEG 模式下为 640x480 分配 128mbps,在未压缩模式下分配 424mbps。