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. 更新软件源
系统默认的软件源可能无法找到部分依赖包,建议更换为国内镜像源:
bash
# 备份原有源文件
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
# 更新软件包列表
apt update
说明:
ubuntu-ports是 ARM 架构专用的软件源,与 x86 的ubuntu源不同。
2. 安装编译依赖
bash
apt install -y \
build-essential git cmake 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. 卸载旧版本
bash
# 移除系统自带的旧版本 MPP
apt remove -y librockchip-mpp1 librockchip-mpp-dev
2. 下载源码
bash
cd /home/forlinx
git clone https://github.com/rockchip-linux/mpp.git
cd mpp
3. 编译安装
bash
# 配置编译选项
cmake -DRKPLATFORM=ON -DHAVE_DRM=ON -DCMAKE_INSTALL_PREFIX=/usr/local .
# 编译(-j4 使用 4 核并行编译)
make -j4
# 安装到系统目录
make install
# 更新动态链接库缓存
ldconfig
编译参数说明:
| 参数 | 说明 |
|---|---|
-DRKPLATFORM=ON |
启用 Rockchip 平台支持 |
-DHAVE_DRM=ON |
启用 DRM 支持,用于与显示子系统协作 |
-DCMAKE_INSTALL_PREFIX=/usr/local |
安装路径 |
4. 验证安装
bash
# 检查 MPP 版本
pkg-config --modversion rockchip_mpp
预期输出:1.3.9 或更高版本。
编译 FFmpeg
1. 下载 FFmpeg RKMPP 版本
Rockchip 维护了一个 FFmpeg 分支,包含 RKMPP 硬件加速支持。建议使用 8.1 分支:
bash
cd /home/forlinx
git clone -b 8.1 https://github.com/rockchip-linux/ffmpeg-rockchip.git
cd ffmpeg-rockchip
说明:
-b 8.1参数指定克隆 8.1 分支,该版本经过 Rockchip 官方验证,稳定性较好。
2. 配置编译环境
bash
# 设置 pkg-config 搜索路径(MPP 安装在 /usr/local)
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
export LD_LIBRARY_PATH=/usr/local/lib
3. 配置编译选项
bash
./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. 编译安装
bash
# 编译(根据 CPU 核心数调整 -j 参数)
make -j4
# 安装
make install
# 复制可执行文件到系统路径
cp ffmpeg /usr/local/bin/
验证
1. 检查硬件编码器
bash
ffmpeg -encoders | grep rkmpp
预期输出:
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. 检查硬件解码器
bash
ffmpeg -decoders | grep rkmpp
预期输出:
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. 测试硬件编码
bash
# 使用硬件编码器转码测试
ffmpeg -i input.mp4 -c:v h264_rkmpp -c:a copy output_h264.mp4
# 使用 HEVC 硬件编码
ffmpeg -i input.mp4 -c:v hevc_rkmpp -c:a copy output_hevc.mp4
4. 性能对比
编码相同视频文件,对比 CPU 占用:
bash
# 软件编码(CPU)
ffmpeg -i input.mp4 -c:v libx264 -c:a copy output_soft.mp4
# 硬件编码(MPP)
ffmpeg -i input.mp4 -c:v h264_rkmpp -c:a copy output_hard.mp4
使用 top 命令观察 CPU 占用差异,硬件编码时 CPU 占用应显著降低。
常见问题
1. pkg-config 找不到 rockchip_mpp
错误信息:
Package 'rockchip_mpp' not found
解决方案:
bash
# 检查 pkg-config 路径
echo $PKG_CONFIG_PATH
# 如果为空,手动设置
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
# 验证
pkg-config --list-all | grep rockchip
2. 运行时找不到 librockchip_mpp.so
错误信息:
error while loading shared libraries: librockchip_mpp.so: cannot open shared object file
解决方案:
bash
# 更新动态链接库缓存
ldconfig
# 或临时设置
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
3. 编译 FFmpeg 时找不到 rkmpp 选项
原因: 使用的是官方 FFmpeg 而非 Rockchip 维护的分支。
解决方案:
bash
# 使用 Rockchip 维护的 FFmpeg 分支(8.1 版本)
git clone -b 8.1 https://github.com/rockchip-linux/ffmpeg-rockchip.git
4. 硬件编码失败
错误信息:
[rkmpp @ ...] Failed to get output packet
可能原因:
- MPP 版本过低
- DRM 设备权限不足
解决方案:
bash
# 检查 MPP 版本
pkg-config --modversion rockchip_mpp
# 检查 DRM 设备权限
ls -la /dev/dri/
chmod 666 /dev/dri/renderD128 # 临时方案
附录
支持的编解码格式
| 类型 | 格式 | 编码 | 解码 |
|---|---|---|---|
| H.264 | AVC | h264_rkmpp | h264_rkmpp |
| H.265 | HEVC | hevc_rkmpp | hevc_rkmpp |
| VP8 | - | - | vp8_rkmpp |
| VP9 | - | - | vp9_rkmpp |
参考资源
作者: 李江军
日期: 2026-04-08
平台: 飞凌 RK3568 开发板