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.
-
Download FFmpeg to your local machine.
-
Install package in your project
npm install rtsp-ffmpeg
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):
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
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';