UNPKG

sp-streams

Version:

Streamplace Streams for Piping Video Around and Stuff

58 lines (49 loc) 1.7 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = ptsNormalizerStream; var _mpegMungerStream = require("./mpeg-munger-stream"); var _mpegMungerStream2 = _interopRequireDefault(_mpegMungerStream); var _debug = require("debug"); var _debug2 = _interopRequireDefault(_debug); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } /** * Whatever mpegts streams you pipe to it, the output will consistently increase in the way you'd * expect it to. Neato! For now assumes a 60/90000 timebase, which from my basic experimentation * seems like a pretty reasonable assumption. * * You should usually call me with source.pipe(ptsNormalizer, {end: false}) */ var log = (0, _debug2.default)("sp:pts-normalizer-stream"); var TBN = 60; var TBD = 90000; var oneFramePts = TBD / TBN; function ptsNormalizerStream() { var mpegMunger = (0, _mpegMungerStream2.default)(); var ptsOut = 0; var offset = 0; var renormalize = false; mpegMunger.on("pipe", function (source) { log("New stream provided, renormalizing"); source.on("end", function () { return mpegMunger.unpipe(source); }); // A new stream! Okay cool. When we first see a video pts, let's adjust everything to that. renormalize = true; }); mpegMunger.on("end", function () { throw new Error("MAYDAY: mpegmunger ended somehow"); }); mpegMunger.transformPTS = function (pts) { if (renormalize === true) { offset = ptsOut - pts + oneFramePts; renormalize = false; } return pts + offset; }; mpegMunger.transformDTS = function (dts) { return dts + offset; }; return mpegMunger; }