Linux 音视频入门到实战专栏(视频篇)视频编解码 MPP
文章目录
- 一、MPP 介绍
- 二、获取和编译RKMPP库
- 三、视频解码
- 四、视频编码
沉淀、分享、成长,让自己和他人都能有所收获!😄
📢本篇将介绍如何调用alsa api来进行音频数据的播放和录制。
一、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
二、获取和编译RKMPP库
获取和编译RKMPP库:
git clone https://github.com/rockchip-linux/mpp.git
编译:
进入aarch64相应的编译路径
cd mpp/build/linux/aarch64/
修改交叉编译配置文件,指定编译器gcc和g++(一般默认就好)
vim arm.linux.cross.cmake
运行bash脚本后编译(编译过程大概需要15分钟)
./make-Makefiles.bash
make
三、视频解码
解码器demo为mpi_dec_test系列程序,包括使用decode_put_packet和decode_get_frame接口的单线程mpi_dec_test、多线程的mpi_dec_mt_test以及多实例 mpi_dec_multi_test。 mpi_dec_test的命令参数如下:
- -i 输入的码流文件。
- -o 输出的图像文件。
- -w 图像宽度,单位为像素。
- -h 图像高度,单位为像素。
- -t 码流文件的协议类型。
- -f 图像色彩空间格式以及内存排布方式,默认为NV12。
- -n 最大解码帧数。测试时若码流较长,可仅输出前n帧。
- -s MPP实例数,默认为1。
- -v 日志选项:q为静默标志;f为fps显示标志。
- -slt 输出帧对应的校验文件。
- -help 打开帮助文档。
1、mpi_dec_test的命令参数中,输入文件(i)和码流类型(t)为强制要求配置的参数,其他参数如输出文件(o)、图像宽度(w)、图像高度(h)和解码帧数(n)等为可选参数,可以根据不同的测试需求进行配置。
2、mpi_dec_test的命令参数中,输出帧对应的校验文件(slt)将输出帧数据转换为对应的循环冗余校验码(具体逻辑见utils/utils.c)。校验文件的大小往往只有几kB,在芯片的slt测试中,将输出帧文件的对比转换成校验文件的对比,可以显著缩短测试周期。
四、视频编码
mpi_enc_test的命令参数描述说明
命令参数 描述说明
- -i 输入的图像文件。
- -o 输出的码流文件。
- -w 图像宽度,单位为像素。
- -h 图像高度,单位为像素。
- -hstride 垂直方向相邻两行之间的距离,单位为byte。
- -vstride 图像分量之间的以行数间隔数,单位为1。
- -f 图像色彩空间格式以及内存排布方式,默认为NV12。
- -t 码流文件的协议类型。
- -tsrc 源码流格式,仅在测试整体编解码性能时使用。
- -n 最大解码帧数。测试时若码流较长,可仅输出前n帧。
- -g gop参考模式,对应不同的TSVC码流。
- -rc 码率控制模式。0:VBR; 1:CBR; 2:FIXQP; 3:AVBR。
- -bps 码率约束参数。命令格式:bps_target:bps_min:bps_max。
- -fps 输入/输出帧率控制,默认为30。该命令参数仅说明输入帧率和输出帧率之间的比例关系,与实际帧率无关。
- -qc 质量控制。
- -s MPP实例数,默认为1。
- -v 日志选项:q为静默标志;f为fps显示标志。
- -ini 额外的编码配置文件ini(暂未生效)。
- -slt 输出码流对应的校验文件。
1、mpi_enc_test的命令参数中,图像宽度(w)、图像高度(h)和码流类型(t)为强制要求配置的参数,其他参数如输入文件(i)、输出文件(o)、编码帧数(n)和色彩空间格式及内存排布方式(f)等为可选参数。如果没有指定输入文件,mpi_enc_test会生成默认的彩条图像进行编码。
2、mpi_enc_test的命令参数提供了多样化的码率控制方案,用户可以通过码率控制模式(rc)和码率约束参数(bps)对输出码流的码率进行控制。码率控制模式(rc)分为可变码率模式(VBR)、固定码率模式(CBR)、qp修正的码率模式(FIXQP)和自适应码率模式(AVBR),默认模式为VBR;码率约束参数(bps)则是为MPP内部配置码率边界提供参考。
3、mpi_enc_test的命令参数中,日志选项(v)为q时,MPP日常日志关闭;日志选项(v)为f时,每秒会打印一次平均帧率和当前帧率。