Raspberry PI 上的 FFmpeg 硬件加速

FFmpeg hardware acceleration on Raspberry PI

我正在构建一个程序,该程序使用 ffmpeg 通过 Internet 流式传输网络摄像头内容。我想知道是否可以在 raspberry pi 模型 3 上将 GPU 用于流媒体部分。如果可以,我如何在 ffmpeg 上实现它?

您需要一些额外的配置选项:

  • --enable-mmal – 通过 MMAL 启用 Broadcom 多媒体抽象层 (Raspberry Pi)。用于 H.264、VC-1、MPEG-2、MPEG-4 的硬件解码。作为依赖项,您需要 linux-raspberrypi-headers(Arch Linux)或 linux-headers-* -raspi2 (Ubuntu) 提供所需头文件的包 mmal.h.

  • --enable-omx-rpi – 为 Raspberry Pi 启用 OpenMAX IL 代码。用于H.264(编码器命名为h264_omx)和MPEG-4(mpeg4_omx)的硬件编码。作为依赖项,您需要 libomxil-bellagio(Arch Linux)或 libomxil-bellagio-dev(Ubuntu) 提供所需头文件的包 OMX_Core.h.

对于 Arch Linux 用户:

如果愿意,请复制 PKGBUILD file for the ffmpeg package (perhaps via the ABS)。添加上面显示的两个新配置选项,并将提到的两个包添加到 depends 行。 Compile/install 使用 makepkg 命令。

免责声明:我没有这些设备之一来测试这些。大部分信息是从 FFmpeg configure 文件中获取的。

apt 的 ffmpeg 软件包现在启用了硬件编解码器,因此您只需使用以下命令安装它:

apt install ffmpeg

根据您的型号,Pi 上有一些支持硬件的编解码器。以下是这篇详细 post/thread on the Raspberry Pi Forum:

的摘录

Pi0-3 have hardware accelerated decode for H264, MPEG4, H263, and through optional codec licences for MPEG2 and VC1.

Pi4 has the same hardware accelerated decode for H264, but not the other codecs. It also has a separate block for HEVC.

有一些 API(v4l2m2m, VAAPI, OMX, MMAL,...) to access the hardware codecs, but the main one is now the Video Memory-To-Memory Interface 基于 h264_v4l2m2m,还有 [较旧的] h264_omx 基于 OMX 的 API 等等。有关编码和编解码器的完整列表解码 运行:

ffmpeg -codecs

注意:如果您在/boot/config.txt中更改了gpu_mem设置,则它需要大于16,否则所有硬件编解码器都会出错。