ffmpeg是很强大的多媒体编解码框架,当今绝大部分的播放器都用到了它。在深入研究其代码前,需了解一些编解码的基本知识,否则其代码非常晦涩难懂!
下面是一个对媒体文件编码的主要流程:
1.解复用(Demux)
在一个多媒体文件中,既有视频,也有音频,而且音频和视频都是分开进行压缩的,因为音频和视频的压缩算法不一样,既然压缩算法不一样,那么肯定解码也不一样,所以需要对音频和视频分别进行解码。虽然音频和视频是分开进行压缩的,但是为了传输过程的方便,将压缩过的音频和视频捆绑在一起进行传输。所以我们解码的第一步就是将这些绑在一起的音频和视频流分开来,也就是传说中的解复用,所以一句话,解复用这一步就是将文件中捆绑在一起的音频流和视频流分开来以方便后面分别对它们进行解码,下面是Demux之后的效果。
2.解码(Decode)
这一步不用多说,一个多媒体文件肯定是经过某种或几种格式的压缩的,也就是通常所说的视频和音频编码,编码是为了减少数据量,否则的话对我们的存储设备是一个挑战。
3.ffmpeg中解码流程对应的API函数
Demux是通过avformat_open_input()来做的,该api读出头部信息,并作Demux,此后就可以读取音视频流和字幕流了。
4.什么叫做容器:
多媒体文件中包含视频与音频部分,将视频与音频封装在容器内,封装的形式为容器标准中所规定的格式。
容器是用来区分不同文件的数据类型的,而编码格式则由音频和视频压缩算法决定,一般所说的文件格式或者后缀名,指的是文件的容器。对于一种容器,可以包含不同种编码格式的音视频。
常见的容器(文件格式):
AVI(*.avi)
含义是Audio Video Interactive,就是将视频和音频编码会合一起存储,是最常见的音视频容器。
MPG(*.mpg/*.mpeg/*.dat)
MPEG编码采用的音视频容器,具有流的特性。里面又分为ps和ts等。ps主要用于dvd存储,ts用户hdtv。
视音频编码,目前常见的有以下几类:
MPEG系列:
视频编码方面主要是MPEG1(VCD用的),MPEG2(DVD用的),MPEG4(现在的DVDRIP使用的就是它的变种,如:divx,xvid等)
音频编码方面主要是MPEG Audio Layer 1/2、MPEG Audio Layer 3(mp3)、MPEG-2 AAC、MPEG-4 AAC等。