UNPKG

@asicupv/paella-video-plugins

Version:
1,545 lines (1,544 loc) 492 kB
//#region ../../node_modules/hls.js/dist/hls.mjs function e(e) { return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e; } var t = { exports: {} }; (function(e, t) { (function(t) { var n = /^(?=((?:[a-zA-Z0-9+\-.]+:)?))\1(?=((?:\/\/[^\/?#]*)?))\2(?=((?:(?:[^?#\/]*\/)*[^;?#\/]*)?))\3((?:;[^?#]*)?)(\?[^#]*)?(#[^]*)?$/, r = /^(?=([^\/?#]*))\1([^]*)$/, i = /(?:\/|^)\.(?=\/)/g, a = /(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g, o = { buildAbsoluteURL: function(e, t, n) { if (n ||= {}, e = e.trim(), t = t.trim(), !t) { if (!n.alwaysNormalize) return e; var i = o.parseURL(e); if (!i) throw Error("Error trying to parse base URL."); return i.path = o.normalizePath(i.path), o.buildURLFromParts(i); } var a = o.parseURL(t); if (!a) throw Error("Error trying to parse relative URL."); if (a.scheme) return n.alwaysNormalize ? (a.path = o.normalizePath(a.path), o.buildURLFromParts(a)) : t; var s = o.parseURL(e); if (!s) throw Error("Error trying to parse base URL."); if (!s.netLoc && s.path && s.path[0] !== "/") { var c = r.exec(s.path); s.netLoc = c[1], s.path = c[2]; } s.netLoc && !s.path && (s.path = "/"); var l = { scheme: s.scheme, netLoc: a.netLoc, path: null, params: a.params, query: a.query, fragment: a.fragment }; if (!a.netLoc && (l.netLoc = s.netLoc, a.path[0] !== "/")) if (!a.path) l.path = s.path, a.params || (l.params = s.params, a.query || (l.query = s.query)); else { var u = s.path, d = u.substring(0, u.lastIndexOf("/") + 1) + a.path; l.path = o.normalizePath(d); } return l.path === null && (l.path = n.alwaysNormalize ? o.normalizePath(a.path) : a.path), o.buildURLFromParts(l); }, parseURL: function(e) { var t = n.exec(e); return t ? { scheme: t[1] || "", netLoc: t[2] || "", path: t[3] || "", params: t[4] || "", query: t[5] || "", fragment: t[6] || "" } : null; }, normalizePath: function(e) { for (e = e.split("").reverse().join("").replace(i, ""); e.length !== (e = e.replace(a, "")).length;); return e.split("").reverse().join(""); }, buildURLFromParts: function(e) { return e.scheme + e.netLoc + e.path + e.params + e.query + e.fragment; } }; e.exports = o; })(); })(t); var n = t.exports; function r(e, t) { var n = Object.keys(e); if (Object.getOwnPropertySymbols) { var r = Object.getOwnPropertySymbols(e); t && (r = r.filter(function(t) { return Object.getOwnPropertyDescriptor(e, t).enumerable; })), n.push.apply(n, r); } return n; } function i(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t] == null ? {} : arguments[t]; t % 2 ? r(Object(n), !0).forEach(function(t) { s(e, t, n[t]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(n)) : r(Object(n)).forEach(function(t) { Object.defineProperty(e, t, Object.getOwnPropertyDescriptor(n, t)); }); } return e; } function a(e, t) { if (typeof e != "object" || !e) return e; var n = e[Symbol.toPrimitive]; if (n !== void 0) { var r = n.call(e, t || "default"); if (typeof r != "object") return r; throw TypeError("@@toPrimitive must return a primitive value."); } return (t === "string" ? String : Number)(e); } function o(e) { var t = a(e, "string"); return typeof t == "symbol" ? t : String(t); } function s(e, t, n) { return t = o(t), t in e ? Object.defineProperty(e, t, { value: n, enumerable: !0, configurable: !0, writable: !0 }) : e[t] = n, e; } function c() { return c = Object.assign ? Object.assign.bind() : function(e) { for (var t = 1; t < arguments.length; t++) { var n = arguments[t]; for (var r in n) Object.prototype.hasOwnProperty.call(n, r) && (e[r] = n[r]); } return e; }, c.apply(this, arguments); } var l = Number.isFinite || function(e) { return typeof e == "number" && isFinite(e); }, u = Number.isSafeInteger || function(e) { return typeof e == "number" && Math.abs(e) <= d; }, d = 2 ** 53 - 1 || 9007199254740991, f = /* @__PURE__ */ function(e) { return e.MEDIA_ATTACHING = "hlsMediaAttaching", e.MEDIA_ATTACHED = "hlsMediaAttached", e.MEDIA_DETACHING = "hlsMediaDetaching", e.MEDIA_DETACHED = "hlsMediaDetached", e.BUFFER_RESET = "hlsBufferReset", e.BUFFER_CODECS = "hlsBufferCodecs", e.BUFFER_CREATED = "hlsBufferCreated", e.BUFFER_APPENDING = "hlsBufferAppending", e.BUFFER_APPENDED = "hlsBufferAppended", e.BUFFER_EOS = "hlsBufferEos", e.BUFFER_FLUSHING = "hlsBufferFlushing", e.BUFFER_FLUSHED = "hlsBufferFlushed", e.MANIFEST_LOADING = "hlsManifestLoading", e.MANIFEST_LOADED = "hlsManifestLoaded", e.MANIFEST_PARSED = "hlsManifestParsed", e.LEVEL_SWITCHING = "hlsLevelSwitching", e.LEVEL_SWITCHED = "hlsLevelSwitched", e.LEVEL_LOADING = "hlsLevelLoading", e.LEVEL_LOADED = "hlsLevelLoaded", e.LEVEL_UPDATED = "hlsLevelUpdated", e.LEVEL_PTS_UPDATED = "hlsLevelPtsUpdated", e.LEVELS_UPDATED = "hlsLevelsUpdated", e.AUDIO_TRACKS_UPDATED = "hlsAudioTracksUpdated", e.AUDIO_TRACK_SWITCHING = "hlsAudioTrackSwitching", e.AUDIO_TRACK_SWITCHED = "hlsAudioTrackSwitched", e.AUDIO_TRACK_LOADING = "hlsAudioTrackLoading", e.AUDIO_TRACK_LOADED = "hlsAudioTrackLoaded", e.SUBTITLE_TRACKS_UPDATED = "hlsSubtitleTracksUpdated", e.SUBTITLE_TRACKS_CLEARED = "hlsSubtitleTracksCleared", e.SUBTITLE_TRACK_SWITCH = "hlsSubtitleTrackSwitch", e.SUBTITLE_TRACK_LOADING = "hlsSubtitleTrackLoading", e.SUBTITLE_TRACK_LOADED = "hlsSubtitleTrackLoaded", e.SUBTITLE_FRAG_PROCESSED = "hlsSubtitleFragProcessed", e.CUES_PARSED = "hlsCuesParsed", e.NON_NATIVE_TEXT_TRACKS_FOUND = "hlsNonNativeTextTracksFound", e.INIT_PTS_FOUND = "hlsInitPtsFound", e.FRAG_LOADING = "hlsFragLoading", e.FRAG_LOAD_EMERGENCY_ABORTED = "hlsFragLoadEmergencyAborted", e.FRAG_LOADED = "hlsFragLoaded", e.FRAG_DECRYPTED = "hlsFragDecrypted", e.FRAG_PARSING_INIT_SEGMENT = "hlsFragParsingInitSegment", e.FRAG_PARSING_USERDATA = "hlsFragParsingUserdata", e.FRAG_PARSING_METADATA = "hlsFragParsingMetadata", e.FRAG_PARSED = "hlsFragParsed", e.FRAG_BUFFERED = "hlsFragBuffered", e.FRAG_CHANGED = "hlsFragChanged", e.FPS_DROP = "hlsFpsDrop", e.FPS_DROP_LEVEL_CAPPING = "hlsFpsDropLevelCapping", e.MAX_AUTO_LEVEL_UPDATED = "hlsMaxAutoLevelUpdated", e.ERROR = "hlsError", e.DESTROYING = "hlsDestroying", e.KEY_LOADING = "hlsKeyLoading", e.KEY_LOADED = "hlsKeyLoaded", e.LIVE_BACK_BUFFER_REACHED = "hlsLiveBackBufferReached", e.BACK_BUFFER_REACHED = "hlsBackBufferReached", e.STEERING_MANIFEST_LOADED = "hlsSteeringManifestLoaded", e; }({}), p = /* @__PURE__ */ function(e) { return e.NETWORK_ERROR = "networkError", e.MEDIA_ERROR = "mediaError", e.KEY_SYSTEM_ERROR = "keySystemError", e.MUX_ERROR = "muxError", e.OTHER_ERROR = "otherError", e; }({}), m = /* @__PURE__ */ function(e) { return e.KEY_SYSTEM_NO_KEYS = "keySystemNoKeys", e.KEY_SYSTEM_NO_ACCESS = "keySystemNoAccess", e.KEY_SYSTEM_NO_SESSION = "keySystemNoSession", e.KEY_SYSTEM_NO_CONFIGURED_LICENSE = "keySystemNoConfiguredLicense", e.KEY_SYSTEM_LICENSE_REQUEST_FAILED = "keySystemLicenseRequestFailed", e.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED = "keySystemServerCertificateRequestFailed", e.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED = "keySystemServerCertificateUpdateFailed", e.KEY_SYSTEM_SESSION_UPDATE_FAILED = "keySystemSessionUpdateFailed", e.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED = "keySystemStatusOutputRestricted", e.KEY_SYSTEM_STATUS_INTERNAL_ERROR = "keySystemStatusInternalError", e.MANIFEST_LOAD_ERROR = "manifestLoadError", e.MANIFEST_LOAD_TIMEOUT = "manifestLoadTimeOut", e.MANIFEST_PARSING_ERROR = "manifestParsingError", e.MANIFEST_INCOMPATIBLE_CODECS_ERROR = "manifestIncompatibleCodecsError", e.LEVEL_EMPTY_ERROR = "levelEmptyError", e.LEVEL_LOAD_ERROR = "levelLoadError", e.LEVEL_LOAD_TIMEOUT = "levelLoadTimeOut", e.LEVEL_PARSING_ERROR = "levelParsingError", e.LEVEL_SWITCH_ERROR = "levelSwitchError", e.AUDIO_TRACK_LOAD_ERROR = "audioTrackLoadError", e.AUDIO_TRACK_LOAD_TIMEOUT = "audioTrackLoadTimeOut", e.SUBTITLE_LOAD_ERROR = "subtitleTrackLoadError", e.SUBTITLE_TRACK_LOAD_TIMEOUT = "subtitleTrackLoadTimeOut", e.FRAG_LOAD_ERROR = "fragLoadError", e.FRAG_LOAD_TIMEOUT = "fragLoadTimeOut", e.FRAG_DECRYPT_ERROR = "fragDecryptError", e.FRAG_PARSING_ERROR = "fragParsingError", e.FRAG_GAP = "fragGap", e.REMUX_ALLOC_ERROR = "remuxAllocError", e.KEY_LOAD_ERROR = "keyLoadError", e.KEY_LOAD_TIMEOUT = "keyLoadTimeOut", e.BUFFER_ADD_CODEC_ERROR = "bufferAddCodecError", e.BUFFER_INCOMPATIBLE_CODECS_ERROR = "bufferIncompatibleCodecsError", e.BUFFER_APPEND_ERROR = "bufferAppendError", e.BUFFER_APPENDING_ERROR = "bufferAppendingError", e.BUFFER_STALLED_ERROR = "bufferStalledError", e.BUFFER_FULL_ERROR = "bufferFullError", e.BUFFER_SEEK_OVER_HOLE = "bufferSeekOverHole", e.BUFFER_NUDGE_ON_STALL = "bufferNudgeOnStall", e.INTERNAL_EXCEPTION = "internalException", e.INTERNAL_ABORTED = "aborted", e.UNKNOWN = "unknown", e; }({}), h = function() {}, g = { trace: h, debug: h, log: h, warn: h, info: h, error: h }, _ = g; function v(e) { let t = self.console[e]; return t ? t.bind(self.console, `[${e}] >`) : h; } function y(e, ...t) { t.forEach(function(t) { _[t] = e[t] ? e[t].bind(e) : v(t); }); } function b(e, t) { if (typeof console == "object" && e === !0 || typeof e == "object") { y(e, "debug", "log", "info", "warn", "error"); try { _.log(`Debug logs enabled for "${t}" in hls.js version 1.5.20`); } catch { _ = g; } } else _ = g; } var x = _, S = /^(\d+)x(\d+)$/, C = /(.+?)=(".*?"|.*?)(?:,|$)/g, w = class e { constructor(t) { typeof t == "string" && (t = e.parseAttrList(t)), c(this, t); } get clientAttrs() { return Object.keys(this).filter((e) => e.substring(0, 2) === "X-"); } decimalInteger(e) { let t = parseInt(this[e], 10); return t > 2 ** 53 - 1 ? Infinity : t; } hexadecimalInteger(e) { if (this[e]) { let t = (this[e] || "0x").slice(2); t = (t.length & 1 ? "0" : "") + t; let n = new Uint8Array(t.length / 2); for (let e = 0; e < t.length / 2; e++) n[e] = parseInt(t.slice(e * 2, e * 2 + 2), 16); return n; } else return null; } hexadecimalIntegerAsNumber(e) { let t = parseInt(this[e], 16); return t > 2 ** 53 - 1 ? Infinity : t; } decimalFloatingPoint(e) { return parseFloat(this[e]); } optionalFloat(e, t) { let n = this[e]; return n ? parseFloat(n) : t; } enumeratedString(e) { return this[e]; } bool(e) { return this[e] === "YES"; } decimalResolution(e) { let t = S.exec(this[e]); if (t !== null) return { width: parseInt(t[1], 10), height: parseInt(t[2], 10) }; } static parseAttrList(e) { let t, n = {}; for (C.lastIndex = 0; (t = C.exec(e)) !== null;) { let e = t[2]; e.indexOf("\"") === 0 && e.lastIndexOf("\"") === e.length - 1 && (e = e.slice(1, -1)); let r = t[1].trim(); n[r] = e; } return n; } }; function T(e) { return e !== "ID" && e !== "CLASS" && e !== "START-DATE" && e !== "DURATION" && e !== "END-DATE" && e !== "END-ON-NEXT"; } function E(e) { return e === "SCTE35-OUT" || e === "SCTE35-IN"; } var D = class { constructor(e, t) { if (this.attr = void 0, this._startDate = void 0, this._endDate = void 0, this._badValueForSameId = void 0, t) { let n = t.attr; for (let t in n) if (Object.prototype.hasOwnProperty.call(e, t) && e[t] !== n[t]) { x.warn(`DATERANGE tag attribute: "${t}" does not match for tags with ID: "${e.ID}"`), this._badValueForSameId = t; break; } e = c(new w({}), n, e); } if (this.attr = e, this._startDate = new Date(e["START-DATE"]), "END-DATE" in this.attr) { let e = new Date(this.attr["END-DATE"]); l(e.getTime()) && (this._endDate = e); } } get id() { return this.attr.ID; } get class() { return this.attr.CLASS; } get startDate() { return this._startDate; } get endDate() { if (this._endDate) return this._endDate; let e = this.duration; return e === null ? null : new Date(this._startDate.getTime() + e * 1e3); } get duration() { if ("DURATION" in this.attr) { let e = this.attr.decimalFloatingPoint("DURATION"); if (l(e)) return e; } else if (this._endDate) return (this._endDate.getTime() - this._startDate.getTime()) / 1e3; return null; } get plannedDuration() { return "PLANNED-DURATION" in this.attr ? this.attr.decimalFloatingPoint("PLANNED-DURATION") : null; } get endOnNext() { return this.attr.bool("END-ON-NEXT"); } get isValid() { return !!this.id && !this._badValueForSameId && l(this.startDate.getTime()) && (this.duration === null || this.duration >= 0) && (!this.endOnNext || !!this.class); } }, O = class { 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 }; } }, k = { AUDIO: "audio", VIDEO: "video", AUDIOVIDEO: "audiovideo" }, A = class { constructor(e) { this._byteRange = null, this._url = null, this.baseurl = void 0, this.relurl = void 0, this.elementaryStreams = { [k.AUDIO]: null, [k.VIDEO]: null, [k.AUDIOVIDEO]: null }, this.baseurl = e; } setByteRange(e, t) { let n = e.split("@", 2), r; r = n.length === 1 ? t?.byteRangeEndOffset || 0 : parseInt(n[1]), this._byteRange = [r, parseInt(n[0]) + r]; } get byteRange() { return this._byteRange ? this._byteRange : []; } get byteRangeStartOffset() { return this.byteRange[0]; } get byteRangeEndOffset() { return this.byteRange[1]; } get url() { return !this._url && this.baseurl && this.relurl && (this._url = n.buildAbsoluteURL(this.baseurl, this.relurl, { alwaysNormalize: !0 })), this._url || ""; } set url(e) { this._url = e; } }, j = class extends A { constructor(e, t) { super(t), this._decryptdata = null, this.rawProgramDateTime = null, this.programDateTime = 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.deltaPTS = void 0, this.maxStartPTS = void 0, this.minEndPTS = void 0, this.stats = new O(), 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 = e; } get decryptdata() { let { levelkeys: e } = this; if (!e && !this._decryptdata) return null; if (!this._decryptdata && this.levelkeys && !this.levelkeys.NONE) { let e = this.levelkeys.identity; if (e) this._decryptdata = e.getDecryptData(this.sn); else { let e = Object.keys(this.levelkeys); if (e.length === 1) return this._decryptdata = this.levelkeys[e[0]].getDecryptData(this.sn); } } return this._decryptdata; } get end() { return this.start + this.duration; } get endProgramDateTime() { if (this.programDateTime === null || !l(this.programDateTime)) return null; let e = l(this.duration) ? this.duration : 0; return this.programDateTime + e * 1e3; } get encrypted() { var e; if ((e = this._decryptdata) != null && e.encrypted) return !0; if (this.levelkeys) { let e = Object.keys(this.levelkeys), t = e.length; if (t > 1 || t === 1 && this.levelkeys[e[0]].encrypted) return !0; } return !1; } setKeyFormat(e) { if (this.levelkeys) { let t = this.levelkeys[e]; t && !this._decryptdata && (this._decryptdata = t.getDecryptData(this.sn)); } } abortRequests() { var e, t; (e = this.loader) == null || e.abort(), (t = this.keyLoader) == null || t.abort(); } setElementaryStreamInfo(e, t, n, r, i, a = !1) { let { elementaryStreams: o } = this, s = o[e]; if (!s) { o[e] = { startPTS: t, endPTS: n, startDTS: r, endDTS: i, partial: a }; return; } s.startPTS = Math.min(s.startPTS, t), s.endPTS = Math.max(s.endPTS, n), s.startDTS = Math.min(s.startDTS, r), s.endDTS = Math.max(s.endDTS, i); } clearElementaryStreamInfo() { let { elementaryStreams: e } = this; e[k.AUDIO] = null, e[k.VIDEO] = null, e[k.AUDIOVIDEO] = null; } }, M = class extends A { constructor(e, t, n, r, i) { super(n), 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.stats = new O(), this.duration = e.decimalFloatingPoint("DURATION"), this.gap = e.bool("GAP"), this.independent = e.bool("INDEPENDENT"), this.relurl = e.enumeratedString("URI"), this.fragment = t, this.index = r; let a = e.enumeratedString("BYTERANGE"); a && this.setByteRange(a, i), i && (this.fragOffset = i.fragOffset + i.duration); } get start() { return this.fragment.start + this.fragOffset; } get end() { return this.start + this.duration; } get loaded() { let { elementaryStreams: e } = this; return !!(e.audio || e.video || e.audiovideo); } }, ee = 10, te = class { constructor(e) { this.PTSKnown = !1, this.alignedSliding = !1, this.averagetargetduration = void 0, this.endCC = 0, this.endSN = 0, this.fragments = void 0, this.fragmentHint = void 0, this.partList = null, this.dateRanges = void 0, this.live = !0, this.ageHeader = 0, this.advancedDateTime = void 0, this.updated = !0, this.advanced = !0, this.availabilityDelay = void 0, this.misses = 0, this.startCC = 0, this.startSN = 0, this.startTimeOffset = null, this.targetduration = 0, this.totalduration = 0, this.type = null, this.url = void 0, this.m3u8 = "", this.version = null, this.canBlockReload = !1, this.canSkipUntil = 0, this.canSkipDateRanges = !1, this.skippedSegments = 0, this.recentlyRemovedDateranges = void 0, this.partHoldBack = 0, this.holdBack = 0, this.partTarget = 0, this.preloadHint = void 0, this.renditionReports = void 0, this.tuneInGoal = 0, this.deltaUpdateFailed = void 0, this.driftStartTime = 0, this.driftEndTime = 0, this.driftStart = 0, this.driftEnd = 0, this.encryptedFragments = void 0, this.playlistParsingError = null, this.variableList = null, this.hasVariableRefs = !1, this.fragments = [], this.encryptedFragments = [], this.dateRanges = {}, this.url = e; } reloaded(e) { if (!e) { this.advanced = !0, this.updated = !0; return; } let t = this.lastPartSn - e.lastPartSn, n = this.lastPartIndex - e.lastPartIndex; this.updated = this.endSN !== e.endSN || !!n || !!t || !this.live, this.advanced = this.endSN > e.endSN || t > 0 || t === 0 && n > 0, this.updated || this.advanced ? this.misses = Math.floor(e.misses * .6) : this.misses = e.misses + 1, this.availabilityDelay = e.availabilityDelay; } get hasProgramDateTime() { return this.fragments.length ? l(this.fragments[this.fragments.length - 1].programDateTime) : !1; } get levelTargetDuration() { return this.averagetargetduration || this.targetduration || ee; } get drift() { let e = this.driftEndTime - this.driftStartTime; return e > 0 ? (this.driftEnd - this.driftStart) * 1e3 / e : 1; } get edge() { return this.partEnd || this.fragmentEnd; } get partEnd() { var e; return (e = this.partList) != null && e.length ? this.partList[this.partList.length - 1].end : this.fragmentEnd; } get fragmentEnd() { var e; return (e = this.fragments) != null && e.length ? this.fragments[this.fragments.length - 1].end : 0; } get age() { return this.advancedDateTime ? Math.max(Date.now() - this.advancedDateTime, 0) / 1e3 : 0; } get lastPartIndex() { var e; return (e = this.partList) != null && e.length ? this.partList[this.partList.length - 1].index : -1; } get lastPartSn() { var e; return (e = this.partList) != null && e.length ? this.partList[this.partList.length - 1].fragment.sn : this.endSN; } }; function ne(e) { return Uint8Array.from(atob(e), (e) => e.charCodeAt(0)); } function re(e) { let t = oe(e).subarray(0, 16), n = new Uint8Array(16); return n.set(t, 16 - t.length), n; } function ie(e) { let t = function(e, t, n) { let r = e[t]; e[t] = e[n], e[n] = r; }; t(e, 0, 3), t(e, 1, 2), t(e, 4, 5), t(e, 6, 7); } function ae(e) { let t = e.split(":"), n = null; if (t[0] === "data" && t.length === 2) { let e = t[1].split(";"), r = e[e.length - 1].split(","); if (r.length === 2) { let t = r[0] === "base64", i = r[1]; t ? (e.splice(-1, 1), n = ne(i)) : n = re(i); } } return n; } function oe(e) { return Uint8Array.from(unescape(encodeURIComponent(e)), (e) => e.charCodeAt(0)); } var se = typeof self < "u" ? self : void 0, N = { CLEARKEY: "org.w3.clearkey", FAIRPLAY: "com.apple.fps", PLAYREADY: "com.microsoft.playready", WIDEVINE: "com.widevine.alpha" }, P = { CLEARKEY: "org.w3.clearkey", FAIRPLAY: "com.apple.streamingkeydelivery", PLAYREADY: "com.microsoft.playready", WIDEVINE: "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" }; function ce(e) { switch (e) { case P.FAIRPLAY: return N.FAIRPLAY; case P.PLAYREADY: return N.PLAYREADY; case P.WIDEVINE: return N.WIDEVINE; case P.CLEARKEY: return N.CLEARKEY; } } var le = { CENC: "1077efecc0b24d02ace33c1e52e2fb4b", CLEARKEY: "e2719d58a985b3c9781ab030af78d30e", FAIRPLAY: "94ce86fb07ff4f43adb893d2fa968ca2", PLAYREADY: "9a04f07998404286ab92e65be0885f95", WIDEVINE: "edef8ba979d64acea3c827dcd51d21ed" }; function ue(e) { if (e === le.WIDEVINE) return N.WIDEVINE; if (e === le.PLAYREADY) return N.PLAYREADY; if (e === le.CENC || e === le.CLEARKEY) return N.CLEARKEY; } function de(e) { switch (e) { case N.FAIRPLAY: return P.FAIRPLAY; case N.PLAYREADY: return P.PLAYREADY; case N.WIDEVINE: return P.WIDEVINE; case N.CLEARKEY: return P.CLEARKEY; } } function fe(e) { let { drmSystems: t, widevineLicenseUrl: n } = e, r = t ? [ N.FAIRPLAY, N.WIDEVINE, N.PLAYREADY, N.CLEARKEY ].filter((e) => !!t[e]) : []; return !r[N.WIDEVINE] && n && r.push(N.WIDEVINE), r; } var pe = function(e) { return se != null && (e = se.navigator) != null && e.requestMediaKeySystemAccess ? self.navigator.requestMediaKeySystemAccess.bind(self.navigator) : null; }(); function me(e, t, n, r) { let i; switch (e) { case N.FAIRPLAY: i = ["cenc", "sinf"]; break; case N.WIDEVINE: case N.PLAYREADY: i = ["cenc"]; break; case N.CLEARKEY: i = ["cenc", "keyids"]; break; default: throw Error(`Unknown key-system: ${e}`); } return he(i, t, n, r); } function he(e, t, n, r) { return [{ initDataTypes: e, persistentState: r.persistentState || "optional", distinctiveIdentifier: r.distinctiveIdentifier || "optional", sessionTypes: r.sessionTypes || [r.sessionType || "temporary"], audioCapabilities: t.map((e) => ({ contentType: `audio/mp4; codecs="${e}"`, robustness: r.audioRobustness || "", encryptionScheme: r.audioEncryptionScheme || null })), videoCapabilities: n.map((e) => ({ contentType: `video/mp4; codecs="${e}"`, robustness: r.videoRobustness || "", encryptionScheme: r.videoEncryptionScheme || null })) }]; } function ge(e) { let t = new Uint16Array(e.buffer, e.byteOffset, e.byteLength / 2), n = String.fromCharCode.apply(null, Array.from(t)), r = n.substring(n.indexOf("<"), n.length), i = new DOMParser().parseFromString(r, "text/xml").getElementsByTagName("KID")[0]; if (i) { let e = i.childNodes[0] ? i.childNodes[0].nodeValue : i.getAttribute("VALUE"); if (e) { let t = ne(e).subarray(0, 16); return ie(t), t; } } return null; } function _e(e, t, n) { return Uint8Array.prototype.slice ? e.slice(t, n) : new Uint8Array(Array.prototype.slice.call(e, t, n)); } var ve = (e, t) => t + 10 <= e.length && e[t] === 73 && e[t + 1] === 68 && e[t + 2] === 51 && e[t + 3] < 255 && e[t + 4] < 255 && e[t + 6] < 128 && e[t + 7] < 128 && e[t + 8] < 128 && e[t + 9] < 128, ye = (e, t) => t + 10 <= e.length && e[t] === 51 && e[t + 1] === 68 && e[t + 2] === 73 && e[t + 3] < 255 && e[t + 4] < 255 && e[t + 6] < 128 && e[t + 7] < 128 && e[t + 8] < 128 && e[t + 9] < 128, be = (e, t) => { let n = t, r = 0; for (; ve(e, t);) { r += 10; let n = xe(e, t + 6); r += n, ye(e, t + 10) && (r += 10), t += r; } if (r > 0) return e.subarray(n, n + r); }, xe = (e, t) => { let n = 0; return n = (e[t] & 127) << 21, n |= (e[t + 1] & 127) << 14, n |= (e[t + 2] & 127) << 7, n |= e[t + 3] & 127, n; }, Se = (e, t) => ve(e, t) && xe(e, t + 6) + 10 <= e.length - t, Ce = (e) => { let t = Ee(e); for (let e = 0; e < t.length; e++) { let n = t[e]; if (we(n)) return je(n); } }, we = (e) => e && e.key === "PRIV" && e.info === "com.apple.streaming.transportStreamTimestamp", Te = (e) => { let t = String.fromCharCode(e[0], e[1], e[2], e[3]), n = xe(e, 4); return { type: t, size: n, data: e.subarray(10, 10 + n) }; }, Ee = (e) => { let t = 0, n = []; for (; ve(e, t);) { let r = xe(e, t + 6); t += 10; let i = t + r; for (; t + 8 < i;) { let r = Te(e.subarray(t)), i = De(r); i && n.push(i), t += r.size + 10; } ye(e, t) && (t += 10); } return n; }, De = (e) => e.type === "PRIV" ? Oe(e) : e.type[0] === "W" ? Ae(e) : ke(e), Oe = (e) => { if (e.size < 2) return; let t = Me(e.data, !0), n = new Uint8Array(e.data.subarray(t.length + 1)); return { key: e.type, info: t, data: n.buffer }; }, ke = (e) => { if (e.size < 2) return; if (e.type === "TXXX") { let t = 1, n = Me(e.data.subarray(t), !0); t += n.length + 1; let r = Me(e.data.subarray(t)); return { key: e.type, info: n, data: r }; } let t = Me(e.data.subarray(1)); return { key: e.type, data: t }; }, Ae = (e) => { if (e.type === "WXXX") { if (e.size < 2) return; let t = 1, n = Me(e.data.subarray(t), !0); t += n.length + 1; let r = Me(e.data.subarray(t)); return { key: e.type, info: n, data: r }; } let t = Me(e.data); return { key: e.type, data: t }; }, je = (e) => { if (e.data.byteLength === 8) { let t = new Uint8Array(e.data), n = t[3] & 1, r = (t[4] << 23) + (t[5] << 15) + (t[6] << 7) + t[7]; return r /= 45, n && (r += 47721858.84), Math.round(r); } }, Me = (e, t = !1) => { let n = Pe(); if (n) { let r = n.decode(e); if (t) { let e = r.indexOf("\0"); return e === -1 ? r : r.substring(0, e); } return r.replace(/\0/g, ""); } let r = e.length, i, a, o, s = "", c = 0; for (; c < r;) { if (i = e[c++], i === 0 && t) return s; if (!(i === 0 || i === 3)) switch (i >> 4) { case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7: s += String.fromCharCode(i); break; case 12: case 13: a = e[c++], s += String.fromCharCode((i & 31) << 6 | a & 63); break; case 14: a = e[c++], o = e[c++], s += String.fromCharCode((i & 15) << 12 | (a & 63) << 6 | (o & 63) << 0); break; } } return s; }, Ne; function Pe() { if (!navigator.userAgent.includes("PlayStation 4")) return !Ne && self.TextDecoder !== void 0 && (Ne = new self.TextDecoder("utf-8")), Ne; } var Fe = { hexDump: function(e) { let t = ""; for (let n = 0; n < e.length; n++) { let r = e[n].toString(16); r.length < 2 && (r = "0" + r), t += r; } return t; } }, Ie = 2 ** 32 - 1, Le = [].push, Re = { video: 1, audio: 2, id3: 3, text: 4 }; function F(e) { return String.fromCharCode.apply(null, e); } function ze(e, t) { let n = e[t] << 8 | e[t + 1]; return n < 0 ? 65536 + n : n; } function I(e, t) { let n = Ve(e, t); return n < 0 ? 4294967296 + n : n; } function Be(e, t) { let n = I(e, t); return n *= 2 ** 32, n += I(e, t + 4), n; } function Ve(e, t) { return e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3]; } function He(e, t, n) { e[t] = n >> 24, e[t + 1] = n >> 16 & 255, e[t + 2] = n >> 8 & 255, e[t + 3] = n & 255; } function Ue(e) { let t = e.byteLength; for (let n = 0; n < t;) { let r = I(e, n); if (r > 8 && e[n + 4] === 109 && e[n + 5] === 111 && e[n + 6] === 111 && e[n + 7] === 102) return !0; n = r > 1 ? n + r : t; } return !1; } function L(e, t) { let n = []; if (!t.length) return n; let r = e.byteLength; for (let i = 0; i < r;) { let a = I(e, i), o = F(e.subarray(i + 4, i + 8)), s = a > 1 ? i + a : r; if (o === t[0]) if (t.length === 1) n.push(e.subarray(i + 8, s)); else { let r = L(e.subarray(i + 8, s), t.slice(1)); r.length && Le.apply(n, r); } i = s; } return n; } function We(e) { let t = [], n = e[0], r = 8, i = I(e, r); r += 4; let a = 0, o = 0; n === 0 ? (a = I(e, r), o = I(e, r + 4), r += 8) : (a = Be(e, r), o = Be(e, r + 8), r += 16), r += 2; let s = e.length + o, c = ze(e, r); r += 2; for (let n = 0; n < c; n++) { let n = r, a = I(e, n); n += 4; let o = a & 2147483647; if ((a & 2147483648) >>> 31 == 1) return x.warn("SIDX has hierarchical references (not supported)"), null; let c = I(e, n); n += 4, t.push({ referenceSize: o, subsegmentDuration: c, info: { duration: c / i, start: s, end: s + o - 1 } }), s += o, n += 4, r = n; } return { earliestPresentationTime: a, timescale: i, version: n, referencesCount: c, references: t }; } function Ge(e) { let t = [], n = L(e, ["moov", "trak"]); for (let e = 0; e < n.length; e++) { let r = n[e], a = L(r, ["tkhd"])[0]; if (a) { let e = a[0], n = I(a, e === 0 ? 12 : 20), o = L(r, ["mdia", "mdhd"])[0]; if (o) { e = o[0]; let a = I(o, e === 0 ? 12 : 20), s = L(r, ["mdia", "hdlr"])[0]; if (s) { let e = F(s.subarray(8, 12)), o = { soun: k.AUDIO, vide: k.VIDEO }[e]; if (o) { let e = L(r, [ "mdia", "minf", "stbl", "stsd" ])[0], s = Ke(e); t[n] = { timescale: a, type: o }, t[o] = i({ timescale: a, id: n }, s); } } } } } return L(e, [ "moov", "mvex", "trex" ]).forEach((e) => { let n = t[I(e, 4)]; n && (n.default = { duration: I(e, 12), flags: I(e, 20) }); }), t; } function Ke(e) { let t = e.subarray(8), n = t.subarray(86), r = F(t.subarray(4, 8)), i = r, a = r === "enca" || r === "encv"; switch (a && L(L(t, [r])[0].subarray(r === "enca" ? 28 : 78), ["sinf"]).forEach((e) => { let t = L(e, ["schm"])[0]; if (t) { let n = F(t.subarray(4, 8)); if (n === "cbcs" || n === "cenc") { let t = L(e, ["frma"])[0]; t && (i = F(t)); } } }), i) { case "avc1": case "avc2": case "avc3": case "avc4": { let e = L(n, ["avcC"])[0]; i += "." + Je(e[1]) + Je(e[2]) + Je(e[3]); break; } case "mp4a": { let e = L(t, [r])[0], n = L(e.subarray(28), ["esds"])[0]; if (n && n.length > 12) { let e = 4; if (n[e++] !== 3) break; e = qe(n, e), e += 2; let t = n[e++]; if (t & 128 && (e += 2), t & 64 && (e += n[e++]), n[e++] !== 4) break; e = qe(n, e); let r = n[e++]; if (r === 64) i += "." + Je(r); else break; if (e += 12, n[e++] !== 5) break; e = qe(n, e); let a = n[e++], o = (a & 248) >> 3; o === 31 && (o += 1 + ((a & 7) << 3) + ((n[e] & 224) >> 5)), i += "." + o; } break; } case "hvc1": case "hev1": { let e = L(n, ["hvcC"])[0], t = e[1], r = [ "", "A", "B", "C" ][t >> 6], a = t & 31, o = I(e, 2), s = (t & 32) >> 5 ? "H" : "L", c = e[12], l = e.subarray(6, 12); i += "." + r + a, i += "." + o.toString(16).toUpperCase(), i += "." + s + c; let u = ""; for (let e = l.length; e--;) { let t = l[e]; (t || u) && (u = "." + t.toString(16).toUpperCase() + u); } i += u; break; } case "dvh1": case "dvhe": { let e = L(n, ["dvcC"])[0], t = e[2] >> 1 & 127, r = e[2] << 5 & 32 | e[3] >> 3 & 31; i += "." + Ye(t) + "." + Ye(r); break; } case "vp09": { let e = L(n, ["vpcC"])[0], t = e[4], r = e[5], a = e[6] >> 4 & 15; i += "." + Ye(t) + "." + Ye(r) + "." + Ye(a); break; } case "av01": { let e = L(n, ["av1C"])[0], t = e[1] >>> 5, r = e[1] & 31, a = e[2] >>> 7 ? "H" : "M", o = (e[2] & 64) >> 6, s = (e[2] & 32) >> 5, c = t === 2 && o ? s ? 12 : 10 : o ? 10 : 8, l = (e[2] & 16) >> 4, u = (e[2] & 8) >> 3, d = (e[2] & 4) >> 2, f = e[2] & 3; i += "." + t + "." + Ye(r) + a + "." + Ye(c) + "." + l + "." + u + d + f + "." + Ye(1) + "." + Ye(1) + "." + Ye(1) + ".0"; break; } } return { codec: i, encrypted: a }; } function qe(e, t) { let n = t + 5; for (; e[t++] & 128 && t < n;); return t; } function Je(e) { return ("0" + e.toString(16).toUpperCase()).slice(-2); } function Ye(e) { return (e < 10 ? "0" : "") + e; } function Xe(e, t) { if (!e || !t) return e; let n = t.keyId; return n && t.isCommonEncryption && L(e, ["moov", "trak"]).forEach((e) => { let t = L(e, [ "mdia", "minf", "stbl", "stsd" ])[0].subarray(8), r = L(t, ["enca"]), i = r.length > 0; i || (r = L(t, ["encv"])), r.forEach((e) => { L(i ? e.subarray(28) : e.subarray(78), ["sinf"]).forEach((e) => { let t = Ze(e); if (t) { let e = t.subarray(8, 24); e.some((e) => e !== 0) || (x.log(`[eme] Patching keyId in 'enc${i ? "a" : "v"}>sinf>>tenc' box: ${Fe.hexDump(e)} -> ${Fe.hexDump(n)}`), t.set(n, 8)); } }); }); }), e; } function Ze(e) { let t = L(e, ["schm"])[0]; if (t) { let n = F(t.subarray(4, 8)); if (n === "cbcs" || n === "cenc") return L(e, ["schi", "tenc"])[0]; } return null; } function Qe(e, t) { return L(t, ["moof", "traf"]).reduce((t, n) => { let r = L(n, ["tfdt"])[0], i = r[0], a = L(n, ["tfhd"]).reduce((t, n) => { let a = e[I(n, 4)]; if (a) { let e = I(r, 4); if (i === 1) { if (e === Ie) return x.warn("[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time"), t; e *= Ie + 1, e += I(r, 8); } let n = a.timescale || 9e4, o = e / n; if (l(o) && (t === null || o < t)) return o; } return t; }, null); return a !== null && l(a) && (t === null || a < t) ? a : t; }, null); } function $e(e, t) { let n = 0, r = 0, i = 0, a = L(e, ["moof", "traf"]); for (let e = 0; e < a.length; e++) { let o = a[e], s = L(o, ["tfhd"])[0], c = t[I(s, 4)]; if (!c) continue; let l = c.default, u = I(s, 0) | l?.flags, d = l?.duration; u & 8 && (d = u & 2 ? I(s, 12) : I(s, 8)); let f = c.timescale || 9e4, p = L(o, ["trun"]); for (let e = 0; e < p.length; e++) { if (n = et(p[e]), !n && d) { let t = I(p[e], 4); n = d * t; } c.type === k.VIDEO ? r += n / f : c.type === k.AUDIO && (i += n / f); } } if (r === 0 && i === 0) { let t = Infinity, n = 0, r = 0, i = L(e, ["sidx"]); for (let e = 0; e < i.length; e++) { let a = We(i[e]); if (a != null && a.references) { t = Math.min(t, a.earliestPresentationTime / a.timescale); let e = a.references.reduce((e, t) => e + t.info.duration || 0, 0); n = Math.max(n, e + a.earliestPresentationTime / a.timescale), r = n - t; } } if (r && l(r)) return r; } return r || i; } function et(e) { let t = I(e, 0), n = 8; t & 1 && (n += 4), t & 4 && (n += 4); let r = 0, i = I(e, 4); for (let a = 0; a < i; a++) { if (t & 256) { let t = I(e, n); r += t, n += 4; } t & 512 && (n += 4), t & 1024 && (n += 4), t & 2048 && (n += 4); } return r; } function tt(e, t, n) { L(t, ["moof", "traf"]).forEach((t) => { L(t, ["tfhd"]).forEach((r) => { let i = e[I(r, 4)]; if (!i) return; let a = i.timescale || 9e4; L(t, ["tfdt"]).forEach((e) => { let t = e[0], r = n * a; if (r) { let n = I(e, 4); if (t === 0) n -= r, n = Math.max(n, 0), He(e, 4, n); else { n *= 2 ** 32, n += I(e, 8), n -= r, n = Math.max(n, 0); let t = Math.floor(n / (Ie + 1)), i = Math.floor(n % (Ie + 1)); He(e, 4, t), He(e, 8, i); } } }); }); }); } function nt(e) { let t = { valid: null, remainder: null }, n = L(e, ["moof"]); if (n.length < 2) return t.remainder = e, t; let r = n[n.length - 1]; return t.valid = _e(e, 0, r.byteOffset - 8), t.remainder = _e(e, r.byteOffset - 8), t; } function R(e, t) { let n = new Uint8Array(e.length + t.length); return n.set(e), n.set(t, e.length), n; } function rt(e, t) { let n = [], r = t.samples, i = t.timescale, a = t.id, o = !1; return L(r, ["moof"]).map((s) => { let c = s.byteOffset - 8; L(s, ["traf"]).map((s) => { let l = L(s, ["tfdt"]).map((e) => { let t = e[0], n = I(e, 4); return t === 1 && (n *= 2 ** 32, n += I(e, 8)), n / i; })[0]; return l !== void 0 && (e = l), L(s, ["tfhd"]).map((l) => { let u = I(l, 4), d = I(l, 0) & 16777215, f = (d & 1) != 0, p = (d & 2) != 0, m = (d & 8) != 0, h = 0, g = (d & 16) != 0, _ = 0, v = (d & 32) != 0, y = 8; u === a && (f && (y += 8), p && (y += 4), m && (h = I(l, y), y += 4), g && (_ = I(l, y), y += 4), v && (y += 4), t.type === "video" && (o = it(t.codec)), L(s, ["trun"]).map((a) => { let s = a[0], l = I(a, 0) & 16777215, u = (l & 1) != 0, d = 0, f = (l & 4) != 0, p = (l & 256) != 0, m = 0, g = (l & 512) != 0, v = 0, y = (l & 1024) != 0, b = (l & 2048) != 0, x = 0, S = I(a, 4), C = 8; u && (d = I(a, C), C += 4), f && (C += 4); let w = d + c; for (let c = 0; c < S; c++) { if (p ? (m = I(a, C), C += 4) : m = h, g ? (v = I(a, C), C += 4) : v = _, y && (C += 4), b && (x = s === 0 ? I(a, C) : Ve(a, C), C += 4), t.type === k.VIDEO) { let t = 0; for (; t < v;) { let a = I(r, w); w += 4, at(o, r[w]) && ot(r.subarray(w, w + a), o ? 2 : 1, e + x / i, n), w += a, t += a + 4; } } e += m / i; } })); }); }); }), n; } function it(e) { if (!e) return !1; let t = e.indexOf("."), n = t < 0 ? e : e.substring(0, t); return n === "hvc1" || n === "hev1" || n === "dvh1" || n === "dvhe"; } function at(e, t) { if (e) { let e = t >> 1 & 63; return e === 39 || e === 40; } else return (t & 31) == 6; } function ot(e, t, n, r) { let i = st(e), a = 0; a += t; let o = 0, s = 0, c = 0; for (; a < i.length;) { o = 0; do { if (a >= i.length) break; c = i[a++], o += c; } while (c === 255); s = 0; do { if (a >= i.length) break; c = i[a++], s += c; } while (c === 255); let e = i.length - a, t = a; if (s < e) a += s; else if (s > e) { x.error(`Malformed SEI payload. ${s} is too small, only ${e} bytes left to parse.`); break; } if (o === 4) { if (i[t++] === 181) { let e = ze(i, t); if (t += 2, e === 49) { let e = I(i, t); if (t += 4, e === 1195456820) { let e = i[t++]; if (e === 3) { let a = i[t++], s = 31 & a, c = 64 & a, l = c ? 2 + s * 3 : 0, u = new Uint8Array(l); if (c) { u[0] = a; for (let e = 1; e < l; e++) u[e] = i[t++]; } r.push({ type: e, payloadType: o, pts: n, bytes: u }); } } } } } else if (o === 5 && s > 16) { let e = []; for (let n = 0; n < 16; n++) { let r = i[t++].toString(16); e.push(r.length == 1 ? "0" + r : r), (n === 3 || n === 5 || n === 7 || n === 9) && e.push("-"); } let a = s - 16, c = new Uint8Array(a); for (let e = 0; e < a; e++) c[e] = i[t++]; r.push({ payloadType: o, pts: n, uuid: e.join(""), userData: Me(c), userDataBytes: c }); } } } function st(e) { let t = e.byteLength, n = [], r = 1; for (; r < t - 2;) e[r] === 0 && e[r + 1] === 0 && e[r + 2] === 3 ? (n.push(r + 2), r += 2) : r++; if (n.length === 0) return e; let i = t - n.length, a = new Uint8Array(i), o = 0; for (r = 0; r < i; o++, r++) o === n[0] && (o++, n.shift()), a[r] = e[o]; return a; } function ct(e) { let t = e[0], n = "", r = "", i = 0, a = 0, o = 0, s = 0, c = 0, l = 0; if (t === 0) { for (; F(e.subarray(l, l + 1)) !== "\0";) n += F(e.subarray(l, l + 1)), l += 1; for (n += F(e.subarray(l, l + 1)), l += 1; F(e.subarray(l, l + 1)) !== "\0";) r += F(e.subarray(l, l + 1)), l += 1; r += F(e.subarray(l, l + 1)), l += 1, i = I(e, 12), a = I(e, 16), s = I(e, 20), c = I(e, 24), l = 28; } else if (t === 1) { l += 4, i = I(e, l), l += 4; let t = I(e, l); l += 4; let a = I(e, l); for (l += 4, o = 2 ** 32 * t + a, u(o) || (o = 2 ** 53 - 1, x.warn("Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box")), s = I(e, l), l += 4, c = I(e, l), l += 4; F(e.subarray(l, l + 1)) !== "\0";) n += F(e.subarray(l, l + 1)), l += 1; for (n += F(e.subarray(l, l + 1)), l += 1; F(e.subarray(l, l + 1)) !== "\0";) r += F(e.subarray(l, l + 1)), l += 1; r += F(e.subarray(l, l + 1)), l += 1; } let d = e.subarray(l, e.byteLength); return { schemeIdUri: n, value: r, timeScale: i, presentationTime: o, presentationTimeDelta: a, eventDuration: s, id: c, payload: d }; } function lt(e, ...t) { let n = t.length, r = 8, i = n; for (; i--;) r += t[i].byteLength; let a = new Uint8Array(r); for (a[0] = r >> 24 & 255, a[1] = r >> 16 & 255, a[2] = r >> 8 & 255, a[3] = r & 255, a.set(e, 4), i = 0, r = 8; i < n; i++) a.set(t[i], r), r += t[i].byteLength; return a; } function ut(e, t, n) { if (e.byteLength !== 16) throw RangeError("Invalid system id"); let r, i; if (t) { r = 1, i = new Uint8Array(t.length * 16); for (let e = 0; e < t.length; e++) { let n = t[e]; if (n.byteLength !== 16) throw RangeError("Invalid key"); i.set(n, e * 16); } } else r = 0, i = new Uint8Array(); let a; r > 0 ? (a = new Uint8Array(4), t.length > 0 && new DataView(a.buffer).setUint32(0, t.length, !1)) : a = new Uint8Array(); let o = new Uint8Array(4); return n && n.byteLength > 0 && new DataView(o.buffer).setUint32(0, n.byteLength, !1), lt([ 112, 115, 115, 104 ], new Uint8Array([ r, 0, 0, 0 ]), e, a, i, o, n || new Uint8Array()); } function dt(e) { let t = []; if (e instanceof ArrayBuffer) { let n = e.byteLength, r = 0; for (; r + 32 < n;) { let n = ft(new DataView(e, r)); t.push(n), r += n.size; } } return t; } function ft(e) { let t = e.getUint32(0), n = e.byteOffset, r = e.byteLength; if (r < t) return { offset: n, size: r }; if (e.getUint32(4) !== 1886614376) return { offset: n, size: t }; let i = e.getUint32(8) >>> 24; if (i !== 0 && i !== 1) return { offset: n, size: t }; let a = e.buffer, o = Fe.hexDump(new Uint8Array(a, n + 12, 16)), s = e.getUint32(28), c = null, l = null; if (i === 0) { if (t - 32 < s || s < 22) return { offset: n, size: t }; l = new Uint8Array(a, n + 32, s); } else if (i === 1) { if (!s || r < n + 32 + s * 16 + 16) return { offset: n, size: t }; c = []; for (let e = 0; e < s; e++) c.push(new Uint8Array(a, n + 32 + e * 16, 16)); } return { version: i, systemId: o, kids: c, data: l, offset: n, size: t }; } var pt = {}, mt = class e { static clearKeyUriToKeyIdMap() { pt = {}; } constructor(e, t, n, r = [1], i = null) { this.uri = void 0, this.method = void 0, this.keyFormat = void 0, this.keyFormatVersions = void 0, this.encrypted = void 0, this.isCommonEncryption = void 0, this.iv = null, this.key = null, this.keyId = null, this.pssh = null, this.method = e, this.uri = t, this.keyFormat = n, this.keyFormatVersions = r, this.iv = i, this.encrypted = e ? e !== "NONE" : !1, this.isCommonEncryption = this.encrypted && e !== "AES-128"; } isSupported() { if (this.method) { if (this.method === "AES-128" || this.method === "NONE") return !0; if (this.keyFormat === "identity") return this.method === "SAMPLE-AES"; switch (this.keyFormat) { case P.FAIRPLAY: case P.WIDEVINE: case P.PLAYREADY: case P.CLEARKEY: return [ "ISO-23001-7", "SAMPLE-AES", "SAMPLE-AES-CENC", "SAMPLE-AES-CTR" ].indexOf(this.method) !== -1; } } return !1; } getDecryptData(t) { if (!this.encrypted || !this.uri) return null; if (this.method === "AES-128" && this.uri && !this.iv) { typeof t != "number" && (this.method === "AES-128" && !this.iv && x.warn(`missing IV for initialization segment with method="${this.method}" - compliance issue`), t = 0); let n = ht(t); return new e(this.method, this.uri, "identity", this.keyFormatVersions, n); } let n = ae(this.uri); if (n) switch (this.keyFormat) { case P.WIDEVINE: this.pssh = n, n.length >= 22 && (this.keyId = n.subarray(n.length - 22, n.length - 6)); break; case P.PLAYREADY: { let e = new Uint8Array([ 154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149 ]); this.pssh = ut(e, null, n), this.keyId = ge(n); break; } default: { let e = n.subarray(0, 16); if (e.length !== 16) { let t = new Uint8Array(16); t.set(e, 16 - e.length), e = t; } this.keyId = e; break; } } if (!this.keyId || this.keyId.byteLength !== 16) { let e = pt[this.uri]; if (!e) { let t = Object.keys(pt).length % (2 ** 53 - 1); e = new Uint8Array(16), new DataView(e.buffer, 12, 4).setUint32(0, t), pt[this.uri] = e; } this.keyId = e; } return this; } }; function ht(e) { let t = new Uint8Array(16); for (let n = 12; n < 16; n++) t[n] = e >> 8 * (15 - n) & 255; return t; } var gt = /\{\$([a-zA-Z0-9-_]+)\}/g; function _t(e) { return gt.test(e); } function z(e, t, n) { if (e.variableList !== null || e.hasVariableRefs) for (let r = n.length; r--;) { let i = n[r], a = t[i]; a && (t[i] = vt(e, a)); } } function vt(e, t) { if (e.variableList !== null || e.hasVariableRefs) { let n = e.variableList; return t.replace(gt, (t) => { let r = t.substring(2, t.length - 1), i = n?.[r]; return i === void 0 ? (e.playlistParsingError ||= /* @__PURE__ */ Error(`Missing preceding EXT-X-DEFINE tag for Variable Reference: "${r}"`), t) : i; }); } return t; } function yt(e, t, n) { let r = e.variableList; r || (e.variableList = r = {}); let i, a; if ("QUERYPARAM" in t) { i = t.QUERYPARAM; try { let e = new self.URL(n).searchParams; if (e.has(i)) a = e.get(i); else throw Error(`"${i}" does not match any query parameter in URI: "${n}"`); } catch (t) { e.playlistParsingError ||= /* @__PURE__ */ Error(`EXT-X-DEFINE QUERYPARAM: ${t.message}`); } } else i = t.NAME, a = t.VALUE; i in r ? e.playlistParsingError ||= /* @__PURE__ */ Error(`EXT-X-DEFINE duplicate Variable Name declarations: "${i}"`) : r[i] = a || ""; } function bt(e, t, n) { let r = t.IMPORT; if (n && r in n) { let t = e.variableList; t || (e.variableList = t = {}), t[r] = n[r]; } else e.playlistParsingError ||= /* @__PURE__ */ Error(`EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: "${r}"`); } function xt(e = !0) { if (!(typeof self > "u")) return (e || !self.MediaSource) && self.ManagedMediaSource || self.MediaSource || self.WebKitMediaSource; } function St(e) { return typeof self < "u" && e === self.ManagedMediaSource; } var Ct = { audio: { a3ds: 1, "ac-3": .95, "ac-4": 1, alac: .9, alaw: 1, dra1: 1, "dts+": 1, "dts-": 1, dtsc: 1, dtse: 1, dtsh: 1, "ec-3": .9, enca: 1, fLaC: .9, flac: .9, FLAC: .9, g719: 1, g726: 1, m4ae: 1, mha1: 1, mha2: 1, mhm1: 1, mhm2: 1, mlpa: 1, mp4a: 1, "raw ": 1, Opus: 1, opus: 1, 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: .8, drac: 1, dva1: 1, dvav: 1, dvh1: .7, dvhe: .7, encv: 1, hev1: .75, hvc1: .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: .9 }, text: { stpp: 1, wvtt: 1 } }; function wt(e, t) { let n = Ct[t]; return !!n && !!n[e.slice(0, 4)]; } function Tt(e, t, n = !0) { return !e.split(",").some((e) => !Et(e, t, n)); } function Et(e, t, n = !0) { return xt(n)?.isTypeSupported(Dt(e, t)) ?? !1; } function Dt(e, t) { return `${t}/mp4;codecs="${e}"`; } function Ot(e) { if (e) { let t = e.substring(0, 4); return Ct.video[t]; } return 2; } function kt(e) { return e.split(",").reduce((e, t) => { let n = Ct.video[t]; return n ? (n * 2 + e) / (e ? 3 : 2) : (Ct.audio[t] + e) / (e ? 2 : 1); }, 0); } var At = {}; function jt(e, t = !0) { if (At[e]) return At[e]; let n = { flac: [ "flac", "fLaC", "FLAC" ], opus: ["opus", "Opus"] }[e]; for (let r = 0; r < n.length; r++) if (Et(n[r], "audio", t)) return At[e] = n[r], n[r]; return e; } var Mt = /flac|opus/i; function Nt(e, t = !0) { return e.replace(Mt, (e) => jt(e.toLowerCase(), t)); } function Pt(e, t) { return e && e !== "mp4a" ? e : t && t.split(",")[0]; } function Ft(e) { let t = e.split(","); for (let e = 0; e < t.length; e++) { let n = t[e].split("."); if (n.length > 2) { let r = n.shift() + "."; r += parseInt(n.shift()).toString(16), r += ("000" + parseInt(n.shift()).toString(16)).slice(-4), t[e] = r; } } return t.join(","); } var It = /#EXT-X-STREAM-INF:([^\r\n]*)(?:[\r\n](?:#[^\r\n]*)?)*([^\r\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\r\n]*)[\r\n]+/g, Lt = /#EXT-X-MEDIA:(.*)/g, Rt = /^#EXT(?:INF|-X-TARGETDURATION):/m, zt = new RegExp([ "#EXTINF:\\s*(\\d*(?:\\.\\d+)?)(?:,(.*)\\s+)?", "(?!#) *(\\S[^\\r\\n]*)", "#EXT-X-BYTERANGE:*(.+)", "#EXT-X-PROGRAM-DATE-TIME:(.+)", "#.*" ].join("|"), "g"), Bt = new RegExp([ "#(EXTM3U)", "#EXT-X-(DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)", "#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\\d+)", "#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)", "(#)([^:]*):(.*)", "(#)(.*)(?:.*)\\r?\\n?" ].join("|")), Vt = class e { static findGroup(e, t) { for (let n = 0; n < e.length; n++) { let r = e[n]; if (r.id === t) return r; } } static resolve(e, t) { return n.buildAbsoluteURL(t, e, { alwaysNormalize: !0 }); } static isMediaPlaylist(e) { return Rt.test(e); } static parseMasterPlaylist(t, n) { let r = { contentSteering: null, levels: [], playlistParsingError: null, sessionData: null, sessionKeys: null,