【问题标题】:System call not working in C++ for avconv系统调用在 C++ 中无法用于 avconv
【发布时间】: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


【解决方案1】:

问题通过使用 popen 而不是系统调用来解决。

【讨论】:

    猜你喜欢
    • 2016-02-09
    • 1970-01-01
    • 2014-05-23
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 2013-06-26
    相关资源
    最近更新 更多