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,按回车
配置测试 Sample
输入以下命令,进入配置界面
make menuconfig
配置页面如下
下拉找到 Allwinner 按回车进入
在最下面找到 eyesee-mpp,按回车进入
找到 select mpp sample
,按空格选中
找到 mpp sample smartIPC_demo
,按空格选中
使用方向键选择 Save
选择 OK
选择 EXIT
使用方向键选择 Exit
继续退出
继续退出
编译 SDK
回到控制台,输入 mp -j4
以 4 线程并行方式编译
等待 SDK 编译完成,会在 out
目录下生成固件
将固件拷贝出来,准备烧录
配置 Sample
前往 platform/allwinner/eyesee-mpp/middleware/sun300iw1/sample/bin
找到刚才编译出来的Sample
编辑 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 格式
将上面编译出来的 sample 和 配置文件复制到 SD 卡里
测试运行 Sample
配置无线网络
使用命令扫描无线网络
wifi -s
使用命令连接无线网络,连接成功后使用 ifconfig
命令查看连接情况与 IP 地址
wifi -c <SSID> <密码>
ifconfig wlan0
挂载 SD 卡
插入 SD 卡后,可以在日志里看到新生成的卡设备
使用命令挂载 SD 卡
mount /dev/mmcblk0p1 /mnt/extsd
运行 Sample
前往SD卡的挂载目录,查看文件是否存在
cd /mnt/extsd
使用命令,运行 sample
./sample_smartIPC_demo -path sample_smartIPC_demo.conf &
在平板上打开 VLC 播放器。配置日志显示的地址
rtsp://192.168.51.101:8554/ch0
即可打开串流视频
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_ai2aenc | mic录音送入编码器,取得每一帧数据的编码,写到文件中。 | 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_avmuxer | sample_avmuxer用来演示音视频的采集、编码、封装流程,并支持长期老化验证音视频同步。 | mpp_muxer mpp_ai mpp_aenc mpp_vi mpp_venc |
sample_identifyQRCode | 演示识别二维码功能,若是wifi 配网二维码,会去执行对应的wifi 配网操作 | mpp_vi zbar |