【问题标题】:How to Kill ffmpeg process in node.js如何在 node.js 中杀死 ffmpeg 进程
【发布时间】:2015-04-18 05:45:27
【问题描述】:

我正在使用 node.js 代码,使用 FFMPEG 将 Axis Ipcamera 直播流转换为 mp4

 var childProcess=require('child_process');
 var childArguments = [];
var child=[];
var cmd='ffmpeg -i rtsp://172.24.22.117:554/axis-media/media.amp -vcodec libx264 -pix_fmt yuv420p -profile:v baseline -preset slower -crf 18 -vf "scale=trunc(in_w/2)*2:trunc(in_h/2)*2"'+' '+__dirname+'/uploads/ouput.mp4';

  child=childProcess.exec(       
        cmd,
        childArguments,
        {            
            env: process.env,
            silent:true
        },  function (err, stdout, stderr) {
            if (err) {
                throw err;
            }
            console.log(stdout);

        });     

        //    here generate events for listen child process (works properly)
    // Listen for incoming(stdout) data
    child.stdout.on('data', function (data) {
        console.log("Got data from child: " + data);
    });

    // Listen for any errors:
    child.stderr.on('data', function (data) {
        console.log('There was an error: ' + data);
    });

    // Listen for exit event
    child.on('exit', function(code) {
        console.log('Child process exited with exit code ' + code);
        child.stdout.pause();
        child.kill();
    });

我上面的代码完美运行。它提供了我想要的输出,但我无法杀死(停止)ffmpeg 命令。我正在使用下面的代码来停止进程,但在后台它仍然会继续。

child.kill("SIGTERM"); 

我还使用了以下命令:child.kill('SIGUSR1'); child.kill("SIGHUP"); child.kill("SIGINT");child.kill('SIGUSR2');杀死这个进程,但它不起作用。

目前我强制终止节点应用程序以停止 ffmpeg 命令并生成 mp4 文件。我不想要这个。 但我想要停止 ffmpeg 进程并生成 mp4 文件的命令,而不会杀死节点应用程序。

【问题讨论】:

    标签: node.js video ffmpeg


    【解决方案1】:
    var cp = require('child_process');
    var cmd = 'ffmpeg...'
    var child = cp.exec(cmd, function(err, stdout, stderr) {})
    child.stdin.write('q')
    

    【讨论】:

      【解决方案2】:

      您正在从 child.on('exit') 回调中调用 child.kill(),这可能是问题所在,因为未触发该回调。 child.on('exit') 实际上是在子进程完成时调用的。

      此外,如果您需要明确地终止子进程,则意味着该命令不会自行退出。如果是这种情况,您可能想设置一个超时时间,以便在运行一段时间后调用child.kill()

      【讨论】:

        猜你喜欢
        • 2016-10-28
        • 1970-01-01
        • 2017-07-28
        • 1970-01-01
        • 1970-01-01
        • 2012-07-01
        • 1970-01-01
        • 1970-01-01
        • 2020-03-20
        相关资源
        最近更新 更多