我的目标是以 640x480 的分辨率同时从两个网络摄像头捕捉。我目前遇到一个问题,我的两个网络摄像头插入不同的 USB 端口,但使用相同的 USB 总线。因此,我收到以下错误:
libv4l2: error turning on stream: No space left on device
VIDIOC_STREAMON: No space left on device
Run Code Online (Sandbox Code Playgroud)
并且无法以 640x480 的分辨率从两个摄像头捕获。因此,我希望能够将每个罗技网络摄像头设置在不同的总线上,我相信这样我就可以同时从两个网络摄像头进行捕捉。
这是lsusb的输出显示的内容:
总线 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 根集线器 Bus 001 Device 003: ID 05ca:18b0 Ricoh Co., Ltd Sony Vaio 集成网络摄像头 Bus 003 Device 002: ID 147e:1000 Upek Biometric Touchchip/Touchstrip 指纹传感器 Bus 002 Device 012:ID 046d:0821 Logitech, Inc. HD 网络摄像头 C910 Bus 002 Device 007:ID 046d:0991 Logitech, Inc. QuickCam Pro for Notebooks有没有办法将每个网络摄像头设置为使用不同的 USB 总线?
小智 5
答案是:这实际上不是你的问题。
一些罗技相机有 USB 带宽分配错误。让我们看看是不是这样。
cat /sys/kernel/debug/usb/devices | grep "B: "
Run Code Online (Sandbox Code Playgroud)
将为您提供所有 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
Run Code Online (Sandbox Code Playgroud)
如您所见,我目前为我的 USB3 集线器分配了 35 mbps。然而,一些罗技相机的问题在于它们总是会尽可能多地分配(480 mbps),而不管模式如何。所以它归结为简单的算术,因为 480 + 480 > 900 和第二个相机只是“不适合”。
只要您的相机插入相同的硬件 USB 集线器,您就会遇到这个问题。
还要记住,网络摄像头通常在 MJPEG 中分配 128mbps,在 640x480 的未压缩模式下分配 424mbps。
| 归档时间: |
|
| 查看次数: |
6238 次 |
| 最近记录: |