sp-streams
Version:
Streamplace Streams for Piping Video Around and Stuff
113 lines (83 loc) • 3.26 kB
JavaScript
;
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);
};