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