ffmpeg——AVOutputFormat 输出文件格式
来源:互联网 发布:中学生学编程用什么书 编辑:程序博客网 时间:2024/05/14 14:26
一:介绍
ffmpeg支持各种各样的输出文件格式,MP4,FLV,3GP等等。而 AVOutputFormat 结构体则保存了这些格式的信息和一些常规设置。
官方参考: http://ffmpeg.org/doxygen/3.1/structAVOutputFormat.html
typedef struct AVOutputFormat { const char *name; /** * Descriptive name for the format, meant to be more human-readable * than name. You should use the NULL_IF_CONFIG_SMALL() macro * to define it. */ const char *long_name; const char *mime_type; const char *extensions; /**< comma-separated filename extensions */ /* output support */ enum AVCodecID audio_codec; /**< default audio codec */ enum AVCodecID video_codec; /**< default video codec */ enum AVCodecID subtitle_codec; /**< default subtitle codec */ /** * can use 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; /** * List of supported codec_id-codec_tag pairs, ordered by "better * choice first". The arrays are all terminated by AV_CODEC_ID_NONE. */ const struct AVCodecTag * const *codec_tag; const AVClass *priv_class; ///< AVClass for the private context /***************************************************************** * No fields below this line are part of the public API. They * may not be used outside of libavformat and can be changed and * removed at will. * New public fields should be added right above. ***************************************************************** */ struct AVOutputFormat *next; /** * size of private data so that it can be allocated in the wrapper */ int priv_data_size; int (*write_header)(struct AVFormatContext *); /** * Write a packet. If AVFMT_ALLOW_FLUSH is set in flags, * pkt can be NULL in order to flush data buffered in the muxer. * When flushing, return 0 if there still is more data to flush, * or 1 if everything was flushed and there is no more buffered * data. */ int (*write_packet)(struct AVFormatContext *, AVPacket *pkt); int (*write_trailer)(struct AVFormatContext *); /** * Currently only used to set pixel format if not YUV420P. */ int (*interleave_packet)(struct AVFormatContext *, AVPacket *out, AVPacket *in, int flush); /** * Test if the given codec can be stored in this container. * * @return 1 if the codec is supported, 0 if it is not. * A negative number if unknown. * MKTAG('A', 'P', 'I', 'C') if the codec is only supported as AV_DISPOSITION_ATTACHED_PIC */ int (*query_codec)(enum AVCodecID id, int std_compliance); void (*get_output_timestamp)(struct AVFormatContext *s, int stream, int64_t *dts, int64_t *wall); /** * Allows sending messages from application to device. */ int (*control_message)(struct AVFormatContext *s, int type, void *data, size_t data_size); /** * Write an uncoded AVFrame. * * See av_write_uncoded_frame() for details. * * The library will free *frame afterwards, but the muxer can prevent it * by setting the pointer to NULL. */ int (*write_uncoded_frame)(struct AVFormatContext *, int stream_index, AVFrame **frame, unsigned flags); /** * Returns device list with it properties. * @see avdevice_list_devices() for more details. */ int (*get_device_list)(struct AVFormatContext *s, struct AVDeviceInfoList *device_list); /** * Initialize device capabilities submodule. * @see avdevice_capabilities_create() for more details. */ int (*create_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); /** * Free device capabilities submodule. * @see avdevice_capabilities_free() for more details. */ int (*free_device_capabilities)(struct AVFormatContext *s, struct AVDeviceCapabilitiesQuery *caps); enum AVCodecID data_codec; /**< default data codec */ /** * Initialize format. May allocate data here, and set any AVFormatContext or * AVStream parameters that need to be set before packets are sent. * This method must not write output. * * Any allocations made here must be freed in deinit(). */ int (*init)(struct AVFormatContext *); /** * Deinitialize format. If present, this is called whenever the muxer is being * destroyed, regardless of whether or not the header has been written. * * If a trailer is being written, this is called after write_trailer(). * * This is called if init() fails as well. */ void (*deinit)(struct AVFormatContext *); /** * Set up any necessary bitstream filtering and extract any extra data needed * for the global header. * Return 0 if more packets from this stream must be checked; 1 if not. */ int (*check_bitstream)(struct AVFormatContext *, const AVPacket *pkt);} AVOutputFormat;AVOutputFormat 结构主要包含的信息有:封装名称描述,编码格式信息(video/audio 默认编码格式,支持的编码格式列表),一些对封装的操作函数(write_header,write_packet,write_tailer等)。其中,AVOutputFormat没有实现AVClass接口,但它保存了一个AVClass接口,具体怎样被使用则由后续决定。例如:MOV类的AVOutputFormat封装保存的是 针对 MOVMuxContext 结构的 AVClass 接口实现。
每一种封装对应一个 AVOutputFormat 结构,ffmpeg将AVOutputFormat 按照链表存储:
0 0
- ffmpeg——AVOutputFormat 输出文件格式
- FFMPEG结构体之AVOutputFormat
- FFMpeg分析2:AVInputFormat和AVOutputFormat
- FFMpeg分析2:AVInputFormat和AVOutputFormat
- FFMpeg分析2:AVInputFormat和AVOutputFormat
- ffmpeg解析-----解析文件格式
- Ffmpeg中的文件格式
- ffmpeg入门学习——文档2:输出到屏幕
- Servlet 准确的输出文件格式
- ffmpeg+sdl教程——编写一个简单的播放器2(输出视频到屏幕)
- FFMPEG 日志输出控制
- ffmpeg转码多路输出(二)
- live555 关于使用ffmpeg扩展文件格式
- live555 关于使用ffmpeg扩展文件格式
- live555 关于使用ffmpeg扩展文件格式
- live555 关于使用ffmpeg扩展文件格式
- live555 关于使用ffmpeg扩展文件格式
- live555使用ffmpeg扩展(mp4)文件格式
- 搭建DUBBO服务框架需要的软件打包下载
- HTML5的<details>和<summary>
- Gitlab使用说明
- jquery即点即改
- 趣味科普长图,论《人类通讯发展史》
- ffmpeg——AVOutputFormat 输出文件格式
- Java 连接数据库及字符编码
- 子父页面的iframe方法调用
- 第29课:使用重置按钮,重置表单信息
- ios CoreMotion 的用法,获取手机加速度与偏转角度
- 如何快速开发可演示的微信小应用(应用号)
- mysql 错误 SQL Error: 1366解决方法 ----- 百度经验
- 记录一次简单的STM32串口通信使用printf发送数据到屏幕,并测试SHA512算法。
- Python 中的闭包总结