FFmpeg深入分析(一)

news/2024/7/10 21:10:47 标签: ffmpeg

最近在做一个关于监控的项目,要在iphone 客户端实现播放监控的实时视频以及录像视频。使用到了FFmpeg,看到这篇文章,写的非常不错。转自:http://blog.chinaunix.net/uid-26611383-id-3976154.html

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进行解码。

转载于:https://www.cnblogs.com/wanghang/p/6298893.html


http://www.niftyadmin.cn/n/1180744.html

相关文章

Jquery同时绑定多个事件

//JQ 同时绑定多个事件 $("div.div_grren a img").bind({mouseover:function(){$(this).attr(src,border_blue_grren_img);},mouseout:function(){$(this).attr(src,grren_img);}});

.net实现全局异常记录日志Log4Net

在这里记录两种实现方式: 第一种:通过重写Controller中的OnExpection的方法来记录日志 新建立一个BaseController 继承Controller protected override void OnException(ExceptionContext filterContext){ILog log LogManager.GetLogger("INFO&qu…

如何去除Notes 8客户端中最近联系人的功能

在Notes客户端,文件--首选项--联系人--勾选“不要自动添加名称到最近联系人视图”关闭所有用户最近联系人的这个功能从Domino服务器目录--策略--建立桌面设置策略然后推给客户端 ,在notes.ini中添加一条参数,DisableDPABProcessing1 就可以禁…

WebView内嵌H5实现小程序分享

小小的问题网上说的乱七八糟&#xff0c;解决后自己记录一下&#xff0c;简单明了。不懂可以留言。 <web-view :srcurl bindmessage"h5PostMessage"> </web-view>bindmessage 属性是在用户进行分享时主动触发 js: export default {data() {return { u…

[翻译]开发一个自己的HTML在线编辑器(二)

copyfrom:http://www.cnblogs.com/webabcd/archive/2007/03/03/663102.html 原文地址&#xff1a;http://aspalliance.com/1156_Rich_Text_Editor__Part_II[原文源码下载] [翻译]开发一个自己的HTML在线编辑器&#xff08;二&#xff09;原文发布日期&#xff1a;2007.02.27作者…

时间正则表达式

yyyy-MM-dd HH:mm:ss 标准格式验证 ^((((1[6-9]|[2-9]/d)/d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]/d|3[01]))|(((1[6-9]|[2-9]/d)/d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]/d|30))|(((1[6-9]|[2-9]/d)/d{2})-0?2-(0?[1-9]|1/d|2[0-8]))|(((1[6-9]|[2-9]/d)(0[48]|[246…

zoj 3714 Java Beans(枚举 水)

题意&#xff1a;n个人围成一个圈 从中选择连续的m个人 求他们的最大和 思路&#xff1a;直接暴力枚举 注意取模 if(j>n) temp%n; #include<stdio.h> #include<string.h> #include<math.h> #include<iostream> #include<algorithm> #inclu…

电商数据结构之商品模块 (有关商品结构的数据库如何设计)

最近开发一款商城系统&#xff0c;设计数据结构&#xff0c;逐一记录一下&#xff0c;本片文章记录商城的商品模块。如果有遗漏的设计&#xff0c;欢迎小伙伴们指出。大家一起学习。 首先第一张表商品详情 第二步 我们需要设计一张商品图片表 商品具有分类&#xff0c;这里…