FFmpeg 编译 RK3568 MPP 硬件加速版本
背景
在嵌入式视频处理场景中,硬件加速编解码能显著降低 CPU 占用,提升系统整体性能。RK3568 作为瑞芯微的中高端 SoC,内置了强大的视频处理单元(VPU),通过 MPP(Media Process Platform)库可以实现高效的硬件编解码。
环境信息
| 项目 | 版本/型号 |
|---|---|
| 开发板 | 飞凌 RK3568 |
| 系统 | Ubuntu 22.04 |
| 内核版本 | Linux 5.10.166 |
| 芯片 | RK3568J |
| 系统 MPP 版本 | 1.3.8 |
| 系统 FFmpeg | 无硬件加速 |
问题分析
飞凌提供的初版系统中,MPP 版本为 1.3.8,而 FFmpeg 的 RKMPP 硬件加速支持需要 MPP 最低版本 1.3.9。这导致系统自带的 FFmpeg 只能使用 CPU 软件编解码,在处理高清视频时 CPU 占用率极高,影响系统稳定性。
软件编解码 vs 硬件编解码:
| 对比项 | 软件编解码 | 硬件编解码 |
|---|---|---|
| CPU 占用 | 80-100% | 5-15% |
| 功耗 | 高 | 低 |
| 发热 | 明显 | 轻微 |
| 并发能力 | 受限 | 支持多路 |
目标
- 编译安装 MPP 最新版本(1.3.9+)
- 编译 FFmpeg 并启用 RKMPP 硬件加速支持
- 验证硬件编解码功能
准备工作
1. 更新软件源
系统默认的软件源可能无法找到部分依赖包,建议更换为国内镜像源:
# 备份原有源文件cp/etc/apt/sources.list /etc/apt/sources.list.bak# 写入 Ubuntu 22.04 清华镜像源(ARM64 架构)cat>/etc/apt/sources.list<<EOF deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-updates main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-backports main restricted universe multiverse deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu-ports/ jammy-security main restricted universe multiverse EOF# 更新软件包列表aptupdate说明:
ubuntu-ports是 ARM 架构专用的软件源,与 x86 的ubuntu源不同。
2. 安装编译依赖
aptinstall-y\build-essentialgitcmake pkg-config\libdrm-dev librga-dev\yasm nasm libssl-dev依赖说明:
| 依赖包 | 用途 |
|---|---|
| build-essential | 基础编译工具链(gcc、make 等) |
| git | 下载源码 |
| cmake | MPP 编译工具 |
| pkg-config | 库依赖管理 |
| libdrm-dev | DRM 显卡驱动库 |
| librga-dev | Rockchip 2D 图形加速库 |
| yasm/nasm | 汇编器,FFmpeg 优化编译需要 |
| libssl-dev | OpenSSL 开发库 |
编译 MPP
MPP(Media Process Platform)是 Rockchip 提供的视频编解码框架,封装了 VPU 的底层操作。
1. 卸载旧版本
# 移除系统自带的旧版本 MPPaptremove-ylibrockchip-mpp1 librockchip-mpp-dev2. 下载源码
cd/home/forlinxgitclone https://github.com/rockchip-linux/mpp.gitcdmpp3. 编译安装
# 配置编译选项cmake-DRKPLATFORM=ON-DHAVE_DRM=ON-DCMAKE_INSTALL_PREFIX=/usr/local.# 编译(-j4 使用 4 核并行编译)make-j4# 安装到系统目录makeinstall# 更新动态链接库缓存ldconfig编译参数说明:
| 参数 | 说明 |
|---|---|
-DRKPLATFORM=ON | 启用 Rockchip 平台支持 |
-DHAVE_DRM=ON | 启用 DRM 支持,用于与显示子系统协作 |
-DCMAKE_INSTALL_PREFIX=/usr/local | 安装路径 |
4. 验证安装
# 检查 MPP 版本pkg-config--modversionrockchip_mpp预期输出:1.3.9或更高版本。
编译 FFmpeg
1. 下载 FFmpeg RKMPP 版本
Rockchip 维护了一个 FFmpeg 分支,包含 RKMPP 硬件加速支持。建议使用 8.1 分支:
cd/home/forlinxgitclone-b8.1https://github.com/rockchip-linux/ffmpeg-rockchip.gitcdffmpeg-rockchip说明:
-b 8.1参数指定克隆 8.1 分支,该版本经过 Rockchip 官方验证,稳定性较好。
2. 配置编译环境
# 设置 pkg-config 搜索路径(MPP 安装在 /usr/local)exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfigexportLD_LIBRARY_PATH=/usr/local/lib3. 配置编译选项
./configure\--enable-rkmpp\--enable-version3\--enable-gpl\--enable-nonfree\--enable-libdrm\--prefix=/usr/local关键参数说明:
| 参数 | 说明 |
|---|---|
--enable-rkmpp | 启用 Rockchip MPP 硬件加速 |
--enable-gpl | 启用 GPL 许可的组件 |
--enable-nonfree | 启用非自由组件 |
--enable-libdrm | 启用 DRM 支持 |
--prefix=/usr/local | 安装路径 |
4. 编译安装
# 编译(根据 CPU 核心数调整 -j 参数)make-j4# 安装makeinstall# 复制可执行文件到系统路径cpffmpeg /usr/local/bin/验证
1. 检查硬件编码器
ffmpeg-encoders|greprkmpp预期输出:
V..... h264_rkmpp Rockchip MPP (Media Process Platform) H.264 encoder (codec h264) V..... hevc_rkmpp Rockchip MPP (Media Process Platform) HEVC encoder (codec hevc)2. 检查硬件解码器
ffmpeg-decoders|greprkmpp预期输出:
V..... h264_rkmpp Rockchip MPP (Media Process Platform) H.264 decoder (codec h264) V..... hevc_rkmpp Rockchip MPP (Media Process Platform) HEVC decoder (codec hevc) V..... vp8_rkmpp Rockchip MPP (Media Process Platform) VP8 decoder (codec vp8) V..... vp9_rkmpp Rockchip MPP (Media Process Platform) VP9 decoder (codec vp9)3. 测试硬件编码
# 使用硬件编码器转码测试ffmpeg-iinput.mp4-c:vh264_rkmpp-c:acopy output_h264.mp4# 使用 HEVC 硬件编码ffmpeg-iinput.mp4-c:vhevc_rkmpp-c:acopy output_hevc.mp44. 性能对比
编码相同视频文件,对比 CPU 占用:
# 软件编码(CPU)ffmpeg-iinput.mp4-c:vlibx264-c:acopy output_soft.mp4# 硬件编码(MPP)ffmpeg-iinput.mp4-c:vh264_rkmpp-c:acopy output_hard.mp4使用top命令观察 CPU 占用差异,硬件编码时 CPU 占用应显著降低。
常见问题
1. pkg-config 找不到 rockchip_mpp
错误信息:
Package 'rockchip_mpp' not found解决方案:
# 检查 pkg-config 路径echo$PKG_CONFIG_PATH# 如果为空,手动设置exportPKG_CONFIG_PATH=/usr/local/lib/pkgconfig# 验证pkg-config --list-all|greprockchip2. 运行时找不到 librockchip_mpp.so
错误信息:
error while loading shared libraries: librockchip_mpp.so: cannot open shared object file解决方案:
# 更新动态链接库缓存ldconfig# 或临时设置exportLD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH3. 编译 FFmpeg 时找不到 rkmpp 选项
原因:使用的是官方 FFmpeg 而非 Rockchip 维护的分支。
解决方案:
# 使用 Rockchip 维护的 FFmpeg 分支(8.1 版本)gitclone-b8.1https://github.com/rockchip-linux/ffmpeg-rockchip.git4. 硬件编码失败
错误信息:
[rkmpp @ ...] Failed to get output packet可能原因:
- MPP 版本过低
- DRM 设备权限不足
解决方案:
# 检查 MPP 版本pkg-config--modversionrockchip_mpp# 检查 DRM 设备权限ls-la/dev/dri/chmod666/dev/dri/renderD128# 临时方案附录
支持的编解码格式
| 类型 | 格式 | 编码 | 解码 |
|---|---|---|---|
| H.264 | AVC | h264_rkmpp | h264_rkmpp |
| H.265 | HEVC | hevc_rkmpp | hevc_rkmpp |
| VP8 | - | - | vp8_rkmpp |
| VP9 | - | - | vp9_rkmpp |
参考资源
- Rockchip MPP 官方仓库
- FFmpeg RKMPP 分支(8.1 版本)
- Rockchip Linux 开发文档
作者:李江军
日期:2026-04-08
平台:飞凌 RK3568 开发板