jsmpeg icon indicating copy to clipboard operation
jsmpeg copied to clipboard

SSL Support

Open luizj opened this issue 8 years ago • 1 comments

I have coded a new server with SSL support, maybe help some users.

/*

  • CONFIG */ var cfg = { host: '192.168.0.10', //server ip input_port: 8081, output_port: 8082, ssl_client: true, ssl_streamer: true, ssl_key: 'D:\mykeys\sitekey.key', ssl_cert: 'D:\mykeys\sitekey.crt', STREAM_SECRET: 'asdasd123123', RECORD_STREAM: false };

/*

  • WEBSOCKET */ var fs = require('fs'); var http = require('http'); var https = require('https'); var WebSocket = require('ws'); var ws_input = false; var ws_output = false;

// INPUT function handleInputConnection(){ var app = false; if(cfg.ssl_streamer){ app = https.createServer({ key: fs.readFileSync(cfg.ssl_key), cert: fs.readFileSync(cfg.ssl_cert) }, onRequestOutput).listen(cfg.output_port, cfg.host); }else{ app = http.createServer(onRequestOutput).listen(cfg.output_port, cfg.host); }

ws_input = new WebSocket.Server({server:app, perMessageDeflate:false}); ws_input.on('connection', function(client){ client.ip = client._socket.remoteAddress;

  client.on('close', function(reasonCode, description){
  	console.log('['+client.ip+'] disconnected.');
  });
  
  console.log('Stream ['+client.ip+'] connected.');

}); } var onRequestInput = function(request, response) { var params = request.url.substr(1).split('/');

if (params[0] !== cfg.STREAM_SECRET) { console.log( 'Failed Stream Connection: '+ request.socket.remoteAddress + ':' + request.socket.remotePort + ' - wrong secret.' ); return response.end(); }

response.connection.setTimeout(0);

request.on('data', function(data){ ws_output.broadcast(data); if (request.socket.recording) { request.socket.recording.write(data); } }); request.on('end',function(){ console.log('Stream fechado'); if (request.socket.recording) { request.socket.recording.close(); } });

// Record the stream to a local file? if (cfg.RECORD_STREAM) { var path = 'recordings/' + Date.now() + '.ts'; request.socket.recording = fs.createWriteStream(path); }

console.log('Stream connected.');

}; handleInputConnection();

// OUTPUT function handleOutputConnection(){ var app = false; if(cfg.ssl_client){ app = https.createServer({ key: fs.readFileSync(cfg.ssl_key), cert: fs.readFileSync(cfg.ssl_cert) }, onRequestOutput).listen(cfg.output_port, cfg.host); }else{ app = http.createServer(onRequestOutput).listen(cfg.output_port, cfg.host); }

ws_output = new WebSocket.Server({server:app, perMessageDeflate:false}); ws_output.on('connection', function(client){ client.ip = client._socket.remoteAddress;

  client.on('close', function(reasonCode, description){
  	console.log('['+client.ip+'] disconnected.');
  });
  
  client.on('error', function(e){
  	console.log('Error, client connection closed: '+e);
  });
  
  console.log('Client ['+client.ip+'] connected.');

});

ws_output.broadcast = function(data) { ws_output.clients.forEach(function each(client){ if(client.readyState === WebSocket.OPEN){ client.send(data); } }); }; } var onRequestOutput = function(request, response) { console.log('Client connected.'); response.end(); }; handleOutputConnection();

console.log('Listening for incomming MPEG-TS Stream'); console.log('Awaiting WebSocket connections');

luizj avatar May 22 '17 13:05 luizj

Doesn't work as this ... same ports are used input/output

cemkoker avatar Jul 23 '20 09:07 cemkoker