本文介绍如何使用 FFmpeg 的 API 函数 avio_open2 打开一个输出文件,然后用 av_interleaved_write_frame 来把编码器输出的 AVPacket 保存进去文件。 本文的代码下载地址:百度网盘,提取码:hpdo
与 输出 相关的 API 函数如下: 1,avformat_alloc_output_context2,申请一个输出文件上下文,这个函数会生成 AVFormatContext 2,avformat_new_stream,往容器增加一个输出流,可以是音频流,或者视频流,或者一些其他的数据流。 3,avcodec_parameters_from_context,把 AVCodecContext 里面的 编解码参数 复制到输出流的 AVCodecParameters 。 4,avio_open2,正式打开输出文件。 5,avformat_write_header,往输出文件写入头信息。 6,av_interleaved_write_frame,把 AVPacket 写入输出文件。
要特别注意 avformat_write_header 这个函数,必须是容器里面的所有流都初始化完成了,才能调 avformat_write_header。 本文的代码只有一个视频流,所以比较简单,但是如果同时有音频流跟视频流,那就必须等音频也解码出 AVFrame,音频流初始化完成才能 执行 avformat_write_header。 输出流的初始化主要通