[转]音视频编解码基础知识总结
本文转载自雷霄骅大神的一篇博客:[总结]音视频编解码技术零基础学习方法,只是做了一些符合个人习惯的小修改,另外在这致敬雷神,望其在天堂安好。
0、生活中的音视频技术
平时我们打开电脑中自己存电影的目录的话,一般都会如下图所示,一大堆五花八门的电影。
因为下载的来源不同,这些电影文件有不同的格式,用不同的后缀表示:avi,rmvb,mp4,flv,mkv等等(当然也使用不同的图标)。在这里需要注意的是,这些格式代表的是封装格式。
何为封装格式?
就是把视频数据和音频数据打包成一个文件的规范。仅仅靠看文件的后缀,很难能看出具体使用了什么音视频编码标准。总的来说,不同的封装格式之间差距不大,各有优劣。
注:有些封装格式支持的音视频编码标准十分广泛,应该算比较优秀的封装格式,比如 MKV;而有些封装格式支持的音视频编码标准很少,应该属于落后的封装格式,比如 RMVB。
下面演示一下如何使用视频播放器查看一个视频文件采用的音视频技术:
- 打开一个视频文件;
- 在视频画面上右键单击,选择属性;
- 在弹出的“属性”对话框的 “MediaInfo” 选项卡中,就可以查看该视频文件采用的视音频技术了。如下图所示,“变形金刚预告片_h1080p.mov” 采用 MPEG4 的 QuickTime封装格式(MOV),采用了 H.264(AVC)的压缩编码标准。
在这里用到了一个查看媒体信息的工具:MediaInfo。MediaInfo 是一个专门查看音视频格式的工具,软件的详细使用可参考:
源代码分析可参考:
生活中的音视频技术到此为止,下面介绍一下具体的音视频技术。
一、视频播放器原理
视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码音视频,音视频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码音视频,音视频同步。他们的过程如下图所示。
解协议的作用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。音视频在网络上传播的时候,常常采用各种流媒体协议,例如 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数据。
音视频同步的作用,就是根据解封装模块处理过程中获取到的参数信息,同步解码出来的视频和音频数据,并将视频和音频数据送至系统的显卡和声卡播放出来。
接下来的几节我们将会列出主要的流媒体协议,封装格式,以及音视频编码标准。更详细的比较可以参考:
视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比
有关本文中涉及到的协议数据、封装格式数据、视频编码数据、音频编码数据、视频像素数据、音频采样数据的分析可以参考下面系列文章:
二、流媒体协议
流媒体协议是服务器与客户端之间通信遵循的规定。当前网络上主要的流媒体协议如下表所示。
名称 | 推出机构 | 传输层协议 | 客户端 | 目前使用领域 |
---|---|---|---|---|
RTSP+RTP | IETF | TCP+UDP | VLC, WMP | IPTV |
RTMP | Adobe Inc. | TCP | Flash | 互联网直播 |
RTMFP | Adobe Inc. | UDP | Flash | 互联网直播 |
MMS | Microsoft Inc. | TCP/UDP | WMP | 互联网直播+点播 |
HTTP | WWW+IETF | TCP | Flash | 互联网点播 |
RTSP+RTP 经常用于 IPTV 领域。因为其采用 UDP 传输视音频,支持组播,效率较高。但其缺点是网络不好的情况下可能会丢包,影响视频观看质量。因而围绕 IPTV 的视频质量的研究还是挺多的。
因为互联网网络环境的不稳定性,RTSP+RTP 较少用于互联网视音频传输。互联网视频服务通常采用 TCP 作为其流媒体的传输层协议,因而像 RTMP,MMS,HTTP 这类的协议广泛用于互联网视音频服务之中。这类协议不会发生丢包,因而保证了视频的质量,但是传输的效率会相对低一些。
此外 RTMFP 是一种比较新的流媒体协议,特点是支持 P2P。
RTMP协议学习:RTMP流媒体技术零基础学习方法
三、封装格式
封装格式的主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。现如今流行的封装格式如下表所示:
名称 | 推出机构 | 流媒体 | 支持的视频编码 | 支持的音频编码 | 目前使用领域 |
---|---|---|---|---|---|
AVI | Microsoft Inc. | 不支持 | 几乎所有格式 | 几乎所有格式 | BT下载影视 |
MP4 | MPEG | 支持 | MPEG-2, MPEG-4, H.264, H.263等 | AAC, MPEG-1 Layers I, II, III, AC-3等 | 互联网视频网站 |
TS | MPEG | 支持 | MPEG-1, MPEG-2, MPEG-4, H.264 | MPEG-1 Layers I, II, III, AAC, | IPTV,数字电视 |
FLV | Adobe Inc. | 支持 | Sorenson, VP6, H.264 | MP3, ADPCM, Linear PCM, AAC等 | 互联网视频网站 |
MKV | CoreCodec Inc. | 支持 | 几乎所有格式 | 几乎所有格式 | 互联网视频网站 |
RMVB | Real Networks Inc. | 支持 | RealVideo 8, 9, 10 | AAC, Cook Codec, RealAudio Lossless | BT下载影视 |
由表可见,除了 AVI 之外,其他封装格式都支持流媒体,即可以 “边下边播”。有些格式更 “万能” 一些,支持的视音频编码标准多一些,比如 MKV。而有些格式则支持的相对比较少,比如说 RMVB。
这些封装格式都有相关的文档,在这里就不一一例举了。
四、视频编码
视频编码的主要作用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而降低视频的数据量。如果视频不经过压缩编码的话,体积通常是非常大的,一部电影可能就要上百 G 的空间。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。
视频编码的简单原理可以参考:视频压缩编码和音频压缩编码的基本原理
注:视频编码技术在整个视音频技术中应该是最复杂的技术。如果没有基础的话,可以先买一些书看一下原理,比如说《现代电视原理》《数字电视广播原理与应用》(本科的课本)中的部分章节。
名称 | 推出机构 | 推出时间 | 目前使用领域 |
---|---|---|---|
HEVC(H.265) | MPEG/ITU-T | 2013 | 研发中 |
AVC(H.264) | MPEG/ITU-T | 2003 | 各个领域 |
MPEG4 | MPEG | 2001 | 不温不火 |
MPEG2 | MPEG | 1994 | 数字电视 |
VP9 | 2013 | 研发中 | |
VP8 | 2008 | 不普及 | |
VC-1 | Microsoft Inc. | 2006 | 微软平台 |
由上表可见,有两种视频编码方案是最新推出的:VP9 和 HEVC。目前这两种方案都处于研发阶段,还没有到达实用的程度。(笔者此时这两种方案都已研发完成)当前使用最多的视频编码方案就是 H.264。
此外,在码率一定的情况下,几种编码标准的比较可参考:限制码率的视频编码标准比较(包括MPEG-2,H.263, MPEG-4,以及 H.264)
结果大致是这样的:
HEVC > VP9 > H.264> VP8 > MPEG4 > H.263 > MPEG2
。
五、音频编码
音频编码的主要作用是将音频采样数据(PCM等)压缩成为音频码流,从而降低音频的数据量。音频编码也是互联网视音频技术中一个重要的技术。但是一般情况下音频的数据量要远小于视频的数据量,因而即使使用稍微落后的音频编码标准,而导致音频数据量有所增加,也不会对视音频的总数据量产生太大的影响。高效率的音频编码在同等的码率下,可以获得更高的音质。
音频编码的简单原理可以参考:视频压缩编码和音频压缩编码的基本原理
名称 | 推出机构 | 推出时间 | 目前使用领域 |
---|---|---|---|
AAC | MPEG | 1997 | 各个领域(新) |
AC-3 | Dolby Inc. | 1992 | 电影 |
MP3 | MPEG | 1993 | 各个领域(旧) |
WMA | Microsoft Inc. | 1999 | 微软平台 |
由上表可见,近年来并未推出全新的音频编码方案,可见音频编码技术已经基本可以满足人们的需要。音频编码技术近期绝大部分的改动都是在 MP3 的继任者——AAC 的基础上完成的。
这些编码标准之间的比较可以参考文章:音频编码方案之间音质比较(AAC,MP3,WMA等)
结果大致是这样的:
AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3
。
AAC格式的介绍:AAC格式简介
AAC几种不同版本之间的对比:AAC规格(LC,HE,HEv2)及性能对比
我自己做的小工具: AAC格式分析器
六、现有网络视音频平台对比
现有的网络视音频服务主要包括两种方式:点播和直播。点播意即根据用户的需要播放相应的视频节目,这是互联网视音频服务最主要的方式。绝大部分视频网站都提供了点播服务。直播意即互联网视音频平台直接将视频内容实时发送给用户。
6.1 直播平台参数对比
主流互联网视音频平台直播服务的参数对比如表所示:
名称 | 协议 | 封装 | 视频编码 | 音频编码 | 播放器 |
---|---|---|---|---|---|
CNTV | 私有 | ||||
华数TV | RTMP | FLV | H.264 | AAC | Flash |
六间房 | RTMP | FLV | H.264 | AAC | Flash |
中国教育电视台 | RTMP | FLV | H.264 | AAC | Flash |
北广传媒移动电视 | RTMP | FLV | H.264 | AAC | Flash |
上海IPTV | RTSP+RTP | TS | H.264 | MP2 | 机顶盒 |
可以看出,直播服务普遍采用了 RTMP 作为流媒体协议,FLV 作为封装格式,H.264 作为视频编码格式,AAC 作为音频编码格式。采用 RTMP 作为直播协议的好处在于其被 Flash 播放器支持。而 Flash 播放器如今已经安装在全球 99% 的电脑上,并且与浏览器结合的很好。因此这种流媒体直播平台可以实现 “无插件直播”,极大的简化了客户端的操作。
封装格式,视频编码,音频编码方面,无一例外的使用了 FLV + H.264 + AAC 的组合。FLV 是 RTMP 使用的封装格式,H.264 是当今实际应用中编码效率最高的视频编码标准,AAC 则是当今实际应用中编码效率最高的音频编码标准。视频播放器方面,都使用了Flash播放器。
6.2 点播平台参数对比
主流网络视音频平台点播服务的参数对比如表所示:
名称 | 协议 | 封装 | 视频编码 | 音频编码 | 播放器 |
---|---|---|---|---|---|
CNTV | HTTP | MP4 | H.264 | AAC | Flash |
CNTV(部分) | RTMP | FLV | H.264 | AAC | Flash |
华数TV | HTTP | MP4 | H.264 | AAC | Flash |
优酷网 | HTTP | FLV | H.264 | AAC | Flash |
土豆网 | HTTP | F4V | H.264 | AAC | Flash |
56网 | HTTP | FLV | H.264 | AAC | Flash |
音悦台 | HTTP | MP4 | H.264 | AAC | Flash |
乐视网 | HTTP | FLV | H.264 | AAC | Flash |
新浪视频 | HTTP | FLV | H.264 | AAC | Flash |
可以看出,点播服务普遍采用了 HTTP 作为流媒体协议,H.264 作为视频编码格式,AAC 作为音频编码格式。采用 HTTP 作为点播协议有以下两点优势:一方面,HTTP 是基于 TCP 协议的应用层协议,媒体传输过程中不会出现丢包等现象,从而保证了视频的质量;另一方面,HTTP 被绝大部分的 Web 服务器支持,因而流媒体服务机构不必投资购买额外的流媒体服务器,从而节约了开支。
点播服务采用的封装格式有多种:MP4,FLV,F4V 等,它们之间的区别不是很大。视频编码标准和音频编码标准是 H.264 和 AAC。这两种标准分别是当今实际应用中编码效率最高的视频标准和音频标准。视频播放器方面,无一例外的都使用了 Flash 播放器。
参考: