我有一个Node应用程序,通过child_process启动多个ffmpeg实例,每个ffmpeg转码来自摄像机的实时流。
问题是,经过5~10分钟的ffmpeg进程只是停止做转码,进程仍然活着,因为我可以看到它在任务管理器上,但它只是停止做转码。
现在,如果我将ffmpeg的输出发送到Node.js控制台日志,这实际上使转码保持活跃。
你知道是什么原因导致的吗?
看起来标准输出或标准错误缓冲区正在被填满,代码块直到它们被读取。解决方案是将它们重定向到父对象,将它们写入文件,将它们管道到其他地方,或者忽略它们(将它们管道到/dev/null
)。
如果不需要输出,最简单的方法是生成:
spawn('prg', [], { stdio: 'ignore' });
这在spawn文档中有记录