背景

学习例程源码的时候,搞不清楚各结构体之间是什么含义。

解析

FFmpeg 有多个重要的结构体,解协议,解分装,解码,解封装。

解协议:

http,rstp,rtmp,mms。

AVIOContext,URLProtocol,URLContext主要存储视频音频试用的协议类型及状态,URLProtocol存储输入视频音频的封装格式。每种协议都对应一个URLProtocol结构

解封装:

flv,avi,rmvb,mp4

AVFormatContext 主要存储视频音频封装格式中包含的信息;

AVInputFormat存储视频音频试用的封装格式。

每种视频音频封装格式都对应一个AVInputFormat结构。

解码:

h264,mpeg2,aac,mp3,avs(真的超级多一页都显示不完,包含摄像头,监控,电视等等几乎能有视频音频的地方都有解码器)

视频音频都有视频流会音频流。

每个AVStream存储一个视频音频流的相关数据。

每个AVStream对应一个AVCodecContext,存储该视频音频的解码方式相关数据。

每个AVCodecContext中对应一个AVCodec,包含该视频音频对应的解码器,每种解码器对应一个AVCodec结构。

存数据:

视频每个结构都是存一帧(一张图)。音频可能好几帧。

解码前的数据:AVPacket;

解码后的数据:AVFormat;

关系是这样:(引用雷神的原图)

解协议(http,rtsp,rtmp,mms)→解封装(flv,avi,rmvb,mp4)→解码 h264,mpeg2,aac,mp3)→存数据

ffmpeg 学习:主要结构体之间关系的更多相关文章

  1. FFmpeg 结构体学习(八):FFMPEG中重要结构体之间的关系

    FFMPEG中结构体很多.最关键的结构体可以分成以下几类: 解协议(http,rtsp,rtmp,mms) AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议 ...

  2. FFMPEG中最要害的结构体之间的关系

    FFMPEG中最关键的结构体之间的关系 http://www.myexception.cn/program/1404591.html FFMPEG中结构体很多.最关键的结构体可以分成以下几类: a)  ...

  3. C语言两结构体之间的成员互换

    今天在写一个通讯录实现程序的时候,遇到个让我突然卡壳的问题,不知道怎么进行两个结构体之间的成员互换......结构体成员有"姓名","性别","年龄& ...

  4. c#类和结构体的关系

    原文地址:http://www.dnbcw.com/biancheng/c/fvhc81798.html 简介:这是c#类和结构体的关系的详细页面,介绍了和c/c++,有关的知识,谢谢大家的观看!要查 ...

  5. python与C结构体之间二进制数据转换

    python与C结构体之间数据转换 前言 在实际应用中,可能会遇到直接和C进行二进制字节流协议通信,这时要把数据解包成python数据,如果可能,最好与C定义的结构体完全对应上. python中有2种 ...

  6. FFMPEG中最关键的结构体之间的关系

    FFMPEG中结构体很多.最关键的结构体可以分成以下几类: a)        解协议(http,rtsp,rtmp,mms) AVIOContext,URLProtocol,URLContext主要 ...

  7. C语言学习之结构体

    前言 一直以来,C语言的学习都在入门阶段,只用到数组.函数.循环.选择.位运算这些基本的知识,较少用到指针.预处理.结构体.枚举类型.文件操作等这些C语言的精髓内容,现在想想真不敢说自己熟练掌握C语言 ...

  8. libevent源码学习_event结构体

    在libevent中最重要的结构体莫过于event和event_base了,下面对于这2个结构体进行分析. 1.结构体event,位于:event.h struct event { /* * 双向链表 ...

  9. c语言学习笔记 - 结构体位域

    在学习结构体的时候遇到了位域这个概念,位域主要是为了节省内存空间,比如用一个32位,4个字节的int存储一个开关变量时,会造成空间浪费,于是干脆就考虑在这个32划分不同的区域来存储数据,例如划出1位存 ...

  10. C语言学习1——结构体剖析

    一、定义结构体变量的方法 1.1先声明结构体类型在定义变量名 例如: a.声明结构体类型 struct student { int num; char name[20]; char sex; int ...

随机推荐

  1. 04 elasticsearch学习笔记-Rest风格说明

    目录 Rest风格说明 关于文档的基本操作 添加数据PUT 查询 修改文档 删除索引或者文档 Rest风格说明 Rest风格说明 method url地址 描述 PUT localhost:9200/ ...

  2. C++基础知识复习

    第一部分:基础知识 一.const 1. 作用 修饰变量,表示不可能更改 修饰指针 const int *ptr--pointer to const int const *ptr-- const po ...

  3. WordPress函数小结

    1.body_class()函数 为了区分不同的页面,可以用WordPress的body_class()函数 可以在head.php中给body添加:<body <?php body_cl ...

  4. C语言:如何打印星星

    //打印星星                  //k是两个上下部分都一样的空格      /*i        j               k                    k      ...

  5. Netflow/IPFIX 流量收集与分析

    目录 文章目录 目录 Netflow(网络数据流检测协议) IPFIX(网络流量监测) IPFIX 组网架构 IPFIX 应用场景 Usage-based Accounting(基于使用流量的计费) ...

  6. Linux 系统用户登录时很慢怎么办

    第一步:编辑 /etc/ssh/sshd_config 文件 vim /etc/ssh/sshd_config 第二步:搜索 DNS 第三步: 将UseDNS前面的#注释删掉,同时将UseDNS后面的 ...

  7. go语言开发的内网穿透工具,frp.

    转载自:https://www.appinn.com/frp/ 什么是 Frp? 内网穿透工具有很多,其中 Frp (Fast Reverse Proxy) 是比较流行的一款.FRP 是一个免费开源的 ...

  8. linux获取docker容器中的文件路径怎么表示

    在Linux系统中,Docker容器中的文件路径与宿主机上的文件系统是隔离的,因此我们不能直接使用宿主机的文件系统路径来访问容器内的文件.但是,有几种方法可以让我们获取或操作Docker容器中的文件. ...

  9. #define、const和enum

    enum:枚举类型(枚举变量的值只能等于枚举中定义的常量) #define:明示常量(定义真正的常量) const:限定符(名不符实,应该叫read only),限定一个变量为只读 C语言常量: 1. ...

  10. LeetCode 40. Combination Sum II 组合总和 II (C++/Java)

    题目: Given a collection of candidate numbers (candidates) and a target number (target), find all uniq ...