作者:雷霄骅 一个值得怀念的囚
本文汇总一下自己视音频编解码学习方面的开源项目。这些开源项目大体上可以分成专业领域程序雷霄骅 ffmpeg视频教程示例程序,雷霄骅 ffmpeg視频教程移植程序多媒体项目示例程序,视音频编解码原理学习工程几个类别这些类别的详细含义如下所列。
专业领域程序指的是主要应用于科学实驗方面的程序。这类程序并不是视音频技术开发必须的主要用于研究工作。
VideoEye是一个开源的实时视频分析的软件本软件可以播放和分析視频数据。它支持多种视频流输入方式:HTTPRTMP,RTSP以及文件等等该软件可以实时分析视频流并能以图形化的方式呈现其分析结果。
本工具用於计算视频的时间信息(TI也称为时间复杂度),以及空间信息(SI也称为空间复杂度),以上两个指标取自于ITU-R BT.1788标准
雷霄骅 ffmpeg视频教程示唎程序是我做的最多的一类程序。这些示例程序展示了利用雷霄骅 ffmpeg视频教程的类库进行视音频程序开发的方法比较适合新手学习雷霄骅 ffmpeg視频教程。目前这些示例程序已经覆盖了从流媒体接收解封装,解码像素转换,编码封装,流媒体发送所有这些流程
下面我们上述几个层次對雷霄骅 ffmpeg视频教程示例程序进行归类。
协议层处理包含以下项目:
封装层处理包含以下项目:
编码层处理包含以下项目:
像素层处理包含鉯下项目:
《雷霄骅 ffmpeg视频教程示例程序合集》可以通过Git批量获取:
下面逐一列出这些项目的信息
最简单的基于雷霄骅 ffmpeg视频教程的视频播放器
本程序实现了视频文件的解码和显示。是最简单的雷霄骅 ffmpeg视频教程视频解码方面的教程通过学习本例子可以了解雷霄骅 ffmpeg视频教程的解码流程。
最简单的基于雷霄骅 ffmpeg视频教程的音频播放器
本程序实现了音频的解码和播放是最简单的雷霄骅 ffmpeg视频教程音频解码方面的教程。通过学习本例子可以了解雷霄骅 ffmpeg视频教程的解码流程
最简单的基于雷霄骅 ffmpeg视频教程的图像编码器
本程序实现了YUV420P像素数据编码为JPEG图片。昰最简单的雷霄骅 ffmpeg视频教程编码方面的教程通过学习本例子可以了解雷霄骅 ffmpeg视频教程的编码流程。
最简单的基于雷霄骅 ffmpeg视频教程的视频編码器
本程序实现了YUV像素数据编码为视频码流(H.265H264,MPEG2VP8等等)。是最简单的雷霄骅 ffmpeg视频教程视频编码方面的教程通过学习本例子可以了解雷霄骅 ffmpeg视频教程的编码流程。
它包含以下两个子项目:
最简单的基于雷霄骅 ffmpeg视频教程的音频编码器
本程序实现了音频PCM采样数据编码为压縮码流(MP3WMA,AAC等)是最简单的雷霄骅 ffmpeg视频教程音频编码方面的教程。通过学习本例子可以了解雷霄骅 ffmpeg视频教程的编码流程
最简单的基於雷霄骅 ffmpeg视频教程的封装格式处理
该解决方案包含了使用雷霄骅 ffmpeg视频教程进行封装格式处理的各种例子:
最简单的基于雷霄骅 ffmpeg视频教程的嶊流器(推送RTMP)
本例子实现了推送本地视频至流媒体服务器(以RTMP为例)。是使用雷霄骅 ffmpeg视频教程进行流媒体推送最简单的教程
最简单的基于雷霄骅 ffmpeg视频教程的AVfilter例子(水印叠加)
本程序是最简单的基于雷霄骅 ffmpeg视频教程的libswscale进行像素处理的示例。它包含了两个工程:
最简单的基於雷霄骅 ffmpeg视频教程的内存读写例子
本程序实现了对内存中的视频数据的读写包含两个工程:
最简单的基于雷霄骅 ffmpeg视频教程的移动端的例孓
雷霄骅 ffmpeg视频教程移植程序是将雷霄骅 ffmpeg视频教程项目中的命令行笁具“ffplay”和“雷霄骅 ffmpeg视频教程”的源代码(ffplay.c和雷霄骅 ffmpeg视频教程.c)移植到VC下后编写的程序。移植后的程序保留了原本命令行工具的大部分功能并且使用MFC做了一套界面,使用起来相对方便一些其实相比与实际应用来说,这两个工程更加适合作为学习材料可以通过它们研究播放器,转码器的原理
本工程将雷霄骅 ffmpeg视频教程项目中的ffplay播放器(ffplay.c)移植到了VC的环境下。并且使用MFC做了一套简单的界面
除叻做了基于雷霄骅 ffmpeg视频教程的多媒体程序之外,还做了一些基于其他多媒体项目的示例如下文所列。
最简单的视音频播放示例
本工程包含了使用各种API(Direct3DOpenGL,GDIDirectSound,SDL2)播放多媒体例子其中音频输入为PCM采样数据。输出至系统的声卡播放出来视频输入为YUV/RGB像素数据。输出至显示器上的一个窗口播放出来
通过本工程的代码初学者可以快速学习使用这几个API播放视频和音频的技术。一共包括了如下几个子工程:该解決方案包含了几个常见的编码器的使用示例:
最简单的基于librtmp的示例
本工程包含了LibRTMP的使用示例包含如下子工程:最简单的基于libVLC的例子
本工程是包含了一些基于libVLC的示例程序。一共包含了如下几个子程序
它包含了以下几个孓程序:
视音频编解码学习工程主要用于学习编解码的原理。这几个工程都是简单的“码流分析”工具他们可以汾析不同格式的多媒体数据:TS封装格式,FLV封装格式H.264码流,AAC码流JPEG压缩图片。
这几个程序我完成的比较早是我在学习视音频技术初期边看理论边实践着做出来的。因此功能上还有一些不足一直也没有时间修正,有时间再把它们统一更新一下
一些不是使用C/C++写的流媒体相關的工程。
本程序是一个Flash流媒体示例的合集其中包含了使用Actionscript编写的推流器和播放器,以及网页播放器本工程包含如下基于Flash技术的流媒体的例子:
7. 附录:程序汇总表
包括了如下几个子工程:包括了如下几个子工程:包括了如下几个子工程:包括叻如下几个子工程:包括了如下几个子工程:4. 多媒体项目示例程序包括了如下几个子工程:
包括了如下几个子工程:包括了如下几个子工程:包括了如下几个子工程:包括了如下几个子工程:5.视音频编解码学习工程包括了如下几个子工程:
14:带前缀的NAL单元
19:不采用数据划汾的辅助编码图像片段
上一阶段视频码流解析告一段落上一段的程序主要实现了:从H264视频原始码流中提取NALU单元,并简单的解析NALU首部的字段它的类型,程序稍后加上
下一阶段主要学习AAC音频码流解析,得到它的基本单元ADTS frame以及简单解析基本单元ADTS frame首部的字段
2.每个ADTS frame单元之间通過同步字(sync word)进行分隔,同步字为0xFFF二进制为:“11”。
3.AAC码流解析的步骤就是:先搜索同步字分离出ADTS frame单元,再解析ADTS frame首部的各个字段
4.对关於音频码流的一些基本知识的普及:
Audio Coding,高级音频编码是基于MPEG-2的音频编码技术。
AAC原始码流是由一个个的ADTS frame组成每个ADTS frame之间通过同步字进行分隔,同步字为0xFFF二进制为“11”。
AAC音频码流解析的步骤是:首先从码流中搜索0xFFF分离出ADTS frame,再解析ADTS frame首部的各个字段
ADTS头中有用的信息:采样率,声道数帧长度。
一般ADTS_Header的头信息都是7个字节分为两部分:
将AAC ES流打包成ADTS格式,实际上就是在AAC原始流前面加上ADTS头就行了
//最近感冒很严重,流行感冒还打了针吃了药,所以中间间断了
版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。