FFmpeg是至关强大的多媒体编解码框架,在深刻分析其源代码以前必需要有基本的多媒 体基础知识,不然其源代码会很是晦涩难懂。本文将从介绍一些基本的多媒体只是,主要是为研读ffmpeg源代码作准备,好比一些编解码部分,只有真正了解 了多媒体处理的基本流程,研读ffmpeg源代码才能事半功倍。 算法
下面分析一下多媒体中最基本最核心的视频解码过程,日常咱们从网上下载一部电影或者一首 歌曲,那么相应的多媒体播放器为咱们作好了一切工做,咱们只用欣赏就ok了。目前几乎全部的主流多媒体播放器都是基于开源多媒体框架ffmpeg来作的, 可见ffmpeg的强大。下面是对一个媒体文件进行解码的主要流程:
api
当咱们打开一个多媒体文件以后,第一步就是解复用,称之为Demux。为何须要这一 步,这一步到底是作什么的?咱们知道在一个多媒体文件中,既包括音频也包括视频,并且音频和视频都是分开进行压缩的,由于音频和视频的压缩算法不同,既 然压缩算法不同,那么确定解码也不同,因此须要对音频和视频分别进行解码。虽然音频和视频是分开进行压缩的,可是为了传输过程的方便,将压缩过的音频 和视频捆绑在一块儿进行传输。因此咱们解码的第一步就是将这些绑在一块儿的音频和视频流分开来,也就是传说中的解复用,因此一句话,解复用这一步就是将文件中 捆绑在一块儿的音频流和视频流分开来以方便后面分别对它们进行解码,下面是Demux以后的效果。 网络
这一步不用多说,一个多媒体文件确定是通过某种或几种格式的压缩的,也就是一般所说的视频和音频编码,编码是为了减小数据量,不然的话对咱们的存储设备是一个挑战,若是是流媒体的话对网络带宽也是一个几乎不可能完成的任务。因此咱们必须对媒体信息进行尽量的压缩。框架
了解了上面的一个媒体文件从打开到解码的流程,就能够很轻松的阅读ffmpeg代码,ffmpeg的框架也基本是按照这个流程来的,但不是每一个流程对应一 个API,下面这副图是我分析ffmpeg并根据本身的理解获得的ffmpeg解码流程对应的API,我想这幅图应该对理解ffmpeg和编解码有一些帮 助。ide
Ffmpeg中Demux这一步是经过avformat_open_input()这个 api来作的,这个api读出文件的头部信息,并作demux,在此以后咱们就能够读取媒体文件中的音频和视频流,而后经过 av_read_frame()从音频和视频流中读取出基本数据流packet,而后将packet送到avcodec_decode_video2() 和相对应的api进行解码。 函数
后续会对ffmpeg的代码进行深刻探讨,本文知识一个铺垫!
编码