FFmpeg Stream RTSP输入并使用nodejs同时保存到文件

时间:2015-05-31 15:24:58

标签: node.js ffmpeg rtsp

我正在使用node-rtsp-stream模块将RTSP流式传输到带有nodejs的web。 我正在使用ffmpeg传输RTSP源代码,例如RTSP SOURCE - 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

1 个答案:

答案 0 :(得分:0)

尝试代码:(它将读取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);
});