ffmpeg 学习:主要结构体之间关系
背景
学习例程源码的时候,搞不清楚各结构体之间是什么含义。
解析
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 学习:主要结构体之间关系的更多相关文章
- FFmpeg 结构体学习(八):FFMPEG中重要结构体之间的关系
FFMPEG中结构体很多.最关键的结构体可以分成以下几类: 解协议(http,rtsp,rtmp,mms) AVIOContext,URLProtocol,URLContext主要存储视音频使用的协议 ...
- FFMPEG中最要害的结构体之间的关系
FFMPEG中最关键的结构体之间的关系 http://www.myexception.cn/program/1404591.html FFMPEG中结构体很多.最关键的结构体可以分成以下几类: a) ...
- C语言两结构体之间的成员互换
今天在写一个通讯录实现程序的时候,遇到个让我突然卡壳的问题,不知道怎么进行两个结构体之间的成员互换......结构体成员有"姓名","性别","年龄& ...
- c#类和结构体的关系
原文地址:http://www.dnbcw.com/biancheng/c/fvhc81798.html 简介:这是c#类和结构体的关系的详细页面,介绍了和c/c++,有关的知识,谢谢大家的观看!要查 ...
- python与C结构体之间二进制数据转换
python与C结构体之间数据转换 前言 在实际应用中,可能会遇到直接和C进行二进制字节流协议通信,这时要把数据解包成python数据,如果可能,最好与C定义的结构体完全对应上. python中有2种 ...
- FFMPEG中最关键的结构体之间的关系
FFMPEG中结构体很多.最关键的结构体可以分成以下几类: a) 解协议(http,rtsp,rtmp,mms) AVIOContext,URLProtocol,URLContext主要 ...
- C语言学习之结构体
前言 一直以来,C语言的学习都在入门阶段,只用到数组.函数.循环.选择.位运算这些基本的知识,较少用到指针.预处理.结构体.枚举类型.文件操作等这些C语言的精髓内容,现在想想真不敢说自己熟练掌握C语言 ...
- libevent源码学习_event结构体
在libevent中最重要的结构体莫过于event和event_base了,下面对于这2个结构体进行分析. 1.结构体event,位于:event.h struct event { /* * 双向链表 ...
- c语言学习笔记 - 结构体位域
在学习结构体的时候遇到了位域这个概念,位域主要是为了节省内存空间,比如用一个32位,4个字节的int存储一个开关变量时,会造成空间浪费,于是干脆就考虑在这个32划分不同的区域来存储数据,例如划出1位存 ...
- C语言学习1——结构体剖析
一、定义结构体变量的方法 1.1先声明结构体类型在定义变量名 例如: a.声明结构体类型 struct student { int num; char name[20]; char sex; int ...
随机推荐
- 用Vue仿了一个类似抖音的App
大家好,我是 Java陈序员. 今天,给大家介绍一个基于 Vue3 实现的高仿抖音开源项目. 关注微信公众号:[Java陈序员],获取开源项目分享.AI副业分享.超200本经典计算机电子书籍等. 项目 ...
- VSCode+VUE+ESLint以达到保存自动格式化
首先打开VSCode在.eslintrc.js中加入以下代码(不知道怎么找可以ctrl+shift+p进行搜索),添加 vscode 终端启动服务 // 添加⾃定义规则 'prettier/prett ...
- 【GUI界面软件】快手评论区采集:自动采集10000多条,含二级评论、展开评论!
目录 一.背景说明 1.1 效果演示 1.2 演示视频 1.3 软件说明 二.代码讲解 2.1 爬虫采集模块 2.2 软件界面模块 2.3 日志模块 三.获取源码及软件 一.背景说明 1.1 效果演示 ...
- jfarme
import java.awt.Color;import java.awt.Container; import javax.swing.JFrame;import javax.swing.JLabel ...
- 如何在Docker容器中使用systemctl启动服务
解决方案:使用--privileged参数初始化容器 docker run -d -p 80:80 -it --privileged centos:centos8 /usr/sbin/init doc ...
- ajax递归发送请求
简介 大家都知道浏览器在处理http网络请求的时候,不同的浏览器会有不一样的并发限制,下表是一些主流浏览器对 HTTP 1.1 和 HTTP 1.0 的最大并发连接数目: Browser HTTP/1 ...
- String.split()遇到空字符串不解析的情况
1.split的api说明 stringObj.split([separator,[limit]]) stringObj:要被分解的 String separator:字符串或正则表达式对象 limi ...
- SqlServer 死锁查询
use master go create procedure sp_who_lock as begin declare @spid int,@bl int, @intTransactionCountO ...
- yapi 自动化安装遇到的问题
yapi版本: 1.10.2 yapi server 启动之后 填写好配置,点击开始部署,发现控制台打印如下日志 (node:19879) Warning: Accessing non-existen ...
- Abp vNext框架 基础知识 依赖注入
依赖注入 ABP的依赖注入系统是基于Microsoft的依赖注入扩展库(Microsoft.Extensions.DependencyInjection nuget包)开发的.因此,它的文档在ABP中 ...