FFmpeg深入分析之零-基础 <第一篇>

FFmpeg是相当强大的多媒体编解码框架,在深入分析其源代码之前必须要有基本的多媒体基础知识,否则其源代码会非常晦涩难懂。本文将从介绍一些基本的多媒体只是,主要是为研读ffmpeg源代码做准备,比如一些编解码部分,只有真正了解了多媒体处理的基本流程,研读ffmpeg源代码才能事半功倍。

下面分析一下多媒体中最基本最核心的视频解码过程,平常我们从网上下载一部电影或者一首歌曲,那么相应的多媒体播放器为我们做好了一切工作,我们只用欣赏就ok了。目前几乎所有的主流多媒体播放器都是基于开源多媒体框架ffmpeg来做的,可见ffmpeg的强大。下面是对一个媒体文件进行解码的主要流程:

1.    解复用(Demux)

当我们打开一个多媒体文件之后,第一步就是解复用,称之为Demux。为什么需要这一步,这一步究竟是做什么的?我们知道在一个多媒体文件中,既包括音频也包括视频,而且音频和视频都是分开进行压缩的,因为音频和视频的压缩算法不一样,既然压缩算法不一样,那么肯定解码也不一样,所以需要对音频和视频分别进行解码。虽然音频和视频是分开进行压缩的,但是为了传输过程的方便,将压缩过的音频和视频捆绑在一起进行传输。所以我们解码的第一步就是将这些绑在一起的音频和视频流分开来,也就是传说中的解复用,所以一句话,解复用这一步就是将文件中捆绑在一起的音频流和视频流分开来以方便后面分别对它们进行解码,下面是Demux之后的效果。

2.    解码(Decode)

这一步不用多说,一个多媒体文件肯定是经过某种或几种格式的压缩的,也就是通常所说的视频和音频编码,编码是为了减少数据量,否则的话对我们的存储设备是一个挑战,如果是流媒体的话对网络带宽也是一个几乎不可能完成的任务。所以我们必须对媒体信息进行尽可能的压缩。

3.    FFmpeg中解码流程对应的API函数

了解了上面的一个媒体文件从打开到解码的流程,就可以很轻松的阅读ffmpeg代码,ffmpeg的框架也基本是按照这个流程来的,但不是每个流程对应一个API,下面这副图是我分析ffmpeg并根据自己的理解得到的ffmpeg解码流程对应的API,我想这幅图应该对理解ffmpeg和编解码有一些帮助。

Ffmpeg中Demux这一步是通过avformat_open_input()这个api来做的,这个api读出文件的头部信息,并做demux,在此之后我们就可以读取媒体文件中的音频和视频流,然后通过av_read_frame()从音频和视频流中读取出基本数据流packet,然后将packet送到avcodec_decode_video2()和相对应的api进行解码。

后续会对ffmpeg的代码进行深入探讨,本文知识一个铺垫!

时间: 2024-10-10 16:22:34

FFmpeg深入分析之零-基础 <第一篇>的相关文章

FFmpeg深入分析之零-基础

FFmpeg是相当强大的多媒体编解码框架,在深入分析其源代码之前必须要有基本的多媒 体基础知识,否则其源代码会非常晦涩难懂.本文将从介绍一些基本的多媒体只是,主要是为研读ffmpeg源代码做准备,比如一些编解码部分,只有真正了解 了多媒体处理的基本流程,研读ffmpeg源代码才能事半功倍. 下面分析一下多媒体中最基本最核心的视频解码过程,平常我们从网上下载一部电影或者一首 歌曲,那么相应的多媒体播放器为我们做好了一切工作,我们只用欣赏就ok了.目前几乎所有的主流多媒体播放器都是基于开源多媒体框架

Linux及Arm-Linux程序开发笔记(零基础入门篇)

Linux及Arm-Linux程序开发笔记(零基础入门篇)  作者:一点一滴的Beer http://beer.cnblogs.com/ 本文地址:http://www.cnblogs.com/beer/archive/2011/05/05/2037449.html 目录 一.Arm-Linux程序开发平台简要介绍... 3 1.1程序开发所需系统及开发语言... 3 1.2系统平台搭建方式... 4 二.Linux开发平台搭建... 5 2.1安装虚拟工作站... 5 2.2安装Linux虚拟

