UNPKG

cione-comp-lib

Version:

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

890 lines (889 loc) 1.18 MB
import { getDefaultExportFromCjs } from "../../../_virtual/_commonjsHelpers.mjs"; import { d as dist$1 } from "../../../_virtual/index3.mjs"; import "../../xgplayer/dist/index.mjs"; import { d as dist } from "../../../_virtual/index.mjs"; (function(module, exports) { (function webpackUniversalModuleDefinition(root, factory) { module.exports = factory(dist.exports); })(window, function(__WEBPACK_EXTERNAL_MODULE__2__) { return function(modules2) { var installedModules = {}; function __webpack_require__(moduleId) { if (installedModules[moduleId]) { return installedModules[moduleId].exports; } var module2 = installedModules[moduleId] = { i: moduleId, l: false, exports: {} }; modules2[moduleId].call(module2.exports, module2, module2.exports, __webpack_require__); module2.l = true; return module2.exports; } __webpack_require__.m = modules2; __webpack_require__.c = installedModules; __webpack_require__.d = function(exports2, name, getter) { if (!__webpack_require__.o(exports2, name)) { Object.defineProperty(exports2, name, { enumerable: true, get: getter }); } }; __webpack_require__.r = function(exports2) { if (typeof Symbol !== "undefined" && Symbol.toStringTag) { Object.defineProperty(exports2, Symbol.toStringTag, { value: "Module" }); } Object.defineProperty(exports2, "__esModule", { value: true }); }; __webpack_require__.t = function(value, mode) { if (mode & 1) value = __webpack_require__(value); if (mode & 8) return value; if (mode & 4 && typeof value === "object" && value && value.__esModule) return value; var ns = /* @__PURE__ */ Object.create(null); __webpack_require__.r(ns); Object.defineProperty(ns, "default", { enumerable: true, value }); if (mode & 2 && typeof value != "string") for (var key in value) __webpack_require__.d(ns, key, function(key2) { return value[key2]; }.bind(null, key)); return ns; }; __webpack_require__.n = function(module2) { var getter = module2 && module2.__esModule ? function getDefault() { return module2["default"]; } : function getModuleExports() { return module2; }; __webpack_require__.d(getter, "a", getter); return getter; }; __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; __webpack_require__.p = ""; return __webpack_require__(__webpack_require__.s = 0); }([ function(module2, exports2, __webpack_require__) { module2.exports = __webpack_require__(1); }, function(module2, exports2, __webpack_require__) { Object.defineProperty(exports2, "__esModule", { value: true }); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function(obj) { return typeof obj; } : function(obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; var _createClass = function() { 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, descriptor.key, descriptor); } } return function(Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _get = function get(object, property, receiver) { if (object === null) object = Function.prototype; var desc = Object.getOwnPropertyDescriptor(object, property); if (desc === void 0) { var parent = Object.getPrototypeOf(object); if (parent === null) { return void 0; } else { return get(parent, property, receiver); } } else if ("value" in desc) { return desc.value; } else { var getter = desc.get; if (getter === void 0) { return void 0; } return getter.call(receiver); } }; var _xgplayer = __webpack_require__(2); var _xgplayer2 = _interopRequireDefault(_xgplayer); var _hls = __webpack_require__(3); var _hls2 = _interopRequireDefault(_hls); var _utils = __webpack_require__(4); var _utils2 = _interopRequireDefault(_utils); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self2, call) { if (!self2) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self2; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } var HlsJsPlayer = function(_Player) { _inherits(HlsJsPlayer2, _Player); function HlsJsPlayer2(options) { _classCallCheck(this, HlsJsPlayer2); var _this = _possibleConstructorReturn(this, (HlsJsPlayer2.__proto__ || Object.getPrototypeOf(HlsJsPlayer2)).call(this, options)); _this.hlsOpts = options.hlsOpts || {}; _this.hlsOpts.mediaType = _this.config.mediaType; var util = _xgplayer2.default.util; var player = _this; player.once("complete", function() { if (player.config.isLive) { util.addClass(player.root, "xgplayer-is-live"); if (!util.findDom(player.controls, ".xgplayer-live")) { var live = util.createDom("xg-live", player.lang.LIVE || "\u6B63\u5728\u76F4\u64AD", {}, "xgplayer-live"); player.controls.appendChild(live); } } }); _this.browser = _utils2.default.getBrowserVersion(); if (player.config.useHls === void 0) { if (_xgplayer2.default.sniffer.device === "mobile" && navigator.platform !== "MacIntel" && navigator.platform !== "Win32" || _this.browser.indexOf("Safari") > -1) { return _possibleConstructorReturn(_this); } } else if (!player.config.useHls) { return _possibleConstructorReturn(_this); } _this._start = _this.start; _this.start = function() { if (!window.XgVideoProxy) { _this.root.insertBefore(_this.video, _this.root.firstChild); } setTimeout(function() { _this.emit("complete"); if (_this.danmu && typeof _this.danmu.resize === "function") { _this.danmu.resize(); } }, 1); }; Number.isFinite = Number.isFinite || function(value) { return typeof value === "number" && isFinite(value); }; var hls = void 0; hls = new _hls2.default(_this.hlsOpts); _this.hls = hls; Object.defineProperty(player, "src", { get: function get() { return player.currentSrc; }, set: function set(url) { util.removeClass(player.root, "xgplayer-is-live"); var liveDom = document.querySelector(".xgplayer-live"); if (liveDom) { liveDom.parentNode.removeChild(liveDom); } player.autoplay = true; var paused = player.paused; if (!paused) { player.pause(); } player.hls.stopLoad(); player.hls.detachMedia(); player.hls.destroy(); player.hls = new _hls2.default(player.hlsOpts); player.register(url); player.once("canplay", function() { player.play().catch(function(err) { }); }); player.hls.loadSource(url); player.hls.attachMedia(player.video); }, configurable: true }); _this.register(_this.config.url); _this.once("complete", function() { hls.attachMedia(player.video); if (!player.config.videoInit) { player.once("canplay", function() { player.play().catch(function(err) { }); }); } }); _this.once("destroy", function() { hls.stopLoad(); }); return _this; } _createClass(HlsJsPlayer2, [{ key: "switchURL", value: function switchURL(url) { var player = this; player.url = url; player.config.url = url; var curTime = player.currentTime; _xgplayer2.default.util.addClass(player.root, "xgplayer-is-enter"); player.once("playing", function() { _xgplayer2.default.util.removeClass(player.root, "xgplayer-is-enter"); }); player.once("canplay", function() { player.currentTime = curTime; player.play(); }); if (_typeof(player.hls) === "object") { player.hls.originUrl = url; } player.src = url; } }, { key: "register", value: function register(url) { var hls = this.hls; var util = _xgplayer2.default.util; var player = this; hls.on(_hls2.default.Events.MEDIA_ATTACHED, function() { hls.loadSource(url); }); hls.on(_hls2.default.Events.LEVEL_LOADED, function(name, e) { if (!hls.inited) { hls.inited = true; if (e && e.details && e.details.live) { util.addClass(player.root, "xgplayer-is-live"); if (!util.findDom(player.root, ".xgplayer-live")) { var live = util.createDom("xg-live", player.lang.LIVE || "\u6B63\u5728\u76F4\u64AD", {}, "xgplayer-live"); player.controls.appendChild(live); } } } }); hls.on(_hls2.default.Events.ERROR, function(event, data) { player.emit("HLS_ERROR", { errorType: data.type, errorDetails: data.details, errorFatal: data.fatal }); if (data.fatal) { switch (data.type) { case _hls2.default.ErrorTypes.NETWORK_ERROR: hls.startLoad(); break; case _hls2.default.ErrorTypes.MEDIA_ERROR: hls.recoverMediaError(); break; default: player.emit("error", data); } } }); this._statistics(); } }, { key: "updateURLOnly", value: function updateURLOnly(url) { var player = this; var levelController = player.hls.levelController; if (Array.isArray(levelController._levels) && levelController._levels.length > 0) { levelController._levels[0].url = [url]; } player.config.url = url; player.url = url; player.hls.originUrl = url; } }, { key: "_statistics", value: function _statistics() { var statsInfo = { speed: 0, playerType: "HlsPlayer" }; var mediainfo = { videoDataRate: 0, audioDataRate: 0 }; var hls = this.hls; var player = this; hls.on(_hls2.default.Events.FRAG_LOAD_PROGRESS, function(flag, payload) { statsInfo.speed = payload.stats.loaded / 1e3; }); hls.on(_hls2.default.Events.FRAG_PARSING_DATA, function(flag, payload) { if (payload.type === "video") { mediainfo.fps = parseInt(payload.nb / (payload.endPTS - payload.startPTS)); } }); hls.on(_hls2.default.Events.FRAG_PARSING_INIT_SEGMENT, function(flag, payload) { mediainfo.hasAudio = payload && payload.tracks && payload.tracks.audio ? true : false; mediainfo.hasVideo = payload && payload.tracks && payload.tracks.video ? true : false; if (mediainfo.hasAudio && payload.tracks.audio) { var track = payload.tracks.audio; mediainfo.audioChannelCount = track.metadata && track.metadata.channelCount ? track.metadata.channelCount : 0; mediainfo.audioCodec = track.codec; } if (mediainfo.hasVideo && payload.tracks.video) { var _track = payload.tracks.video; mediainfo.videoCodec = _track.codec; mediainfo.width = _track.metadata && _track.metadata.width ? _track.metadata.width : 0; mediainfo.height = _track.metadata && _track.metadata.height ? _track.metadata.height : 0; } mediainfo.duration = payload.frag && payload.frag.duration ? payload.frag.duration : 0; mediainfo.level = payload.frag && payload.frag.level ? payload.frag.level : 0; if (mediainfo.videoCodec || mediainfo.audioCodec) { mediainfo.mimeType = 'video/hls; codecs="' + mediainfo.videoCodec + ";" + mediainfo.audioCodec + '"'; } player.mediainfo = mediainfo; player.emit("media_info", mediainfo); }); this._statisticsTimmer = setInterval(function() { player.emit("statistics_info", statsInfo); statsInfo.speed = 0; }, 1e3); } }, { key: "destroy", value: function destroy() { clearInterval(this._statisticsTimmer); if (this.hls) { this.hls.destroy(); } _get(HlsJsPlayer2.prototype.__proto__ || Object.getPrototypeOf(HlsJsPlayer2.prototype), "destroy", this).call(this); } }]); return HlsJsPlayer2; }(_xgplayer2.default); HlsJsPlayer.isSupported = _hls2.default.isSupported; HlsJsPlayer.HlsJs = _hls2.default; exports2.default = HlsJsPlayer; module2.exports = exports2["default"]; }, function(module2, exports2) { module2.exports = __WEBPACK_EXTERNAL_MODULE__2__; }, function(module2, exports2, __webpack_require__) { typeof window !== "undefined" && function webpackUniversalModuleDefinition(root, factory) { module2.exports = factory(); }(this, () => { return (() => { var __webpack_modules__ = { "./src/config.ts": (__unused_webpack_module, __webpack_exports__2, __webpack_require__3) => { __webpack_require__3.r(__webpack_exports__2); __webpack_require__3.d(__webpack_exports__2, { "enableStreamingMode": () => enableStreamingMode, "hlsDefaultConfig": () => hlsDefaultConfig, "mergeConfig": () => mergeConfig }); var _controller_abr_controller__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__3("./src/controller/abr-controller.ts"); var _controller_audio_stream_controller__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__3("./src/controller/audio-stream-controller.ts"); var _controller_audio_track_controller__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__3("./src/controller/audio-track-controller.ts"); var _controller_subtitle_stream_controller__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__3("./src/controller/subtitle-stream-controller.ts"); var _controller_subtitle_track_controller__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__3("./src/controller/subtitle-track-controller.ts"); var _controller_buffer_controller__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__3("./src/controller/buffer-controller.ts"); var _controller_timeline_controller__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__3("./src/controller/timeline-controller.ts"); var _controller_cap_level_controller__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__3("./src/controller/cap-level-controller.ts"); var _controller_fps_controller__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__3("./src/controller/fps-controller.ts"); var _controller_eme_controller__WEBPACK_IMPORTED_MODULE_9__ = __webpack_require__3("./src/controller/eme-controller.ts"); var _controller_cmcd_controller__WEBPACK_IMPORTED_MODULE_10__ = __webpack_require__3("./src/controller/cmcd-controller.ts"); var _utils_xhr_loader__WEBPACK_IMPORTED_MODULE_11__ = __webpack_require__3("./src/utils/xhr-loader.ts"); var _utils_fetch_loader__WEBPACK_IMPORTED_MODULE_12__ = __webpack_require__3("./src/utils/fetch-loader.ts"); var _utils_cues__WEBPACK_IMPORTED_MODULE_13__ = __webpack_require__3("./src/utils/cues.ts"); var _utils_mediakeys_helper__WEBPACK_IMPORTED_MODULE_14__ = __webpack_require__3("./src/utils/mediakeys-helper.ts"); var _utils_logger__WEBPACK_IMPORTED_MODULE_15__ = __webpack_require__3("./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) { if (key in obj) { Object.defineProperty(obj, key, { value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 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, 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__3) => { __webpack_require__3.r(__webpack_exports__2); __webpack_require__3.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__3("./src/polyfills/number.ts"); var _utils_ewma_bandwidth_estimator__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__3("./src/utils/ewma-bandwidth-estimator.ts"); var _events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__3("./src/events.ts"); var _errors__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__3("./src/errors.ts"); var _types_loader__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__3("./src/types/loader.ts"); var _utils_logger__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__3("./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, 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; } var AbrController = /* @__PURE__ */ function() { function AbrController2(hls) { 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 = hls; var config = hls.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 hls = this.hls; hls.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_LOADING, this.onFragLoading, this); hls.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_LOADED, this.onFragLoaded, this); hls.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_BUFFERED, this.onFragBuffered, this); hls.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.LEVEL_LOADED, this.onLevelLoaded, this); hls.on(_events__WEBPACK_IMPORTED_MODULE_2__.Events.ERROR, this.onError, this); }; _proto.unregisterListeners = function unregisterListeners() { var hls = this.hls; hls.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_LOADING, this.onFragLoading, this); hls.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_LOADED, this.onFragLoaded, this); hls.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.FRAG_BUFFERED, this.onFragBuffered, this); hls.off(_events__WEBPACK_IMPORTED_MODULE_2__.Events.LEVEL_LOADED, this.onLevelLoaded, this); hls.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, hls = this.hls; var autoLevelEnabled = hls.autoLevelEnabled; hls.config; var media = hls.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 = hls.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 = hls.levels, minAutoLevel = hls.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"); hls.nextLoadLevel = nextLoadLevel; if (loadedFirstByte) { this.bwEstimator.sample(requestDelay, stats.loaded); } this.clearTimer(); if (frag.loader) { this.fragCurrent = this.partCurrent = null; frag.loader.abort(); } hls.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) { switch (data.details) { case _errors__WEBPACK_IMPORTED_MODULE_3__.ErrorDetails.FRAG_LOAD_ERROR: case _errors__WEBPACK_IMPORTED_MODULE_3__.ErrorDetails.FRAG_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, hls = this.hls; var maxAutoLevel = hls.maxAutoLevel, config = hls.config, minAutoLevel = hls.minAutoLevel, media = hls.media; var currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0; media ? media.currentTime : 0; var playbackRate = media && media.playbackRate !== 0 ? Math.abs(media.playbackRate) : 1; var avgbw = this.bwEstimator ? this.bwEstimator.getEstimate() : config.abrEwmaDefaultEstimate; var bufferInfo = hls.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__3) => { __webpack_require__3.r(__webpack_exports__2); __webpack_require__3.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__3("./src/polyfills/number.ts"); var _base_stream_controller__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__3("./src/controller/base-stream-controller.ts"); var _events__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__3("./src/events.ts"); var _utils_buffer_helper__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__3("./src/utils/buffer-helper.ts"); var _fragment_tracker__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__3("./src/controller/fragment-tracker.ts");