在不同的USB总线上设置网络摄像头

我的目标是以640×480的分辨率同时从两个网络摄像头捕获。 我目前遇到的问题是我的两个网络摄像头插入不同的USB端口但使用相同的USB总线。 因此,我收到以下错误

libv4l2:错误开启流:设备上没有剩余空间

VIDIOC_STREAMON:设备上没有剩余空间

并且无法从640×480的两个摄像头捕获。 因此,我希望能够将每个Logitech网络摄像头设置在不同的总线上,我相信这将允许我同时从两个网络摄像头捕获。

这就是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根集线器
  • 总线001设备003:ID 05ca:18b0 Ricoh Co.,Ltd Sony Vaio Integrated Webcam
  • 总线003设备002:ID 147e:1000 Upek Biometric Touchchip / Touchstrip指纹传感器
  • 总线002设备012:ID 046d:0821 Logitech,Inc。HD Webcam C910
  • 总线002设备007:ID 046d:0991 Logitech,Inc。QuickCam Pro for Notebooks

有没有办法设置每个网络摄像头使用不同的USB总线?

答案是:它实际上不是你的问题。

一些罗技相机有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 

如您所见,我目前分配了35 mbps的usb3集线器。 但是,一些罗技相机的问题在于,无论模式如何,它们总是会尽可能多地分配(480 mbps)。 因此,简单算术就像480 + 480> 900而第二台相机“不适合”。

只要您的相机插入相同的硬件USB集线器,您就会遇到这个问题。

还要记住,摄像头通常在MJPEG中分配128mbps,在非压缩模式下为640×480分配424mbps。