我正在使用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);
然后它刷新缓冲区中的任何流。