San*_*jay 8 video ffmpeg node.js
我正在使用 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();
});
Run Code Online (Sandbox Code Playgroud)
我上面的代码工作得很好。它提供了我想要的输出,但我无法终止(停止)ffmpeg 命令。我正在使用下面的代码来停止该过程,但在后台它仍在继续。
child.kill("SIGTERM");
Run Code Online (Sandbox Code Playgroud)
我还使用了以下命令: child.kill('SIGUSR1'); child.kill("SIGHUP"); child.kill("SIGINT");child.kill('SIGUSR2'); 用于终止此进程,但它不起作用。
目前我强行杀死节点应用程序以停止 ffmpeg 命令并生成 mp4 文件。我不想要这个。但我想要停止 ffmpeg 进程并生成 mp4 文件的命令,而不会杀死节点应用程序。
小智 7
var cp = require('child_process');
var cmd = 'ffmpeg...'
var child = cp.exec(cmd, function(err, stdout, stderr) {})
child.stdin.write('q')
Run Code Online (Sandbox Code Playgroud)
小智 0
您正在child.kill()从child.on('exit')回调中调用,这可能是问题所在,因为回调未被触发。child.on('exit')当子进程完成时实际调用。
此外,如果您需要显式终止子进程,则意味着该命令不会自行退出。如果是这种情况,也许您想设置一个超时,child.kill()以便在运行一段时间后调用。
| 归档时间: |
|
| 查看次数: |
2738 次 |
| 最近记录: |