gpt4 book ai didi

c++ - FFmpeg 不关闭输出文件

转载 作者:行者123 更新时间:2023-11-30 03:44:55 24 4
gpt4 key购买 nike

我正在使用 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 无法正常工作。

关于c++ - FFmpeg 不关闭输出文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35135881/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com