【问题标题】:FFmpeg not closing output fileFFmpeg 没有关闭输出文件
【发布时间】:2016-02-01 16:50:33
【问题描述】:

我正在使用 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);
}

我是否忘记释放/关闭任何东西?

【问题讨论】:

    标签: c++ ffmpeg


    【解决方案1】:

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

    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 无法正常工作。

    【讨论】:

    • 我采纳了你的建议,因为它是多余的,我的问题得到了解决!问题是这一行:av_freep(&outputDetails->outContext->pb);
    猜你喜欢
    • 2020-10-16
    • 2017-11-10
    • 2017-08-10
    • 1970-01-01
    • 2019-05-28
    • 2013-04-12
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多