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

devtools/2025/1/20 3:38:28/

sss

文章目录

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


http://www.ppmy.cn/devtools/151991.html

相关文章

Python 调整 Excel 中的行列顺序

调整Excel 行列顺序指的是改变工作表中行或列的位置,以便更好地展示和分析数据。例如,你可以将重要数据列放在最前面,或者将相关数据列放在一起,以便更方便地进行比较和分析。本文将介绍如何通过Python高效地调整Excel 行列顺序。…

leetcode707-设计链表

leetcode 707 思路 本题也是用了虚拟头节点来进行解答,这样的好处是,不管是头节点还是中间的节点都可以当成是中间节点来处理,用同一套方法就可以进行处理,而不用考虑太多的边界条件。 下面题目中最主要的实现就是添加操作addA…

AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式

AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式 前面我们已经学习了Cursor 的两种工作模式,也就是Chat、Composer 更多细节可以看之前的文章 Cursor 对话模式详解 Chat、Composer 与 Normal/Agent 模式 这一节我们按一下最后一种模式,也就是内嵌对话模式 内嵌对话模式…

乘联会:1月汽车零售预计175万辆 环比暴跌33.6%

快科技1月18日消息,据乘联会的初步推算,2025年1月狭义乘用车零售总市场规模预计将达到约175万辆左右。与去年同期相比,这一数据呈现了-14.6%的同比下降态势;而相较于上个月,则出现了-33.6%的环比暴跌情况。 为了更清晰…

uniApp开通uniPush1.0个推,SpringBoot集成uniPush1.0个推

uniApp开通unipush1.0个推,SpringBoot程序集成 一、APP开通unipush1.0个推(商户App源码仅支持1.0个推) 1.app模块配置开通推送 2.应用开通推送 3.开通后点击消息推送菜单会看到如下页面 完成以上步骤后 此时android 仅支持在线推送。 4.配置各厂商离线推送 暂未…

微信小程序-base64加解密

思路:先创建一个base64.js的文件,这个文件可以作为专门加解密的文件模块,需要时就引用;创建好后,引用base64.js里的加解密函数。 注意:引用模块一定要引用正确的路径,否则会报错。 base64.js:…

Java复习第二天

一、代码题 1.合并两个有序数组 (1)题目 给你两个按 非递减顺序 排列的整数数组 nums1和 nums2,另有两个整数 m和n,分别表示nums1和nums2 中的元素数目。 请你合并nums2到 nums1中,使合并后的数组同样按非递减顺序排列。 注意:最终&#…

矩阵碰一碰发视频源码技术开发全解析,支持OEM

在当今数字化内容传播迅速发展的时代,矩阵碰一碰发视频功能以其便捷、高效的特点,为用户分享视频提供了全新的体验。本文将深入探讨矩阵碰一碰发视频源码的技术开发过程,从原理到实现,为开发者提供全面的技术指引。 一、技术原理 …