UNPKG

@hakit/components

Version:
1,469 lines 495 kB
const B = Number.isFinite || function(n) { return typeof n == "number" && isFinite(n); }, or = Number.isSafeInteger || function(n) { return typeof n == "number" && Math.abs(n) <= lr; }, lr = Number.MAX_SAFE_INTEGER || 9007199254740991; let Y = /* @__PURE__ */ (function(n) { return n.NETWORK_ERROR = "networkError", n.MEDIA_ERROR = "mediaError", n.KEY_SYSTEM_ERROR = "keySystemError", n.MUX_ERROR = "muxError", n.OTHER_ERROR = "otherError", n; })({}), D = /* @__PURE__ */ (function(n) { return n.KEY_SYSTEM_NO_KEYS = "keySystemNoKeys", n.KEY_SYSTEM_NO_ACCESS = "keySystemNoAccess", n.KEY_SYSTEM_NO_SESSION = "keySystemNoSession", n.KEY_SYSTEM_NO_CONFIGURED_LICENSE = "keySystemNoConfiguredLicense", n.KEY_SYSTEM_LICENSE_REQUEST_FAILED = "keySystemLicenseRequestFailed", n.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED = "keySystemServerCertificateRequestFailed", n.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED = "keySystemServerCertificateUpdateFailed", n.KEY_SYSTEM_SESSION_UPDATE_FAILED = "keySystemSessionUpdateFailed", n.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED = "keySystemStatusOutputRestricted", n.KEY_SYSTEM_STATUS_INTERNAL_ERROR = "keySystemStatusInternalError", n.KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR = "keySystemDestroyMediaKeysError", n.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR = "keySystemDestroyCloseSessionError", n.KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR = "keySystemDestroyRemoveSessionError", n.MANIFEST_LOAD_ERROR = "manifestLoadError", n.MANIFEST_LOAD_TIMEOUT = "manifestLoadTimeOut", n.MANIFEST_PARSING_ERROR = "manifestParsingError", n.MANIFEST_INCOMPATIBLE_CODECS_ERROR = "manifestIncompatibleCodecsError", n.LEVEL_EMPTY_ERROR = "levelEmptyError", n.LEVEL_LOAD_ERROR = "levelLoadError", n.LEVEL_LOAD_TIMEOUT = "levelLoadTimeOut", n.LEVEL_PARSING_ERROR = "levelParsingError", n.LEVEL_SWITCH_ERROR = "levelSwitchError", n.AUDIO_TRACK_LOAD_ERROR = "audioTrackLoadError", n.AUDIO_TRACK_LOAD_TIMEOUT = "audioTrackLoadTimeOut", n.SUBTITLE_LOAD_ERROR = "subtitleTrackLoadError", n.SUBTITLE_TRACK_LOAD_TIMEOUT = "subtitleTrackLoadTimeOut", n.FRAG_LOAD_ERROR = "fragLoadError", n.FRAG_LOAD_TIMEOUT = "fragLoadTimeOut", n.FRAG_DECRYPT_ERROR = "fragDecryptError", n.FRAG_PARSING_ERROR = "fragParsingError", n.FRAG_GAP = "fragGap", n.REMUX_ALLOC_ERROR = "remuxAllocError", n.KEY_LOAD_ERROR = "keyLoadError", n.KEY_LOAD_TIMEOUT = "keyLoadTimeOut", n.BUFFER_ADD_CODEC_ERROR = "bufferAddCodecError", n.BUFFER_INCOMPATIBLE_CODECS_ERROR = "bufferIncompatibleCodecsError", n.BUFFER_APPEND_ERROR = "bufferAppendError", n.BUFFER_APPENDING_ERROR = "bufferAppendingError", n.BUFFER_STALLED_ERROR = "bufferStalledError", n.BUFFER_FULL_ERROR = "bufferFullError", n.BUFFER_SEEK_OVER_HOLE = "bufferSeekOverHole", n.BUFFER_NUDGE_ON_STALL = "bufferNudgeOnStall", n.ASSET_LIST_LOAD_ERROR = "assetListLoadError", n.ASSET_LIST_LOAD_TIMEOUT = "assetListLoadTimeout", n.ASSET_LIST_PARSING_ERROR = "assetListParsingError", n.INTERSTITIAL_ASSET_ITEM_ERROR = "interstitialAssetItemError", n.INTERNAL_EXCEPTION = "internalException", n.INTERNAL_ABORTED = "aborted", n.ATTACH_MEDIA_ERROR = "attachMediaError", n.UNKNOWN = "unknown", n; })({}), E = /* @__PURE__ */ (function(n) { return n.MEDIA_ATTACHING = "hlsMediaAttaching", n.MEDIA_ATTACHED = "hlsMediaAttached", n.MEDIA_DETACHING = "hlsMediaDetaching", n.MEDIA_DETACHED = "hlsMediaDetached", n.MEDIA_ENDED = "hlsMediaEnded", n.STALL_RESOLVED = "hlsStallResolved", n.BUFFER_RESET = "hlsBufferReset", n.BUFFER_CODECS = "hlsBufferCodecs", n.BUFFER_CREATED = "hlsBufferCreated", n.BUFFER_APPENDING = "hlsBufferAppending", n.BUFFER_APPENDED = "hlsBufferAppended", n.BUFFER_EOS = "hlsBufferEos", n.BUFFERED_TO_END = "hlsBufferedToEnd", n.BUFFER_FLUSHING = "hlsBufferFlushing", n.BUFFER_FLUSHED = "hlsBufferFlushed", n.MANIFEST_LOADING = "hlsManifestLoading", n.MANIFEST_LOADED = "hlsManifestLoaded", n.MANIFEST_PARSED = "hlsManifestParsed", n.LEVEL_SWITCHING = "hlsLevelSwitching", n.LEVEL_SWITCHED = "hlsLevelSwitched", n.LEVEL_LOADING = "hlsLevelLoading", n.LEVEL_LOADED = "hlsLevelLoaded", n.LEVEL_UPDATED = "hlsLevelUpdated", n.LEVEL_PTS_UPDATED = "hlsLevelPtsUpdated", n.LEVELS_UPDATED = "hlsLevelsUpdated", n.AUDIO_TRACKS_UPDATED = "hlsAudioTracksUpdated", n.AUDIO_TRACK_SWITCHING = "hlsAudioTrackSwitching", n.AUDIO_TRACK_SWITCHED = "hlsAudioTrackSwitched", n.AUDIO_TRACK_LOADING = "hlsAudioTrackLoading", n.AUDIO_TRACK_LOADED = "hlsAudioTrackLoaded", n.AUDIO_TRACK_UPDATED = "hlsAudioTrackUpdated", n.SUBTITLE_TRACKS_UPDATED = "hlsSubtitleTracksUpdated", n.SUBTITLE_TRACKS_CLEARED = "hlsSubtitleTracksCleared", n.SUBTITLE_TRACK_SWITCH = "hlsSubtitleTrackSwitch", n.SUBTITLE_TRACK_LOADING = "hlsSubtitleTrackLoading", n.SUBTITLE_TRACK_LOADED = "hlsSubtitleTrackLoaded", n.SUBTITLE_TRACK_UPDATED = "hlsSubtitleTrackUpdated", n.SUBTITLE_FRAG_PROCESSED = "hlsSubtitleFragProcessed", n.CUES_PARSED = "hlsCuesParsed", n.NON_NATIVE_TEXT_TRACKS_FOUND = "hlsNonNativeTextTracksFound", n.INIT_PTS_FOUND = "hlsInitPtsFound", n.FRAG_LOADING = "hlsFragLoading", n.FRAG_LOAD_EMERGENCY_ABORTED = "hlsFragLoadEmergencyAborted", n.FRAG_LOADED = "hlsFragLoaded", n.FRAG_DECRYPTED = "hlsFragDecrypted", n.FRAG_PARSING_INIT_SEGMENT = "hlsFragParsingInitSegment", n.FRAG_PARSING_USERDATA = "hlsFragParsingUserdata", n.FRAG_PARSING_METADATA = "hlsFragParsingMetadata", n.FRAG_PARSED = "hlsFragParsed", n.FRAG_BUFFERED = "hlsFragBuffered", n.FRAG_CHANGED = "hlsFragChanged", n.FPS_DROP = "hlsFpsDrop", n.FPS_DROP_LEVEL_CAPPING = "hlsFpsDropLevelCapping", n.MAX_AUTO_LEVEL_UPDATED = "hlsMaxAutoLevelUpdated", n.ERROR = "hlsError", n.DESTROYING = "hlsDestroying", n.KEY_LOADING = "hlsKeyLoading", n.KEY_LOADED = "hlsKeyLoaded", n.LIVE_BACK_BUFFER_REACHED = "hlsLiveBackBufferReached", n.BACK_BUFFER_REACHED = "hlsBackBufferReached", n.STEERING_MANIFEST_LOADED = "hlsSteeringManifestLoaded", n.ASSET_LIST_LOADING = "hlsAssetListLoading", n.ASSET_LIST_LOADED = "hlsAssetListLoaded", n.INTERSTITIALS_UPDATED = "hlsInterstitialsUpdated", n.INTERSTITIALS_BUFFERED_TO_BOUNDARY = "hlsInterstitialsBufferedToBoundary", n.INTERSTITIAL_ASSET_PLAYER_CREATED = "hlsInterstitialAssetPlayerCreated", n.INTERSTITIAL_STARTED = "hlsInterstitialStarted", n.INTERSTITIAL_ASSET_STARTED = "hlsInterstitialAssetStarted", n.INTERSTITIAL_ASSET_ENDED = "hlsInterstitialAssetEnded", n.INTERSTITIAL_ASSET_ERROR = "hlsInterstitialAssetError", n.INTERSTITIAL_ENDED = "hlsInterstitialEnded", n.INTERSTITIALS_PRIMARY_RESUMED = "hlsInterstitialsPrimaryResumed", n.PLAYOUT_LIMIT_REACHED = "hlsPlayoutLimitReached", n.EVENT_CUE_ENTER = "hlsEventCueEnter", n; })({}); var X = { MANIFEST: "manifest", LEVEL: "level", AUDIO_TRACK: "audioTrack", SUBTITLE_TRACK: "subtitleTrack" }, W = { MAIN: "main", AUDIO: "audio", SUBTITLE: "subtitle" }; class Nt { // About half of the estimated value will be from the last |halfLife| samples by weight. constructor(t, e = 0, i = 0) { this.halfLife = void 0, this.alpha_ = void 0, this.estimate_ = void 0, this.totalWeight_ = void 0, this.halfLife = t, this.alpha_ = t ? Math.exp(Math.log(0.5) / t) : 0, this.estimate_ = e, this.totalWeight_ = i; } sample(t, e) { const i = Math.pow(this.alpha_, t); this.estimate_ = e * (1 - i) + i * this.estimate_, this.totalWeight_ += t; } getTotalWeight() { return this.totalWeight_; } getEstimate() { if (this.alpha_) { const t = 1 - Math.pow(this.alpha_, this.totalWeight_); if (t) return this.estimate_ / t; } return this.estimate_; } } class ur { constructor(t, e, i, s = 100) { this.defaultEstimate_ = void 0, this.minWeight_ = void 0, this.minDelayMs_ = void 0, this.slow_ = void 0, this.fast_ = void 0, this.defaultTTFB_ = void 0, this.ttfb_ = void 0, this.defaultEstimate_ = i, this.minWeight_ = 1e-3, this.minDelayMs_ = 50, this.slow_ = new Nt(t), this.fast_ = new Nt(e), this.defaultTTFB_ = s, this.ttfb_ = new Nt(t); } update(t, e) { const { slow_: i, fast_: s, ttfb_: r } = this; i.halfLife !== t && (this.slow_ = new Nt(t, i.getEstimate(), i.getTotalWeight())), s.halfLife !== e && (this.fast_ = new Nt(e, s.getEstimate(), s.getTotalWeight())), r.halfLife !== t && (this.ttfb_ = new Nt(t, r.getEstimate(), r.getTotalWeight())); } sample(t, e) { t = Math.max(t, this.minDelayMs_); const i = 8 * e, s = t / 1e3, r = i / s; this.fast_.sample(s, r), this.slow_.sample(s, r); } sampleTTFB(t) { const e = t / 1e3, i = Math.sqrt(2) * Math.exp(-Math.pow(e, 2) / 2); this.ttfb_.sample(i, Math.max(t, 5)); } canEstimate() { return this.fast_.getTotalWeight() >= this.minWeight_; } getEstimate() { return this.canEstimate() ? Math.min(this.fast_.getEstimate(), this.slow_.getEstimate()) : this.defaultEstimate_; } getEstimateTTFB() { return this.ttfb_.getTotalWeight() >= this.minWeight_ ? this.ttfb_.getEstimate() : this.defaultTTFB_; } get defaultEstimate() { return this.defaultEstimate_; } destroy() { } } function dr(n, t, e) { return (t = cr(t)) in n ? Object.defineProperty(n, t, { value: e, enumerable: !0, configurable: !0, writable: !0 }) : n[t] = e, n; } function nt() { return nt = Object.assign ? Object.assign.bind() : function(n) { for (var t = 1; t < arguments.length; t++) { var e = arguments[t]; for (var i in e) ({}).hasOwnProperty.call(e, i) && (n[i] = e[i]); } return n; }, nt.apply(null, arguments); } function ni(n, t) { var e = Object.keys(n); if (Object.getOwnPropertySymbols) { var i = Object.getOwnPropertySymbols(n); t && (i = i.filter(function(s) { return Object.getOwnPropertyDescriptor(n, s).enumerable; })), e.push.apply(e, i); } return e; } function ct(n) { for (var t = 1; t < arguments.length; t++) { var e = arguments[t] != null ? arguments[t] : {}; t % 2 ? ni(Object(e), !0).forEach(function(i) { dr(n, i, e[i]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(n, Object.getOwnPropertyDescriptors(e)) : ni(Object(e)).forEach(function(i) { Object.defineProperty(n, i, Object.getOwnPropertyDescriptor(e, i)); }); } return n; } function hr(n, t) { if (typeof n != "object" || !n) return n; var e = n[Symbol.toPrimitive]; if (e !== void 0) { var i = e.call(n, t); if (typeof i != "object") return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(n); } function cr(n) { var t = hr(n, "string"); return typeof t == "symbol" ? t : t + ""; } class Rt { constructor(t, e) { this.trace = void 0, this.debug = void 0, this.log = void 0, this.warn = void 0, this.info = void 0, this.error = void 0; const i = `[${t}]:`; this.trace = It, this.debug = e.debug.bind(null, i), this.log = e.log.bind(null, i), this.warn = e.warn.bind(null, i), this.info = e.info.bind(null, i), this.error = e.error.bind(null, i); } } const It = function() { }, fr = { trace: It, debug: It, log: It, warn: It, info: It, error: It }; function Be() { return nt({}, fr); } function gr(n, t) { const e = self.console[n]; return e ? e.bind(self.console, `${t ? "[" + t + "] " : ""}[${n}] >`) : It; } function ai(n, t, e) { return t[n] ? t[n].bind(t) : gr(n, e); } const $e = Be(); function mr(n, t, e) { const i = Be(); if (typeof console == "object" && n === !0 || typeof n == "object") { const s = [ // Remove out from list here to hard-disable a log-level // 'trace', "debug", "log", "info", "warn", "error" ]; s.forEach((r) => { i[r] = ai(r, n, e); }); try { i.log(`Debug logs enabled for "${t}" in hls.js version 1.6.13`); } catch { return Be(); } s.forEach((r) => { $e[r] = ai(r, n); }); } else nt($e, i); return i; } const J = $e; function ls(n) { return n && n.__esModule && Object.prototype.hasOwnProperty.call(n, "default") ? n.default : n; } var xe, oi; function pr() { return oi || (oi = 1, xe = {}), xe; } var Ft = pr(), Er = /* @__PURE__ */ ls(Ft); function _t(n = !0) { return typeof self > "u" ? void 0 : (n || !self.MediaSource) && self.ManagedMediaSource || self.MediaSource || self.WebKitMediaSource; } function vr(n) { return typeof self < "u" && n === self.ManagedMediaSource; } function yr(n, t) { const e = Object.keys(n), i = Object.keys(t), s = e.length, r = i.length; return !s || !r || s === r && !e.some((a) => i.indexOf(a) === -1); } function gt(n, t = !1) { if (typeof TextDecoder < "u") { const l = new TextDecoder("utf-8").decode(n); if (t) { const d = l.indexOf("\0"); return d !== -1 ? l.substring(0, d) : l; } return l.replace(/\0/g, ""); } const e = n.length; let i, s, r, a = "", o = 0; for (; o < e; ) { if (i = n[o++], i === 0 && t) return a; if (i === 0 || i === 3) continue; switch (i >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: a += String.fromCharCode(i); break; case 12: case 13: s = n[o++], a += String.fromCharCode((i & 31) << 6 | s & 63); break; case 14: s = n[o++], r = n[o++], a += String.fromCharCode((i & 15) << 12 | (s & 63) << 6 | (r & 63) << 0); break; } } return a; } function qt(n) { let t = ""; for (let e = 0; e < n.length; e++) { let i = n[e].toString(16); i.length < 2 && (i = "0" + i), t += i; } return t; } function us(n) { return Uint8Array.from(n.replace(/^0x/, "").replace(/([\da-fA-F]{2}) ?/g, "0x$1 ").replace(/ +$/, "").split(" ")).buffer; } var Se = { exports: {} }, li; function Tr() { return li || (li = 1, (function(n, t) { (function(e) { var i = /^(?=((?:[a-zA-Z0-9+\-.]+:)?))\1(?=((?:\/\/[^\/?#]*)?))\2(?=((?:(?:[^?#\/]*\/)*[^;?#\/]*)?))\3((?:;[^?#]*)?)(\?[^#]*)?(#[^]*)?$/, s = /^(?=([^\/?#]*))\1([^]*)$/, r = /(?:\/|^)\.(?=\/)/g, a = /(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g, o = { // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or // // E.g // With opts.alwaysNormalize = false (default, spec compliant) // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g // With opts.alwaysNormalize = true (not spec compliant) // http://a.com/b/cd + /e/f/../g => http://a.com/e/g buildAbsoluteURL: function(u, l, d) { if (d = d || {}, u = u.trim(), l = l.trim(), !l) { if (!d.alwaysNormalize) return u; var h = o.parseURL(u); if (!h) throw new Error("Error trying to parse base URL."); return h.path = o.normalizePath( h.path ), o.buildURLFromParts(h); } var c = o.parseURL(l); if (!c) throw new Error("Error trying to parse relative URL."); if (c.scheme) return d.alwaysNormalize ? (c.path = o.normalizePath(c.path), o.buildURLFromParts(c)) : l; var f = o.parseURL(u); if (!f) throw new Error("Error trying to parse base URL."); if (!f.netLoc && f.path && f.path[0] !== "/") { var g = s.exec(f.path); f.netLoc = g[1], f.path = g[2]; } f.netLoc && !f.path && (f.path = "/"); var p = { // 2c) Otherwise, the embedded URL inherits the scheme of // the base URL. scheme: f.scheme, netLoc: c.netLoc, path: null, params: c.params, query: c.query, fragment: c.fragment }; if (!c.netLoc && (p.netLoc = f.netLoc, c.path[0] !== "/")) if (!c.path) p.path = f.path, c.params || (p.params = f.params, c.query || (p.query = f.query)); else { var m = f.path, y = m.substring(0, m.lastIndexOf("/") + 1) + c.path; p.path = o.normalizePath(y); } return p.path === null && (p.path = d.alwaysNormalize ? o.normalizePath(c.path) : c.path), o.buildURLFromParts(p); }, parseURL: function(u) { var l = i.exec(u); return l ? { scheme: l[1] || "", netLoc: l[2] || "", path: l[3] || "", params: l[4] || "", query: l[5] || "", fragment: l[6] || "" } : null; }, normalizePath: function(u) { for (u = u.split("").reverse().join("").replace(r, ""); u.length !== (u = u.replace(a, "")).length; ) ; return u.split("").reverse().join(""); }, buildURLFromParts: function(u) { return u.scheme + u.netLoc + u.path + u.params + u.query + u.fragment; } }; n.exports = o; })(); })(Se)), Se.exports; } var je = Tr(); class qe { constructor() { this.aborted = !1, this.loaded = 0, this.retry = 0, this.total = 0, this.chunkCount = 0, this.bwEstimate = 0, this.loading = { start: 0, first: 0, end: 0 }, this.parsing = { start: 0, end: 0 }, this.buffering = { start: 0, first: 0, end: 0 }; } } var tt = { AUDIO: "audio", VIDEO: "video", AUDIOVIDEO: "audiovideo" }; class ds { constructor(t) { this._byteRange = null, this._url = null, this._stats = null, this._streams = null, this.base = void 0, this.relurl = void 0, typeof t == "string" && (t = { url: t }), this.base = t, Sr(this, "stats"); } // setByteRange converts a EXT-X-BYTERANGE attribute into a two element array setByteRange(t, e) { const i = t.split("@", 2); let s; i.length === 1 ? s = e?.byteRangeEndOffset || 0 : s = parseInt(i[1]), this._byteRange = [s, parseInt(i[0]) + s]; } get baseurl() { return this.base.url; } get byteRange() { return this._byteRange === null ? [] : this._byteRange; } get byteRangeStartOffset() { return this.byteRange[0]; } get byteRangeEndOffset() { return this.byteRange[1]; } get elementaryStreams() { return this._streams === null && (this._streams = { [tt.AUDIO]: null, [tt.VIDEO]: null, [tt.AUDIOVIDEO]: null }), this._streams; } set elementaryStreams(t) { this._streams = t; } get hasStats() { return this._stats !== null; } get hasStreams() { return this._streams !== null; } get stats() { return this._stats === null && (this._stats = new qe()), this._stats; } set stats(t) { this._stats = t; } get url() { return !this._url && this.baseurl && this.relurl && (this._url = je.buildAbsoluteURL(this.baseurl, this.relurl, { alwaysNormalize: !0 })), this._url || ""; } set url(t) { this._url = t; } clearElementaryStreamInfo() { const { elementaryStreams: t } = this; t[tt.AUDIO] = null, t[tt.VIDEO] = null, t[tt.AUDIOVIDEO] = null; } } function ft(n) { return n.sn !== "initSegment"; } class Le extends ds { constructor(t, e) { super(e), this._decryptdata = null, this._programDateTime = null, this._ref = null, this._bitrate = void 0, this.rawProgramDateTime = null, this.tagList = [], this.duration = 0, this.sn = 0, this.levelkeys = void 0, this.type = void 0, this.loader = null, this.keyLoader = null, this.level = -1, this.cc = 0, this.startPTS = void 0, this.endPTS = void 0, this.startDTS = void 0, this.endDTS = void 0, this.start = 0, this.playlistOffset = 0, this.deltaPTS = void 0, this.maxStartPTS = void 0, this.minEndPTS = void 0, this.data = void 0, this.bitrateTest = !1, this.title = null, this.initSegment = null, this.endList = void 0, this.gap = void 0, this.urlId = 0, this.type = t; } get byteLength() { if (this.hasStats) { const t = this.stats.total; if (t) return t; } if (this.byteRange.length) { const t = this.byteRange[0], e = this.byteRange[1]; if (B(t) && B(e)) return e - t; } return null; } get bitrate() { return this.byteLength ? this.byteLength * 8 / this.duration : this._bitrate ? this._bitrate : null; } set bitrate(t) { this._bitrate = t; } get decryptdata() { var t; const { levelkeys: e } = this; if (!e || e.NONE) return null; if (e.identity) this._decryptdata || (this._decryptdata = e.identity.getDecryptData(this.sn)); else if (!((t = this._decryptdata) != null && t.keyId)) { const i = Object.keys(e); if (i.length === 1) { const s = this._decryptdata = e[i[0]] || null; s && (this._decryptdata = s.getDecryptData(this.sn, e)); } } return this._decryptdata; } get end() { return this.start + this.duration; } get endProgramDateTime() { if (this.programDateTime === null) return null; const t = B(this.duration) ? this.duration : 0; return this.programDateTime + t * 1e3; } get encrypted() { var t; if ((t = this._decryptdata) != null && t.encrypted) return !0; if (this.levelkeys) { var e; const i = Object.keys(this.levelkeys), s = i.length; if (s > 1 || s === 1 && (e = this.levelkeys[i[0]]) != null && e.encrypted) return !0; } return !1; } get programDateTime() { return this._programDateTime === null && this.rawProgramDateTime && (this.programDateTime = Date.parse(this.rawProgramDateTime)), this._programDateTime; } set programDateTime(t) { if (!B(t)) { this._programDateTime = this.rawProgramDateTime = null; return; } this._programDateTime = t; } get ref() { return ft(this) ? (this._ref || (this._ref = { base: this.base, start: this.start, duration: this.duration, sn: this.sn, programDateTime: this.programDateTime }), this._ref) : null; } addStart(t) { this.setStart(this.start + t); } setStart(t) { this.start = t, this._ref && (this._ref.start = t); } setDuration(t) { this.duration = t, this._ref && (this._ref.duration = t); } setKeyFormat(t) { const e = this.levelkeys; if (e) { var i; const s = e[t]; s && !((i = this._decryptdata) != null && i.keyId) && (this._decryptdata = s.getDecryptData(this.sn, e)); } } abortRequests() { var t, e; (t = this.loader) == null || t.abort(), (e = this.keyLoader) == null || e.abort(); } setElementaryStreamInfo(t, e, i, s, r, a = !1) { const { elementaryStreams: o } = this, u = o[t]; if (!u) { o[t] = { startPTS: e, endPTS: i, startDTS: s, endDTS: r, partial: a }; return; } u.startPTS = Math.min(u.startPTS, e), u.endPTS = Math.max(u.endPTS, i), u.startDTS = Math.min(u.startDTS, s), u.endDTS = Math.max(u.endDTS, r); } } class xr extends ds { constructor(t, e, i, s, r) { super(i), this.fragOffset = 0, this.duration = 0, this.gap = !1, this.independent = !1, this.relurl = void 0, this.fragment = void 0, this.index = void 0, this.duration = t.decimalFloatingPoint("DURATION"), this.gap = t.bool("GAP"), this.independent = t.bool("INDEPENDENT"), this.relurl = t.enumeratedString("URI"), this.fragment = e, this.index = s; const a = t.enumeratedString("BYTERANGE"); a && this.setByteRange(a, r), r && (this.fragOffset = r.fragOffset + r.duration); } get start() { return this.fragment.start + this.fragOffset; } get end() { return this.start + this.duration; } get loaded() { const { elementaryStreams: t } = this; return !!(t.audio || t.video || t.audiovideo); } } function hs(n, t) { const e = Object.getPrototypeOf(n); if (e) { const i = Object.getOwnPropertyDescriptor(e, t); return i || hs(e, t); } } function Sr(n, t) { const e = hs(n, t); e && (e.enumerable = !0, Object.defineProperty(n, t, e)); } const ui = Math.pow(2, 32) - 1, Lr = [].push, cs = { video: 1, audio: 2, id3: 3, text: 4 }; function rt(n) { return String.fromCharCode.apply(null, n); } function fs(n, t) { const e = n[t] << 8 | n[t + 1]; return e < 0 ? 65536 + e : e; } function K(n, t) { const e = gs(n, t); return e < 0 ? 4294967296 + e : e; } function di(n, t) { let e = K(n, t); return e *= Math.pow(2, 32), e += K(n, t + 4), e; } function gs(n, t) { return n[t] << 24 | n[t + 1] << 16 | n[t + 2] << 8 | n[t + 3]; } function Ar(n) { const t = n.byteLength; for (let e = 0; e < t; ) { const i = K(n, e); if (i > 8 && n[e + 4] === 109 && n[e + 5] === 111 && n[e + 6] === 111 && n[e + 7] === 102) return !0; e = i > 1 ? e + i : t; } return !1; } function j(n, t) { const e = []; if (!t.length) return e; const i = n.byteLength; for (let s = 0; s < i; ) { const r = K(n, s), a = rt(n.subarray(s + 4, s + 8)), o = r > 1 ? s + r : i; if (a === t[0]) if (t.length === 1) e.push(n.subarray(s + 8, o)); else { const u = j(n.subarray(s + 8, o), t.slice(1)); u.length && Lr.apply(e, u); } s = o; } return e; } function Rr(n) { const t = [], e = n[0]; let i = 8; const s = K(n, i); i += 4; let r = 0, a = 0; e === 0 ? (r = K(n, i), a = K(n, i + 4), i += 8) : (r = di(n, i), a = di(n, i + 8), i += 16), i += 2; let o = n.length + a; const u = fs(n, i); i += 2; for (let l = 0; l < u; l++) { let d = i; const h = K(n, d); d += 4; const c = h & 2147483647; if ((h & 2147483648) >>> 31 === 1) return J.warn("SIDX has hierarchical references (not supported)"), null; const g = K(n, d); d += 4, t.push({ referenceSize: c, subsegmentDuration: g, // unscaled info: { duration: g / s, start: o, end: o + c - 1 } }), o += c, d += 4, i = d; } return { earliestPresentationTime: r, timescale: s, version: e, referencesCount: u, references: t }; } function ms(n) { const t = [], e = j(n, ["moov", "trak"]); for (let s = 0; s < e.length; s++) { const r = e[s], a = j(r, ["tkhd"])[0]; if (a) { let o = a[0]; const u = K(a, o === 0 ? 12 : 20), l = j(r, ["mdia", "mdhd"])[0]; if (l) { o = l[0]; const d = K(l, o === 0 ? 12 : 20), h = j(r, ["mdia", "hdlr"])[0]; if (h) { const c = rt(h.subarray(8, 12)), f = { soun: tt.AUDIO, vide: tt.VIDEO }[c], g = j(r, ["mdia", "minf", "stbl", "stsd"])[0], p = br(g); f ? (t[u] = { timescale: d, type: f, stsd: p }, t[f] = ct({ timescale: d, id: u }, p)) : t[u] = { timescale: d, type: c, stsd: p }; } } } } return j(n, ["moov", "mvex", "trex"]).forEach((s) => { const r = K(s, 4), a = t[r]; a && (a.default = { duration: K(s, 12), flags: K(s, 20) }); }), t; } function br(n) { const t = n.subarray(8), e = t.subarray(86), i = rt(t.subarray(4, 8)); let s = i, r; const a = i === "enca" || i === "encv"; if (a) { const l = j(t, [i])[0].subarray(i === "enca" ? 28 : 78); j(l, ["sinf"]).forEach((h) => { const c = j(h, ["schm"])[0]; if (c) { const f = rt(c.subarray(4, 8)); if (f === "cbcs" || f === "cenc") { const g = j(h, ["frma"])[0]; g && (s = rt(g)); } } }); } const o = s; switch (s) { case "avc1": case "avc2": case "avc3": case "avc4": { const u = j(e, ["avcC"])[0]; u && u.length > 3 && (s += "." + te(u[1]) + te(u[2]) + te(u[3]), r = Jt(o === "avc1" ? "dva1" : "dvav", e)); break; } case "mp4a": { const u = j(t, [i])[0], l = j(u.subarray(28), ["esds"])[0]; if (l && l.length > 7) { let d = 4; if (l[d++] !== 3) break; d = Ae(l, d), d += 2; const h = l[d++]; if (h & 128 && (d += 2), h & 64 && (d += l[d++]), l[d++] !== 4) break; d = Ae(l, d); const c = l[d++]; if (c === 64) s += "." + te(c); else break; if (d += 12, l[d++] !== 5) break; d = Ae(l, d); const f = l[d++]; let g = (f & 248) >> 3; g === 31 && (g += 1 + ((f & 7) << 3) + ((l[d] & 224) >> 5)), s += "." + g; } break; } case "hvc1": case "hev1": { const u = j(e, ["hvcC"])[0]; if (u && u.length > 12) { const l = u[1], d = ["", "A", "B", "C"][l >> 6], h = l & 31, c = K(u, 2), f = (l & 32) >> 5 ? "H" : "L", g = u[12], p = u.subarray(6, 12); s += "." + d + h, s += "." + Ir(c).toString(16).toUpperCase(), s += "." + f + g; let m = ""; for (let y = p.length; y--; ) { const T = p[y]; (T || m) && (m = "." + T.toString(16).toUpperCase() + m); } s += m; } r = Jt(o == "hev1" ? "dvhe" : "dvh1", e); break; } case "dvh1": case "dvhe": case "dvav": case "dva1": case "dav1": { s = Jt(s, e) || s; break; } case "vp09": { const u = j(e, ["vpcC"])[0]; if (u && u.length > 6) { const l = u[4], d = u[5], h = u[6] >> 4 & 15; s += "." + vt(l) + "." + vt(d) + "." + vt(h); } break; } case "av01": { const u = j(e, ["av1C"])[0]; if (u && u.length > 2) { const l = u[1] >>> 5, d = u[1] & 31, h = u[2] >>> 7 ? "H" : "M", c = (u[2] & 64) >> 6, f = (u[2] & 32) >> 5, g = l === 2 && c ? f ? 12 : 10 : c ? 10 : 8, p = (u[2] & 16) >> 4, m = (u[2] & 8) >> 3, y = (u[2] & 4) >> 2, T = u[2] & 3; s += "." + l + "." + vt(d) + h + "." + vt(g) + "." + p + "." + m + y + T + "." + vt(1) + "." + vt(1) + "." + vt(1) + "." + 0, r = Jt("dav1", e); } break; } } return { codec: s, encrypted: a, supplemental: r }; } function Jt(n, t) { const e = j(t, ["dvvC"]), i = e.length ? e[0] : j(t, ["dvcC"])[0]; if (i) { const s = i[2] >> 1 & 127, r = i[2] << 5 & 32 | i[3] >> 3 & 31; return n + "." + vt(s) + "." + vt(r); } } function Ir(n) { let t = 0; for (let e = 0; e < 32; e++) t |= (n >> e & 1) << 31 - e; return t >>> 0; } function Ae(n, t) { const e = t + 5; for (; n[t++] & 128 && t < e; ) ; return t; } function te(n) { return ("0" + n.toString(16).toUpperCase()).slice(-2); } function vt(n) { return (n < 10 ? "0" : "") + n; } function Dr(n, t) { if (!n || !t) return; const e = t.keyId; e && t.isCommonEncryption && ps(n, (i, s) => { const r = i.subarray(8, 24); r.some((a) => a !== 0) || (J.log(`[eme] Patching keyId in 'enc${s ? "a" : "v"}>sinf>>tenc' box: ${qt(r)} -> ${qt(e)}`), i.set(e, 8)); }); } function Cr(n) { const t = []; return ps(n, (e) => t.push(e.subarray(8, 24))), t; } function ps(n, t) { j(n, ["moov", "trak"]).forEach((i) => { const s = j(i, ["mdia", "minf", "stbl", "stsd"])[0]; if (!s) return; const r = s.subarray(8); let a = j(r, ["enca"]); const o = a.length > 0; o || (a = j(r, ["encv"])), a.forEach((u) => { const l = o ? u.subarray(28) : u.subarray(78); j(l, ["sinf"]).forEach((h) => { const c = _r(h); c && t(c, o); }); }); }); } function _r(n) { const t = j(n, ["schm"])[0]; if (t) { const e = rt(t.subarray(4, 8)); if (e === "cbcs" || e === "cenc") { const i = j(n, ["schi", "tenc"])[0]; if (i) return i; } } } function Pr(n, t, e) { const i = {}, s = j(n, ["moof", "traf"]); for (let r = 0; r < s.length; r++) { const a = s[r], o = j(a, ["tfhd"])[0], u = K(o, 4), l = t[u]; if (!l) continue; i[u] || (i[u] = { start: NaN, duration: 0, sampleCount: 0, timescale: l.timescale, type: l.type }); const d = i[u], h = j(a, ["tfdt"])[0]; if (h) { const v = h[0]; let x = K(h, 4); v === 1 && (x === ui ? e.warn("[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time") : (x *= ui + 1, x += K(h, 8))), B(x) && (!B(d.start) || x < d.start) && (d.start = x); } const c = l.default, f = K(o, 0) | c?.flags; let g = c?.duration || 0; f & 8 && (f & 2 ? g = K(o, 12) : g = K(o, 8)); const p = j(a, ["trun"]); let m = d.start || 0, y = 0, T = g; for (let v = 0; v < p.length; v++) { const x = p[v], A = K(x, 4), C = d.sampleCount; d.sampleCount += A; const S = x[3] & 1, R = x[3] & 4, b = x[2] & 1, I = x[2] & 2, _ = x[2] & 4, F = x[2] & 8; let $ = 8, V = A; for (S && ($ += 4), R && A && (!(x[$ + 1] & 1) && d.keyFrameIndex === void 0 && (d.keyFrameIndex = C), $ += 4, b ? (T = K(x, $), $ += 4) : T = g, I && ($ += 4), F && ($ += 4), m += T, y += T, V--); V--; ) b ? (T = K(x, $), $ += 4) : T = g, I && ($ += 4), _ && (x[$ + 1] & 1 || d.keyFrameIndex === void 0 && (d.keyFrameIndex = d.sampleCount - (V + 1), d.keyFrameStart = m), $ += 4), F && ($ += 4), m += T, y += T; !y && g && (y += g * A); } d.duration += y; } if (!Object.keys(i).some((r) => i[r].duration)) { let r = 1 / 0, a = 0; const o = j(n, ["sidx"]); for (let u = 0; u < o.length; u++) { const l = Rr(o[u]); if (l != null && l.references) { r = Math.min(r, l.earliestPresentationTime / l.timescale); const d = l.references.reduce((h, c) => h + c.info.duration || 0, 0); a = Math.max(a, d + l.earliestPresentationTime / l.timescale); } } a && B(a) && Object.keys(i).forEach((u) => { i[u].duration || (i[u].duration = a * i[u].timescale - i[u].start); }); } return i; } function kr(n) { const t = { valid: null, remainder: null }, e = j(n, ["moof"]); if (e.length < 2) return t.remainder = n, t; const i = e[e.length - 1]; return t.valid = n.slice(0, i.byteOffset - 8), t.remainder = n.slice(i.byteOffset - 8), t; } function mt(n, t) { const e = new Uint8Array(n.length + t.length); return e.set(n), e.set(t, n.length), e; } function hi(n, t) { const e = [], i = t.samples, s = t.timescale, r = t.id; let a = !1; return j(i, ["moof"]).map((u) => { const l = u.byteOffset - 8; j(u, ["traf"]).map((h) => { const c = j(h, ["tfdt"]).map((f) => { const g = f[0]; let p = K(f, 4); return g === 1 && (p *= Math.pow(2, 32), p += K(f, 8)), p / s; })[0]; return c !== void 0 && (n = c), j(h, ["tfhd"]).map((f) => { const g = K(f, 4), p = K(f, 0) & 16777215, m = (p & 1) !== 0, y = (p & 2) !== 0, T = (p & 8) !== 0; let v = 0; const x = (p & 16) !== 0; let A = 0; const C = (p & 32) !== 0; let S = 8; g === r && (m && (S += 8), y && (S += 4), T && (v = K(f, S), S += 4), x && (A = K(f, S), S += 4), C && (S += 4), t.type === "video" && (a = ze(t.codec)), j(h, ["trun"]).map((R) => { const b = R[0], I = K(R, 0) & 16777215, _ = (I & 1) !== 0; let F = 0; const $ = (I & 4) !== 0, V = (I & 256) !== 0; let N = 0; const P = (I & 512) !== 0; let G = 0; const M = (I & 1024) !== 0, U = (I & 2048) !== 0; let H = 0; const O = K(R, 4); let w = 8; _ && (F = K(R, w), w += 4), $ && (w += 4); let z = F + l; for (let Z = 0; Z < O; Z++) { if (V ? (N = K(R, w), w += 4) : N = v, P ? (G = K(R, w), w += 4) : G = A, M && (w += 4), U && (b === 0 ? H = K(R, w) : H = gs(R, w), w += 4), t.type === tt.VIDEO) { let Q = 0; for (; Q < G; ) { const et = K(i, z); if (z += 4, Or(a, i[z])) { const pt = i.subarray(z, z + et); Es(pt, a ? 2 : 1, n + H / s, e); } z += et, Q += et + 4; } } n += N / s; } })); }); }); }), e; } function ze(n) { if (!n) return !1; const t = n.substring(0, 4); return t === "hvc1" || t === "hev1" || // Dolby Vision t === "dvh1" || t === "dvhe"; } function Or(n, t) { if (n) { const e = t >> 1 & 63; return e === 39 || e === 40; } else return (t & 31) === 6; } function Es(n, t, e, i) { const s = vs(n); let r = 0; r += t; let a = 0, o = 0, u = 0; for (; r < s.length; ) { a = 0; do { if (r >= s.length) break; u = s[r++], a += u; } while (u === 255); o = 0; do { if (r >= s.length) break; u = s[r++], o += u; } while (u === 255); const l = s.length - r; let d = r; if (o < l) r += o; else if (o > l) { J.error(`Malformed SEI payload. ${o} is too small, only ${l} bytes left to parse.`); break; } if (a === 4) { if (s[d++] === 181) { const c = fs(s, d); if (d += 2, c === 49) { const f = K(s, d); if (d += 4, f === 1195456820) { const g = s[d++]; if (g === 3) { const p = s[d++], m = 31 & p, y = 64 & p, T = y ? 2 + m * 3 : 0, v = new Uint8Array(T); if (y) { v[0] = p; for (let x = 1; x < T; x++) v[x] = s[d++]; } i.push({ type: g, payloadType: a, pts: e, bytes: v }); } } } } } else if (a === 5 && o > 16) { const h = []; for (let g = 0; g < 16; g++) { const p = s[d++].toString(16); h.push(p.length == 1 ? "0" + p : p), (g === 3 || g === 5 || g === 7 || g === 9) && h.push("-"); } const c = o - 16, f = new Uint8Array(c); for (let g = 0; g < c; g++) f[g] = s[d++]; i.push({ payloadType: a, pts: e, uuid: h.join(""), userData: gt(f), userDataBytes: f }); } } } function vs(n) { const t = n.byteLength, e = []; let i = 1; for (; i < t - 2; ) n[i] === 0 && n[i + 1] === 0 && n[i + 2] === 3 ? (e.push(i + 2), i += 2) : i++; if (e.length === 0) return n; const s = t - e.length, r = new Uint8Array(s); let a = 0; for (i = 0; i < s; a++, i++) a === e[0] && (a++, e.shift()), r[i] = n[a]; return r; } function wr(n) { const t = n[0]; let e = "", i = "", s = 0, r = 0, a = 0, o = 0, u = 0, l = 0; if (t === 0) { for (; rt(n.subarray(l, l + 1)) !== "\0"; ) e += rt(n.subarray(l, l + 1)), l += 1; for (e += rt(n.subarray(l, l + 1)), l += 1; rt(n.subarray(l, l + 1)) !== "\0"; ) i += rt(n.subarray(l, l + 1)), l += 1; i += rt(n.subarray(l, l + 1)), l += 1, s = K(n, 12), r = K(n, 16), o = K(n, 20), u = K(n, 24), l = 28; } else if (t === 1) { l += 4, s = K(n, l), l += 4; const h = K(n, l); l += 4; const c = K(n, l); for (l += 4, a = 2 ** 32 * h + c, or(a) || (a = Number.MAX_SAFE_INTEGER, J.warn("Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box")), o = K(n, l), l += 4, u = K(n, l), l += 4; rt(n.subarray(l, l + 1)) !== "\0"; ) e += rt(n.subarray(l, l + 1)), l += 1; for (e += rt(n.subarray(l, l + 1)), l += 1; rt(n.subarray(l, l + 1)) !== "\0"; ) i += rt(n.subarray(l, l + 1)), l += 1; i += rt(n.subarray(l, l + 1)), l += 1; } const d = n.subarray(l, n.byteLength); return { schemeIdUri: e, value: i, timeScale: s, presentationTime: a, presentationTimeDelta: r, eventDuration: o, id: u, payload: d }; } const ys = () => /\(Windows.+Firefox\//i.test(navigator.userAgent), Gt = { audio: { a3ds: 1, "ac-3": 0.95, "ac-4": 1, alac: 0.9, alaw: 1, dra1: 1, "dts+": 1, "dts-": 1, dtsc: 1, dtse: 1, dtsh: 1, "ec-3": 0.9, enca: 1, fLaC: 0.9, // MP4-RA listed codec entry for FLAC flac: 0.9, // legacy browser codec name for FLAC FLAC: 0.9, // some manifests may list "FLAC" with Apple's tools g719: 1, g726: 1, m4ae: 1, mha1: 1, mha2: 1, mhm1: 1, mhm2: 1, mlpa: 1, mp4a: 1, "raw ": 1, Opus: 1, opus: 1, // browsers expect this to be lowercase despite MP4RA says 'Opus' samr: 1, sawb: 1, sawp: 1, sevc: 1, sqcp: 1, ssmv: 1, twos: 1, ulaw: 1 }, video: { avc1: 1, avc2: 1, avc3: 1, avc4: 1, avcp: 1, av01: 0.8, dav1: 0.8, drac: 1, dva1: 1, dvav: 1, dvh1: 0.7, dvhe: 0.7, encv: 1, hev1: 0.75, hvc1: 0.75, mjp2: 1, mp4v: 1, mvc1: 1, mvc2: 1, mvc3: 1, mvc4: 1, resv: 1, rv60: 1, s263: 1, svc1: 1, svc2: 1, "vc-1": 1, vp08: 1, vp09: 0.9 }, text: { stpp: 1, wvtt: 1 } }; function Xe(n, t) { const e = Gt[t]; return !!e && !!e[n.slice(0, 4)]; } function zt(n, t, e = !0) { return !n.split(",").some((i) => !Qe(i, t, e)); } function Qe(n, t, e = !0) { var i; const s = _t(e); return (i = s?.isTypeSupported(Xt(n, t))) != null ? i : !1; } function Xt(n, t) { return `${t}/mp4;codecs=${n}`; } function ci(n) { if (n) { const t = n.substring(0, 4); return Gt.video[t]; } return 2; } function he(n) { const t = ys(); return n.split(",").reduce((e, i) => { const r = t && ze(i) ? 9 : Gt.video[i]; return r ? (r * 2 + e) / (e ? 3 : 2) : (Gt.audio[i] + e) / (e ? 2 : 1); }, 0); } const Re = {}; function Fr(n, t = !0) { if (Re[n]) return Re[n]; const e = { // Idealy fLaC and Opus would be first (spec-compliant) but // some browsers will report that fLaC is supported then fail. // see: https://bugs.chromium.org/p/chromium/issues/detail?id=1422728 flac: ["flac", "fLaC", "FLAC"], opus: ["opus", "Opus"], // Replace audio codec info if browser does not support mp4a.40.34, // and demuxer can fallback to 'audio/mpeg' or 'audio/mp4;codecs="mp3"' "mp4a.40.34": ["mp3"] }[n]; for (let s = 0; s < e.length; s++) { var i; if (Qe(e[s], "audio", t)) return Re[n] = e[s], e[s]; if (e[s] === "mp3" && (i = _t(t)) != null && i.isTypeSupported("audio/mpeg")) return ""; } return n; } const Mr = /flac|opus|mp4a\.40\.34/i; function ce(n, t = !0) { return n.replace(Mr, (e) => Fr(e.toLowerCase(), t)); } function Nr(n, t) { const e = []; if (n) { const i = n.split(","); for (let s = 0; s < i.length; s++) Xe(i[s], "video") || e.push(i[s]); } return t && e.push(t), e.join(","); } function le(n, t) { if (n && (n.length > 4 || ["ac-3", "ec-3", "alac", "fLaC", "Opus"].indexOf(n) !== -1) && (fi(n, "audio") || fi(n, "video"))) return n; if (t) { const e = t.split(","); if (e.length > 1) { if (n) { for (let i = e.length; i--; ) if (e[i].substring(0, 4) === n.substring(0, 4)) return e[i]; } return e[0]; } } return t || n; } function fi(n, t) { return Xe(n, t) && Qe(n, t); } function Br(n) { const t = n.split(","); for (let e = 0; e < t.length; e++) { const i = t[e].split("."); i.length > 2 && i[0] === "avc1" && (t[e] = `avc1.${parseInt(i[1]).toString(16)}${("000" + parseInt(i[2]).toString(16)).slice(-4)}`); } return t.join(","); } function $r(n) { if (n.startsWith("av01.")) { const t = n.split("."), e = ["0", "111", "01", "01", "01", "0"]; for (let i = t.length; i > 4 && i < 10; i++) t[i] = e[i - 4]; return t.join("."); } return n; } function gi(n) { const t = _t(n) || { isTypeSupported: () => !1 }; return { mpeg: t.isTypeSupported("audio/mpeg"), mp3: t.isTypeSupported('audio/mp4; codecs="mp3"'), ac3: !1 }; } function Ue(n) { return n.replace(/^.+codecs=["']?([^"']+).*$/, "$1"); } const Ge = ["NONE", "TYPE-0", "TYPE-1", null]; function Ur(n) { return Ge.indexOf(n) > -1; } const fe = ["SDR", "PQ", "HLG"]; function Gr(n) { return !!n && fe.indexOf(n) > -1; } var ue = { No: "", Yes: "YES", v2: "v2" }; function mi(n) { const { canSkipUntil: t, canSkipDateRanges: e, age: i } = n, s = i < t / 2; return t && s ? e ? ue.v2 : ue.Yes : ue.No; } class pi { constructor(t, e, i) { this.msn = void 0, this.part = void 0, this.skip = void 0, this.msn = t, this.part = e, this.skip = i; } addDirectives(t) { const e = new self.URL(t); return this.msn !== void 0 && e.searchParams.set("_HLS_msn", this.msn.toString()), this.part !== void 0 && e.searchParams.set("_HLS_part", this.part.toString()), this.skip && e.searchParams.set("_HLS_skip", this.skip), e.href; } } class Ts { constructor(t) { if (this._attrs = void 0, this.audioCodec = void 0, this.bitrate = void 0, this.codecSet = void 0, this.url = void 0, this.frameRate = void 0, this.height = void 0, this.id = void 0, this.name = void 0, this.supplemental = void 0, this.videoCodec = void 0, this.width = void 0, this.details = void 0, this.fragmentError = 0, this.loadError = 0, this.loaded = void 0, this.realBitrate = 0, this.supportedPromise = void 0, this.supportedResult = void 0, this._avgBitrate = 0, this._audioGroups = void 0, this._subtitleGroups = void 0, this._urlId = 0, this.url = [t.url], this._attrs = [t.attrs], this.bitrate = t.bitrate, t.details && (this.details = t.details), this.id = t.id || 0, this.name = t.name, this.width = t.width || 0, this.height = t.height || 0, this.frameRate = t.attrs.optionalFloat("FRAME-RATE", 0), this._avgBitrate = t.attrs.decimalInteger("AVERAGE-BANDWIDTH"), this.audioCodec = t.audioCodec, this.videoCodec = t.videoCodec, this.codecSet = [t.videoCodec, t.audioCodec].filter((i) => !!i).map((i) => i.substring(0, 4)).join(","), "supplemental" in t) { var e; this.supplemental = t.supplemental; const i = (e = t.supplemental) == null ? void 0 : e.videoCodec; i && i !== t.videoCodec && (this.codecSet += `,${i.substring(0, 4)}`); } this.addGroupId("audio", t.attrs.AUDIO), this.addGroupId("text", t.attrs.SUBTITLES); } get maxBitrate() { return Math.max(this.realBitrate, this.bitrate); } get averageBitrate() { return this._avgBitrate || this.realBitrate || this.bitrate; } get attrs() { return this._attrs[0]; } get codecs() { return this.attrs.CODECS || ""; } get pathwayId() { return this.attrs["PATHWAY-ID"] || "."; } get videoRange() { return this.attrs["VIDEO-RANGE"] || "SDR"; } get score() { return this.attrs.optionalFloat("SCORE", 0); } get uri() { return this.url[0] || ""; } hasAudioGroup(t) { return Ei(this._audioGroups, t); } hasSubtitleGroup(t) { return Ei(this._subtitleGroups, t); } get audioGroups() { return this._audioGroups; } get subtitleGroups() { return this._subtitleGroups; } addGroupId(t, e) { if (e) { if (t === "audio") { let i = this._audioGroups; i || (i = this._audioGroups = []), i.indexOf(e) === -1 && i.push(e); } else if (t === "text") { let i = this._subtitleGroups; i || (i = this._subtitleGroups = []), i.indexOf(e) === -1 && i.push(e); } } } // Deprecated methods (retained for backwards compatibility) get urlId() { return 0; } set urlId(t) { } get audioGroupIds() { return this.audioGroups ? [this.audioGroupId] : void 0; } get textGroupIds() { return this.subtitleGroups ? [this.textGroupId] : void 0; } get audioGroupId() { var t; return (t = this.audioGroups) == null ? void 0 : t[0]; } get textGroupId() { var t; return (t = this.subtitleGroups) == null ? void 0 : t[0]; } addFallback() { } } function Ei(n, t) { return !t || !n ? !1 : n.indexOf(t) !== -1; } function Vr() { if (typeof matchMedia == "function") { const n = matchMedia("(dynamic-range: high)"), t = matchMedia("bad query"); if (n.media !== t.media) return n.matches === !0; } return !1; } function Hr(n, t) { let e = !1, i = []; if (n && (e = n !== "SDR", i = [n]), t) { i = t.allowedVideoRanges || fe.slice(0); const s = i.join("") !== "SDR" && !t.videoCodec; e = t.preferHDR !== void 0 ? t.preferHDR : s && Vr(), e || (i = ["SDR"]); } return { preferHDR: e, allowedVideoRanges: i }; } const Kr = (n) => { const t = /* @__PURE__ */ new WeakSet(); return (e, i) => { if (n && (i = n(e, i)), typeof i == "object" && i !== null) { if (t.has(i)) return; t.add(i); } return i; }; }, ot = (n, t) => JSON.stringify(n, Kr(t)); function Wr(n, t, e, i, s) { const r = Object.keys(n), a = i?.channels, o = i?.audioCodec, u = s?.videoCodec, l = a && parseInt(a) === 2; let d = !1, h = !1, c = 1 / 0, f = 1 / 0, g = 1 / 0, p = 1 / 0, m = 0, y = []; const { preferHDR: T, allowedVideoRanges: v } = Hr(t, s); for (let R = r.length; R--; ) { const b = n[r[R]]; d || (d = b.channels[2] > 0), c = Math.min(c, b.minHeight), f = Math.min(f, b.minFramerate), g = Math.min(g, b.minBitrate), v.filter((_) => b.videoRanges[_] > 0).length > 0 && (h = !0); } c = B(c) ? c : 0, f = B(f) ? f : 0; const x = Math.max(1080, c), A = Math.max(30, f); g = B(g) ? g : e, e = Math.max(g, e), h || (t = void 0); const C = r.length > 1; return { codecSet: r.reduce((R, b) => { const I = n[b]; if (b === R) return R; if (y = h ? v.filter((_) => I.videoRanges[_] > 0) : [], C) { if (I.minBitrate > e) return Et(b, `min bitrate of ${I.minBitrate} > current estimate of ${e}`), R; if (!I.hasDefaultAudio) return Et(b, "no renditions with default or auto-select sound found"), R; if (o && b.indexOf(o.substring(0, 4)) % 5 !== 0) return Et(b, `audio codec preference "${o}" not found`), R; if (a && !l) { if (!I.channels[a]) return Et(b,