cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
848 lines (847 loc) • 1.11 MB
JavaScript
import { commonjsGlobal, getDefaultExportFromCjs } from "../../../_virtual/_commonjsHelpers.mjs";
import { h as hls } from "../../../_virtual/hls.mjs";
(function(module, exports) {
typeof window !== "undefined" && function webpackUniversalModuleDefinition(root, factory) {
module.exports = factory();
}(commonjsGlobal, () => {
return (() => {
var __webpack_modules__ = {
"./src/config.ts": (__unused_webpack_module, __webpack_exports__2, __webpack_require__2) => {
__webpack_require__2.r(__webpack_exports__2);
__webpack_require__2.d(__webpack_exports__2, {
"enableStreamingMode": () => enableStreamingMode,
"hlsDefaultConfig": () => hlsDefaultConfig,
"mergeConfig": () => mergeConfig
});
var _controller_abr_controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/controller/abr-controller.ts");
var _controller_audio_stream_controller__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/controller/audio-stream-controller.ts");
var _controller_audio_track_controller__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/controller/audio-track-controller.ts");
var _controller_subtitle_stream_controller__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/controller/subtitle-stream-controller.ts");
var _controller_subtitle_track_controller__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/controller/subtitle-track-controller.ts");
var _controller_buffer_controller__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/controller/buffer-controller.ts");
var _controller_timeline_controller__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/controller/timeline-controller.ts");
var _controller_cap_level_controller__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__2("./src/controller/cap-level-controller.ts");
var _controller_fps_controller__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__2("./src/controller/fps-controller.ts");
var _controller_eme_controller__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__2("./src/controller/eme-controller.ts");
var _controller_cmcd_controller__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__2("./src/controller/cmcd-controller.ts");
var _utils_xhr_loader__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__2("./src/utils/xhr-loader.ts");
var _utils_fetch_loader__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__2("./src/utils/fetch-loader.ts");
var _utils_cues__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__2("./src/utils/cues.ts");
var _utils_mediakeys_helper__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__2("./src/utils/mediakeys-helper.ts");
var _utils_logger__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__2("./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);
}
function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
enumerableOnly && (symbols = symbols.filter(function(sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
})), keys.push.apply(keys, symbols);
}
return keys;
}
function _objectSpread(target) {
for (var i = 1; i < arguments.length; i++) {
var source = null != arguments[i] ? arguments[i] : {};
i % 2 ? ownKeys(Object(source), true).forEach(function(key) {
_defineProperty(target, key, source[key]);
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function(key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
return target;
}
function _defineProperty(obj, key, value) {
key = _toPropertyKey(key);
if (key in obj) {
Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true });
} else {
obj[key] = value;
}
return obj;
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, "string");
return typeof key === "symbol" ? key : String(key);
}
function _toPrimitive(input, hint) {
if (typeof input !== "object" || input === null)
return input;
var prim = input[Symbol.toPrimitive];
if (prim !== void 0) {
var res = prim.call(input, hint || "default");
if (typeof res !== "object")
return res;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (hint === "string" ? String : Number)(input);
}
var hlsDefaultConfig = _objectSpread(_objectSpread({
autoStartLoad: true,
startPosition: -1,
defaultAudioCodec: void 0,
debug: false,
capLevelOnFPSDrop: false,
capLevelToPlayerSize: false,
ignoreDevicePixelRatio: false,
initialLiveManifestSize: 1,
maxBufferLength: 30,
backBufferLength: Infinity,
maxBufferSize: 60 * 1e3 * 1e3,
maxBufferHole: 0.1,
highBufferWatchdogPeriod: 2,
nudgeOffset: 0.1,
nudgeMaxRetry: 3,
maxFragLookUpTolerance: 0.25,
liveSyncDurationCount: 3,
liveMaxLatencyDurationCount: Infinity,
liveSyncDuration: void 0,
liveMaxLatencyDuration: void 0,
maxLiveSyncPlaybackRate: 1,
liveDurationInfinity: false,
liveBackBufferLength: null,
maxMaxBufferLength: 600,
enableWorker: true,
enableSoftwareAES: true,
manifestLoadingTimeOut: 1e4,
manifestLoadingMaxRetry: 1,
manifestLoadingRetryDelay: 1e3,
manifestLoadingMaxRetryTimeout: 64e3,
startLevel: void 0,
levelLoadingTimeOut: 1e4,
levelLoadingMaxRetry: 4,
levelLoadingRetryDelay: 1e3,
levelLoadingMaxRetryTimeout: 64e3,
fragLoadingTimeOut: 2e4,
fragLoadingMaxRetry: 6,
fragLoadingRetryDelay: 1e3,
fragLoadingMaxRetryTimeout: 64e3,
startFragPrefetch: false,
fpsDroppedMonitoringPeriod: 5e3,
fpsDroppedMonitoringThreshold: 0.2,
appendErrorMaxRetry: 3,
loader: _utils_xhr_loader__WEBPACK_IMPORTED_MODULE_11__["default"],
fLoader: void 0,
pLoader: void 0,
xhrSetup: void 0,
licenseXhrSetup: void 0,
licenseResponseCallback: void 0,
abrController: _controller_abr_controller__WEBPACK_IMPORTED_MODULE_0__["default"],
bufferController: _controller_buffer_controller__WEBPACK_IMPORTED_MODULE_5__["default"],
capLevelController: _controller_cap_level_controller__WEBPACK_IMPORTED_MODULE_7__["default"],
fpsController: _controller_fps_controller__WEBPACK_IMPORTED_MODULE_8__["default"],
stretchShortVideoTrack: false,
maxAudioFramesDrift: 1,
forceKeyFrameOnDiscontinuity: true,
abrEwmaFastLive: 3,
abrEwmaSlowLive: 9,
abrEwmaFastVoD: 3,
abrEwmaSlowVoD: 9,
abrEwmaDefaultEstimate: 5e5,
abrBandWidthFactor: 0.95,
abrBandWidthUpFactor: 0.7,
abrMaxWithRealBitrate: false,
maxStarvationDelay: 4,
maxLoadingDelay: 4,
minAutoBitrate: 0,
emeEnabled: false,
widevineLicenseUrl: void 0,
drmSystems: {},
drmSystemOptions: {},
requestMediaKeySystemAccessFunc: _utils_mediakeys_helper__WEBPACK_IMPORTED_MODULE_14__.requestMediaKeySystemAccess,
testBandwidth: true,
progressive: false,
lowLatencyMode: true,
cmcd: void 0,
enableDateRangeMetadataCues: true,
enableEmsgMetadataCues: true,
enableID3MetadataCues: true
}, timelineConfig()), {}, {
subtitleStreamController: _controller_subtitle_stream_controller__WEBPACK_IMPORTED_MODULE_3__.SubtitleStreamController,
subtitleTrackController: _controller_subtitle_track_controller__WEBPACK_IMPORTED_MODULE_4__["default"],
timelineController: _controller_timeline_controller__WEBPACK_IMPORTED_MODULE_6__.TimelineController,
audioStreamController: _controller_audio_stream_controller__WEBPACK_IMPORTED_MODULE_1__["default"],
audioTrackController: _controller_audio_track_controller__WEBPACK_IMPORTED_MODULE_2__["default"],
emeController: _controller_eme_controller__WEBPACK_IMPORTED_MODULE_9__["default"],
cmcdController: _controller_cmcd_controller__WEBPACK_IMPORTED_MODULE_10__["default"]
});
function timelineConfig() {
return {
cueHandler: _utils_cues__WEBPACK_IMPORTED_MODULE_13__["default"],
enableWebVTT: true,
enableIMSC1: true,
enableCEA708Captions: true,
captionsTextTrack1Label: "English",
captionsTextTrack1LanguageCode: "en",
captionsTextTrack2Label: "Spanish",
captionsTextTrack2LanguageCode: "es",
captionsTextTrack3Label: "Unknown CC",
captionsTextTrack3LanguageCode: "",
captionsTextTrack4Label: "Unknown CC",
captionsTextTrack4LanguageCode: "",
renderTextTracksNatively: true
};
}
function mergeConfig(defaultConfig, userConfig) {
if ((userConfig.liveSyncDurationCount || userConfig.liveMaxLatencyDurationCount) && (userConfig.liveSyncDuration || userConfig.liveMaxLatencyDuration)) {
throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");
}
if (userConfig.liveMaxLatencyDurationCount !== void 0 && (userConfig.liveSyncDurationCount === void 0 || userConfig.liveMaxLatencyDurationCount <= userConfig.liveSyncDurationCount)) {
throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be greater than "liveSyncDurationCount"');
}
if (userConfig.liveMaxLatencyDuration !== void 0 && (userConfig.liveSyncDuration === void 0 || userConfig.liveMaxLatencyDuration <= userConfig.liveSyncDuration)) {
throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be greater than "liveSyncDuration"');
}
return _extends({}, defaultConfig, userConfig);
}
function enableStreamingMode(config) {
var currentLoader = config.loader;
if (currentLoader !== _utils_fetch_loader__WEBPACK_IMPORTED_MODULE_12__["default"] && currentLoader !== _utils_xhr_loader__WEBPACK_IMPORTED_MODULE_11__["default"]) {
_utils_logger__WEBPACK_IMPORTED_MODULE_15__.logger.log("[config]: Custom loader detected, cannot enable progressive streaming");
config.progressive = false;
} else {
var canStreamProgressively = (0, _utils_fetch_loader__WEBPACK_IMPORTED_MODULE_12__.fetchSupported)();
if (canStreamProgressively) {
config.loader = _utils_fetch_loader__WEBPACK_IMPORTED_MODULE_12__["default"];
config.progressive = true;
config.enableSoftwareAES = true;
_utils_logger__WEBPACK_IMPORTED_MODULE_15__.logger.log("[config]: Progressive streaming enabled, using FetchLoader");
}
}
}
},
"./src/controller/abr-controller.ts": (__unused_webpack_module, __webpack_exports__2, __webpack_require__2) => {
__webpack_require__2.r(__webpack_exports__2);
__webpack_require__2.d(__webpack_exports__2, {
"default": () => __WEBPACK_DEFAULT_EXPORT__
});
var _home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/polyfills/number.ts");
var _utils_ewma_bandwidth_estimator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/utils/ewma-bandwidth-estimator.ts");
var _events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/events.ts");
var _errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/errors.ts");
var _types_loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/types/loader.ts");
var _utils_logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/utils/logger.ts");
function _defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];
descriptor.enumerable = descriptor.enumerable || false;
descriptor.configurable = true;
if ("value" in descriptor)
descriptor.writable = true;
Object.defineProperty(target, _toPropertyKey(descriptor.key), descriptor);
}
}
function _createClass(Constructor, protoProps, staticProps) {
if (protoProps)
_defineProperties(Constructor.prototype, protoProps);
if (staticProps)
_defineProperties(Constructor, staticProps);
Object.defineProperty(Constructor, "prototype", { writable: false });
return Constructor;
}
function _toPropertyKey(arg) {
var key = _toPrimitive(arg, "string");
return typeof key === "symbol" ? key : String(key);
}
function _toPrimitive(input, hint) {
if (typeof input !== "object" || input === null)
return input;
var prim = input[Symbol.toPrimitive];
if (prim !== void 0) {
var res = prim.call(input, hint || "default");
if (typeof res !== "object")
return res;
throw new TypeError("@@toPrimitive must return a primitive value.");
}
return (hint === "string" ? String : Number)(input);
}
var AbrController = /* @__PURE__ */ function() {
function AbrController2(hls2) {
this.hls = void 0;
this.lastLoadedFragLevel = 0;
this._nextAutoLevel = -1;
this.timer = void 0;
this.onCheck = this._abandonRulesCheck.bind(this);
this.fragCurrent = null;
this.partCurrent = null;
this.bitrateTestDelay = 0;
this.bwEstimator = void 0;
this.hls = hls2;
var config = hls2.config;
this.bwEstimator = new _utils_ewma_bandwidth_estimator__WEBPACK_IMPORTED_MODULE_1__["default"](config.abrEwmaSlowVoD, config.abrEwmaFastVoD, config.abrEwmaDefaultEstimate);
this.registerListeners();
}
var _proto = AbrController2.prototype;
_proto.registerListeners = function registerListeners() {
var hls2 = this.hls;
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_LOADING, this.onFragLoading, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_LOADED, this.onFragLoaded, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_BUFFERED, this.onFragBuffered, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.LEVEL_LOADED, this.onLevelLoaded, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.ERROR, this.onError, this);
};
_proto.unregisterListeners = function unregisterListeners() {
var hls2 = this.hls;
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_LOADING, this.onFragLoading, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_LOADED, this.onFragLoaded, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_BUFFERED, this.onFragBuffered, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.LEVEL_LOADED, this.onLevelLoaded, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.ERROR, this.onError, this);
};
_proto.destroy = function destroy() {
this.unregisterListeners();
this.clearTimer();
this.hls = this.onCheck = null;
this.fragCurrent = this.partCurrent = null;
};
_proto.onFragLoading = function onFragLoading(event, data) {
var frag = data.frag;
if (frag.type === _types_loader__WEBPACK_IMPORTED_MODULE_4__.PlaylistLevelType.MAIN) {
if (!this.timer) {
var _data$part;
this.fragCurrent = frag;
this.partCurrent = (_data$part = data.part) != null ? _data$part : null;
this.timer = self.setInterval(this.onCheck, 100);
}
}
};
_proto.onLevelLoaded = function onLevelLoaded(event, data) {
var config = this.hls.config;
if (data.details.live) {
this.bwEstimator.update(config.abrEwmaSlowLive, config.abrEwmaFastLive);
} else {
this.bwEstimator.update(config.abrEwmaSlowVoD, config.abrEwmaFastVoD);
}
};
_proto._abandonRulesCheck = function _abandonRulesCheck() {
var frag = this.fragCurrent, part = this.partCurrent, hls2 = this.hls;
var autoLevelEnabled = hls2.autoLevelEnabled, media = hls2.media;
if (!frag || !media) {
return;
}
var stats = part ? part.stats : frag.stats;
var duration = part ? part.duration : frag.duration;
if (stats.aborted || stats.loaded && stats.loaded === stats.total || frag.level === 0) {
this.clearTimer();
this._nextAutoLevel = -1;
return;
}
if (!autoLevelEnabled || media.paused || !media.playbackRate || !media.readyState) {
return;
}
var bufferInfo = hls2.mainForwardBufferInfo;
if (bufferInfo === null) {
return;
}
var requestDelay = performance.now() - stats.loading.start;
var playbackRate = Math.abs(media.playbackRate);
if (requestDelay <= 500 * duration / playbackRate) {
return;
}
var loadedFirstByte = stats.loaded && stats.loading.first;
var bwEstimate = this.bwEstimator.getEstimate();
var levels = hls2.levels, minAutoLevel = hls2.minAutoLevel;
var level = levels[frag.level];
var expectedLen = stats.total || Math.max(stats.loaded, Math.round(duration * level.maxBitrate / 8));
var loadRate = loadedFirstByte ? stats.loaded * 1e3 / requestDelay : 0;
var fragLoadedDelay = loadRate ? (expectedLen - stats.loaded) / loadRate : expectedLen * 8 / bwEstimate;
var bufferStarvationDelay = bufferInfo.len / playbackRate;
if (fragLoadedDelay <= bufferStarvationDelay) {
return;
}
var fragLevelNextLoadedDelay = Number.POSITIVE_INFINITY;
var nextLoadLevel;
for (nextLoadLevel = frag.level - 1; nextLoadLevel > minAutoLevel; nextLoadLevel--) {
var levelNextBitrate = levels[nextLoadLevel].maxBitrate;
fragLevelNextLoadedDelay = loadRate ? duration * levelNextBitrate / (8 * 0.8 * loadRate) : duration * levelNextBitrate / bwEstimate;
if (fragLevelNextLoadedDelay < bufferStarvationDelay) {
break;
}
}
if (fragLevelNextLoadedDelay >= fragLoadedDelay) {
return;
}
_utils_logger__WEBPACK_IMPORTED_MODULE_5__.logger.warn("Fragment " + frag.sn + (part ? " part " + part.index : "") + " of level " + frag.level + " is loading too slowly and will cause an underbuffer; aborting and switching to level " + nextLoadLevel + "\n Current BW estimate: " + ((0, _home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__.isFiniteNumber)(bwEstimate) ? (bwEstimate / 1024).toFixed(3) : "Unknown") + " Kb/s\n Estimated load time for current fragment: " + fragLoadedDelay.toFixed(3) + " s\n Estimated load time for the next fragment: " + fragLevelNextLoadedDelay.toFixed(3) + " s\n Time to underbuffer: " + bufferStarvationDelay.toFixed(3) + " s");
hls2.nextLoadLevel = nextLoadLevel;
if (loadedFirstByte) {
this.bwEstimator.sample(requestDelay, stats.loaded);
}
this.clearTimer();
if (frag.loader || frag.keyLoader) {
this.fragCurrent = this.partCurrent = null;
frag.abortRequests();
}
hls2.trigger(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_LOAD_EMERGENCY_ABORTED, {
frag,
part,
stats
});
};
_proto.onFragLoaded = function onFragLoaded(event, _ref) {
var frag = _ref.frag, part = _ref.part;
if (frag.type === _types_loader__WEBPACK_IMPORTED_MODULE_4__.PlaylistLevelType.MAIN && (0, _home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__.isFiniteNumber)(frag.sn)) {
var stats = part ? part.stats : frag.stats;
var duration = part ? part.duration : frag.duration;
this.clearTimer();
this.lastLoadedFragLevel = frag.level;
this._nextAutoLevel = -1;
if (this.hls.config.abrMaxWithRealBitrate) {
var level = this.hls.levels[frag.level];
var loadedBytes = (level.loaded ? level.loaded.bytes : 0) + stats.loaded;
var loadedDuration = (level.loaded ? level.loaded.duration : 0) + duration;
level.loaded = {
bytes: loadedBytes,
duration: loadedDuration
};
level.realBitrate = Math.round(8 * loadedBytes / loadedDuration);
}
if (frag.bitrateTest) {
var fragBufferedData = {
stats,
frag,
part,
id: frag.type
};
this.onFragBuffered(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_BUFFERED, fragBufferedData);
}
}
};
_proto.onFragBuffered = function onFragBuffered(event, data) {
var frag = data.frag, part = data.part;
var stats = part ? part.stats : frag.stats;
if (stats.aborted) {
return;
}
if (frag.type !== _types_loader__WEBPACK_IMPORTED_MODULE_4__.PlaylistLevelType.MAIN || frag.sn === "initSegment") {
return;
}
var processingMs = stats.parsing.end - stats.loading.start;
this.bwEstimator.sample(processingMs, stats.loaded);
stats.bwEstimate = this.bwEstimator.getEstimate();
if (frag.bitrateTest) {
this.bitrateTestDelay = processingMs / 1e3;
} else {
this.bitrateTestDelay = 0;
}
};
_proto.onError = function onError(event, data) {
var _data$frag;
if (((_data$frag = data.frag) === null || _data$frag === void 0 ? void 0 : _data$frag.type) === _types_loader__WEBPACK_IMPORTED_MODULE_4__.PlaylistLevelType.MAIN) {
if (data.type === _errors__WEBPACK_IMPORTED_MODULE_3__.ErrorTypes.KEY_SYSTEM_ERROR) {
this.clearTimer();
return;
}
switch (data.details) {
case _errors__WEBPACK_IMPORTED_MODULE_3__.ErrorDetails.FRAG_LOAD_ERROR:
case _errors__WEBPACK_IMPORTED_MODULE_3__.ErrorDetails.FRAG_LOAD_TIMEOUT:
case _errors__WEBPACK_IMPORTED_MODULE_3__.ErrorDetails.KEY_LOAD_ERROR:
case _errors__WEBPACK_IMPORTED_MODULE_3__.ErrorDetails.KEY_LOAD_TIMEOUT:
this.clearTimer();
break;
}
}
};
_proto.clearTimer = function clearTimer() {
self.clearInterval(this.timer);
this.timer = void 0;
};
_proto.getNextABRAutoLevel = function getNextABRAutoLevel() {
var fragCurrent = this.fragCurrent, partCurrent = this.partCurrent, hls2 = this.hls;
var maxAutoLevel = hls2.maxAutoLevel, config = hls2.config, minAutoLevel = hls2.minAutoLevel, media = hls2.media;
var currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;
var playbackRate = media && media.playbackRate !== 0 ? Math.abs(media.playbackRate) : 1;
var avgbw = this.bwEstimator ? this.bwEstimator.getEstimate() : config.abrEwmaDefaultEstimate;
var bufferInfo = hls2.mainForwardBufferInfo;
var bufferStarvationDelay = (bufferInfo ? bufferInfo.len : 0) / playbackRate;
var bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, config.abrBandWidthFactor, config.abrBandWidthUpFactor);
if (bestLevel >= 0) {
return bestLevel;
}
_utils_logger__WEBPACK_IMPORTED_MODULE_5__.logger.trace((bufferStarvationDelay ? "rebuffering expected" : "buffer is empty") + ", finding optimal quality level");
var maxStarvationDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxStarvationDelay) : config.maxStarvationDelay;
var bwFactor = config.abrBandWidthFactor;
var bwUpFactor = config.abrBandWidthUpFactor;
if (!bufferStarvationDelay) {
var bitrateTestDelay = this.bitrateTestDelay;
if (bitrateTestDelay) {
var maxLoadingDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxLoadingDelay) : config.maxLoadingDelay;
maxStarvationDelay = maxLoadingDelay - bitrateTestDelay;
_utils_logger__WEBPACK_IMPORTED_MODULE_5__.logger.trace("bitrate test took " + Math.round(1e3 * bitrateTestDelay) + "ms, set first fragment max fetchDuration to " + Math.round(1e3 * maxStarvationDelay) + " ms");
bwFactor = bwUpFactor = 1;
}
}
bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay + maxStarvationDelay, bwFactor, bwUpFactor);
return Math.max(bestLevel, 0);
};
_proto.findBestLevel = function findBestLevel(currentBw, minAutoLevel, maxAutoLevel, maxFetchDuration, bwFactor, bwUpFactor) {
var _level$details;
var fragCurrent = this.fragCurrent, partCurrent = this.partCurrent, currentLevel = this.lastLoadedFragLevel;
var levels = this.hls.levels;
var level = levels[currentLevel];
var live = !!(level !== null && level !== void 0 && (_level$details = level.details) !== null && _level$details !== void 0 && _level$details.live);
var currentCodecSet = level === null || level === void 0 ? void 0 : level.codecSet;
var currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;
for (var i = maxAutoLevel; i >= minAutoLevel; i--) {
var levelInfo = levels[i];
if (!levelInfo || currentCodecSet && levelInfo.codecSet !== currentCodecSet) {
continue;
}
var levelDetails = levelInfo.details;
var avgDuration = (partCurrent ? levelDetails === null || levelDetails === void 0 ? void 0 : levelDetails.partTarget : levelDetails === null || levelDetails === void 0 ? void 0 : levelDetails.averagetargetduration) || currentFragDuration;
var adjustedbw = void 0;
if (i <= currentLevel) {
adjustedbw = bwFactor * currentBw;
} else {
adjustedbw = bwUpFactor * currentBw;
}
var bitrate = levels[i].maxBitrate;
var fetchDuration = bitrate * avgDuration / adjustedbw;
_utils_logger__WEBPACK_IMPORTED_MODULE_5__.logger.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: " + i + "/" + Math.round(adjustedbw) + "/" + bitrate + "/" + avgDuration + "/" + maxFetchDuration + "/" + fetchDuration);
if (adjustedbw > bitrate && (fetchDuration === 0 || !(0, _home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__.isFiniteNumber)(fetchDuration) || live && !this.bitrateTestDelay || fetchDuration < maxFetchDuration)) {
return i;
}
}
return -1;
};
_createClass(AbrController2, [{
key: "nextAutoLevel",
get: function get() {
var forcedAutoLevel = this._nextAutoLevel;
var bwEstimator = this.bwEstimator;
if (forcedAutoLevel !== -1 && !bwEstimator.canEstimate()) {
return forcedAutoLevel;
}
var nextABRAutoLevel = this.getNextABRAutoLevel();
if (forcedAutoLevel !== -1 && this.hls.levels[nextABRAutoLevel].loadError) {
return forcedAutoLevel;
}
if (forcedAutoLevel !== -1) {
nextABRAutoLevel = Math.min(forcedAutoLevel, nextABRAutoLevel);
}
return nextABRAutoLevel;
},
set: function set(nextLevel) {
this._nextAutoLevel = nextLevel;
}
}]);
return AbrController2;
}();
const __WEBPACK_DEFAULT_EXPORT__ = AbrController;
},
"./src/controller/audio-stream-controller.ts": (__unused_webpack_module, __webpack_exports__2, __webpack_require__2) => {
__webpack_require__2.r(__webpack_exports__2);
__webpack_require__2.d(__webpack_exports__2, {
"default": () => __WEBPACK_DEFAULT_EXPORT__
});
var _home_runner_work_hls_js_hls_js_src_polyfills_number__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__2("./src/polyfills/number.ts");
var _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__2("./src/controller/base-stream-controller.ts");
var _events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__2("./src/events.ts");
var _utils_buffer_helper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__2("./src/utils/buffer-helper.ts");
var _fragment_tracker__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__2("./src/controller/fragment-tracker.ts");
var _types_level__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__2("./src/types/level.ts");
var _types_loader__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__2("./src/types/loader.ts");
var _loader_fragment__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__2("./src/loader/fragment.ts");
var _demux_chunk_cache__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__2("./src/demux/chunk-cache.ts");
var _demux_transmuxer_interface__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__2("./src/demux/transmuxer-interface.ts");
var _types_transmuxer__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__2("./src/types/transmuxer.ts");
var _fragment_finders__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__2("./src/controller/fragment-finders.ts");
var _utils_discontinuities__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__2("./src/utils/discontinuities.ts");
var _errors__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__2("./src/errors.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);
}
function _inheritsLoose(subClass, superClass) {
subClass.prototype = Object.create(superClass.prototype);
subClass.prototype.constructor = subClass;
_setPrototypeOf(subClass, superClass);
}
function _setPrototypeOf(o, p) {
_setPrototypeOf = Object.setPrototypeOf ? Object.setPrototypeOf.bind() : function _setPrototypeOf2(o2, p2) {
o2.__proto__ = p2;
return o2;
};
return _setPrototypeOf(o, p);
}
var TICK_INTERVAL = 100;
var AudioStreamController = /* @__PURE__ */ function(_BaseStreamController) {
_inheritsLoose(AudioStreamController2, _BaseStreamController);
function AudioStreamController2(hls2, fragmentTracker, keyLoader) {
var _this;
_this = _BaseStreamController.call(this, hls2, fragmentTracker, keyLoader, "[audio-stream-controller]") || this;
_this.videoBuffer = null;
_this.videoTrackCC = -1;
_this.waitingVideoCC = -1;
_this.audioSwitch = false;
_this.trackId = -1;
_this.waitingData = null;
_this.mainDetails = null;
_this.bufferFlushed = false;
_this.cachedTrackLoadedData = null;
_this._registerListeners();
return _this;
}
var _proto = AudioStreamController2.prototype;
_proto.onHandlerDestroying = function onHandlerDestroying() {
this._unregisterListeners();
this.mainDetails = null;
};
_proto._registerListeners = function _registerListeners() {
var hls2 = this.hls;
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.MEDIA_ATTACHED, this.onMediaAttached, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.MEDIA_DETACHING, this.onMediaDetaching, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.MANIFEST_LOADING, this.onManifestLoading, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.LEVEL_LOADED, this.onLevelLoaded, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.ERROR, this.onError, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.BUFFER_RESET, this.onBufferReset, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.BUFFER_CREATED, this.onBufferCreated, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.BUFFER_FLUSHED, this.onBufferFlushed, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.INIT_PTS_FOUND, this.onInitPtsFound, this);
hls2.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_BUFFERED, this.onFragBuffered, this);
};
_proto._unregisterListeners = function _unregisterListeners() {
var hls2 = this.hls;
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.MEDIA_ATTACHED, this.onMediaAttached, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.MEDIA_DETACHING, this.onMediaDetaching, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.MANIFEST_LOADING, this.onManifestLoading, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.LEVEL_LOADED, this.onLevelLoaded, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.ERROR, this.onError, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.BUFFER_RESET, this.onBufferReset, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.BUFFER_CREATED, this.onBufferCreated, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.BUFFER_FLUSHED, this.onBufferFlushed, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.INIT_PTS_FOUND, this.onInitPtsFound, this);
hls2.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_BUFFERED, this.onFragBuffered, this);
};
_proto.onInitPtsFound = function onInitPtsFound(event, _ref) {
var frag = _ref.frag, id = _ref.id, initPTS = _ref.initPTS;
if (id === "main") {
var cc = frag.cc;
this.initPTS[frag.cc] = initPTS;
this.log("InitPTS for cc: " + cc + " found from main: " + initPTS);
this.videoTrackCC = cc;
if (this.state === _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.WAITING_INIT_PTS) {
this.tick();
}
}
};
_proto.startLoad = function startLoad(startPosition) {
if (!this.levels) {
this.startPosition = startPosition;
this.state = _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.STOPPED;
return;
}
var lastCurrentTime = this.lastCurrentTime;
this.stopLoad();
this.setInterval(TICK_INTERVAL);
this.fragLoadError = 0;
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;
this.state = _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.WAITING_TRACK;
}
this.nextLoadPosition = this.startPosition = this.lastCurrentTime = startPosition;
this.tick();
};
_proto.doTick = function doTick() {
switch (this.state) {
case _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.IDLE:
this.doTickIdle();
break;
case _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.WAITING_TRACK: {
var _levels$trackId;
var levels = this.levels, trackId = this.trackId;
var details = levels === null || levels === void 0 ? void 0 : (_levels$trackId = levels[trackId]) === null || _levels$trackId === void 0 ? void 0 : _levels$trackId.details;
if (details) {
if (this.waitForCdnTuneIn(details)) {
break;
}
this.state = _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.WAITING_INIT_PTS;
}
break;
}
case _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.FRAG_LOADING_WAITING_RETRY: {
var _this$media;
var now = performance.now();
var retryDate = this.retryDate;
if (!retryDate || now >= retryDate || (_this$media = this.media) !== null && _this$media !== void 0 && _this$media.seeking) {
this.log("RetryDate reached, switch back to IDLE state");
this.resetStartWhenNotLoaded(this.trackId);
this.state = _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.IDLE;
}
break;
}
case _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.WAITING_INIT_PTS: {
var waitingData = this.waitingData;
if (waitingData) {
var frag = waitingData.frag, part = waitingData.part, cache = waitingData.cache, complete = waitingData.complete;
if (this.initPTS[frag.cc] !== void 0) {
this.waitingData = null;
this.waitingVideoCC = -1;
this.state = _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.FRAG_LOADING;
var payload = cache.flush();
var data = {
frag,
part,
payload,
networkDetails: null
};
this._handleFragmentLoadProgress(data);
if (complete) {
_BaseStreamController.prototype._handleFragmentLoadComplete.call(this, data);
}
} else if (this.videoTrackCC !== this.waitingVideoCC) {
this.log("Waiting fragment cc (" + frag.cc + ") cancelled because video is at cc " + this.videoTrackCC);
this.clearWaitingFragment();
} else {
var pos = this.getLoadPosition();
var bufferInfo = _utils_buffer_helper__WEBPACK_IMPORTED_MODULE_3__.BufferHelper.bufferInfo(this.mediaBuffer, pos, this.config.maxBufferHole);
var waitingFragmentAtPosition = (0, _fragment_finders__WEBPACK_IMPORTED_MODULE_11__.fragmentWithinToleranceTest)(bufferInfo.end, this.config.maxFragLookUpTolerance, frag);
if (waitingFragmentAtPosition < 0) {
this.log("Waiting fragment cc (" + frag.cc + ") @ " + frag.start + " cancelled because another fragment at " + bufferInfo.end + " is needed");
this.clearWaitingFragment();
}
}
} else {
this.state = _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.IDLE;
}
}
}
this.onTickEnd();
};
_proto.clearWaitingFragment = function clearWaitingFragment() {
var waitingData = this.waitingData;
if (waitingData) {
this.fragmentTracker.removeFragment(waitingData.frag);
this.waitingData = null;
this.waitingVideoCC = -1;
this.state = _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.IDLE;
}
};
_proto.resetLoadingState = function resetLoadingState() {
this.clearWaitingFragment();
_BaseStreamController.prototype.resetLoadingState.call(this);
};
_proto.onTickEnd = function onTickEnd() {
var media = this.media;
if (!media || !media.readyState) {
return;
}
this.lastCurrentTime = media.currentTime;
};
_proto.doTickIdle = function doTickIdle() {
var hls2 = this.hls, levels = this.levels, media = this.media, trackId = this.trackId;
var config = hls2.config;
if (!levels || !levels[trackId]) {
return;
}
if (!media && (this.startFragRequested || !config.startFragPrefetch)) {
return;
}
var levelInfo = levels[trackId];
var trackDetails = levelInfo.details;
if (!trackDetails || trackDetails.live && this.levelLastLoaded !== trackId || this.waitForCdnTuneIn(trackDetails)) {
this.state = _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.WAITING_TRACK;
return;
}
var bufferable = this.mediaBuffer ? this.mediaBuffer : this.media;
if (this.bufferFlushed && bufferable) {
this.bufferFlushed = false;
this.afterBufferFlushed(bufferable, _loader_fragment__WEBPACK_IMPORTED_MODULE_7__.ElementaryStreamTypes.AUDIO, _types_loader__WEBPACK_IMPORTED_MODULE_6__.PlaylistLevelType.AUDIO);
}
var bufferInfo = this.getFwdBufferInfo(bufferable, _types_loader__WEBPACK_IMPORTED_MODULE_6__.PlaylistLevelType.AUDIO);
if (bufferInfo === null) {
return;
}
var audioSwitch = this.audioSwitch;
if (!audioSwitch && this._streamEnded(bufferInfo, trackDetails)) {
hls2.trigger(_events__WEBPACK_IMPORTED_MODULE_2__.Events.BUFFER_EOS, {
type: "audio"
});
this.state = _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__.State.ENDED;
return;
}
var mainBufferInfo = this.getFwdBufferInfo(this.videoBuffer ? this.videoBuffer : this.media, _types_loader__WEBPACK_IMPORTED_MODULE_6__.PlaylistLevelType.MAIN);
var bufferLen = bufferInfo.len;
var maxBufLen = this.getMaxBufferLength(mainBufferInfo === null || mainBufferInfo === void 0 ? void 0 : mainBufferInfo.len);
if (bufferLen >= maxBufLen && !audioSwitch) {
return;
}
var fragments = trackDetails.fragments;
var start = fragments[0].start;
var targetBufferTime = bufferInfo.end;
if (audioSwitch && media) {
var pos = this.getLoadPosition();
targetBufferTime = pos;
if (trackDetails.PTSKnown && pos < start) {
if (bufferInfo.end > start || bufferInfo.nextStart) {
this.log("Alt audio track ahead of main track, seek to start of alt audio track");
media.currentTime = start + 0.05;
}
}
}
if (mainBufferInfo && targetBufferTime > mainBufferInfo.end + trackDetails.targetduration) {
return;
}
if ((!mainBufferInfo || !mainBufferInfo.len) && bufferInfo.len) {
return;
}
var frag = this.getNextFragment(targetBufferTime, trackDetails);
if (!frag) {
this.bufferFlushed = true;
return;
}
this.loadFragment(frag, trackDetails, targetBufferTime);
};
_proto.getMaxBufferLength = function getMaxBufferLength(mainBufferLength) {
var maxConfigBuffer = _BaseStreamController.prototype.getMaxBufferLength.call(this);
if (!mainBufferLength) {
return maxConfigBuffer;
}
return Math.max(maxConfigBuffer, mainBufferLength);
};
_proto.onMediaDetaching = function onMediaDetaching() {
this.videoBuffer = null;
_BaseStreamController.prototype.onMediaDetaching.call(this);
};
_proto.onAudioTracksUpdated = function onAudioTracksUpdated(event, _ref2) {
var audioTracks = _ref2.audioTracks;
this.resetTransmuxer();
this.levels = audioTracks.map(function(mediaPlaylist) {
return new _types_level__WEBPACK_IMPORTED_MODULE_5__.Level(mediaPlaylist);
});
};
_proto.onAudioTrackSwitching = function onAudioTrackSwitching(event, data) {
var altAudio = !!data.url;
this.trackId = data.id;