了解一下ffmpeg

转载 2016年06月01日 13:30:44
FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。

FFmpeg在Linux平台下开发,但它同样也可以在其它操作系统环境中编译运行,包括Windows、Mac OS X等。这个项目最早由Fabrice Bellard发起,现在由Michael Niedermayer维护。许多FFmpeg的开发人员都来自MPlayer项目,而且当前FFmpeg也是放在MPlayer项目组的服务器上。项目的名称来自MPEG视频编码标准,前面的"FF"代表"Fast Forward"

http://baike.baidu.com/link?url=0Cb8hnaoKtxYht1dW5vyBHfxhRU-agxZ5HXF18bOJwdkzKLMor1BuqG29jvrDGMaBUq21Aci_ggSQKhtnFrbUq

和读取音视频帧等功能;
libavcodec:用于各种类型声音/图像编解码;
libavutil:包含一些公共的工具函数;
libswscale:用于视频场景比例缩放、色彩映射转换;
libpostproc:用于后期效果处理;
ffmpeg:该项目提供的一个工具,可用于格式转换、解码或电视卡即时编码等;
ffsever:一个 HTTP 多媒体即时广播串流服务器;
ffplay:是一个简单的播放器,使用ffmpeg 库解析和解码,通过SDL显示

// 以上是百度百科解释.

面分析一下多媒体中最基本最核心的视频解码过程,平常我们从网上下载一部电影或者一首歌曲,那么相应的多媒体播放器为我们做好了一切工作,我们只用欣赏就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进行解码。

http://wenku.baidu.com/link?url=inrRVAA_gnO7exEjrRfBXfjWjydzp1JHNlb2tLpBD7qFTzJysOqTfSUNfZ0BWrEdDXSakEOibT5zaUwGJQd_5Hlfcx_cS-SFD2fFl3lFaRC

相关文章推荐

ffmpeg1.1.4 实现ffmpeg demo tutorial01。 mark一下其中库的接口更新以及编译问题

1. demo源码 http://dranger.com/ffmpeg/tutorial01.html (由于版本太低会有诸多问题....) 2.首先建立目录ffmpeg,configure and...

diff了一下,我的svn的ffmpeg和在网站上下载的最新的ffmpeg 0.6.1

diff了一下,我的svn的ffmpeg和在网站上下载的最新的ffmpeg 0.6.1

NDK移植havlenapetr/FFMpeg |Android平台实现 【Mark一下,目前仅仅测试了一下可行性(可行,但有问题)|接下来就好好研究研究(站下巨人的肩膀么- -)】

/********************************************************************************************  * au...

了解一下 Redis 并在 CentOS 下进行安装配置

转载自:http://blog.mayongfa.cn/258.html 转载后对redis版本修改成最新版本 了解一下 Redis Redis 是一个开源、支持网络、基于内存、键值对的 Ke...

了解一下java系统中的OSCache配置

转载于:http://hi.baidu.com/wader2006/blog/item/0965a18bdc3d117e9f2fb435.html     最近一朋友说到系统的架构是Veloci...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)