mirror of
https://github.com/owncast/owncast.git
synced 2024-10-10 19:16:02 +00:00
![dependabot[bot]](/assets/img/avatar_default.png)
* Commit updated Javascript packages * Bump preact from 10.5.4 to 10.5.5 in /build/javascript (#265) * Trying a new github workflow to install javascript packages * Bump tailwindcss from 1.9.2 to 1.9.4 in /build/javascript (#266) Bumps [tailwindcss](https://github.com/tailwindlabs/tailwindcss) from 1.9.2 to 1.9.4. - [Release notes](https://github.com/tailwindlabs/tailwindcss/releases) - [Changelog](https://github.com/tailwindlabs/tailwindcss/blob/master/CHANGELOG.md) - [Commits](https://github.com/tailwindlabs/tailwindcss/compare/v1.9.2...v1.9.4) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> * Commit updated Javascript packages * Bump preact from 10.5.4 to 10.5.5 in /build/javascript Bumps [preact](https://github.com/preactjs/preact) from 10.5.4 to 10.5.5. - [Release notes](https://github.com/preactjs/preact/releases) - [Commits](https://github.com/preactjs/preact/compare/10.5.4...10.5.5) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Gabe Kangas <gabek@real-ity.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Owncast <owncast@owncast.online> * Bump @justinribeiro/lite-youtube in /build/javascript Bumps [@justinribeiro/lite-youtube](https://github.com/justinribeiro/lite-youtube) from 0.9.0 to 0.9.1. - [Release notes](https://github.com/justinribeiro/lite-youtube/releases) - [Commits](https://github.com/justinribeiro/lite-youtube/commits) Signed-off-by: dependabot[bot] <support@github.com> Co-authored-by: Owncast <owncast@owncast.online> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Gabe Kangas <gabek@real-ity.com>
102 lines
2.7 KiB
JavaScript
102 lines
2.7 KiB
JavaScript
/**
|
|
* mux.js
|
|
*
|
|
* Copyright (c) Brightcove
|
|
* Licensed Apache-2.0 https://github.com/videojs/mux.js/blob/master/LICENSE
|
|
*
|
|
* Accepts program elementary stream (PES) data events and corrects
|
|
* decode and presentation time stamps to account for a rollover
|
|
* of the 33 bit value.
|
|
*/
|
|
|
|
'use strict';
|
|
|
|
var Stream = require('../utils/stream');
|
|
|
|
var MAX_TS = 8589934592;
|
|
|
|
var RO_THRESH = 4294967296;
|
|
|
|
var TYPE_SHARED = 'shared';
|
|
|
|
var handleRollover = function(value, reference) {
|
|
var direction = 1;
|
|
|
|
if (value > reference) {
|
|
// If the current timestamp value is greater than our reference timestamp and we detect a
|
|
// timestamp rollover, this means the roll over is happening in the opposite direction.
|
|
// Example scenario: Enter a long stream/video just after a rollover occurred. The reference
|
|
// point will be set to a small number, e.g. 1. The user then seeks backwards over the
|
|
// rollover point. In loading this segment, the timestamp values will be very large,
|
|
// e.g. 2^33 - 1. Since this comes before the data we loaded previously, we want to adjust
|
|
// the time stamp to be `value - 2^33`.
|
|
direction = -1;
|
|
}
|
|
|
|
// Note: A seek forwards or back that is greater than the RO_THRESH (2^32, ~13 hours) will
|
|
// cause an incorrect adjustment.
|
|
while (Math.abs(reference - value) > RO_THRESH) {
|
|
value += (direction * MAX_TS);
|
|
}
|
|
|
|
return value;
|
|
};
|
|
|
|
var TimestampRolloverStream = function(type) {
|
|
var lastDTS, referenceDTS;
|
|
|
|
TimestampRolloverStream.prototype.init.call(this);
|
|
|
|
// The "shared" type is used in cases where a stream will contain muxed
|
|
// video and audio. We could use `undefined` here, but having a string
|
|
// makes debugging a little clearer.
|
|
this.type_ = type || TYPE_SHARED;
|
|
|
|
this.push = function(data) {
|
|
|
|
// Any "shared" rollover streams will accept _all_ data. Otherwise,
|
|
// streams will only accept data that matches their type.
|
|
if (this.type_ !== TYPE_SHARED && data.type !== this.type_) {
|
|
return;
|
|
}
|
|
|
|
if (referenceDTS === undefined) {
|
|
referenceDTS = data.dts;
|
|
}
|
|
|
|
data.dts = handleRollover(data.dts, referenceDTS);
|
|
data.pts = handleRollover(data.pts, referenceDTS);
|
|
|
|
lastDTS = data.dts;
|
|
|
|
this.trigger('data', data);
|
|
};
|
|
|
|
this.flush = function() {
|
|
referenceDTS = lastDTS;
|
|
this.trigger('done');
|
|
};
|
|
|
|
this.endTimeline = function() {
|
|
this.flush();
|
|
this.trigger('endedtimeline');
|
|
};
|
|
|
|
this.discontinuity = function() {
|
|
referenceDTS = void 0;
|
|
lastDTS = void 0;
|
|
};
|
|
|
|
this.reset = function() {
|
|
this.discontinuity();
|
|
this.trigger('reset');
|
|
};
|
|
};
|
|
|
|
TimestampRolloverStream.prototype = new Stream();
|
|
|
|
module.exports = {
|
|
TimestampRolloverStream: TimestampRolloverStream,
|
|
handleRollover: handleRollover
|
|
};
|