"use strict"; exports.__esModule = true; var NodeMediaServer = require("node-media-server"); var fs = require("fs"); var exec = require('child_process').exec; var ircd = require("./lib/IRCDjs-six/lib/server.js").Server; //initialize configs, eventually grab from runtime config file var mediaconfig = { rtmp: { port: 1935, chunk_size: 60000, gop_cache: true, ping: 30, ping_timeout: 60 }, http: { port: 8000, allow_origin: '*', mediaroot: './media' }, trans: { ffmpeg: '/usr/bin/ffmpeg', tasks: [ { app: 'live', hls: 'true', hlsFlags: '[hls_time=2:hls_list_size=3:hls_flags=delete_segments]' } ] } }; function streamAuth(path) { if (path.split("/").length > 3) { console.log("[NodeMediaServer] Malformed URL, closing connection."); return false; } var app = path.split("/")[1]; var key = path.split("/")[2]; console.log("[NodeMediaServer] Authenticating stream with credentials: ", "app=" + app + " key=" + key); if (app !== "stream") { console.log("[NodeMediaServer] Invalid app name, closing connection."); return false; } console.log("[NodeMediaServer] App name ok."); if (key !== "temp") { console.log("[NodeMediaServer] Invalid stream key, closing connection."); return false; } console.log("[NodeMediaServer] Stream key ok."); return true; } var nms = new NodeMediaServer(mediaconfig); nms.run(); ircd.boot(); nms.on('prePublish', function (id, StreamPath, args) { console.log("[NodeMediaServer] Prepublish Hook for stream id=", id); var session = nms.getSession(id); if (StreamPath.split("/").length > 3) { console.log("[NodeMediaServer] Malformed URL, closing connection."); session.reject(); return false; } var app = StreamPath.split("/")[1]; var key = StreamPath.split("/")[2]; console.log("[NodeMediaServer] Authenticating stream with credentials: ", "app=" + app + " key=" + key); if (app !== "stream") { console.log("[NodeMediaServer] Invalid app name, closing connection."); session.reject(); return false; } console.log("[NodeMediaServer] App name ok."); //TODO: Hook up to DB and redirect from query if (key !== "temp") { console.log("[NodeMediaServer] Invalid stream key, closing connection."); session.reject(); return false; } console.log("[NodeMediaServer] Stream key ok."); session.publishStreamPath = "/live/amy"; }); nms.on('postPublish', function (id, StreamPath, args) { console.log('[NodeMediaServer] Checking record flag for ', "id=" + id + " StreamPath=" + StreamPath); //Hook up to postgres DB. if (true) { console.log('[NodeMediaServer] Initiating recording for ', "id=" + id + " StreamPath=" + StreamPath); fs.mkdir('./media' + StreamPath, { recursive: true }, function (err) { if (err) throw err; }); var subprocess = exec('ffmpeg -i rtmp://127.0.0.1' + StreamPath + ' -vcodec copy -acodec copy ./media' + StreamPath + '/$(date +%d%b%Y-%H%M).mp4', { detached: true, stdio: 'inherit' }); subprocess.unref(); //spawn an ffmpeg process to record the stream, then detach it completely return true; } console.log('[NodeMediaServer] Skipping recording for ', "id=" + id + " StreamPath=" + StreamPath); });