硬件加速 RPI4 FFmpeg

Hardware acceleration RPI4 FFmpeg

我正在尝试在我的 Raspberry pi 4-64 上启用硬件加速。我正在使用 FFmpeg,AFAIK hwaccel 可以通过使用 OpenMAX 或 V4L2-M2M 来实现。 在 FFmpeg 的“--enable-omx”和 'enable-omx-rpi' 之后,构建失败并出现错误:'OMX_Core.h not found'。如果我将手动提供 omx headers,那么它将编译但 FFmpeg 编码将由于缺少库而失败:bcm_host.so 和 libopenmaxil.so

我曾尝试通过 DISABLE_VC4GRAPHICS = "1" 恢复到用户空间,它产生了 bcm_host.so,但没有产生 libopenmaxil.so。我尝试了虚拟供应商和图形设置的不同组合,但没有成功。 是否可以在 RPI4-64 上访问 omx 硬件加速?

重现问题的步骤:

1.Download 最新的 Poky 发行版,meta-openembedded,meta-raspberrypi

2.Enable omx,omx-rpi 支持 FFmpeg

3.Link headers 对于 FFmpeg

4.Build 并尝试使用 h264_omx

如何获取缺少的库 libopenmaxil.so 以及 hwaccel 所需的一切?

poky 大师:提交 5d47cdf448b6cff5bb7cc5b0ba0426b8235ec478

meta-openembedded 主人:提交 daa50331352c1f75da3a8ef6458ae3ddf94ef863

meta-raspberrypi 主人:提交 8d163dd

顺便说一句,通过使用 V4L2-M2M,我在生成的视频中得到了绿色阴影。也许有人可以指出我正确的方向吗?

您必须提供一些额外的标志,以便在编译时和 运行 时将 ffmpeg 指向正确的头文件和库位置。

这是我用来为 AArxh64 交叉编译 ffmpeg 的东西:

./configure \
    --arch="${HOST_ARCH}" \
    --target-os="linux" \
    --prefix="/usr/local" \
    --sysroot="${RPI_SYSROOT}" \
    --enable-cross-compile \
    --cross-prefix="${HOST_TRIPLE}-" \
    --toolchain=hardened \
    --enable-gpl --enable-nonfree \
    --enable-avresample \
    --enable-libvpx --enable-libx264 --enable-libxvid \
    --enable-omx --enable-omx-rpi --enable-mmal --enable-neon \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --extra-cflags="$(pkg-config --cflags mmal) \
                    -I${RPI_SYSROOT}/usr/local/include \
                    -I${RPI_SYSROOT}/opt/vc/include/IL" \
    --extra-ldflags="$(pkg-config --libs-only-L mmal) \
                     -Wl,-rpath-link,${RPI_SYSROOT}/opt/vc/lib \
                     -Wl,-rpath,/opt/vc/lib"

请注意,pkg-config 也为交叉编译配置,它在 Raspberry Pi sysroot 中查找,而不是在构建机器根目录中。这是通过设置正确的环境变量 here.

来完成的

-I 标志指定包含路径,pkg-config --libs-only-L 返回的-L 标志是库路径。 -Wl 将逗号分隔的参数列表传递给 linker。 -rpath-link用于查找link时其他共享库需要的共享库,-rpath用于查找运行时的库。这是必需的,因为用户空间库位于非标准位置,ld 默认不会在 /opt/vc/lib 中搜索。

您可以找到我在 GitHub 上使用的工具链、Dockerfile 和安装脚本:https://github.com/tttapa/RPi-Cpp-Toolchain/tree/master/toolchain/docker/rpi3/aarch64/aarch64-cross-build

用户空间脚本在这里:https://github.com/tttapa/RPi-Cpp-Toolchain/blob/76ac03741bc7b7da106ae89884c7bada96768a07/toolchain/docker/rpi3/aarch64/aarch64-cross-build/install-scripts/userland.sh
ffmpeg 脚本在这里:https://github.com/tttapa/RPi-Cpp-Toolchain/blob/76ac03741bc7b7da106ae89884c7bada96768a07/toolchain/docker/rpi3/aarch64/aarch64-cross-build/install-scripts/ffmpeg.sh

还有一些关于编译过程和存储库中使用的文件的更多文档here(尽管不是专门关于 ffmpeg 的)。