UNPKG

sp-streams

Version:

Streamplace Streams for Piping Video Around and Stuff

113 lines (83 loc) 3.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var _debug = require("debug"); var _debug2 = _interopRequireDefault(_debug); var _fsExtra = require("fs-extra"); var _fsExtra2 = _interopRequireDefault(_fsExtra); var _constantFpsStream = require("./constant-fps-stream"); var _constantFpsStream2 = _interopRequireDefault(_constantFpsStream); var _ptsNormalizerStream = require("./pts-normalizer-stream"); var _ptsNormalizerStream2 = _interopRequireDefault(_ptsNormalizerStream); var _dashStream = require("./dash-stream"); var _dashStream2 = _interopRequireDefault(_dashStream); var _dashServer = require("./dash-server"); var _dashServer2 = _interopRequireDefault(_dashServer); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var log = (0, _debug2.default)("sp:sp-stream"); /** * TODO: I want this to have a really really polymorphic interface that's usable in a wide variety * of cases. */ exports.default = function spStream(_ref) { var filePath = _ref.filePath, loop = _ref.loop; var constantFps, dash, ptsNormalizer, restart, file, server, listener, portProm, port; return regeneratorRuntime.async(function spStream$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: _context.next = 2; return regeneratorRuntime.awrap(_fsExtra2.default.pathExists(filePath)); case 2: if (_context.sent) { _context.next = 4; break; } throw new Error("File not found: " + filePath); case 4: constantFps = (0, _constantFpsStream2.default)({ fps: 30 }); dash = (0, _dashStream2.default)(); if (loop) { ptsNormalizer = (0, _ptsNormalizerStream2.default)(); ptsNormalizer.pipe(constantFps); restart = function restart() { (0, _debug2.default)("restarting"); var file = _fsExtra2.default.createReadStream(filePath); file.pipe(ptsNormalizer, { end: false }); file.on("end", restart); }; restart(); } else { file = _fsExtra2.default.createReadStream(filePath); file.pipe(constantFps); } constantFps.pipe(dash); server = (0, _dashServer2.default)(dash); listener = void 0; portProm = new Promise(function (resolve, reject) { var listener = server.listen(0, function (err) { if (err) return reject(err); resolve(listener.address().port); }); }); _context.next = 13; return regeneratorRuntime.awrap(new Promise(function (resolve, reject) { dash.once("data", resolve); dash.on("error", reject); })); case 13: _context.next = 15; return regeneratorRuntime.awrap(portProm); case 15: port = _context.sent; dash.url = "http://localhost:" + port + "/" + _dashStream.MANIFEST_NAME; return _context.abrupt("return", dash); case 18: case "end": return _context.stop(); } } }, null, this); };