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



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

提前谢谢。

Sean

我遇到了这个问题,这是因为我从来没有写音频帧,所以如果只想把几个bmp编码到一个视频文件,请注意:

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

希望这也能帮助其他人。

Sean

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

av_interleaved_write_frame(AVFormatContext*,NULL);

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

最新更新