FFMPEG基本概念:

ffmpeg是一个开源的编解码框架,它提供了一个音视频录制,解码和编码库。FFMPEG是在linux下开发的,但也有windows下的编译版本。
ffmpeg项目由以下几部分组成:
ffmpeg 视频文件转换命令行工具,也支持经过实时电视卡抓取和编码成视频文件.
ffserver 基于HTTP(RTSP正在开发中)用于实时广播的多媒体服务器.也支持时间平移
ffplay 用 SDL和FFmpeg库开发的一个简单的媒体播放器
libavcodec 一个包含了所有FFmpeg音视频编解码器的库.为了保证最优性能和高可复用性,大多数编解码器从头开发的.
libavformat 一个包含了所有的普通音视格式的解析器和产生器的库.

FFMPEG和VLC关系:

在网上很多人都在问FFMPEG和VLC之间是什么关系,网上有位同学的回答最为精辟:“VLC VS FFmpeg == 汽车 VS 发动机”
FFMPEG和libav的关系:
libav是FFMPEG的开发人员中独立出来一部分后创建的一个新的工程。当时是因为在ffmpeg的开发邮件列表中经常会有不同的意见,并且产生争论之后独立出来。同时libav开发组将ffmpeg原有的图标变为自己的,同时ffmpeg重新开发了图标:

Today FFmpeg has received the first legal threat in its existence. Its from a previous root admin of FFmpeg, who now is root admin of the Libav fork of FFmpeg. He claims copyright on the zigzag part of our logo. It has to be noted that he said 4 years ago Credit to whoever came up with the zigzag idea

Update May 31/June 1:We have replaced the logo with a better looking one drawn by Hervé Flores.

FFMPEG编译:

FFMPEG的源码可以从发下网站中获取:http://www.ffmpeg.org/。
编译选项可以通过源码中的configure来配置。
如果要配置外包的包如libfaac,libx264等,可以通过--extra-cflags来指定头文件的文件夹。可以通过--extra-cflags来指定第三方的库文件的位置。如果要编译动态库则可用--enable-shared配置选项来实现。
如果想编译ffplay必须先安装SDL库。否则无法编译出ffplay。
而对于SDL库的编译则同其它linux下的安装文件一样。
而对于第三方库的安装网上到处都有说明。

http://www.cnblogs.com/MaxIE/archive/2007/02/03/638863.html

这里有一篇文章可以参考。

版权所有:博水。转载请注明出处:http://www.cnblogs.com/qingquan/

ffmpeg源码分析之数据流 http://www.yanfake.com

本文主要介绍ffmpeg的数据流,在ffmpeg中主要分有三个主要用途用于媒体流的解码播放,媒体流的转换(解码之后再编码)和媒体流录制。

媒体流的解码播放

在ffmpeg中媒体流的解码播放流程如下图:

其主要流程为从媒体文件中读取出媒体流,然后送入媒体格式解码器(demuxer)中去除多余的外衣--媒体格式。然后送入ffmpeg的codec的decode中进行解码,最终生成显示需要的YUV格式的图片,然后再送入类似SDL中进行渲染。ffmpeg中媒体流的解码播放流程相对比较来说其最大的难点在于pts的同步,在ffmpeg的ffplay中有很好的例子。例子中是启动了多个线程来进行同步的。

媒体流的转换

所谓媒体流的转换分以下几种情况:

一种是格式转换,也相当于我们平时的换衣服一样,只是换个样式,换一种组织样式以适应不同场合的需要。

一种是媒体编码类型的转换,例如将codec从mpeg4 to H264相当于不同的人来买同一个衣服,虽然外表(格式)看起来一样但穿衣服的人已经发生了变化。

一种是媒体编码类型和格式同时转换,例如将格式为flv的转换为mpeg4,同时将codec从mpeg4 to H264相当于不同的人穿了不同的衣服。

其流程如下图:

其数据流前半部分同解码流程一样,后半部分则和解码的流程相反。当解析出YUV图片之后,然后编码成另外一种codec,之后再将codec的数据加上一个外壳形成一个媒体文件然后通过byteIocontext写入目标文件。

媒体流录制

媒体流的录制过程相当于媒体流转换的后半部分流程从YUV文件到media文件。其流程为:

FFMPEG中的decoder的组织形式:

FFMPEG中codec的数据结构如下:

typedef struct AVCodec {
const char *name;
enum AVMediaType type;
enum CodecID id;
int priv_data_size;
int (*init)(AVCodecContext *);
int (*encode)(AVCodecContext *, uint8_t *buf, int buf_size, void *data);
int (*close)(AVCodecContext *);
int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt);
int capabilities;
struct AVCodec *next;
void (*flush)(AVCodecContext *);
const AVRational *supported_framerates;
const enum PixelFormat *pix_fmts;
const char *long_name;
const int *supported_samplerates;
const enum SampleFormat *sample_fmts;
const int64_t *channel_layouts;
} AVCodec;

这个数据结构分别用于decoder和encoder,当被decoder所用时函数指针encode为NULL,而当用于encode时其decode为NULL,在ffmpeg中通过向全局变量

static AVCodec *first_avcodec;

