我有 5 个高清网络摄像头(Creative Live Cam Sync 1080p)并且想在 Debian Buster 4.19.0-11-amd64 上使用https://github.com/jacksonliam/mjpg-streamer流式传输图片。
如图所示,它们都支持 MJPG。
问题是由于带宽限制,我只能启动 3 mjpg-streamer。
kernel.log 说:
usb 3-2: Not enough bandwidth for new device state.
usb 3-2: Not enough bandwidth for altsetting 7
我正在使用命令启动网络摄像头
/usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -d /dev/video0 -n -f 5 -r 1920x1080" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8085 -w /usr/local/share/mjpg-streamer/www"
usbtop输出:
Device ID 2 : 141.73 kb/s 15259.90 kb/s
这意味着一个网络摄像头正在使用 15Mb/s 或大约 2MB/s。我正在使用支持 5Gbit/s 的 USB 3.0。
我真的不明白问题出在哪里或出了什么问题。似乎 mjpeg-streamer 正在使用原始图像数据而不是 mjpeg 流。
Creative Live的规格 !Cam Sync 1080p 将其列为 USB 2.0 设备。这意味着相机仅使用同样内置于 USB 3.0 设备中的 USB 2.0 控制器,因此您的可用带宽比您想象的要少得多。
USB 2.0 集线器的理论带宽为 480mbps 或 ~60MBps。但是,网络摄像头数据传输限制为该最大值的 80%,即 384mbps。将此带宽分配给 5 个摄像头可以得到 76.8mbps 或 9.6 MB/s 每个摄像头,这仍然比您观察到的要高得多。
尽管上述计算适用于大多数网络摄像头,但有些网络摄像头的播放效果不佳,并且会为大型未压缩帧分配带宽,而不管它们实际传输什么数据。看起来您的网络摄像头就是其中之一。
有关此错误的更多信息以及一些可能的解决方法,请参阅文章 Linux UVC 驱动程序和工具 - 常见问题解答。为了读者的利益,我在下面引用了解决方法列表,尽管并非所有方法都适用于您的相机:
您可以尝试的另一种解决方法是将摄像机降级到 720P。
有关使用 VLC 将分辨率或帧速率降低一半的方法,请参阅文章 在单个 USB 集线器上使用多个 USB 摄像头。(我怀疑这种方法是否适用于您的相机。)