ffmpeg实战系列——001

Talk is cheap,Show me the code!

本文部分参考了雷神的博客,加入自己的理解,新增了对每种数据结构的详细剖析!

开始玩ffmpeg之前,先把ffmpeg中常见的数据结构以及他们的之间的关系了解下,这是基础,非常重要!

FFMPEG结构体分析:AVFrame
FFMPEG结构体分析:AVFormatContext
FFMPEG结构体分析:AVCodecContext
FFMPEG结构体分析:AVIOContext
FFMPEG结构体分析:AVCodec
FFMPEG结构体分析:AVStream
FFMPEG结构体分析:AVPacket

FFMPEG中结构体很多。最关键的结构体可以分成以下几类:

a)        解协议(http,rtsp,rtmp,mms):所有格式的协议组织成一个全局链表,使用时动态绑定到具体的某种协议,如:ff_file_protocol、ff_rtmp_protocol等

AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议的类型以及状态。URLProtocol存储输入视音频使用的封装格式。每种协议都对应一个URLProtocol结构。(注意:FFMPEG中文件也被当做一种协议“file”)

b)        解封装(flv,avi,rmvb,mp4):所有的demuxer,也叫AVInputFormat组织成一个全局链表,使用时动态绑定到具体的某种demuxer,如ff_flv_demuxer、ff_mpegts_demuxer、ff_avi_demuxer

AVFormatContext主要存储视音频封装格式中包含的信息;AVInputFormat存储输入视音频使用的封装格式。每种视音频封装格式都对应一个AVInputFormat 结构。

AVInputFormat:demuxer

AVOutputFormat:muxer

c)        解码(h264,mpeg2,aac,mp3):所有的decoder、encoder组织成一个全局链表,使用时动态绑定到具体的某种编解码器,如:ff_h264_decoder、ff_hevc_decoder等

每个AVStream存储一个视频/音频流的相关数据;每个AVStream对应一个AVCodecContext,存储该视频/音频流使用解码方式的相关数据;每个AVCodecContext中对应一个AVCodec,包含该视频/音频对应的解码器。每种解码器都对应一个AVCodec结构。

d) 存数据

视频的话,每个结构一般是存一帧;音频可能有好几帧

解码前数据:AVPacket

解码后数据:AVFrame

他们之间的对应关系如下所示:

分析了最新的3.3 ffmpeg后,得出如下数据关系:

先来看一下这几个数据结构,为方便格式直接上传图片:

上层调用具体格式时,函数调用的时候,第一个参数一定是:priv_data

所有的信息几乎都来自上下文结构体:priv_data

掌握了以上数据结构就可以开始我们的ffmpeg实战代码分析了。

时间: 2024-08-28 09:56:18

ffmpeg实战系列——001的相关文章

ffmpeg实战系列——003

Talk is cheap,Show me the code! 示例2.demuxing_decoding.c 以下例子并不完整,只列出核心数据结构和代码 static AVFormatContext *fmt_ctx = NULL; static AVCodecContext *video_dec_ctx = NULL, *audio_dec_ctx; static AVStream *video_stream = NULL, *audio_stream = NULL; static int

ffmpeg实战系列——002

Talk is cheap,Show me the code! 示例1.decode_video.c int main(int argc, char **argv) { const char *filename, *outfilename; const AVCodec *codec; AVCodecContext *c= NULL; int frame_count; FILE *f; AVFrame *frame; uint8_t inbuf[INBUF_SIZE + AV_INPUT_BUFF

Spark入门实战系列--9.Spark图计算GraphX介绍及实例

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 1.GraphX介绍 1.1 GraphX应用背景 Spark GraphX是一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求. 众所周知·,社交网络中人与人之间有很多关系链,例如Twitter.Facebook.微博和微信等,这些都是大数据产生的地方都需要图计算,现在的图处理基本都是分布式的图处理,而并非单机处理.Spark

Spark入门实战系列--6.SparkSQL(下)--Spark实战应用

[注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送–Spark入门实战系列>获取 1 运行环境说明 1.1 硬软件环境 主机操作系统:Windows 64位,双核4线程,主频2.2G,10G内存 虚拟软件:VMware? Workstation 9.0.0 build-812388 虚拟机操作系统:CentOS 64位,单核 虚拟机运行环境: JDK:1.7.0_55 64位 Hadoop:2.2.0(需要编译为64位) Scala:2.10.4 Spark:1.1.0(需要编译)

Skype For Business 2015实战系列11:创建并发布拓扑

Skype For Business 2015实战系列11:创建并发布拓扑 Skype For Business Server安装前需要先定义好拓扑,因为我们要在拓扑中的每台服务器上安装 Skype for Business Server 系统,必须首先创建和发布一个拓扑.发布拓扑时,拓扑信息会载入中央管理存储数据库.如果这是 Enterprise Edition 池,您将在初次发布新拓扑时创建中央管理存储数据库.如果是 Standard Edition,则需要运行部署向导中的"准备第一个 St

Skype For Business 2015实战系列12:安装前端服务器

Skype For Business 2015实战系列12:安装前端服务器 配置Front01: 打开Skype for Business Server部署向导,点击"安装或更新Skype for Business Server系统": 安装本地配置存储: 点击"运行": 点击下一步: 安装完成,点击完成: 安装或删除Skype for Business Server组建: 点击运行: 点击下一步: 安装完成,点击完成: 请求.安装或分配证书: 点击运行: 输入基本

Skype For Business 2015实战系列13:安装Office Web App Server

Skype For Business 2015实战系列13:安装Office Web App Server 今天要为大家介绍的是Office Web App Server(以下简称OWA),OWA在Skype For Business中的主要作用就是在用户使用Skype客户端开会的时候可以共享PPT,从而可以更好的进行演讲! 安装OWA: 我们登陆到OWA,服务器,坚持服务器的基本信息如下: 安装OWA所需的Windows组建: 以管理员身份打开Powershell,运行如下命令: Add-Wi

Skype For Business 2015实战系列10:DNS准备

Skype For Business 2015实战系列10:DNS准备 DNS的正确配置对于Skype for Business Server 2015来说也是非常重要的,我们要让 Skype for Business Server 正常运行,就必需配置大量DNS纪录.从而使客户端知道该如何访问服务以及让服务器知道相互之间的情况. Skype for Business Server 2015 通过以下方式使用 DNS: ●发现内部服务器或服务器池以进行服务器至服务器之间的通信. ●使客户端可以发

Skype For Business 2015实战系列2:安装活动目录

Skype For Business 2015实战系列2:安装活动目录 今天开始我们就正式进入了Skype For Business 2015的部署阶段,在部署开始之前,我们先来看一下我们本次的环境列表: 计算机名 IP地址 角色 备注 DC 192.168.1.20 AD DS   Mail 192.168.1.22 Exchange 2013   Front01 192.168.1.25 SFB前端   Front01 192.168.1.26 SFB前端   SQL01 192.168.1