【问题标题】:How to flush buffer data to disk when using FFmpeg to write a mp4 file?使用 FFmpeg 写入 mp4 文件时如何将缓冲区数据刷新到磁盘?
【发布时间】:2013-08-21 21:07:46
【问题描述】:

我正在使用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,请帮助我。

提前致谢。

肖恩

【问题讨论】:

  • 还有avio_flush(ctx)IIRC...
  • 谢谢,我遇到了问题,因为我打开了音频但我从未写过任何音频帧。

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


【解决方案1】:

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

av_interleaved_write_frame(AVFormatContext*, NULL);

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

【讨论】:

    【解决方案2】:

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

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

    希望这对其他人也有帮助。

    肖恩

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-15
      • 2011-01-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多