笔谈FFmpeg(二)

  经过前面的学习对FFmpeg的基本流程已经很熟悉了,现在到了掌握其中细节的时候了,用FFmpeg做播放器解码操作中,涉及到了一些结构体,这些结构之间到底有什么关系,它们是怎样协同工作的呢。文章 FFMPEG中最关键的结构体之间的关系 对这些结构间的关系进行了分析,详细内容如下:

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

a)        解协议(http,rtsp,rtmp,mms)

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

b)        解封装(flv,avi,rmvb,mp4)

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

c)        解码(h264,mpeg2,aac,mp3)

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

d) 存数据

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

解码前数据:AVPacket

解码后数据:AVFrame

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

  上面提到的这些结构到底是干嘛用的,中国传媒大学的一个博士写了一系列的结构体的分析的文章,在这里列一个列表,需要好好看下:

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

时间: 2024-11-02 22:52:17

笔谈FFmpeg(二)的相关文章

笔谈FFmpeg(一)

现在的工作是播放器库的开发,可不是调用iOS系统自带的播放器框架进行一些简单的功能和界面定制,这些没什么含量.涉及iOS开发有3个年头了,现在的工作算是有点含金量了.涉及播放器的开发,FFmpeg的架构和功能是必须清楚的.FFmpeg自带的三个工程:ffplay, ffmpeg, ffprobe.这三个工程的代码量太大,如何切入进去,一窥其中的奥秘为自己所用呢?从核心切入,编码和解码.编码和解码的核心API接口就那十几个,通过这些深入然后剖析源代码,目标就明确了. 就我个人而言,首先要了解FFm

CentOS下yum安装FFmpeg

一.yum安装FFmpeg 1.    最偷懒的方式就是yum安装了,自动解决依赖.不过CentOS系统默认无FFmpeg源,企业版 Linux 附加软件包EPEL源也不包含,需要手动添加yum源配置/etc/yum.repos.d/dag.repo:   [dag] name=Dag RPM Repository for Red Hat Enterprise Linux baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag

[原]如何在Android用FFmpeg解码图像

前一篇[原]如何用Android NDK编译FFmpeg 我们知道了如何使用NDK来编译Android平台下使用的FFmpeg动态库.这篇文章我们就可以使用Android下的JNI来调用FFMpeg进行解码了. 一.编译出来可以使用的动态库,我们会看到如下输出则表示link完成了: CC libavcodec/log2_tab.o CC libavutil/log2_tab.o CC libswresample/log2_tab.o AR libavcodec/libavcodec.a LD l

CentOS安装视频转换FFmpeg和切割工具segmenter

一.yum安装FFmpeg 1.    最偷懒的方式就是yum安装了,自动解决依赖.不过CentOS系统默认无FFmpeg源,企业版 Linux 附加软件包EPEL源也不包含,需要手动添加yum源配置/etc/yum.repos.d/dag.repo: [dag] name=Dag RPM Repository for Red Hat Enterprise Linux baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag g

FFMPEG小结(1)----下载及编译

最近准备开始研究FFMPEG,之前也有调试过FFMPEG,但都没有记录下来.论坛上也已经有很多关于ffmpeg的文章,我写这个主要是想对自己的工作做个记录. 第一步先从编译开始. 一:下载源码 git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg 二:编译环境:ubuntu 12.04 1:下载SDL用于编译ffplay(如果你不要编译player的话,可以不下载这个) wget http://libsdl.org/release/SDL-1.2

流媒体技术学习笔记之(十八)Ubuntu 16.04.3 如何编译 FFmpeg 记录

官方文档:https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu 一.最简单安装: apt-get install ffmpeg 二.安装最新版本 大体步骤 1.创建几个需要的目录 ffmpeg_sources - 源文件将被下载的地方.完成本指南后,可以根据需要删除. ffmpeg_build - 将在哪里构建文件并安装库.完成本指南后,可以根据需要删除. bin - 存放生成二进制文件(ffmpeg,ffplay,ffserver,x264,

梦溪笔谈

本书是宋代笔记.北宋沈括(一○三一--一○九五)撰.沈括字存中,钱塘人,著名的自然学家.政治家.嘉佑进士.晚年居润州,筑罗溪园,举平生见闻,撰<罗溪笔记>. 全书共三十卷.包括<笔谈>二十六卷,分故事.辩证.乐律.象数.人事.官政.权智.艺文.书画.技艺.器用.神奇.异事.谬误.讥谑.难志.乐议二七门:<补笔谈>三卷,仅有其中十一门:<续笔谈>一卷,不分门.全书共六百零九条,内容涉及天文.数学.物理.化学.生物.地质.地理.气象.医学.工程技术.文学.史事.

浅谈iOS视频播放的N种解决方案

前言 虽然我不同意你的观点 但我誓死捍卫你说话的权利!--伏尔泰 很长时间没有写文章了,这个题目其实我很早就想动笔写了,因为从我第一个完整的APP项目开始,几乎每一个APP都有视频播放的需求,但是我却迟迟不敢动笔,因为我觉得关于视频播放的底层技术实现我还是一知半解.但还是写下了这篇,希望路过的大神可以不吝赐教,也希望和我一样正在进步的人可以有所收益,少走弯路,看完这篇文章以后可以选择最适合自己的技术实现方案. 青铜时代 还记得刚学iOS的时候吗?那个时候惊讶于各种牛逼的功能只需要几句简单的代码就

又是正版!Win下ffmpeg源码调试分析二(Step into ffmpeg from Opencv for bugs in debug mode with MSVC)

最近工作忙一直没时间写,但是看看网络上这方面的资源确实少,很多都是linux的(我更爱unix,哈哈),而且很多是直接引入上一篇文章的编译结果来做的.对于使用opencv但是又老是被ffmpeg库坑害的朋友们,可能又爱又恨,毕竟用它处理和分析视频是第一选择,不仅是因为俩者配合使用方便,而且ffmpeg几乎囊括了我所知道的所有解编码器,但是正是因为这个导致了一些bug很难定位,所以有必要考虑一下如何快速定位你的ffmpeg bug. sorry,废话多了.首先给个思路: 1.使opencv 的hi