UNPKG

cione-comp-lib

Version:

`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`

848 lines (847 loc) 1.11 MB
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;