视频编解码——基于mpp库
1. MPP 介绍
瑞芯微提供的媒体处理软件平台(Media Process Platform,简称MPP)是适用于瑞芯微芯片系列的通用媒体处理软件平台。该平台对应用软件屏蔽了芯片相关的复杂底层处理,其目的是为了屏蔽不同芯片的差异,为使用者提供统一的视频媒体处理接口(Media Process Interface,缩写MPI)。MPP提供的功能包括:
-
视频解码
H.265 / H.264 / H.263 / VP9 / VP8 / MPEG-4 / MPEG-2 / MPEG-1 / VC1 / MJPEG / AV1 -
视频编码
H.265 / H.264 / VP8 / MJPEG -
视频处理
视频拷贝,缩放,色彩空间转换,场视频解交织(Deinterlace)
以下为RK官方MPP文档的GitHub链接,包含了中文/英文的MPP开发指南:
https://github.com/rockchip-linux/mpp/tree/develop/doc
2. 获取和编译RKMPP库
2.1. 测试环境
- RK官方MPP库地址:https://github.com/rockchip-linux/mpp
2.2. 安装相关依赖工具
sudo apt update
sudo apt install -y git cmake
2.3. 拉取RK官方MPP仓库
git clone https://github.com/rockchip-linux/mpp.git
2.4. 编译
-
进入aarch64相应的编译路径:
cd mpp/build/linux/aarch64/
-
修改交叉编译配置文件,指定编译器gcc和g++(一般默认就好):
vim arm.linux.cross.cmake
-
运行bash脚本后编译(编译过程大概需要4分钟):
./make-Makefiles.bash
make -
编译结束后,你将会发现目录下多了很多文件。
- 进入
test
目录,目录下便是编译生成的一些测试程序。
3. 视频解码
解码器demo为mpi_dec_test
系列程序,包括使用decode_put_packet
和decode_get_frame
接口的单线程mpi_dec_test
、多线程的mpi_dec_mt_test
以及多实例的mpi_dec_multi_test
。
3.1. 测试环境
- 测试操作系统:Debian 12
3.2. mpi_dec_test
的命令参数
3.2.1. 终端查看mpi_dec_test
的命令参数
-
打开两个终端,其中一个终端输入以下命令,来监控日志输出:
sudo tail -f /var/log/syslog
-
另一个终端执行
mpi_dec_test
测试程序:mpi_dec_test
-
执行完测试程序后,会在日志中打印如下帮助文档:
3.2.2. mpi_dec_test
的命令参数描述说明
命令参数 | 描述说明 |
---|---|
-i | 输入的码流文件。 |
-o | 输出的图像文件。 |
-w | 图像宽度,单位为像素。 |
-h | 图像高度,单位为像素。 |
-t | 码流文件的协议类型。 |
-f | 图像色彩空间格式以及内存排布方式,默认为NV12。 |
-n | 最大解码帧数。测试时若码流较长,可仅输出前n帧。 |
-s | MPP实例数,默认为1。 |
-v | 日志选项:q 为静默标志;f 为fps显示标志。 |
-slt | 输出帧对应的校验文件。 |
-help | 打开帮助文档。 |
小技巧
mpi_dec_test
的命令参数中,输入文件(i
)和码流类型(t
)为强制要求配置的参数,其他参数如输出文件(o
)、图像宽度(w
)、图像高度(h
)和解码帧数(n
)等为可选参数,可以根据不同的测试需求进行配置。mpi_dec_test
的命令参数中,输出帧对应的校验文件(slt
)将输出帧数据转换为对应的循环冗余校验码(具体逻辑见utils/utils.c
)。校验文件的大小往往只有几kB,在芯片的slt测试中,将输出帧文件的对比转换成校验文件的对比,可以显著缩短测试周期。