网络摄像头的 MJPEG 流不起作用

网络摄像头的 MJPEG 流不起作用

我有 5 个高清网络摄像头(Creative Live Cam Sync 1080p),想通过https://github.com/jacksonliam/mjpg-streamer在 Debian Buster 4.19.0-11-amd64 上。

它们都支持 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"

mjpeg-streamer 输出

usbtop 输出:

 Device ID 2 :                 141.73 kb/s     15259.90 kb/s

这意味着一个网络摄像头使用 15Mb/s 或大约 2MB/s。我使用的是 USB 3.0,支持 5Gbit/s。

我不太明白问题出在哪里或出了什么问题。似乎 mjpeg-streamer 使用的是原始图像数据,而不是 mjpeg 流。

答案1

的规格 Creative Live! 摄像头同步 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 驱动程序和工具 – 常见问题解答。为了方便读者,我在下面列出了一些解决方法,但并非所有方法都适用于您的相机:

  • 禁用分配定期传输带宽的其他设备。这包括键盘、鼠标和麦克风/扬声器。禁用音频设备的最简单方法是将 snd-usb-audio 模块列入黑名单。
  • 以压缩格式捕获视频。许多 UVC 设备都支持未压缩的 YUV 和压缩的 MJPEG,从 YUV 切换到 MJPEG 应该可以减少带宽使用量。
  • 减小帧大小。降低帧速率不太可能有帮助,因为无论帧速率如何,图像通常都是以突发方式传输的
  • 将摄像头连接到不同的 USB 主控制器。这有效地提高了总可用带宽,因为每个 USB 主控制器可以使用 480 Mb/s。请注意,将摄像头连接到单个 USB 主控制器上的单独集线器不会有帮助。可以将额外的 USB 主控制器作为廉价的 PCI 卡添加到系统中。

您可以尝试的另一种解决方法是将摄像头降级到 720P。

查看文章 在单个 USB 集线器上使用多个 USB 摄像头 寻找一种使用 VLC 将分辨率或帧速率降低一半的方法。(我怀疑这种方法是否适用于您的相机。)

相关内容