[总结]视音频编解码技术零基础学习方法

目录(?)[+]编程

一直想把视音频编解码技术作一个简单的总结,但是苦于时间不充裕,一直没能完成。今天有着很大的空闲,终于能够总结一个有关视音频技术的入门教程, 能够方便更多的人学习从零开始学习视音频技术。须要注意的是,本文所说的视音频技术,指的是理论层面的视音频技术,并不涉及到编程相关的东西。浏览器

 

0.     生活中的视音频技术

平时咱们打开电脑中本身存电影的目录的话,通常都会以下图所示,一大堆五花八门的电影。(其实专业的影视爱好者一律会把影视文件分门别类的,但我比较懒,一股脑把电影放在了一块儿)服务器


由于下载的来源不一样,这些电影文件有不一样的格式,用不一样的后缀表示:avi,rmvb,mp4,flv,mkv等等(固然也使用不一样的图标)。在这里须要注意的是,这些格式表明的是封装格式。何为封装格式?就是把视频数据和音频数据打包成一个文件的规范。仅仅靠看文件的后缀,很难能看出具体使用了什么视音频编码标准。总的来讲,不一样的封装格式之间差距不大,各有优劣。网络

注:有些封装格式支持的视音频编码标准十分普遍,应该算比较优秀的封装格式,好比MKV;而有些封装格式支持的视音频编码标准不多,应该属于落后的封装格式,好比RMVB。less

 

下面演示一下如何使用视频播放器查看一个视频文件采用的视音频技术:ide

注:在这里使用Media Player Classic做为演示,实际上暴风影音,KMplayer这些操做都差不太多。函数

1.打开一个视频文件工具

2.在视频画面上右键单击,选择属性。性能


3.在弹出的“属性”对话框的“MediaInfo”选项卡中,就能够查看该视频文件采用的视音频技术了。以下图所示,“变形金刚预告片_h1080p.mov”采用MPEG4的QuickTime封装格式(MOV),采用了H.264(AVC)的压缩编码标准。学习


在这里用到了一个查看媒体信息的工具:MediaInfo。MediaInfo是一个专门查看视音频格式的工具,软件的详细使用可参考:

