跳到主要内容

MPP Sample 使用说明

MPP Sample 使用说明

MPP Sample 简介

MPP sample 一般存放在MPP Middleware 的sample 目录下。此外,MPP Framework 的demo 目录下也有一些sample。

本文档主要介绍MPP Middleware 各sample 的基本使用方法:配置、编译、测试以及sample类别、各平台方案上的支持情况和测试方法等。

MPP Sample 使用说明

这里以 sample_smartIPC_demo 为例,演示智能IPC的场景,通过RTSP 方式查看编码码流的场景。同时支持多路编码,单双目,拼接,识别类型上支持人形和移动侦测。这里将演示如何编译 sample ,运行 sample 的基本过程。

配置方案

首先输入以下命令,配置SDK开发环境

source build/envsetup.sh

然后输入 lunch 命令加载方案

lunch

这里选择 v821-perf2-tina 方案,输入 4,按回车

image-20241118171552061

配置测试 Sample

输入以下命令,进入配置界面

make menuconfig

image-20241118163536930

配置页面如下

image-20241118163553180

下拉找到 Allwinner 按回车进入

image-20241118163621775

在最下面找到 eyesee-mpp,按回车进入

image-20241118163640800

找到 select mpp sample,按空格选中

image-20241118164505217

找到 mpp sample smartIPC_demo,按空格选中

image-20241118164525565

使用方向键选择 Save

image-20241118164558256

选择 OK

image-20241118164611317

选择 EXIT

image-20241118164617725

使用方向键选择 Exit

image-20241118164655148

继续退出

image-20241118164710249

继续退出

image-20241118164732177

编译 SDK

回到控制台,输入 mp -j4 以 4 线程并行方式编译

image-20241118164823029

等待 SDK 编译完成,会在 out 目录下生成固件

image-20241118171426560

将固件拷贝出来,准备烧录

image-20241118171446163

配置 Sample

前往 platform/allwinner/eyesee-mpp/middleware/sun300iw1/sample/bin 找到刚才编译出来的Sample

image-20241118172041858

编辑 sample_smartIPC_demo.conf 修改配置文件,需要修改的项目如下(可以在附录获取完整版配置文件):

stream_buf_size = -1 ## 使用码流大小推流
main_rtsp_id = 0 ## 启用 RTSP
main_src_frame_rate = 20 ## 帧率设置 20 帧
main_encode_frame_rate = 20 ## 配置编码器20帧
main_2nd_enable = 1 ## 开启子码流
main_2nd_src_frame_rate = 20 ## 子码流帧率20帧
main_2nd_encode_frame_rate = 20 ## 子码流编码帧率20帧
main_2nd_take_picture = 1 ## 子码流开启拍照功能

将SD卡格式化为 FAT32 格式

image-20241118172735225

将上面编译出来的 sample 和 配置文件复制到 SD 卡里

image-20241118172836521

测试运行 Sample

配置无线网络

使用命令扫描无线网络

wifi -s 

image-20241118173306056

使用命令连接无线网络,连接成功后使用 ifconfig 命令查看连接情况与 IP 地址

wifi -c <SSID> <密码>
ifconfig wlan0

image-20241118173535716

挂载 SD 卡

插入 SD 卡后,可以在日志里看到新生成的卡设备

image-20241118173626105

使用命令挂载 SD 卡

mount /dev/mmcblk0p1 /mnt/extsd

image-20241118174051714

运行 Sample

前往SD卡的挂载目录,查看文件是否存在

cd /mnt/extsd

image-20241118174134210

使用命令,运行 sample

./sample_smartIPC_demo -path sample_smartIPC_demo.conf &

image-20241118174552557

在平板上打开 VLC 播放器。配置日志显示的地址

rtsp://192.168.51.101:8554/ch0

image-20241118175852117

即可打开串流视频

image-20241118180020486

MPP Sample 支持列表

综合 DEMO

MPP sample功能描述使用组件
sample_smartIPC_demo演示智能IPC的场景,通过RTSP方式查看编码码流的场景。同时支持多路编码,单双目,拼接,识别类型上支持人形和移动侦测mp_vi
mp_venc

视频类

