近期在学习音视频,看了不少雷神(雷霄骅(leixiaohua1020)的专栏) 的文章,也作了相应的笔记,后面会陆陆续续发布。 虽然雷神不在了,但他留下了许多宝贵的财富,做为一名程序猿应向他学习,致敬!🙏🙏🙏浏览器
欢迎加入技术交流群 群号: 552340860服务器
视音频技术主要包含如下几点:封装技术,视频压缩编码技术以及音频压缩编码技术。若是考虑到网络传输的话,还包括流媒体协议技术。 视频播放器播放一个互联网上的视频文件,须要通过如下几个步骤:解协议,解封装,解码视音频,视音频同步。若是播放本地文件则不须要解协议,为如下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示。 网络
分析一下以上的每一个流程:函数
将流媒体协议
的数据,解析为标准的相应的封装格式数据
。视音频在网络上传播的时候,经常采用各类流媒体协议,例如HTTP,RTMP,或是MMS等等。这些协议在传输视音频数据的同时,也会传输一些信令数据
。这些信令数据
包括对播放的控制(播放,暂停,中止),或者对网络状态的描述等。解协议的过程当中会去除掉信令数据而只保留视音频数据。例如,采用RTMP协议传输的数据,通过解协议操做后,输出FLV格式的数据。工具
将输入的封装格式的数据
,分离成为音频流压缩编码数据
和视频流压缩编码数据
。封装格式种类不少,例如MP4,MKV,RMVB,TS,FLV,AVI
等等,它的做用就是将已经压缩编码的视频数据和音频数据按照必定的格式放到一块儿。例如,FLV格式的数据,通过解封装操做后,输出H.264编码的视频码流和AAC编码的音频码流。性能
将视频/音频压缩编码数据,解码成为非压缩的视频/音频原始数据。音频的压缩编码标准包含AAC,MP3,AC-3
等等,视频的压缩编码标准则包含H.264,MPEG2,VC-1
等等。解码是整个系统中最重要也是最复杂的一个环节。经过解码,压缩编码的视频数据输出成为非压缩的颜色数据,例如YUV420P,RGB等等;压缩编码的音频数据输出成为非压缩的音频抽样数据,例如PCM数据(脉冲编码调制(Pulse Code Modulation,PCM)
)。学习
根据解封装模块
处理过程当中获取到的参数信息,同步
解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。网站
流媒体协议是服务器与客户端之间通讯遵循的规定。当前网络上主要的流媒体协议如图表所示。编码
RTSP+RTP
常常用于IPTV
领域。由于其采用UDP
传输视音频,支持组播,效率较高。但其缺点是网络很差的状况下可能会丢包,影响视频观看质量。于是围绕IPTV
的视频质量的研究仍是挺多的。.net
RTSP+RTP
系统中衡量服务质量可参考:网络视频传输的服务质量(QoS)
由于互联网网络环境的不稳定性,RTSP+RTP
较少用于互联网视音频传输。互联网视频服务一般采用TCP
做为其流媒体的传输层协议,于是像RTMP,MMS,HTTP
这类的协议普遍用于互联网视音频服务之中。这类协议不会发生丢包,于是保证了视频的质量,可是传输的效率会相对低一些。
RTSP
规范可参考:RTSP协议学习笔记
RTMFP是一种比较新的流媒体协议,特色是支持P2P。 好比RTMP规范简单分析,或者RTMP流媒体播放过程
相关工具的源代码分析:RTMPdump源代码分析 1: main()函数[系列文章]
RTMP协议学习:RTMP流媒体技术零基础学习方法
封装格式的主要做用是把视频码流和音频码流按照必定的格式存储在一个文件中。现现在流行的封装格式以下图表所示:
AVI
以外,其余封装格式都支持流媒体,便可以“
边下边播
”。有些格式更“万能”一些,支持的视音频编码标准多一些,好比
MKV
。而有些格式则支持的相对比较少,好比说
RMVB
。
视频编码的主要做用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而下降视频的数据量。若是视频不通过压缩编码的话,体积一般是很是大的,一部电影可能就要上百G的空间。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,能够得到更高的视频质量。 视频编码的简单原理能够参考:视频压缩编码和音频压缩编码的基本原理
H.264
。
H.264
仅仅是一个编码标准,而不是一个具体的编码器,H.264只是给编码器的实现提供参照用的。
基于H.264标准的编码器仍是不少,可参考:MSU出品的 H.264编码器比较(2011.5)
在学习视频编码的时候,可能会用到各类编码器(实际上就是一个exe文件),他们经常使用的编码命令能够参考:各类视频编码器的命令行格式
学习H.264
最标准的源代码,就是其官方标准JM了。可是要注意,JM速度很是的慢,是没法用于实际的:H.264参考软件JM12.2RC代码详细流程
实际中使用最多的就是x264了,性能强悍(超过了不少商业编码器),并且开源。。编码时候可参考:x264编码指南——码率控制。编码后统计值的含义:X264输出的统计值的含义(X264 Stats Output)
Google推出的VP8属于和H.264同一时代的标准。整体而言,VP8比H.264要稍微差一点。有一篇写的很好的VP8的介绍文章:深刻了解 VP8。除了在技术领域,VP8和H.264在专利等方面也是打的不可开交,可参考文章:WebM(VP8) vs H.264
此外,我国还推出了本身的国产标准AVS,性能也不错,但目前比H.264仍是要稍微逊色一点。不过感受我国在视频编解码领域还算比较先进的,可参考:视频编码国家标准AVS与H.264的比较(节选)
下一代的编解码标准就要数HEVC和VP9了。VP9是Google继VP8以后推出的新一代标准。VP9和HEVC相比,要稍微逊色一些。它们的对比可参考:(1)HEVC与VP9编码效率对比 (2)HEVC,VP9,x264性能对比
HEVC在将来拥有不少大的优点,可参考:HEVC将会取代H.264的缘由
学习HEVC最标准的源代码,就是其官方标准HM了。其速度比H.264的官方标准代码又慢了一大截,使用可参考:HEVC学习—— HM的使用
将来实际使用的HEVC开源编码器颇有多是x265,目前该项目还处于发展阶段,可参考:x265(HEVC编码器,基于x264)介绍。x265的使用能够参考:HEVC(H.265)标准的编码器(x265,DivX265)试用
主流以及下一代编码标准之间的比较能够参考文章:视频编码方案之间的比较(HEVC,H.264,MPEG2等)
此外,在码率必定的状况下,几种编码标准的比较可参考:限制码率的视频编码标准比较(包括MPEG-2,H.263, MPEG-4,以及 H.264)
结果大体是这样的: HEVC > VP9 > H.264> VP8 > MPEG4 > H.263 > MPEG2
。
音频编码
的主要做用是将音频采样数据(PCM等)压缩成为音频码流,从而下降音频的数据量。音频编码也是互联网视音频技术中一个重要的技术。可是通常状况下音频的数据量要远小于视频的数据量,于是即便使用稍微落后的音频编码标准,而致使音频数据量有所增长,也不会对视音频的总数据量产生太大的影响。高效率的音频编码在同等的码率下,能够得到更高的音质。 音频编码的简单原理能够参考:视频压缩编码和音频压缩编码的基本原理
这些编码标准之间的比较能够参考文章:音频编码方案之间音质比较(AAC,MP3,WMA等)
结果大体是这样的: AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3
AAC格式的介绍:AAC格式简介 AAC几种不一样版本之间的对比:AAC规格(LC,HE,HEv2)及性能对比 AAC专利方面的介绍:AAC专利介绍 此外杜比数字的编码标准也比较流行,可是貌似比最新的AAC稍为逊色:AC-3技术综述
现有的网络视音频服务主要包括两种方式:点播和直播。点播意即根据用户的须要播放相应的视频节目,这是互联网视音频服务最主要的方式。绝大部分视频网站都提供了点播服务。直播意即互联网视音频平台直接将视频内容实时发送给用户,目前还处于发展阶段。直播在网络电视台,社交视频网站较为常见。
能够看出,直播服务广泛采用了RTMP
做为流媒体协议
,FLV
做为封装格式
,H.264
做为视频编码格式,AAC
做为音频编码格式
。采用RTMP
做为直播协议
的好处在于其被Flash播放器支持。而Flash播放器现在已经安装在全球99%的电脑上,而且与浏览器结合的很好。所以这种流媒体直播平台能够实现“无插件直播”,极大的简化了客户端的操做。封装格式,视频编码,音频编码方面,无一例外的使用了FLV + H.264 + AAC
的组合。FLV
是RTMP
使用的封装格式,H.264
是当今实际应用中编码效率最高的视频编码标准,AAC
则是当今实际应用中编码效率最高的音频编码标准。视频播放器方面,都使用了Flash播放器。
能够看出,点播服务广泛采用了HTTP做为流媒体协议,H.264做为视频编码格式,AAC做为音频编码格式。采用HTTP做为点播协议有如下两点优点:一方面,HTTP是基于TCP协议的应用层协议,媒体传输过程当中不会出现丢包等现象,从而保证了视频的质量;另外一方面,HTTP被绝大部分的Web服务器支持,于是流媒体服务机构没必要投资购买额外的流媒体服务器,从而节约了开支。点播服务采用的封装格式有多种:MP4,FLV,F4V等,它们之间的区别不是很大。视频编码标准和音频编码标准是H.264和AAC。这两种标准分别是当今实际应用中编码效率最高的视频标准和音频标准。视频播放器方面,无一例外的都使用了Flash播放器。