MediaInfo使用简介(新版本支持HEVC

源代码分析可参考:

MediaInfo源代码分析 1:总体结构[系列文章]

生活中的视音频技术到此为止,下面介绍一下具体的视音频技术。

 

1.     视频播放器原理

视音频技术主要包含如下几点:封装技术,视频压缩编码技术以及音频压缩编码技术。若是考虑到网络传输的话,还包括流媒体协议技术。

视频播放器的源代码详细解析(Media Player Classic - HC,Mplayer,FFplay,XBMC)能够参考系列文章:

Media Player ClassicMedia Player Classic - HC源代码分析 1:总体结构[系列文章]

MplayerMPlayer源代码分析

FFplay FFplay源代码分析:总体流程图

XBMC XBMC源代码分析 1:总体结构以及编译方法[系列文章]

在这里不细说了,仅简要说明一下视频播放器的原理。

视频播放器播放一个互联网上的视频文件,须要通过如下几个步骤:解协议,解封装,解码视音频,视音频同步。若是播放本地文件则不须要解协议,为如下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示。

 

解协议的 做用,就是将流媒体协议的数据,解析为标准的相应的封装格式数据。视音频在网络上传播的时候,经常采用各类流媒体协议,例如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数据。

视音频同步的做用,就是根据解封装模块处理过程当中获取到的参数信息,同步解码出来的视频和音频数据,并将视频音频数据送至系统的显卡和声卡播放出来。

接下来的几节咱们将会列出主要的流媒体协议,封装格式,以及视音频编码标准。更详细的比较能够参考:

视频参数(流媒体系统,封装格式,视频编码,音频编码,播放器)对比

2.     流媒体协议

流媒体协议是服务器与客户端之间通讯遵循的规定。当前网络上主要的流媒体协议如表所示。

主要流媒体协议一览

名称

推出机构

传输层协议

客户端

目前使用领域

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规范可参考:RTSP协议学习笔记

RTSP+RTP系统中衡量服务质量可参考:网络视频传输的服务质量(QoS

上海IPTV码流分析结果可参考:IPTV视频码流分析

因 为互联网网络环境的不稳定性,RTSP+RTP较少用于互联网视音频传输。互联网视频服务一般采用TCP做为其流媒体的传输层协议,于是像 RTMP,MMS,HTTP这类的协议普遍用于互联网视音频服务之中。这类协议不会发生丢包,于是保证了视频的质量,可是传输的效率会相对低一些。

此外RTMFP是一种比较新的流媒体协议,特色是支持P2P。

RTMP我作的研究相对多一些:好比RTMP规范简单分析,或者RTMP流媒体播放过程

相关工具的源代码分析:RTMPdump源代码分析 1 main()函数[系列文章]

RTMP协议学习:RTMP流媒体技术零基础学习方法

3.     封装格式

封装格式的主要做用是把视频码流和音频码流按照必定的格式存储在一个文件中。现现在流行的封装格式以下表所示:

主要封装格式一览

名称

推出机构

流媒体

支持的视频编码

支持的音频编码

目前使用领域

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。

这些封装格式都有相关的文档,在这里就不一一例举了。

我本身也作过辅助学习的小项目:

TS封装格式分析器

FLV封装格式分析器

 

4.     视频编码

视 频编码的主要做用是将视频像素数据(RGB,YUV等)压缩成为视频码流,从而下降视频的数据量。若是视频不通过压缩编码的话,体积一般是很是大的,一部 电影可能就要上百G的空间。视频编码是视音频技术中最重要的技术之一。视频码流的数据量占了视音频总数据量的绝大部分。高效率的视频编码在同等的码率下, 能够得到更高的视频质量。

视频编码的简单原理能够参考:视频压缩编码和音频压缩编码的基本原理

注:视频编码技术在整个视音频技术中应该是最复杂的技术。若是没有基础的话,能够先买一些书看一下原理,好比说《现代电视原理》《数字电视广播原理与应用》(本科的课本)中的部分章节。

主要视频编码一览

名称

推出机构

推出时间

目前使用领域

HEVC(H.265)

MPEG/ITU-T

2013

研发中

H.264

MPEG/ITU-T

2003

各个领域

MPEG4

MPEG

2001

不温不火

MPEG2

MPEG

1994

数字电视

VP9

Google

2013

研发中

VP8

Google

2008

不普及

VC-1

Microsoft Inc.

2006

微软平台

由表可见,有两种视频编码方案是最新推出的:VP9和HEVC。目前这两种方案都处于研发阶段,尚未到达实用的程度。当前使用最多的视频编码方案就是H.264。

4.1 主流编码标准

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仍是要稍微逊色一点。不过感受我国在视频编解码领域还算比较先进的,可参考:视频编码国家标准AVSH.264的比较(节选)

近期又推出了AVS新一代的版本AVS+,具体的性能测试还没看过。不过听说AVS+获得了国家政策上很是强力的支持。

4.2 下一代编码标准

下一代的编解码标准就要数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的使用能够参考:HEVCH.265)标准的编码器(x265DivX265)试用

主流以及下一代编码标准之间的比较能够参考文章:视频编码方案之间的比较(HEVCH.264MPEG2等)

此外,在码率必定的状况下,几种编码标准的比较可参考:限制码率的视频编码标准比较(包括MPEG-2H.263 MPEG-4,以及 H.264

结果大体是这样的:

HEVC > VP9 > H.264> VP8 > MPEG4 > H.263 > MPEG2。

截了一些图,能够比较直观的了解各类编码标准:

HEVC码流简析:HEVC码流简单分析

H.264码流简析:H.264简单码流分析

MPEG2码流简析:MPEG2简单码流分析

以上简析使用的工具:视频码流分析工具

我本身作的小工具:  H.264码流分析器


5.     音频编码

音 频编码的主要做用是将音频采样数据(PCM等)压缩成为音频码流,从而下降音频的数据量。音频编码也是互联网视音频技术中一个重要的技术。可是通常状况下 音频的数据量要远小于视频的数据量,于是即便使用稍微落后的音频编码标准,而致使音频数据量有所增长,也不会对视音频的总数据量产生太大的影响。高效率的 音频编码在同等的码率下,能够得到更高的音质。

音频编码的简单原理能够参考:视频压缩编码和音频压缩编码的基本原理

主要音频编码一览

名称

推出机构

推出时间

目前使用领域

AAC

MPEG

1997

各个领域(新)

AC-3

Dolby Inc.

1992

电影

MP3

MPEG

1993

各个领域(旧)

WMA

Microsoft Inc.

1999

微软平台

由表可见,近年来并未推出全新的音频编码方案,可见音频编码技术已经基本能够知足人们的须要。音频编码技术近期绝大部分的改动都是在MP3的继任者——AAC的基础上完成的。

这些编码标准之间的比较能够参考文章:音频编码方案之间音质比较(AACMP3WMA等)

结果大体是这样的:

AAC+ > MP3PRO > AAC> RealAudio > WMA > MP3

AAC格式的介绍:AAC格式简介

AAC几种不一样版本之间的对比:AAC规格(LCHEHEv2)及性能对比

AAC专利方面的介绍:AAC专利介绍

此外杜比数字的编码标准也比较流行,可是貌似比最新的AAC稍为逊色:AC-3技术综述

我本身作的小工具: AAC格式分析器


6.     现有网络视音频平台对比

现 有的网络视音频服务主要包括两种方式:点播和直播。点播意即根据用户的须要播放相应的视频节目,这是互联网视音频服务最主要的方式。绝大部分视频网站都提 供了点播服务。直播意即互联网视音频平台直接将视频内容实时发送给用户,目前还处于发展阶段。直播在网络电视台,社交视频网站较为常见。

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播放器。

相关文章
相关标签/搜索