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时,每秒会打印一次平均帧率和当前帧率。

相关推荐
HideF2 小时前
Linux
linux·服务器·网络
voipmaker2 小时前
GB28181 对接踩坑实录:注册不上、目录不全、流卡顿,一次说清(附 2022 版变更清单)
物联网·音视频·实时音视频·信息与通信·iot·gb28181·国标gb28181
2601_958352904 小时前
23.5×19mm 换掉一整条音频链?|A-68 集成了什么:ADC / DAC / 24.576MHz 时钟 / AEC / 波束降噪,主控仅需 6 根线
前端·音视频·ai降噪·回声消除·语音模块
2601_965448874 小时前
AI视频制作:做系列历史人物视频音色不搭,AI 音色克隆的方法实测
人工智能·音视频
码上观世界4 小时前
多余的一声「嗯」:Fun-CosyVoice3 zero_shot 开头伪影排查实录
音视频
Ruiery4 小时前
Linux 6.6内核内存管理深度解析(十三):slab/slub 分配器
linux·运维·服务器
manyingAi4 小时前
AI漫剧生产系统架构解析:从文本拆解到音视频合成
人工智能·音视频
丰锋ff6 小时前
压缩命令笔记
linux
GeW8 小时前
产业新优势基础软件的人才底盘,从Linux与数据库开始
linux·数据库
by209998 小时前
Linux GCC/G++ 编译与 Makefile 构建
linux·运维·服务器·经验分享