UNPKG

sp-streams

Version:

Streamplace Streams for Piping Video Around and Stuff

76 lines (59 loc) 1.94 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = dashServer; var _express = require("express"); var _express2 = _interopRequireDefault(_express); var _debug = require("debug"); var _debug2 = _interopRequireDefault(_debug); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } // maybe this shouldn't be in this package idk var log = (0, _debug2.default)("sp:dash-server"); function dashServer(dashStream) { var app = (0, _express2.default)(); var manifest = void 0; var files = {}; app.use(function (req, res, next) { log(req.method + " " + req.url); res.header("Access-Control-Allow-Origin", "*"); res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); next(); }); var keepFileDuration = (dashStream.windowSize + 1) * dashStream.segDuration * 10; log("keeping segments for " + keepFileDuration); dashStream.on("manifest", function (data) { manifest = data; }); dashStream.on("chunk", function (fileName, fileStream) { var chunks = []; fileStream.on("data", function (chunk) { return chunks.push(chunk); }); fileStream.on("end", function () { files[fileName] = Buffer.concat(chunks); // Maintain the init streams, otherwise dump after the window if (fileName.startsWith("init") || fileName.endsWith("m3u8")) { return; } setTimeout(function () { log("removing " + fileName); delete files[fileName]; }, keepFileDuration); }); }); app.get("/manifest.mpd", function (req, res) { if (!manifest) { return res.sendStatus(404); } res.end(manifest); }); app.get("*", function (req, res) { var fileName = req.url.slice(1); if (!files[fileName]) { return res.sendStatus(404); } res.end(files[fileName]); }); return app; }