编辑:评论指出我应该澄清哪里需要帮助
鉴于条件
如何压缩每一帧以获得合适的 fps 并看到物体?
场景是关于驾驶第一人称视角,质量并不重要,只要你能看到你在做什么,反应性才是
我正在试验遥控汽车,并寻找一种将实时视频数据从汽车传输到显示器的方法。
到目前为止,我能够从 USB 网络摄像头获取 YUV 格式的原始帧,并使用 C++ 数组中的树莓派 3b 通过 v4l2 将每个帧转换为 RGB,并通过 C++ RF24 库传输数据
压缩数据将通过一对 NRF24L01+ 模块进行传输,该模块的最大速率为 2MBits(通话时间调制),因此我知道可用带宽非常有限。 初始传输后,数据将通过 USB 串行或蓝牙模块 HC-05 重定向到我的自定义 Android 应用程序
我正在寻找的解决方案: 实时的、极其压缩的流,是最低限度且足够快的流,足以看到汽车的行驶方向并做出反应,对颜色或分辨率不感兴趣,线框也可以。 每个流数据包的最大长度限制为 32 字节。并且必须用 Java 重新组合(对于 Android 应用程序)
我尝试过的解决方案:
到目前为止,我能够从 USB 网络摄像头获取 YUV 格式的原始帧 使用 C++ 数组中的树莓派 3b 格式化并转换为 RGB, 通过v4l2,并通过c++ RF24库传输数据
当您拥有原始 YUV 帧时,如果传输速率较低并且您的需求与图形使用无关,则无需将其转换为 RGB。 YUV 格式已经通过消除 RGB 数据中的一些视觉(人类)冗余来减小尺寸。进一步的子采样颜色格式(如果还没有)可以帮助您进一步减小输入帧的大小。
最低限度且足够快,可以看到汽车要去哪里并做出反应, 对颜色或分辨率不感兴趣,线框也可以
您的问题相当开放。因此,我在这里具体说明您的要求:
以“原始”CIF 视频质量 (352x288) 输入帧为例。即使输入被子采样为 YUV 420,每帧也需要大约 1.2 Mb。而且,如果您只关心 30 fps 视频来了解汽车的行驶方向,则每秒需要 (1.2 x 30) Mb。这将是每秒很多字节,这就是您需要编解码器在传输之前对视频帧进行编码的地方。 RF 库,IMO,不压缩。由于您几乎不关心视频格式/分辨率等,因此当今大多数可用的编解码器将完全满足您的要求。
您需要什么:
您需要一个编解码器(SW 或 HW)将输入 YUV 转换为压缩比特流(AV/HEVC 等)。凭借 2 Mbps 的传输能力,您将能够传输分辨率相当合理的视频。这不是低带宽:)
使用您的工具/库进行传输。
在Android端,您可以编写一个使用MediaExtractor/MediaCodec来提取和解码传输/压缩数据的应用程序。您可以将解码的数据用于您的任何目的。