FFmpeg没有关闭输出文件

时间:2016-02-01 16:50:33

标签: c++ ffmpeg

我正在使用FFmpeg将视频帧写入文件。

到目前为止,我能够创建一个输出文件,从相机中获取帧,对帧进行编码,写入并关闭输出文件。

一切都很好,除了我需要关闭我的程序以使输出文件可以播放。关闭文件是不够的。

如果我不关闭程序,输出文件显示为0KB文件。

这是我的输出文件关闭代码:

if (outContext)
{
    int ret = av_write_frame(outContext, NULL);
    ret = av_write_trailer(outContext);
    if (outContext->pb)
    {
        av_freep(&outContext->pb->buffer);
        av_freep(&outContext->pb);
        avio_close(outContext->pb);
    }
    avformat_free_context(outContext);
}

我忘了释放/关闭任何东西吗?

1 个答案:

答案 0 :(得分:2)

我可以列举一些可能的改进:

1)没有必要使用这行代码:

int ret = av_write_frame(outContext, NULL);

因为av_write_trailer会刷新所有缓冲的数据包。

2)这两行:

av_freep(&outContext->pb->buffer);
av_freep(&outContext->pb);

是多余的,因为它们部分重复avio_close功能。

实际上,最可能的原因是avio_close需要一个指向AVIOContext的有效指针作为参数。当您手动执行

av_freep(&outContext->pb);

outContext->pb变为空,avio_close无效。