MPP sample功能描述使用组件
sample_driverVipp演示直接调用vin驱动接口获取视频帧。
sample_virvi演示采集图像帧,最多可支持4路vipp采集。该sample测试mpi_vi组件。
sample_virvi2vo演示采集+预览。创建mpi_vi和mpi_vo,将它们绑定,再分别启动。mpi_vi采集图像,直接传输给mpi_vo显示。mpp_vi
mpp_hw_display
mpp_vo
sample_vi_reset该sample 演示vi 组件的reset 流程。
sample_isposd该sample测试mpi_vi和mpi_venc组件绑定。mpp_vi
mpp_venc
mpp_system_rgb_ctrl
sample_vin_isp_test该sample 用于测试ISP通路,是通过调用 isp 接口抓图的 demo。mpp_vi
sample_region该sample测试mpi_vi和mpi_vo组件或者mpi_vi和mpi_venc组件绑定。mpp_vi
sample_venc该sample 演示从yuv(sample中格式限定为yuv420p)原始数据文件xxx.yuv中读取视频帧,编码,将取得的编码往输出文件里面直接写。生成裸码流视频文件。mpp_venc
sample_venc2muxer从yuv原始数据文件xxx.yuv中读取视频帧,编码,并由muxer进行封装生成相应的视频输出文件。mpp_venc
mpp_muxer
sample_virvi2venc该sample测试mpi_vi和mpi_venc组件的绑定组合。创建mpi_vi和mpi_venc,将它们绑定,再分别启动。
mpi_vi采集图像,直接传输给mpi_venc进行编码。
mpp_vi
mpp_venc
sample_timelapse演示缩时录影。
从camera节点取vi输入数据,对venc组件设置取帧间隔,设置编码帧率,并对数据进行编码封装,生成对应的视频输出文件。
mpp_vi
mpp_venc
mpp_muxer
sample_virvi2venc2muxer从camera 节点取vi 输入数据,并对数据进行编码封装,生成对应的视频输出文件。mpi_vi
mpp_venc
mpp_muxer
sample_multi_vi2venc2muxer最多允许4路编码加1路jpeg拍照。每个编码通道都可以选择vipp,以及timelapse模式等。mpp_vi
mpp_venc
mpp_muxer
sample_rtsp演示视频编码后的rtsp传输的场景。mpp_vi
mpp_venc
mpp_system_rtsp
sample_CodecParallel演示同编同解。mpp_vi
mpp_venc
mpp_demuxer
mpp_vdec
mpp_muxer
mpp_hw_display
mpp_vo
sample_vdec连续解码jpg格式图片或者h264裸码流,然后保存为yuv格式文件。mpp_vdec
sample_demux2vdec该sample演示从原始视频文件(如:xxx.mp4)中分离出视频数据帧并解码生成yuv文件。mpp_demuxer
mpp_vdec
sample_demux2vdec_saveFrame该sample演示从原始视频文件(如:264.mp4)中分离出视频数据帧并解码生成yuv文件。mpp_demuxer
mpp_vdec
sample_demux2vdec2vo该sample演示解码视频文件(如:xxx.mp4)并从LCD上显示出来。mpp_demuxer
mpp_vdec
mpp_hw_display
mpp_vo
sample_vencQpMap演示调用VENC MPI 接口,测试视频编码QpMap模式。mpp_venc
sample_OnlineVenc该sample演示IPC在线编码使用场景:主码流在线编码、子码流离线编码。mpp_venc
sample_takePicture演示拍照功能。支持通过配置开启单拍和连拍测试。mpp_vi
mpp_venc
sample_recorder支持最大四路录制编码封装或者预览显示。mpp_vi
mpp_venc
mpp_vo
sample_VideoResizer解码视频文件(如:xxx.mp4)再重编码为h264,保存为裸码流文件。模拟客户使用场景,mpi_demux和mpi_vdec之间用非绑定方式,mpi_vdec和mpi_venc用绑定方式。

音频类

MPP sample功能描述使用组件
sample_ai根据配置参数采集对应的pcm数据,并写入到文件中保存。mpp_aio
sample_ao根据配置参数读取pcm数据,然后播放声音,从耳机口或喇叭输出声音。mpp_aio
sample_aoSync演示接口AW_MPI_AO_SendFrameSync 的使用方法,采用同步的方式send pcm frame。而sample_ao 是采用异步的方式。
根据配置参数读取pcm数据,然后播放声音,从耳机口输出声音。
支持硬件音量调节和软件音量调节。
mpp_aio
sample_ao_resample_mixer根据配置参数读取pcm数据,然后播放声音,从耳机口或喇叭输出声音。
可以测试resample及混音功能。
mpp_aio
sample_ao2ai_aec本sample主要用来演示aec功能的使用。
sample创建两路ai,一路通过tunnel mode 绑定于audio enc,直接aac编码,并保存编码后的数据;一路采用非tunnel模式,由app获取ai数据,做其他处理。
sample运行过程如下:
根据配置参数读取pcm数据,然后播放声音。同时ai采集音频数据,并做aec回声消除处理,后送aac编码或直接获取aec后的数据用做他用。
mpp_aenc
mpp_aio
sample_ao2ai_aec_rate_mixer演示回声消除功能。mpp_aenc
mpp_aio
sample_aec演示aec(回声消除)功能的使用。mpp_aio
sample_aenc从pcm文件(如:test.wav)中读取每一桢的数据,进行编码,然后保存为aac/mp3/adpcm/pcm/g711a/g711u/g726格式的压缩文件。mpp_aenc
mpp_aio
sample_ai2aencmic录音送入编码器,取得每一帧数据的编码,写到文件中。mpp_aenc
mpp_aio
sample_ai2aenc2muxer根据配置参数采集对应的pcm数据,然后根据配置信息将pcm数据编码,最后写入到文件中进行保存。mpp_aenc
mpp_aio
sample_select演示AW_MPI_SYS_HANDLE_Select()的用法。mpp_aenc
sample_adec从已编码的ADTS格式的AAC文件(如:test.aac)中读取每一桢的数据,进行解码,然后保存为WAV格式的pcm文件。mpp_adec
mpp_aio
sample_demux2adec从已编码的ADTS格式的AAC文件(如:test.aac)中读取每一桢的数据,进行解码,然后通过ao输出。mpp_adec
mpp_aio
sample_demux2adec2ao根据配置参数读取视频文件,解封装,获取到音频数据后,送解码器,保存为wav文件。mpp_demuxer
mpp_adec
sample_WebRtcAec用来测试WebRtcAec的回声消除效果。mpp_ai
mpp_aenc

