FFmpeg 不关闭输出文件
FFmpeg not closing output file
我正在使用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
无法正常工作。
相关文章:
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- VI工作室代码错误无法打开输出文件主.exe
- 在代码块中查找输出文件
- 将未签名的字符写入输出文件
- 为什么我的代码不写入输出文件?
- 完成搜索任务时为空输出文件
- 如何将地图<列表<string>、矢量<string>>输出到输出文件?
- 无法在代码块 IDE 中打开输出文件.exe
- C++:更改 IF 语句中的输出文件
- 编译 gsoap 输出文件 (onvif) 时出现问题
- C++击球平均值程序使用输入/输出文件打印名称,平均值,最高/最低平均值时遇到麻烦
- while 循环中的流输出文件() 通常生成空文件
- 如何使用 Docker 访问输出文件
- 提升进程间共享内存删除、权限和输出文件
- 查找素数,然后将质数放入输出文件中
- GDB / C++ - 根据循环条件将多个变量记录到输出文件中
- 带有文件结束函数的 while 循环重复输出文件中的最后一个数字两次
- 我的输出文件未显示解决方案
- 输入文件中的第一个字符是输出文件中的最后一个字符,反之亦然
- C++,我正在尝试创建一个有效的.bmp输出文件