ffmpeg-rk3568-mpp 硬件加速版本

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%
功耗
发热 明显 轻微
并发能力 受限 支持多路

目标

  1. 编译安装 MPP 最新版本(1.3.9+)
  2. 编译 FFmpeg 并启用 RKMPP 硬件加速支持
  3. 验证硬件编解码功能

准备工作

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 开发板

相关推荐
深念Y6 小时前
FFmpeg 480p 转码失败但 1080p/720p 正常的坑
ffmpeg·音视频·转码·流媒体·分辨率·hls·m3u8
七点半7707 小时前
FFmpeg C++ AI视觉开发核心手册 (整合版)适用场景:视频流接入、AI模型预处理(抽帧/缩放/格式转换)、高性能算法集成。
c++·人工智能·ffmpeg
hu55667982 天前
FFmpeg 如何合并字幕
ffmpeg
屋檐上的大修勾2 天前
使用ffmpeg本地发布rtmp/rtsp直播流
ffmpeg
紫金修道2 天前
【编解码】基于CPU的高性能 RTSP 多路摄像头抓帧插件:设计与实现详解
ffmpeg
雄哥0072 天前
Windows系统下FFmpeg的安装与环境配置指南
windows·ffmpeg
紫金修道3 天前
【编解码】RK3588 平台基于 FFmpeg RKMPP 硬解的多路 RTSP 抓帧插件实战
ffmpeg·rkmpp
QMCY_jason3 天前
RK3588 交叉编译ffmpeg提示rockchip_mpp>=1.3.9 错误的问题
ffmpeg
Memory_荒年5 天前
FFmpeg:音视频界的“万能瑞士军刀”
ffmpeg