音视频编解码技术基础知识总结

Posted xz-954042850-qq

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了音视频编解码技术基础知识总结相关的知识,希望对你有一定的参考价值。

参考博客

一、视频播放器的原理

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

视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:

(1)解协议

(2)解封装

(3)解码音视频

(4)音视频同步

过程如下图所示:

技术图片

解协议:

将流媒体协议的数据,解析为标准的相应的封装格式数据。

音视频在网络上传播的时候,常常采用各种流媒体协议,例如: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经常用于IPTV(交互式网络电视)领域。因为其采用UDP传输音视频,支持组播,效率较高。但其缺点是网络不好的情况下可能会丢包,影响视频观看质量。

RTSP协议学习笔记

RTSP+RTP系统中衡量服务质量参考

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

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

RTMP规范简单分析,或者RTMP流媒体播放过程

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

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

三、封装格式

封装格式的主要作用是把视频码流和音频码流按照一定的格式存储在一个文件中。现如今流行的封装格式如下:

技术图片

从上表可以看出,除了AVI之外,其他封装格式都支持流媒体,即可以“边下边播”。有些格式更万能些,支持的音视频编码标准多一些,比如MKV,而有的格式支持的比较少,比如rmvb。

注意:MPEG4的QuickTime封装格式(MOV),H.264(AVC)的压缩编码标准。

下图就是一个mp4封装格式的音视频文件,下面是利用在暴风影音播放它时,右击鼠标,进入属性看到的信息。

技术图片

 技术图片

四、视频编码

视频编码的主要作用是将视频像素数据(RGB、YUV等等)压缩编码成视频码流,从而降低视频的数据量,便于传输。

视频码流的数据量占了音视频总数据量的绝大部分。高效率的视频编码在同等的码率下,可以获得更高的视频质量。

视频压缩编码和音频压缩编码的基本原理

技术图片

注:H.264(AVC),当前使用的最多的视频编码方案

1、主流编码标准

(1)H.264仅仅是一个编码标准,而不是一个具体的编码器,H.264只是给编码器的实现提供参照用的

(2)基于H.264标准的编码器还是有很多的,MSU出品的 H.264编码器比较(2011.5)

(3)在学习视频编码的时候,可能会用到各种编码器(实际上就是一个exe文件),他们常用的编码命令可参考:各种视频编码器的命令行格式

(4)学习H.264最标准的源代码,就是其官方标准JM了。但是要注意,JM速度非常的慢,是无法用于实际的:H.264参考软件JM12.2RC代码详细流程

(5)实际中使用最多的就是x264了,性能强悍(超过了很多商业编码器),而且开源。其基本教程网上极多,不再赘述。编码时候可参考:x264编码指南——码率控制。编码后统计值的含义:X264输出的统计值的含义(X264 Stats Output)

(6)Google推出的VP8属于和H.264同一时代的标准。总体而言,VP8比H.264要稍微差一点。有一篇写的很好的VP8的介绍文章:深入了解 VP8。除了在技术领域,VP8和H.264在专利等方面也是打的不可开交,可参考文章:WebM(VP8) vs H.264

(7)此外,我国还推出了自己的国产标准AVS,性能也不错,但目前比H.264还是要稍微逊色一点。不过感觉我国在视频编解码领域还算比较先进的,可参考:视频编码国家标准AVS与H.264的比较(节选)

(8)近期又推出了AVS新一代的版本AVS+,具体的性能测试还没看过。不过据说AVS+得到了国家政策上非常强力的支持。

2、下一代的编码标准参考博客

五、音频编码

音频编码的主要作用将音频采样数据(PCM等)压缩编码成音频码流,从而降低音频的数据量。

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

技术图片 

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

现有的网络音视频服务主要包括两种方式:点播和直播。

点播

根据用户的需要播放相应的视频节目,这是互联网音视频服务最主要的方式。绝大部分视频网站都提供了点播服务。

直播

互联网音视频平台直接将视频内容实时发送给用户,目前还处于发展阶段。直播在网络电视台,社交视频网站较为常见。

六、直播平台参数对比

技术图片

可以看出,直播服务普遍采用了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播放器。

以上是关于音视频编解码技术基础知识总结的主要内容,如果未能解决你的问题,请参考以下文章

视频编解码的理论和实践2:Ffmpeg视频编解码

二、视频编解码基础知识

视频的编解码-编码篇

Android MediaCodec+OpenGL视频编解码实践笔记

Android MediaCodec+OpenGL视频编解码实践笔记

一文了解视频编解码原理