zoukankan      html  css  js  c++  java
  • 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实战代码分析了。

  • 相关阅读:
    从V$SQL_PLAN中FORMAT执行计划
    使用 vmstat 监测系统性能
    aix 计算性内存和文件内存
    AIX 配置vncserver
    批量杀进程——xargs用途
    Aix命令大全
    linux查看文件个数命令
    查看Unix系统是32位还是64位
    UTF-8与UTF-8 BOM
    jdk1.9之前版本及jdk9安装配置环境变量
  • 原文地址:https://www.cnblogs.com/stnlcd/p/7149905.html
Copyright © 2011-2022 走看看