zoukankan      html  css  js  c++  java
  • FFmpeg: AVFormatContext 结构体分析

    AVFormatContext 结构体分析
    这个结构体描述了一个媒体文件或媒体流的构成和基本信息。这是FFMpeg中最为基本的一个结构,是其他所有结构的根,是一个多媒体文件或流的根本抽象。

    AVFormatContext 是一个结构体

      //用于日志记录和 avoptions类的引用。由avformat_alloc_context () 赋值。导出(de)muxer私有选项(如果存在的话)。

      const AVClass *av_class;

      //输入容器的格式,只有在解封装的时候,由avformat_open_input() 函数赋值

      ff_const59 struct AVInputFormat *iformat;

      //输入容器的格式,只有在加封装的时候,必须由调用者在avformat_write_header()之前设置。

      ff_const59 struct AVOutputFormat *oformat;

      //AVFormatContext.streams中的元素数量。由avformat_new_stream()设置,不能被任何其他代码修改。

      unsigned int nb_streams;

      //文件中所有流的列表。使用avformat_new_stream()创建新流。

      //解封装:流是由avformat_open_input()中的libavformat创建的。如果在ctx_flags中设置了AVFMTCTX_NOHEADER,那么新的流也可能出现在av_read_frame()中。

      //加封装:流是由用户在avformat_write_header()之前创建的。

      AVStream **streams;

      //输入或输出的文件名

      //解封装:由函数avformat_open_input()赋值

      //封装:由用户在avformat_write_header()之前创建的。

      //@deprecated 已使用url代替

      char filename[1024];

      //输入或输出的url,不像旧版的filename字段,它没有长度限制。

      //解封装:由avformat_open_input函数赋值,如果url参数为空的情况下,赋值一个空字符串。

      //加封装:可以由调用者在调用avformat_write_header()(或avformat_init_output()(如果先调用它)到av_free()可释放的字符串之前进行设置。如果avformat_init_output()中的字符串为空,则将其设置为空字符串。

      //由libavformat 模块中的avformat_free_context()函数释放

      char *url;

      

      //第一个数据帧的开始时间,单位为AV_TIME_BASE,不要直接设置该值,它是由AVSTREAM值推导出来。

      //只在解封装的时候有意义,由libavformat模块赋值

      int64_t start_time;

      //数据流的时长,单位为AV_TIME_BASE,只有在您不知道单个流持续时间的情况下才设置此值,否则不要设置该值。这是从AVStream值推导出来的,如果没有设置。

      //只在解封装的时候有意义,由libavformat模块赋值

      int64_t duration;

      //总流比特率,以比特/秒为单位,如果不可用,则为0。如果file_size和持续时间是FFmpeg可以自动计算的,就不要直接设置它。

      int64_t bit_rate;

      unsigned int packet_size;

      int max_delay;

      //强制视频编解码器id,解封装的时候由用户设置

      enum AVCodecID video_codec_id;

      AVCodec *video_codec;

      //强制音频编解码id,解封装的时候由用户设置

      enum AVCodecID audio_codec_id;

      AVCodec *audio_codec;

      //强制字幕编解码id,解封装的时候由用户设置

      enum AVCodecID subtitle_codec_id;

      AVCodec *subtitle_codec;

      //应用于整个文件的元数据

      //解封装的时候,由libavformat模块的avformat_open_input函数赋值

      //加封装的时候,需在用户调用avformat_write_header()函数前赋值

      //由libavformat模块在avformat_free_context()中释放

       AVDictionary *metadata;

    参考链接:

    1.FFMPEG-数据结构解释(AVCodecContext,AVStream,AVFormatContext)

    2.FFmpeg编程初步

    3. AVFormatContext分析

  • 相关阅读:
    改变windows下installer文件夹位置,目录链接(不是快捷方式)
    SQL2008根据日志恢复
    HTML5实践
    人类的本能——自私与善
    打油诗 看《大上海》
    POSA2:Wrapper Facade模式
    解析XML文件
    MediaWiki编辑工具
    每周一荐:设计模式
    每周一荐:分布式计算的模式语言
  • 原文地址:https://www.cnblogs.com/yongdaimi/p/10649251.html
Copyright © 2011-2022 走看看