首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

FFmpeg结构体-AVOutputFormat

FFmpeg结构体-AVOutputFormat

AVOutputFormat

AVOutpufFormat与AVInputFormat类似,是类似COM 接口的数据结构,表示输出文件容器格式,着重于功能函数,位于Avoformat.h文件中。
ffmpeg支持各种各样的输出文件格式,MP4,FLV,3GP等等。而 AVOutputFormat 结构体则保存了这些格式的信息和一些常规设置。
每一种封装对应一个 AVOutputFormat 结构,ffmpeg将AVOutputFormat 按照链表存储:


    typedef struct AVOutputFormat {
        const char *name;  //格式名列表,简短的名称,用于通过此名称来找到此muxer解封装器
        const char *long_name; //长名称,用于仔细描述此muxer解封装器
        const char *mime_type; //一个模拟类型列表,在probe时check匹配的类型
        const char *extensions; //如果定义了extensions就不会再检测格式名,通常不定义
        enum AVCodecID audio_codec;    //音频编解码器ID
        enum AVCodecID video_codec;    //视频编解码器ID
        enum AVCodecID subtitle_codec; //subtitle编解码器ID
        /**
         * 可用标志 flags: AVFMT_NOFILE,  AVFMT_NEEDNUMBER, AVFMT_GLOBALHEADER,  AVFMT_NOTIMESTAMPS,  AVFMT_VARIABLE_FPS,
         *        AVFMT_NODIMENSIONS, AVFMT_NOSTREAMS, AVFMT_ALLOW_FLUSH, AVFMT_TS_NONSTRICT,  AVFMT_TS_NEGATIVE
         */
        int flags;
        const struct AVCodecTag * const *codec_tag;
        const AVClass *priv_class; //AVClass结构
        struct AVOutputFormat *next; //链表
        int priv_data_size; //具体文件容器格式所对应的Context的大小,通俗讲就是私有结构体的大小
     
     
        //muxer开放的接口
        int (*write_header)(struct AVFormatContext *);
        int (*write_packet)(struct AVFormatContext *, AVPacket *pkt);
        int (*write_trailer)(struct AVFormatContext *);
        int (*interleave_packet)(struct AVFormatContext *, AVPacket *out,AVPacket *in, int flush);
        int (*query_codec)(enum AVCodecID id, int std_compliance);
        void (*get_output_timestamp)(struct AVFormatContext *s, int stream,
        int (*control_message)(struct AVFormatContext *s, int type, void *data, size_t data_size);
        int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index, AVFrame **frame, unsigned flags);
        int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list);
        int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);
        int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps);
        enum AVCodecID data_codec; //默认的编解码ID
        int (*init)(struct AVFormatContext *);
        void (*deinit)(struct AVFormatContext *);
        int (*check_bitstream)(struct AVFormatContext *, const AVPacket *pkt);
    } AVOutputFormat;
返回列表