我正在开展一个项目,其中 Raspberry Pi 被用作多个伺服器的 I/O 板,这些伺服器实际上由另一台计算机控制,并通过以太网连接到 RPi。
我需要在项目中添加 2 个 USB 网络摄像头,并希望将它们连接到 RPi,以维护 I/O 的单一位置(如果有意义的话)。
我正在寻找最简单、延迟最低的方法来将网络摄像头的输入转发到主机。我尝试使用 Usbip 和 ffmpeg 来传输数据,但这两种方法都遇到了问题。还有其他建议吗?或者我应该继续尝试我尝试过的方法之一。
谢谢!
答案1
您的网络摄像头有硬件压缩功能吗?或者您在 RPi 上进行压缩?它的 VideoCore 处理器适合这种类型的工作,但是……您必须使用 OpenMAX 来卸载到 VideoCore,因为 Linux 运行的 ARM 协处理器甚至无法压缩低清晰度流。加载 VideoCore 编解码器的程序是omxplayer
一些gstreamer
插件。
即使使用 VideoCore,通过 USB 内部互连获取原始视频数据时也会遇到带宽问题。
因此,您的可行选择是
- 将预压缩的(网络摄像头内部)视频从 USB 复制到以太网。
- 使用连接到 Raspberry Pi 上的高带宽视频端口的 RPi 摄像头模块,直接进入 VideoCore 进行处理和压缩。
后一种选择可能会降低很多延迟,但只能获得一个流。理论上可以通过单个视频端口交错两个流,但 VideoCore 上的编解码器需要设计为接受和分离两个流,并且这样做的技术数据仅在签署保密协议的情况下提供给 Broadcom 最大的客户。
您可以在 Rasberry Pi 论坛上找到有关视频编解码器开发过程的更多信息。简而言之:Broadcom 完成了大部分工作,Raspberry Pi 基金会可以访问技术数据,但没有足够的工程师,而且 NDA 禁止他们将工作外包。