【问题标题】:Node fluent-ffmpeg killing process kills server - How to start and stop recorder?Node fluent-ffmpeg 杀死进程杀死服务器 - 如何启动和停止记录器?
【发布时间】:2019-08-06 12:34:07
【问题描述】:

我在节点应用程序中使用 fluent-ffmpeg。从屏幕/相机录制到 mp4 文件。想要一个服务器请求开始,另一个请求停止记录(链接到一个网络界面 - 测试一些技术,以便以后用它制作一个电子应用程序)。

启动很好,但不知道如何停止。

这是要启动(在 MacOS 上运行)的代码

recordingProcessVideo = ffmpeg(`${screenID}:none`)
     .inputFormat('avfoundation')
     .native()
     .videoFilters(`crop=${width}:${height}:${x}:${y}`)
     .save(filePath);

这就是我认为会阻止它围绕该主题进行文档和阅读的方法:

recordingProcessVideo.kill('SIGINT');

但是,当我调用此命令时,服务器退出并显示以下模棱两可的消息:​​

code ELIFECYCLE
errno 1

此外,生成的视频文件不会像在完成之前退出一样打开。从文档和人们所写的内容来看,似乎无法解决问题,启动和停止记录器应该是制作过程,然后在准备好时将其杀死。任何人都知道正确的方法 - 一直在寻找年龄但找不到任何答案。

使用 Node v10.15.2 和 Ffmpeg 版本 V92718-g092cb17983 在 MacOS 10.14.3 上运行。

感谢您的帮助。

【问题讨论】:

  • 你为什么专门使用'SIGINT'信号?没有它的行为是否相同(默认为“SIGKILL”)?
  • @TGrif 是的,它必须是“SIGINT”。 'SIGKILL' - 根据文档 - 将终止进程。 'SIGINT' 将告诉进程优雅地停止并完成其任务。应该与在终端中按 CTRL-C 相同,这会发出“SIGINT”。将q 传递给终端的旧技术已被弃用,应改用SIGINT。您也可以传递其他信号,这将暂停任务并恢复它,而不是杀死它。
  • 很高兴知道。当我想杀死一个进程时,我总是尝试“不那么优雅的时尚”......感谢.on(event)的提醒。

标签: node.js macos express ffmpeg screen-recording


【解决方案1】:

我已经通过追踪 FFMpeg 在终端中发出的所有消息解决了这个问题。由于某些未知原因,我安装的 FFMpeg 在完成视频时会引发错误,并且无法正确关闭文件。这也发生在终端中,尽管错误并没有真正显示出来,并最终得到一个在所有视频播放器(甚至是浏览器)中实际工作的 MP4,除了 Quicktime,这是我在此使用的场合。为了防止错误导致我的 Node 应用程序崩溃,我只需要在视频通话中添加一个错误处理程序。事实上,我在原始代码中添加了处理程序,但我将它添加到进程中,而不是对 FFMPeg 的原始调用。所以工作的代码看起来像这样(我在这个例子中捕获了所有的结束事件并记录它们)。

recordingProcessVideo = ffmpeg(`${screenID}:none`)
 .inputFormat('avfoundation')
 .videoFilters(`crop=${width}:${height}:${x}:${y}`)
 .native()
 .on('error', error => console.log(`Encoding Error: ${error.message}`))
 .on('exit', () => console.log('Video recorder exited'))
 .on('close',  () => console.log('Video recorder closed'))
 .on('end', () => console.log('Video Transcoding succeeded !'))
 .save(file.video);

我的笔记本电脑上有两个版本的 FFMpeg,但都失败了。安装在我的电脑上的官方下载版本(V4.1.1)和我的应用程序使用的 Node 打包版本,这将使通过 Electron 分发更容易,因为它不会依赖在运行应用程序的本地机器上安装 FFMpeg( @ffmpeg 安装程序/ffmpeg)。所以视频无法导出的原因是我的笔记本电脑的一些神奇原因,我必须弄清楚,但重要的是,我的代码现在可以工作并且现在可以适应这种失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多