中添加新的codec变量。在查找的过程也是通过遍历这个链表然后通过name来匹配相应的codec这个过程将会在以后的文章中详细描述。在ffmpeg中formate的组织结构和codec类似。

版权所有:博水。转载请注明出处:http://www.cnblogs.com/qingquan/

FFMPEG 源码分析相关推荐

  1. FFMPEG源码分析(二)

    ffmpeg源码分析之数据流 本文主要介绍ffmpeg的数据流,在ffmpeg中主要分有三个主要用途用于媒体流的解码播放,媒体流的转换(解码之后再编码)和媒体流录制. 媒体流的解码播放 在ffmpeg ...

  2. FFmpeg源码分析-直播延迟-内存泄漏

    FFmpeg源码分析-直播延迟-内存泄漏|FFmpeg源码分析方法|ffmpeg播放为什么容易产生延迟|解复用.解码内存泄漏分析 专注后台服务器开发,包括C/C++,Linux,Nginx,ZeroM ...

  3. ffmpeg源码分析-parse_optgroup

    本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 ffmpeg 源码分析系列以一条简单的命令开始,ffmpeg -i a.mp4 b.flv,分析其内部逻辑. a. ...

  4. ffmpeg源码分析-ffmpeg_parse_options

    本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 ffmpeg 源码分析系列以一条简单的命令开始,ffmpeg -i a.mp4 b.flv,分析其内部逻辑. a. ...

  5. ffmpeg源码分析-transcode_step

    本系列 以 ffmpeg4.2 源码为准,下载地址:链接:百度网盘 提取码:g3k8 ffmpeg 源码分析系列以一条简单的命令开始,ffmpeg -i a.mp4 b.flv,分析其内部逻辑. a. ...

  6. FFMPEG源码分析(一)

    FFMPEG源码分析(一) ffmpeg之前公司项目中就使用过,但是多停留于应用层面,实现某个功能时,需要哪些结构体以及调用哪些函数.最近想系统的学习一下ffmpeg,于是开始看雷霄骅https:// ...

  7. ffmpeg源码分析与应用示例(一)——H.264解码与QP提取

    本文包含以下内容 1.H.264解码流程详述与对应ffmpeg源码解析 2.针对一个应用实例介绍通过修改ffmpeg源码解决问题的方案 具有较强的综合性. 先介绍一下在第二部分中将要解决的实际问题:自 ...

  8. ffmpeg源码分析_ffmpeg音视频同步的几种策略

    在前面的文章中,我们介绍了播放器的视频渲染及音频渲染的相关知识,这些都是单独进行的,一旦在现实开发中将视频及音频结合在一起播放就会出现音视频不同步的问题. 下面我们就来分析一下如何解决音视频同步的问题 ...

  9. 【FFMPEG源码分析】ffmpeg中context与AVClass,AVOption之间的关系

    通过前面三篇文章的分析大致了解了ffmpeg中demuxer/decoder模块的内部大致结构和数据处理流程.在阅读源码的过程中经常会看到XXXContext,AVClass xxx_class, A ...

最新文章

  1. ubuntu 下mysql导入出.sql文件
  2. getComputedStyle currentStyle 获取当前元素所有最终使用的CSS属性值
  3. 【浸入式英文学习方式】山姆莱萌帮助孩子建立扎实语言功底
  4. java数据类型_JAVA的数据类型
  5. 未在本地计算机上注册“Microsoft.ACE.OLEDB.12.0
  6. dvwa安装教程linux,Kali 2020.3安装docker和vulhub
  7. 详细学习ORACLE JOBS
  8. 基于OpenCV的简单人脸识别系统
  9. 杂谈3之English
  10. 福建职称计算机评聘任,职称聘任工作的有关补充规定(试行)
  11. CodeForces 258D Little Elephant and Broken Sorting(期望)
  12. xms跨平台基础框架 - 基于.netcore
  13. MySQL函数/数据库函数
  14. golang学习之旅(2)- go的数据基本数据类型及变量定义方式
  15. 删除进程id_Mysql新增删除数据失败,提示锁表
  16. ubuntu18设置屏幕旋转_无线电对讲机,常用电台上中继台设置
  17. Json对象(数组)与Java对象(集合)的相互转换
  18. Spring源码学习一,下载Spring源码并配置gradle环境
  19. 什么是大小端?怎样判断?
  20. 【 MVC 】显示数据库数据表格

热门文章

  1. Java并发:线程共享变量可见性原理
  2. 一步步编写操作系统 36 一级页表与虚拟地址1
  3. 利用Cloudflare为基于GitHub Pages的Hexo博客添加HTTPS支持
  4. Python3 基础学习笔记 C01【变量和简单数据类型】
  5. 【POJ - 3694】Network(对dfn求lca 或 缩点+lca 或 边双连通+并查集)
  6. 【hihocoder - offer编程练习赛60 A】hohahola(贪心,二分)
  7. 【HihoCoder - 1268】九宫 (dfs,深搜)
  8. Apollo进阶课程㉖丨Apollo规划技术详解——Understand More on the MP Difficulty
  9. matlab调用哈希表,ros与matlab联动使用
  10. 使用java开发应用程序_使用Java中的插件支持开发应用程序