使用FFmpeg写入mp4文件时如何将缓冲区数据刷新到磁盘?

时间:2013-08-19 23:03:00

标签: c++ ffmpeg h.264 mp4 flush

我正在使用FFmpeg写一个mp4文件,我从远程IP摄像头抓取位图图像并用h.264编码,媒体容器是mp4文件,如果我只记录几分钟就没有问题生成MP4文件,问题是当我调用方法av_interleaved_write_frame(内存中的所有编码数据,从不释放它们)时,FFmpeg永远不会将缓冲区数据刷新到磁盘,只有当我调用方法avio_close(oc->pb);时,它才会将所有编码数据刷新到磁盘,我每次调用avcodec_flush_buffers后都尝试调用方法av_interleaved_write_frame,但没有效果。我是FFmpeg的新手,如果你熟悉FFmpeg,请帮助我。

提前感谢。

肖恩

2 个答案:

答案 0 :(得分:1)

我遇到了问题,这是因为我从不写音频帧,所以如果只想将几个bmps编码为视频文件,请注意:

1)不添加音频流(add_stream)。 2)不要打开音频流(open_audio)。

希望这也有助于其他人。

肖恩

答案 1 :(得分:0)

另一个建议(在我的情况下效果很好)是使用NULL AVPacket指针调用:

av_interleaved_write_frame(AVFormatContext *,NULL);

然后它刷新它在缓冲区中的任何流。