123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- // Use the websocket-relay to serve a raw MPEG-TS over WebSockets. You can use
- // ffmpeg to feed the relay. ffmpeg -> websocket-relay -> browser
- // Example:
- // node relay 8081 8082
- // ffmpeg -i <some input> -f mpegts http://localhost:8081/streamName
- var http = require('http'),
- WebSocket = require('ws');
- var STREAM_PORT = process.argv[2] || 8081,
- WEBSOCKET_PORT = process.argv[3] || 8082;
- // Websocket Server
- var socketServer = new WebSocket.Server({ port: WEBSOCKET_PORT, perMessageDeflate: false });
- socketServer.on('connection', function (socket, request) {
- var streamName = request.url.substr(1).split('/')[0];
- socket.stream = streamName;
- console.log(
- 'New WebSocket connection for: ',
- streamName
- );
- });
- socketServer.broadcast = function(data, streamName) {
- socketServer.clients.forEach(function each(client) {
- if (client.readyState === WebSocket.OPEN && client.stream === streamName) {
- client.send(data);
- }
- });
- };
- // HTTP Server to accept incoming MPEG-TS Stream from ffmpeg
- var streamServer = http.createServer( function(request, response) {
- var streamName = request.url.substr(1).split('/')[0];
- response.connection.setTimeout(0);
- console.log(
- 'Stream Connected: ',
- streamName
- );
- request.on('data', function(data){
- socketServer.broadcast(data, streamName);
- });
- })
- // Keep the socket open for streaming
- streamServer.headersTimeout = 0;
- streamServer.listen(STREAM_PORT);
- console.log('Listening for incoming MPEG-TS Stream on http://127.0.0.1:'+STREAM_PORT+'/<streamName>');
- console.log('Awaiting WebSocket connections on ws://127.0.0.1:'+WEBSOCKET_PORT+'/');
|