视频显示类

MPP sample功能描述使用组件
sample_vo从yuv原始数据文件xxx.yuv中读取视频帧,标记时间戳,送给mpi_vo组件显示。mpp_hw_display
mpp_vo
sample_UILayer测试UILayer的格式。
sample自己创建指定格式的RGB图,设置给UILayer。
mpp_hw_display
mpp_vo

G2D 类

MPP sample功能描述使用组件
sample_g2d该sample 通过直接处理image图片来演示g2d模块常用功能的使用方式旋转。g2d模块支持最大2K输入输出。
sample_vi_g2d该sample从mpi_vi组件获取视频帧,调用g2d驱动做旋转处理,处理后的图像送mpi_vo显示,也可保存为原始图片供分析。g2d模块支持最大2K输入输出。mpp_hw_display
mpp_vo

加解密类

MPP sample功能描述使用组件
sample_twinchn_virvi2venc2ce该sample 同时测试两路编码的加解密。
两路mpi_vi 和mpi_venc 组件分别绑定组合。mpi_vi采集图像,直接传输给mpi_venc 进行编码,在进行ce加密解密。
libopenssl
sample_virvi2venc2ce该sample 测试一路编码的加解密。
mpi_vi 和mpi_venc 组件绑定组合。mpi_vi采集图像,直接传输给mpi_venc 进行编码,在进行ce加密解密。
libopenssl

UVC/UAC 类

MPP sample功能描述使用组件
sample_uvc2vdec_vo测试mpi_uvc->mpi_vdec的绑定方式传输数据,mpi_vdec->mpi_vo采用非绑定方式。mpp_uvc
mpp_hw_display
mpp_vo
mpp_vdec
sample_uvc2vdenc2vo测试mpi_uvc->mpi_vdec的绑定方式传输数据,mpi_vdec->mpi_vo也采用绑定方式。mpp_uvc
mpp_hw_display
mpp_vo
mpp_vdec
sample_uvc2vo测试mpi_uvc组件的绑定方式输出。mpp_uvc
mpp_hw_display
mpp_vo
sample_uvc_vo测试mpi_uvc组件的非绑定方式输出。mpp_uvc
mpp_hw_display
mpp_vo
sample_uvcout把整个板子当作UVC摄像头,将图像送由电脑显示,电脑端使用VLC工具查看。mpp_uvc
sample_uac演示UAC做主,mjpeg编码输出功能

多媒体文件类

MPP sample功能描述使用组件
sample_demux从视频文件(如:test.mp4)中分离出所有的视频、音频、subtitle数据,分别组成对应文件。mpp_demuxer
sample_file_repair该sample 用来修复mp4 文件。mpp_muxer

AI 算法类

MPP sample功能描述使用组件
sample_pdet演示人形侦测功能mp_vi

其他 Sample

MPP sample功能描述使用组件
sample_glog该sample 演示glog (Google Logging Library) 的使用方法。
sample_hello该sample 用来验证mpp middleware sample 运行基本环境是否正常。
sample_pthread_cancel该sample测试pthread_cancel()对目标线程发送cancel信号后,目标线程接收cancel信号的处理过程。
sample_MotionDetect该sample演示视频编码库的移动侦测功能的使用。mpp_vi
mpp_venc
sample_directIORead该sample演示使用directIO方式读文件。理论上不占内存作为缓存。
sample_avmuxersample_avmuxer用来演示音视频的采集、编码、封装流程,并支持长期老化验证音视频同步。mpp_muxer
mpp_ai
mpp_aenc
mpp_vi
mpp_venc
sample_identifyQRCode演示识别二维码功能,若是wifi 配网二维码,会去执行对应的wifi 配网操作mpp_vi
zbar