【发布时间】:2016-08-16 11:54:24
【问题描述】:
我正在使用 C++ 中的系统调用从图像序列中写入 30 秒的短视频文件,树莓派中的虚拟内存正在稳步增加,并且系统调用在一定时间后也停止工作(创建 300 个视频后的应用程序)。
sprintf(cmdtorun, "avconv -framerate %d -i %s -c:v libvpx -qmin 20 -qmax 30 -an -threads 2 -c:a libvorbis -r %d %s",
this->getFPS(),imgseq,this->getFPS(),vidname);
int status;
if(status = system(cmdtorun)){
printf("system command cmdtorun failed: (%i) \n",status );
}
else printf("cmdtorun successful\n");
【问题讨论】:
-
如果循环将相同的视频写入不同的文件名会怎样?
-
当您说“虚拟内存正在稳步增加”时,您的意思是“您的进程的”,还是“整个系统的”?
-
avconv 是否启动了一个继续存在于内存中的帮助程序? (ps axf 怎么说?)
-
你确定是c++的问题吗?我不熟悉这个 avconv 工具,但不知何故感觉这是调用转换器本身的问题(除了 c++)。我建议尝试用一些动态的原型友好语言(python、lua、bash 等)做同样的事情,或者如果可能的话,甚至用手重复同样的事情,看看问题是否仍然存在。缩小问题的范围。
-
@Martin Bonner 是的过程。实际上问题是,一段时间后系统调用无法创建视频文件,我也观察到虚拟内存的使用量也从 120M 增加到 980M,所以两者之间可能存在某种关联。一切正常,但程序中的所有系统调用都停止工作,例如 rm、avconv。
标签: c++ system-calls avconv