Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/162.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ FFmpeg未关闭输出文件_C++_Ffmpeg - Fatal编程技术网

C++ FFmpeg未关闭输出文件

C++ FFmpeg未关闭输出文件,c++,ffmpeg,C++,Ffmpeg,我正在使用FFmpeg将视频帧写入文件 到目前为止,我已经能够创建一个输出文件,从相机抓取我的帧,对帧进行编码,写入它们并关闭输出文件 一切都很好,除了我需要关闭我的程序,输出文件才能播放。关闭文件是不够的 如果不关闭程序,输出文件将显示为0KB文件 这是我的输出文件关闭代码: if (outContext) { int ret = av_write_frame(outContext, NULL); ret = av_write_trailer(outContext);

我正在使用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\u write\u trail
会刷新任何缓冲数据包

2) 还有这两条线:

av_freep(&outContext->pb->buffer);
av_freep(&outContext->pb);
是多余的,因为它们部分重复
avio_close
功能

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

av_freep(&outContext->pb);

outContext->pb
变为空,并且
avio\u close
无法正常工作。

我采纳了您的建议,因为它是多余的,我的问题得到了解决!问题是这一行:
av_freep(&outputDetails->outContext->pb)