office零基础——Excel篇

office办公软件是职场人士每天都要使用的一套工具,它包括了:PowerPoint.word.Excel三大办公神器. 大多数人对Word和PowerPoint(PPT)了解比较多,Word是文字编辑,PPT是演示文稿:Excel?不就是做表格的吗?这玩意还要学?很多人对Excel的认识存在误区,认为它只是一种表格制作工具,而往往无视了它强大的数据处理和分析能力.等我们面临着一大堆要处理的数据时,心力交瘁的我们无不内心狂呼:"为什么我没有好好学习Excel?!" 想要学好Excel,

.NET ORM 的 “SOD蜜”--零基础入门篇

PDF.NET SOD框架不仅仅是一个ORM,但是它的ORM功能是独具特色的,我在博客中已经多次介绍,但都是原理性的,可能不少初学的朋友还是觉得复杂,其实,SOD的ORM是很简单的.下面我们就采用流行的 Code First的方式,一步步来了解下. 一.准备工作 1.1,添加SOD包引用 首先建立一个控制台项目,并使用程序包管理器添加PDF.NET SOD的程序引用: PM> Install-Package PDF.NET 更多详细使用信息说明,请参考nuget 网站说明 https://www

XML基础&lt;第一篇&gt;

一.XML简介 XML是一种标记语言,用于描述数据,它提供一种标准化的方式来来表示文本数据.XML文档以.xml为后缀.需要彻底注意的是XML是区分大小写的. 先从一个简单的XML例子来了解下xml基础: <?xml version="1.0" encoding="utf-8" ?> <books ISBN="9787544238212"> <title>xml学习笔记</title> <pr

CSS3基础第一篇(圆角,阴影,渐变,选择器)

1.border-radius:1px 2px 3px 2px;  /*添加圆角  四个半径值分别是左上角.右上角.右下角和左下角,顺时针 */ 2.box-shadow:0px 0px 12px 5px #33CC00 inset; /*添加阴影 参数分别是  X轴偏移量 Y轴偏移量  [阴影模糊半径] [阴影扩展半径][阴影颜色]  [投影方式]*/ a.阴影模糊半径与阴影扩展半径的区别 阴影模糊半径:此参数可选,其值只能是为正值,如果其值为0时,表示阴影不具有模糊效果,其值越大阴影的边缘就

Django基础第一篇

目录 1.Django MTV框架简介 2.基础命令创建项目的配置说明 3.前后端交互案例 4.基于数据库实现数据交互增删改查 Django简介 Django框架的设计模式借鉴了MVC的思想,和MVC不同的点是它拆分的三部分,分别为:(Model)模型. (Template)模板.以及(View)视图 MVC和MTV知识点补充: MVC是三个单词的首字母缩写,它们是Model模型.View视图 和Controller控制. 1)最上面的一层,是直接面向最终用户的"视图层"(View).

黑马程序员--oc基础第一篇

一.oc的基础知识 1.oc的源代码的扩展名为:“.m” 2.不再用include了,改用#import<Foundation/foundation.h>,区别就是import自动检查是否包含了相同的头文件,不需要再在c语言中用IFDef了. 3.类的声明用@interface @end,将声明代码写在两部分之间. 4.BOOL 类型的实质为char typedef signed char BOOL: #define Yes (BOOL) 1 #define No (Bool) 0 5.在oc

JavaSE基础第一篇

1.JDK的安装: 包括JRE 和JVM 下载地址: www.oracle.com/www.sun.com 2.环境变量 set path = "bin所在路径" 设置path环境变量: 方便找到要启动的应用程序 环境变量 path="bin路径" path_home ? 方便对java/bin路径的修改 path(path_home引入path) ;%%JAVA_HOME%/bin; 绿色版与安装版 绿色版:可以其他文件夹,可以正常使用 安装版 3. java的特