硬件加速 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 的)。
我正在尝试在我的 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 的)。