MelonTeam 移动终端前沿技术的探索者

#音视频技术学习笔记(1)-基础入门

2017-10-30
stevcao

| 导语 最近在学习音视频的相关知识,这里整理一下学习的点,方便后续的学习。我也是刚开始学习,系统介绍音视频技术的书籍我没有找到,都是参考网上的文章学习,文章有问题欢迎大家指出。这篇文章主要是介绍音视频技术要入门的话,需要接触哪些技术,然后怎样去学习。

音视频技术包括哪些内容

首先我们分析一下一个视频的播放过程吧,视频播放器播放一个互联网上的视频文件,需要经过以下几个步骤:解协议,解封装,解码视音频,视音频同步。如果播放本地文件则不需要解协议,为以下几个步骤:解封装,解码视音频,视音频同步。他们的过程如图所示。

上图演示了一个网络视频文件在播放的过程中解码的过程,首先是解流媒体协议,如果参考一个网页的解析,我们会容易理解一些:浏览器如果要展示网页,需要从服务器获取html格式的数据去解析并渲染展示,html(超文本传输协议)就是页面展示的组织内容,但是我们从服务器中获取的不是直接的html代码,而是一个http的协议包,包体中包含有html的内容用于展示;那么流媒体协议也是一样的,用一层协议来包裹着视频的数据,流媒体协议有HTTP、RTMP、MMS等。经过解协议之后,输出的是视频的封装格式;

那么什么是视频的封装格式? 视频的封装格式是对视频和音频的压缩数据的一个封装,将视频和音频的压缩数据按照一定的格式放在一起;那解封装得到的就是视频和音频的压缩数据。视频的封装格式有mp4、mkv、rmvb、avi、flv、ts等。这些名字应该很熟悉了,就是我们常见的视频文件的后缀名。
下面这个链接有对视频的封装格式的一个对比:

视频封装格式对比

经过上一步的解封装,我们得到的是视频的压缩格式,为啥是压缩数据呢?看字面意思就知道是对音视频的原始帧数据的一个压缩,主要作用是减少音视频数据在存储和传输过程中的一个成本。如果不压缩,一个普通的电影文件可能有上百个G。音频和视频的压缩数据需要进一步解码才能得到音频和视频的原始数据,这个解码过程就要看音频和视频的压缩用的编码标准是什么了。常见的视频编码方式有:H.264、MPEG2 、VC- 1等,视频经过解码之后得到的是视频非压缩的颜色数据,如果RGB、YUV420等;常见的音频压缩标准有:aac、mp3、AC-3、WMA等等,音频经过解压缩之后得到的非压缩数据即音频的抽样数据,例如PCM数据。音视频的压缩技术,是比较复杂的,也是后续学习的重难点。
下面列举了一些视频和音频的编码格式对比:

视频编码格式对比

音频编码格式对比

那么如何查看视频的封装格式、压缩格式这些数据呢
这里简单介绍一种方法:

1、首先安装ffmpeg,一行命令搞定

brew install ffmpeg

2、使用ffmpeg命令查看视频数据

ffmpeg -i file.mp4

结果如下图,命令输出了很多信息,比如说帧率、大小、时长、编码格式等,我的测试视频的封装格式是mp4,包括是视频和音频的数据信息,视频流采用h264压缩格式对原始数据压缩,原始数据是采用yuv420格式存储的,yuv是一种不同于rgb颜色表示,yuv420指的是yuv的采样存储的方式。那么为啥不是rgb呢?这个后面我们的学习应该能够了解这个问题。然后看我们的音频数据,使用acc编码格式压缩,音频的原始数据存储格式是fltp,同yuv420一样,这个也是一种对原始PCM数据的一种采样存储方式。

综上所述,音视频技术可以简单的概括为以下几个大点:

1、流媒体协议,用于网络视频的在线播放
2、视频的封装格式
3、视频的压缩格式
4、视频原始数据采样
5、视频工具学习 ffmpeg等

学习音视频技术的流程

上面介绍的视频的流媒体协议、封装格式、音频视频编码技术这些暂时没有做进一步的深入学习,我的计划是从底层的一层一层网上学习:

  1. 音视频的原始数据以及处理
  2. 音视频的压缩编码原理
  3. 音视频的封装格式原理
  4. 流媒体协议

中间会穿插着使用音视频处理的一些库,比如ffmpeg,这个也是需要学习的。

基于这样的一个学习堆栈,应该就可以对音视频的基础知识有一个初步的了解了。

学习上面的文章主要参考的是下面这篇文章: http://blog.csdn.net/leixiaohua1020/article/details/18893769


说一说

目录