relay.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Use the websocket-relay to serve a raw MPEG-TS over WebSockets. You can use
  2. // ffmpeg to feed the relay. ffmpeg -> websocket-relay -> browser
  3. // Example:
  4. // node relay 8081 8082
  5. // ffmpeg -i <some input> -f mpegts http://localhost:8081/streamName
  6. var http = require('http'),
  7. WebSocket = require('ws');
  8. var STREAM_PORT = process.argv[2] || 8081,
  9. WEBSOCKET_PORT = process.argv[3] || 8082;
  10. // Websocket Server
  11. var socketServer = new WebSocket.Server({ port: WEBSOCKET_PORT, perMessageDeflate: false });
  12. socketServer.on('connection', function (socket, request) {
  13. var streamName = request.url.substr(1).split('/')[0];
  14. socket.stream = streamName;
  15. console.log(
  16. 'New WebSocket connection for: ',
  17. streamName
  18. );
  19. });
  20. socketServer.broadcast = function(data, streamName) {
  21. socketServer.clients.forEach(function each(client) {
  22. if (client.readyState === WebSocket.OPEN && client.stream === streamName) {
  23. client.send(data);
  24. }
  25. });
  26. };
  27. // HTTP Server to accept incoming MPEG-TS Stream from ffmpeg
  28. var streamServer = http.createServer( function(request, response) {
  29. var streamName = request.url.substr(1).split('/')[0];
  30. response.connection.setTimeout(0);
  31. console.log(
  32. 'Stream Connected: ',
  33. streamName
  34. );
  35. request.on('data', function(data){
  36. socketServer.broadcast(data, streamName);
  37. });
  38. })
  39. // Keep the socket open for streaming
  40. streamServer.headersTimeout = 0;
  41. streamServer.listen(STREAM_PORT);
  42. console.log('Listening for incoming MPEG-TS Stream on http://127.0.0.1:'+STREAM_PORT+'/<streamName>');
  43. console.log('Awaiting WebSocket connections on ws://127.0.0.1:'+WEBSOCKET_PORT+'/');