/rtsp-ffmpeg

Node.js FFMpeg wrapper for streaming RTSP into MotionJPEG

Primary LanguageJavaScriptMIT LicenseMIT

rtsp-ffmpeg

Lazy Node.js FFMpeg wrapper for streaming RTSP into MotionJPEG. It runs FFMpeg process only when someone is subscribed to its data event. Every data event contains one image Buffer object.

Installation

  1. Download FFmpeg to your local machine.

  2. Install package in your project npm install rtsp-ffmpeg

Sample

With socket.io library.

Server:

const app = require('express')(),
  server = require('http').Server(app),
  io = require('socket.io')(server),
  rtsp = require('rtsp-ffmpeg');
server.listen(6147);
var uri = 'rtsp://freja.hiof.no:1935/rtplive/definst/hessdalen03.stream',
  stream = new rtsp.FFMpeg({input: uri});
io.on('connection', function(socket) {
  var pipeStream = function(data) {
    socket.emit('data', data.toString('base64'));
  };
  stream.on('data', pipeStream);
  socket.on('disconnect', function() {
    stream.removeListener('data', pipeStream);
  });
});
app.get('/', function (req, res) {
  res.sendFile(__dirname + '/index.html');
});

Client (index.html):

NB!

this is not efficient example, but simple. For drawing images on canvas please look at this example by Seikon:

<img id="img">
<script src="/socket.io/socket.io.js"></script>
<script>
	var img = document.getElementById('img'),
		socket = io('');
	socket.on('data', function(data) {
		img.src = 'data:image/jpeg;base64,' + data;
	});
</script>

For more detailed example look at /example/server.js For the large resolution images or IP cameras example check /example/server-canvas.js

FFMpeg

  var ffmpeg = new FFMpeg({
    input: 'rtsp://localhost' // stream uri
    , rate: 10 // output framerate (optional)
    , resolution: '640x480' // output resolution in WxH format (optional)
    , quality: 3 // JPEG compression quality level (optional)
  });

If you have an error Error: spawn ffmpeg ENOENT, you should first install ffmpeg package. After that, if the starup command differs from ffmpeg, you can change it in the static property like this, for example:

FFMpeg.cmd = 'C:\\ffmpeg.exe';