@hakit/components
Version:
A series of components to work with @hakit/core
1,469 lines • 495 kB
JavaScript
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,