Linux 音视频入门到实战专栏(视频篇)视频编解码 MPP

文章目录

沉淀、分享、成长,让自己和他人都能有所收获!😄

📢本篇将介绍如何调用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开发指南。

c 复制代码
https://github.com/rockchip-linux/mpp/tree/develop/doc

二、获取和编译RKMPP库

获取和编译RKMPP库:

c 复制代码
git clone https://github.com/rockchip-linux/mpp.git

编译:

进入aarch64相应的编译路径

c 复制代码
cd mpp/build/linux/aarch64/

修改交叉编译配置文件,指定编译器gcc和g++(一般默认就好)

c 复制代码
vim arm.linux.cross.cmake

运行bash脚本后编译(编译过程大概需要15分钟)

c 复制代码
./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时,每秒会打印一次平均帧率和当前帧率。

相关推荐
大聪明-PLUS几秒前
在 C++/CLI 中开发描述符类
linux·嵌入式·arm·smarc
weixin_436525073 分钟前
jar包启动使用logs替换nohup日志文件
java·linux·数据库
宠..4 分钟前
创建文本框控件
linux·运维·服务器·开发语言·qt
Bigan(安)7 分钟前
【奶茶Beta专项】【LVGL9.4源码分析】03-显示框架-display
linux·c语言·mcu·arm·unix
mljy.9 分钟前
Linux《进程间关系和守护进程》
linux
win水10 分钟前
十,进程控制
linux·服务器·vim·gcc·g++
摸鱼仙人~26 分钟前
VMware虚拟机(以Ubuntu为例)的共享文件夹挂载操作
linux·chrome·ubuntu
ZhongruiRao28 分钟前
vscode windows免密登录Linux服务器教程 解决设置后仍需要输入密码的问题
linux·服务器·vscode
Evan芙29 分钟前
ifconfig 命令详解
linux·网络·ubuntu
XH-hui41 分钟前
【打靶日记】VulNyx 之 Responder
linux·网络安全·vulnyx