嵌入式AI音视频课程-基于全志MPP系统 :音视频编解码 文件封装 RTSP推流
课程简述
第一期:视频模块及推流实战
从视频基础概念开始逐步了解视频处理模块所需的知识,做好基础概念的储备。
1.根据全志芯片特性,完成硬件各个部件的复位、基本初始化工作。
2.视频输入模块VI学习,接收并解析MIPI摄像头传输过来的图像,调色或者码流处理输出。
3.视频输出模块VO学习,处理与视频输出显示相关的功能,在MIPI显示屏显示图像或者视频流。
4.视频编码解码模块学习,读取图像文件向编码模块/解码模块发送数据,采集的摄像头图像进行H264/H265编码。
第二期:音频模块及文件封装
从音频基...
嘉楠K230 CanMV开发板资料汇总
DshanPI-CanMV开发板是百问网针对AI应用开发设计出来的一个RSIC-V架构的AI开发板,主要用于学习使用嘉楠的K230芯片进行大小核项目开发和嵌入式AI应用开发等用途。DshanPI-CanMV开发板采用嘉楠科技Kendryte®系列AIoT芯片中的最新一代SoC芯片K230。该芯片采用全新的多异构单元加速计算架构,集成了2个RISC-V高能效计算核心,内置新一代KPU(Knowledge Process Unit)智能计算单元,具备多精度AI算力,广泛支持通用的AI计算框架,部分典型网络的利用...
百问网全志V853 DshanPI-AICT 开发板学习资料汇总!
DshanPI-AICT 资料汇总(V853-Lite)
1.100ASK_V853-PRO 开发板购买链接:https://detail.tmall.com/item.htm?&id=798635331177&abbucket=16
2.DongshanPI-AICT资料获取:
链接: https://pan.baidu.com/s/1upKmsUTRysLIIPBSv2ZEhQ?pwd=kxts 提取码: kxts
注意:百度网盘中保存有开发板配套的SDK,请一定要获取!!!
3.全志Linux Ti...
11-4_音频转码部署
音频转码部署
1.G711编码部署
参考链接:escrichov/G711: PCM to G711 Fast Conversions
获取开源仓库源码:
git clone https://github.com/escrichov/G711.git
如果获取不了,请访问资料网盘中的01_视频教程/02_配套资源目录中获取
进入工程目录
cd G711
编译工程
make
G711编码音频文件
./example example_files/alaw.raw alaw_pcm alaw_to_pc...
11-3_音频文件格式
数字音频文件格式
文件分析软件:
VTCLab 媒体分析仪:https://media-analyzer.pro/
MediaInfo工具:MediaInfo - Download MediaInfo for Microsoft Windows
有损压缩格式:
MP3(MPEG-1 Audio Layer III):最流行的音频格式之一,具有高压缩比和良好的音质。
AAC(Advanced Audio Coding):音质优于MP3,广泛用于流媒体和移动设备。
WMA(Windows Med...
11-2_数字音频压缩编码
数字音频压缩编码
参考资料:
《心理声学模型在感知音频编码中的应用》:https://blog.csdn.net/Jianing_Wang/article/details/105779558
音频信号经过数字化处理后会面临巨大数据量给存储和传输带来的压力,为了降低传输和存储的费用,必须对数据信号进行压缩编码。所以在保证重建音频质量尽可能完整的情况下,以尽量少的比特数来表征音频信息。
1.冗余信息
无论是语音还是音乐,都存在这多种形式的冗余信息,主要包括:时间域冗余、频率域冗余、听觉冗余。
对于时间域冗余...
11-1_音频基础概念
音频基础概念
语音、音乐以及自然界的各种声音,都是由物体振动产生的。
无论是声带、乐器的弦还是击打面,当它们振动时,会引起周围空气质点的振动。由于空气具有惯性和弹性,空气质点相互作用,导致周围空气交替产生压缩和膨胀,并向外传播形成声波。
在空气中传播的声波是纵波,在纵波中,介质分子的振动方向和波前进的方向平行。
1.声音的参数
1.1 频率
频率是某一质点以中心轴为中心,1s内来回振动的次数(声波周期),单位为赫兹(Hz)。
在声学中,频率一般指正弦波信号的频率。由于任何信号都可以认为是各种频率的正弦...
10-4_实现位图数据的叠加
实现位图数据的叠加
1.叠加效果
前面我们使用overlay方式叠加纯色数据至编码通道中,这一小节我们将图片数据叠加至编码通道中,效果如下所示:
可以看到原来的红色框变成了一张图像。
2.实现步骤
我们在前面介绍中,overlay的区域叠加类型是支持位图加载的,所以我们只需要准备图像/文字的位图数据传入叠加模块即可。
2.1 准备bmp图像位图
在开始前,请注意:图像的尺寸大小需要遵循16对齐,即宽高的值需要为16的倍数。
这里我提前准备了一张96*96分辨率,32位深的BMP图像,使用下面的程序,将图...
10-3_叠加模块示例源码解析
叠加模块示例源码解析
该实例程序会演示region模块如何叠加至VI/VE,以及如果在叠加后改变叠加的色块等。示例效果如下所示:
1.VI/VENC的初始化和绑定
1.1 初始化MPP平台
memset(&pContext->mSysConf, 0, sizeof(MPP_SYS_CONF_S));
pContext->mSysConf.nAlignWidth = 32;
AW_MPI_SYS_SetConf(&pContext->mSysConf);
AW_MPI_SYS...
10-2_使用ffmpeg实现叠加
使用ffmpeg实现OSD叠加
1.使用命令实现OSD叠加
ffmpeg -i input.h264 -vf "drawbox=x=50:y=50:w=200:h=100:color=red@0.5:t=max, drawbox=x=300:y=200:w=100:h=100:color=blue@1.0:t=5, drawtext=text='2024-10-01':x=W-tw-10:y=10:fontcolor=white:fontsize=50" -c:v libx264 -f h264 outp...
10-1_叠加模块基础
叠加模块基础
用户通常需要在视频中叠加OSD(如通道号、时间戳等)以显示特定信息,并在必要时填充色块。这些叠加在视频上的OSD和遮挡在视频上的色块统称为“区域”。REGION(叠加)模块用于统一管理这些区域资源。如下图所示:
可以看到在一段视频流中使用叠加模块就可以在视频流增加图形和色块等信息。
1.叠加模块介绍
区域管理可以实现区域的创建,并叠加到视频中或对视频进行遮挡。例如,实际应用中,用户创建一个区域,通过AW_MPI_RGN_AttachToChn,将该区域叠加到某个通道(如VENC 通道)中。
...
9-3_使用MPP平台解码H264文件
使用MPP平台解码H264文件
在MPP平台下解码H264文件需要使用VDEC 模块,即视频解码模块。解码过程如下所示:
将H264码流文件传入解码模块后,会解码后生成的yuv文件。
1.主程序解析
1.1 初始化MPP平台
memset(&stContext.mSysConf, 0, sizeof(MPP_SYS_CONF_S));
stContext.mSysConf.nAlignWidth = 32;
AW_MPI_SYS_SetConf(&stContext.mSysCon...
9-2_使用ffmpeg解码H264文件
使用ffmpeg解码H264文件
参考资料:
FFmpeg编解码器文档:FFmpeg Codecs Documentation
FFMPEG结构体分析AVFormatContext: https://blog.csdn.net/leixiaohua1020/article/details/14214705
FFMPEG结构体分析:AVFrame:http://blog.csdn.net/leixiaohua1020/article/details/14214577
FFMPEG结构体分析:A...
9-1_视频解码基础
视频解码基础
参考资料:
Tang, Qiang《 Computationally efficient techniques for H.264/AVC transcoding applications》
1.视频解码简介
由于编码是将大型原始视频文件压缩的过程,那么解码(decoder)是对编码后的视频文件进行解码和解压缩的过程 。
视频解码器是一种硬件或软件,用于将编码的视频流信号转换为数字视频文件,包括音频、视频、字幕等,以便在电视、智能手机、平板电脑、计算机显示器或其他流媒体设备上播放。
视频...
8-8_MPP平台下使用RTSP实现摄像头数据推流源码解析
MPP平台下使用RTSP实现摄像头数据推流源码解析
在MPP平台的中实现RTSP摄像头实时预览的数据流向图如下所示:
对于前面的VI组件和VENC组件,我们已经学习过,这里就重点学习:获取编码后的码流如何发送给RTSP去做推流处理。
1.MPP源码
1.1 MPP平台初始化
MPP_SYS_CONF_S stSysConf;
memset(&stSysConf, 0, sizeof(MPP_SYS_CONF_S));
stSysConf.nAlignWidth = 32;
...
8-7_使用Live555实现RTSP服务器
使用live555实现RTSP服务器
参考资料:
LIVE555 流媒体:http://www.live555.com/
live555源码:http://live555.com/liveMedia/public/
live555 源代码镜像:rgaufman/live555: A mirror of the live555 source code. (github.com)
Live555描述文档地址:http://www.live555.com/liveMedia/#description
Live5...
8-6_基于嵌入式Linux平台实现RTSP协议
基于嵌入式Linux平台实现RTSP协议
参考源码:
简单的RTSP服务器:https://github.com/ImSjt/RtspServer
1.程序的编译与运行
1.获取程序源码
git clone https://github.com/ImSjt/RtspServer.git
如果获取不到,可通过课程配套源码获取!
2.进入工程目录
cd RtspServer/
3.修改Makefile
vi Makefile
修改文件中的工具链路径为全志工具链路径
CROSS_COMPILE = ...
8-5-2_编写简单RTSP协议-处理客户端请求
编写简单RTSP协议-处理客户端请求
在RTSP(实时流协议)中,处理客户端请求步骤如下:
发送请求:客户端发送RTSP请求命令,常见的请求类型包括:
OPTIONS:请求服务器支持的方法,了解服务器可用的方法。
DESCRIBE:请求服务器发送媒体描述信息(通常是SDP格式),以了解可用的媒体流及其属性。
SETUP:请求建立会话连接,准备接收音视频数据。此请求会指定传输参数,如RTP/RTCP端口、传输协议(TCP或UDP)、单播或组播等。
PLAY:请求开始播放媒体流。
PAUSE:请求暂停播放...
8-5-1_编写简单RTSP协议-主流程
编写一个简单的RTSP协议-主流程
参考资料:
简单的RTSP服务器:https://github.com/ImSjt/RtspServer
从零开始写一个RTSP服务器:https://blog.csdn.net/weixin_42462202/article/details/99068041
RootEncoder:pedroSG94/RootEncoder: RootEncoder for Android (rtmp-rtsp-stream-client-java) is a stream enco...
8-4_RTP协议与RTCP协议
RTP协议与RTCP协议
参考资料:
RFC 3551 - RTP Profile for Audio and Video Conferences with Minimal Control (ietf.org)
RFC 5506 - Support for Reduced-Size Real-Time Transport Control Protocol (RTCP): Opportunities and Consequences (ietf.org)
RFC 5761 - Multiplexing RT...