流RTSP输入和保存到文件在同一时间使用nodejs



我正在使用node-rtsp-stream模块将RTSP流式传输到nodejs的web。我用ffmpeg流RTSP源,例如RTSP源- example

我知道我可以保存一个或多个输入到许多输出,但我不知道是否有选项流输入并将其保存到文件,同时不执行两个进程的ffmpeg。
通过下面的例子,我可以流式传输RTSP源

ffmpeg -i rtsp-url -rtsp_transport tcp -f  mpeg1video -b:v 800k -r 30  

在模块上是这样的:
this.stream = child_process.spawn("ffmpeg", [ "-i", this.url, "-rtsp_transport", "tcp",'-f', 'mpeg1video', '-b:v', '800k', '-r', '30', '-'], {
      detached: false
    });
    ff =child_process.spawn("ffmpeg", [ "-i", this.url,  '-b:v', '800k', '-r', '30', '1.mp4'], {
      detached: false
    });
    this.inputStreamStarted = true;
    this.stream.stdout.on('data', function(data) {
      return self.emit('mpeg1data', data);
    });
    this.stream.stderr.on('data', function(data) {
      return self.emit('ffmpegError', data);
    });

正如您所看到的,我正在使用两个ffmpeg进程来做我想要的,但是如果有人遇到这个问题,用一个命令(进程)解决它,我想得到一些建议。如何在传输RTSP源的同时将其保存到文件。

获取关于我使用的模块的更多信息:node-rtsp-stream

试试代码:(它将读取RTSP并保存到jpg文件(每3秒覆盖一次))

var fs = require('fs');
var spawn = require('child_process').spawn;
var rtspURI = 'rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov';
var fps = 1/3;
//avconv -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov 
// -r 1/3 -an -y -update 1 test.jpg
var ffmpeg = spawn('avconv', ['-i',rtspURI,'-r',fps,'-an','-y','-update','1','test.jpg']);
// var ffmpeg = spawn('avconv',
//   ['-i','rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov',
//   '-r','1/3','-an','-y','-update','1','test.jpg']);
ffmpeg.stdout.on('data', function (data) {
  console.log('stdout: ' + data);
});
ffmpeg.stderr.on('data', function (data) {
  console.log('stderr: ' + data);
});
ffmpeg.on('close', function (code) {
  console.log('child process exited with code ' + code);
});

最新更新