FFmpeg 不关闭输出文件

FFmpeg not closing output file

本文关键字:输出 文件 FFmpeg      更新时间:2023-10-16

我正在使用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)没有必要使用这行代码:

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变为 null,avio_close无法正常工作。