mirror of
https://github.com/DanielnetoDotCom/YouPHPTube
synced 2025-10-05 19:42:38 +02:00
Node modules update
This commit is contained in:
parent
f394ef7856
commit
12225f5c27
123 changed files with 6221 additions and 3459 deletions
2
node_modules/hls.js/dist/hls-demo.js
generated
vendored
2
node_modules/hls.js/dist/hls-demo.js
generated
vendored
|
@ -42231,7 +42231,7 @@ module.exports = {
|
|||
abr: true,
|
||||
skip_ua: ['firefox', 'safari', {
|
||||
name: 'chrome',
|
||||
version: '69.0'
|
||||
version: '75.0'
|
||||
}, {
|
||||
name: 'chrome',
|
||||
version: '79.0'
|
||||
|
|
2
node_modules/hls.js/dist/hls-demo.js.map
generated
vendored
2
node_modules/hls.js/dist/hls-demo.js.map
generated
vendored
File diff suppressed because one or more lines are too long
220
node_modules/hls.js/dist/hls.js
generated
vendored
220
node_modules/hls.js/dist/hls.js
generated
vendored
|
@ -1551,7 +1551,6 @@ __webpack_require__.r(__webpack_exports__);
|
|||
/* harmony import */ var _fragment_finders__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ./fragment-finders */ "./src/controller/fragment-finders.ts");
|
||||
/* harmony import */ var _utils_discontinuities__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/discontinuities */ "./src/utils/discontinuities.ts");
|
||||
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__(/*! ../errors */ "./src/errors.ts");
|
||||
/* harmony import */ var _utils_logger__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__(/*! ../utils/logger */ "./src/utils/logger.ts");
|
||||
|
||||
|
||||
function _extends() { _extends = Object.assign ? Object.assign.bind() : function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }
|
||||
|
@ -1573,7 +1572,6 @@ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Objec
|
|||
|
||||
|
||||
|
||||
|
||||
var TICK_INTERVAL = 100; // how often to tick in ms
|
||||
|
||||
var AudioStreamController = /*#__PURE__*/function (_BaseStreamController) {
|
||||
|
@ -1674,6 +1672,7 @@ var AudioStreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
|
||||
if (lastCurrentTime > 0 && startPosition === -1) {
|
||||
this.log("Override startPosition with lastCurrentTime @" + lastCurrentTime.toFixed(3));
|
||||
startPosition = lastCurrentTime;
|
||||
this.state = _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__["State"].IDLE;
|
||||
} else {
|
||||
this.loadedmetadata = false;
|
||||
|
@ -1754,7 +1753,7 @@ var AudioStreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
}
|
||||
} else if (this.videoTrackCC !== this.waitingVideoCC) {
|
||||
// Drop waiting fragment if videoTrackCC has changed since waitingFragment was set and initPTS was not found
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_14__["logger"].log("Waiting fragment cc (" + frag.cc + ") cancelled because video is at cc " + this.videoTrackCC);
|
||||
this.log("Waiting fragment cc (" + frag.cc + ") cancelled because video is at cc " + this.videoTrackCC);
|
||||
this.clearWaitingFragment();
|
||||
} else {
|
||||
// Drop waiting fragment if an earlier fragment is needed
|
||||
|
@ -1763,7 +1762,7 @@ var AudioStreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
var waitingFragmentAtPosition = Object(_fragment_finders__WEBPACK_IMPORTED_MODULE_11__["fragmentWithinToleranceTest"])(bufferInfo.end, this.config.maxFragLookUpTolerance, frag);
|
||||
|
||||
if (waitingFragmentAtPosition < 0) {
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_14__["logger"].log("Waiting fragment cc (" + frag.cc + ") @ " + frag.start + " cancelled because another fragment at " + bufferInfo.end + " is needed");
|
||||
this.log("Waiting fragment cc (" + frag.cc + ") @ " + frag.start + " cancelled because another fragment at " + bufferInfo.end + " is needed");
|
||||
this.clearWaitingFragment();
|
||||
}
|
||||
}
|
||||
|
@ -1787,6 +1786,12 @@ var AudioStreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
}
|
||||
};
|
||||
|
||||
_proto.resetLoadingState = function resetLoadingState() {
|
||||
this.clearWaitingFragment();
|
||||
|
||||
_BaseStreamController.prototype.resetLoadingState.call(this);
|
||||
};
|
||||
|
||||
_proto.onTickEnd = function onTickEnd() {
|
||||
var media = this.media;
|
||||
|
||||
|
@ -2074,7 +2079,7 @@ var AudioStreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
var chunkMeta = new _types_transmuxer__WEBPACK_IMPORTED_MODULE_10__["ChunkMetadata"](frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);
|
||||
transmuxer.push(payload, initSegmentData, audioCodec, '', frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);
|
||||
} else {
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_14__["logger"].log("Unknown video PTS for cc " + frag.cc + ", waiting for video PTS before demuxing audio frag " + frag.sn + " of [" + details.startSN + " ," + details.endSN + "],track " + trackId);
|
||||
this.log("Unknown video PTS for cc " + frag.cc + ", waiting for video PTS before demuxing audio frag " + frag.sn + " of [" + details.startSN + " ," + details.endSN + "],track " + trackId);
|
||||
|
||||
var _this$waitingData = this.waitingData = this.waitingData || {
|
||||
frag: frag,
|
||||
|
@ -3654,8 +3659,6 @@ var BaseStreamController = /*#__PURE__*/function (_TaskLoop) {
|
|||
};
|
||||
|
||||
_proto.getNextFragment = function getNextFragment(pos, levelDetails) {
|
||||
var _frag, _frag2;
|
||||
|
||||
var fragments = levelDetails.fragments;
|
||||
var fragLen = fragments.length;
|
||||
|
||||
|
@ -3693,11 +3696,15 @@ var BaseStreamController = /*#__PURE__*/function (_TaskLoop) {
|
|||
if (!frag) {
|
||||
var end = config.lowLatencyMode ? levelDetails.partEnd : levelDetails.fragmentEnd;
|
||||
frag = this.getFragmentAtPosition(pos, end, levelDetails);
|
||||
} // If an initSegment is present, it must be buffered first
|
||||
}
|
||||
|
||||
return this.mapToInitFragWhenRequired(frag);
|
||||
};
|
||||
|
||||
if ((_frag = frag) !== null && _frag !== void 0 && _frag.initSegment && !((_frag2 = frag) !== null && _frag2 !== void 0 && _frag2.initSegment.data) && !this.bitrateTest) {
|
||||
frag = frag.initSegment;
|
||||
_proto.mapToInitFragWhenRequired = function mapToInitFragWhenRequired(frag) {
|
||||
// If an initSegment is present, it must be buffered first
|
||||
if (frag !== null && frag !== void 0 && frag.initSegment && !(frag !== null && frag !== void 0 && frag.initSegment.data) && !this.bitrateTest) {
|
||||
return frag.initSegment;
|
||||
}
|
||||
|
||||
return frag;
|
||||
|
@ -9553,7 +9560,6 @@ __webpack_require__.r(__webpack_exports__);
|
|||
/* harmony import */ var _types_transmuxer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../types/transmuxer */ "./src/types/transmuxer.ts");
|
||||
/* harmony import */ var _gap_controller__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./gap-controller */ "./src/controller/gap-controller.ts");
|
||||
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../errors */ "./src/errors.ts");
|
||||
/* harmony import */ var _utils_logger__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/logger */ "./src/utils/logger.ts");
|
||||
|
||||
|
||||
|
||||
|
@ -9578,7 +9584,6 @@ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Objec
|
|||
|
||||
|
||||
|
||||
|
||||
var TICK_INTERVAL = 100; // how often to tick in ms
|
||||
|
||||
var StreamController = /*#__PURE__*/function (_BaseStreamController) {
|
||||
|
@ -9598,7 +9603,6 @@ var StreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
_this.onvplaying = null;
|
||||
_this.onvseeked = null;
|
||||
_this.fragLastKbps = 0;
|
||||
_this.stalled = false;
|
||||
_this.couldBacktrack = false;
|
||||
_this.backtrackFragment = null;
|
||||
_this.audioCodecSwitch = false;
|
||||
|
@ -10071,7 +10075,7 @@ var StreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
this.log('Trigger BUFFER_RESET');
|
||||
this.hls.trigger(_events__WEBPACK_IMPORTED_MODULE_3__["Events"].BUFFER_RESET, undefined);
|
||||
this.fragmentTracker.removeAllFragments();
|
||||
this.couldBacktrack = this.stalled = false;
|
||||
this.couldBacktrack = false;
|
||||
this.startPosition = this.lastCurrentTime = 0;
|
||||
this.fragPlaying = null;
|
||||
this.backtrackFragment = null;
|
||||
|
@ -10470,7 +10474,7 @@ var StreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
|
||||
if (startPosition >= 0 && currentTime < startPosition) {
|
||||
if (media.seeking) {
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_12__["logger"].log("could not seek to " + startPosition + ", already seeking at " + currentTime);
|
||||
this.log("could not seek to " + startPosition + ", already seeking at " + currentTime);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -10479,7 +10483,7 @@ var StreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
var delta = bufferStart - startPosition;
|
||||
|
||||
if (delta > 0 && (delta < this.config.maxBufferHole || delta < this.config.maxFragLookUpTolerance)) {
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_12__["logger"].log("adjusting start position by " + delta + " to match buffer start");
|
||||
this.log("adjusting start position by " + delta + " to match buffer start");
|
||||
startPosition += delta;
|
||||
this.startPosition = startPosition;
|
||||
}
|
||||
|
@ -11239,8 +11243,6 @@ var SubtitleStreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
}
|
||||
|
||||
if (this.state === _base_stream_controller__WEBPACK_IMPORTED_MODULE_6__["State"].IDLE) {
|
||||
var _foundFrag;
|
||||
|
||||
var currentTrackId = this.currentTrackId,
|
||||
levels = this.levels;
|
||||
|
||||
|
@ -11280,9 +11282,15 @@ var SubtitleStreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
foundFrag = fragments[fragLen - 1];
|
||||
}
|
||||
|
||||
if ((_foundFrag = foundFrag) !== null && _foundFrag !== void 0 && _foundFrag.encrypted) {
|
||||
foundFrag = this.mapToInitFragWhenRequired(foundFrag);
|
||||
|
||||
if (!foundFrag) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (foundFrag.encrypted) {
|
||||
this.loadKey(foundFrag, trackDetails);
|
||||
} else if (foundFrag && this.fragmentTracker.getState(foundFrag) === _fragment_tracker__WEBPACK_IMPORTED_MODULE_5__["FragmentState"].NOT_LOADED) {
|
||||
} else if (this.fragmentTracker.getState(foundFrag) === _fragment_tracker__WEBPACK_IMPORTED_MODULE_5__["FragmentState"].NOT_LOADED) {
|
||||
// only load if fragment is not loaded
|
||||
this.loadFragment(foundFrag, trackDetails, targetBufferTime);
|
||||
}
|
||||
|
@ -11292,7 +11300,11 @@ var SubtitleStreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
_proto.loadFragment = function loadFragment(frag, levelDetails, targetBufferTime) {
|
||||
this.fragCurrent = frag;
|
||||
|
||||
_BaseStreamController.prototype.loadFragment.call(this, frag, levelDetails, targetBufferTime);
|
||||
if (frag.sn === 'initSegment') {
|
||||
this._loadInitSegment(frag);
|
||||
} else {
|
||||
_BaseStreamController.prototype.loadFragment.call(this, frag, levelDetails, targetBufferTime);
|
||||
}
|
||||
};
|
||||
|
||||
_createClass(SubtitleStreamController, [{
|
||||
|
@ -11774,8 +11786,10 @@ __webpack_require__.r(__webpack_exports__);
|
|||
/* harmony import */ var _utils_webvtt_parser__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ../utils/webvtt-parser */ "./src/utils/webvtt-parser.ts");
|
||||
/* harmony import */ var _utils_texttrack_utils__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ../utils/texttrack-utils */ "./src/utils/texttrack-utils.ts");
|
||||
/* harmony import */ var _utils_imsc1_ttml_parser__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ../utils/imsc1-ttml-parser */ "./src/utils/imsc1-ttml-parser.ts");
|
||||
/* harmony import */ var _types_loader__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../types/loader */ "./src/types/loader.ts");
|
||||
/* harmony import */ var _utils_logger__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../utils/logger */ "./src/utils/logger.ts");
|
||||
/* harmony import */ var _utils_mp4_tools__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ../utils/mp4-tools */ "./src/utils/mp4-tools.ts");
|
||||
/* harmony import */ var _types_loader__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ../types/loader */ "./src/types/loader.ts");
|
||||
/* harmony import */ var _utils_logger__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../utils/logger */ "./src/utils/logger.ts");
|
||||
|
||||
|
||||
|
||||
|
||||
|
@ -12114,7 +12128,9 @@ var TimelineController = /*#__PURE__*/function () {
|
|||
if (textTrack) {
|
||||
Object(_utils_texttrack_utils__WEBPACK_IMPORTED_MODULE_5__["clearCurrentCues"])(textTrack);
|
||||
} else {
|
||||
textTrack = _this2.createTextTrack('subtitles', track.name, track.lang);
|
||||
var textTrackKind = _this2._captionsOrSubtitlesFromCharacteristics(track);
|
||||
|
||||
textTrack = _this2.createTextTrack(textTrackKind, track.name, track.lang);
|
||||
|
||||
if (textTrack) {
|
||||
textTrack.mode = 'disabled';
|
||||
|
@ -12144,6 +12160,21 @@ var TimelineController = /*#__PURE__*/function () {
|
|||
}
|
||||
};
|
||||
|
||||
_proto._captionsOrSubtitlesFromCharacteristics = function _captionsOrSubtitlesFromCharacteristics(track) {
|
||||
var _track$attrs;
|
||||
|
||||
if ((_track$attrs = track.attrs) !== null && _track$attrs !== void 0 && _track$attrs.CHARACTERISTICS) {
|
||||
var transcribesSpokenDialog = /transcribes-spoken-dialog/gi.test(track.attrs.CHARACTERISTICS);
|
||||
var describesMusicAndSound = /describes-music-and-sound/gi.test(track.attrs.CHARACTERISTICS);
|
||||
|
||||
if (transcribesSpokenDialog && describesMusicAndSound) {
|
||||
return 'captions';
|
||||
}
|
||||
}
|
||||
|
||||
return 'subtitles';
|
||||
};
|
||||
|
||||
_proto.onManifestLoaded = function onManifestLoaded(event, data) {
|
||||
var _this3 = this;
|
||||
|
||||
|
@ -12185,7 +12216,7 @@ var TimelineController = /*#__PURE__*/function () {
|
|||
} // if this frag isn't contiguous, clear the parser so cues with bad start/end times aren't added to the textTrack
|
||||
|
||||
|
||||
if (data.frag.type === _types_loader__WEBPACK_IMPORTED_MODULE_7__["PlaylistLevelType"].MAIN) {
|
||||
if (data.frag.type === _types_loader__WEBPACK_IMPORTED_MODULE_8__["PlaylistLevelType"].MAIN) {
|
||||
var _data$part$index, _data$part;
|
||||
|
||||
var sn = data.frag.sn;
|
||||
|
@ -12207,7 +12238,7 @@ var TimelineController = /*#__PURE__*/function () {
|
|||
var initPTS = this.initPTS,
|
||||
unparsedVttFrags = this.unparsedVttFrags;
|
||||
|
||||
if (frag.type === _types_loader__WEBPACK_IMPORTED_MODULE_7__["PlaylistLevelType"].SUBTITLE) {
|
||||
if (frag.type === _types_loader__WEBPACK_IMPORTED_MODULE_8__["PlaylistLevelType"].SUBTITLE) {
|
||||
// If fragment is subtitle type, parse as WebVTT.
|
||||
if (payload.byteLength) {
|
||||
// We need an initial synchronisation PTS. Store fragments as long as none has arrived.
|
||||
|
@ -12272,7 +12303,7 @@ var TimelineController = /*#__PURE__*/function () {
|
|||
frag: frag
|
||||
});
|
||||
}, function (error) {
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_8__["logger"].log("Failed to parse IMSC1: " + error);
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_9__["logger"].log("Failed to parse IMSC1: " + error);
|
||||
hls.trigger(_events__WEBPACK_IMPORTED_MODULE_1__["Events"].SUBTITLE_FRAG_PROCESSED, {
|
||||
success: false,
|
||||
frag: frag,
|
||||
|
@ -12282,11 +12313,13 @@ var TimelineController = /*#__PURE__*/function () {
|
|||
};
|
||||
|
||||
_proto._parseVTTs = function _parseVTTs(frag, payload, vttCCs) {
|
||||
var _this5 = this;
|
||||
var _frag$initSegment,
|
||||
_this5 = this;
|
||||
|
||||
var hls = this.hls; // Parse the WebVTT file contents.
|
||||
|
||||
Object(_utils_webvtt_parser__WEBPACK_IMPORTED_MODULE_4__["parseWebVTT"])(payload, this.initPTS[frag.cc], this.timescale[frag.cc], vttCCs, frag.cc, frag.start, function (cues) {
|
||||
var payloadWebVTT = (_frag$initSegment = frag.initSegment) !== null && _frag$initSegment !== void 0 && _frag$initSegment.data ? Object(_utils_mp4_tools__WEBPACK_IMPORTED_MODULE_7__["appendUint8Array"])(frag.initSegment.data, new Uint8Array(payload)) : payload;
|
||||
Object(_utils_webvtt_parser__WEBPACK_IMPORTED_MODULE_4__["parseWebVTT"])(payloadWebVTT, this.initPTS[frag.cc], this.timescale[frag.cc], vttCCs, frag.cc, frag.start, function (cues) {
|
||||
_this5._appendCues(cues, frag.level);
|
||||
|
||||
hls.trigger(_events__WEBPACK_IMPORTED_MODULE_1__["Events"].SUBTITLE_FRAG_PROCESSED, {
|
||||
|
@ -12297,7 +12330,7 @@ var TimelineController = /*#__PURE__*/function () {
|
|||
_this5._fallbackToIMSC1(frag, payload); // Something went wrong while parsing. Trigger event with success false.
|
||||
|
||||
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_8__["logger"].log("Failed to parse VTT cue: " + error);
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_9__["logger"].log("Failed to parse VTT cue: " + error);
|
||||
hls.trigger(_events__WEBPACK_IMPORTED_MODULE_1__["Events"].SUBTITLE_FRAG_PROCESSED, {
|
||||
success: false,
|
||||
frag: frag,
|
||||
|
@ -12358,7 +12391,7 @@ var TimelineController = /*#__PURE__*/function () {
|
|||
_proto.onFragDecrypted = function onFragDecrypted(event, data) {
|
||||
var frag = data.frag;
|
||||
|
||||
if (frag.type === _types_loader__WEBPACK_IMPORTED_MODULE_7__["PlaylistLevelType"].SUBTITLE) {
|
||||
if (frag.type === _types_loader__WEBPACK_IMPORTED_MODULE_8__["PlaylistLevelType"].SUBTITLE) {
|
||||
if (!Object(_home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__["isFiniteNumber"])(this.initPTS[frag.cc])) {
|
||||
this.unparsedVttFrags.push(data);
|
||||
return;
|
||||
|
@ -13123,7 +13156,7 @@ var AACDemuxer = /*#__PURE__*/function (_BaseAudioDemuxer) {
|
|||
|
||||
_proto.appendFrame = function appendFrame(track, data, offset) {
|
||||
_adts__WEBPACK_IMPORTED_MODULE_1__["initTrackConfig"](track, this.observer, data, offset, track.manifestCodec);
|
||||
var frame = _adts__WEBPACK_IMPORTED_MODULE_1__["appendFrame"](track, data, offset, this.initPTS, this.frameIndex);
|
||||
var frame = _adts__WEBPACK_IMPORTED_MODULE_1__["appendFrame"](track, data, offset, this.basePTS, this.frameIndex);
|
||||
|
||||
if (frame && frame.missing === 0) {
|
||||
return frame;
|
||||
|
@ -13456,12 +13489,14 @@ __webpack_require__.r(__webpack_exports__);
|
|||
|
||||
|
||||
|
||||
|
||||
var BaseAudioDemuxer = /*#__PURE__*/function () {
|
||||
function BaseAudioDemuxer() {
|
||||
this._audioTrack = void 0;
|
||||
this._id3Track = void 0;
|
||||
this.frameIndex = 0;
|
||||
this.cachedData = null;
|
||||
this.basePTS = null;
|
||||
this.initPTS = null;
|
||||
}
|
||||
|
||||
|
@ -13479,9 +13514,15 @@ var BaseAudioDemuxer = /*#__PURE__*/function () {
|
|||
};
|
||||
};
|
||||
|
||||
_proto.resetTimeStamp = function resetTimeStamp() {};
|
||||
_proto.resetTimeStamp = function resetTimeStamp(deaultTimestamp) {
|
||||
this.initPTS = deaultTimestamp;
|
||||
this.resetContiguity();
|
||||
};
|
||||
|
||||
_proto.resetContiguity = function resetContiguity() {};
|
||||
_proto.resetContiguity = function resetContiguity() {
|
||||
this.basePTS = null;
|
||||
this.frameIndex = 0;
|
||||
};
|
||||
|
||||
_proto.canParse = function canParse(data, offset) {
|
||||
return false;
|
||||
|
@ -13505,21 +13546,21 @@ var BaseAudioDemuxer = /*#__PURE__*/function () {
|
|||
var timestamp = id3Data ? _demux_id3__WEBPACK_IMPORTED_MODULE_1__["getTimeStamp"](id3Data) : undefined;
|
||||
var length = data.length;
|
||||
|
||||
if (this.frameIndex === 0 || this.initPTS === null) {
|
||||
this.initPTS = initPTSFn(timestamp, timeOffset);
|
||||
if (this.basePTS === null || this.frameIndex === 0 && Object(_home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__["isFiniteNumber"])(timestamp)) {
|
||||
this.basePTS = initPTSFn(timestamp, timeOffset, this.initPTS);
|
||||
} // more expressive than alternative: id3Data?.length
|
||||
|
||||
|
||||
if (id3Data && id3Data.length > 0) {
|
||||
id3Track.samples.push({
|
||||
pts: this.initPTS,
|
||||
dts: this.initPTS,
|
||||
pts: this.basePTS,
|
||||
dts: this.basePTS,
|
||||
data: id3Data,
|
||||
type: _types_demuxer__WEBPACK_IMPORTED_MODULE_2__["MetadataSchema"].audioId3
|
||||
});
|
||||
}
|
||||
|
||||
pts = this.initPTS;
|
||||
pts = this.basePTS;
|
||||
|
||||
while (offset < length) {
|
||||
if (this.canParse(data, offset)) {
|
||||
|
@ -13580,7 +13621,6 @@ var BaseAudioDemuxer = /*#__PURE__*/function () {
|
|||
this.demux(cachedData, 0);
|
||||
}
|
||||
|
||||
this.frameIndex = 0;
|
||||
return {
|
||||
audioTrack: this._audioTrack,
|
||||
videoTrack: Object(_dummy_demuxed_track__WEBPACK_IMPORTED_MODULE_3__["dummyTrack"])(),
|
||||
|
@ -13601,8 +13641,12 @@ var BaseAudioDemuxer = /*#__PURE__*/function () {
|
|||
*/
|
||||
|
||||
|
||||
var initPTSFn = function initPTSFn(timestamp, timeOffset) {
|
||||
return Object(_home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__["isFiniteNumber"])(timestamp) ? timestamp * 90 : timeOffset * 90000;
|
||||
var initPTSFn = function initPTSFn(timestamp, timeOffset, initPTS) {
|
||||
if (Object(_home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__["isFiniteNumber"])(timestamp)) {
|
||||
return timestamp * 90;
|
||||
}
|
||||
|
||||
return timeOffset * 90000 + (initPTS || 0);
|
||||
};
|
||||
/* harmony default export */ __webpack_exports__["default"] = (BaseAudioDemuxer);
|
||||
|
||||
|
@ -14608,11 +14652,11 @@ var MP3Demuxer = /*#__PURE__*/function (_BaseAudioDemuxer) {
|
|||
};
|
||||
|
||||
_proto.appendFrame = function appendFrame(track, data, offset) {
|
||||
if (this.initPTS === null) {
|
||||
if (this.basePTS === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
return _mpegaudio__WEBPACK_IMPORTED_MODULE_3__["appendFrame"](track, data, offset, this.initPTS, this.frameIndex);
|
||||
return _mpegaudio__WEBPACK_IMPORTED_MODULE_3__["appendFrame"](track, data, offset, this.basePTS, this.frameIndex);
|
||||
};
|
||||
|
||||
return MP3Demuxer;
|
||||
|
@ -15260,7 +15304,8 @@ var TransmuxerInterface = /*#__PURE__*/function () {
|
|||
var trackSwitch = !(lastFrag && chunkMeta.level === lastFrag.level);
|
||||
var snDiff = lastFrag ? chunkMeta.sn - lastFrag.sn : -1;
|
||||
var partDiff = this.part ? chunkMeta.part - this.part.index : -1;
|
||||
var contiguous = !trackSwitch && (snDiff === 1 || snDiff === 0 && partDiff === 1);
|
||||
var progressive = snDiff === 0 && chunkMeta.id > 1 && chunkMeta.id === (lastFrag === null || lastFrag === void 0 ? void 0 : lastFrag.stats.chunkCount);
|
||||
var contiguous = !trackSwitch && (snDiff === 1 || snDiff === 0 && (partDiff === 1 || progressive && partDiff <= 0));
|
||||
var now = self.performance.now();
|
||||
|
||||
if (trackSwitch || snDiff || frag.stats.parsing.start === 0) {
|
||||
|
@ -15362,6 +15407,14 @@ var TransmuxerInterface = /*#__PURE__*/function () {
|
|||
this.onFlush(data.data);
|
||||
break;
|
||||
}
|
||||
// pass logs from the worker thread to the main logger
|
||||
|
||||
case 'workerLog':
|
||||
if (_utils_logger__WEBPACK_IMPORTED_MODULE_3__["logger"][data.data.logType]) {
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_3__["logger"][data.data.logType](data.data.message);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
/* falls through */
|
||||
|
||||
|
@ -15433,7 +15486,25 @@ function TransmuxerWorker(self) {
|
|||
|
||||
|
||||
observer.on(_events__WEBPACK_IMPORTED_MODULE_1__["Events"].FRAG_DECRYPTED, forwardMessage);
|
||||
observer.on(_events__WEBPACK_IMPORTED_MODULE_1__["Events"].ERROR, forwardMessage);
|
||||
observer.on(_events__WEBPACK_IMPORTED_MODULE_1__["Events"].ERROR, forwardMessage); // forward logger events to main thread
|
||||
|
||||
var forwardWorkerLogs = function forwardWorkerLogs() {
|
||||
var _loop = function _loop(logFn) {
|
||||
var func = function func(message) {
|
||||
forwardMessage('workerLog', {
|
||||
logType: logFn,
|
||||
message: message
|
||||
});
|
||||
};
|
||||
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_2__["logger"][logFn] = func;
|
||||
};
|
||||
|
||||
for (var logFn in _utils_logger__WEBPACK_IMPORTED_MODULE_2__["logger"]) {
|
||||
_loop(logFn);
|
||||
}
|
||||
};
|
||||
|
||||
self.addEventListener('message', function (ev) {
|
||||
var data = ev.data;
|
||||
|
||||
|
@ -15443,6 +15514,7 @@ function TransmuxerWorker(self) {
|
|||
var config = JSON.parse(data.config);
|
||||
self.transmuxer = new _demux_transmuxer__WEBPACK_IMPORTED_MODULE_0__["default"](observer, data.typeSupported, config, data.vendor, data.id);
|
||||
Object(_utils_logger__WEBPACK_IMPORTED_MODULE_2__["enableLogs"])(config.debug);
|
||||
forwardWorkerLogs();
|
||||
forwardMessage('init', null);
|
||||
break;
|
||||
}
|
||||
|
@ -18248,7 +18320,7 @@ var Hls = /*#__PURE__*/function () {
|
|||
}], [{
|
||||
key: "version",
|
||||
get: function get() {
|
||||
return "1.2.0";
|
||||
return "1.2.1";
|
||||
}
|
||||
}, {
|
||||
key: "Events",
|
||||
|
@ -20763,7 +20835,14 @@ var PlaylistLoader = /*#__PURE__*/function () {
|
|||
};
|
||||
|
||||
_proto.handleSidxRequest = function handleSidxRequest(response, context) {
|
||||
var sidxInfo = Object(_utils_mp4_tools__WEBPACK_IMPORTED_MODULE_4__["parseSegmentIndex"])(new Uint8Array(response.data)); // if provided fragment does not contain sidx, early return
|
||||
var data = new Uint8Array(response.data);
|
||||
var sidxBox = Object(_utils_mp4_tools__WEBPACK_IMPORTED_MODULE_4__["findBox"])(data, ['sidx'])[0]; // if provided fragment does not contain sidx, early return
|
||||
|
||||
if (!sidxBox) {
|
||||
return;
|
||||
}
|
||||
|
||||
var sidxInfo = Object(_utils_mp4_tools__WEBPACK_IMPORTED_MODULE_4__["parseSegmentIndex"])(sidxBox);
|
||||
|
||||
if (!sidxInfo) {
|
||||
return;
|
||||
|
@ -20780,7 +20859,9 @@ var PlaylistLoader = /*#__PURE__*/function () {
|
|||
}
|
||||
|
||||
if (frag.initSegment) {
|
||||
frag.initSegment.setByteRange(String(sidxInfo.moovEndOffset) + '@0');
|
||||
var moovBox = Object(_utils_mp4_tools__WEBPACK_IMPORTED_MODULE_4__["findBox"])(data, ['moov'])[0];
|
||||
var moovEndOffset = moovBox ? moovBox.length : null;
|
||||
frag.initSegment.setByteRange(String(moovEndOffset) + '@0');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -26362,19 +26443,8 @@ function findBox(data, path) {
|
|||
|
||||
return results;
|
||||
}
|
||||
function parseSegmentIndex(initSegment) {
|
||||
var moovBox = findBox(initSegment, ['moov']);
|
||||
var moov = moovBox[0];
|
||||
var moovEndOffset = moov ? moov.length : null; // we need this in case we need to chop of garbage of the end of current data
|
||||
|
||||
var sidxBox = findBox(initSegment, ['sidx']);
|
||||
|
||||
if (!sidxBox || !sidxBox[0]) {
|
||||
return null;
|
||||
}
|
||||
|
||||
function parseSegmentIndex(sidx) {
|
||||
var references = [];
|
||||
var sidx = sidxBox[0];
|
||||
var version = sidx[0]; // set initial offset, we skip the reference ID (not needed)
|
||||
|
||||
var index = 8;
|
||||
|
@ -26435,8 +26505,7 @@ function parseSegmentIndex(initSegment) {
|
|||
timescale: timescale,
|
||||
version: version,
|
||||
referencesCount: referencesCount,
|
||||
references: references,
|
||||
moovEndOffset: moovEndOffset
|
||||
references: references
|
||||
};
|
||||
}
|
||||
/**
|
||||
|
@ -26660,13 +26729,20 @@ function getDuration(data, initData) {
|
|||
|
||||
if (videoDuration === 0 && audioDuration === 0) {
|
||||
// If duration samples are not available in the traf use sidx subsegment_duration
|
||||
var sidx = parseSegmentIndex(data);
|
||||
var sidxDuration = 0;
|
||||
var sidxs = findBox(data, ['sidx']);
|
||||
|
||||
if (sidx !== null && sidx !== void 0 && sidx.references) {
|
||||
return sidx.references.reduce(function (dur, ref) {
|
||||
return dur + ref.info.duration || 0;
|
||||
}, 0);
|
||||
for (var _i = 0; _i < sidxs.length; _i++) {
|
||||
var sidx = parseSegmentIndex(sidxs[_i]);
|
||||
|
||||
if (sidx !== null && sidx !== void 0 && sidx.references) {
|
||||
sidxDuration += sidx.references.reduce(function (dur, ref) {
|
||||
return dur + ref.info.duration || 0;
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
|
||||
return sidxDuration;
|
||||
}
|
||||
|
||||
if (videoDuration) {
|
||||
|
@ -27051,12 +27127,12 @@ function parseSEIMessageFromNALu(unescapedData, pts, samples) {
|
|||
if (payloadSize > 16) {
|
||||
var uuidStrArray = [];
|
||||
|
||||
for (var _i = 0; _i < 16; _i++) {
|
||||
for (var _i2 = 0; _i2 < 16; _i2++) {
|
||||
var _b = data[seiPtr++].toString(16);
|
||||
|
||||
uuidStrArray.push(_b.length == 1 ? '0' + _b : _b);
|
||||
|
||||
if (_i === 3 || _i === 5 || _i === 7 || _i === 9) {
|
||||
if (_i2 === 3 || _i2 === 5 || _i2 === 7 || _i2 === 9) {
|
||||
uuidStrArray.push('-');
|
||||
}
|
||||
}
|
||||
|
@ -27064,8 +27140,8 @@ function parseSEIMessageFromNALu(unescapedData, pts, samples) {
|
|||
var length = payloadSize - 16;
|
||||
var userDataBytes = new Uint8Array(length);
|
||||
|
||||
for (var _i2 = 0; _i2 < length; _i2++) {
|
||||
userDataBytes[_i2] = data[seiPtr++];
|
||||
for (var _i3 = 0; _i3 < length; _i3++) {
|
||||
userDataBytes[_i3] = data[seiPtr++];
|
||||
}
|
||||
|
||||
samples.push({
|
||||
|
|
5
node_modules/hls.js/dist/hls.js.d.ts
generated
vendored
5
node_modules/hls.js/dist/hls.js.d.ts
generated
vendored
|
@ -75,6 +75,7 @@ declare class AudioStreamController extends BaseStreamController implements Netw
|
|||
startLoad(startPosition: number): void;
|
||||
doTick(): void;
|
||||
clearWaitingFragment(): void;
|
||||
protected resetLoadingState(): void;
|
||||
protected onTickEnd(): void;
|
||||
private doTickIdle;
|
||||
protected getMaxBufferLength(mainBufferLength?: number): number;
|
||||
|
@ -253,6 +254,7 @@ declare class BaseStreamController extends TaskLoop implements NetworkComponentA
|
|||
protected getMaxBufferLength(levelBitrate?: number): number;
|
||||
protected reduceMaxBufferLength(threshold?: number): boolean;
|
||||
protected getNextFragment(pos: number, levelDetails: LevelDetails): Fragment | null;
|
||||
mapToInitFragWhenRequired(frag: Fragment | null): typeof frag;
|
||||
getNextPart(partList: Part[], frag: Fragment, targetBufferTime: number): number;
|
||||
private loadedEndOfParts;
|
||||
protected getInitialLiveFragment(levelDetails: LevelDetails, fragments: Array<Fragment>): Fragment | null;
|
||||
|
@ -1946,6 +1948,7 @@ export declare interface LevelAttributes extends AttrList {
|
|||
BANDWIDTH?: string;
|
||||
BYTERANGE?: string;
|
||||
'CLOSED-CAPTIONS'?: string;
|
||||
CHARACTERISTICS?: string;
|
||||
CODECS?: string;
|
||||
DEFAULT?: string;
|
||||
FORCED?: string;
|
||||
|
@ -2455,7 +2458,6 @@ declare class StreamController extends BaseStreamController implements NetworkCo
|
|||
private onvplaying;
|
||||
private onvseeked;
|
||||
private fragLastKbps;
|
||||
private stalled;
|
||||
private couldBacktrack;
|
||||
private backtrackFragment;
|
||||
private audioCodecSwitch;
|
||||
|
@ -2763,6 +2765,7 @@ declare class TimelineController implements ComponentAPI {
|
|||
private onManifestLoading;
|
||||
private _cleanTracks;
|
||||
private onSubtitleTracksUpdated;
|
||||
private _captionsOrSubtitlesFromCharacteristics;
|
||||
private onManifestLoaded;
|
||||
private onFragLoading;
|
||||
private onFragLoaded;
|
||||
|
|
2
node_modules/hls.js/dist/hls.js.map
generated
vendored
2
node_modules/hls.js/dist/hls.js.map
generated
vendored
File diff suppressed because one or more lines are too long
146
node_modules/hls.js/dist/hls.light.js
generated
vendored
146
node_modules/hls.js/dist/hls.light.js
generated
vendored
|
@ -2519,8 +2519,6 @@ var BaseStreamController = /*#__PURE__*/function (_TaskLoop) {
|
|||
};
|
||||
|
||||
_proto.getNextFragment = function getNextFragment(pos, levelDetails) {
|
||||
var _frag, _frag2;
|
||||
|
||||
var fragments = levelDetails.fragments;
|
||||
var fragLen = fragments.length;
|
||||
|
||||
|
@ -2558,11 +2556,15 @@ var BaseStreamController = /*#__PURE__*/function (_TaskLoop) {
|
|||
if (!frag) {
|
||||
var end = config.lowLatencyMode ? levelDetails.partEnd : levelDetails.fragmentEnd;
|
||||
frag = this.getFragmentAtPosition(pos, end, levelDetails);
|
||||
} // If an initSegment is present, it must be buffered first
|
||||
}
|
||||
|
||||
return this.mapToInitFragWhenRequired(frag);
|
||||
};
|
||||
|
||||
if ((_frag = frag) !== null && _frag !== void 0 && _frag.initSegment && !((_frag2 = frag) !== null && _frag2 !== void 0 && _frag2.initSegment.data) && !this.bitrateTest) {
|
||||
frag = frag.initSegment;
|
||||
_proto.mapToInitFragWhenRequired = function mapToInitFragWhenRequired(frag) {
|
||||
// If an initSegment is present, it must be buffered first
|
||||
if (frag !== null && frag !== void 0 && frag.initSegment && !(frag !== null && frag !== void 0 && frag.initSegment.data) && !this.bitrateTest) {
|
||||
return frag.initSegment;
|
||||
}
|
||||
|
||||
return frag;
|
||||
|
@ -7199,7 +7201,6 @@ __webpack_require__.r(__webpack_exports__);
|
|||
/* harmony import */ var _types_transmuxer__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__(/*! ../types/transmuxer */ "./src/types/transmuxer.ts");
|
||||
/* harmony import */ var _gap_controller__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__(/*! ./gap-controller */ "./src/controller/gap-controller.ts");
|
||||
/* harmony import */ var _errors__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__(/*! ../errors */ "./src/errors.ts");
|
||||
/* harmony import */ var _utils_logger__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__(/*! ../utils/logger */ "./src/utils/logger.ts");
|
||||
|
||||
|
||||
|
||||
|
@ -7224,7 +7225,6 @@ function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf ? Objec
|
|||
|
||||
|
||||
|
||||
|
||||
var TICK_INTERVAL = 100; // how often to tick in ms
|
||||
|
||||
var StreamController = /*#__PURE__*/function (_BaseStreamController) {
|
||||
|
@ -7244,7 +7244,6 @@ var StreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
_this.onvplaying = null;
|
||||
_this.onvseeked = null;
|
||||
_this.fragLastKbps = 0;
|
||||
_this.stalled = false;
|
||||
_this.couldBacktrack = false;
|
||||
_this.backtrackFragment = null;
|
||||
_this.audioCodecSwitch = false;
|
||||
|
@ -7717,7 +7716,7 @@ var StreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
this.log('Trigger BUFFER_RESET');
|
||||
this.hls.trigger(_events__WEBPACK_IMPORTED_MODULE_3__["Events"].BUFFER_RESET, undefined);
|
||||
this.fragmentTracker.removeAllFragments();
|
||||
this.couldBacktrack = this.stalled = false;
|
||||
this.couldBacktrack = false;
|
||||
this.startPosition = this.lastCurrentTime = 0;
|
||||
this.fragPlaying = null;
|
||||
this.backtrackFragment = null;
|
||||
|
@ -8116,7 +8115,7 @@ var StreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
|
||||
if (startPosition >= 0 && currentTime < startPosition) {
|
||||
if (media.seeking) {
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_12__["logger"].log("could not seek to " + startPosition + ", already seeking at " + currentTime);
|
||||
this.log("could not seek to " + startPosition + ", already seeking at " + currentTime);
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -8125,7 +8124,7 @@ var StreamController = /*#__PURE__*/function (_BaseStreamController) {
|
|||
var delta = bufferStart - startPosition;
|
||||
|
||||
if (delta > 0 && (delta < this.config.maxBufferHole || delta < this.config.maxFragLookUpTolerance)) {
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_12__["logger"].log("adjusting start position by " + delta + " to match buffer start");
|
||||
this.log("adjusting start position by " + delta + " to match buffer start");
|
||||
startPosition += delta;
|
||||
this.startPosition = startPosition;
|
||||
}
|
||||
|
@ -9182,7 +9181,7 @@ var AACDemuxer = /*#__PURE__*/function (_BaseAudioDemuxer) {
|
|||
|
||||
_proto.appendFrame = function appendFrame(track, data, offset) {
|
||||
_adts__WEBPACK_IMPORTED_MODULE_1__["initTrackConfig"](track, this.observer, data, offset, track.manifestCodec);
|
||||
var frame = _adts__WEBPACK_IMPORTED_MODULE_1__["appendFrame"](track, data, offset, this.initPTS, this.frameIndex);
|
||||
var frame = _adts__WEBPACK_IMPORTED_MODULE_1__["appendFrame"](track, data, offset, this.basePTS, this.frameIndex);
|
||||
|
||||
if (frame && frame.missing === 0) {
|
||||
return frame;
|
||||
|
@ -9515,12 +9514,14 @@ __webpack_require__.r(__webpack_exports__);
|
|||
|
||||
|
||||
|
||||
|
||||
var BaseAudioDemuxer = /*#__PURE__*/function () {
|
||||
function BaseAudioDemuxer() {
|
||||
this._audioTrack = void 0;
|
||||
this._id3Track = void 0;
|
||||
this.frameIndex = 0;
|
||||
this.cachedData = null;
|
||||
this.basePTS = null;
|
||||
this.initPTS = null;
|
||||
}
|
||||
|
||||
|
@ -9538,9 +9539,15 @@ var BaseAudioDemuxer = /*#__PURE__*/function () {
|
|||
};
|
||||
};
|
||||
|
||||
_proto.resetTimeStamp = function resetTimeStamp() {};
|
||||
_proto.resetTimeStamp = function resetTimeStamp(deaultTimestamp) {
|
||||
this.initPTS = deaultTimestamp;
|
||||
this.resetContiguity();
|
||||
};
|
||||
|
||||
_proto.resetContiguity = function resetContiguity() {};
|
||||
_proto.resetContiguity = function resetContiguity() {
|
||||
this.basePTS = null;
|
||||
this.frameIndex = 0;
|
||||
};
|
||||
|
||||
_proto.canParse = function canParse(data, offset) {
|
||||
return false;
|
||||
|
@ -9564,21 +9571,21 @@ var BaseAudioDemuxer = /*#__PURE__*/function () {
|
|||
var timestamp = id3Data ? _demux_id3__WEBPACK_IMPORTED_MODULE_1__["getTimeStamp"](id3Data) : undefined;
|
||||
var length = data.length;
|
||||
|
||||
if (this.frameIndex === 0 || this.initPTS === null) {
|
||||
this.initPTS = initPTSFn(timestamp, timeOffset);
|
||||
if (this.basePTS === null || this.frameIndex === 0 && Object(_home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__["isFiniteNumber"])(timestamp)) {
|
||||
this.basePTS = initPTSFn(timestamp, timeOffset, this.initPTS);
|
||||
} // more expressive than alternative: id3Data?.length
|
||||
|
||||
|
||||
if (id3Data && id3Data.length > 0) {
|
||||
id3Track.samples.push({
|
||||
pts: this.initPTS,
|
||||
dts: this.initPTS,
|
||||
pts: this.basePTS,
|
||||
dts: this.basePTS,
|
||||
data: id3Data,
|
||||
type: _types_demuxer__WEBPACK_IMPORTED_MODULE_2__["MetadataSchema"].audioId3
|
||||
});
|
||||
}
|
||||
|
||||
pts = this.initPTS;
|
||||
pts = this.basePTS;
|
||||
|
||||
while (offset < length) {
|
||||
if (this.canParse(data, offset)) {
|
||||
|
@ -9639,7 +9646,6 @@ var BaseAudioDemuxer = /*#__PURE__*/function () {
|
|||
this.demux(cachedData, 0);
|
||||
}
|
||||
|
||||
this.frameIndex = 0;
|
||||
return {
|
||||
audioTrack: this._audioTrack,
|
||||
videoTrack: Object(_dummy_demuxed_track__WEBPACK_IMPORTED_MODULE_3__["dummyTrack"])(),
|
||||
|
@ -9660,8 +9666,12 @@ var BaseAudioDemuxer = /*#__PURE__*/function () {
|
|||
*/
|
||||
|
||||
|
||||
var initPTSFn = function initPTSFn(timestamp, timeOffset) {
|
||||
return Object(_home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__["isFiniteNumber"])(timestamp) ? timestamp * 90 : timeOffset * 90000;
|
||||
var initPTSFn = function initPTSFn(timestamp, timeOffset, initPTS) {
|
||||
if (Object(_home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__["isFiniteNumber"])(timestamp)) {
|
||||
return timestamp * 90;
|
||||
}
|
||||
|
||||
return timeOffset * 90000 + (initPTS || 0);
|
||||
};
|
||||
/* harmony default export */ __webpack_exports__["default"] = (BaseAudioDemuxer);
|
||||
|
||||
|
@ -10667,11 +10677,11 @@ var MP3Demuxer = /*#__PURE__*/function (_BaseAudioDemuxer) {
|
|||
};
|
||||
|
||||
_proto.appendFrame = function appendFrame(track, data, offset) {
|
||||
if (this.initPTS === null) {
|
||||
if (this.basePTS === null) {
|
||||
return;
|
||||
}
|
||||
|
||||
return _mpegaudio__WEBPACK_IMPORTED_MODULE_3__["appendFrame"](track, data, offset, this.initPTS, this.frameIndex);
|
||||
return _mpegaudio__WEBPACK_IMPORTED_MODULE_3__["appendFrame"](track, data, offset, this.basePTS, this.frameIndex);
|
||||
};
|
||||
|
||||
return MP3Demuxer;
|
||||
|
@ -11319,7 +11329,8 @@ var TransmuxerInterface = /*#__PURE__*/function () {
|
|||
var trackSwitch = !(lastFrag && chunkMeta.level === lastFrag.level);
|
||||
var snDiff = lastFrag ? chunkMeta.sn - lastFrag.sn : -1;
|
||||
var partDiff = this.part ? chunkMeta.part - this.part.index : -1;
|
||||
var contiguous = !trackSwitch && (snDiff === 1 || snDiff === 0 && partDiff === 1);
|
||||
var progressive = snDiff === 0 && chunkMeta.id > 1 && chunkMeta.id === (lastFrag === null || lastFrag === void 0 ? void 0 : lastFrag.stats.chunkCount);
|
||||
var contiguous = !trackSwitch && (snDiff === 1 || snDiff === 0 && (partDiff === 1 || progressive && partDiff <= 0));
|
||||
var now = self.performance.now();
|
||||
|
||||
if (trackSwitch || snDiff || frag.stats.parsing.start === 0) {
|
||||
|
@ -11421,6 +11432,14 @@ var TransmuxerInterface = /*#__PURE__*/function () {
|
|||
this.onFlush(data.data);
|
||||
break;
|
||||
}
|
||||
// pass logs from the worker thread to the main logger
|
||||
|
||||
case 'workerLog':
|
||||
if (_utils_logger__WEBPACK_IMPORTED_MODULE_3__["logger"][data.data.logType]) {
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_3__["logger"][data.data.logType](data.data.message);
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
/* falls through */
|
||||
|
||||
|
@ -11492,7 +11511,25 @@ function TransmuxerWorker(self) {
|
|||
|
||||
|
||||
observer.on(_events__WEBPACK_IMPORTED_MODULE_1__["Events"].FRAG_DECRYPTED, forwardMessage);
|
||||
observer.on(_events__WEBPACK_IMPORTED_MODULE_1__["Events"].ERROR, forwardMessage);
|
||||
observer.on(_events__WEBPACK_IMPORTED_MODULE_1__["Events"].ERROR, forwardMessage); // forward logger events to main thread
|
||||
|
||||
var forwardWorkerLogs = function forwardWorkerLogs() {
|
||||
var _loop = function _loop(logFn) {
|
||||
var func = function func(message) {
|
||||
forwardMessage('workerLog', {
|
||||
logType: logFn,
|
||||
message: message
|
||||
});
|
||||
};
|
||||
|
||||
_utils_logger__WEBPACK_IMPORTED_MODULE_2__["logger"][logFn] = func;
|
||||
};
|
||||
|
||||
for (var logFn in _utils_logger__WEBPACK_IMPORTED_MODULE_2__["logger"]) {
|
||||
_loop(logFn);
|
||||
}
|
||||
};
|
||||
|
||||
self.addEventListener('message', function (ev) {
|
||||
var data = ev.data;
|
||||
|
||||
|
@ -11502,6 +11539,7 @@ function TransmuxerWorker(self) {
|
|||
var config = JSON.parse(data.config);
|
||||
self.transmuxer = new _demux_transmuxer__WEBPACK_IMPORTED_MODULE_0__["default"](observer, data.typeSupported, config, data.vendor, data.id);
|
||||
Object(_utils_logger__WEBPACK_IMPORTED_MODULE_2__["enableLogs"])(config.debug);
|
||||
forwardWorkerLogs();
|
||||
forwardMessage('init', null);
|
||||
break;
|
||||
}
|
||||
|
@ -14320,7 +14358,7 @@ var Hls = /*#__PURE__*/function () {
|
|||
}], [{
|
||||
key: "version",
|
||||
get: function get() {
|
||||
return "1.2.0";
|
||||
return "1.2.1";
|
||||
}
|
||||
}, {
|
||||
key: "Events",
|
||||
|
@ -16835,7 +16873,14 @@ var PlaylistLoader = /*#__PURE__*/function () {
|
|||
};
|
||||
|
||||
_proto.handleSidxRequest = function handleSidxRequest(response, context) {
|
||||
var sidxInfo = Object(_utils_mp4_tools__WEBPACK_IMPORTED_MODULE_4__["parseSegmentIndex"])(new Uint8Array(response.data)); // if provided fragment does not contain sidx, early return
|
||||
var data = new Uint8Array(response.data);
|
||||
var sidxBox = Object(_utils_mp4_tools__WEBPACK_IMPORTED_MODULE_4__["findBox"])(data, ['sidx'])[0]; // if provided fragment does not contain sidx, early return
|
||||
|
||||
if (!sidxBox) {
|
||||
return;
|
||||
}
|
||||
|
||||
var sidxInfo = Object(_utils_mp4_tools__WEBPACK_IMPORTED_MODULE_4__["parseSegmentIndex"])(sidxBox);
|
||||
|
||||
if (!sidxInfo) {
|
||||
return;
|
||||
|
@ -16852,7 +16897,9 @@ var PlaylistLoader = /*#__PURE__*/function () {
|
|||
}
|
||||
|
||||
if (frag.initSegment) {
|
||||
frag.initSegment.setByteRange(String(sidxInfo.moovEndOffset) + '@0');
|
||||
var moovBox = Object(_utils_mp4_tools__WEBPACK_IMPORTED_MODULE_4__["findBox"])(data, ['moov'])[0];
|
||||
var moovEndOffset = moovBox ? moovBox.length : null;
|
||||
frag.initSegment.setByteRange(String(moovEndOffset) + '@0');
|
||||
}
|
||||
});
|
||||
};
|
||||
|
@ -20510,19 +20557,8 @@ function findBox(data, path) {
|
|||
|
||||
return results;
|
||||
}
|
||||
function parseSegmentIndex(initSegment) {
|
||||
var moovBox = findBox(initSegment, ['moov']);
|
||||
var moov = moovBox[0];
|
||||
var moovEndOffset = moov ? moov.length : null; // we need this in case we need to chop of garbage of the end of current data
|
||||
|
||||
var sidxBox = findBox(initSegment, ['sidx']);
|
||||
|
||||
if (!sidxBox || !sidxBox[0]) {
|
||||
return null;
|
||||
}
|
||||
|
||||
function parseSegmentIndex(sidx) {
|
||||
var references = [];
|
||||
var sidx = sidxBox[0];
|
||||
var version = sidx[0]; // set initial offset, we skip the reference ID (not needed)
|
||||
|
||||
var index = 8;
|
||||
|
@ -20583,8 +20619,7 @@ function parseSegmentIndex(initSegment) {
|
|||
timescale: timescale,
|
||||
version: version,
|
||||
referencesCount: referencesCount,
|
||||
references: references,
|
||||
moovEndOffset: moovEndOffset
|
||||
references: references
|
||||
};
|
||||
}
|
||||
/**
|
||||
|
@ -20808,13 +20843,20 @@ function getDuration(data, initData) {
|
|||
|
||||
if (videoDuration === 0 && audioDuration === 0) {
|
||||
// If duration samples are not available in the traf use sidx subsegment_duration
|
||||
var sidx = parseSegmentIndex(data);
|
||||
var sidxDuration = 0;
|
||||
var sidxs = findBox(data, ['sidx']);
|
||||
|
||||
if (sidx !== null && sidx !== void 0 && sidx.references) {
|
||||
return sidx.references.reduce(function (dur, ref) {
|
||||
return dur + ref.info.duration || 0;
|
||||
}, 0);
|
||||
for (var _i = 0; _i < sidxs.length; _i++) {
|
||||
var sidx = parseSegmentIndex(sidxs[_i]);
|
||||
|
||||
if (sidx !== null && sidx !== void 0 && sidx.references) {
|
||||
sidxDuration += sidx.references.reduce(function (dur, ref) {
|
||||
return dur + ref.info.duration || 0;
|
||||
}, 0);
|
||||
}
|
||||
}
|
||||
|
||||
return sidxDuration;
|
||||
}
|
||||
|
||||
if (videoDuration) {
|
||||
|
@ -21199,12 +21241,12 @@ function parseSEIMessageFromNALu(unescapedData, pts, samples) {
|
|||
if (payloadSize > 16) {
|
||||
var uuidStrArray = [];
|
||||
|
||||
for (var _i = 0; _i < 16; _i++) {
|
||||
for (var _i2 = 0; _i2 < 16; _i2++) {
|
||||
var _b = data[seiPtr++].toString(16);
|
||||
|
||||
uuidStrArray.push(_b.length == 1 ? '0' + _b : _b);
|
||||
|
||||
if (_i === 3 || _i === 5 || _i === 7 || _i === 9) {
|
||||
if (_i2 === 3 || _i2 === 5 || _i2 === 7 || _i2 === 9) {
|
||||
uuidStrArray.push('-');
|
||||
}
|
||||
}
|
||||
|
@ -21212,8 +21254,8 @@ function parseSEIMessageFromNALu(unescapedData, pts, samples) {
|
|||
var length = payloadSize - 16;
|
||||
var userDataBytes = new Uint8Array(length);
|
||||
|
||||
for (var _i2 = 0; _i2 < length; _i2++) {
|
||||
userDataBytes[_i2] = data[seiPtr++];
|
||||
for (var _i3 = 0; _i3 < length; _i3++) {
|
||||
userDataBytes[_i3] = data[seiPtr++];
|
||||
}
|
||||
|
||||
samples.push({
|
||||
|
|
2
node_modules/hls.js/dist/hls.light.js.map
generated
vendored
2
node_modules/hls.js/dist/hls.light.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2
node_modules/hls.js/dist/hls.light.min.js
generated
vendored
2
node_modules/hls.js/dist/hls.light.min.js
generated
vendored
File diff suppressed because one or more lines are too long
2
node_modules/hls.js/dist/hls.light.min.js.map
generated
vendored
2
node_modules/hls.js/dist/hls.light.min.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2
node_modules/hls.js/dist/hls.min.js
generated
vendored
2
node_modules/hls.js/dist/hls.min.js
generated
vendored
File diff suppressed because one or more lines are too long
2
node_modules/hls.js/dist/hls.min.js.map
generated
vendored
2
node_modules/hls.js/dist/hls.min.js.map
generated
vendored
File diff suppressed because one or more lines are too long
2
node_modules/hls.js/package.json
generated
vendored
2
node_modules/hls.js/package.json
generated
vendored
|
@ -1 +1 @@
|
|||
{"name":"hls.js","license":"Apache-2.0","description":"JavaScript HLS client using MediaSourceExtension","homepage":"https://github.com/video-dev/hls.js","authors":"Guillaume du Pontavice <g.du.pontavice@gmail.com>","repository":{"type":"git","url":"https://github.com/video-dev/hls.js"},"bugs":{"url":"https://github.com/video-dev/hls.js/issues"},"main":"./dist/hls.js","types":"./dist/hls.js.d.ts","files":["dist/**/*","src/**/*"],"publishConfig":{"access":"public"},"scripts":{"build":"webpack --progress && npm run build:types","build:ci":"webpack && tsc --build tsconfig-lib.json && api-extractor run","build:debug":"webpack --progress --env debug --env demo","build:watch":"webpack --progress --env debug --env demo --watch","build:types":"tsc --build tsconfig-lib.json && api-extractor run --local","dev":"webpack serve --progress --env debug --env demo --port 8000 --static .","docs":"esdoc","lint":"eslint src/ tests/ --ext .js --ext .ts","lint:fix":"npm run lint -- --fix","lint:quiet":"npm run lint -- --quiet","lint:staged":"lint-staged","prettier":"prettier --write .","prettier:verify":"prettier --check .","pretest":"npm run lint","sanity-check":"npm run lint && npm run prettier:verify && npm run type-check && npm run docs && npm run build:types && npm run build && npm run test:unit","start":"npm run dev","test":"npm run test:unit && npm run test:func","test:unit":"karma start karma.conf.js","test:unit:debug":"DEBUG_UNIT_TESTS=1 karma start karma.conf.js --auto-watch --no-single-run --browsers Chrome","test:unit:watch":"karma start karma.conf.js --auto-watch --no-single-run","test:func":"BABEL_ENV=development mocha --require @babel/register tests/functional/auto/setup.js --timeout 40000 --exit","test:func:light":"BABEL_ENV=development HLSJS_LIGHT=1 mocha --require @babel/register tests/functional/auto/setup.js --timeout 40000 --exit","test:func:sauce":"SAUCE=1 UA=safari OS='OS X 10.15' BABEL_ENV=development mocha --require @babel/register tests/functional/auto/setup.js --timeout 40000 --exit","type-check":"tsc --noEmit","type-check:watch":"npm run type-check -- --watch","prepare":"husky install"},"devDependencies":{"@babel/core":"7.18.9","@babel/helper-module-imports":"7.18.6","@babel/plugin-proposal-class-properties":"7.18.6","@babel/plugin-proposal-object-rest-spread":"7.18.9","@babel/plugin-proposal-optional-chaining":"7.18.9","@babel/plugin-transform-object-assign":"7.18.6","@babel/preset-env":"7.18.9","@babel/preset-typescript":"7.18.6","@babel/register":"7.18.9","@itsjamie/esdoc-cli":"0.5.0","@itsjamie/esdoc-core":"0.5.0","@itsjamie/esdoc-ecmascript-proposal-plugin":"0.5.0","@itsjamie/esdoc-standard-plugin":"0.5.0","@itsjamie/esdoc-typescript-plugin":"0.5.0","@microsoft/api-extractor":"7.28.4","@types/chai":"4.3.1","@types/chart.js":"2.9.37","@types/mocha":"9.1.1","@types/sinon-chai":"3.2.8","@typescript-eslint/eslint-plugin":"5.23.0","@typescript-eslint/parser":"5.23.0","babel-loader":"8.2.5","babel-plugin-transform-remove-console":"6.9.4","chai":"4.3.6","chart.js":"2.9.4","chromedriver":"103.0.0","eslint":"8.20.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-mocha":"10.0.5","eslint-plugin-node":"11.1.0","eslint-plugin-promise":"6.0.0","eventemitter3":"4.0.7","http-server":"14.1.1","husky":"8.0.1","istanbul-instrumenter-loader":"3.0.1","jsonpack":"1.1.5","karma":"6.4.0","karma-chrome-launcher":"3.1.1","karma-coverage-istanbul-reporter":"3.0.3","karma-mocha":"2.0.1","karma-mocha-reporter":"2.2.5","karma-sinon-chai":"2.0.2","karma-sourcemap-loader":"0.3.8","karma-webpack":"4.0.2","lint-staged":"13.0.3","micromatch":"4.0.5","mocha":"10.0.0","netlify-cli":"10.7.1","prettier":"2.7.1","promise-polyfill":"8.2.3","sauce-connect-launcher":"1.3.2","selenium-webdriver":"4.3.1","semver":"7.3.7","sinon":"14.0.0","sinon-chai":"3.7.0","typescript":"4.7.4","url-toolkit":"2.2.5","webpack":"4.46.0","webpack-cli":"4.10.0","webpack-dev-server":"4.9.3","webpack-merge":"5.8.0","webworkify-webpack":"2.1.5"},"version":"1.2.0"}
|
||||
{"name":"hls.js","license":"Apache-2.0","description":"JavaScript HLS client using MediaSourceExtension","homepage":"https://github.com/video-dev/hls.js","authors":"Guillaume du Pontavice <g.du.pontavice@gmail.com>","repository":{"type":"git","url":"https://github.com/video-dev/hls.js"},"bugs":{"url":"https://github.com/video-dev/hls.js/issues"},"main":"./dist/hls.js","types":"./dist/hls.js.d.ts","files":["dist/**/*","src/**/*"],"publishConfig":{"access":"public"},"scripts":{"build":"webpack --progress && npm run build:types","build:ci":"webpack && tsc --build tsconfig-lib.json && api-extractor run","build:debug":"webpack --progress --env debug --env demo","build:watch":"webpack --progress --env debug --env demo --watch","build:types":"tsc --build tsconfig-lib.json && api-extractor run --local","dev":"webpack serve --progress --env debug --env demo --port 8000 --static .","docs":"esdoc","lint":"eslint src/ tests/ --ext .js --ext .ts","lint:fix":"npm run lint -- --fix","lint:quiet":"npm run lint -- --quiet","lint:staged":"lint-staged","prettier":"prettier --write .","prettier:verify":"prettier --check .","pretest":"npm run lint","sanity-check":"npm run lint && npm run prettier:verify && npm run type-check && npm run docs && npm run build:types && npm run build && npm run test:unit","start":"npm run dev","test":"npm run test:unit && npm run test:func","test:unit":"karma start karma.conf.js","test:unit:debug":"DEBUG_UNIT_TESTS=1 karma start karma.conf.js --auto-watch --no-single-run --browsers Chrome","test:unit:watch":"karma start karma.conf.js --auto-watch --no-single-run","test:func":"BABEL_ENV=development mocha --require @babel/register tests/functional/auto/setup.js --timeout 40000 --exit","test:func:light":"BABEL_ENV=development HLSJS_LIGHT=1 mocha --require @babel/register tests/functional/auto/setup.js --timeout 40000 --exit","test:func:sauce":"SAUCE=1 UA=safari OS='OS X 10.15' BABEL_ENV=development mocha --require @babel/register tests/functional/auto/setup.js --timeout 40000 --exit","type-check":"tsc --noEmit","type-check:watch":"npm run type-check -- --watch","prepare":"husky install"},"devDependencies":{"@babel/core":"7.18.10","@babel/helper-module-imports":"7.18.6","@babel/plugin-proposal-class-properties":"7.18.6","@babel/plugin-proposal-object-rest-spread":"7.18.9","@babel/plugin-proposal-optional-chaining":"7.18.9","@babel/plugin-transform-object-assign":"7.18.6","@babel/preset-env":"7.18.10","@babel/preset-typescript":"7.18.6","@babel/register":"7.18.9","@itsjamie/esdoc-cli":"0.5.0","@itsjamie/esdoc-core":"0.5.0","@itsjamie/esdoc-ecmascript-proposal-plugin":"0.5.0","@itsjamie/esdoc-standard-plugin":"0.5.0","@itsjamie/esdoc-typescript-plugin":"0.5.0","@microsoft/api-extractor":"7.28.6","@types/chai":"4.3.3","@types/chart.js":"2.9.37","@types/mocha":"9.1.1","@types/sinon-chai":"3.2.8","@typescript-eslint/eslint-plugin":"5.23.0","@typescript-eslint/parser":"5.23.0","babel-loader":"8.2.5","babel-plugin-transform-remove-console":"6.9.4","chai":"4.3.6","chart.js":"2.9.4","chromedriver":"104.0.0","eslint":"8.21.0","eslint-config-prettier":"8.5.0","eslint-plugin-import":"2.26.0","eslint-plugin-mocha":"10.1.0","eslint-plugin-node":"11.1.0","eslint-plugin-promise":"6.0.0","eventemitter3":"4.0.7","http-server":"14.1.1","husky":"8.0.1","istanbul-instrumenter-loader":"3.0.1","jsonpack":"1.1.5","karma":"6.4.0","karma-chrome-launcher":"3.1.1","karma-coverage-istanbul-reporter":"3.0.3","karma-mocha":"2.0.1","karma-mocha-reporter":"2.2.5","karma-sinon-chai":"2.0.2","karma-sourcemap-loader":"0.3.8","karma-webpack":"4.0.2","lint-staged":"13.0.3","micromatch":"4.0.5","mocha":"10.0.0","netlify-cli":"10.7.1","prettier":"2.7.1","promise-polyfill":"8.2.3","sauce-connect-launcher":"1.3.2","selenium-webdriver":"4.4.0","semver":"7.3.7","sinon":"14.0.0","sinon-chai":"3.7.0","typescript":"4.7.4","url-toolkit":"2.2.5","webpack":"4.46.0","webpack-cli":"4.10.0","webpack-dev-server":"4.9.3","webpack-merge":"5.8.0","webworkify-webpack":"2.1.5"},"version":"1.2.1"}
|
13
node_modules/hls.js/src/controller/audio-stream-controller.ts
generated
vendored
13
node_modules/hls.js/src/controller/audio-stream-controller.ts
generated
vendored
|
@ -11,7 +11,6 @@ import { ChunkMetadata } from '../types/transmuxer';
|
|||
import { fragmentWithinToleranceTest } from './fragment-finders';
|
||||
import { alignMediaPlaylistByPDT } from '../utils/discontinuities';
|
||||
import { ErrorDetails } from '../errors';
|
||||
import { logger } from '../utils/logger';
|
||||
import type { NetworkComponentAPI } from '../types/component-api';
|
||||
import type { FragmentTracker } from './fragment-tracker';
|
||||
import type { TransmuxerResult } from '../types/transmuxer';
|
||||
|
@ -136,6 +135,7 @@ class AudioStreamController
|
|||
3
|
||||
)}`
|
||||
);
|
||||
startPosition = lastCurrentTime;
|
||||
this.state = State.IDLE;
|
||||
} else {
|
||||
this.loadedmetadata = false;
|
||||
|
@ -197,7 +197,7 @@ class AudioStreamController
|
|||
}
|
||||
} else if (this.videoTrackCC !== this.waitingVideoCC) {
|
||||
// Drop waiting fragment if videoTrackCC has changed since waitingFragment was set and initPTS was not found
|
||||
logger.log(
|
||||
this.log(
|
||||
`Waiting fragment cc (${frag.cc}) cancelled because video is at cc ${this.videoTrackCC}`
|
||||
);
|
||||
this.clearWaitingFragment();
|
||||
|
@ -215,7 +215,7 @@ class AudioStreamController
|
|||
frag
|
||||
);
|
||||
if (waitingFragmentAtPosition < 0) {
|
||||
logger.log(
|
||||
this.log(
|
||||
`Waiting fragment cc (${frag.cc}) @ ${frag.start} cancelled because another fragment at ${bufferInfo.end} is needed`
|
||||
);
|
||||
this.clearWaitingFragment();
|
||||
|
@ -240,6 +240,11 @@ class AudioStreamController
|
|||
}
|
||||
}
|
||||
|
||||
protected resetLoadingState() {
|
||||
this.clearWaitingFragment();
|
||||
super.resetLoadingState();
|
||||
}
|
||||
|
||||
protected onTickEnd() {
|
||||
const { media } = this;
|
||||
if (!media || !media.readyState) {
|
||||
|
@ -550,7 +555,7 @@ class AudioStreamController
|
|||
initPTS
|
||||
);
|
||||
} else {
|
||||
logger.log(
|
||||
this.log(
|
||||
`Unknown video PTS for cc ${frag.cc}, waiting for video PTS before demuxing audio frag ${frag.sn} of [${details.startSN} ,${details.endSN}],track ${trackId}`
|
||||
);
|
||||
const { cache } = (this.waitingData = this.waitingData || {
|
||||
|
|
6
node_modules/hls.js/src/controller/base-stream-controller.ts
generated
vendored
6
node_modules/hls.js/src/controller/base-stream-controller.ts
generated
vendored
|
@ -854,9 +854,13 @@ export default class BaseStreamController
|
|||
frag = this.getFragmentAtPosition(pos, end, levelDetails);
|
||||
}
|
||||
|
||||
return this.mapToInitFragWhenRequired(frag);
|
||||
}
|
||||
|
||||
mapToInitFragWhenRequired(frag: Fragment | null): typeof frag {
|
||||
// If an initSegment is present, it must be buffered first
|
||||
if (frag?.initSegment && !frag?.initSegment.data && !this.bitrateTest) {
|
||||
frag = frag.initSegment;
|
||||
return frag.initSegment;
|
||||
}
|
||||
|
||||
return frag;
|
||||
|
|
10
node_modules/hls.js/src/controller/stream-controller.ts
generated
vendored
10
node_modules/hls.js/src/controller/stream-controller.ts
generated
vendored
|
@ -13,7 +13,6 @@ import type { TransmuxerResult } from '../types/transmuxer';
|
|||
import { ChunkMetadata } from '../types/transmuxer';
|
||||
import GapController from './gap-controller';
|
||||
import { ErrorDetails } from '../errors';
|
||||
import { logger } from '../utils/logger';
|
||||
import type Hls from '../hls';
|
||||
import type { LevelDetails } from '../loader/level-details';
|
||||
import type { TrackSet } from '../types/track';
|
||||
|
@ -52,7 +51,6 @@ export default class StreamController
|
|||
private onvplaying: EventListener | null = null;
|
||||
private onvseeked: EventListener | null = null;
|
||||
private fragLastKbps: number = 0;
|
||||
private stalled: boolean = false;
|
||||
private couldBacktrack: boolean = false;
|
||||
private backtrackFragment: Fragment | null = null;
|
||||
private audioCodecSwitch: boolean = false;
|
||||
|
@ -546,7 +544,7 @@ export default class StreamController
|
|||
this.log('Trigger BUFFER_RESET');
|
||||
this.hls.trigger(Events.BUFFER_RESET, undefined);
|
||||
this.fragmentTracker.removeAllFragments();
|
||||
this.couldBacktrack = this.stalled = false;
|
||||
this.couldBacktrack = false;
|
||||
this.startPosition = this.lastCurrentTime = 0;
|
||||
this.fragPlaying = null;
|
||||
this.backtrackFragment = null;
|
||||
|
@ -982,7 +980,7 @@ export default class StreamController
|
|||
// at that stage, there should be only one buffered range, as we reach that code after first fragment has been buffered
|
||||
if (startPosition >= 0 && currentTime < startPosition) {
|
||||
if (media.seeking) {
|
||||
logger.log(
|
||||
this.log(
|
||||
`could not seek to ${startPosition}, already seeking at ${currentTime}`
|
||||
);
|
||||
return;
|
||||
|
@ -995,9 +993,7 @@ export default class StreamController
|
|||
(delta < this.config.maxBufferHole ||
|
||||
delta < this.config.maxFragLookUpTolerance)
|
||||
) {
|
||||
logger.log(
|
||||
`adjusting start position by ${delta} to match buffer start`
|
||||
);
|
||||
this.log(`adjusting start position by ${delta} to match buffer start`);
|
||||
startPosition += delta;
|
||||
this.startPosition = startPosition;
|
||||
}
|
||||
|
|
16
node_modules/hls.js/src/controller/subtitle-stream-controller.ts
generated
vendored
16
node_modules/hls.js/src/controller/subtitle-stream-controller.ts
generated
vendored
|
@ -371,7 +371,7 @@ export class SubtitleStreamController
|
|||
const fragLen = fragments.length;
|
||||
const end = trackDetails.edge;
|
||||
|
||||
let foundFrag;
|
||||
let foundFrag: Fragment | null;
|
||||
const fragPrevious = this.fragPrevious;
|
||||
if (targetBufferTime < end) {
|
||||
const { maxFragLookUpTolerance } = config;
|
||||
|
@ -392,10 +392,14 @@ export class SubtitleStreamController
|
|||
foundFrag = fragments[fragLen - 1];
|
||||
}
|
||||
|
||||
if (foundFrag?.encrypted) {
|
||||
foundFrag = this.mapToInitFragWhenRequired(foundFrag);
|
||||
if (!foundFrag) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (foundFrag.encrypted) {
|
||||
this.loadKey(foundFrag, trackDetails);
|
||||
} else if (
|
||||
foundFrag &&
|
||||
this.fragmentTracker.getState(foundFrag) === FragmentState.NOT_LOADED
|
||||
) {
|
||||
// only load if fragment is not loaded
|
||||
|
@ -410,7 +414,11 @@ export class SubtitleStreamController
|
|||
targetBufferTime: number
|
||||
) {
|
||||
this.fragCurrent = frag;
|
||||
super.loadFragment(frag, levelDetails, targetBufferTime);
|
||||
if (frag.sn === 'initSegment') {
|
||||
this._loadInitSegment(frag);
|
||||
} else {
|
||||
super.loadFragment(frag, levelDetails, targetBufferTime);
|
||||
}
|
||||
}
|
||||
|
||||
get mediaBufferTimeRanges(): TimeRange[] {
|
||||
|
|
29
node_modules/hls.js/src/controller/timeline-controller.ts
generated
vendored
29
node_modules/hls.js/src/controller/timeline-controller.ts
generated
vendored
|
@ -9,6 +9,7 @@ import {
|
|||
removeCuesInRange,
|
||||
} from '../utils/texttrack-utils';
|
||||
import { parseIMSC1, IMSC1_CODEC } from '../utils/imsc1-ttml-parser';
|
||||
import { appendUint8Array } from '../utils/mp4-tools';
|
||||
import { PlaylistLevelType } from '../types/loader';
|
||||
import { Fragment } from '../loader/fragment';
|
||||
import {
|
||||
|
@ -361,8 +362,10 @@ export class TimelineController implements ComponentAPI {
|
|||
if (textTrack) {
|
||||
clearCurrentCues(textTrack);
|
||||
} else {
|
||||
const textTrackKind =
|
||||
this._captionsOrSubtitlesFromCharacteristics(track);
|
||||
textTrack = this.createTextTrack(
|
||||
'subtitles',
|
||||
textTrackKind,
|
||||
track.name,
|
||||
track.lang
|
||||
);
|
||||
|
@ -392,6 +395,25 @@ export class TimelineController implements ComponentAPI {
|
|||
}
|
||||
}
|
||||
|
||||
private _captionsOrSubtitlesFromCharacteristics(
|
||||
track: MediaPlaylist
|
||||
): TextTrackKind {
|
||||
if (track.attrs?.CHARACTERISTICS) {
|
||||
const transcribesSpokenDialog = /transcribes-spoken-dialog/gi.test(
|
||||
track.attrs.CHARACTERISTICS
|
||||
);
|
||||
const describesMusicAndSound = /describes-music-and-sound/gi.test(
|
||||
track.attrs.CHARACTERISTICS
|
||||
);
|
||||
|
||||
if (transcribesSpokenDialog && describesMusicAndSound) {
|
||||
return 'captions';
|
||||
}
|
||||
}
|
||||
|
||||
return 'subtitles';
|
||||
}
|
||||
|
||||
private onManifestLoaded(
|
||||
event: Events.MANIFEST_LOADED,
|
||||
data: ManifestLoadedData
|
||||
|
@ -533,8 +555,11 @@ export class TimelineController implements ComponentAPI {
|
|||
private _parseVTTs(frag: Fragment, payload: ArrayBuffer, vttCCs: any) {
|
||||
const hls = this.hls;
|
||||
// Parse the WebVTT file contents.
|
||||
const payloadWebVTT = frag.initSegment?.data
|
||||
? appendUint8Array(frag.initSegment.data, new Uint8Array(payload))
|
||||
: payload;
|
||||
parseWebVTT(
|
||||
payload,
|
||||
payloadWebVTT,
|
||||
this.initPTS[frag.cc],
|
||||
this.timescale[frag.cc],
|
||||
vttCCs,
|
||||
|
|
2
node_modules/hls.js/src/demux/aacdemuxer.ts
generated
vendored
2
node_modules/hls.js/src/demux/aacdemuxer.ts
generated
vendored
|
@ -79,7 +79,7 @@ class AACDemuxer extends BaseAudioDemuxer {
|
|||
track,
|
||||
data,
|
||||
offset,
|
||||
this.initPTS as number,
|
||||
this.basePTS as number,
|
||||
this.frameIndex
|
||||
);
|
||||
if (frame && frame.missing === 0) {
|
||||
|
|
36
node_modules/hls.js/src/demux/base-audio-demuxer.ts
generated
vendored
36
node_modules/hls.js/src/demux/base-audio-demuxer.ts
generated
vendored
|
@ -19,6 +19,7 @@ class BaseAudioDemuxer implements Demuxer {
|
|||
protected _id3Track!: DemuxedMetadataTrack;
|
||||
protected frameIndex: number = 0;
|
||||
protected cachedData: Uint8Array | null = null;
|
||||
protected basePTS: number | null = null;
|
||||
protected initPTS: number | null = null;
|
||||
|
||||
resetInitSegment(
|
||||
|
@ -38,9 +39,15 @@ class BaseAudioDemuxer implements Demuxer {
|
|||
};
|
||||
}
|
||||
|
||||
resetTimeStamp() {}
|
||||
resetTimeStamp(deaultTimestamp) {
|
||||
this.initPTS = deaultTimestamp;
|
||||
this.resetContiguity();
|
||||
}
|
||||
|
||||
resetContiguity(): void {}
|
||||
resetContiguity(): void {
|
||||
this.basePTS = null;
|
||||
this.frameIndex = 0;
|
||||
}
|
||||
|
||||
canParse(data: Uint8Array, offset: number): boolean {
|
||||
return false;
|
||||
|
@ -68,21 +75,24 @@ class BaseAudioDemuxer implements Demuxer {
|
|||
const timestamp = id3Data ? ID3.getTimeStamp(id3Data) : undefined;
|
||||
const length = data.length;
|
||||
|
||||
if (this.frameIndex === 0 || this.initPTS === null) {
|
||||
this.initPTS = initPTSFn(timestamp, timeOffset);
|
||||
if (
|
||||
this.basePTS === null ||
|
||||
(this.frameIndex === 0 && Number.isFinite(timestamp))
|
||||
) {
|
||||
this.basePTS = initPTSFn(timestamp, timeOffset, this.initPTS);
|
||||
}
|
||||
|
||||
// more expressive than alternative: id3Data?.length
|
||||
if (id3Data && id3Data.length > 0) {
|
||||
id3Track.samples.push({
|
||||
pts: this.initPTS,
|
||||
dts: this.initPTS,
|
||||
pts: this.basePTS,
|
||||
dts: this.basePTS,
|
||||
data: id3Data,
|
||||
type: MetadataSchema.audioId3,
|
||||
});
|
||||
}
|
||||
|
||||
pts = this.initPTS;
|
||||
pts = this.basePTS;
|
||||
|
||||
while (offset < length) {
|
||||
if (this.canParse(data, offset)) {
|
||||
|
@ -145,8 +155,6 @@ class BaseAudioDemuxer implements Demuxer {
|
|||
this.demux(cachedData, 0);
|
||||
}
|
||||
|
||||
this.frameIndex = 0;
|
||||
|
||||
return {
|
||||
audioTrack: this._audioTrack,
|
||||
videoTrack: dummyTrack() as DemuxedVideoTrack,
|
||||
|
@ -166,10 +174,12 @@ class BaseAudioDemuxer implements Demuxer {
|
|||
*/
|
||||
export const initPTSFn = (
|
||||
timestamp: number | undefined,
|
||||
timeOffset: number
|
||||
timeOffset: number,
|
||||
initPTS: number | null
|
||||
): number => {
|
||||
return Number.isFinite(timestamp as number)
|
||||
? timestamp! * 90
|
||||
: timeOffset * 90000;
|
||||
if (Number.isFinite(timestamp as number)) {
|
||||
return timestamp! * 90;
|
||||
}
|
||||
return timeOffset * 90000 + (initPTS || 0);
|
||||
};
|
||||
export default BaseAudioDemuxer;
|
||||
|
|
4
node_modules/hls.js/src/demux/mp3demuxer.ts
generated
vendored
4
node_modules/hls.js/src/demux/mp3demuxer.ts
generated
vendored
|
@ -57,14 +57,14 @@ class MP3Demuxer extends BaseAudioDemuxer {
|
|||
}
|
||||
|
||||
appendFrame(track, data, offset) {
|
||||
if (this.initPTS === null) {
|
||||
if (this.basePTS === null) {
|
||||
return;
|
||||
}
|
||||
return MpegAudio.appendFrame(
|
||||
track,
|
||||
data,
|
||||
offset,
|
||||
this.initPTS,
|
||||
this.basePTS,
|
||||
this.frameIndex
|
||||
);
|
||||
}
|
||||
|
|
15
node_modules/hls.js/src/demux/transmuxer-interface.ts
generated
vendored
15
node_modules/hls.js/src/demux/transmuxer-interface.ts
generated
vendored
|
@ -166,8 +166,14 @@ export default class TransmuxerInterface {
|
|||
const trackSwitch = !(lastFrag && chunkMeta.level === lastFrag.level);
|
||||
const snDiff = lastFrag ? chunkMeta.sn - (lastFrag.sn as number) : -1;
|
||||
const partDiff = this.part ? chunkMeta.part - this.part.index : -1;
|
||||
const progressive =
|
||||
snDiff === 0 &&
|
||||
chunkMeta.id > 1 &&
|
||||
chunkMeta.id === lastFrag?.stats.chunkCount;
|
||||
const contiguous =
|
||||
!trackSwitch && (snDiff === 1 || (snDiff === 0 && partDiff === 1));
|
||||
!trackSwitch &&
|
||||
(snDiff === 1 ||
|
||||
(snDiff === 0 && (partDiff === 1 || (progressive && partDiff <= 0))));
|
||||
const now = self.performance.now();
|
||||
|
||||
if (trackSwitch || snDiff || frag.stats.parsing.start === 0) {
|
||||
|
@ -291,6 +297,13 @@ export default class TransmuxerInterface {
|
|||
break;
|
||||
}
|
||||
|
||||
// pass logs from the worker thread to the main logger
|
||||
case 'workerLog':
|
||||
if (logger[data.data.logType]) {
|
||||
logger[data.data.logType](data.data.message);
|
||||
}
|
||||
break;
|
||||
|
||||
/* falls through */
|
||||
default: {
|
||||
data.data = data.data || {};
|
||||
|
|
17
node_modules/hls.js/src/demux/transmuxer-worker.ts
generated
vendored
17
node_modules/hls.js/src/demux/transmuxer-worker.ts
generated
vendored
|
@ -1,6 +1,6 @@
|
|||
import Transmuxer, { isPromise } from '../demux/transmuxer';
|
||||
import { Events } from '../events';
|
||||
import { enableLogs } from '../utils/logger';
|
||||
import { ILogFunction, enableLogs, logger } from '../utils/logger';
|
||||
import { EventEmitter } from 'eventemitter3';
|
||||
import type { RemuxedTrack, RemuxerResult } from '../types/remuxer';
|
||||
import type { TransmuxerResult, ChunkMetadata } from '../types/transmuxer';
|
||||
|
@ -15,6 +15,20 @@ export default function TransmuxerWorker(self) {
|
|||
observer.on(Events.FRAG_DECRYPTED, forwardMessage);
|
||||
observer.on(Events.ERROR, forwardMessage);
|
||||
|
||||
// forward logger events to main thread
|
||||
const forwardWorkerLogs = () => {
|
||||
for (const logFn in logger) {
|
||||
const func: ILogFunction = (message?) => {
|
||||
forwardMessage('workerLog', {
|
||||
logType: logFn,
|
||||
message,
|
||||
});
|
||||
};
|
||||
|
||||
logger[logFn] = func;
|
||||
}
|
||||
};
|
||||
|
||||
self.addEventListener('message', (ev) => {
|
||||
const data = ev.data;
|
||||
switch (data.cmd) {
|
||||
|
@ -28,6 +42,7 @@ export default function TransmuxerWorker(self) {
|
|||
data.id
|
||||
);
|
||||
enableLogs(config.debug);
|
||||
forwardWorkerLogs();
|
||||
forwardMessage('init', null);
|
||||
break;
|
||||
}
|
||||
|
|
15
node_modules/hls.js/src/loader/playlist-loader.ts
generated
vendored
15
node_modules/hls.js/src/loader/playlist-loader.ts
generated
vendored
|
@ -12,7 +12,7 @@
|
|||
import { Events } from '../events';
|
||||
import { ErrorDetails, ErrorTypes } from '../errors';
|
||||
import { logger } from '../utils/logger';
|
||||
import { parseSegmentIndex } from '../utils/mp4-tools';
|
||||
import { parseSegmentIndex, findBox } from '../utils/mp4-tools';
|
||||
import M3U8Parser from './m3u8-parser';
|
||||
import type { LevelParsed } from '../types/level';
|
||||
import type {
|
||||
|
@ -543,10 +543,13 @@ class PlaylistLoader {
|
|||
response: LoaderResponse,
|
||||
context: PlaylistLoaderContext
|
||||
): void {
|
||||
const sidxInfo = parseSegmentIndex(
|
||||
new Uint8Array(response.data as ArrayBuffer)
|
||||
);
|
||||
const data = new Uint8Array(response.data as ArrayBuffer);
|
||||
const sidxBox = findBox(data, ['sidx'])[0];
|
||||
// if provided fragment does not contain sidx, early return
|
||||
if (!sidxBox) {
|
||||
return;
|
||||
}
|
||||
const sidxInfo = parseSegmentIndex(sidxBox);
|
||||
if (!sidxInfo) {
|
||||
return;
|
||||
}
|
||||
|
@ -564,7 +567,9 @@ class PlaylistLoader {
|
|||
);
|
||||
}
|
||||
if (frag.initSegment) {
|
||||
frag.initSegment.setByteRange(String(sidxInfo.moovEndOffset) + '@0');
|
||||
const moovBox = findBox(data, ['moov'])[0];
|
||||
const moovEndOffset = moovBox ? moovBox.length : null;
|
||||
frag.initSegment.setByteRange(String(moovEndOffset) + '@0');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
1
node_modules/hls.js/src/types/level.ts
generated
vendored
1
node_modules/hls.js/src/types/level.ts
generated
vendored
|
@ -24,6 +24,7 @@ export interface LevelAttributes extends AttrList {
|
|||
BANDWIDTH?: string;
|
||||
BYTERANGE?: string;
|
||||
'CLOSED-CAPTIONS'?: string;
|
||||
CHARACTERISTICS?: string;
|
||||
CODECS?: string;
|
||||
DEFAULT?: string;
|
||||
FORCED?: string;
|
||||
|
|
2
node_modules/hls.js/src/utils/logger.ts
generated
vendored
2
node_modules/hls.js/src/utils/logger.ts
generated
vendored
|
@ -1,4 +1,4 @@
|
|||
interface ILogFunction {
|
||||
export interface ILogFunction {
|
||||
(message?: any, ...optionalParams: any[]): void;
|
||||
}
|
||||
|
||||
|
|
33
node_modules/hls.js/src/utils/mp4-tools.ts
generated
vendored
33
node_modules/hls.js/src/utils/mp4-tools.ts
generated
vendored
|
@ -91,22 +91,10 @@ type SidxInfo = {
|
|||
version: number;
|
||||
referencesCount: number;
|
||||
references: any[];
|
||||
moovEndOffset: number | null;
|
||||
};
|
||||
|
||||
export function parseSegmentIndex(initSegment: Uint8Array): SidxInfo | null {
|
||||
const moovBox = findBox(initSegment, ['moov']);
|
||||
const moov = moovBox[0];
|
||||
const moovEndOffset = moov ? moov.length : null; // we need this in case we need to chop of garbage of the end of current data
|
||||
|
||||
const sidxBox = findBox(initSegment, ['sidx']);
|
||||
|
||||
if (!sidxBox || !sidxBox[0]) {
|
||||
return null;
|
||||
}
|
||||
|
||||
export function parseSegmentIndex(sidx: Uint8Array): SidxInfo | null {
|
||||
const references: any[] = [];
|
||||
const sidx = sidxBox[0];
|
||||
|
||||
const version = sidx[0];
|
||||
|
||||
|
@ -179,7 +167,6 @@ export function parseSegmentIndex(initSegment: Uint8Array): SidxInfo | null {
|
|||
version,
|
||||
referencesCount,
|
||||
references,
|
||||
moovEndOffset,
|
||||
};
|
||||
}
|
||||
|
||||
|
@ -409,13 +396,19 @@ export function getDuration(data: Uint8Array, initData: InitData) {
|
|||
}
|
||||
if (videoDuration === 0 && audioDuration === 0) {
|
||||
// If duration samples are not available in the traf use sidx subsegment_duration
|
||||
const sidx = parseSegmentIndex(data);
|
||||
if (sidx?.references) {
|
||||
return sidx.references.reduce(
|
||||
(dur, ref) => dur + ref.info.duration || 0,
|
||||
0
|
||||
);
|
||||
let sidxDuration = 0;
|
||||
const sidxs = findBox(data, ['sidx']);
|
||||
for (let i = 0; i < sidxs.length; i++) {
|
||||
const sidx = parseSegmentIndex(sidxs[i]);
|
||||
if (sidx?.references) {
|
||||
sidxDuration += sidx.references.reduce(
|
||||
(dur, ref) => dur + ref.info.duration || 0,
|
||||
0
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
return sidxDuration;
|
||||
}
|
||||
if (videoDuration) {
|
||||
return videoDuration;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue