ffmpeg-结构体汇总

常用结构体汇总

FFmpeg里面最常用的数据结构,按功能可大致分为以下几类(以下代码行数,以branch: origin/release/3.4为准):

  • 封装格式

    • AVFormatContext - 描述了媒体文件的构成及基本信息,是统领全局的基本结构体,贯穿程序始终,很多函数都要用它作为参数;
    • AVInputFormat - 解复用器对象,每种作为输入的封装格式(例如FLV、MP4、TS等)对应一个该结构体,如libavformat/flvdec.c的ff_flv_demuxer;
    • AVOutputFormat - 复用器对象,每种作为输出的封装格式(例如FLV, MP4、TS等)对应一个该结构体,如libavformat/flvenc.c的ff_flv_muxer;
    • AVStream - 用于描述一个视频/音频流的相关数据信息。
  • 编解码

    • AVCodecContext - 描述编解码器上下文的数据结构,包含了众多编解码器需要的参数信息;
    • AVCodec - 编解码器对象,每种编解码格式(例如H.264、AAC等)对应一个该结构 体,如libavcodec/aacdec.c的ff_aac_decoder。每个AVCodecContext中含有一个AVCodec
    • AVCodecParameters - 编解码参数,每个AVStream中都含有一个AVCodecParameters,用来存放当前流的编解码参数
  • 网络协议

    • AVIOContext - 管理输入输出数据的结构体;
    • URLProtocol - 描述了音视频数据传输所使用的协议,每种传输协议(例如HTTP、RTMP)等,都会对应一个URLProtocol结构,如libavformat/http.c中的ff_http_protocol
    • URLContext - 封装了协议对象及协议操作对象。
  • 数据存放

    • AVPacket - 存放编码后、解码前的压缩数据,即ES数据;
    • AVFrame - 存放编码前、解码后的原始数据,如YUV格式的视频数据或PCM格式的音频数据等;
      上述结构体的关系图如下所示(箭头表示派生出):