我正在使用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,请帮助我。
提前感谢。
肖恩
答案 0 :(得分:1)
我遇到了问题,这是因为我从不写音频帧,所以如果只想将几个bmps编码为视频文件,请注意:
1)不添加音频流(add_stream)。 2)不要打开音频流(open_audio)。
希望这也有助于其他人。
肖恩
答案 1 :(得分:0)
另一个建议(在我的情况下效果很好)是使用NULL AVPacket指针调用:
av_interleaved_write_frame(AVFormatContext *,NULL);
然后它刷新它在缓冲区中的任何流。