1!(function t(e) { 2 var r, i; 3 (r = this), 4 (i = function () { 5 'use strict'; 6 function r(t, e) { 7 var r = Object.keys(t); 8 if (Object.getOwnPropertySymbols) { 9 var i = Object.getOwnPropertySymbols(t); 10 e && 11 (i = i.filter(function (e) { 12 return Object.getOwnPropertyDescriptor(t, e).enumerable; 13 })), 14 r.push.apply(r, i); 15 } 16 return r; 17 } 18 function i(t) { 19 for (var e = 1; e < arguments.length; e++) { 20 var i = null != arguments[e] ? arguments[e] : {}; 21 e % 2 22 ? r(Object(i), !0).forEach(function (e) { 23 s(t, e, i[e]); 24 }) 25 : Object.getOwnPropertyDescriptors 26 ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(i)) 27 : r(Object(i)).forEach(function (e) { 28 Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(i, e)); 29 }); 30 } 31 return t; 32 } 33 function n(t, e) { 34 for (var r = 0; r < e.length; r++) { 35 var i = e[r]; 36 (i.enumerable = i.enumerable || !1), 37 (i.configurable = !0), 38 'value' in i && (i.writable = !0), 39 Object.defineProperty(t, m(i.key), i); 40 } 41 } 42 function a(t, e, r) { 43 return e && n(t.prototype, e), r && n(t, r), Object.defineProperty(t, 'prototype', { writable: !1 }), t; 44 } 45 function s(t, e, r) { 46 return ( 47 (e = m(e)) in t 48 ? Object.defineProperty(t, e, { value: r, enumerable: !0, configurable: !0, writable: !0 }) 49 : (t[e] = r), 50 t 51 ); 52 } 53 function o() { 54 return ( 55 (o = Object.assign 56 ? Object.assign.bind() 57 : function (t) { 58 for (var e = 1; e < arguments.length; e++) { 59 var r = arguments[e]; 60 for (var i in r) Object.prototype.hasOwnProperty.call(r, i) && (t[i] = r[i]); 61 } 62 return t; 63 }), 64 o.apply(this, arguments) 65 ); 66 } 67 function l(t, e) { 68 (t.prototype = Object.create(e.prototype)), (t.prototype.constructor = t), h(t, e); 69 } 70 function u(t) { 71 return ( 72 (u = Object.setPrototypeOf 73 ? Object.getPrototypeOf.bind() 74 : function (t) { 75 return t.__proto__ || Object.getPrototypeOf(t); 76 }), 77 u(t) 78 ); 79 } 80 function h(t, e) { 81 return ( 82 (h = Object.setPrototypeOf 83 ? Object.setPrototypeOf.bind() 84 : function (t, e) { 85 return (t.__proto__ = e), t; 86 }), 87 h(t, e) 88 ); 89 } 90 function d() { 91 if ('undefined' == typeof Reflect || !Reflect.construct) return !1; 92 if (Reflect.construct.sham) return !1; 93 if ('function' == typeof Proxy) return !0; 94 try { 95 return Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0; 96 } catch (t) { 97 return !1; 98 } 99 } 100 function c(t, e, r) { 101 return ( 102 (c = d() 103 ? Reflect.construct.bind() 104 : function (t, e, r) { 105 var i = [null]; 106 i.push.apply(i, e); 107 var n = new (Function.bind.apply(t, i))(); 108 return r && h(n, r.prototype), n; 109 }), 110 c.apply(null, arguments) 111 ); 112 } 113 function f(t) { 114 var e = 'function' == typeof Map ? new Map() : void 0; 115 return ( 116 (f = function (t) { 117 if (null === t || ((r = t), -1 === Function.toString.call(r).indexOf('[native code]'))) return t; 118 var r; 119 if ('function' != typeof t) throw new TypeError('Super expression must either be null or a function'); 120 if (void 0 !== e) { 121 if (e.has(t)) return e.get(t); 122 e.set(t, i); 123 } 124 function i() { 125 return c(t, arguments, u(this).constructor); 126 } 127 return ( 128 (i.prototype = Object.create(t.prototype, { 129 constructor: { value: i, enumerable: !1, writable: !0, configurable: !0 },
130 })), 131 h(i, t) 132 ); 133 }), 134 f(t) 135 ); 136 } 137 function g(t, e) { 138 (null == e || e > t.length) && (e = t.length); 139 for (var r = 0, i = new Array(e); r < e; r++) i[r] = t[r]; 140 return i; 141 } 142 function v(t, e) { 143 var r = ('undefined' != typeof Symbol && t[Symbol.iterator]) || t['@@iterator']; 144 if (r) return (r = r.call(t)).next.bind(r); 145 if ( 146 Array.isArray(t) || 147 (r = (function (t, e) { 148 if (t) { 149 if ('string' == typeof t) return g(t, e); 150 var r = Object.prototype.toString.call(t).slice(8, -1); 151 return ( 152 'Object' === r && t.constructor && (r = t.constructor.name), 153 'Map' === r || 'Set' === r 154 ? Array.from(t) 155 : 'Arguments' === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) 156 ? g(t, e) 157 : void 0 158 ); 159 } 160 })(t)) || 161 (e && t && 'number' == typeof t.length) 162 ) { 163 r && (t = r); 164 var i = 0; 165 return function () { 166 return i >= t.length ? { done: !0 } : { done: !1, value: t[i++] }; 167 }; 168 } 169 throw new TypeError( 170 'Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.', 171 ); 172 } 173 function m(t) { 174 var e = (function (t, e) { 175 if ('object' != typeof t || null === t) return t; 176 var r = t[Symbol.toPrimitive]; 177 if (void 0 !== r) { 178 var i = r.call(t, e || 'default'); 179 if ('object' != typeof i) return i; 180 throw new TypeError('@@toPrimitive must return a primitive value.'); 181 } 182 return ('string' === e ? String : Number)(t); 183 })(t, 'string'); 184 return 'symbol' == typeof e ? e : String(e); 185 } 186 function p(t) { 187 return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, 'default') ? t.default : t; 188 } 189 var y = { exports: {} }; 190 !(function (t, e) { 191 var r, i, n, a, s; 192 (r = 193 /^(?=((?:[a-zA-Z0-9+\-.]+:)?))\1(?=((?:\/\/[^\/?#]*)?))\2(?=((?:(?:[^?#\/]*\/)*[^;?#\/]*)?))\3((?:;[^?#]*)?)(\?[^#]*)?(#[^]*)?$/), 194 (i = /^(?=([^\/?#]*))\1([^]*)$/), 195 (n = /(?:\/|^)\.(?=\/)/g), 196 (a = /(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g), 197 (s = { 198 buildAbsoluteURL: function (t, e, r) { 199 if (((r = r || {}), (t = t.trim()), !(e = e.trim()))) { 200 if (!r.alwaysNormalize) return t; 201 var n = s.parseURL(t); 202 if (!n) throw new Error('Error trying to parse base URL.'); 203 return (n.path = s.normalizePath(n.path)), s.buildURLFromParts(n); 204 } 205 var a = s.parseURL(e); 206 if (!a) throw new Error('Error trying to parse relative URL.'); 207 if (a.scheme) return r.alwaysNormalize ? ((a.path = s.normalizePath(a.path)), s.buildURLFromParts(a)) : e; 208 var o = s.parseURL(t); 209 if (!o) throw new Error('Error trying to parse base URL.'); 210 if (!o.netLoc && o.path && '/' !== o.path[0]) { 211 var l = i.exec(o.path); 212 (o.netLoc = l[1]), (o.path = l[2]); 213 } 214 o.netLoc && !o.path && (o.path = '/'); 215 var u = { 216 scheme: o.scheme, 217 netLoc: a.netLoc, 218 path: null, 219 params: a.params, 220 query: a.query, 221 fragment: a.fragment, 222 }; 223 if (!a.netLoc && ((u.netLoc = o.netLoc), '/' !== a.path[0])) 224 if (a.path) { 225 var h = o.path, 226 d = h.substring(0, h.lastIndexOf('/') + 1) + a.path; 227 u.path = s.normalizePath(d); 228 } else (u.path = o.path), a.params || ((u.params = o.params), a.query || (u.query = o.query)); 229 return ( 230 null === u.path && (u.path = r.alwaysNormalize ? s.normalizePath(a.path) : a.path), 231 s.buildURLFromParts(u) 232 ); 233 }, 234 parseURL: function (t) { 235 var e = r.exec(t); 236 return e 237 ? { 238 scheme: e[1] || '', 239 netLoc: e[2] || '', 240 path: e[3] || '', 241 params: e[4] || '', 242 query: e[5] || '', 243 fragment: e[6] || '', 244 } 245 : null; 246 }, 247 normalizePath: function (t) { 248 for (t = t.split('').reverse().join('').replace(n, ''); t.length !== (t = t.replace(a, '')).length; ); 249 return t.split('').reverse().join(''); 250 }, 251 buildURLFromParts: function (t) { 252 return t.scheme + t.netLoc + t.path + t.params + t.query + t.fragment; 253 }, 254 }), 255 (t.exports = s); 256 })(y); 257 var T = y.exports, 258 E = 259 Number.isFinite || 260 function (t) { 261 return 'number' == typeof t && isFinite(t); 262 }, 263 S = (function (t) { 264 return (
265 (t.MEDIA_ATTACHING = 'hlsMediaAttaching'), 266 (t.MEDIA_ATTACHED = 'hlsMediaAttached'), 267 (t.MEDIA_DETACHING = 'hlsMediaDetaching'), 268 (t.MEDIA_DETACHED = 'hlsMediaDetached'), 269 (t.BUFFER_RESET = 'hlsBufferReset'), 270 (t.BUFFER_CODECS = 'hlsBufferCodecs'), 271 (t.BUFFER_CREATED = 'hlsBufferCreated'), 272 (t.BUFFER_APPENDING = 'hlsBufferAppending'), 273 (t.BUFFER_APPENDED = 'hlsBufferAppended'), 274 (t.BUFFER_EOS = 'hlsBufferEos'), 275 (t.BUFFER_FLUSHING = 'hlsBufferFlushing'), 276 (t.BUFFER_FLUSHED = 'hlsBufferFlushed'), 277 (t.MANIFEST_LOADING = 'hlsManifestLoading'), 278 (t.MANIFEST_LOADED = 'hlsManifestLoaded'), 279 (t.MANIFEST_PARSED = 'hlsManifestParsed'), 280 (t.LEVEL_SWITCHING = 'hlsLevelSwitching'), 281 (t.LEVEL_SWITCHED = 'hlsLevelSwitched'), 282 (t.LEVEL_LOADING = 'hlsLevelLoading'), 283 (t.LEVEL_LOADED = 'hlsLevelLoaded'), 284 (t.LEVEL_UPDATED = 'hlsLevelUpdated'), 285 (t.LEVEL_PTS_UPDATED = 'hlsLevelPtsUpdated'), 286 (t.LEVELS_UPDATED = 'hlsLevelsUpdated'), 287 (t.AUDIO_TRACKS_UPDATED = 'hlsAudioTracksUpdated'), 288 (t.AUDIO_TRACK_SWITCHING = 'hlsAudioTrackSwitching'), 289 (t.AUDIO_TRACK_SWITCHED = 'hlsAudioTrackSwitched'), 290 (t.AUDIO_TRACK_LOADING = 'hlsAudioTrackLoading'), 291 (t.AUDIO_TRACK_LOADED = 'hlsAudioTrackLoaded'), 292 (t.SUBTITLE_TRACKS_UPDATED = 'hlsSubtitleTracksUpdated'), 293 (t.SUBTITLE_TRACKS_CLEARED = 'hlsSubtitleTracksCleared'), 294 (t.SUBTITLE_TRACK_SWITCH = 'hlsSubtitleTrackSwitch'), 295 (t.SUBTITLE_TRACK_LOADING = 'hlsSubtitleTrackLoading'), 296 (t.SUBTITLE_TRACK_LOADED = 'hlsSubtitleTrackLoaded'), 297 (t.SUBTITLE_FRAG_PROCESSED = 'hlsSubtitleFragProcessed'), 298 (t.CUES_PARSED = 'hlsCuesParsed'), 299 (t.NON_NATIVE_TEXT_TRACKS_FOUND = 'hlsNonNativeTextTracksFound'), 300 (t.INIT_PTS_FOUND = 'hlsInitPtsFound'), 301 (t.FRAG_LOADING = 'hlsFragLoading'), 302 (t.FRAG_LOAD_EMERGENCY_ABORTED = 'hlsFragLoadEmergencyAborted'), 303 (t.FRAG_LOADED = 'hlsFragLoaded'), 304 (t.FRAG_DECRYPTED = 'hlsFragDecrypted'), 305 (t.FRAG_PARSING_INIT_SEGMENT = 'hlsFragParsingInitSegment'), 306 (t.FRAG_PARSING_USERDATA = 'hlsFragParsingUserdata'), 307 (t.FRAG_PARSING_METADATA = 'hlsFragParsingMetadata'), 308 (t.FRAG_PARSED = 'hlsFragParsed'), 309 (t.FRAG_BUFFERED = 'hlsFragBuffered'), 310 (t.FRAG_CHANGED = 'hlsFragChanged'), 311 (t.FPS_DROP = 'hlsFpsDrop'), 312 (t.FPS_DROP_LEVEL_CAPPING = 'hlsFpsDropLevelCapping'), 313 (t.ERROR = 'hlsError'), 314 (t.DESTROYING = 'hlsDestroying'), 315 (t.KEY_LOADING = 'hlsKeyLoading'), 316 (t.KEY_LOADED = 'hlsKeyLoaded'), 317 (t.LIVE_BACK_BUFFER_REACHED = 'hlsLiveBackBufferReached'), 318 (t.BACK_BUFFER_REACHED = 'hlsBackBufferReached'), 319 t 320 ); 321 })({}), 322 L = (function (t) { 323 return ( 324 (t.NETWORK_ERROR = 'networkError'), 325 (t.MEDIA_ERROR = 'mediaError'), 326 (t.KEY_SYSTEM_ERROR = 'keySystemError'), 327 (t.MUX_ERROR = 'muxError'), 328 (t.OTHER_ERROR = 'otherError'), 329 t 330 ); 331 })({}), 332 R = (function (t) { 333 return ( 334 (t.KEY_SYSTEM_NO_KEYS = 'keySystemNoKeys'), 335 (t.KEY_SYSTEM_NO_ACCESS = 'keySystemNoAccess'), 336 (t.KEY_SYSTEM_NO_SESSION = 'keySystemNoSession'), 337 (t.KEY_SYSTEM_NO_CONFIGURED_LICENSE = 'keySystemNoConfiguredLicense'), 338 (t.KEY_SYSTEM_LICENSE_REQUEST_FAILED = 'keySystemLicenseRequestFailed'), 339 (t.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED = 'keySystemServerCertificateRequestFailed'), 340 (t.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED = 'keySystemServerCertificateUpdateFailed'), 341 (t.KEY_SYSTEM_SESSION_UPDATE_FAILED = 'keySystemSessionUpdateFailed'), 342 (t.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED = 'keySystemStatusOutputRestricted'), 343 (t.KEY_SYSTEM_STATUS_INTERNAL_ERROR = 'keySystemStatusInternalError'), 344 (t.MANIFEST_LOAD_ERROR = 'manifestLoadError'), 345 (t.MANIFEST_LOAD_TIMEOUT = 'manifestLoadTimeOut'), 346 (t.MANIFEST_PARSING_ERROR = 'manifestParsingError'), 347 (t.MANIFEST_INCOMPATIBLE_CODECS_ERROR = 'manifestIncompatibleCodecsError'), 348 (t.LEVEL_EMPTY_ERROR = 'levelEmptyError'), 349 (t.LEVEL_LOAD_ERROR = 'levelLoadError'), 350 (t.LEVEL_LOAD_TIMEOUT = 'levelLoadTimeOut'), 351 (t.LEVEL_PARSING_ERROR = 'levelParsingError'), 352 (t.LEVEL_SWITCH_ERROR = 'levelSwitchError'), 353 (t.AUDIO_TRACK_LOAD_ERROR = 'audioTrackLoadError'), 354 (t.AUDIO_TRACK_LOAD_TIMEOUT = 'audioTrackLoadTimeOut'), 355 (t.SUBTITLE_LOAD_ERROR = 'subtitleTrackLoadError'), 356 (t.SUBTITLE_TRACK_LOAD_TIMEOUT = 'subtitleTrackLoadTimeOut'), 357 (t.FRAG_LOAD_ERROR = 'fragLoadError'), 358 (t.FRAG_LOAD_TIMEOUT = 'fragLoadTimeOut'), 359 (t.FRAG_DECRYPT_ERROR = 'fragDecryptError'), 360 (t.FRAG_PARSING_ERROR = 'fragParsingError'), 361 (t.FRAG_GAP = 'fragGap'),
362 (t.REMUX_ALLOC_ERROR = 'remuxAllocError'), 363 (t.KEY_LOAD_ERROR = 'keyLoadError'), 364 (t.KEY_LOAD_TIMEOUT = 'keyLoadTimeOut'), 365 (t.BUFFER_ADD_CODEC_ERROR = 'bufferAddCodecError'), 366 (t.BUFFER_INCOMPATIBLE_CODECS_ERROR = 'bufferIncompatibleCodecsError'), 367 (t.BUFFER_APPEND_ERROR = 'bufferAppendError'), 368 (t.BUFFER_APPENDING_ERROR = 'bufferAppendingError'), 369 (t.BUFFER_STALLED_ERROR = 'bufferStalledError'), 370 (t.BUFFER_FULL_ERROR = 'bufferFullError'), 371 (t.BUFFER_SEEK_OVER_HOLE = 'bufferSeekOverHole'), 372 (t.BUFFER_NUDGE_ON_STALL = 'bufferNudgeOnStall'), 373 (t.INTERNAL_EXCEPTION = 'internalException'), 374 (t.INTERNAL_ABORTED = 'aborted'), 375 (t.UNKNOWN = 'unknown'), 376 t 377 ); 378 })({}), 379 A = function () {}, 380 k = { trace: A, debug: A, log: A, warn: A, info: A, error: A }, 381 b = k; 382 function D(t) { 383 var e = self.console[t]; 384 return e ? e.bind(self.console, '[' + t + '] >') : A; 385 } 386 function I(t, e) { 387 if ((self.console && !0 === t) || 'object' == typeof t) { 388 !(function (t) { 389 for (var e = arguments.length, r = new Array(e > 1 ? e - 1 : 0), i = 1; i < e; i++) r[i - 1] = arguments[i]; 390 r.forEach(function (e) { 391 b[e] = t[e] ? t[e].bind(t) : D(e); 392 }); 393 })(t, 'debug', 'log', 'info', 'warn', 'error'); 394 try { 395 b.log('Debug logs enabled for "' + e + '" in hls.js version 1.4.12'); 396 } catch (t) { 397 b = k; 398 } 399 } else b = k; 400 } 401 var w = b, 402 C = /^(\d+)x(\d+)$/, 403 _ = /(.+?)=(".*?"|.*?)(?:,|$)/g, 404 P = (function () { 405 function t(e) { 406 for (var r in ('string' == typeof e && (e = t.parseAttrList(e)), e)) 407 e.hasOwnProperty(r) && 408 ('X-' === r.substring(0, 2) && ((this.clientAttrs = this.clientAttrs || []), this.clientAttrs.push(r)), 409 (this[r] = e[r])); 410 } 411 var e = t.prototype; 412 return ( 413 (e.decimalInteger = function (t) { 414 var e = parseInt(this[t], 10); 415 return e > Number.MAX_SAFE_INTEGER ? 1 / 0 : e; 416 }), 417 (e.hexadecimalInteger = function (t) { 418 if (this[t]) { 419 var e = (this[t] || '0x').slice(2); 420 e = (1 & e.length ? '0' : '') + e; 421 for (var r = new Uint8Array(e.length / 2), i = 0; i < e.length / 2; i++) 422 r[i] = parseInt(e.slice(2 * i, 2 * i + 2), 16); 423 return r; 424 } 425 return null; 426 }), 427 (e.hexadecimalIntegerAsNumber = function (t) { 428 var e = parseInt(this[t], 16); 429 return e > Number.MAX_SAFE_INTEGER ? 1 / 0 : e; 430 }), 431 (e.decimalFloatingPoint = function (t) { 432 return parseFloat(this[t]); 433 }), 434 (e.optionalFloat = function (t, e) { 435 var r = this[t]; 436 return r ? parseFloat(r) : e; 437 }), 438 (e.enumeratedString = function (t) { 439 return this[t]; 440 }), 441 (e.bool = function (t) { 442 return 'YES' === this[t]; 443 }), 444 (e.decimalResolution = function (t) { 445 var e = C.exec(this[t]); 446 if (null !== e) return { width: parseInt(e[1], 10), height: parseInt(e[2], 10) }; 447 }), 448 (t.parseAttrList = function (t) { 449 var e, 450 r = {}; 451 for (_.lastIndex = 0; null !== (e = _.exec(t)); ) { 452 var i = e[2]; 453 0 === i.indexOf('"') && i.lastIndexOf('"') === i.length - 1 && (i = i.slice(1, -1)), 454 (r[e[1].trim()] = i); 455 } 456 return r; 457 }), 458 t 459 ); 460 })(); 461 function x(t) { 462 return 'SCTE35-OUT' === t || 'SCTE35-IN' === t; 463 } 464 var F = (function () { 465 function t(t, e) { 466 if ( 467 ((this.attr = void 0), 468 (this._startDate = void 0), 469 (this._endDate = void 0), 470 (this._badValueForSameId = void 0), 471 e) 472 ) { 473 var r = e.attr; 474 for (var i in r) 475 if (Object.prototype.hasOwnProperty.call(t, i) && t[i] !== r[i]) { 476 w.warn('DATERANGE tag attribute: "' + i + '" does not match for tags with ID: "' + t.ID + '"'), 477 (this._badValueForSameId = i); 478 break; 479 } 480 t = o(new P({}), r, t); 481 } 482 if (((this.attr = t), (this._startDate = new Date(t['START-DATE'])), 'END-DATE' in this.attr)) { 483 var n = new Date(this.attr['END-DATE']); 484 E(n.getTime()) && (this._endDate = n); 485 } 486 } 487 return ( 488 a(t, [ 489 { 490 key: 'id', 491 get: function () { 492 return this.attr.ID; 493 }, 494 }, 495 { 496 key: 'class', 497 get: function () { 498 return this.attr.CLASS; 499 }, 500 }, 501 { 502 key: 'startDate', 503 get: function () { 504 return this._startDate; 505 }, 506 }, 507 { 508 key: 'endDate', 509 get: function () { 510 if (this._endDate) return this._endDate; 511 var t = this.duration; 512 return null !== t ? new Date(this._startDate.getTime() + 1e3 * t) : null; 513 }, 514 }, 515 { 516 key: 'duration', 517 get: function () { 518 if ('DURATION' in this.attr) { 519 var t = this.attr.decimalFloatingPoint('DURATION'); 520 if (E(t)) return t; 521 } else if (this._endDate) return (this._endDate.getTime() - this._startDate.getTime()) / 1e3; 522 return null; 523 }, 524 }, 525 { 526 key: 'plannedDuration', 527 get: function () { 528 return 'PLANNED-DURATION' in this.attr ? this.attr.decimalFloatingPoint('PLANNED-DURATION') : null; 529 }, 530 }, 531 { 532 key: 'endOnNext', 533 get: function () { 534 return this.attr.bool('END-ON-NEXT'); 535 }, 536 }, 537 { 538 key: 'isValid', 539 get: function () { 540 return ( 541 !!this.id && 542 !this._badValueForSameId && 543 E(this.startDate.getTime()) && 544 (null === this.duration || this.duration >= 0) && 545 (!this.endOnNext || !!this.class) 546 ); 547 }, 548 }, 549 ]), 550 t 551 ); 552 })(), 553 M = function () { 554 (this.aborted = !1), 555 (this.loaded = 0), 556 (this.retry = 0), 557 (this.total = 0), 558 (this.chunkCount = 0), 559 (this.bwEstimate = 0), 560 (this.loading = { start: 0, first: 0, end: 0 }), 561 (this.parsing = { start: 0, end: 0 }), 562 (this.buffering = { start: 0, first: 0, end: 0 }); 563 }, 564 O = 'audio', 565 N = 'video', 566 U = 'audiovideo', 567 B = (function () { 568 function t(t) { 569 var e; 570 (this._byteRange = null),
571 (this._url = null), 572 (this.baseurl = void 0), 573 (this.relurl = void 0), 574 (this.elementaryStreams = (((e = {})[O] = null), (e[N] = null), (e[U] = null), e)), 575 (this.baseurl = t); 576 } 577 return ( 578 (t.prototype.setByteRange = function (t, e) { 579 var r = t.split('@', 2), 580 i = []; 581 1 === r.length ? (i[0] = e ? e.byteRangeEndOffset : 0) : (i[0] = parseInt(r[1])), 582 (i[1] = parseInt(r[0]) + i[0]), 583 (this._byteRange = i); 584 }), 585 a(t, [ 586 { 587 key: 'byteRange', 588 get: function () { 589 return this._byteRange ? this._byteRange : []; 590 }, 591 }, 592 { 593 key: 'byteRangeStartOffset', 594 get: function () { 595 return this.byteRange[0]; 596 }, 597 }, 598 { 599 key: 'byteRangeEndOffset', 600 get: function () { 601 return this.byteRange[1]; 602 }, 603 }, 604 { 605 key: 'url', 606 get: function () { 607 return ( 608 !this._url && 609 this.baseurl && 610 this.relurl && 611 (this._url = T.buildAbsoluteURL(this.baseurl, this.relurl, { alwaysNormalize: !0 })), 612 this._url || '' 613 ); 614 }, 615 set: function (t) { 616 this._url = t; 617 }, 618 }, 619 ]), 620 t 621 ); 622 })(), 623 G = (function (t) { 624 function e(e, r) { 625 var i; 626 return ( 627 ((i = t.call(this, r) || this)._decryptdata = null), 628 (i.rawProgramDateTime = null), 629 (i.programDateTime = null), 630 (i.tagList = []), 631 (i.duration = 0), 632 (i.sn = 0), 633 (i.levelkeys = void 0), 634 (i.type = void 0), 635 (i.loader = null), 636 (i.keyLoader = null), 637 (i.level = -1), 638 (i.cc = 0), 639 (i.startPTS = void 0), 640 (i.endPTS = void 0), 641 (i.startDTS = void 0), 642 (i.endDTS = void 0), 643 (i.start = 0), 644 (i.deltaPTS = void 0), 645 (i.maxStartPTS = void 0), 646 (i.minEndPTS = void 0), 647 (i.stats = new M()), 648 (i.urlId = 0), 649 (i.data = void 0), 650 (i.bitrateTest = !1), 651 (i.title = null), 652 (i.initSegment = null), 653 (i.endList = void 0), 654 (i.gap = void 0), 655 (i.type = e), 656 i 657 ); 658 } 659 l(e, t); 660 var r = e.prototype; 661 return ( 662 (r.setKeyFormat = function (t) { 663 if (this.levelkeys) { 664 var e = this.levelkeys[t]; 665 e && !this._decryptdata && (this._decryptdata = e.getDecryptData(this.sn)); 666 } 667 }), 668 (r.abortRequests = function () { 669 var t, e; 670 null == (t = this.loader) || t.abort(), null == (e = this.keyLoader) || e.abort(); 671 }), 672 (r.setElementaryStreamInfo = function (t, e, r, i, n, a) { 673 void 0 === a && (a = !1); 674 var s = this.elementaryStreams, 675 o = s[t]; 676 o 677 ? ((o.startPTS = Math.min(o.startPTS, e)), 678 (o.endPTS = Math.max(o.endPTS, r)), 679 (o.startDTS = Math.min(o.startDTS, i)), 680 (o.endDTS = Math.max(o.endDTS, n))) 681 : (s[t] = { startPTS: e, endPTS: r, startDTS: i, endDTS: n, partial: a }); 682 }), 683 (r.clearElementaryStreamInfo = function () { 684 var t = this.elementaryStreams; 685 (t[O] = null), (t[N] = null), (t[U] = null); 686 }), 687 a(e, [ 688 { 689 key: 'decryptdata', 690 get: function () { 691 if (!this.levelkeys && !this._decryptdata) return null; 692 if (!this._decryptdata && this.levelkeys && !this.levelkeys.NONE) { 693 var t = this.levelkeys.identity; 694 if (t) this._decryptdata = t.getDecryptData(this.sn); 695 else { 696 var e = Object.keys(this.levelkeys); 697 if (1 === e.length) return (this._decryptdata = this.levelkeys[e[0]].getDecryptData(this.sn)); 698 } 699 } 700 return this._decryptdata; 701 }, 702 }, 703 { 704 key: 'end', 705 get: function () { 706 return this.start + this.duration; 707 }, 708 }, 709 { 710 key: 'endProgramDateTime', 711 get: function () { 712 if (null === this.programDateTime) return null; 713 if (!E(this.programDateTime)) return null; 714 var t = E(this.duration) ? this.duration : 0; 715 return this.programDateTime + 1e3 * t; 716 }, 717 }, 718 { 719 key: 'encrypted', 720 get: function () { 721 var t; 722 if (null != (t = this._decryptdata) && t.encrypted) return !0; 723 if (this.levelkeys) { 724 var e = Object.keys(this.levelkeys), 725 r = e.length; 726 if (r > 1 || (1 === r && this.levelkeys[e[0]].encrypted)) return !0; 727 } 728 return !1; 729 }, 730 }, 731 ]), 732 e 733 ); 734 })(B), 735 K = (function (t) { 736 function e(e, r, i, n, a) { 737 var s; 738 ((s = t.call(this, i) || this).fragOffset = 0), 739 (s.duration = 0), 740 (s.gap = !1), 741 (s.independent = !1), 742 (s.relurl = void 0), 743 (s.fragment = void 0), 744 (s.index = void 0), 745 (s.stats = new M()), 746 (s.duration = e.decimalFloatingPoint('DURATION')), 747 (s.gap = e.bool('GAP')), 748 (s.independent = e.bool('INDEPENDENT')), 749 (s.relurl = e.enumeratedString('URI')), 750 (s.fragment = r), 751 (s.index = n); 752 var o = e.enumeratedString('BYTERANGE'); 753 return o && s.setByteRange(o, a), a && (s.fragOffset = a.fragOffset + a.duration), s; 754 } 755 return ( 756 l(e, t), 757 a(e, [ 758 { 759 key: 'start', 760 get: function () { 761 return this.fragment.start + this.fragOffset; 762 }, 763 }, 764 { 765 key: 'end', 766 get: function () { 767 return this.start + this.duration; 768 }, 769 }, 770 { 771 key: 'loaded', 772 get: function () { 773 var t = this.elementaryStreams; 774 return !!(t.audio || t.video || t.audiovideo); 775 }, 776 }, 777 ]), 778 e 779 ); 780 })(B), 781 H = (function () { 782 function t(t) { 783 (this.PTSKnown = !1), 784 (this.alignedSliding = !1), 785 (this.averagetargetduration = void 0), 786 (this.endCC = 0), 787 (this.endSN = 0), 788 (this.fragments = void 0), 789 (this.fragmentHint = void 0), 790 (this.partList = null),
791 (this.dateRanges = void 0), 792 (this.live = !0), 793 (this.ageHeader = 0), 794 (this.advancedDateTime = void 0), 795 (this.updated = !0), 796 (this.advanced = !0), 797 (this.availabilityDelay = void 0), 798 (this.misses = 0), 799 (this.startCC = 0), 800 (this.startSN = 0), 801 (this.startTimeOffset = null), 802 (this.targetduration = 0), 803 (this.totalduration = 0), 804 (this.type = null), 805 (this.url = void 0), 806 (this.m3u8 = ''), 807 (this.version = null), 808 (this.canBlockReload = !1), 809 (this.canSkipUntil = 0), 810 (this.canSkipDateRanges = !1), 811 (this.skippedSegments = 0), 812 (this.recentlyRemovedDateranges = void 0), 813 (this.partHoldBack = 0), 814 (this.holdBack = 0), 815 (this.partTarget = 0), 816 (this.preloadHint = void 0), 817 (this.renditionReports = void 0), 818 (this.tuneInGoal = 0), 819 (this.deltaUpdateFailed = void 0), 820 (this.driftStartTime = 0), 821 (this.driftEndTime = 0), 822 (this.driftStart = 0), 823 (this.driftEnd = 0), 824 (this.encryptedFragments = void 0), 825 (this.playlistParsingError = null), 826 (this.variableList = null), 827 (this.hasVariableRefs = !1), 828 (this.fragments = []), 829 (this.encryptedFragments = []), 830 (this.dateRanges = {}), 831 (this.url = t); 832 } 833 return ( 834 (t.prototype.reloaded = function (t) { 835 if (!t) return (this.advanced = !0), void (this.updated = !0); 836 var e = this.lastPartSn - t.lastPartSn, 837 r = this.lastPartIndex - t.lastPartIndex; 838 (this.updated = this.endSN !== t.endSN || !!r || !!e || !this.live), 839 (this.advanced = this.endSN > t.endSN || e > 0 || (0 === e && r > 0)), 840 this.updated || this.advanced 841 ? (this.misses = Math.floor(0.6 * t.misses)) 842 : (this.misses = t.misses + 1), 843 (this.availabilityDelay = t.availabilityDelay); 844 }), 845 a(t, [ 846 { 847 key: 'hasProgramDateTime', 848 get: function () { 849 return !!this.fragments.length && E(this.fragments[this.fragments.length - 1].programDateTime); 850 }, 851 }, 852 { 853 key: 'levelTargetDuration', 854 get: function () { 855 return this.averagetargetduration || this.targetduration || 10; 856 }, 857 }, 858 { 859 key: 'drift', 860 get: function () { 861 var t = this.driftEndTime - this.driftStartTime; 862 return t > 0 ? (1e3 * (this.driftEnd - this.driftStart)) / t : 1; 863 }, 864 }, 865 { 866 key: 'edge', 867 get: function () { 868 return this.partEnd || this.fragmentEnd; 869 }, 870 }, 871 { 872 key: 'partEnd', 873 get: function () { 874 var t; 875 return null != (t = this.partList) && t.length 876 ? this.partList[this.partList.length - 1].end 877 : this.fragmentEnd; 878 }, 879 }, 880 { 881 key: 'fragmentEnd', 882 get: function () { 883 var t; 884 return null != (t = this.fragments) && t.length ? this.fragments[this.fragments.length - 1].end : 0; 885 }, 886 }, 887 { 888 key: 'age', 889 get: function () { 890 return this.advancedDateTime ? Math.max(Date.now() - this.advancedDateTime, 0) / 1e3 : 0; 891 }, 892 }, 893 { 894 key: 'lastPartIndex', 895 get: function () { 896 var t; 897 return null != (t = this.partList) && t.length ? this.partList[this.partList.length - 1].index : -1; 898 }, 899 }, 900 { 901 key: 'lastPartSn', 902 get: function () { 903 var t; 904 return null != (t = this.partList) && t.length 905 ? this.partList[this.partList.length - 1].fragment.sn 906 : this.endSN; 907 }, 908 }, 909 ]), 910 t 911 ); 912 })(); 913 function V(t) { 914 return Uint8Array.from(atob(t), function (t) { 915 return t.charCodeAt(0); 916 }); 917 } 918 function Y(t) { 919 var e, 920 r, 921 i = t.split(':'), 922 n = null; 923 if ('data' === i[0] && 2 === i.length) { 924 var a = i[1].split(';'), 925 s = a[a.length - 1].split(','); 926 if (2 === s.length) { 927 var o = 'base64' === s[0], 928 l = s[1]; 929 o 930 ? (a.splice(-1, 1), (n = V(l))) 931 : ((e = W(l).subarray(0, 16)), (r = new Uint8Array(16)).set(e, 16 - e.length), (n = r)); 932 } 933 } 934 return n; 935 } 936 function W(t) { 937 return Uint8Array.from(unescape(encodeURIComponent(t)), function (t) { 938 return t.charCodeAt(0); 939 }); 940 } 941 var j = { 942 CLEARKEY: 'org.w3.clearkey', 943 FAIRPLAY: 'com.apple.fps', 944 PLAYREADY: 'com.microsoft.playready', 945 WIDEVINE: 'com.widevine.alpha', 946 }, 947 q = 'org.w3.clearkey', 948 X = 'com.apple.streamingkeydelivery', 949 z = 'com.microsoft.playready', 950 Q = 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed'; 951 function $(t) { 952 switch (t) { 953 case X: 954 return j.FAIRPLAY; 955 case z: 956 return j.PLAYREADY; 957 case Q: 958 return j.WIDEVINE; 959 case q: 960 return j.CLEARKEY; 961 } 962 } 963 var J = 'edef8ba979d64acea3c827dcd51d21ed'; 964 function Z(t) { 965 switch (t) { 966 case j.FAIRPLAY: 967 return X; 968 case j.PLAYREADY: 969 return z; 970 case j.WIDEVINE: 971 return Q; 972 case j.CLEARKEY: 973 return q; 974 } 975 } 976 function tt(t) { 977 var e = t.drmSystems, 978 r = t.widevineLicenseUrl, 979 i = e
980 ? [j.FAIRPLAY, j.WIDEVINE, j.PLAYREADY, j.CLEARKEY].filter(function (t) { 981 return !!e[t]; 982 }) 983 : []; 984 return !i[j.WIDEVINE] && r && i.push(j.WIDEVINE), i; 985 } 986 var et = 987 'undefined' != typeof self && self.navigator && self.navigator.requestMediaKeySystemAccess 988 ? self.navigator.requestMediaKeySystemAccess.bind(self.navigator) 989 : null; 990 function rt(t, e, r) { 991 return Uint8Array.prototype.slice ? t.slice(e, r) : new Uint8Array(Array.prototype.slice.call(t, e, r)); 992 } 993 var it, 994 nt = function (t, e) { 995 return ( 996 e + 10 <= t.length && 997 73 === t[e] && 998 68 === t[e + 1] && 999 51 === t[e + 2] && 1000 t[e + 3] < 255 && 1001 t[e + 4] < 255 && 1002 t[e + 6] < 128 && 1003 t[e + 7] < 128 && 1004 t[e + 8] < 128 && 1005 t[e + 9] < 128 1006 ); 1007 }, 1008 at = function (t, e) { 1009 return ( 1010 e + 10 <= t.length && 1011 51 === t[e] && 1012 68 === t[e + 1] && 1013 73 === t[e + 2] && 1014 t[e + 3] < 255 && 1015 t[e + 4] < 255 && 1016 t[e + 6] < 128 && 1017 t[e + 7] < 128 && 1018 t[e + 8] < 128 && 1019 t[e + 9] < 128 1020 ); 1021 }, 1022 st = function (t, e) { 1023 for (var r = e, i = 0; nt(t, e); ) (i += 10), (i += ot(t, e + 6)), at(t, e + 10) && (i += 10), (e += i); 1024 if (i > 0) return t.subarray(r, r + i); 1025 }, 1026 ot = function (t, e) { 1027 var r = 0; 1028 return ( 1029 (r = (127 & t[e]) << 21), (r |= (127 & t[e + 1]) << 14), (r |= (127 & t[e + 2]) << 7), (r |= 127 & t[e + 3]) 1030 ); 1031 }, 1032 lt = function (t, e) { 1033 return nt(t, e) && ot(t, e + 6) + 10 <= t.length - e; 1034 }, 1035 ut = function (t) { 1036 return t && 'PRIV' === t.key && 'com.apple.streaming.transportStreamTimestamp' === t.info; 1037 }, 1038 ht = function (t) { 1039 var e = String.fromCharCode(t[0], t[1], t[2], t[3]), 1040 r = ot(t, 4); 1041 return { type: e, size: r, data: t.subarray(10, 10 + r) }; 1042 }, 1043 dt = function (t) { 1044 for (var e = 0, r = []; nt(t, e); ) { 1045 for (var i = ot(t, e + 6), n = (e += 10) + i; e + 8 < n; ) { 1046 var a = ht(t.subarray(e)), 1047 s = ct(a); 1048 s && r.push(s), (e += a.size + 10); 1049 } 1050 at(t, e) && (e += 10); 1051 } 1052 return r; 1053 }, 1054 ct = function (t) { 1055 return 'PRIV' === t.type ? ft(t) : 'W' === t.type[0] ? vt(t) : gt(t); 1056 }, 1057 ft = function (t) { 1058 if (!(t.size < 2)) { 1059 var e = pt(t.data, !0), 1060 r = new Uint8Array(t.data.subarray(e.length + 1)); 1061 return { key: t.type, info: e, data: r.buffer }; 1062 } 1063 }, 1064 gt = function (t) { 1065 if (!(t.size < 2)) { 1066 if ('TXXX' === t.type) { 1067 var e = 1, 1068 r = pt(t.data.subarray(e), !0); 1069 e += r.length + 1; 1070 var i = pt(t.data.subarray(e)); 1071 return { key: t.type, info: r, data: i }; 1072 } 1073 var n = pt(t.data.subarray(1)); 1074 return { key: t.type, data: n }; 1075 } 1076 }, 1077 vt = function (t) { 1078 if ('WXXX' === t.type) { 1079 if (t.size < 2) return; 1080 var e = 1, 1081 r = pt(t.data.subarray(e), !0); 1082 e += r.length + 1; 1083 var i = pt(t.data.subarray(e)); 1084 return { key: t.type, info: r, data: i }; 1085 } 1086 var n = pt(t.data); 1087 return { key: t.type, data: n }; 1088 }, 1089 mt = function (t) { 1090 if (8 === t.data.byteLength) { 1091 var e = new Uint8Array(t.data), 1092 r = 1 & e[3], 1093 i = (e[4] << 23) + (e[5] << 15) + (e[6] << 7) + e[7]; 1094 return (i /= 45), r && (i += 47721858.84), Math.round(i); 1095 } 1096 }, 1097 pt = function (t, e) { 1098 void 0 === e && (e = !1); 1099 var r = yt(); 1100 if (r) { 1101 var i = r.decode(t); 1102 if (e) { 1103 var n = i.indexOf('\0'); 1104 return -1 !== n ? i.substring(0, n) : i; 1105 } 1106 return i.replace(/\0/g, ''); 1107 } 1108 for (var a, s, o, l = t.length, u = '', h = 0; h < l; ) { 1109 if (0 === (a = t[h++]) && e) return u; 1110 if (0 !== a && 3 !== a) 1111 switch (a >> 4) { 1112 case 0: 1113 case 1: 1114 case 2: 1115 case 3: 1116 case 4: 1117 case 5: 1118 case 6: 1119 case 7: 1120 u += String.fromCharCode(a); 1121 break; 1122 case 12: 1123 case 13: 1124 (s = t[h++]), (u += String.fromCharCode(((31 & a) << 6) | (63 & s))); 1125 break; 1126 case 14: 1127 (s = t[h++]), 1128 (o = t[h++]), 1129 (u += String.fromCharCode(((15 & a) << 12) | ((63 & s) << 6) | ((63 & o) << 0))); 1130 } 1131 } 1132 return u; 1133 }; 1134 function yt() { 1135 return it || void 0 === self.TextDecoder || (it = new self.TextDecoder('utf-8')), it; 1136 } 1137 var Tt = function (t) { 1138 for (var e = '', r = 0; r < t.length; r++) { 1139 var i = t[r].toString(16); 1140 i.length < 2 && (i = '0' + i), (e += i); 1141 } 1142 return e; 1143 }, 1144 Et = Math.pow(2, 32) - 1, 1145 St = [].push, 1146 Lt = { video: 1, audio: 2, id3: 3, text: 4 }; 1147 function Rt(t) { 1148 return String.fromCharCode.apply(null, t); 1149 } 1150 function At(t, e) { 1151 var r = (t[e] << 8) | t[e + 1]; 1152 return r < 0 ? 65536 + r : r; 1153 } 1154 function kt(t, e) { 1155 var r = bt(t, e); 1156 return r < 0 ? 4294967296 + r : r; 1157 } 1158 function bt(t, e) { 1159 return (t[e] << 24) | (t[e + 1] << 16) | (t[e + 2] << 8) | t[e + 3]; 1160 } 1161 function Dt(t, e, r) { 1162 (t[e] = r >> 24), (t[e + 1] = (r >> 16) & 255), (t[e + 2] = (r >> 8) & 255), (t[e + 3] = 255 & r); 1163 } 1164 function It(t, e) { 1165 var r = []; 1166 if (!e.length) return r; 1167 for (var i = t.byteLength, n = 0; n < i; ) { 1168 var a = kt(t, n), 1169 s = a > 1 ? n + a : i; 1170 if (Rt(t.subarray(n + 4, n + 8)) === e[0])
1171 if (1 === e.length) r.push(t.subarray(n + 8, s)); 1172 else { 1173 var o = It(t.subarray(n + 8, s), e.slice(1)); 1174 o.length && St.apply(r, o); 1175 } 1176 n = s; 1177 } 1178 return r; 1179 } 1180 function wt(t) { 1181 var e = [], 1182 r = t[0], 1183 i = 8, 1184 n = kt(t, i); 1185 (i += 4), (i += 0 === r ? 8 : 16), (i += 2); 1186 var a = t.length + 0, 1187 s = At(t, i); 1188 i += 2; 1189 for (var o = 0; o < s; o++) { 1190 var l = i, 1191 u = kt(t, l); 1192 l += 4; 1193 var h = 2147483647 & u; 1194 if (1 == (2147483648 & u) >>> 31) return w.warn('SIDX has hierarchical references (not supported)'), null; 1195 var d = kt(t, l); 1196 (l += 4), 1197 e.push({ referenceSize: h, subsegmentDuration: d, info: { duration: d / n, start: a, end: a + h - 1 } }), 1198 (a += h), 1199 (i = l += 4); 1200 } 1201 return { earliestPresentationTime: 0, timescale: n, version: r, referencesCount: s, references: e }; 1202 } 1203 function Ct(t) { 1204 for (var e = [], r = It(t, ['moov', 'trak']), i = 0; i < r.length; i++) { 1205 var n = r[i], 1206 a = It(n, ['tkhd'])[0]; 1207 if (a) { 1208 var s = a[0], 1209 o = 0 === s ? 12 : 20, 1210 l = kt(a, o), 1211 u = It(n, ['mdia', 'mdhd'])[0]; 1212 if (u) { 1213 var h = kt(u, (o = 0 === (s = u[0]) ? 12 : 20)), 1214 d = It(n, ['mdia', 'hdlr'])[0]; 1215 if (d) { 1216 var c = Rt(d.subarray(8, 12)), 1217 f = { soun: O, vide: N }[c]; 1218 if (f) { 1219 var g = It(n, ['mdia', 'minf', 'stbl', 'stsd'])[0], 1220 v = void 0; 1221 g && (v = Rt(g.subarray(12, 16))), 1222 (e[l] = { timescale: h, type: f }), 1223 (e[f] = { timescale: h, id: l, codec: v }); 1224 } 1225 } 1226 } 1227 } 1228 } 1229 return ( 1230 It(t, ['moov', 'mvex', 'trex']).forEach(function (t) { 1231 var r = kt(t, 4), 1232 i = e[r]; 1233 i && (i.default = { duration: kt(t, 12), flags: kt(t, 20) }); 1234 }), 1235 e 1236 ); 1237 } 1238 function _t(t) { 1239 var e = It(t, ['schm'])[0]; 1240 if (e) { 1241 var r = Rt(e.subarray(4, 8)); 1242 if ('cbcs' === r || 'cenc' === r) return It(t, ['schi', 'tenc'])[0]; 1243 } 1244 return w.error("[eme] missing 'schm' box"), null; 1245 } 1246 function Pt(t) { 1247 var e = kt(t, 0), 1248 r = 8; 1249 1 & e && (r += 4), 4 & e && (r += 4); 1250 for (var i = 0, n = kt(t, 4), a = 0; a < n; a++) 1251 256 & e && ((i += kt(t, r)), (r += 4)), 512 & e && (r += 4), 1024 & e && (r += 4), 2048 & e && (r += 4); 1252 return i; 1253 } 1254 function xt(t, e) { 1255 var r = new Uint8Array(t.length + e.length); 1256 return r.set(t), r.set(e, t.length), r; 1257 } 1258 function Ft(t, e) { 1259 var r = [], 1260 i = e.samples, 1261 n = e.timescale, 1262 a = e.id, 1263 s = !1; 1264 return ( 1265 It(i, ['moof']).map(function (o) { 1266 var l = o.byteOffset - 8; 1267 It(o, ['traf']).map(function (o) { 1268 var u = It(o, ['tfdt']).map(function (t) { 1269 var e = t[0], 1270 r = kt(t, 4); 1271 return 1 === e && ((r *= Math.pow(2, 32)), (r += kt(t, 8))), r / n; 1272 })[0]; 1273 return ( 1274 void 0 !== u && (t = u), 1275 It(o, ['tfhd']).map(function (u) { 1276 var h = kt(u, 4), 1277 d = 16777215 & kt(u, 0), 1278 c = 0, 1279 f = 0 != (16 & d), 1280 g = 0, 1281 v = 0 != (32 & d), 1282 m = 8; 1283 h === a && 1284 (0 != (1 & d) && (m += 8), 1285 0 != (2 & d) && (m += 4), 1286 0 != (8 & d) && ((c = kt(u, m)), (m += 4)), 1287 f && ((g = kt(u, m)), (m += 4)), 1288 v && (m += 4), 1289 'video' === e.type && 1290 (s = (function (t) { 1291 if (!t) return !1; 1292 var e = t.indexOf('.'), 1293 r = e < 0 ? t : t.substring(0, e); 1294 return 'hvc1' === r || 'hev1' === r || 'dvh1' === r || 'dvhe' === r; 1295 })(e.codec)), 1296 It(o, ['trun']).map(function (a) { 1297 var o = a[0],
1298 u = 16777215 & kt(a, 0), 1299 h = 0 != (1 & u), 1300 d = 0, 1301 f = 0 != (4 & u), 1302 v = 0 != (256 & u), 1303 m = 0, 1304 p = 0 != (512 & u), 1305 y = 0, 1306 T = 0 != (1024 & u), 1307 E = 0 != (2048 & u), 1308 S = 0, 1309 L = kt(a, 4), 1310 R = 8; 1311 h && ((d = kt(a, R)), (R += 4)), f && (R += 4); 1312 for (var A = d + l, k = 0; k < L; k++) { 1313 if ( 1314 (v ? ((m = kt(a, R)), (R += 4)) : (m = c), 1315 p ? ((y = kt(a, R)), (R += 4)) : (y = g), 1316 T && (R += 4), 1317 E && ((S = 0 === o ? kt(a, R) : bt(a, R)), (R += 4)), 1318 e.type === N) 1319 ) 1320 for (var b = 0; b < y; ) { 1321 var D = kt(i, A); 1322 Mt(s, i[(A += 4)]) && Ot(i.subarray(A, A + D), s ? 2 : 1, t + S / n, r), 1323 (A += D), 1324 (b += D + 4); 1325 } 1326 t += m / n; 1327 } 1328 })); 1329 }) 1330 ); 1331 }); 1332 }), 1333 r 1334 ); 1335 } 1336 function Mt(t, e) { 1337 if (t) { 1338 var r = (e >> 1) & 63; 1339 return 39 === r || 40 === r; 1340 } 1341 return 6 == (31 & e); 1342 } 1343 function Ot(t, e, r, i) { 1344 var n = Nt(t), 1345 a = 0; 1346 a += e; 1347 for (var s = 0, o = 0, l = !1, u = 0; a < n.length; ) { 1348 s = 0; 1349 do { 1350 if (a >= n.length) break; 1351 s += u = n[a++]; 1352 } while (255 === u); 1353 o = 0; 1354 do { 1355 if (a >= n.length) break; 1356 o += u = n[a++]; 1357 } while (255 === u); 1358 var h = n.length - a; 1359 if (!l && 4 === s && a < n.length) { 1360 if (((l = !0), 181 === n[a++])) { 1361 var d = At(n, a); 1362 if (((a += 2), 49 === d)) { 1363 var c = kt(n, a); 1364 if (((a += 4), 1195456820 === c)) { 1365 var f = n[a++]; 1366 if (3 === f) { 1367 var g = n[a++], 1368 v = 64 & g, 1369 m = v ? 2 + 3 * (31 & g) : 0, 1370 p = new Uint8Array(m); 1371 if (v) { 1372 p[0] = g; 1373 for (var y = 1; y < m; y++) p[y] = n[a++]; 1374 } 1375 i.push({ type: f, payloadType: s, pts: r, bytes: p }); 1376 } 1377 } 1378 } 1379 } 1380 } else if (5 === s && o < h) { 1381 if (((l = !0), o > 16)) { 1382 for (var T = [], E = 0; E < 16; E++) { 1383 var S = n[a++].toString(16); 1384 T.push(1 == S.length ? '0' + S : S), (3 !== E && 5 !== E && 7 !== E && 9 !== E) || T.push('-'); 1385 } 1386 for (var L = o - 16, R = new Uint8Array(L), A = 0; A < L; A++) R[A] = n[a++]; 1387 i.push({ payloadType: s, pts: r, uuid: T.join(''), userData: pt(R), userDataBytes: R }); 1388 } 1389 } else if (o < h) a += o; 1390 else if (o > h) break; 1391 } 1392 } 1393 function Nt(t) { 1394 for (var e = t.byteLength, r = [], i = 1; i < e - 2; ) 1395 0 === t[i] && 0 === t[i + 1] && 3 === t[i + 2] ? (r.push(i + 2), (i += 2)) : i++; 1396 if (0 === r.length) return t; 1397 var n = e - r.length, 1398 a = new Uint8Array(n), 1399 s = 0; 1400 for (i = 0; i < n; s++, i++) s === r[0] && (s++, r.shift()), (a[i] = t[s]); 1401 return a; 1402 } 1403 function Ut(t, e, r) { 1404 if (16 !== t.byteLength) throw new RangeError('Invalid system id'); 1405 var i, n, a; 1406 if (e) { 1407 (i = 1), (n = new Uint8Array(16 * e.length)); 1408 for (var s = 0; s < e.length; s++) { 1409 var o = e[s]; 1410 if (16 !== o.byteLength) throw new RangeError('Invalid key'); 1411 n.set(o, 16 * s); 1412 } 1413 } else (i = 0), (n = new Uint8Array()); 1414 i > 0 1415 ? ((a = new Uint8Array(4)), e.length > 0 && new DataView(a.buffer).setUint32(0, e.length, !1)) 1416 : (a = new Uint8Array()); 1417 var l = new Uint8Array(4); 1418 return ( 1419 r && r.byteLength > 0 && new DataView(l.buffer).setUint32(0, r.byteLength, !1), 1420 (function (t) { 1421 for (var e = arguments.length, r = new Array(e > 1 ? e - 1 : 0), i = 1; i < e; i++) r[i - 1] = arguments[i]; 1422 for (var n = r.length, a = 8, s = n; s--;
1422 ) a += r[s].byteLength; 1423 var o = new Uint8Array(a); 1424 for ( 1425 o[0] = (a >> 24) & 255, 1426 o[1] = (a >> 16) & 255, 1427 o[2] = (a >> 8) & 255, 1428 o[3] = 255 & a, 1429 o.set(t, 4), 1430 s = 0, 1431 a = 8; 1432 s < n; 1433 s++ 1434 ) 1435 o.set(r[s], a), (a += r[s].byteLength); 1436 return o; 1437 })([112, 115, 115, 104], new Uint8Array([i, 0, 0, 0]), t, a, n, l, r || new Uint8Array()) 1438 ); 1439 } 1440 var Bt = {}, 1441 Gt = (function () { 1442 function t(t, e, r, i, n) { 1443 void 0 === i && (i = [1]), 1444 void 0 === n && (n = null), 1445 (this.uri = void 0), 1446 (this.method = void 0), 1447 (this.keyFormat = void 0), 1448 (this.keyFormatVersions = void 0), 1449 (this.encrypted = void 0), 1450 (this.isCommonEncryption = void 0), 1451 (this.iv = null), 1452 (this.key = null), 1453 (this.keyId = null), 1454 (this.pssh = null), 1455 (this.method = t), 1456 (this.uri = e), 1457 (this.keyFormat = r), 1458 (this.keyFormatVersions = i), 1459 (this.iv = n), 1460 (this.encrypted = !!t && 'NONE' !== t), 1461 (this.isCommonEncryption = this.encrypted && 'AES-128' !== t); 1462 } 1463 t.clearKeyUriToKeyIdMap = function () { 1464 Bt = {}; 1465 }; 1466 var e = t.prototype; 1467 return ( 1468 (e.isSupported = function () { 1469 if (this.method) { 1470 if ('AES-128' === this.method || 'NONE' === this.method) return !0; 1471 if ('identity' === this.keyFormat) return 'SAMPLE-AES' === this.method; 1472 switch (this.keyFormat) { 1473 case X: 1474 case Q: 1475 case z: 1476 case q: 1477 return ( 1478 -1 !== ['ISO-23001-7', 'SAMPLE-AES', 'SAMPLE-AES-CENC', 'SAMPLE-AES-CTR'].indexOf(this.method) 1479 ); 1480 } 1481 } 1482 return !1; 1483 }), 1484 (e.getDecryptData = function (e) { 1485 if (!this.encrypted || !this.uri) return null; 1486 if ('AES-128' === this.method && this.uri && !this.iv) { 1487 'number' != typeof e && 1488 ('AES-128' !== this.method || 1489 this.iv || 1490 w.warn( 1491 'missing IV for initialization segment with method="' + this.method + '" - compliance issue', 1492 ), 1493 (e = 0)); 1494 var r = (function (t) { 1495 for (var e = new Uint8Array(16), r = 12; r < 16; r++) e[r] = (t >> (8 * (15 - r))) & 255; 1496 return e; 1497 })(e); 1498 return new t(this.method, this.uri, 'identity', this.keyFormatVersions, r); 1499 } 1500 var i = Y(this.uri); 1501 if (i) 1502 switch (this.keyFormat) { 1503 case Q: 1504 (this.pssh = i), i.length >= 22 && (this.keyId = i.subarray(i.length - 22, i.length - 6)); 1505 break; 1506 case z: 1507 var n = new Uint8Array([154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149]); 1508 this.pssh = Ut(n, null, i); 1509 var a = new Uint16Array(i.buffer, i.byteOffset, i.byteLength / 2), 1510 s = String.fromCharCode.apply(null, Array.from(a)), 1511 o = s.substring(s.indexOf('<'), s.length), 1512 l = new DOMParser().parseFromString(o, 'text/xml').getElementsByTagName('KID')[0]; 1513 if (l) { 1514 var u = l.childNodes[0] ? l.childNodes[0].nodeValue : l.getAttribute('VALUE'); 1515 if (u) { 1516 var h = V(u).subarray(0, 16); 1517 !(function (t) { 1518 var e = function (t, e, r) { 1519 var i = t[e]; 1520 (t[e] = t[r]), (t[r] = i); 1521 }; 1522 e(t, 0, 3), e(t, 1, 2), e(t, 4, 5), e(t, 6, 7); 1523 })(h), 1524 (this.keyId = h); 1525 } 1526 } 1527 break; 1528 default: 1529 var d = i.subarray(0, 16); 1530 if (16 !== d.length) { 1531 var c = new Uint8Array(16); 1532 c.set(d, 16 - d.length), (d = c); 1533 } 1534 this.keyId = d; 1535 } 1536 if (!this.keyId || 16 !== this.keyId.byteLength) { 1537 var f = Bt[this.uri]; 1538 if (!f) { 1539 var g = Object.keys(Bt).length % Number.MAX_SAFE_INTEGER; 1540 (f = new Uint8Array(16)), new DataView(f.buffer, 12, 4).setUint32(0, g), (Bt[this.uri] = f); 1541 } 1542 this.keyId = f; 1543 } 1544 return this; 1545 }), 1546 t 1547 ); 1548 })(), 1549 Kt = /\{\$([a-zA-Z0-9-_]+)\}/g; 1550 function Ht(t) { 1551 return Kt.test(t); 1552 } 1553 function Vt(t, e, r) { 1554 if (null !== t.variableList || t.hasVariableRefs) 1555 for (var i = r.length; i--; ) { 1556 var n = r[i], 1557 a = e[n]; 1558 a && (e[n] = Yt(t, a)); 1559 } 1560 } 1561 function Yt(t, e) { 1562 if (null !== t.variableList || t.hasVariableRefs) { 1563 var r = t.variableList; 1564 return e.replace(Kt, function (e) { 1565 var i = e.substring(2, e.length - 1), 1566 n = null == r ? void 0 : r[i]; 1567 return void 0 === n 1568 ? (t.playlistParsingError || 1569 (t.playlistParsingError = new Error( 1570 'Missing preceding EXT-X-DEFINE tag for Variable Reference: "' + i + '"', 1571 )), 1572 e) 1573 : n; 1574 }); 1575 } 1576 return e; 1577 } 1578 function Wt(t, e, r) { 1579 var i, 1580 n, 1581 a = t.variableList; 1582 if ((a || (t.variableList = a = {}), 'QUERYPARAM' in e)) { 1583 i = e.QUERYPARAM; 1584 try { 1585 var s = new self.URL(r).searchParams; 1586 if (!s.has(i)) throw new Error('"' + i + '" does not match any query parameter in URI: "' + r + '"'); 1587 n = s.get(i); 1588 } catch (e) { 1589 t.playlistParsingError || (t.playlistParsingError = new Error('EXT-X-DEFINE QUERYPARAM: ' + e.message)); 1590 } 1591 } else (i = e.NAME), (n = e.VALUE); 1592 i in a 1593 ? t.playlistParsingError || 1594 (t.playlistParsingError = new Error('EXT-X-DEFINE duplicate Variable Name declarations: "' + i + '"')) 1595 : (a[i] = n || ''); 1596 } 1597 function jt(t, e, r) { 1598 var i = e.IMPORT; 1599 if (r && i in r) { 1600 var n = t.variableList; 1601 n || (t.variableList = n = {}), (n[i] = r[i]); 1602 } else 1603 t.playlistParsingError || 1604 (t.playlistParsingError = new Error( 1605 'EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: "' + i + '"', 1606 )); 1607 } 1608 function qt() { 1609 if ('undefined' != typeof self) return self.MediaSource || self.WebKitMediaSource; 1610 } 1611 var Xt = { 1612 audio: { 1613 a3ds: !0, 1614 'ac-3': !0, 1615 'ac-4': !0, 1616 alac: !0, 1617 alaw: !0, 1618 dra1: !0, 1619 'dts+': !0, 1620 'dts-': !0, 1621 dtsc: !0, 1622 dtse: !0, 1623 dtsh: !0, 1624 'ec-3': !0, 1625 enca: !0, 1626 g719: !0, 1627 g726: !0, 1628 m4ae: !0, 1629 mha1: !0, 1630 mha2: !0, 1631 mhm1: !0, 1632 mhm2: !0, 1633 mlpa: !0, 1634 mp4a: !0, 1635 'raw ': !0, 1636 Opus: !0, 1637 opus: !0, 1638 samr: !0, 1639 sawb: !0, 1640 sawp: !0, 1641 sevc: !0, 1642 sqcp: !0, 1643 ssmv: !0, 1644 twos: !0, 1645 ulaw: !0, 1646 }, 1647 video: { 1648 avc1: !0, 1649 avc2: !0, 1650 avc3: !0, 1651 avc4: !0, 1652 avcp: !0, 1653 av01: !0, 1654 drac: !0, 1655 dva1: !0, 1656 dvav: !0, 1657 dvh1: !0, 1658 dvhe: !0, 1659 encv: !0, 1660 hev1: !0, 1661 hvc1: !0, 1662 mjp2: !0, 1663 mp4v: !0, 1664 mvc1: !0, 1665 mvc2: !0, 1666 mvc3: !0, 1667 mvc4: !0, 1668 resv: !0, 1669 rv60: !0, 1670 s263: !0, 1671 svc1: !0, 1672 svc2: !0, 1673 'vc-1': !0, 1674 vp08: !0, 1675 vp09: !0, 1676 }, 1677 text: { stpp: !0, wvtt: !0 }, 1678 }, 1679 zt = qt(); 1680 function Qt(t, e) { 1681 var r;
1682 return null != (r = null == zt ? void 0 : zt.isTypeSupported((e || 'video') + '/mp4;codecs="' + t + '"')) && r; 1683 } 1684 var $t = 1685 /#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, 1686 Jt = /#EXT-X-MEDIA:(.*)/g, 1687 Zt = /^#EXT(?:INF|-X-TARGETDURATION):/m, 1688 te = new RegExp( 1689 [ 1690 /#EXTINF:\s*(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source, 1691 /(?!#) *(\S[\S ]*)/.source, 1692 /#EXT-X-BYTERANGE:*(.+)/.source, 1693 /#EXT-X-PROGRAM-DATE-TIME:(.+)/.source, 1694 /#.*/.source, 1695 ].join('|'), 1696 'g', 1697 ), 1698 ee = new RegExp( 1699 [ 1700 /#(EXTM3U)/.source, 1701 /#EXT-X-(DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/ 1702 .source, 1703 /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\d+)/.source, 1704 /#EXT-X-(DISCONTINUITY|ENDLIST|GAP)/.source, 1705 /(#)([^:]*):(.*)/.source, 1706 /(#)(.*)(?:.*)\r?\n?/.source, 1707 ].join('|'), 1708 ), 1709 re = (function () { 1710 function t() {} 1711 return ( 1712 (t.findGroup = function (t, e) { 1713 for (var r = 0; r < t.length; r++) { 1714 var i = t[r]; 1715 if (i.id === e) return i; 1716 } 1717 }), 1718 (t.convertAVC1ToAVCOTI = function (t) { 1719 var e = t.split('.'); 1720 if (e.length > 2) { 1721 var r = e.shift() + '.'; 1722 return ( 1723 (r += parseInt(e.shift()).toString(16)), (r += ('000' + parseInt(e.shift()).toString(16)).slice(-4)) 1724 ); 1725 } 1726 return t; 1727 }), 1728 (t.resolve = function (t, e) { 1729 return T.buildAbsoluteURL(e, t, { alwaysNormalize: !0 }); 1730 }), 1731 (t.isMediaPlaylist = function (t) { 1732 return Zt.test(t); 1733 }), 1734 (t.parseMasterPlaylist = function (e, r) { 1735 var i, 1736 n = { 1737 contentSteering: null, 1738 levels: [], 1739 playlistParsingError: null, 1740 sessionData: null, 1741 sessionKeys: null, 1742 startTimeOffset: null, 1743 variableList: null, 1744 hasVariableRefs: Ht(e), 1745 }, 1746 a = []; 1747 for ($t.lastIndex = 0; null != (i = $t.exec(e)); ) 1748 if (i[1]) { 1749 var s, 1750 o = new P(i[1]); 1751 Vt(n, o, [ 1752 'CODECS', 1753 'SUPPLEMENTAL-CODECS', 1754 'ALLOWED-CPC', 1755 'PATHWAY-ID', 1756 'STABLE-VARIANT-ID', 1757 'AUDIO', 1758 'VIDEO', 1759 'SUBTITLES', 1760 'CLOSED-CAPTIONS', 1761 'NAME', 1762 ]); 1763 var l = Yt(n, i[2]), 1764 u = { 1765 attrs: o, 1766 bitrate: o.decimalInteger('AVERAGE-BANDWIDTH') || o.decimalInteger('BANDWIDTH'), 1767 name: o.NAME, 1768 url: t.resolve(l, r), 1769 }, 1770 h = o.decimalResolution('RESOLUTION'); 1771 h && ((u.width = h.width), (u.height = h.height)), 1772 ae( 1773 (o.CODECS || '').split(/[ ,]+/).filter(function (t) { 1774 return t; 1775 }), 1776 u, 1777 ), 1778 u.videoCodec && 1779 -1 !== u.videoCodec.indexOf('avc1') && 1780 (u.videoCodec = t.convertAVC1ToAVCOTI(u.videoCodec)), 1781 (null != (s = u.unknownCodecs) && s.length) || a.push(u), 1782 n.levels.push(u); 1783 } else if (i[3]) { 1784 var d = i[3], 1785 c = i[4]; 1786 switch (d) { 1787 case 'SESSION-DATA': 1788 var f = new P(c); 1789 Vt(n, f, ['DATA-ID', 'LANGUAGE', 'VALUE', 'URI']); 1790 var g = f['DATA-ID']; 1791 g && (null === n.sessionData && (n.sessionData = {}), (n.sessionData[g] = f)); 1792 break; 1793 case 'SESSION-KEY': 1794 var v = ie(c, r, n); 1795 v.encrypted && v.isSupported() 1796 ? (null === n.sessionKeys && (n.sessionKeys = []), n.sessionKeys.push(v)) 1797 : w.warn('[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: "' + c + '"'); 1798 break; 1799 case 'DEFINE': 1800 var m = new P(c); 1801 Vt(n, m, ['NAME', 'VALUE', 'QUERYPARAM']), Wt(n, m, r); 1802 break; 1803 case 'CONTENT-STEERING': 1804 var p = new P(c); 1805 Vt(n, p, ['SERVER-URI', 'PATHWAY-ID']), 1806 (n.contentSteering = { uri: t.resolve(p['SERVER-URI'], r), pathwayId: p['PATHWAY-ID'] || '.' }); 1807 break; 1808 case 'START': 1809 n.startTimeOffset = ne(c); 1810 } 1811 } 1812 var y = a.length > 0 && a.length < n.levels.length; 1813 return ( 1814 (n.levels = y ? a : n.levels), 1815 0 === n.levels.length && (n.playlistParsingError = new Error('no levels found in manifest')), 1816 n 1817 ); 1818 }), 1819 (t.parseMasterPlaylistMedia = function (e, r, i) { 1820 var n, 1821 a = {}, 1822 s = i.levels, 1823 o = { 1824 AUDIO: s.map(function (t) { 1825 return { id: t.attrs.AUDIO, audioCodec: t.audioCodec }; 1826 }), 1827 SUBTITLES: s.map(function (t) { 1828 return { id: t.attrs.SUBTITLES, textCodec: t.textCodec }; 1829 }), 1830 'CLOSED-CAPTIONS': [], 1831 }, 1832 l = 0; 1833 for (Jt.lastIndex = 0; null !== (n = Jt.exec(e)); ) { 1834 var u = new P(n[1]), 1835 h = u.TYPE; 1836 if (h) { 1837 var d = o[h], 1838 c = a[h] || []; 1839 (a[h] = c), 1840 Vt(i, u, [ 1841 'URI', 1842 'GROUP-ID', 1843 'LANGUAGE', 1844 'ASSOC-LANGUAGE', 1845 'STABLE-RENDITION-ID',
1846 'NAME', 1847 'INSTREAM-ID', 1848 'CHARACTERISTICS', 1849 'CHANNELS', 1850 ]); 1851 var f = { 1852 attrs: u, 1853 bitrate: 0, 1854 id: l++, 1855 groupId: u['GROUP-ID'] || '', 1856 instreamId: u['INSTREAM-ID'], 1857 name: u.NAME || u.LANGUAGE || '', 1858 type: h, 1859 default: u.bool('DEFAULT'), 1860 autoselect: u.bool('AUTOSELECT'), 1861 forced: u.bool('FORCED'), 1862 lang: u.LANGUAGE, 1863 url: u.URI ? t.resolve(u.URI, r) : '', 1864 }; 1865 if (null != d && d.length) { 1866 var g = t.findGroup(d, f.groupId) || d[0]; 1867 se(f, g, 'audioCodec'), se(f, g, 'textCodec'); 1868 } 1869 c.push(f); 1870 } 1871 } 1872 return a; 1873 }), 1874 (t.parseLevelPlaylist = function (t, e, r, i, n, a) { 1875 var s, 1876 l, 1877 u, 1878 h = new H(e), 1879 d = h.fragments, 1880 c = null, 1881 f = 0, 1882 g = 0, 1883 v = 0, 1884 m = 0, 1885 p = null, 1886 y = new G(i, e), 1887 T = -1, 1888 S = !1; 1889 for (te.lastIndex = 0, h.m3u8 = t, h.hasVariableRefs = Ht(t); null !== (s = te.exec(t)); ) { 1890 S && 1891 ((S = !1), 1892 ((y = new G(i, e)).start = v), 1893 (y.sn = f), 1894 (y.cc = m), 1895 (y.level = r), 1896 c && 1897 ((y.initSegment = c), 1898 (y.rawProgramDateTime = c.rawProgramDateTime), 1899 (c.rawProgramDateTime = null))); 1900 var L = s[1]; 1901 if (L) { 1902 y.duration = parseFloat(L); 1903 var R = (' ' + s[2]).slice(1); 1904 (y.title = R || null), y.tagList.push(R ? ['INF', L, R] : ['INF', L]); 1905 } else if (s[3]) { 1906 if (E(y.duration)) { 1907 (y.start = v), u && ue(y, u, h), (y.sn = f), (y.level = r), (y.cc = m), (y.urlId = n), d.push(y); 1908 var A = (' ' + s[3]).slice(1); 1909 (y.relurl = Yt(h, A)), oe(y, p), (p = y), (v += y.duration), f++, (g = 0), (S = !0); 1910 } 1911 } else if (s[4]) { 1912 var k = (' ' + s[4]).slice(1); 1913 p ? y.setByteRange(k, p) : y.setByteRange(k); 1914 } else if (s[5]) 1915 (y.rawProgramDateTime = (' ' + s[5]).slice(1)), 1916 y.tagList.push(['PROGRAM-DATE-TIME', y.rawProgramDateTime]), 1917 -1 === T && (T = d.length); 1918 else { 1919 if (!(s = s[0].match(ee))) { 1920 w.warn('No matches on slow regex match for level playlist!'); 1921 continue; 1922 } 1923 for (l = 1; l < s.length && void 0 === s[l]; l++); 1924 var b = (' ' + s[l]).slice(1), 1925 D = (' ' + s[l + 1]).slice(1), 1926 I = s[l + 2] ? (' ' + s[l + 2]).slice(1) : ''; 1927 switch (b) { 1928 case 'PLAYLIST-TYPE': 1929 h.type = D.toUpperCase(); 1930 break; 1931 case 'MEDIA-SEQUENCE': 1932 f = h.startSN = parseInt(D); 1933 break; 1934 case 'SKIP': 1935 var C = new P(D); 1936 Vt(h, C, ['RECENTLY-REMOVED-DATERANGES']); 1937 var _ = C.decimalInteger('SKIPPED-SEGMENTS'); 1938 if (E(_)) { 1939 h.skippedSegments = _; 1940 for (var x = _; x--; ) d.unshift(null); 1941 f += _; 1942 } 1943 var M = C.enumeratedString('RECENTLY-REMOVED-DATERANGES'); 1944 M && (h.recentlyRemovedDateranges = M.split('\t')); 1945 break; 1946 case 'TARGETDURATION': 1947 h.targetduration = Math.max(parseInt(D), 1); 1948 break; 1949 case 'VERSION': 1950 h.version = parseInt(D); 1951 break; 1952 case 'EXTM3U': 1953 break; 1954 case 'ENDLIST': 1955 h.live = !1; 1956 break; 1957 case '#': 1958 (D || I) && y.tagList.push(I ? [D, I] : [D]); 1959 break; 1960 case 'DISCONTINUITY': 1961 m++, y.tagList.push(['DIS']); 1962 break; 1963 case 'GAP': 1964 (y.gap = !0), y.tagList.push([b]); 1965 break; 1966 case 'BITRATE': 1967 y.tagList.push([b, D]); 1968 break; 1969 case 'DATERANGE': 1970 var O = new P(D);
1971 Vt(h, O, ['ID', 'CLASS', 'START-DATE', 'END-DATE', 'SCTE35-CMD', 'SCTE35-OUT', 'SCTE35-IN']), 1972 Vt(h, O, O.clientAttrs); 1973 var N = new F(O, h.dateRanges[O.ID]); 1974 N.isValid || h.skippedSegments 1975 ? (h.dateRanges[N.id] = N) 1976 : w.warn('Ignoring invalid DATERANGE tag: "' + D + '"'), 1977 y.tagList.push(['EXT-X-DATERANGE', D]); 1978 break; 1979 case 'DEFINE': 1980 var U = new P(D); 1981 Vt(h, U, ['NAME', 'VALUE', 'IMPORT', 'QUERYPARAM']), 'IMPORT' in U ? jt(h, U, a) : Wt(h, U, e); 1982 break; 1983 case 'DISCONTINUITY-SEQUENCE': 1984 m = parseInt(D); 1985 break; 1986 case 'KEY': 1987 var B = ie(D, e, h); 1988 if (B.isSupported()) { 1989 if ('NONE' === B.method) { 1990 u = void 0; 1991 break; 1992 } 1993 u || (u = {}), u[B.keyFormat] && (u = o({}, u)), (u[B.keyFormat] = B); 1994 } else w.warn('[Keys] Ignoring invalid EXT-X-KEY tag: "' + D + '"'); 1995 break; 1996 case 'START': 1997 h.startTimeOffset = ne(D); 1998 break; 1999 case 'MAP': 2000 var V = new P(D); 2001 if ((Vt(h, V, ['BYTERANGE', 'URI']), y.duration)) { 2002 var Y = new G(i, e); 2003 le(Y, V, r, u), 2004 (c = Y), 2005 (y.initSegment = c), 2006 c.rawProgramDateTime && 2007 !y.rawProgramDateTime && 2008 (y.rawProgramDateTime = c.rawProgramDateTime); 2009 } else le(y, V, r, u), (c = y), (S = !0); 2010 break; 2011 case 'SERVER-CONTROL': 2012 var W = new P(D); 2013 (h.canBlockReload = W.bool('CAN-BLOCK-RELOAD')), 2014 (h.canSkipUntil = W.optionalFloat('CAN-SKIP-UNTIL', 0)), 2015 (h.canSkipDateRanges = h.canSkipUntil > 0 && W.bool('CAN-SKIP-DATERANGES')), 2016 (h.partHoldBack = W.optionalFloat('PART-HOLD-BACK', 0)), 2017 (h.holdBack = W.optionalFloat('HOLD-BACK', 0)); 2018 break; 2019 case 'PART-INF': 2020 var j = new P(D); 2021 h.partTarget = j.decimalFloatingPoint('PART-TARGET'); 2022 break; 2023 case 'PART': 2024 var q = h.partList; 2025 q || (q = h.partList = []); 2026 var X = g > 0 ? q[q.length - 1] : void 0, 2027 z = g++, 2028 Q = new P(D); 2029 Vt(h, Q, ['BYTERANGE', 'URI']); 2030 var $ = new K(Q, y, e, z, X); 2031 q.push($), (y.duration += $.duration); 2032 break; 2033 case 'PRELOAD-HINT': 2034 var J = new P(D); 2035 Vt(h, J, ['URI']), (h.preloadHint = J); 2036 break; 2037 case 'RENDITION-REPORT': 2038 var Z = new P(D); 2039 Vt(h, Z, ['URI']), (h.renditionReports = h.renditionReports || []), h.renditionReports.push(Z); 2040 break; 2041 default: 2042 w.warn('line parsed but not handled: ' + s); 2043 } 2044 } 2045 } 2046 p && !p.relurl 2047 ? (d.pop(), (v -= p.duration), h.partList && (h.fragmentHint = p)) 2048 : h.partList && (oe(y, p), (y.cc = m), (h.fragmentHint = y), u && ue(y, u, h)); 2049 var tt = d.length, 2050 et = d[0], 2051 rt = d[tt - 1]; 2052 if ((v += h.skippedSegments * h.targetduration) > 0 && tt && rt) { 2053 h.averagetargetduration = v / tt; 2054 var it = rt.sn; 2055 (h.endSN = 'initSegment' !== it ? it : 0), h.live || (rt.endList = !0), et && (h.startCC = et.cc); 2056 } else (h.endSN = 0), (h.startCC = 0); 2057 return ( 2058 h.fragmentHint && (v += h.fragmentHint.duration), 2059 (h.totalduration = v), 2060 (h.endCC = m), 2061 T > 0 && 2062 (function (t, e) { 2063 for (var r = t[e], i = e; i--; ) { 2064 var n = t[i]; 2065 if (!n) return; 2066 (n.programDateTime = r.programDateTime - 1e3 * n.duration), (r = n); 2067 } 2068 })(d, T), 2069 h 2070 ); 2071 }), 2072 t 2073 ); 2074 })(); 2075 function ie(t, e, r) { 2076 var i, 2077 n, 2078 a = new P(t); 2079 Vt(r, a, ['KEYFORMAT', 'KEYFORMATVERSIONS', 'URI', 'IV', 'URI']); 2080 var s = null != (i = a.METHOD) ? i : '', 2081 o = a.URI, 2082 l = a.hexadecimalInteger('IV'), 2083 u = a.KEYFORMATVERSIONS, 2084 h = null != (n = a.KEYFORMAT) ? n : 'identity'; 2085 o && a.IV && !l && w.error('Invalid IV: ' + a.IV); 2086 var d = o ? re.resolve(o, e) : '', 2087 c = (u || '1').split('/').map(Number).filter(Number.isFinite); 2088 return new Gt(s, d, h, c, l); 2089 } 2090 function ne(t) { 2091 var e = new P(t).decimalFloatingPoint('TIME-OFFSET'); 2092 return E(e) ? e : null; 2093 } 2094 function ae(t, e) { 2095 ['video', 'audio', 'text'].forEach(function (r) { 2096 var i = t.filter(function (t) { 2097 return (function (t, e) { 2098 var r = Xt[e]; 2099 return !!r && !0 === r[t.slice(0, 4)]; 2100 })(t, r); 2101 }); 2102 if (i.length) { 2103 var n = i.filter(function (t) { 2104 return 0 === t.lastIndexOf('avc1', 0) || 0 === t.lastIndexOf('mp4a', 0); 2105 }); 2106 (e[r + 'Codec'] = n.length > 0 ? n[0] : i[0]), 2107 (t = t.filter(function (t) { 2108 return -1 === i.indexOf(t); 2109 })); 2110 } 2111 }), 2112 (e.unknownCodecs = t); 2113 } 2114 function se(t, e, r) { 2115 var i = e[r]; 2116 i && (t[r] = i); 2117 } 2118 function oe(t, e) { 2119 t.rawProgramDateTime
2120 ? (t.programDateTime = Date.parse(t.rawProgramDateTime)) 2121 : null != e && e.programDateTime && (t.programDateTime = e.endProgramDateTime), 2122 E(t.programDateTime) || ((t.programDateTime = null), (t.rawProgramDateTime = null)); 2123 } 2124 function le(t, e, r, i) { 2125 (t.relurl = e.URI), 2126 e.BYTERANGE && t.setByteRange(e.BYTERANGE), 2127 (t.level = r), 2128 (t.sn = 'initSegment'), 2129 i && (t.levelkeys = i), 2130 (t.initSegment = null); 2131 } 2132 function ue(t, e, r) { 2133 t.levelkeys = e; 2134 var i = r.encryptedFragments; 2135 (i.length && i[i.length - 1].levelkeys === e) || 2136 !Object.keys(e).some(function (t) { 2137 return e[t].isCommonEncryption; 2138 }) || 2139 i.push(t); 2140 } 2141 var he = 'manifest', 2142 de = 'level', 2143 ce = 'audioTrack', 2144 fe = 'subtitleTrack', 2145 ge = 'main', 2146 ve = 'audio', 2147 me = 'subtitle'; 2148 function pe(t) { 2149 switch (t.type) { 2150 case ce: 2151 return ve; 2152 case fe: 2153 return me; 2154 default: 2155 return ge; 2156 } 2157 } 2158 function ye(t, e) { 2159 var r = t.url; 2160 return (void 0 !== r && 0 !== r.indexOf('data:')) || (r = e.url), r; 2161 } 2162 var Te = (function () { 2163 function t(t) { 2164 (this.hls = void 0), 2165 (this.loaders = Object.create(null)), 2166 (this.variableList = null), 2167 (this.hls = t), 2168 this.registerListeners(); 2169 } 2170 var e = t.prototype; 2171 return ( 2172 (e.startLoad = function (t) {}), 2173 (e.stopLoad = function () { 2174 this.destroyInternalLoaders(); 2175 }), 2176 (e.registerListeners = function () { 2177 var t = this.hls; 2178 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 2179 t.on(S.LEVEL_LOADING, this.onLevelLoading, this), 2180 t.on(S.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this), 2181 t.on(S.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this); 2182 }), 2183 (e.unregisterListeners = function () { 2184 var t = this.hls; 2185 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 2186 t.off(S.LEVEL_LOADING, this.onLevelLoading, this), 2187 t.off(S.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this), 2188 t.off(S.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this); 2189 }), 2190 (e.createInternalLoader = function (t) { 2191 var e = this.hls.config, 2192 r = e.pLoader, 2193 i = e.loader, 2194 n = new (r || i)(e); 2195 return (this.loaders[t.type] = n), n; 2196 }), 2197 (e.getInternalLoader = function (t) { 2198 return this.loaders[t.type]; 2199 }), 2200 (e.resetInternalLoader = function (t) { 2201 this.loaders[t] && delete this.loaders[t]; 2202 }), 2203 (e.destroyInternalLoaders = function () { 2204 for (var t in this.loaders) { 2205 var e = this.loaders[t]; 2206 e && e.destroy(), this.resetInternalLoader(t); 2207 } 2208 }), 2209 (e.destroy = function () { 2210 (this.variableList = null), this.unregisterListeners(), this.destroyInternalLoaders(); 2211 }), 2212 (e.onManifestLoading = function (t, e) { 2213 var r = e.url; 2214 (this.variableList = null), 2215 this.load({ id: null, level: 0, responseType: 'text', type: he, url: r, deliveryDirectives: null }); 2216 }), 2217 (e.onLevelLoading = function (t, e) { 2218 var r = e.id, 2219 i = e.level, 2220 n = e.url, 2221 a = e.deliveryDirectives; 2222 this.load({ id: r, level: i, responseType: 'text', type: de, url: n, deliveryDirectives: a }); 2223 }), 2224 (e.onAudioTrackLoading = function (t, e) { 2225 var r = e.id, 2226 i = e.groupId, 2227 n = e.url, 2228 a = e.deliveryDirectives; 2229 this.load({ 2230 id: r, 2231 groupId: i, 2232 level: null, 2233 responseType: 'text', 2234 type: ce, 2235 url: n, 2236 deliveryDirectives: a, 2237 }); 2238 }), 2239 (e.onSubtitleTrackLoading = function (t, e) { 2240 var r = e.id, 2241 i = e.groupId, 2242 n = e.url, 2243 a = e.deliveryDirectives; 2244 this.load({ 2245 id: r, 2246 groupId: i, 2247 level: null, 2248 responseType: 'text', 2249 type: fe, 2250 url: n, 2251 deliveryDirectives: a, 2252 }); 2253 }), 2254 (e.load = function (t) { 2255 var e, 2256 r, 2257 i, 2258 n = this, 2259 a = this.hls.config, 2260 s = this.getInternalLoader(t); 2261 if (s) { 2262 var l = s.context; 2263 if (l && l.url === t.url) return void w.trace('[playlist-loader]: playlist request ongoing'); 2264 w.log('[playlist-loader]: aborting previous loader for type: ' + t.type), s.abort(); 2265 } 2266 if ( 2267 ((r = 2268 t.type === he 2269 ? a.manifestLoadPolicy.default 2270 : o({}, a.playlistLoadPolicy.default, { timeoutRetry: null, errorRetry: null })), 2271 (s = this.createInternalLoader(t)), 2272 null != (e = t.deliveryDirectives) && 2273 e.part && 2274 (t.type === de && null !== t.level 2275 ? (i = this.hls.levels[t.level].details) 2276 : t.type === ce && null !== t.id 2277 ? (i = this.hls.audioTracks[t.id].details) 2278 : t.type === fe && null !== t.id && (i = this.hls.subtitleTracks[t.id].details), 2279 i)) 2280 ) { 2281 var u = i.partTarget, 2282 h = i.targetduration; 2283 if (u && h) { 2284 var d = 1e3 * Math.max(3 * u, 0.8 * h); 2285 r = o({}, r, { 2286 maxTimeToFirstByteMs: Math.min(d, r.maxTimeToFirstByteMs), 2287 maxLoadTimeMs: Math.min(d, r.maxTimeToFirstByteMs), 2288 }); 2289 } 2290 } 2291 var c = r.errorRetry || r.timeoutRetry || {}, 2292 f = { 2293 loadPolicy: r, 2294 timeout: r.maxLoadTimeMs, 2295 maxRetry: c.maxNumRetry || 0, 2296 retryDelay: c.retryDelayMs || 0, 2297 maxRetryDelay: c.maxRetryDelayMs || 0, 2298 }, 2299 g = { 2300 onSuccess: function (t, e, r, i) { 2301 var a = n.getInternalLoader(r); 2302 n.resetInternalLoader(r.type); 2303 var s = t.data; 2304 0 === s.indexOf('#EXTM3U') 2305 ? ((e.parsing.start = performance.now()), 2306 re.isMediaPlaylist(s) 2307 ? n.handleTrackOrLevelPlaylist(t, e, r, i || null, a) 2308 : n.handleMasterPlaylist(t, e, r, i)) 2309 : n.handleManifestParsingError(t, r, new Error('no EXTM3U delimiter'), i || null, e); 2310 }, 2311 onError: function (t, e, r, i) { 2312 n.handleNetworkError(e, r, !1, t, i); 2313 }, 2314 onTimeout: function (t, e, r) { 2315 n.handleNetworkError(e, r, !0, void 0, t); 2316 }, 2317 }; 2318 s.load(t, f, g); 2319 }), 2320 (e.handleMasterPlaylist = function (t, e, r, i) { 2321 var n = this.hls, 2322 a = t.data, 2323 s = ye(t, r), 2324 o = re.parseMasterPlaylist(a, s); 2325 if (o.playlistParsingError) this.handleManifestParsingError(t, r, o.playlistParsingError, i, e); 2326 else { 2327 var l = o.contentSteering, 2328 u = o.levels, 2329 h = o.sessionData, 2330 d = o.sessionKeys, 2331 c = o.startTimeOffset, 2332 f = o.variableList; 2333 this.variableList = f; 2334 var g = re.parseMasterPlaylistMedia(a, s, o), 2335 v = g.AUDIO, 2336 m = void 0 === v ? [] : v, 2337 p = g.SUBTITLES, 2338 y = g['CLOSED-CAPTIONS']; 2339 m.length && 2340 (m.some(function (t) { 2341 return !t.url; 2342 }) || 2343 !u[0].audioCodec || 2344 u[0].attrs.AUDIO || 2345 (w.log( 2346 '[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one', 2347 ), 2348 m.unshift({ 2349 type: 'main', 2350 name: 'main', 2351 groupId: 'main', 2352 default: !1, 2353 autoselect: !1, 2354 forced: !1, 2355 id: -1, 2356 attrs: new P({}), 2357 bitrate: 0, 2358 url: '', 2359 }))), 2360 n.trigger(S.MANIFEST_LOADED, { 2361 levels: u, 2362 audioTracks: m, 2363 subtitles: p, 2364 captions: y, 2365 contentSteering: l, 2366 url: s, 2367 stats: e, 2368 networkDetails: i, 2369 sessionData: h, 2370 sessionKeys: d, 2371 startTimeOffset: c, 2372 variableList: f, 2373 }); 2374 } 2375 }), 2376 (e.handleTrackOrLevelPlaylist = function (t, e, r, i, n) { 2377 var a = this.hls, 2378 s = r.id, 2379 o = r.level, 2380 l = r.type, 2381 u = ye(t, r), 2382 h = E(s) ? s : 0, 2383 d = E(o) ? o : h, 2384 c = pe(r), 2385 f = re.parseLevelPlaylist(t.data, u, d, c, h, this.variableList); 2386 if (l === he) { 2387 var g = { attrs: new P({}), bitrate: 0, details: f, name: '', url: u }; 2388 a.trigger(S.MANIFEST_LOADED, { 2389 levels: [g], 2390 audioTracks: [], 2391 url: u, 2392 stats: e, 2393 networkDetails: i, 2394 sessionData: null, 2395 sessionKeys: null, 2396 contentSteering: null, 2397 startTimeOffset: null, 2398 variableList: null, 2399 }); 2400 } 2401 (e.parsing.end = performance.now()), (r.levelDetails = f), this.handlePlaylistLoaded(f, t, e, r, i, n); 2402 }), 2403 (e.handleManifestParsingError = function (t, e, r, i, n) { 2404 this.hls.trigger(S.ERROR, {
2405 type: L.NETWORK_ERROR, 2406 details: R.MANIFEST_PARSING_ERROR, 2407 fatal: e.type === he, 2408 url: t.url, 2409 err: r, 2410 error: r, 2411 reason: r.message, 2412 response: t, 2413 context: e, 2414 networkDetails: i, 2415 stats: n, 2416 }); 2417 }), 2418 (e.handleNetworkError = function (t, e, r, n, a) { 2419 void 0 === r && (r = !1); 2420 var s = 2421 'A network ' + 2422 (r ? 'timeout' : 'error' + (n ? ' (status ' + n.code + ')' : '')) + 2423 ' occurred while loading ' + 2424 t.type; 2425 t.type === de 2426 ? (s += ': ' + t.level + ' id: ' + t.id) 2427 : (t.type !== ce && t.type !== fe) || (s += ' id: ' + t.id + ' group-id: "' + t.groupId + '"'); 2428 var o = new Error(s); 2429 w.warn('[playlist-loader]: ' + s); 2430 var l = R.UNKNOWN, 2431 u = !1, 2432 h = this.getInternalLoader(t); 2433 switch (t.type) { 2434 case he: 2435 (l = r ? R.MANIFEST_LOAD_TIMEOUT : R.MANIFEST_LOAD_ERROR), (u = !0); 2436 break; 2437 case de: 2438 (l = r ? R.LEVEL_LOAD_TIMEOUT : R.LEVEL_LOAD_ERROR), (u = !1); 2439 break; 2440 case ce: 2441 (l = r ? R.AUDIO_TRACK_LOAD_TIMEOUT : R.AUDIO_TRACK_LOAD_ERROR), (u = !1); 2442 break; 2443 case fe: 2444 (l = r ? R.SUBTITLE_TRACK_LOAD_TIMEOUT : R.SUBTITLE_LOAD_ERROR), (u = !1); 2445 } 2446 h && this.resetInternalLoader(t.type); 2447 var d = { 2448 type: L.NETWORK_ERROR, 2449 details: l, 2450 fatal: u, 2451 url: t.url, 2452 loader: h, 2453 context: t, 2454 error: o, 2455 networkDetails: e, 2456 stats: a, 2457 }; 2458 if (n) { 2459 var c = (null == e ? void 0 : e.url) || t.url; 2460 d.response = i({ url: c, data: void 0 }, n); 2461 } 2462 this.hls.trigger(S.ERROR, d); 2463 }), 2464 (e.handlePlaylistLoaded = function (t, e, r, i, n, a) { 2465 var s = this.hls, 2466 o = i.type, 2467 l = i.level, 2468 u = i.id, 2469 h = i.groupId, 2470 d = i.deliveryDirectives, 2471 c = ye(e, i), 2472 f = pe(i), 2473 g = 'number' == typeof i.level && f === ge ? l : void 0; 2474 if (t.fragments.length) { 2475 t.targetduration || (t.playlistParsingError = new Error('Missing Target Duration')); 2476 var v = t.playlistParsingError; 2477 if (v) 2478 s.trigger(S.ERROR, { 2479 type: L.NETWORK_ERROR, 2480 details: R.LEVEL_PARSING_ERROR, 2481 fatal: !1, 2482 url: c, 2483 error: v, 2484 reason: v.message, 2485 response: e, 2486 context: i, 2487 level: g, 2488 parent: f, 2489 networkDetails: n, 2490 stats: r, 2491 }); 2492 else 2493 switch ( 2494 (t.live && 2495 a && 2496 (a.getCacheAge && (t.ageHeader = a.getCacheAge() || 0), 2497 (a.getCacheAge && !isNaN(t.ageHeader)) || (t.ageHeader = 0)), 2498 o) 2499 ) { 2500 case he: 2501 case de: 2502 s.trigger(S.LEVEL_LOADED, { 2503 details: t, 2504 level: g || 0, 2505 id: u || 0, 2506 stats: r, 2507 networkDetails: n, 2508 deliveryDirectives: d, 2509 }); 2510 break; 2511 case ce: 2512 s.trigger(S.AUDIO_TRACK_LOADED, { 2513 details: t, 2514 id: u || 0, 2515 groupId: h || '', 2516 stats: r, 2517 networkDetails: n, 2518 deliveryDirectives: d, 2519 }); 2520 break; 2521 case fe: 2522 s.trigger(S.SUBTITLE_TRACK_LOADED, { 2523 details: t, 2524 id: u || 0, 2525 groupId: h || '', 2526 stats: r, 2527 networkDetails: n, 2528 deliveryDirectives: d, 2529 }); 2530 } 2531 } else { 2532 var m = new Error('No Segments found in Playlist'); 2533 s.trigger(S.ERROR, {
2534 type: L.NETWORK_ERROR, 2535 details: R.LEVEL_EMPTY_ERROR, 2536 fatal: !1, 2537 url: c, 2538 error: m, 2539 reason: m.message, 2540 response: e, 2541 context: i, 2542 level: g, 2543 parent: f, 2544 networkDetails: n, 2545 stats: r, 2546 }); 2547 } 2548 }), 2549 t 2550 ); 2551 })(); 2552 function Ee(t, e) { 2553 var r; 2554 try { 2555 r = new Event('addtrack'); 2556 } catch (t) { 2557 (r = document.createEvent('Event')).initEvent('addtrack', !1, !1); 2558 } 2559 (r.track = t), e.dispatchEvent(r); 2560 } 2561 function Se(t, e) { 2562 var r = t.mode; 2563 if (('disabled' === r && (t.mode = 'hidden'), t.cues && !t.cues.getCueById(e.id))) 2564 try { 2565 if ((t.addCue(e), !t.cues.getCueById(e.id))) throw new Error('addCue is failed for: ' + e); 2566 } catch (r) { 2567 w.debug('[texttrack-utils]: ' + r); 2568 try { 2569 var i = new self.TextTrackCue(e.startTime, e.endTime, e.text); 2570 (i.id = e.id), t.addCue(i); 2571 } catch (t) { 2572 w.debug('[texttrack-utils]: Legacy TextTrackCue fallback failed: ' + t); 2573 } 2574 } 2575 'disabled' === r && (t.mode = r); 2576 } 2577 function Le(t) { 2578 var e = t.mode; 2579 if (('disabled' === e && (t.mode = 'hidden'), t.cues)) 2580 for (var r = t.cues.length; r--; ) t.removeCue(t.cues[r]); 2581 'disabled' === e && (t.mode = e); 2582 } 2583 function Re(t, e, r, i) { 2584 var n = t.mode; 2585 if (('disabled' === n && (t.mode = 'hidden'), t.cues && t.cues.length > 0)) 2586 for ( 2587 var a = (function (t, e, r) { 2588 var i = [], 2589 n = (function (t, e) { 2590 if (e < t[0].startTime) return 0; 2591 var r = t.length - 1; 2592 if (e > t[r].endTime) return -1; 2593 for (var i = 0, n = r; i <= n; ) {
2594 var a = Math.floor((n + i) / 2); 2595 if (e < t[a].startTime) n = a - 1; 2596 else { 2597 if (!(e > t[a].startTime && i < r)) return a; 2598 i = a + 1; 2599 } 2600 } 2601 return t[i].startTime - e < e - t[n].startTime ? i : n; 2602 })(t, e); 2603 if (n > -1) 2604 for (var a = n, s = t.length; a < s; a++) { 2605 var o = t[a]; 2606 if (o.startTime >= e && o.endTime <= r) i.push(o); 2607 else if (o.startTime > r) return i; 2608 } 2609 return i; 2610 })(t.cues, e, r), 2611 s = 0; 2612 s < a.length; 2613 s++ 2614 ) 2615 (i && !i(a[s])) || t.removeCue(a[s]); 2616 'disabled' === n && (t.mode = n); 2617 } 2618 var Ae = 'org.id3', 2619 ke = 'com.apple.quicktime.HLS', 2620 be = 'https://aomedia.org/emsg/ID3'; 2621 function De() { 2622 if ('undefined' != typeof self) return self.WebKitDataCue || self.VTTCue || self.TextTrackCue; 2623 } 2624 var Ie = (function () { 2625 var t = De(); 2626 try { 2627 new t(0, Number.POSITIVE_INFINITY, ''); 2628 } catch (t) { 2629 return Number.MAX_VALUE; 2630 } 2631 return Number.POSITIVE_INFINITY; 2632 })(); 2633 function we(t, e) { 2634 return t.getTime() / 1e3 - e; 2635 } 2636 var Ce = (function () { 2637 function t(t) { 2638 (this.hls = void 0), 2639 (this.id3Track = null), 2640 (this.media = null), 2641 (this.dateRangeCuesAppended = {}), 2642 (this.hls = t), 2643 this._registerListeners(); 2644 } 2645 var e = t.prototype; 2646 return ( 2647 (e.destroy = function () { 2648 this._unregisterListeners(), 2649 (this.id3Track = null), 2650 (this.media = null), 2651 (this.dateRangeCuesAppended = {}), 2652 (this.hls = null); 2653 }), 2654 (e._registerListeners = function () { 2655 var t = this.hls; 2656 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 2657 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 2658 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 2659 t.on(S.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this), 2660 t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 2661 t.on(S.LEVEL_UPDATED, this.onLevelUpdated, this); 2662 }), 2663 (e._unregisterListeners = function () { 2664 var t = this.hls; 2665 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 2666 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 2667 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 2668 t.off(S.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this), 2669 t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 2670 t.off(S.LEVEL_UPDATED, this.onLevelUpdated, this); 2671 }), 2672 (e.onMediaAttached = function (t, e) { 2673 this.media = e.media; 2674 }), 2675 (e.onMediaDetaching = function () { 2676 this.id3Track && 2677 (Le(this.id3Track), (this.id3Track = null), (this.media = null), (this.dateRangeCuesAppended = {})); 2678 }), 2679 (e.onManifestLoading = function () { 2680 this.dateRangeCuesAppended = {}; 2681 }), 2682 (e.createTrack = function (t) { 2683 var e = this.getID3Track(t.textTracks); 2684 return (e.mode = 'hidden'), e; 2685 }), 2686 (e.getID3Track = function (t) { 2687 if (this.media) { 2688 for (var e = 0; e < t.length; e++) { 2689 var r = t[e]; 2690 if ('metadata' === r.kind && 'id3' === r.label) return Ee(r, this.media), r; 2691 } 2692 return this.media.addTextTrack('metadata', 'id3'); 2693 } 2694 }), 2695 (e.onFragParsingMetadata = function (t, e) { 2696 if (this.media) { 2697 var r = this.hls.config, 2698 i = r.enableEmsgMetadataCues, 2699 n = r.enableID3MetadataCues; 2700 if (i || n) { 2701 var a = e.samples; 2702 this.id3Track || (this.id3Track = this.createTrack(this.media)); 2703 for (var s = De(), o = 0; o < a.length; o++) { 2704 var l = a[o].type; 2705 if ((l !== be || i) && n) { 2706 var u = dt(a[o].data); 2707 if (u) { 2708 var h = a[o].pts, 2709 d = h + a[o].duration; 2710 d > Ie && (d = Ie), d - h <= 0 && (d = h + 0.25); 2711 for (var c = 0; c < u.length; c++) { 2712 var f = u[c]; 2713 if (!ut(f)) { 2714 this.updateId3CueEnds(h, l); 2715 var g = new s(h, d, ''); 2716 (g.value = f), l && (g.type = l), this.id3Track.addCue(g); 2717 } 2718 } 2719 } 2720 } 2721 } 2722 } 2723 } 2724 }), 2725 (e.updateId3CueEnds = function (t, e) { 2726 var r, 2727 i = null == (r = this.id3Track) ? void 0 : r.cues; 2728 if (i) 2729 for (var n = i.length; n--; ) { 2730 var a = i[n]; 2731 a.type === e && a.startTime < t && a.endTime === Ie && (a.endTime = t); 2732 } 2733 }), 2734 (e.onBufferFlushing = function (t, e) { 2735 var r = e.startOffset, 2736 i = e.endOffset, 2737 n = e.type, 2738 a = this.id3Track, 2739 s = this.hls; 2740 if (s) { 2741 var o = s.config, 2742 l = o.enableEmsgMetadataCues, 2743 u = o.enableID3MetadataCues; 2744 a && 2745 (l || u) && 2746 Re( 2747 a, 2748 r, 2749 i, 2750 'audio' === n 2751 ? function (t) { 2752 return t.type === Ae && u; 2753 } 2754 : 'video' === n 2755 ? function (t) { 2756 return t.type === be && l; 2757 } 2758 : function (t) { 2759 return (t.type === Ae && u) || (t.type === be && l); 2760 }, 2761 ); 2762 } 2763 }), 2764 (e.onLevelUpdated = function (t, e) { 2765 var r = this, 2766 i = e.details; 2767 if (this.media && i.hasProgramDateTime && this.hls.config.enableDateRangeMetadataCues) { 2768 var n = this.dateRangeCuesAppended, 2769 a = this.id3Track, 2770 s = i.dateRanges, 2771 o = Object.keys(s); 2772 if (a) 2773 for ( 2774 var l = Object.keys(n).filter(function (t) { 2775 return !o.includes(t); 2776 }), 2777 u = function () { 2778 var t = l[h];
2779 Object.keys(n[t].cues).forEach(function (e) { 2780 a.removeCue(n[t].cues[e]); 2781 }), 2782 delete n[t]; 2783 }, 2784 h = l.length; 2785 h--; 2786 2787 ) 2788 u(); 2789 var d = i.fragments[i.fragments.length - 1]; 2790 if (0 !== o.length && E(null == d ? void 0 : d.programDateTime)) { 2791 this.id3Track || (this.id3Track = this.createTrack(this.media)); 2792 for ( 2793 var c = d.programDateTime / 1e3 - d.start, 2794 f = De(), 2795 g = function () { 2796 var t = o[v], 2797 e = s[t], 2798 i = n[t], 2799 a = (null == i ? void 0 : i.cues) || {}, 2800 l = (null == i ? void 0 : i.durationKnown) || !1, 2801 u = we(e.startDate, c), 2802 h = Ie, 2803 d = e.endDate; 2804 if (d) (h = we(d, c)), (l = !0); 2805 else if (e.endOnNext && !l) { 2806 var g = o 2807 .reduce(function (t, r) { 2808 var i = s[r]; 2809 return i.class === e.class && i.id !== r && i.startDate > e.startDate && t.push(i), t; 2810 }, []) 2811 .sort(function (t, e) { 2812 return t.startDate.getTime() - e.startDate.getTime(); 2813 })[0]; 2814 g && ((h = we(g.startDate, c)), (l = !0)); 2815 } 2816 for (var m, p, y = Object.keys(e.attr), T = 0; T < y.length; T++) { 2817 var E = y[T]; 2818 if ( 2819 'ID' !== (p = E) && 2820 'CLASS' !== p && 2821 'START-DATE' !== p && 2822 'DURATION' !== p && 2823 'END-DATE' !== p && 2824 'END-ON-NEXT' !== p 2825 ) { 2826 var S = a[E]; 2827 if (S) l && !i.durationKnown && (S.endTime = h); 2828 else { 2829 var L = e.attr[E]; 2830 (S = new f(u, h, '')), 2831 x(E) && 2832 ((m = L), 2833 (L = Uint8Array.from( 2834 m 2835 .replace(/^0x/, '') 2836 .replace(/([\da-fA-F]{2}) ?/g, '0x$1 ') 2837 .replace(/ +$/, '') 2838 .split(' '), 2839 ).buffer)), 2840 (S.value = { key: E, data: L }), 2841 (S.type = ke), 2842 (S.id = t), 2843 r.id3Track.addCue(S), 2844 (a[E] = S); 2845 } 2846 } 2847 } 2848 n[t] = { cues: a, dateRange: e, durationKnown: l }; 2849 }, 2850 v = 0; 2851 v < o.length; 2852 v++ 2853 ) 2854 g(); 2855 } 2856 } 2857 }), 2858 t 2859 ); 2860 })(), 2861 _e = (function () { 2862 function t(t) { 2863 var e = this; 2864 (this.hls = void 0), 2865 (this.config = void 0), 2866 (this.media = null), 2867 (this.levelDetails = null), 2868 (this.currentTime = 0), 2869 (this.stallCount = 0), 2870 (this._latency = null),
2871 (this.timeupdateHandler = function () { 2872 return e.timeupdate(); 2873 }), 2874 (this.hls = t), 2875 (this.config = t.config), 2876 this.registerListeners(); 2877 } 2878 var e = t.prototype; 2879 return ( 2880 (e.destroy = function () { 2881 this.unregisterListeners(), 2882 this.onMediaDetaching(), 2883 (this.levelDetails = null), 2884 (this.hls = this.timeupdateHandler = null); 2885 }), 2886 (e.registerListeners = function () { 2887 this.hls.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 2888 this.hls.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 2889 this.hls.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 2890 this.hls.on(S.LEVEL_UPDATED, this.onLevelUpdated, this), 2891 this.hls.on(S.ERROR, this.onError, this); 2892 }), 2893 (e.unregisterListeners = function () { 2894 this.hls.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 2895 this.hls.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 2896 this.hls.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 2897 this.hls.off(S.LEVEL_UPDATED, this.onLevelUpdated, this), 2898 this.hls.off(S.ERROR, this.onError, this); 2899 }), 2900 (e.onMediaAttached = function (t, e) { 2901 (this.media = e.media), this.media.addEventListener('timeupdate', this.timeupdateHandler); 2902 }), 2903 (e.onMediaDetaching = function () { 2904 this.media && (this.media.removeEventListener('timeupdate', this.timeupdateHandler), (this.media = null)); 2905 }), 2906 (e.onManifestLoading = function () { 2907 (this.levelDetails = null), (this._latency = null), (this.stallCount = 0); 2908 }), 2909 (e.onLevelUpdated = function (t, e) { 2910 var r = e.details; 2911 (this.levelDetails = r), 2912 r.advanced && this.timeupdate(), 2913 !r.live && this.media && this.media.removeEventListener('timeupdate', this.timeupdateHandler); 2914 }), 2915 (e.onError = function (t, e) { 2916 var r; 2917 e.details === R.BUFFER_STALLED_ERROR && 2918 (this.stallCount++, 2919 null != (r = this.levelDetails) && 2920 r.live && 2921 w.warn('[playback-rate-controller]: Stall detected, adjusting target latency')); 2922 }), 2923 (e.timeupdate = function () { 2924 var t = this.media, 2925 e = this.levelDetails; 2926 if (t && e) { 2927 this.currentTime = t.currentTime; 2928 var r = this.computeLatency(); 2929 if (null !== r) { 2930 this._latency = r; 2931 var i = this.config, 2932 n = i.lowLatencyMode, 2933 a = i.maxLiveSyncPlaybackRate; 2934 if (n && 1 !== a) { 2935 var s = this.targetLatency; 2936 if (null !== s) { 2937 var o = r - s, 2938 l = o < Math.min(this.maxLatency, s + e.targetduration); 2939 if (e.live && l && o > 0.05 && this.forwardBufferLength > 1) { 2940 var u = Math.min(2, Math.max(1, a)), 2941 h = Math.round((2 / (1 + Math.exp(-0.75 * o - this.edgeStalled))) * 20) / 20; 2942 t.playbackRate = Math.min(u, Math.max(1, h)); 2943 } else 1 !== t.playbackRate && 0 !== t.playbackRate && (t.playbackRate = 1); 2944 } 2945 } 2946 } 2947 } 2948 }), 2949 (e.estimateLiveEdge = function () { 2950 var t = this.levelDetails; 2951 return null === t ? null : t.edge + t.age; 2952 }), 2953 (e.computeLatency = function () { 2954 var t = this.estimateLiveEdge(); 2955 return null === t ? null : t - this.currentTime; 2956 }), 2957 a(t, [ 2958 { 2959 key: 'latency', 2960 get: function () { 2961 return this._latency || 0; 2962 }, 2963 }, 2964 { 2965 key: 'maxLatency', 2966 get: function () { 2967 var t = this.config, 2968 e = this.levelDetails; 2969 return void 0 !== t.liveMaxLatencyDuration 2970 ? t.liveMaxLatencyDuration 2971 : e 2972 ? t.liveMaxLatencyDurationCount * e.targetduration 2973 : 0; 2974 }, 2975 }, 2976 { 2977 key: 'targetLatency', 2978 get: function () { 2979 var t = this.levelDetails; 2980 if (null === t) return null; 2981 var e = t.holdBack, 2982 r = t.partHoldBack, 2983 i = t.targetduration, 2984 n = this.config, 2985 a = n.liveSyncDuration, 2986 s = n.liveSyncDurationCount, 2987 o = n.lowLatencyMode, 2988 l = this.hls.userConfig, 2989 u = (o && r) || e; 2990 (l.liveSyncDuration || l.liveSyncDurationCount || 0 === u) && (u = void 0 !== a ? a : s * i); 2991 var h = i; 2992 return u + Math.min(1 * this.stallCount, h); 2993 }, 2994 }, 2995 { 2996 key: 'liveSyncPosition', 2997 get: function () { 2998 var t = this.estimateLiveEdge(), 2999 e = this.targetLatency, 3000 r = this.levelDetails; 3001 if (null === t || null === e || null === r) return null; 3002 var i = r.edge, 3003 n = t - e - this.edgeStalled, 3004 a = i - r.totalduration,
3005 s = i - ((this.config.lowLatencyMode && r.partTarget) || r.targetduration); 3006 return Math.min(Math.max(a, n), s); 3007 }, 3008 }, 3009 { 3010 key: 'drift', 3011 get: function () { 3012 var t = this.levelDetails; 3013 return null === t ? 1 : t.drift; 3014 }, 3015 }, 3016 { 3017 key: 'edgeStalled', 3018 get: function () { 3019 var t = this.levelDetails; 3020 if (null === t) return 0; 3021 var e = 3 * ((this.config.lowLatencyMode && t.partTarget) || t.targetduration); 3022 return Math.max(t.age - e, 0); 3023 }, 3024 }, 3025 { 3026 key: 'forwardBufferLength', 3027 get: function () { 3028 var t = this.media, 3029 e = this.levelDetails; 3030 if (!t || !e) return 0; 3031 var r = t.buffered.length; 3032 return (r ? t.buffered.end(r - 1) : e.edge) - this.currentTime; 3033 }, 3034 }, 3035 ]), 3036 t 3037 ); 3038 })(), 3039 Pe = ['NONE', 'TYPE-0', 'TYPE-1', null], 3040 xe = '', 3041 Fe = 'YES', 3042 Me = 'v2', 3043 Oe = (function () { 3044 function t(t, e, r) { 3045 (this.msn = void 0), 3046 (this.part = void 0), 3047 (this.skip = void 0), 3048 (this.msn = t), 3049 (this.part = e), 3050 (this.skip = r); 3051 } 3052 return ( 3053 (t.prototype.addDirectives = function (t) { 3054 var e = new self.URL(t); 3055 return ( 3056 void 0 !== this.msn && e.searchParams.set('_HLS_msn', this.msn.toString()), 3057 void 0 !== this.part && e.searchParams.set('_HLS_part', this.part.toString()), 3058 this.skip && e.searchParams.set('_HLS_skip', this.skip), 3059 e.href 3060 ); 3061 }), 3062 t 3063 ); 3064 })(), 3065 Ne = (function () { 3066 function t(t) { 3067 (this._attrs = void 0), 3068 (this.audioCodec = void 0), 3069 (this.bitrate = void 0), 3070 (this.codecSet = void 0), 3071 (this.height = void 0), 3072 (this.id = void 0), 3073 (this.name = void 0), 3074 (this.videoCodec = void 0), 3075 (this.width = void 0), 3076 (this.unknownCodecs = void 0), 3077 (this.audioGroupIds = void 0), 3078 (this.details = void 0), 3079 (this.fragmentError = 0), 3080 (this.loadError = 0), 3081 (this.loaded = void 0), 3082 (this.realBitrate = 0), 3083 (this.textGroupIds = void 0), 3084 (this.url = void 0), 3085 (this._urlId = 0), 3086 (this.url = [t.url]), 3087 (this._attrs = [t.attrs]), 3088 (this.bitrate = t.bitrate), 3089 t.details && (this.details = t.details), 3090 (this.id = t.id || 0), 3091 (this.name = t.name), 3092 (this.width = t.width || 0), 3093 (this.height = t.height || 0), 3094 (this.audioCodec = t.audioCodec), 3095 (this.videoCodec = t.videoCodec), 3096 (this.unknownCodecs = t.unknownCodecs), 3097 (this.codecSet = [t.videoCodec, t.audioCodec] 3098 .filter(function (t) { 3099 return t; 3100 }) 3101 .join(',') 3102 .replace(/\.[^.,]+/g, '')); 3103 } 3104 return ( 3105 (t.prototype.addFallback = function (t) { 3106 this.url.push(t.url), this._attrs.push(t.attrs); 3107 }), 3108 a(t, [ 3109 { 3110 key: 'maxBitrate', 3111 get: function () { 3112 return Math.max(this.realBitrate, this.bitrate); 3113 }, 3114 }, 3115 { 3116 key: 'attrs', 3117 get: function () { 3118 return this._attrs[this._urlId]; 3119 }, 3120 }, 3121 { 3122 key: 'pathwayId', 3123 get: function () { 3124 return this.attrs['PATHWAY-ID'] || '.'; 3125 }, 3126 }, 3127 { 3128 key: 'uri', 3129 get: function () { 3130 return this.url[this._urlId] || ''; 3131 }, 3132 }, 3133 { 3134 key: 'urlId', 3135 get: function () { 3136 return this._urlId; 3137 }, 3138 set: function (t) { 3139 var e = t % this.url.length; 3140 this._urlId !== e && 3141 ((this.fragmentError = 0), (this.loadError = 0), (this.details = void 0), (this._urlId = e)); 3142 }, 3143 }, 3144 { 3145 key: 'audioGroupId', 3146 get: function () { 3147 var t; 3148 return null == (t = this.audioGroupIds) ? void 0 : t[this.urlId]; 3149 }, 3150 }, 3151 { 3152 key: 'textGroupId', 3153 get: function () { 3154 var t; 3155 return null == (t = this.textGroupIds) ? void 0 : t[this.urlId]; 3156 }, 3157 }, 3158 ]), 3159 t 3160 ); 3161 })(); 3162 function Ue(t, e) { 3163 var r = e.startPTS; 3164 if (E(r)) { 3165 var i, 3166 n = 0; 3167 e.sn > t.sn ? ((n = r - t.start), (i = t)) : ((n = t.start - r), (i = e)), 3168 i.duration !== n && (i.duration = n); 3169 } else 3170 e.sn > t.sn 3171 ? t.cc === e.cc && t.minEndPTS 3172 ? (e.start = t.start + (t.minEndPTS - t.start)) 3173 : (e.start = t.start + t.duration) 3174 : (e.start = Math.max(t.start - e.duration, 0)); 3175 } 3176 function Be(t, e, r, i, n, a) { 3177 i - r <= 0 && 3178 (w.warn('Fragment should have a positive duration', e), (i = r + e.duration), (a = n + e.duration)); 3179 var s = r, 3180 o = i, 3181 l = e.startPTS, 3182 u = e.endPTS; 3183 if (E(l)) { 3184 var h = Math.abs(l - r); 3185 E(e.deltaPTS) ? (e.deltaPTS = Math.max(h, e.deltaPTS)) : (e.deltaPTS = h), 3186 (s = Math.max(r, l)), 3187 (r = Math.min(r, l)), 3188 (n = Math.min(n, e.startDTS)), 3189 (o = Math.min(i, u)), 3190 (i = Math.max(i, u)), 3191 (a = Math.max(a, e.endDTS)); 3192 } 3193 var d = r - e.start; 3194 0 !== e.start && (e.start = r), 3195 (e.duration = i - e.start), 3196 (e.startPTS = r), 3197 (e.maxStartPTS = s), 3198 (e.startDTS = n), 3199 (e.endPTS = i), 3200 (e.minEndPTS = o), 3201 (e.endDTS = a); 3202 var c, 3203 f = e.sn; 3204 if (!t || f < t.startSN || f > t.endSN) return 0; 3205 var g = f - t.startSN, 3206 v = t.fragments; 3207 for (v[g] = e, c = g; c > 0; c--) Ue(v[c], v[c - 1]); 3208 for (c = g; c < v.length - 1; c++) Ue(v[c], v[c + 1]); 3209 return t.fragmentHint && Ue(v[v.length - 1], t.fragmentHint), (t.PTSKnown = t.alignedSliding = !0), d; 3210 } 3211 function Ge(t, e) { 3212 for (var r = null, i = t.fragments, n = i.length - 1; n >= 0; n--) { 3213 var a = i[n].initSegment; 3214 if (a) { 3215 r = a; 3216 break; 3217 } 3218 } 3219 t.fragmentHint && delete t.fragmentHint.endPTS; 3220 var s, 3221 l, 3222 u, 3223 h, 3224 d, 3225 c = 0; 3226 if ( 3227 ((function (t, e, r) { 3228 for ( 3229 var i = e.skippedSegments, 3230 n = Math.max(t.startSN, e.startSN) - e.startSN, 3231 a = (t.fragmentHint ? 1 : 0) + (i ? e.endSN : Math.min(t.endSN, e.endSN)) - e.startSN, 3232 s = e.startSN - t.startSN, 3233 o = e.fragmentHint ? e.fragments.concat(e.fragmentHint) : e.fragments, 3234 l = t.fragmentHint ? t.fragments.concat(t.fragmentHint) : t.fragments, 3235 u = n; 3236 u <= a; 3237 u++ 3238 ) { 3239 var h = l[s + u], 3240 d = o[u]; 3241 i && !d && u < i && (d = e.fragments[u] = h), h && d && r(h, d); 3242 } 3243 })(t, e, function (t, i) { 3244 t.relurl && (c = t.cc - i.cc), 3245 E(t.startPTS) && 3246 E(t.endPTS) && 3247 ((i.start = i.startPTS = t.startPTS), 3248 (i.startDTS = t.startDTS), 3249 (i.maxStartPTS = t.maxStartPTS), 3250 (i.endPTS = t.endPTS), 3251 (i.endDTS = t.endDTS), 3252 (i.minEndPTS = t.minEndPTS), 3253 (i.duration = t.endPTS - t.startPTS), 3254 i.duration && (s = i), 3255 (e.PTSKnown = e.alignedSliding = !0)), 3256 (i.elementaryStreams = t.elementaryStreams), 3257 (i.loader = t.loader), 3258 (i.stats = t.stats), 3259 (i.urlId = t.urlId), 3260 t.initSegment && ((i.initSegment = t.initSegment), (r = t.initSegment)); 3261 }), 3262 r && 3263 (e.fragmentHint ? e.fragments.concat(e.fragmentHint) : e.fragments).forEac
3263h(function (t) { 3264 var e; 3265 (t.initSegment && t.initSegment.relurl !== (null == (e = r) ? void 0 : e.relurl)) || (t.initSegment = r); 3266 }), 3267 e.skippedSegments) 3268 ) 3269 if ( 3270 ((e.deltaUpdateFailed = e.fragments.some(function (t) { 3271 return !t; 3272 })), 3273 e.deltaUpdateFailed) 3274 ) { 3275 w.warn('[level-helper] Previous playlist missing segments skipped in delta playlist'); 3276 for (var f = e.skippedSegments; f--; ) e.fragments.shift(); 3277 (e.startSN = e.fragments[0].sn), (e.startCC = e.fragments[0].cc); 3278 } else 3279 e.canSkipDateRanges && 3280 (e.dateRanges = 3281 ((l = t.dateRanges), 3282 (u = e.dateRanges), 3283 (h = e.recentlyRemovedDateranges), 3284 (d = o({}, l)), 3285 h && 3286 h.forEach(function (t) { 3287 delete d[t]; 3288 }), 3289 Object.keys(u).forEach(function (t) { 3290 var e = new F(u[t].attr, d[t]); 3291 e.isValid 3292 ? (d[t] = e) 3293 : w.warn( 3294 'Ignoring invalid Playlist Delta Update DATERANGE tag: "' + JSON.stringify(u[t].attr) + '"', 3295 ); 3296 }), 3297 d)); 3298 var g = e.fragments; 3299 if (c) { 3300 w.warn('discontinuity sliding from playlist, take drift into account'); 3301 for (var v = 0; v < g.length; v++) g[v].cc += c; 3302 } 3303 e.skippedSegments && (e.startCC = e.fragments[0].cc), 3304 (function (t, e, r) { 3305 if (t && e) 3306 for (var i = 0, n = 0, a = t.length; n <= a; n++) { 3307 var s = t[n], 3308 o = e[n + i]; 3309 s && o && s.index === o.index && s.fragment.sn === o.fragment.sn ? r(s, o) : i--; 3310 } 3311 })(t.partList, e.partList, function (t, e) { 3312 (e.elementaryStreams = t.elementaryStreams), (e.stats = t.stats); 3313 }), 3314 s ? Be(e, s, s.startPTS, s.endPTS, s.startDTS, s.endDTS) : Ke(t, e), 3315 g.length && (e.totalduration = e.edge - g[0].start), 3316 (e.driftStartTime = t.driftStartTime), 3317 (e.driftStart = t.driftStart); 3318 var m = e.advancedDateTime; 3319 if (e.advanced && m) { 3320 var p = e.edge; 3321 e.driftStart || ((e.driftStartTime = m), (e.driftStart = p)), (e.driftEndTime = m), (e.driftEnd = p); 3322 } else (e.driftEndTime = t.driftEndTime), (e.driftEnd = t.driftEnd), (e.advancedDateTime = t.advancedDateTime); 3323 } 3324 function Ke(t, e) { 3325 var r = e.startSN + e.skippedSegments - t.startSN, 3326 i = t.fragments; 3327 r < 0 || r >= i.length || He(e, i[r].start); 3328 } 3329 function He(t, e) { 3330 if (e) { 3331 for (var r = t.fragments, i = t.skippedSegments; i < r.length; i++) r[i].start += e; 3332 t.fragmentHint && (t.fragmentHint.start += e); 3333 } 3334 } 3335 function Ve(t, e, r) { 3336 var i; 3337 return null != t && t.details ? Ye(null == (i = t.details) ? void 0 : i.partList, e, r) : null; 3338 } 3339 function Ye(t, e, r) { 3340 if (t) 3341 for (var i = t.length; i--; ) { 3342 var n = t[i]; 3343 if (n.index === r && n.fragment.sn === e) return n; 3344 } 3345 return null; 3346 } 3347 function We(t) { 3348 switch (t.details) { 3349 case R.FRAG_LOAD_TIMEOUT: 3350 case R.KEY_LOAD_TIMEOUT: 3351 case R.LEVEL_LOAD_TIMEOUT: 3352 case R.MANIFEST_LOAD_TIMEOUT: 3353 return !0; 3354 } 3355 return !1; 3356 } 3357 function je(t, e) { 3358 var r = We(e); 3359 return t.default[(r ? 'timeout' : 'error') + 'Retry']; 3360 } 3361 function qe(t, e) { 3362 var r = 'linear' === t.backoff ? 1 : Math.pow(2, e); 3363 return Math.min(r * t.retryDelayMs, t.maxRetryDelayMs); 3364 } 3365 function Xe(t) { 3366 return i(i({}, t), { errorRetry: null, timeoutRetry: null }); 3367 } 3368 function ze(t, e, r, i) { 3369 return ( 3370 !!t && 3371 e < t.maxNumRetry && 3372 ((function (t) { 3373 return (0 === t && !1 === navigator.onLine) || (!!t && (t < 400 || t > 499)); 3374 })(i) || 3375 !!r) 3376 ); 3377 } 3378 var Qe = function (t, e) { 3379 for (var r = 0, i = t.length - 1, n = null, a = null; r <= i; ) { 3380 var s = e((a = t[(n = ((r + i) / 2) | 0)])); 3381 if (s > 0) r = n + 1; 3382 else { 3383 if (!(s < 0)) return a; 3384 i = n - 1; 3385 } 3386 } 3387 return null; 3388 }; 3389 function $e(t, e, r, i) { 3390 void 0 === r && (r = 0), void 0 === i && (i = 0); 3391 var n = null; 3392 if ( 3393 (t ? (n = e[t.sn - e[0].sn + 1] || null) : 0 === r && 0 === e[0].start && (n = e[0]), n && 0 === Je(r, i, n)) 3394 ) 3395 return n; 3396 var a = Qe(e, Je.bind(null, r, i)); 3397 return !a || (a === t && n) ? n : a; 3398 } 3399 function Je(t, e, r) { 3400 if ((void 0 === t && (t = 0), void 0 === e && (e = 0), r.start <= t && r.start + r.duration > t)) return 0; 3401 var i = Math.min(e, r.duration + (r.deltaPTS ? r.deltaPTS : 0)); 3402 return r.start + r.duration - i <= t ? 1 : r.start - i > t && r.start ? -1 : 0; 3403 } 3404 function Ze(t, e, r) { 3405 var i = 1e3 * Math.min(e, r.duration + (r.deltaPTS ? r.deltaPTS : 0)); 3406 return (r.endProgramDateTime || 0) - i > t; 3407 } 3408 var tr, 3409 er = 3e5, 3410 rr = 0, 3411 ir = 2, 3412 nr = 5, 3413 ar = 0, 3414 sr = 1, 3415 or = 2, 3416 lr = (function () { 3417 function t(t) { 3418 (this.hls = void 0), 3419 (this.playlistError = 0), 3420 (this.penalizedRenditions = {}), 3421 (this.log = void 0), 3422 (this.warn = void 0), 3423 (this.error = void 0), 3424 (this.hls = t), 3425 (this.log = w.log.bind(w, '[info]:')), 3426 (this.warn = w.warn.bind(w, '[warning]:')), 3427 (this.error = w.error.bind(w, '[error]:')), 3428 this.registerListeners(); 3429 } 3430 var e = t.prototype; 3431 return ( 3432 (e.registerListeners = function () { 3433 var t = this.hls; 3434 t.on(S.ERROR, this.onError, this), 3435 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 3436 t.on(S.LEVEL_UPDATED, this.onLevelUpdated, this); 3437 }), 3438 (e.unregisterListeners = function () { 3439 var t = this.hls; 3440 t && 3441 (t.off(S.ERROR, this.onError, this), 3442 t.off(S.ERROR, this.onErrorOut, this), 3443 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 3444 t.off(S.LEVEL_UPDATED, this.onLevelUpdated, this)); 3445 }), 3446 (e.destroy = function () { 3447 this.unregisterListeners(), (this.hls = null), (this.penalizedRenditions = {}); 3448 }), 3449 (e.startLoad = function (t) { 3450 this.playlistError = 0; 3451 }), 3452 (e.stopLoad = function () {}), 3453 (e.getVariantLevelIndex = function (t) { 3454 return (null == t ? void 0 : t.type) === ge ? t.level : this.hls.loadLevel; 3455 }), 3456 (e.onManifestLoading = function () { 3457 (this.playlistError = 0), (this.penalizedRenditions = {}); 3458 }), 3459 (e.onLevelUpdated = function () { 3460 this.playlistError = 0; 3461 }), 3462 (e.onError = function (t, e) { 3463 var r, i; 3464 if (!e.fatal) { 3465 var n = this.hls, 3466 a = e.context; 3467 switch (e.details) { 3468 case R.FRAG_LOAD_ERROR: 3469 case R.FRAG_LOAD_TIMEOUT: 3470 case R.KEY_LOAD_ERROR: 3471 case R.KEY_LOAD_TIMEOUT: 3472 return void (e.errorAction = this.getFragRetryOrSwitchAction(e)); 3473 case R.FRAG_PARSING_ERROR: 3474 if (null != (r = e.frag) && r.gap) return void (e.errorAction = { action: rr, flags: ar }); 3475 case R.FRAG_GAP: 3476 case R.FRAG_DECRYPT_ERROR: 3477 return (e.errorAction = this.getFragRetryOrSwitchAction(e)), void (e.errorAction.action = ir); 3478 case R.LEVEL_EMPTY_ERROR: 3479 case R.LEVEL_PARSING_ERROR: 3480 var s, 3481 o, 3482 l = e.parent === ge ? e.level : n.loadLevel; 3483 return void (e.details === R.LEVEL_EMPTY_ERROR && 3484 null != (s = e.context) && 3485 null != (o = s.levelDetails) && 3486 o.live 3487 ? (e.errorAction = this.getPlaylistRetryOrSwitchAction(e, l)) 3488 : ((e.levelRetry = !1), (e.errorAction = this.getLevelSwitchAction(e, l)))); 3489 case R.LEVEL_LOAD_ERROR: 3490 case R.LEVEL_LOAD_TIMEOUT: 3491 return void ( 3492 'number' == typeof (null == a ? void 0 : a.level) && 3493 (e.errorAction = this.getPlaylistRetryOrSwitchAction(e, a.level)) 3494 ); 3495 case R.AUDIO_TRACK_LOAD_ERROR: 3496 case R.AUDIO_TRACK_LOAD_TIMEOUT: 3497 case R.SUBTITLE_LOAD_ERROR: 3498 case R.SUBTITLE_TRACK_LOAD_TIMEOUT: 3499 if (a) { 3500 var u = n.levels[n.loadLevel]; 3501 if ( 3502 u && 3503 ((a.type === ce && a.groupId === u.audioGroupId) || 3504 (a.type === fe && a.groupId === u.textGroupId)) 3505 ) 3506 return ( 3507 (e.errorAction = this.getPlaylistRetryOrSwitchAction(e, n.loadLevel)), 3508 (e.errorAction.action = ir), 3509 void (e.errorAction.flags = sr) 3510 ); 3511 } 3512 return; 3513 case R.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED: 3514 var h = n.levels[n.loadLevel], 3515 d = null == h ? void 0 : h.attrs['HDCP-LEVEL']; 3516 return void (d && (e.errorAction = { action: ir, flags: or, hdcpLevel: d })); 3517 case R.BUFFER_ADD_CODEC_ERROR:
3518 case R.REMUX_ALLOC_ERROR: 3519 return void (e.errorAction = this.getLevelSwitchAction(e, null != (i = e.level) ? i : n.loadLevel)); 3520 case R.INTERNAL_EXCEPTION: 3521 case R.BUFFER_APPENDING_ERROR: 3522 case R.BUFFER_APPEND_ERROR: 3523 case R.BUFFER_FULL_ERROR: 3524 case R.LEVEL_SWITCH_ERROR: 3525 case R.BUFFER_STALLED_ERROR: 3526 case R.BUFFER_SEEK_OVER_HOLE: 3527 case R.BUFFER_NUDGE_ON_STALL: 3528 return void (e.errorAction = { action: rr, flags: ar }); 3529 } 3530 if (e.type === L.KEY_SYSTEM_ERROR) { 3531 var c = this.getVariantLevelIndex(e.frag); 3532 return (e.levelRetry = !1), void (e.errorAction = this.getLevelSwitchAction(e, c)); 3533 } 3534 } 3535 }), 3536 (e.getPlaylistRetryOrSwitchAction = function (t, e) { 3537 var r, 3538 i = je(this.hls.config.playlistLoadPolicy, t), 3539 n = this.playlistError++, 3540 a = null == (r = t.response) ? void 0 : r.code; 3541 if (ze(i, n, We(t), a)) return { action: nr, flags: ar, retryConfig: i, retryCount: n }; 3542 var s = this.getLevelSwitchAction(t, e); 3543 return i && ((s.retryConfig = i), (s.retryCount = n)), s; 3544 }), 3545 (e.getFragRetryOrSwitchAction = function (t) { 3546 var e = this.hls, 3547 r = this.getVariantLevelIndex(t.frag), 3548 i = e.levels[r], 3549 n = e.config, 3550 a = n.fragLoadPolicy, 3551 s = n.keyLoadPolicy, 3552 o = je(t.details.startsWith('key') ? s : a, t), 3553 l = e.levels.reduce(function (t, e) { 3554 return t + e.fragmentError; 3555 }, 0); 3556 if (i) { 3557 var u; 3558 t.details !== R.FRAG_GAP && i.fragmentError++; 3559 var h = null == (u = t.response) ? void 0 : u.code; 3560 if (ze(o, l, We(t), h)) return { action: nr, flags: ar, retryConfig: o, retryCount: l }; 3561 } 3562 var d = this.getLevelSwitchAction(t, r); 3563 return o && ((d.retryConfig = o), (d.retryCount = l)), d; 3564 }), 3565 (e.getLevelSwitchAction = function (t, e) { 3566 var r = this.hls; 3567 null == e && (e = r.loadLevel); 3568 var i = this.hls.levels[e]; 3569 if (i && (i.loadError++, r.autoLevelEnabled)) { 3570 for ( 3571 var n, 3572 a, 3573 s = -1, 3574 o = r.levels, 3575 l = r.loadLevel, 3576 u = r.minAutoLevel, 3577 h = r.maxAutoLevel, 3578 d = null == (n = t.frag) ? void 0 : n.type, 3579 c = null != (a = t.context) ? a : {}, 3580 f = c.type, 3581 g = c.groupId, 3582 v = o.length; 3583 v--; 3584 3585 ) { 3586 var m = (v + l) % o.length; 3587 if (m !== l && m >= u && m <= h && 0 === o[m].loadError) { 3588 var p = o[m]; 3589 if (t.details === R.FRAG_GAP && t.frag) { 3590 var y = o[m].details; 3591 if (y) { 3592 var T = $e(t.frag, y.fragments, t.frag.start); 3593 if (null != T && T.gap) continue; 3594 } 3595 } else { 3596 if ((f === ce && g === p.audioGroupId) || (f === fe && g === p.textGroupId)) continue; 3597 if ( 3598 (d === ve && i.audioGroupId === p.audioGroupId) || 3599 (d === me && i.textGroupId === p.textGroupId) 3600 ) 3601 continue; 3602 } 3603 s = m; 3604 break; 3605 } 3606 } 3607 if (s > -1 && r.loadLevel !== s) 3608 return (t.levelRetry = !0), (this.playlistError = 0), { action: ir, flags: ar, nextAutoLevel: s }; 3609 } 3610 return { action: ir, flags: sr }; 3611 }), 3612 (e.onErrorOut = function (t, e) { 3613 var r; 3614 switch (null == (r = e.errorAction) ? void 0 : r.action) { 3615 case rr: 3616 break; 3617 case ir: 3618 this.sendAlternateToPenaltyBox(e), 3619 e.errorAction.resolved || e.details === R.FRAG_GAP || (e.fatal = !0); 3620 } 3621 e.fatal && this.hls.stopLoad(); 3622 }), 3623 (e.sendAlternateToPenaltyBox = function (t) { 3624 var e = this.hls, 3625 r = t.errorAction; 3626 if (r) { 3627 var i = r.flags, 3628 n = r.hdcpLevel, 3629 a = r.nextAutoLevel; 3630 switch (i) { 3631 case ar: 3632 this.switchLevel(t, a); 3633 break; 3634 case sr: 3635 r.resolved || (r.resolved = this.redundantFailover(t)); 3636 break; 3637 case or: 3638 n && ((e.maxHdcpLevel = Pe[Pe.indexOf(n) - 1]), (r.resolved = !0)), 3639 this.warn('Restricting playback to HDCP-LEVEL of "' + e.maxHdcpLevel + '" or lower'); 3640 } 3641 r.resolved || this.switchLevel(t, a); 3642 } 3643 }), 3644 (e.switchLevel = function (t, e) { 3645 void 0 !== e && 3646 t.errorAction && 3647 (this.warn('switching to level ' + e + ' after ' + t.details), 3648 (this.hls.nextAutoLevel = e), 3649 (t.errorAction.resolved = !0), 3650 (this.hls.nextLoadLevel = this.hls.nextAutoLevel)); 3651 }), 3652 (e.redundantFailover = function (t) { 3653 var e = this, 3654 r = this.hls, 3655 i = this.penalizedRenditions, 3656 n = t.parent === ge ? t.level : r.loadLevel, 3657 a = r.levels[n], 3658 s = a.url.length, 3659 o = t.frag ? t.frag.urlId : a.urlId; 3660 a.urlId !== o || (t.frag && !a.details) || this.penalizeRendition(a, t); 3661 for ( 3662 var l = function () { 3663 var l = (o + u) % s, 3664 h = i[l]; 3665 if ( 3666 !h || 3667 (function (t, e, r) { 3668 if (performance.now() - t.lastErrorPerfMs > er) return !0; 3669 var i = t.details; 3670 if (e.details === R.FRAG_GAP && i && e.frag) { 3671 var n = e.frag.start, 3672 a = $e(null, i.fragments, n); 3673 if (a && !a.gap) return !0; 3674 } 3675 if (r && t.errors.length < r.errors.length) { 3676 var s = t.errors[t.errors.length - 1]; 3677 if (i && s.frag && e.frag && Math.abs(s.frag.start - e.frag.start) > 3 * i.targetduration) 3678 return !0; 3679 } 3680 return !1; 3681 })(h, t, i[o]) 3682 ) 3683 return (
3684 e.warn( 3685 'Switching to Redundant Stream ' + 3686 (l + 1) + 3687 '/' + 3688 s + 3689 ': "' + 3690 a.url[l] + 3691 '" after ' + 3692 t.details, 3693 ), 3694 (e.playlistError = 0), 3695 r.levels.forEach(function (t) { 3696 t.urlId = l; 3697 }), 3698 (r.nextLoadLevel = n), 3699 { v: !0 } 3700 ); 3701 }, 3702 u = 1; 3703 u < s; 3704 u++ 3705 ) { 3706 var h = l(); 3707 if ('object' == typeof h) return h.v; 3708 } 3709 return !1; 3710 }), 3711 (e.penalizeRendition = function (t, e) { 3712 var r = this.penalizedRenditions, 3713 i = r[t.urlId] || { lastErrorPerfMs: 0, errors: [], details: void 0 }; 3714 (i.lastErrorPerfMs = performance.now()), i.errors.push(e), (i.details = t.details), (r[t.urlId] = i); 3715 }), 3716 t 3717 ); 3718 })(), 3719 ur = (function () { 3720 function t(t, e) { 3721 (this.hls = void 0), 3722 (this.timer = -1), 3723 (this.requestScheduled = -1), 3724 (this.canLoad = !1), 3725 (this.log = void 0), 3726 (this.warn = void 0), 3727 (this.log = w.log.bind(w, e + ':')), 3728 (this.warn = w.warn.bind(w, e + ':')), 3729 (this.hls = t); 3730 } 3731 var e = t.prototype; 3732 return ( 3733 (e.destroy = function () { 3734 this.clearTimer(), (this.hls = this.log = this.warn = null); 3735 }), 3736 (e.clearTimer = function () { 3737 clearTimeout(this.timer), (this.timer = -1); 3738 }), 3739 (e.startLoad = function () { 3740 (this.canLoad = !0), (this.requestScheduled = -1), this.loadPlaylist(); 3741 }), 3742 (e.stopLoad = function () { 3743 (this.canLoad = !1), this.clearTimer(); 3744 }), 3745 (e.switchParams = function (t, e) { 3746 var r = null == e ? void 0 : e.renditionReports; 3747 if (r) { 3748 for (var i = -1, n = 0; n < r.length; n++) { 3749 var a = r[n], 3750 s = void 0; 3751 try { 3752 s = new self.URL(a.URI, e.url).href; 3753 } catch (t) { 3754 w.warn('Could not construct new URL for Rendition Report: ' + t), (s = a.URI || ''); 3755 } 3756 if (s === t) { 3757 i = n; 3758 break; 3759 } 3760 s === t.substring(0, s.length) && (i = n); 3761 } 3762 if (-1 !== i) { 3763 var o = r[i], 3764 l = parseInt(o['LAST-MSN']) || (null == e ? void 0 : e.lastPartSn), 3765 u = parseInt(o['LAST-PART']) || (null == e ? void 0 : e.lastPartIndex); 3766 if (this.hls.config.lowLatencyMode) { 3767 var h = Math.min(e.age - e.partTarget, e.targetduration); 3768 u >= 0 && h > e.partTarget && (u += 1); 3769 } 3770 return new Oe(l, u >= 0 ? u : void 0, xe); 3771 } 3772 } 3773 }), 3774 (e.loadPlaylist = function (t) { 3775 -1 === this.requestScheduled && (this.requestScheduled = self.performance.now()); 3776 }), 3777 (e.shouldLoadPlaylist = function (t) { 3778 return this.canLoad && !!t && !!t.url && (!t.details || t.details.live); 3779 }), 3780 (e.shouldReloadPlaylist = function (t) { 3781 return -1 === this.timer && -1 === this.requestScheduled && this.shouldLoadPlaylist(t); 3782 }), 3783 (e.playlistLoaded = function (t, e, r) { 3784 var i = this, 3785 n = e.details, 3786 a = e.stats, 3787 s = self.performance.now(), 3788 o = a.loading.first ? Math.max(0, s - a.loading.first) : 0; 3789 if (((n.advancedDateTime = Date.now() - o), n.live || (null != r && r.live))) { 3790 if ( 3791 (n.reloaded(r), 3792 r && 3793 this.log( 3794 'live playlist ' + 3795 t + 3796 ' ' + 3797 (n.advanced 3798 ? 'REFRESHED ' + n.lastPartSn + '-' + n.lastPartIndex 3799 : n.updated 3800 ? 'UPDATED' 3801 : 'MISSED'), 3802 ), 3803 r && n.fragments.length > 0 && Ge(r, n), 3804 !this.canLoad || !n.live) 3805 ) 3806 return; 3807 var l, 3808 u = void 0, 3809 h = void 0; 3810 if (n.canBlockReload && n.endSN && n.advanced) { 3811 var d = this.hls.config.lowLatencyMode, 3812 c = n.lastPartSn, 3813 f = n.endSN, 3814 g = n.lastPartIndex, 3815 v = c === f; 3816 -1 !== g ? ((u = v ? f + 1 : c), (h = v ? (d ? 0 : g) : g + 1)) : (u = f + 1); 3817 var m = n.age, 3818 p = m + n.ageHeader, 3819 y = Math.min(p - n.partTarget, 1.5 * n.targetduration); 3820 if (y > 0) { 3821 if (r && y > r.tuneInGoal) 3822 this.warn( 3823 'CDN Tune-in goal increased from: ' + 3824 r.tuneInGoal + 3825 ' to: ' + 3826 y + 3827 ' with playlist age: ' + 3828 n.age, 3829 ), 3830 (y = 0); 3831 else { 3832 var T = Math.floor(y / n.targetduration); 3833 (u += T), 3834 void 0 !== h && (h += Math.round((y % n.targetduration) / n.partTarget)), 3835 this.log( 3836 'CDN Tune-in age: ' + 3837 n.ageHeader + 3838 's last advanced ' + 3839 m.toFixed(2) + 3840 's goal: ' + 3841 y + 3842 ' skip sn ' + 3843 T + 3844 ' to part ' + 3845 h, 3846 ); 3847 } 3848 n.tuneInGoal = y; 3849 } 3850 if (((l = this.getDeliveryDirectives(n, e.deliveryDirectives, u, h)), d || !v)) 3851 return void this.loadPlaylist(l); 3852 } else 3853 (n.canBlockReload || n.canSkipUntil) && 3854 (l = this.getDeliveryDirectives(n, e.deliveryDirectives, u, h)); 3855 var E = this.hls.mainForwardBufferInfo, 3856 S = E ? E.end - E.len : 0, 3857 L = (function (t, e) { 3858 void 0 === e && (e = 1 / 0); 3859 var r = 1e3 * t.targetduration; 3860 if (t.updated) { 3861 var i = t.fragments; 3862 if (i.length && 4 * r > e) { 3863 var n = 1e3 * i[i.length - 1].duration; 3864 n < r && (r = n); 3865 } 3866 } else r /= 2; 3867 return Math.round(r); 3868 })(n, 1e3 * (n.edge - S)); 3869 n.updated && s > this.requestScheduled + L && (this.requestScheduled = a.loading.start), 3870 void 0 !== u && n.canBlockReload 3871 ? (this.requestScheduled = a.loading.first + L - (1e3 * n.partTarget || 1e3)) 3872 : -1 === this.requestScheduled || this.requestScheduled + L < s 3873 ? (this.requestScheduled = s) 3874 : this.requestScheduled - s <= 0 && (this.requestScheduled += L); 3875 var R = this.requestScheduled - s; 3876 (R = Math.max(0, R)), 3877 this.log('reload live playlist ' + t + ' in ' + Math.round(R) + ' ms'), 3878 (this.timer = self.setTimeout(function () { 3879 return i.loadPlaylist(l); 3880 }, R)); 3881 } else this.clearTimer(); 3882 }), 3883 (e.getDeliveryDirectives = function (t, e, r, i) { 3884 var n = (function (t, e) { 3885 var r = t.canSkipUntil, 3886 i = t.canSkipDateRanges, 3887 n = t.endSN; 3888 return r && (void 0 !== e ? e - n : 0) < r ? (i ? Me : Fe) : xe; 3889 })(t, r); 3890 return ( 3891 null != e && e.skip && t.deltaUpdateFailed && ((r = e.msn), (i = e.part), (n = xe)), new Oe(r, i, n) 3892 ); 3893 }), 3894 (e.checkRetry = function (t) { 3895 var e = this, 3896 r = t.details, 3897 i = We(t), 3898 n = t.errorAction, 3899 a = n || {}, 3900 s = a.action, 3901 o = a.retryCount, 3902 l = void 0 === o ? 0 : o, 3903 u = a.retryConfig, 3904 h = !!n && !!u && (s === nr || (!n.resolved && s === ir)); 3905 if (h) { 3906 var d; 3907 if (((this.requestScheduled = -1), l >= u.maxNumRetry)) return !1; 3908 if (i && null != (d = t.context) && d.deliveryDirectives) 3909 this.warn( 3910 'Retrying playlist loading ' + 3911 (l + 1) + 3912 '/' + 3913 u.maxNumRetry + 3914 ' after "' + 3915 r + 3916 '" without delivery-directives', 3917 ), 3918 this.loadPlaylist(); 3919 else { 3920 var c = qe(u, l); 3921 (this.timer = self.setTimeout(function () { 3922 return e.loadPlaylist(); 3923 }, c)), 3924 this.warn( 3925 'Retrying playlist loading ' + 3926 (l + 1) + 3927 '/' + 3928 u.maxNumRetry + 3929 ' after "' + 3930 r + 3931 '" in ' + 3932 c + 3933 'ms', 3934 ); 3935 } 3936 (t.levelRetry = !0), (n.resolved = !0); 3937 } 3938 return h; 3939 }), 3940 t 3941 ); 3942 })(), 3943 hr = (function (t) { 3944 function e(e, r) { 3945 var i; 3946 return ( 3947 ((i = t.call(this, e, '[level-controller]') || this)._levels = []), 3948 (i._firstLevel = -1), 3949 (i._startLevel = void 0), 3950 (i.currentLevel = null),
3951 (i.currentLevelIndex = -1), 3952 (i.manualLevelIndex = -1), 3953 (i.steering = void 0), 3954 (i.onParsedComplete = void 0), 3955 (i.steering = r), 3956 i._registerListeners(), 3957 i 3958 ); 3959 } 3960 l(e, t); 3961 var r = e.prototype; 3962 return ( 3963 (r._registerListeners = function () { 3964 var t = this.hls; 3965 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 3966 t.on(S.MANIFEST_LOADED, this.onManifestLoaded, this), 3967 t.on(S.LEVEL_LOADED, this.onLevelLoaded, this), 3968 t.on(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 3969 t.on(S.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this), 3970 t.on(S.FRAG_LOADED, this.onFragLoaded, this), 3971 t.on(S.ERROR, this.onError, this); 3972 }), 3973 (r._unregisterListeners = function () { 3974 var t = this.hls; 3975 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 3976 t.off(S.MANIFEST_LOADED, this.onManifestLoaded, this), 3977 t.off(S.LEVEL_LOADED, this.onLevelLoaded, this), 3978 t.off(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 3979 t.off(S.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this), 3980 t.off(S.FRAG_LOADED, this.onFragLoaded, this), 3981 t.off(S.ERROR, this.onError, this); 3982 }), 3983 (r.destroy = function () { 3984 this._unregisterListeners(), (this.steering = null), this.resetLevels(), t.prototype.destroy.call(this); 3985 }), 3986 (r.startLoad = function () { 3987 this._levels.forEach(function (t) { 3988 (t.loadError = 0), (t.fragmentError = 0); 3989 }), 3990 t.prototype.startLoad.call(this); 3991 }), 3992 (r.resetLevels = function () { 3993 (this._startLevel = void 0), 3994 (this.manualLevelIndex = -1), 3995 (this.currentLevelIndex = -1), 3996 (this.currentLevel = null), 3997 (this._levels = []); 3998 }), 3999 (r.onManifestLoading = function (t, e) { 4000 this.resetLevels(); 4001 }), 4002 (r.onManifestLoaded = function (t, e) { 4003 var r, 4004 i = [], 4005 n = {}; 4006 e.levels.forEach(function (t) { 4007 var e, 4008 a = t.attrs; 4009 -1 !== (null == (e = t.audioCodec) ? void 0 : e.indexOf('mp4a.40.34')) && 4010 (tr || (tr = /chrome|firefox/i.test(navigator.userAgent)), tr && (t.audioCodec = void 0)); 4011 var s = a.AUDIO, 4012 o = a.CODECS, 4013 l = a['FRAME-RATE'], 4014 u = a['PATHWAY-ID'], 4015 h = a.RESOLUTION, 4016 d = a.SUBTITLES, 4017 c = (u || '.') + '-' + t.bitrate + '-' + h + '-' + l + '-' + o; 4018 (r = n[c]) ? r.addFallback(t) : ((r = new Ne(t)), (n[c] = r), i.push(r)), 4019 dr(r, 'audio', s), 4020 dr(r, 'text', d); 4021 }), 4022 this.filterAndSortMediaOptions(i, e); 4023 }), 4024 (r.filterAndSortMediaOptions = function (t, e) { 4025 var r = this, 4026 i = [], 4027 n = [], 4028 a = !1, 4029 s = !1, 4030 o = !1, 4031 l = t.filter(function (t) { 4032 var e = t.audioCodec, 4033 r = t.videoCodec, 4034 i = t.width, 4035 n = t.height, 4036 l = t.unknownCodecs; 4037 return ( 4038 a || (a = !(!i || !n)), 4039 s || (s = !!r), 4040 o || (o = !!e), 4041 !(null != l && l.length) && (!e || Qt(e, 'audio')) && (!r || Qt(r, 'video')) 4042 ); 4043 }); 4044 if ( 4045 ((a || s) && 4046 o && 4047 (l = l.filter(function (t) { 4048 var e = t.videoCodec, 4049 r = t.width, 4050 i = t.height; 4051 return !!e || !(!r || !i); 4052 })), 4053 0 !== l.length) 4054 ) { 4055 e.audioTracks && 4056 cr( 4057 (i = e.audioTracks.filter(function (t) { 4058 return !t.audioCodec || Qt(t.audioCodec, 'audio'); 4059 })), 4060 ),
4061 e.subtitles && cr((n = e.subtitles)); 4062 var u = l.slice(0); 4063 l.sort(function (t, e) { 4064 return t.attrs['HDCP-LEVEL'] !== e.attrs['HDCP-LEVEL'] 4065 ? (t.attrs['HDCP-LEVEL'] || '') > (e.attrs['HDCP-LEVEL'] || '') 4066 ? 1 4067 : -1 4068 : t.bitrate !== e.bitrate 4069 ? t.bitrate - e.bitrate 4070 : t.attrs['FRAME-RATE'] !== e.attrs['FRAME-RATE'] 4071 ? t.attrs.decimalFloatingPoint('FRAME-RATE') - e.attrs.decimalFloatingPoint('FRAME-RATE') 4072 : t.attrs.SCORE !== e.attrs.SCORE 4073 ? t.attrs.decimalFloatingPoint('SCORE') - e.attrs.decimalFloatingPoint('SCORE') 4074 : a && t.height !== e.height 4075 ? t.height - e.height 4076 : 0; 4077 }); 4078 var h = u[0]; 4079 if (this.steering && (l = this.steering.filterParsedLevels(l)).length !== u.length) 4080 for (var d = 0; d < u.length; d++) 4081 if (u[d].pathwayId === l[0].pathwayId) { 4082 h = u[d]; 4083 break; 4084 } 4085 this._levels = l; 4086 for (var c = 0; c < l.length; c++) 4087 if (l[c] === h) { 4088 (this._firstLevel = c), 4089 this.log('manifest loaded, ' + l.length + ' level(s) found, first bitrate: ' + h.bitrate); 4090 break; 4091 } 4092 var f = o && !s, 4093 g = { 4094 levels: l, 4095 audioTracks: i, 4096 subtitleTracks: n, 4097 sessionData: e.sessionData, 4098 sessionKeys: e.sessionKeys, 4099 firstLevel: this._firstLevel, 4100 stats: e.stats, 4101 audio: o, 4102 video: s, 4103 altAudio: 4104 !f && 4105 i.some(function (t) { 4106 return !!t.url; 4107 }), 4108 }; 4109 this.hls.trigger(S.MANIFEST_PARSED, g), 4110 (this.hls.config.autoStartLoad || this.hls.forceStartLoad) && 4111 this.hls.startLoad(this.hls.config.startPosition); 4112 } else 4113 Promise.resolve().then(function () { 4114 if (r.hls) { 4115 var t = new Error('no level with compatible codecs found in manifest'); 4116 r.hls.trigger(S.ERROR, { 4117 type: L.MEDIA_ERROR, 4118 details: R.MANIFEST_INCOMPATIBLE_CODECS_ERROR, 4119 fatal: !0, 4120 url: e.url, 4121 error: t, 4122 reason: t.message, 4123 }); 4124 } 4125 }); 4126 }), 4127 (r.onError = function (t, e) { 4128 !e.fatal && e.context && e.context.type === de && e.context.level === this.level && this.checkRetry(e); 4129 }), 4130 (r.onFragLoaded = function (t, e) { 4131 var r = e.frag; 4132 if (void 0 !== r && r.type === ge) { 4133 var i = this._levels[r.level]; 4134 void 0 !== i && (i.loadError = 0); 4135 } 4136 }), 4137 (r.onLevelLoaded = function (t, e) { 4138 var r, 4139 i, 4140 n = e.level, 4141 a = e.details, 4142 s = this._levels[n]; 4143 if (!s) 4144 return ( 4145 this.warn('Invalid level index ' + n), 4146 void (null != (i = e.deliveryDirectives) && i.skip && (a.deltaUpdateFailed = !0)) 4147 ); 4148 n === this.currentLevelIndex 4149 ? (0 === s.fragmentError && (s.loadError = 0), this.playlistLoaded(n, e, s.details)) 4150 : null != (r = e.deliveryDirectives) && r.skip && (a.deltaUpdateFailed = !0); 4151 }), 4152 (r.onAudioTrackSwitched = function (t, e) { 4153 var r = this.currentLevel; 4154 if (r) { 4155 var i = this.hls.audioTracks[e.id].groupId; 4156 if (r.audioGroupIds && r.audioGroupId !== i) { 4157 for (var n = -1, a = 0; a < r.audioGroupIds.length; a++) 4158 if (r.audioGroupIds[a] === i) { 4159 n = a; 4160 break; 4161 }
4162 -1 !== n && n !== r.urlId && ((r.urlId = n), this.canLoad && this.startLoad()); 4163 } 4164 } 4165 }), 4166 (r.loadPlaylist = function (e) { 4167 t.prototype.loadPlaylist.call(this); 4168 var r = this.currentLevelIndex, 4169 i = this.currentLevel; 4170 if (i && this.shouldLoadPlaylist(i)) { 4171 var n = i.urlId, 4172 a = i.uri; 4173 if (e) 4174 try { 4175 a = e.addDirectives(a); 4176 } catch (t) { 4177 this.warn('Could not construct new URL with HLS Delivery Directives: ' + t); 4178 } 4179 var s = i.attrs['PATHWAY-ID']; 4180 this.log( 4181 'Loading level index ' + 4182 r + 4183 (void 0 !== (null == e ? void 0 : e.msn) ? ' at sn ' + e.msn + ' part ' + e.part : '') + 4184 ' with' + 4185 (s ? ' Pathway ' + s : '') + 4186 ' URI ' + 4187 (n + 1) + 4188 '/' + 4189 i.url.length + 4190 ' ' + 4191 a, 4192 ), 4193 this.clearTimer(), 4194 this.hls.trigger(S.LEVEL_LOADING, { url: a, level: r, id: n, deliveryDirectives: e || null }); 4195 } 4196 }), 4197 (r.removeLevel = function (t, e) { 4198 var r = this, 4199 i = function (t, r) { 4200 return r !== e; 4201 }, 4202 n = this._levels.filter(function (n, a) { 4203 return ( 4204 a !== t || 4205 (n.url.length > 1 && void 0 !== e 4206 ? ((n.url = n.url.filter(i)), 4207 n.audioGroupIds && (n.audioGroupIds = n.audioGroupIds.filter(i)), 4208 n.textGroupIds && (n.textGroupIds = n.textGroupIds.filter(i)), 4209 (n.urlId = 0), 4210 !0) 4211 : (r.steering && r.steering.removeLevel(n), !1)) 4212 ); 4213 }); 4214 this.hls.trigger(S.LEVELS_UPDATED, { levels: n }); 4215 }), 4216 (r.onLevelsUpdated = function (t, e) { 4217 var r = e.levels; 4218 r.forEach(function (t, e) { 4219 var r = t.details; 4220 null != r && 4221 r.fragments && 4222 r.fragments.forEach(function (t) { 4223 t.level = e; 4224 }); 4225 }), 4226 (this._levels = r); 4227 }), 4228 a(e, [ 4229 { 4230 key: 'levels', 4231 get: function () { 4232 return 0 === this._levels.length ? null : this._levels; 4233 }, 4234 }, 4235 { 4236 key: 'level', 4237 get: function () { 4238 return this.currentLevelIndex; 4239 }, 4240 set: function (t) { 4241 var e = this._levels; 4242 if (0 !== e.length) { 4243 if (t < 0 || t >= e.length) { 4244 var r = new Error('invalid level idx'), 4245 i = t < 0; 4246 if ( 4247 (this.hls.trigger(S.ERROR, { 4248 type: L.OTHER_ERROR, 4249 details: R.LEVEL_SWITCH_ERROR, 4250 level: t, 4251 fatal: i, 4252 error: r, 4253 reason: r.message, 4254 }), 4255 i) 4256 ) 4257 return; 4258 t = Math.min(t, e.length - 1); 4259 } 4260 var n = this.currentLevelIndex, 4261 a = this.currentLevel, 4262 s = a ? a.attrs['PATHWAY-ID'] : void 0, 4263 l = e[t], 4264 u = l.attrs['PATHWAY-ID']; 4265 if ( 4266 ((this.currentLevelIndex = t), (this.currentLevel = l), n !== t || !l.details || !a || s !== u) 4267 ) { 4268 this.log( 4269 'Switching to level ' + 4270 t + 4271 (u ? ' with Pathway ' + u : '') + 4272 ' from level ' + 4273 n + 4274 (s ? ' with Pathway ' + s : ''), 4275 ); 4276 var h = o({}, l, { 4277 level: t, 4278 maxBitrate: l.maxBitrate, 4279 attrs: l.attrs, 4280 uri: l.uri, 4281 urlId: l.urlId, 4282 }); 4283 delete h._attrs, delete h._urlId, this.hls.trigger(S.LEVEL_SWITCHING, h); 4284 var d = l.details; 4285 if (!d || d.live) { 4286 var c = this.switchParams(l.uri, null == a ? void 0 : a.details); 4287 this.loadPlaylist(c); 4288 } 4289 } 4290 } 4291 }, 4292 }, 4293 { 4294 key: 'manualLevel', 4295 get: function () { 4296 return this.manualLevelIndex; 4297 }, 4298 set: function (t) { 4299 (this.manualLevelIndex = t), 4300 void 0 === this._startLevel && (this._startLevel = t), 4301 -1 !== t && (this.level = t); 4302 }, 4303 }, 4304 { 4305 key: 'firstLevel', 4306 get: function () { 4307 return this._firstLevel; 4308 }, 4309 set: function (t) { 4310 this._firstLevel = t; 4311 }, 4312 }, 4313 { 4314 key: 'startLevel', 4315 get: function () { 4316 if (void 0 === this._startLevel) { 4317 var t = this.hls.config.startLevel; 4318 return void 0 !== t ? t : this._firstLevel; 4319 } 4320 return this._startLevel; 4321 }, 4322 set: function (t) { 4323 this._startLevel = t; 4324 }, 4325 }, 4326 {
4327 key: 'nextLoadLevel', 4328 get: function () { 4329 return -1 !== this.manualLevelIndex ? this.manualLevelIndex : this.hls.nextAutoLevel; 4330 }, 4331 set: function (t) { 4332 (this.level = t), -1 === this.manualLevelIndex && (this.hls.nextAutoLevel = t); 4333 }, 4334 }, 4335 ]), 4336 e 4337 ); 4338 })(ur); 4339 function dr(t, e, r) { 4340 r && 4341 ('audio' === e 4342 ? (t.audioGroupIds || (t.audioGroupIds = []), (t.audioGroupIds[t.url.length - 1] = r)) 4343 : 'text' === e && (t.textGroupIds || (t.textGroupIds = []), (t.textGroupIds[t.url.length - 1] = r))); 4344 } 4345 function cr(t) { 4346 var e = {}; 4347 t.forEach(function (t) { 4348 var r = t.groupId || ''; 4349 (t.id = e[r] = e[r] || 0), e[r]++; 4350 }); 4351 } 4352 var fr = 'NOT_LOADED', 4353 gr = 'APPENDING', 4354 vr = 'PARTIAL', 4355 mr = 'OK', 4356 pr = (function () { 4357 function t(t) { 4358 (this.activePartLists = Object.create(null)), 4359 (this.endListFragments = Object.create(null)), 4360 (this.fragments = Object.create(null)), 4361 (this.timeRanges = Object.create(null)), 4362 (this.bufferPadding = 0.2), 4363 (this.hls = void 0), 4364 (this.hasGaps = !1), 4365 (this.hls = t), 4366 this._registerListeners(); 4367 } 4368 var e = t.prototype; 4369 return ( 4370 (e._registerListeners = function () { 4371 var t = this.hls; 4372 t.on(S.BUFFER_APPENDED, this.onBufferAppended, this), 4373 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this), 4374 t.on(S.FRAG_LOADED, this.onFragLoaded, this); 4375 }), 4376 (e._unregisterListeners = function () { 4377 var t = this.hls; 4378 t.off(S.BUFFER_APPENDED, this.onBufferAppended, this), 4379 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this), 4380 t.off(S.FRAG_LOADED, this.onFragLoaded, this); 4381 }), 4382 (e.destroy = function () { 4383 this._unregisterListeners(), 4384 (this.fragments = this.activePartLists = this.endListFragments = this.timeRanges = null); 4385 }), 4386 (e.getAppendedFrag = function (t, e) { 4387 var r = this.activePartLists[e]; 4388 if (r) 4389 for (var i = r.length; i--; ) { 4390 var n = r[i]; 4391 if (!n) break; 4392 var a = n.end; 4393 if (n.start <= t && null !== a && t <= a) return n; 4394 } 4395 return this.getBufferedFrag(t, e); 4396 }), 4397 (e.getBufferedFrag = function (t, e) { 4398 for (var r = this.fragments, i = Object.keys(r), n = i.length; n--; ) { 4399 var a = r[i[n]]; 4400 if ((null == a ? void 0 : a.body.type) === e && a.buffered) { 4401 var s = a.body; 4402 if (s.start <= t && t <= s.end) return s; 4403 } 4404 } 4405 return null; 4406 }), 4407 (e.detectEvictedFragments = function (t, e, r, i) { 4408 var n = this; 4409 this.timeRanges && (this.timeRanges[t] = e); 4410 var a = (null == i ? void 0 : i.fragment.sn) || -1; 4411 Object.keys(this.fragments).forEach(function (i) { 4412 var s = n.fragments[i]; 4413 if (s && !(a >= s.body.sn)) 4414 if (s.buffered || s.loaded) { 4415 var o = s.range[t]; 4416 o && 4417 o.time.some(function (t) { 4418 var r = !n.isTimeBuffered(t.startPTS, t.endPTS, e); 4419 return r && n.removeFragment(s.body), r; 4420 }); 4421 } else s.body.type === r && n.removeFragment(s.body); 4422 }); 4423 }), 4424 (e.detectPartialFragments = function (t) { 4425 var e = this, 4426 r = this.timeRanges, 4427 i = t.frag, 4428 n = t.part; 4429 if (r && 'initSegment' !== i.sn) { 4430 var a = Tr(i), 4431 s = this.fragments[a]; 4432 if (!(!s || (s.buffered && i.gap))) { 4433 var o = !i.relurl; 4434 Object.keys(r).forEach(function (t) { 4435 var a = i.elementaryStreams[t]; 4436 if (a) { 4437 var l = r[t], 4438 u = o || !0 === a.partial; 4439 s.range[t] = e.getBufferedTimes(i, n, u, l); 4440 } 4441 }), 4442 (s.loaded = null),
4443 Object.keys(s.range).length 4444 ? ((s.buffered = !0), 4445 (s.body.endList = i.endList || s.body.endList) && (this.endListFragments[s.body.type] = s), 4446 yr(s) || this.removeParts(i.sn - 1, i.type)) 4447 : this.removeFragment(s.body); 4448 } 4449 } 4450 }), 4451 (e.removeParts = function (t, e) { 4452 var r = this.activePartLists[e]; 4453 r && 4454 (this.activePartLists[e] = r.filter(function (e) { 4455 return e.fragment.sn >= t; 4456 })); 4457 }), 4458 (e.fragBuffered = function (t, e) { 4459 var r = Tr(t), 4460 i = this.fragments[r]; 4461 !i && 4462 e && 4463 ((i = this.fragments[r] = 4464 { body: t, appendedPTS: null, loaded: null, buffered: !1, range: Object.create(null) }), 4465 t.gap && (this.hasGaps = !0)), 4466 i && ((i.loaded = null), (i.buffered = !0)); 4467 }), 4468 (e.getBufferedTimes = function (t, e, r, i) { 4469 for ( 4470 var n = { time: [], partial: r }, 4471 a = t.start, 4472 s = t.end, 4473 o = t.minEndPTS || s, 4474 l = t.maxStartPTS || a, 4475 u = 0; 4476 u < i.length; 4477 u++ 4478 ) { 4479 var h = i.start(u) - this.bufferPadding, 4480 d = i.end(u) + this.bufferPadding; 4481 if (l >= h && o <= d) { 4482 n.time.push({ startPTS: Math.max(a, i.start(u)), endPTS: Math.min(s, i.end(u)) }); 4483 break; 4484 } 4485 if (a < d && s > h) 4486 (n.partial = !0), n.time.push({ startPTS: Math.max(a, i.start(u)), endPTS: Math.min(s, i.end(u)) }); 4487 else if (s <= h) break; 4488 } 4489 return n; 4490 }), 4491 (e.getPartialFragment = function (t) { 4492 var e, 4493 r, 4494 i, 4495 n = null, 4496 a = 0, 4497 s = this.bufferPadding, 4498 o = this.fragments; 4499 return ( 4500 Object.keys(o).forEach(function (l) { 4501 var u = o[l]; 4502 u && 4503 yr(u) && 4504 ((r = u.body.start - s), 4505 (i = u.body.end + s), 4506 t >= r && t <= i && ((e = Math.min(t - r, i - t)), a <= e && ((n = u.body), (a = e)))); 4507 }), 4508 n 4509 ); 4510 }), 4511 (e.isEndListAppended = function (t) { 4512 var e = this.endListFragments[t]; 4513 return void 0 !== e && (e.buffered || yr(e)); 4514 }), 4515 (e.getState = function (t) { 4516 var e = Tr(t), 4517 r = this.fragments[e]; 4518 return r ? (r.buffered ? (yr(r) ? vr : mr) : gr) : fr; 4519 }), 4520 (e.isTimeBuffered = function (t, e, r) { 4521 for (var i, n, a = 0; a < r.length; a++) { 4522 if (((i = r.start(a) - this.bufferPadding), (n = r.end(a) + this.bufferPadding), t >= i && e <= n)) 4523 return !0; 4524 if (e <= i) return !1; 4525 } 4526 return !1; 4527 }), 4528 (e.onFragLoaded = function (t, e) { 4529 var r = e.frag, 4530 i = e.part; 4531 if ('initSegment' !== r.sn && !r.bitrateTest) { 4532 var n = i ? null : e, 4533 a = Tr(r); 4534 this.fragments[a] = { body: r, appendedPTS: null, loaded: n, buffered: !1, range: Object.create(null) }; 4535 } 4536 }), 4537 (e.onBufferAppended = function (t, e) { 4538 var r = this, 4539 i = e.frag, 4540 n = e.part, 4541 a = e.timeRanges; 4542 if ('initSegment' !== i.sn) { 4543 var s = i.type; 4544 if (n) { 4545 var o = this.activePartLists[s]; 4546 o || (this.activePartLists[s] = o = []), o.push(n); 4547 } 4548 (this.timeRanges = a),
4549 Object.keys(a).forEach(function (t) { 4550 var e = a[t]; 4551 r.detectEvictedFragments(t, e, s, n); 4552 }); 4553 } 4554 }), 4555 (e.onFragBuffered = function (t, e) { 4556 this.detectPartialFragments(e); 4557 }), 4558 (e.hasFragment = function (t) { 4559 var e = Tr(t); 4560 return !!this.fragments[e]; 4561 }), 4562 (e.hasParts = function (t) { 4563 var e; 4564 return !(null == (e = this.activePartLists[t]) || !e.length); 4565 }), 4566 (e.removeFragmentsInRange = function (t, e, r, i, n) { 4567 var a = this; 4568 (i && !this.hasGaps) || 4569 Object.keys(this.fragments).forEach(function (s) { 4570 var o = a.fragments[s]; 4571 if (o) { 4572 var l = o.body; 4573 l.type !== r || 4574 (i && !l.gap) || 4575 (l.start < e && l.end > t && (o.buffered || n) && a.removeFragment(l)); 4576 } 4577 }); 4578 }), 4579 (e.removeFragment = function (t) { 4580 var e = Tr(t); 4581 (t.stats.loaded = 0), t.clearElementaryStreamInfo(); 4582 var r = this.activePartLists[t.type]; 4583 if (r) { 4584 var i = t.sn; 4585 this.activePartLists[t.type] = r.filter(function (t) { 4586 return t.fragment.sn !== i; 4587 }); 4588 } 4589 delete this.fragments[e], t.endList && delete this.endListFragments[t.type]; 4590 }), 4591 (e.removeAllFragments = function () { 4592 (this.fragments = Object.create(null)), 4593 (this.endListFragments = Object.create(null)), 4594 (this.activePartLists = Object.create(null)), 4595 (this.hasGaps = !1); 4596 }), 4597 t 4598 ); 4599 })(); 4600 function yr(t) { 4601 var e, r, i; 4602 return ( 4603 t.buffered && 4604 (t.body.gap || 4605 (null == (e = t.range.video) ? void 0 : e.partial) || 4606 (null == (r = t.range.audio) ? void 0 : r.partial) || 4607 (null == (i = t.range.audiovideo) ? void 0 : i.partial)) 4608 ); 4609 } 4610 function Tr(t) { 4611 return t.type + '_' + t.level + '_' + t.urlId + '_' + t.sn; 4612 } 4613 var Er = Math.pow(2, 17), 4614 Sr = (function () { 4615 function t(t) { 4616 (this.config = void 0), (this.loader = null), (this.partLoadTimeout = -1), (this.config = t); 4617 } 4618 var e = t.prototype; 4619 return ( 4620 (e.destroy = function () { 4621 this.loader && (this.loader.destroy(), (this.loader = null)); 4622 }), 4623 (e.abort = function () { 4624 this.loader && this.loader.abort(); 4625 }), 4626 (e.load = function (t, e) { 4627 var r = this, 4628 n = t.url; 4629 if (!n) 4630 return Promise.reject( 4631 new Ar({ 4632 type: L.NETWORK_ERROR, 4633 details: R.FRAG_LOAD_ERROR, 4634 fatal: !1, 4635 frag: t, 4636 error: new Error('Fragment does not have a ' + (n ? 'part list' : 'url')), 4637 networkDetails: null, 4638 }), 4639 ); 4640 this.abort(); 4641 var a = this.config, 4642 s = a.fLoader, 4643 o = a.loader; 4644 return new Promise(function (l, u) { 4645 if ((r.loader && r.loader.destroy(), t.gap)) { 4646 if ( 4647 t.tagList.some(function (t) { 4648 return 'GAP' === t[0]; 4649 }) 4650 ) 4651 return void u(Rr(t)); 4652 t.gap = !1; 4653 } 4654 var h = (r.loader = t.loader = s ? new s(a) : new o(a)), 4655 d = Lr(t), 4656 c = Xe(a.fragLoadPolicy.default), 4657 f = { 4658 loadPolicy: c, 4659 timeout: c.maxLoadTimeMs, 4660 maxRetry: 0, 4661 retryDelay: 0, 4662 maxRetryDelay: 0, 4663 highWaterMark: 'initSegment' === t.sn ? 1 / 0 : Er, 4664 }; 4665 (t.stats = h.stats), 4666 h.load(d, f, { 4667 onSuccess: function (e, i, n, a) { 4668 r.resetLoader(t, h); 4669 var s = e.data; 4670 n.resetIV && 4671 t.decryptdata && 4672 ((t.decryptdata.iv = new Uint8Array(s.slice(0, 16))), (s = s.slice(16))), 4673 l({ frag: t, part: null, payload: s, networkDetails: a }); 4674 }, 4675 onError: function (e, a, s, o) { 4676 r.resetLoader(t, h), 4677 u( 4678 new Ar({
4679 type: L.NETWORK_ERROR, 4680 details: R.FRAG_LOAD_ERROR, 4681 fatal: !1, 4682 frag: t, 4683 response: i({ url: n, data: void 0 }, e), 4684 error: new Error('HTTP Error ' + e.code + ' ' + e.text), 4685 networkDetails: s, 4686 stats: o, 4687 }), 4688 ); 4689 }, 4690 onAbort: function (e, i, n) { 4691 r.resetLoader(t, h), 4692 u( 4693 new Ar({ 4694 type: L.NETWORK_ERROR, 4695 details: R.INTERNAL_ABORTED, 4696 fatal: !1, 4697 frag: t, 4698 error: new Error('Aborted'), 4699 networkDetails: n, 4700 stats: e, 4701 }), 4702 ); 4703 }, 4704 onTimeout: function (e, i, n) { 4705 r.resetLoader(t, h), 4706 u( 4707 new Ar({ 4708 type: L.NETWORK_ERROR, 4709 details: R.FRAG_LOAD_TIMEOUT, 4710 fatal: !1, 4711 frag: t, 4712 error: new Error('Timeout after ' + f.timeout + 'ms'), 4713 networkDetails: n, 4714 stats: e, 4715 }), 4716 ); 4717 }, 4718 onProgress: function (r, i, n, a) { 4719 e && e({ frag: t, part: null, payload: n, networkDetails: a }); 4720 }, 4721 }); 4722 }); 4723 }), 4724 (e.loadPart = function (t, e, r) { 4725 var n = this; 4726 this.abort(); 4727 var a = this.config, 4728 s = a.fLoader, 4729 o = a.loader; 4730 return new Promise(function (l, u) { 4731 if ((n.loader && n.loader.destroy(), t.gap || e.gap)) u(Rr(t, e)); 4732 else { 4733 var h = (n.loader = t.loader = s ? new s(a) : new o(a)), 4734 d = Lr(t, e), 4735 c = Xe(a.fragLoadPolicy.default), 4736 f = { 4737 loadPolicy: c, 4738 timeout: c.maxLoadTimeMs, 4739 maxRetry: 0, 4740 retryDelay: 0, 4741 maxRetryDelay: 0, 4742 highWaterMark: Er, 4743 }; 4744 (e.stats = h.stats), 4745 h.load(d, f, { 4746 onSuccess: function (i, a, s, o) { 4747 n.resetLoader(t, h), n.updateStatsFromPart(t, e); 4748 var u = { frag: t, part: e, payload: i.data, networkDetails: o }; 4749 r(u), l(u); 4750 }, 4751 onError: function (r, a, s, o) { 4752 n.resetLoader(t, h), 4753 u( 4754 new Ar({ 4755 type: L.NETWORK_ERROR, 4756 details: R.FRAG_LOAD_ERROR, 4757 fatal: !1, 4758 frag: t, 4759 part: e, 4760 response: i({ url: d.url, data: void 0 }, r), 4761 error: new Error('HTTP Error ' + r.code + ' ' + r.text), 4762 networkDetails: s, 4763 stats: o, 4764 }), 4765 ); 4766 }, 4767 onAbort: function (r, i, a) { 4768 (t.stats.aborted = e.stats.aborted), 4769 n.resetLoader(t, h), 4770 u( 4771 new Ar({ 4772 type: L.NETWORK_ERROR, 4773 details: R.INTERNAL_ABORTED, 4774 fatal: !1, 4775 frag: t, 4776 part: e, 4777 error: new Error('Aborted'), 4778 networkDetails: a, 4779 stats: r, 4780 }), 4781 ); 4782 }, 4783 onTimeout: function (r, i, a) { 4784 n.resetLoader(t, h), 4785 u( 4786 new Ar({
4787 type: L.NETWORK_ERROR, 4788 details: R.FRAG_LOAD_TIMEOUT, 4789 fatal: !1, 4790 frag: t, 4791 part: e, 4792 error: new Error('Timeout after ' + f.timeout + 'ms'), 4793 networkDetails: a, 4794 stats: r, 4795 }), 4796 ); 4797 }, 4798 }); 4799 } 4800 }); 4801 }), 4802 (e.updateStatsFromPart = function (t, e) { 4803 var r = t.stats, 4804 i = e.stats, 4805 n = i.total; 4806 if (((r.loaded += i.loaded), n)) { 4807 var a = Math.round(t.duration / e.duration), 4808 s = Math.min(Math.round(r.loaded / n), a), 4809 o = (a - s) * Math.round(r.loaded / s); 4810 r.total = r.loaded + o; 4811 } else r.total = Math.max(r.loaded, r.total); 4812 var l = r.loading, 4813 u = i.loading; 4814 l.start ? (l.first += u.first - u.start) : ((l.start = u.start), (l.first = u.first)), (l.end = u.end); 4815 }), 4816 (e.resetLoader = function (t, e) { 4817 (t.loader = null), 4818 this.loader === e && (self.clearTimeout(this.partLoadTimeout), (this.loader = null)), 4819 e.destroy(); 4820 }), 4821 t 4822 ); 4823 })(); 4824 function Lr(t, e) { 4825 void 0 === e && (e = null); 4826 var r = e || t, 4827 i = { frag: t, part: e, responseType: 'arraybuffer', url: r.url, headers: {}, rangeStart: 0, rangeEnd: 0 }, 4828 n = r.byteRangeStartOffset, 4829 a = r.byteRangeEndOffset; 4830 if (E(n) && E(a)) { 4831 var s, 4832 o = n, 4833 l = a; 4834 if ('initSegment' === t.sn && 'AES-128' === (null == (s = t.decryptdata) ? void 0 : s.method)) { 4835 var u = a - n; 4836 u % 16 && (l = a + (16 - (u % 16))), 0 !== n && ((i.resetIV = !0), (o = n - 16)); 4837 } 4838 (i.rangeStart = o), (i.rangeEnd = l); 4839 } 4840 return i; 4841 } 4842 function Rr(t, e) { 4843 var r = new Error('GAP ' + (t.gap ? 'tag' : 'attribute') + ' found'), 4844 i = { type: L.MEDIA_ERROR, details: R.FRAG_GAP, fatal: !1, frag: t, error: r, networkDetails: null }; 4845 return e && (i.part = e), ((e || t).stats.aborted = !0), new Ar(i); 4846 } 4847 var Ar = (function (t) { 4848 function e(e) { 4849 var r; 4850 return ((r = t.call(this, e.error.message) || this).data = void 0), (r.data = e), r; 4851 } 4852 return l(e, t), e; 4853 })(f(Error)), 4854 kr = (function () { 4855 function t(t) { 4856 (this.config = void 0), (this.keyUriToKeyInfo = {}), (this.emeController = null), (this.config = t); 4857 } 4858 var e = t.prototype; 4859 return ( 4860 (e.abort = function (t) { 4861 for (var e in this.keyUriToKeyInfo) { 4862 var r = this.keyUriToKeyInfo[e].loader; 4863 if (r) { 4864 if (t && t !== r.context.frag.type) return; 4865 r.abort(); 4866 } 4867 } 4868 }), 4869 (e.detach = function () { 4870 for (var t in this.keyUriToKeyInfo) { 4871 var e = this.keyUriToKeyInfo[t]; 4872 (e.mediaKeySessionContext || e.decryptdata.isCommonEncryption) && delete this.keyUriToKeyInfo[t]; 4873 } 4874 }), 4875 (e.destroy = function () { 4876 for (var t in (this.detach(), this.keyUriToKeyInfo)) { 4877 var e = this.keyUriToKeyInfo[t].loader; 4878 e && e.destroy(); 4879 } 4880 this.keyUriToKeyInfo = {}; 4881 }), 4882 (e.createKeyLoadError = function (t, e, r, i, n) { 4883 return ( 4884 void 0 === e && (e = R.KEY_LOAD_ERROR), 4885 new Ar({ 4886 type: L.NETWORK_ERROR, 4887 details: e, 4888 fatal: !1, 4889 frag: t, 4890 response: n, 4891 error: r, 4892 networkDetails: i, 4893 }) 4894 ); 4895 }), 4896 (e.loadClear = function (t, e) { 4897 var r = this; 4898 if (this.emeController && this.config.emeEnabled) 4899 for ( 4900 var i = t.sn, 4901 n = t.cc, 4902 a = function () { 4903 var t = e[s]; 4904 if (n <= t.cc && ('initSegment' === i || 'initSegment' === t.sn || i < t.sn)) 4905 return ( 4906 r.emeController.selectKeySystemFormat(t).then(function (e) { 4907 t.setKeyFormat(e); 4908 }), 4909 'break' 4910 ); 4911 }, 4912 s = 0; 4913 s < e.length && 'break' !== a(); 4914 s++ 4915 ); 4916 }), 4917 (e.load = function (t) { 4918 var e = this; 4919 return !t.decryptdata && t.encrypted && this.emeController 4920 ? this.emeController.selectKeySystemFormat(t).then(function (r) { 4921 return e.loadInternal(t, r); 4922 }) 4923 : this.loadInternal(t); 4924 }), 4925 (e.loadInternal = function (t, e) { 4926 var r, i; 4927 e && t.setKeyFormat(e); 4928 var n = t.decryptdata; 4929 if (!n) { 4930 var a = new Error( 4931 e 4932 ? 'Expected frag.decryptdata to be defined after setting format ' + e 4933 : 'Missing decryption data on fragment in onKeyLoading', 4934 ); 4935 return Promise.reject(this.createKeyLoadError(t, R.KEY_LOAD_ERROR, a)); 4936 } 4937 var s = n.uri; 4938 if (!s) 4939 return Promise.reject( 4940 this.createKeyLoadError(t, R.KEY_LOAD_ERROR, new Error('Invalid key URI: "' + s + '"')), 4941 ); 4942 var o, 4943 l = this.keyUriToKeyInfo[s]; 4944 if (null != (r = l) && r.decryptdata.key) 4945 return (n.key = l.decryptdata.key), Promise.resolve({ frag: t, keyInfo: l }); 4946 if (null != (i = l) && i.keyLoadPromise) 4947 switch (null == (o = l.mediaKeySessionContext) ? void 0 : o.keyStatus) { 4948 case void 0: 4949 case 'status-pending': 4950 case 'usable': 4951 case 'usable-in-future': 4952 return l.keyLoadPromise.then(function (e) { 4953 return (n.key = e.keyInfo.decryptdata.key), { frag: t, keyInfo: l }; 4954 }); 4955 } 4956 switch ( 4957 ((l = this.keyUriToKeyInfo[s] = 4958 { decryptdata: n, keyLoadPromise: null, loader: null, mediaKeySessionContext: null }), 4959 n.method) 4960 ) { 4961 case 'ISO-23001-7': 4962 case 'SAMPLE-AES': 4963 case 'SAMPLE-AES-CENC': 4964 case 'SAMPLE-AES-CTR': 4965 return 'identity' === n.keyFormat ? this.loadKeyHTTP(l, t) : this.loadKeyEME(l, t); 4966 case 'AES-128': 4967 return this.loadKeyHTTP(l, t); 4968 default: 4969 return Promise.reject( 4970 this.createKeyLoadError( 4971 t, 4972 R.KEY_LOAD_ERROR, 4973 new Error('Key supplied with unsupported METHOD: "' + n.method + '"'), 4974 ), 4975 ); 4976 } 4977 }), 4978 (e.loadKeyEME = function (t, e) { 4979 var r = { frag: e, keyInfo: t }; 4980 if (this.emeController && this.config.emeEnabled) { 4981 var i = this.emeController.loadKey(r); 4982 if (i) 4983 return (t.keyLoadPromise = i.then(function (e) { 4984 return (t.mediaKeySessionContext = e), r; 4985 })).catch(function (e) { 4986 throw ((t.keyLoadPromise = null), e); 4987 }); 4988 } 4989 return Promise.resolve(r); 4990 }), 4991 (e.loadKeyHTTP = function (t, e) { 4992 var r = this, 4993 n = this.config, 4994 a = new (0, n.loader)(n); 4995 return ( 4996 (e.keyLoader = t.loader = a), 4997 (t.keyLoadPromise = new Promise(function (s, o) { 4998 var l = { keyInfo: t, frag: e, responseType: 'arraybuffer', url: t.decryptdata.uri }, 4999 u = n.keyLoadPolicy.default, 5000 h = { loadPolicy: u, timeout: u.maxLoadTimeMs, maxRetry: 0, retryDelay: 0, maxRetryDelay: 0 }, 5001 d = { 5002 onSuccess: function (t, e, i, n) { 5003 var a = i.frag, 5004 l = i.keyInfo, 5005 u = i.url; 5006 if (!a.decryptdata || l !== r.keyUriToKeyInfo[u]) 5007 return o( 5008 r.createKeyLoadError( 5009 a, 5010 R.KEY_LOAD_ERROR, 5011 new Error('after key load, decryptdata unset or changed'), 5012 n, 5013 ), 5014 ); 5015 (l.decryptdata.key = a.decryptdata.key = new Uint8Array(t.data)), 5016 (a.keyLoader = null),
5017 (l.loader = null), 5018 s({ frag: a, keyInfo: l }); 5019 }, 5020 onError: function (t, n, a, s) { 5021 r.resetLoader(n), 5022 o( 5023 r.createKeyLoadError( 5024 e, 5025 R.KEY_LOAD_ERROR, 5026 new Error('HTTP Error ' + t.code + ' loading key ' + t.text), 5027 a, 5028 i({ url: l.url, data: void 0 }, t), 5029 ), 5030 ); 5031 }, 5032 onTimeout: function (t, i, n) { 5033 r.resetLoader(i), 5034 o(r.createKeyLoadError(e, R.KEY_LOAD_TIMEOUT, new Error('key loading timed out'), n)); 5035 }, 5036 onAbort: function (t, i, n) { 5037 r.resetLoader(i), 5038 o(r.createKeyLoadError(e, R.INTERNAL_ABORTED, new Error('key loading aborted'), n)); 5039 }, 5040 }; 5041 a.load(l, h, d); 5042 })) 5043 ); 5044 }), 5045 (e.resetLoader = function (t) { 5046 var e = t.frag, 5047 r = t.keyInfo, 5048 i = t.url, 5049 n = r.loader; 5050 e.keyLoader === n && ((e.keyLoader = null), (r.loader = null)), 5051 delete this.keyUriToKeyInfo[i], 5052 n && n.destroy(); 5053 }), 5054 t 5055 ); 5056 })(), 5057 br = (function () { 5058 function t() { 5059 (this._boundTick = void 0), 5060 (this._tickTimer = null), 5061 (this._tickInterval = null), 5062 (this._tickCallCount = 0), 5063 (this._boundTick = this.tick.bind(this)); 5064 } 5065 var e = t.prototype; 5066 return ( 5067 (e.destroy = function () { 5068 this.onHandlerDestroying(), this.onHandlerDestroyed(); 5069 }), 5070 (e.onHandlerDestroying = function () { 5071 this.clearNextTick(), this.clearInterval(); 5072 }), 5073 (e.onHandlerDestroyed = function () {}), 5074 (e.hasInterval = function () { 5075 return !!this._tickInterval; 5076 }), 5077 (e.hasNextTick = function () { 5078 return !!this._tickTimer; 5079 }), 5080 (e.setInterval = function (t) { 5081 return ( 5082 !this._tickInterval && 5083 ((this._tickCallCount = 0), (this._tickInterval = self.setInterval(this._boundTick, t)), !0) 5084 ); 5085 }), 5086 (e.clearInterval = function () { 5087 return !!this._tickInterval && (self.clearInterval(this._tickInterval), (this._tickInterval = null), !0); 5088 }), 5089 (e.clearNextTick = function () { 5090 return !!this._tickTimer && (self.clearTimeout(this._tickTimer), (this._tickTimer = null), !0); 5091 }), 5092 (e.tick = function () { 5093 this._tickCallCount++, 5094 1 === this._tickCallCount && 5095 (this.doTick(), this._tickCallCount > 1 && this.tickImmediate(), (this._tickCallCount = 0)); 5096 }), 5097 (e.tickImmediate = function () { 5098 this.clearNextTick(), (this._tickTimer = self.setTimeout(this._boundTick, 0)); 5099 }), 5100 (e.doTick = function () {}), 5101 t 5102 ); 5103 })(), 5104 Dr = { 5105 length: 0, 5106 start: function () { 5107 return 0; 5108 }, 5109 end: function () { 5110 return 0; 5111 }, 5112 }, 5113 Ir = (function () { 5114 function t() {} 5115 return ( 5116 (t.isBuffered = function (e, r) { 5117 try { 5118 if (e) 5119 for (var i = t.getBuffered(e), n = 0; n < i.length; n++) 5120 if (r >= i.start(n) && r <= i.end(n)) return !0; 5121 } catch (t) {} 5122 return !1; 5123 }), 5124 (t.bufferInfo = function (e, r, i) { 5125 try { 5126 if (e) { 5127 var n, 5128 a = t.getBuffered(e), 5129 s = []; 5130 for (n = 0; n < a.length; n++) s.push({ start: a.start(n), end: a.end(n) }); 5131 return this.bufferedInfo(s, r, i); 5132 } 5133 } catch (t) {} 5134 return { len: 0, start: r, end: r, nextStart: void 0 }; 5135 }), 5136 (t.bufferedInfo = function (t, e, r) { 5137 (e = Math.max(0, e)), 5138 t.sort(function (t, e) { 5139 var r = t.start - e.start; 5140 return r || e.end - t.end; 5141 }); 5142 var i = []; 5143 if (r) 5144 for (var n = 0; n < t.length; n++) { 5145 var a = i.length; 5146 if (a) { 5147 var s = i[a - 1].end; 5148 t[n].start - s < r ? t[n].end > s && (i[a - 1].end = t[n].end) : i.push(t[n]); 5149 } else i.push(t[n]); 5150 } 5151 else i = t; 5152 for (var o, l = 0, u = e, h = e, d = 0; d < i.length; d++) { 5153 var c = i[d].start, 5154 f = i[d].end; 5155 if (e + r >= c && e < f) (u = c), (l = (h = f) - e); 5156 else if (e + r < c) { 5157 o = c; 5158 break; 5159 } 5160 } 5161 return { len: l, start: u || 0, end: h || 0, nextStart: o }; 5162 }), 5163 (t.getBuffered = function (t) { 5164 try { 5165 return t.buffered; 5166 } catch (t) { 5167 return w.log('failed to get media.buffered', t), Dr; 5168 } 5169 }), 5170 t 5171 ); 5172 })(), 5173 wr = function (t, e, r, i, n, a) { 5174 void 0 === i && (i = 0), 5175 void 0 === n && (n = -1), 5176 void 0 === a && (a = !1), 5177 (this.level = void 0), 5178 (this.sn = void 0), 5179 (this.part = void 0), 5180 (this.id = void 0), 5181 (this.size = void 0), 5182 (this.partial = void 0), 5183 (this.transmuxing = { start: 0, executeStart: 0, executeEnd: 0, end: 0 }), 5184 (this.buffering = { 5185 audio: { start: 0, executeStart: 0, executeEnd: 0, end: 0 }, 5186 video: { start: 0, executeStart: 0, executeEnd: 0, end: 0 }, 5187 audiovideo: { start: 0, executeStart: 0, executeEnd: 0, end: 0 }, 5188 }), 5189 (this.level = t), 5190 (this.sn = e), 5191 (this.id = r), 5192 (this.size = i), 5193 (this.part = n), 5194 (this.partial = a); 5195 }; 5196 function Cr(t, e) { 5197 for (var r = null, i = 0, n = t.length; i < n; i++) { 5198 var a = t[i]; 5199 if (a && a.cc === e) { 5200 r = a; 5201 break; 5202 } 5203 } 5204 return r; 5205 } 5206 function _r(t, e) { 5207 if (t) { 5208 var r = t.start + e; 5209 (t.start = t.startPTS = r), (t.endPTS = r + t.duration); 5210 } 5211 } 5212 function Pr(t, e) { 5213 for (var r = e.fragments, i = 0, n = r.length; i < n; i++) _r(r[i], t); 5214 e.fragmentHint && _r(e.fragmentHint, t), (e.alignedSliding = !0); 5215 } 5216 function xr(t, e, r) { 5217 e && 5218 ((function (t, e, r) { 5219 if ( 5220 (function (t, e, r) { 5221 return !(!e.details || !(r.endCC > r.startCC || (t && t.cc < r.startCC))); 5222 })(t, r, e) 5223 ) { 5224 var i = (function (t, e, r) { 5225 var i = t.fragments, 5226 n = e.fragments; 5227 if (n.length && i.length) { 5228 var a = Cr(i, n[0].cc);
5229 if (a && (!a || a.startPTS)) return a; 5230 w.log('No frag in previous level to align on'); 5231 } else w.log('No fragments to align'); 5232 })(r.details, e); 5233 i && 5234 E(i.start) && 5235 (w.log('Adjusting PTS using last level due to CC increase within current level ' + e.url), 5236 Pr(i.start, e)); 5237 } 5238 })(t, r, e), 5239 !r.alignedSliding && 5240 e.details && 5241 (function (t, e) { 5242 if (e.fragments.length && t.hasProgramDateTime && e.hasProgramDateTime) { 5243 var r = e.fragments[0].programDateTime, 5244 i = t.fragments[0].programDateTime, 5245 n = (i - r) / 1e3 + e.fragments[0].start; 5246 n && 5247 E(n) && 5248 (w.log( 5249 'Adjusting PTS using programDateTime delta ' + 5250 (i - r) + 5251 'ms, sliding:' + 5252 n.toFixed(3) + 5253 ' ' + 5254 t.url + 5255 ' ', 5256 ), 5257 Pr(n, t)); 5258 } 5259 })(r, e.details), 5260 r.alignedSliding || !e.details || r.skippedSegments || Ke(e.details, r)); 5261 } 5262 function Fr(t, e) { 5263 if (t.hasProgramDateTime && e.hasProgramDateTime) { 5264 var r = t.fragments, 5265 i = e.fragments; 5266 if (r.length && i.length) { 5267 var n = i[Math.round(i.length / 2) - 1], 5268 a = Cr(r, n.cc) || r[Math.round(r.length / 2) - 1], 5269 s = n.programDateTime, 5270 o = a.programDateTime; 5271 null !== s && null !== o && Pr((o - s) / 1e3 - (a.start - n.start), t); 5272 } 5273 } 5274 } 5275 var Mr = (function () { 5276 function t(t, e) { 5277 (this.subtle = void 0), (this.aesIV = void 0), (this.subtle = t), (this.aesIV = e); 5278 } 5279 return ( 5280 (t.prototype.decrypt = function (t, e) { 5281 return this.subtle.decrypt({ name: 'AES-CBC', iv: this.aesIV }, e, t); 5282 }), 5283 t 5284 ); 5285 })(), 5286 Or = (function () { 5287 function t(t, e) { 5288 (this.subtle = void 0), (this.key = void 0), (this.subtle = t), (this.key = e); 5289 } 5290 return ( 5291 (t.prototype.expandKey = function () { 5292 return this.subtle.importKey('raw', this.key, { name: 'AES-CBC' }, !1, ['encrypt', 'decrypt']); 5293 }), 5294 t 5295 ); 5296 })(), 5297 Nr = (function () { 5298 function t() { 5299 (this.rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]), 5300 (this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)]), 5301 (this.invSubMix = [ 5302 new Uint32Array(256), 5303 new Uint32Array(256), 5304 new Uint32Array(256), 5305 new Uint32Array(256), 5306 ]), 5307 (this.sBox = new Uint32Array(256)), 5308 (this.invSBox = new Uint32Array(256)), 5309 (this.key = new Uint32Array(0)), 5310 (this.ksRows = 0), 5311 (this.keySize = 0), 5312 (this.keySchedule = void 0), 5313 (this.invKeySchedule = void 0), 5314 this.initTable(); 5315 } 5316 var e = t.prototype; 5317 return ( 5318 (e.uint8ArrayToUint32Array_ = function (t) { 5319 for (var e = new DataView(t), r = new Uint32Array(4), i = 0; i < 4; i++) r[i] = e.getUint32(4 * i); 5320 return r; 5321 }), 5322 (e.initTable = function () { 5323 var t = this.sBox, 5324 e = this.invSBox, 5325 r = this.subMix, 5326 i = r[0], 5327 n = r[1], 5328 a = r[2], 5329 s = r[3], 5330 o = this.invSubMix, 5331 l = o[0], 5332 u = o[1], 5333 h = o[2], 5334 d = o[3], 5335 c = new Uint32Array(256), 5336 f = 0, 5337 g = 0, 5338 v = 0; 5339 for (v = 0; v < 256; v++) c[v] = v < 128 ? v << 1 : (v << 1) ^ 283; 5340 for (v = 0; v < 256; v++) { 5341 var m = g ^ (g << 1) ^ (g << 2) ^ (g << 3) ^ (g << 4); 5342 (m = (m >>> 8) ^ (255 & m) ^ 99), (t[f] = m), (e[m] = f); 5343 var p = c[f],
5344 y = c[p], 5345 T = c[y], 5346 E = (257 * c[m]) ^ (16843008 * m); 5347 (i[f] = (E << 24) | (E >>> 8)), 5348 (n[f] = (E << 16) | (E >>> 16)), 5349 (a[f] = (E << 8) | (E >>> 24)), 5350 (s[f] = E), 5351 (E = (16843009 * T) ^ (65537 * y) ^ (257 * p) ^ (16843008 * f)), 5352 (l[m] = (E << 24) | (E >>> 8)), 5353 (u[m] = (E << 16) | (E >>> 16)), 5354 (h[m] = (E << 8) | (E >>> 24)), 5355 (d[m] = E), 5356 f ? ((f = p ^ c[c[c[T ^ p]]]), (g ^= c[c[g]])) : (f = g = 1); 5357 } 5358 }), 5359 (e.expandKey = function (t) { 5360 for (var e = this.uint8ArrayToUint32Array_(t), r = !0, i = 0; i < e.length && r; ) 5361 (r = e[i] === this.key[i]), i++; 5362 if (!r) { 5363 this.key = e; 5364 var n = (this.keySize = e.length); 5365 if (4 !== n && 6 !== n && 8 !== n) throw new Error('Invalid aes key size=' + n); 5366 var a, 5367 s, 5368 o, 5369 l, 5370 u = (this.ksRows = 4 * (n + 6 + 1)), 5371 h = (this.keySchedule = new Uint32Array(u)), 5372 d = (this.invKeySchedule = new Uint32Array(u)), 5373 c = this.sBox, 5374 f = this.rcon, 5375 g = this.invSubMix, 5376 v = g[0], 5377 m = g[1], 5378 p = g[2], 5379 y = g[3]; 5380 for (a = 0; a < u; a++) 5381 a < n 5382 ? (o = h[a] = e[a]) 5383 : ((l = o), 5384 a % n == 0 5385 ? ((l = 5386 (c[(l = (l << 8) | (l >>> 24)) >>> 24] << 24) | 5387 (c[(l >>> 16) & 255] << 16) | 5388 (c[(l >>> 8) & 255] << 8) | 5389 c[255 & l]), 5390 (l ^= f[(a / n) | 0] << 24)) 5391 : n > 6 && 5392 a % n == 4 && 5393 (l = 5394 (c[l >>> 24] << 24) | (c[(l >>> 16) & 255] << 16) | (c[(l >>> 8) & 255] << 8) | c[255 & l]), 5395 (h[a] = o = (h[a - n] ^ l) >>> 0)); 5396 for (s = 0; s < u; s++) 5397 (a = u - s), 5398 (l = 3 & s ? h[a] : h[a - 4]), 5399 (d[s] = 5400 s < 4 || a <= 4 5401 ? l 5402 : v[c[l >>> 24]] ^ m[c[(l >>> 16) & 255]] ^ p[c[(l >>> 8) & 255]] ^ y[c[255 & l]]), 5403 (d[s] = d[s] >>> 0); 5404 } 5405 }), 5406 (e.networkToHostOrderSwap = function (t) { 5407 return (t << 24) | ((65280 & t) << 8) | ((16711680 & t) >> 8) | (t >>> 24); 5408 }), 5409 (e.decrypt = function (t, e, r) { 5410 for ( 5411 var i, 5412 n, 5413 a, 5414 s, 5415 o, 5416 l, 5417 u, 5418 h, 5419 d, 5420 c, 5421 f, 5422 g, 5423 v, 5424 m, 5425 p = this.keySize + 6, 5426 y = this.invKeySchedule, 5427 T = this.invSBox, 5428 E = this.invSubMix, 5429 S = E[0], 5430 L = E[1], 5431 R = E[2], 5432 A = E[3], 5433 k = this.uint8ArrayToUint32Array_(r), 5434 b = k[0], 5435 D = k[1], 5436 I = k[2], 5437 w = k[3], 5438 C = new Int32Array(t), 5439 _ = new Int32Array(C.length), 5440 P = this.networkToHostOrderSwap; 5441 e < C.length; 5442 5443 ) { 5444 for ( 5445 d = P(C[e]), 5446 c = P(C[e + 1]), 5447 f = P(C[e + 2]), 5448 g = P(C[e + 3]), 5449 o = d ^ y[0], 5450 l = g ^ y[1], 5451 u = f ^ y[2], 5452 h = c ^ y[3], 5453 v = 4, 5454 m = 1; 5455 m < p; 5456 m++ 5457 ) 5458 (i = S[o >>> 24] ^ L[(l >> 16) & 255] ^ R[(u >> 8) & 255] ^ A[255 & h] ^ y[v]), 5459 (n = S[l >>> 24] ^ L[(u >> 16) & 255] ^ R[(h >> 8) & 255] ^ A[255 & o] ^ y[v + 1]), 5460 (a = S[u >>> 24] ^ L[(h >> 16) & 255] ^ R[(o >> 8) & 255] ^ A[255 & l] ^ y[v + 2]), 5461 (s = S[h >>> 24] ^ L[(o >> 16) & 255] ^ R[(l >> 8) & 255] ^ A[255 & u] ^ y[v + 3]), 5462 (o = i), 5463 (l = n), 5464 (u = a), 5465 (h = s), 5466 (v += 4); 5467 (i = (T[o >>> 24] << 24) ^ (T[(l >> 16) & 255] << 16) ^ (T[(u >> 8) & 255] << 8) ^ T[255 & h] ^ y[v]), 5468 (n = 5469 (T[l >>> 24] << 24) ^ 5470 (T[(u >> 16) & 255] << 16) ^ 5471 (T[(h >> 8) & 255] << 8) ^ 5472 T[255 & o] ^ 5473 y[v + 1]), 5474 (a = 5475 (T[u >>> 24] << 24) ^ 5476 (T[(h >> 16) & 255] << 16) ^ 5477 (T[(o >> 8) & 255] << 8) ^ 5478 T[255 & l] ^ 5479 y[v + 2]), 5480 (s = 5481 (T[h >>> 24] << 24) ^ 5482 (T[(o >> 16) & 255] << 16) ^ 5483 (T[(l >> 8) & 255] << 8) ^ 5484 T[255 & u] ^ 5485 y[v + 3]), 5486 (_[e] = P(i ^ b)), 5487 (_[e + 1] = P(s ^ D)), 5488 (_[e + 2] = P(a ^ I)), 5489 (_[e + 3] = P(n ^ w)), 5490 (b = d), 5491 (D = c), 5492 (I = f), 5493 (w = g), 5494 (e += 4); 5495 } 5496 return _.buffer; 5497 }), 5498 t 5499 ); 5500 })(), 5501 Ur = (function () { 5502 function t(t, e) { 5503 var r = (void 0 === e ? {} : e).removePKCS7Padding, 5504 i = void 0 === r || r; 5505 if ( 5506 ((this.logEnabled = !0), 5507 (this.removePKCS7Padding = void 0), 5508 (this.subtle = null),
5509 (this.softwareDecrypter = null), 5510 (this.key = null), 5511 (this.fastAesKey = null), 5512 (this.remainderData = null), 5513 (this.currentIV = null), 5514 (this.currentResult = null), 5515 (this.useSoftware = void 0), 5516 (this.useSoftware = t.enableSoftwareAES), 5517 (this.removePKCS7Padding = i), 5518 i) 5519 ) 5520 try { 5521 var n = self.crypto; 5522 n && (this.subtle = n.subtle || n.webkitSubtle); 5523 } catch (t) {} 5524 null === this.subtle && (this.useSoftware = !0); 5525 } 5526 var e = t.prototype; 5527 return ( 5528 (e.destroy = function () { 5529 (this.subtle = null), 5530 (this.softwareDecrypter = null), 5531 (this.key = null), 5532 (this.fastAesKey = null), 5533 (this.remainderData = null), 5534 (this.currentIV = null), 5535 (this.currentResult = null); 5536 }), 5537 (e.isSync = function () { 5538 return this.useSoftware; 5539 }), 5540 (e.flush = function () { 5541 var t = this.currentResult, 5542 e = this.remainderData; 5543 if (!t || e) return this.reset(), null; 5544 var r, 5545 i, 5546 n, 5547 a = new Uint8Array(t); 5548 return ( 5549 this.reset(), 5550 this.removePKCS7Padding 5551 ? ((i = (r = a).byteLength), (n = i && new DataView(r.buffer).getUint8(i - 1)) ? rt(r, 0, i - n) : r) 5552 : a 5553 ); 5554 }), 5555 (e.reset = function () { 5556 (this.currentResult = null), 5557 (this.currentIV = null), 5558 (this.remainderData = null), 5559 this.softwareDecrypter && (this.softwareDecrypter = null); 5560 }), 5561 (e.decrypt = function (t, e, r) { 5562 var i = this; 5563 return this.useSoftware 5564 ? new Promise(function (n, a) { 5565 i.softwareDecrypt(new Uint8Array(t), e, r); 5566 var s = i.flush(); 5567 s ? n(s.buffer) : a(new Error('[softwareDecrypt] Failed to decrypt data')); 5568 }) 5569 : this.webCryptoDecrypt(new Uint8Array(t), e, r); 5570 }), 5571 (e.softwareDecrypt = function (t, e, r) { 5572 var i = this.currentIV, 5573 n = this.currentResult, 5574 a = this.remainderData; 5575 this.logOnce('JS AES decrypt'), a && ((t = xt(a, t)), (this.remainderData = null)); 5576 var s = this.getValidChunk(t); 5577 if (!s.length) return null; 5578 i && (r = i); 5579 var o = this.softwareDecrypter; 5580 o || (o = this.softwareDecrypter = new Nr()), o.expandKey(e); 5581 var l = n; 5582 return (this.currentResult = o.decrypt(s.buffer, 0, r)), (this.currentIV = rt(s, -16).buffer), l || null; 5583 }), 5584 (e.webCryptoDecrypt = function (t, e, r) { 5585 var i = this, 5586 n = this.subtle; 5587 return ( 5588 (this.key === e && this.fastAesKey) || ((this.key = e), (this.fastAesKey = new Or(n, e))), 5589 this.fastAesKey 5590 .expandKey() 5591 .then(function (e) { 5592 return n 5593 ? (i.logOnce('WebCrypto AES decrypt'), new Mr(n, new Uint8Array(r)).decrypt(t.buffer, e)) 5594 : Promise.reject(new Error('web crypto not initialized')); 5595 }) 5596 .catch(function (n) { 5597 return ( 5598 w.warn('[decrypter]: WebCrypto Error, disable WebCrypto API, ' + n.name + ': ' + n.message), 5599 i.onWebCryptoError(t, e, r) 5600 ); 5601 }) 5602 ); 5603 }), 5604 (e.onWebCryptoError = function (t, e, r) { 5605 (this.useSoftware = !0), (this.logEnabled = !0), this.softwareDecrypt(t, e, r); 5606 var i = this.flush(); 5607 if (i) return i.buffer; 5608 throw new Error('WebCrypto and softwareDecrypt: failed to decrypt data'); 5609 }), 5610 (e.getValidChunk = function (t) { 5611 var e = t, 5612 r = t.length - (t.length % 16); 5613 return r !== t.length && ((e = rt(t, 0, r)), (this.remainderData = rt(t, r))), e; 5614 }), 5615 (e.logOnce = function (t) { 5616 this.logEnabled && (w.log('[decrypter]: ' + t), (this.logEnabled = !1)); 5617 }), 5618 t 5619 ); 5620 })(), 5621 Br = function (t) { 5622 for (var e = '', r = t.length, i = 0; i < r; i++) 5623 e += '[' + t.start(i).toFixed(3) + '-' + t.end(i).toFixed(3) + ']'; 5624 return e; 5625 }, 5626 Gr = 'STOPPED', 5627 Kr = 'IDLE', 5628 Hr = 'KEY_LOADING', 5629 Vr = 'FRAG_LOADING', 5630 Yr = 'FRAG_LOADING_WAITING_RETRY', 5631 Wr = 'WAITING_TRACK', 5632 jr = 'PARSING', 5633 qr = 'PARSED', 5634 Xr = 'ENDED', 5635 zr = 'ERROR', 5636 Qr = 'WAITING_INIT_PTS', 5637 $r = 'WAITING_LEVEL', 5638 Jr = (function (t) { 5639 function e(e, r, i, n, a) { 5640 var s; 5641 return ( 5642 ((s = t.call(this) || this).hls = void 0), 5643 (s.fragPrevious = null),
5644 (s.fragCurrent = null), 5645 (s.fragmentTracker = void 0), 5646 (s.transmuxer = null), 5647 (s._state = Gr), 5648 (s.playlistType = void 0), 5649 (s.media = null), 5650 (s.mediaBuffer = null), 5651 (s.config = void 0), 5652 (s.bitrateTest = !1), 5653 (s.lastCurrentTime = 0), 5654 (s.nextLoadPosition = 0), 5655 (s.startPosition = 0), 5656 (s.startTimeOffset = null), 5657 (s.loadedmetadata = !1), 5658 (s.retryDate = 0), 5659 (s.levels = null), 5660 (s.fragmentLoader = void 0), 5661 (s.keyLoader = void 0), 5662 (s.levelLastLoaded = null), 5663 (s.startFragRequested = !1), 5664 (s.decrypter = void 0), 5665 (s.initPTS = []), 5666 (s.onvseeking = null), 5667 (s.onvended = null), 5668 (s.logPrefix = ''), 5669 (s.log = void 0), 5670 (s.warn = void 0), 5671 (s.playlistType = a), 5672 (s.logPrefix = n), 5673 (s.log = w.log.bind(w, n + ':')), 5674 (s.warn = w.warn.bind(w, n + ':')), 5675 (s.hls = e), 5676 (s.fragmentLoader = new Sr(e.config)), 5677 (s.keyLoader = i), 5678 (s.fragmentTracker = r), 5679 (s.config = e.config), 5680 (s.decrypter = new Ur(e.config)), 5681 e.on( 5682 S.MANIFEST_LOADED, 5683 s.onManifestLoaded, 5684 (function (t) { 5685 if (void 0 === t) 5686 throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); 5687 return t; 5688 })(s), 5689 ), 5690 s 5691 ); 5692 } 5693 l(e, t); 5694 var r = e.prototype; 5695 return ( 5696 (r.doTick = function () { 5697 this.onTickEnd(); 5698 }), 5699 (r.onTickEnd = function () {}), 5700 (r.startLoad = function (t) {}), 5701 (r.stopLoad = function () { 5702 this.fragmentLoader.abort(), this.keyLoader.abort(this.playlistType); 5703 var t = this.fragCurrent; 5704 null != t && t.loader && (t.abortRequests(), this.fragmentTracker.removeFragment(t)), 5705 this.resetTransmuxer(), 5706 (this.fragCurrent = null), 5707 (this.fragPrevious = null), 5708 this.clearInterval(), 5709 this.clearNextTick(), 5710 (this.state = Gr); 5711 }), 5712 (r._streamEnded = function (t, e) { 5713 if (e.live || t.nextStart || !t.end || !this.media) return !1; 5714 var r = e.partList; 5715 if (null != r && r.length) { 5716 var i = r[r.length - 1]; 5717 return Ir.isBuffered(this.media, i.start + i.duration / 2); 5718 } 5719 var n = e.fragments[e.fragments.length - 1].type; 5720 return this.fragmentTracker.isEndListAppended(n); 5721 }), 5722 (r.getLevelDetails = function () { 5723 var t; 5724 if (this.levels && null !== this.levelLastLoaded) 5725 return null == (t = this.levels[this.levelLastLoaded]) ? void 0 : t.details; 5726 }), 5727 (r.onMediaAttached = function (t, e) { 5728 var r = (this.media = this.mediaBuffer = e.media); 5729 (this.onvseeking = this.onMediaSeeking.bind(this)), 5730 (this.onvended = this.onMediaEnded.bind(this)), 5731 r.addEventListener('seeking', this.onvseeking), 5732 r.addEventListener('ended', this.onvended); 5733 var i = this.config; 5734 this.levels && i.autoStartLoad && this.state === Gr && this.startLoad(i.startPosition); 5735 }), 5736 (r.onMediaDetaching = function () { 5737 var t = this.media; 5738 null != t && 5739 t.ended && 5740 (this.log('MSE detaching and video ended, reset startPosition'), 5741 (this.startPosition = this.lastCurrentTime = 0)), 5742 t && 5743 this.onvseeking && 5744 this.onvended && 5745 (t.removeEventListener('seeking', this.onvseeking), 5746 t.removeEventListener('ended', this.onvended), 5747 (this.onvseeking = this.onvended = null)), 5748 this.keyLoader && this.keyLoader.detach(), 5749 (this.media = this.mediaBuffer = null),
5750 (this.loadedmetadata = !1), 5751 this.fragmentTracker.removeAllFragments(), 5752 this.stopLoad(); 5753 }), 5754 (r.onMediaSeeking = function () { 5755 var t = this.config, 5756 e = this.fragCurrent, 5757 r = this.media, 5758 i = this.mediaBuffer, 5759 n = this.state, 5760 a = r ? r.currentTime : 0, 5761 s = Ir.bufferInfo(i || r, a, t.maxBufferHole); 5762 if ((this.log('media seeking to ' + (E(a) ? a.toFixed(3) : a) + ', state: ' + n), this.state === Xr)) 5763 this.resetLoadingState(); 5764 else if (e) { 5765 var o = t.maxFragLookUpTolerance, 5766 l = e.start - o, 5767 u = e.start + e.duration + o; 5768 if (!s.len || u < s.start || l > s.end) { 5769 var h = a > u; 5770 (a < l || h) && 5771 (h && 5772 e.loader && 5773 (this.log('seeking outside of buffer while fragment load in progress, cancel fragment load'), 5774 e.abortRequests(), 5775 this.resetLoadingState()), 5776 (this.fragPrevious = null)); 5777 } 5778 } 5779 r && 5780 (this.fragmentTracker.removeFragmentsInRange(a, 1 / 0, this.playlistType, !0), 5781 (this.lastCurrentTime = a)), 5782 this.loadedmetadata || s.len || (this.nextLoadPosition = this.startPosition = a), 5783 this.tickImmediate(); 5784 }), 5785 (r.onMediaEnded = function () { 5786 this.startPosition = this.lastCurrentTime = 0; 5787 }), 5788 (r.onManifestLoaded = function (t, e) { 5789 (this.startTimeOffset = e.startTimeOffset), (this.initPTS = []); 5790 }), 5791 (r.onHandlerDestroying = function () { 5792 this.stopLoad(), t.prototype.onHandlerDestroying.call(this); 5793 }), 5794 (r.onHandlerDestroyed = function () { 5795 (this.state = Gr), 5796 this.fragmentLoader && this.fragmentLoader.destroy(), 5797 this.keyLoader && this.keyLoader.destroy(), 5798 this.decrypter && this.decrypter.destroy(), 5799 (this.hls = 5800 this.log = 5801 this.warn = 5802 this.decrypter = 5803 this.keyLoader = 5804 this.fragmentLoader = 5805 this.fragmentTracker = 5806 null), 5807 t.prototype.onHandlerDestroyed.call(this); 5808 }), 5809 (r.loadFragment = function (t, e, r) { 5810 this._loadFragForPlayback(t, e, r); 5811 }), 5812 (r._loadFragForPlayback = function (t, e, r) { 5813 var i = this; 5814 this._doFragLoad(t, e, r, function (e) { 5815 if (i.fragContextChanged(t)) 5816 return ( 5817 i.warn( 5818 'Fragment ' + 5819 t.sn + 5820 (e.part ? ' p: ' + e.part.index : '') + 5821 ' of level ' + 5822 t.level + 5823 ' was dropped during download.', 5824 ), 5825 void i.fragmentTracker.removeFragment(t) 5826 ); 5827 t.stats.chunkCount++, i._handleFragmentLoadProgress(e); 5828 }) 5829 .then(function (e) { 5830 if (e) { 5831 var r = i.state; 5832 i.fragContextChanged(t) 5833 ? (r === Vr || (!i.fragCurrent && r === jr)) && 5834 (i.fragmentTracker.removeFragment(t), (i.state = Kr)) 5835 : ('payload' in e && 5836 (i.log('Loaded fragment ' + t.sn + ' of level ' + t.level), i.hls.trigger(S.FRAG_LOADED, e)), 5837 i._handleFragmentLoadComplete(e)); 5838 } 5839 }) 5840 .catch(function (e) { 5841 i.state !== Gr && i.state !== zr && (i.warn(e), i.resetFragmentLoading(t)); 5842 }); 5843 }), 5844 (r.clearTrackerIfNeeded = function (t) { 5845 var e, 5846 r = this.fragmentTracker; 5847 if (r.getState(t) === gr) { 5848 var i = t.type, 5849 n = this.getFwdBufferInfo(this.mediaBuffer, i), 5850 a = Math.max(t.duration, n ? n.len : this.config.maxBufferLength); 5851 this.reduceMaxBufferLength(a) && r.removeFragment(t); 5852 } else 5853 0 === (null == (e = this.mediaBuffer) ? void 0 : e.buffered.length) 5854 ? r.removeAllFragments() 5855 : r.hasParts(t.type) && 5856 (r.detectPartialFragments({ frag: t, part: null, stats: t.stats, id: t.type }), 5857 r.getState(t) === vr && r.removeFragment(t)); 5858 }), 5859 (r.checkLiveUpdate = function (t) { 5860 if (t.updated && !t.live) { 5861 var e = t.fragments[t.fragments.length - 1]; 5862 this.fragmentTracker.detectPartialFragments({ frag: e, part: null, stats: e.stats, id: e.type }); 5863 } 5864 t.fragments[0] || (t.deltaUpdateFailed = !0); 5865 }), 5866 (r.flushMainBuffer = function (t, e, r) { 5867 if ((void 0 === r && (r = null), t - e)) { 5868 var i = { startOffset: t, endOffset: e, type: r }; 5869 this.hls.trigger(S.BUFFER_FLUSHING, i); 5870 } 5871 }), 5872 (r._loadInitSegment = function (t, e) { 5873 var r = this; 5874 this._doFragLoad(t, e) 5875 .then(function (e) { 5876 if (!e || r.fragContextChanged(t) || !r.levels) throw new Error('init load aborted'); 5877 return e; 5878 }) 5879 .then(function (e) { 5880 var i = r.hls, 5881 n = e.payload, 5882 a = t.decryptdata; 5883 if (n && n.byteLength > 0 && a && a.key && a.iv && 'AES-128' === a.method) { 5884 var s = self.performance.now(); 5885 return r.decrypter
5886 .decrypt(new Uint8Array(n), a.key.buffer, a.iv.buffer) 5887 .catch(function (e) { 5888 throw ( 5889 (i.trigger(S.ERROR, { 5890 type: L.MEDIA_ERROR, 5891 details: R.FRAG_DECRYPT_ERROR, 5892 fatal: !1, 5893 error: e, 5894 reason: e.message, 5895 frag: t, 5896 }), 5897 e) 5898 ); 5899 }) 5900 .then(function (r) { 5901 var n = self.performance.now(); 5902 return ( 5903 i.trigger(S.FRAG_DECRYPTED, { frag: t, payload: r, stats: { tstart: s, tdecrypt: n } }), 5904 (e.payload = r), 5905 e 5906 ); 5907 }); 5908 } 5909 return e; 5910 }) 5911 .then(function (i) { 5912 var n = r.fragCurrent, 5913 a = r.hls; 5914 if (!r.levels) throw new Error('init load aborted, missing levels'); 5915 var s = t.stats; 5916 (r.state = Kr), 5917 (e.fragmentError = 0), 5918 (t.data = new Uint8Array(i.payload)), 5919 (s.parsing.start = s.buffering.start = self.performance.now()), 5920 (s.parsing.end = s.buffering.end = self.performance.now()), 5921 i.frag === n && a.trigger(S.FRAG_BUFFERED, { stats: s, frag: n, part: null, id: t.type }), 5922 r.tick(); 5923 }) 5924 .catch(function (e) { 5925 r.state !== Gr && r.state !== zr && (r.warn(e), r.resetFragmentLoading(t)); 5926 }); 5927 }), 5928 (r.fragContextChanged = function (t) { 5929 var e = this.fragCurrent; 5930 return !t || !e || t.level !== e.level || t.sn !== e.sn || t.urlId !== e.urlId; 5931 }), 5932 (r.fragBufferedComplete = function (t, e) { 5933 var r, 5934 i, 5935 n, 5936 a, 5937 s = this.mediaBuffer ? this.mediaBuffer : this.media; 5938 this.log( 5939 'Buffered ' + 5940 t.type + 5941 ' sn: ' + 5942 t.sn + 5943 (e ? ' part: ' + e.index : '') + 5944 ' of ' + 5945 (this.playlistType === ge ? 'level' : 'track') + 5946 ' ' + 5947 t.level + 5948 ' (frag:[' + 5949 (null != (r = t.startPTS) ? r : NaN).toFixed(3) + 5950 '-' + 5951 (null != (i = t.endPTS) ? i : NaN).toFixed(3) + 5952 '] > buffer:' + 5953 (s ? Br(Ir.getBuffered(s)) : '(detached)') + 5954 ')', 5955 ), 5956 (this.state = Kr), 5957 s && 5958 (!this.loadedmetadata && 5959 t.type == ge && 5960 s.buffered.length && 5961 (null == (n = this.fragCurrent) ? void 0 : n.sn) === 5962 (null == (a = this.fragPrevious) ? void 0 : a.sn) && 5963 ((this.loadedmetadata = !0), this.seekToStartPos()), 5964 this.tick()); 5965 }), 5966 (r.seekToStartPos = function () {}), 5967 (r._handleFragmentLoadComplete = function (t) { 5968 var e = this.transmuxer; 5969 if (e) { 5970 var r = t.frag, 5971 i = t.part, 5972 n = t.partsLoaded, 5973 a = 5974 !n || 5975 0 === n.length || 5976 n.some(function (t) { 5977 return !t; 5978 }), 5979 s = new wr(r.level, r.sn, r.stats.chunkCount + 1, 0, i ? i.index : -1, !a); 5980 e.flush(s); 5981 } 5982 }), 5983 (r._handleFragmentLoadProgress = function (t) {}), 5984 (r._doFragLoad = function (t, e, r, i) { 5985 var n, 5986 a = this; 5987 void 0 === r && (r = null); 5988 var s = null == e ? void 0 : e.details; 5989 if (!this.levels || !s) throw new Error('frag load aborted, missing level' + (s ? '' : ' detail') + 's'); 5990 var o = null; 5991 if ( 5992 (!t.encrypted || (null != (n = t.decryptdata) && n.key) 5993 ? !t.encrypted && s.encryptedFragments.length && this.keyLoader.loadClear(t, s.encryptedFragments) 5994 : (this.log( 5995 'Loading key for ' + 5996 t.sn + 5997 ' of [' + 5998 s.startSN +
5999 '-' + 6000 s.endSN + 6001 '], ' + 6002 ('[stream-controller]' === this.logPrefix ? 'level' : 'track') + 6003 ' ' + 6004 t.level, 6005 ), 6006 (this.state = Hr), 6007 (this.fragCurrent = t), 6008 (o = this.keyLoader.load(t).then(function (t) { 6009 if (!a.fragContextChanged(t.frag)) 6010 return a.hls.trigger(S.KEY_LOADED, t), a.state === Hr && (a.state = Kr), t; 6011 })), 6012 this.hls.trigger(S.KEY_LOADING, { frag: t }), 6013 null === this.fragCurrent && 6014 (o = Promise.reject(new Error('frag load aborted, context changed in KEY_LOADING')))), 6015 (r = Math.max(t.start, r || 0)), 6016 this.config.lowLatencyMode && 'initSegment' !== t.sn) 6017 ) { 6018 var l = s.partList; 6019 if (l && i) { 6020 r > t.end && s.fragmentHint && (t = s.fragmentHint); 6021 var u = this.getNextPart(l, t, r); 6022 if (u > -1) { 6023 var h, 6024 d = l[u]; 6025 return ( 6026 this.log( 6027 'Loading part sn: ' + 6028 t.sn + 6029 ' p: ' + 6030 d.index + 6031 ' cc: ' + 6032 t.cc + 6033 ' of playlist [' + 6034 s.startSN + 6035 '-' + 6036 s.endSN + 6037 '] parts [0-' + 6038 u + 6039 '-' + 6040 (l.length - 1) + 6041 '] ' + 6042 ('[stream-controller]' === this.logPrefix ? 'level' : 'track') + 6043 ': ' + 6044 t.level + 6045 ', target: ' + 6046 parseFloat(r.toFixed(3)), 6047 ), 6048 (this.nextLoadPosition = d.start + d.duration), 6049 (this.state = Vr), 6050 (h = o 6051 ? o 6052 .then(function (r) { 6053 return !r || a.fragContextChanged(r.frag) ? null : a.doFragPartsLoad(t, d, e, i); 6054 }) 6055 .catch(function (t) { 6056 return a.handleFragLoadError(t); 6057 }) 6058 : this.doFragPartsLoad(t, d, e, i).catch(function (t) { 6059 return a.handleFragLoadError(t); 6060 })), 6061 this.hls.trigger(S.FRAG_LOADING, { frag: t, part: d, targetBufferTime: r }), 6062 null === this.fragCurrent 6063 ? Promise.reject(new Error('frag load aborted, context changed in FRAG_LOADING parts')) 6064 : h 6065 ); 6066 } 6067 if (!t.url || this.loadedEndOfParts(l, r)) return Promise.resolve(null); 6068 } 6069 } 6070 this.log( 6071 'Loading fragment ' + 6072 t.sn + 6073 ' cc: ' + 6074 t.cc + 6075 ' ' + 6076 (s ? 'of [' + s.startSN + '-' + s.endSN + '] ' : '') + 6077 ('[stream-controller]' === this.logPrefix ? 'level' : 'track') + 6078 ': ' + 6079 t.level + 6080 ', target: ' + 6081 parseFloat(r.toFixed(3)), 6082 ), 6083 E(t.sn) && !this.bitrateTest && (this.nextLoadPosition = t.start + t.duration), 6084 (this.state = Vr); 6085 var c, 6086 f = this.config.progressive; 6087 return ( 6088 (c = 6089 f && o 6090 ? o 6091 .then(function (e) { 6092 return !e || a.fragContextChanged(null == e ? void 0 : e.frag) 6093 ? null 6094 : a.fragmentLoader.load(t, i); 6095 }) 6096 .catch(function (t) { 6097 return a.handleFragLoadError(t); 6098 }) 6099 : Promise.all([this.fragmentLoader.load(t, f ? i : void 0), o]) 6100 .then(function (t) { 6101 var e = t[0]; 6102 return !f && e && i && i(e), e; 6103 }) 6104 .catch(function (t) { 6105 return a.handleFragLoadError(t); 6106 })), 6107 this.hls.trigger(S.FRAG_LOADING, { frag: t, targetBufferTime: r }), 6108 null === this.fragCurrent 6109 ? Promise.reject(new Error('frag load aborted, context changed in FRAG_LOADING')) 6110 : c 6111 ); 6112 }), 6113 (r.doFragPartsLoad = function (t, e, r, i) { 6114 var n = this; 6115 return new Promise(function (a, s) { 6116 var o, 6117 l = [], 6118 u = null == (o = r.details) ? void 0 : o.partList; 6119 !(function e(o) { 6120 n.fragmentLoader 6121 .loadPart(t, o, i) 6122 .then(function (i) { 6123 l[o.index] = i; 6124 var s = i.part; 6125 n.hls.trigger(S.FRAG_LOADED, i); 6126 var h = Ve(r, t.sn, o.index + 1) || Ye(u, t.sn, o.index + 1); 6127 if (!h) return a({ frag: t, part: s, partsLoaded: l }); 6128 e(h); 6129 }) 6130 .catch(s); 6131 })(e); 6132 }); 6133 }), 6134 (r.handleFragLoadError = function (t) { 6135 if ('data' in t) { 6136 var e = t.data; 6137 t.data && e.details === R.INTERNAL_ABORTED 6138 ? this.handleFragLoadAborted(e.frag, e.part) 6139 : this.hls.trigger(S.ERROR, e); 6140 } else 6141 this.hls.trigger(S.ERROR, { 6142 type: L.OTHER_ERROR, 6143 details: R.INTERNAL_EXCEPTION, 6144 err: t, 6145 error: t, 6146 fatal: !0, 6147 }); 6148 return null; 6149 }), 6150 (r._handleTransmuxerFlush = function (t) { 6151 var e = this.getCurrentContext(t); 6152 if (e && this.state === jr) { 6153 var r = e.frag, 6154 i = e.part, 6155 n = e.level, 6156 a = self.performance.now(); 6157 (r.stats.parsing.end = a), i && (i.stats.parsing.end = a), this.updateLevelTiming(r, i, n, t.partial); 6158 } else this.fragCurrent || this.state === Gr || this.state === zr || (this.state = Kr); 6159 }), 6160 (r.getCurrentContext = function (t) { 6161 var e = this.levels, 6162 r = this.fragCurrent, 6163 i = t.level, 6164 n = t.sn, 6165 a = t.part; 6166 if (null == e || !e[i]) 6167 return ( 6168 this.warn( 6169 'Levels object was unset while buffering fragment ' + 6170 n + 6171 ' of level ' + 6172 i + 6173 '. The current chunk will not be buffered.', 6174 ), 6175 null 6176 ); 6177 var s = e[i], 6178 o = a > -1 ? Ve(s, n, a) : null, 6179 l = o 6180 ? o.fragment 6181 : (function (t, e, r) { 6182 if (null == t || !t.details) return null; 6183 var i = t.details, 6184 n = i.fragments[e - i.startSN]; 6185 return ( 6186 n || ((n = i.fragmentHint) && n.sn === e ? n : e < i.startSN && r && r.sn === e ? r : null) 6187 ); 6188 })(s, n, r); 6189 return l ? (r && r !== l && (l.stats = r.stats), { frag: l, part: o, level: s }) : null; 6190 }), 6191 (r.bufferFragmentData = function (t, e, r, i, n) { 6192 var a; 6193 if (t && this.state === jr) { 6194 var s = t.data1, 6195 o = t.data2, 6196 l = s; 6197 if ((s && o && (l = xt(s, o)), null != (a = l) && a.length)) { 6198 var u = { type: t.type, frag: e, part: r, chunkMeta: i, parent: e.type, data: l }; 6199 if ((this.hls.trigger(S.BUFFER_APPENDING, u), t.dropped && t.independent && !r)) { 6200 if (n) return; 6201 this.flushBufferGap(e); 6202 } 6203 } 6204 } 6205 }), 6206 (r.flushBufferGap = function (t) { 6207 var e = this.media; 6208 if (e) 6209 if (Ir.isBuffered(e, e.currentTime)) { 6210 var r = e.currentTime, 6211 i = Ir.bufferInfo(e, r, 0), 6212 n = t.duration, 6213 a = Math.min(2 * this.config.maxFragLookUpTolerance, 0.25 * n), 6214 s = Math.max(Math.min(t.start - a, i.end - a), r + a); 6215 t.start - s > a && this.flushMainBuffer(s, t.start); 6216 } else this.flushMainBuffer(0, t.start); 6217 }), 6218 (r.getFwdBufferInfo = function (t, e) { 6219 var r = this.getLoadPosition(); 6220 return E(r) ? this.getFwdBufferInfoAtPos(t, r, e) : null; 6221 }), 6222 (r.getFwdBufferInfoAtPos = function (t, e, r) { 6223 var i = this.config.maxBufferHole, 6224 n = Ir.bufferInfo(t, e, i); 6225 if (0 === n.len && void 0 !== n.nextStart) { 6226 var a = this.fragmentTracker.getBufferedFrag(e, r); 6227 if (a && n.nextStart < a.end) return Ir.bufferInfo(t, e, Math.max(n.nextStart, i)); 6228 } 6229 return n; 6230 }), 6231 (r.getMaxBufferLength = function (t) { 6232 var e, 6233 r = this.config; 6234 return ( 6235 (e = t ? Math.max((8 * r.maxBufferSize) / t, r.maxBufferLength) : r.maxBufferLength), 6236 Math.min(e, r.maxMaxBufferLength) 6237 ); 6238 }), 6239 (r.reduceMaxBufferLength = function (t) { 6240 var e = this.config, 6241 r = t || e.maxBufferLength; 6242 return ( 6243 e.maxMaxBufferLength >= r && 6244 ((e.maxMaxBufferLength /= 2), 6245 this.warn('Reduce max buffer length to ' + e.maxMaxBufferLength + 's'), 6246 !0) 6247 ); 6248 }), 6249 (r.getAppendedFrag = function (t, e) { 6250 var r = this.fragmentTracker.getAppendedFrag(t, ge); 6251 return r && 'fragment' in r ? r.fragment : r; 6252 }), 6253 (r.getNextFragment = function (t, e) { 6254 var r = e.fragments, 6255 i = r.length; 6256 if (!i) return null; 6257 var n, 6258 a = this.config, 6259 s = r[0].start; 6260 if (e.live) { 6261 var o = a.initialLiveManifestSize; 6262 if (i < o) 6263 return this.warn('Not enough fragments to start playback (have: ' + i + ', need: ' + o + ')'), null; 6264 e.PTSKnown || 6265 this.startFragRequested || 6266 -1 !== this.startPosition || 6267 ((n = this.getInitialLiveFragment(e, r)), 6268 (this.startPosition = n ? this.hls.liveSyncPosition || n.start : t)); 6269 } else t <= s && (n = r[0]); 6270 if (!n) { 6271 var l = a.lowLatencyMode ? e.partEnd : e.fragmentEnd; 6272 n = this.getFragmentAtPosition(t, l, e); 6273 } 6274 return this.mapToInitFragWhenRequired(n); 6275 }), 6276 (r.isLoopLoading = function (t, e) { 6277 var r = this.fragmentTracker.getState(t); 6278 return (r === mr || (r === vr && !!t.gap)) && this.nextLoadPosition > e; 6279 }), 6280 (r.getNextFragmentLoopLoading = function (t, e, r, i, n) { 6281 var a = t.gap, 6282 s = this.getNextFragment(this.nextLoadPosition, e); 6283 if (null === s) return s; 6284 if (((t = s), a && t && !t.gap && r.nextStart)) { 6285 var o = this.getFwdBufferInfoAtPos(this.mediaBuffer ? this.mediaBuffer : this.media, r.nextStart, i); 6286 if (null !== o && r.len + o.len >= n) 6287 return this.log('buffer full after gaps in "' + i + '" playlist starting at sn: ' + t.sn), null; 6288 } 6289 return t; 6290 }), 6291 (r.mapToInitFragWhenRequired = function (t) { 6292 return null == t || !t.initSegment || (null != t && t.initSegment.data) || this.bitrateTest 6293 ? t 6294 : t.initSegment; 6295 }), 6296 (r.getNextPart = function (t, e, r) {
6297 for (var i = -1, n = !1, a = !0, s = 0, o = t.length; s < o; s++) { 6298 var l = t[s]; 6299 if (((a = a && !l.independent), i > -1 && r < l.start)) break; 6300 var u = l.loaded; 6301 u ? (i = -1) : (n || l.independent || a) && l.fragment === e && (i = s), (n = u); 6302 } 6303 return i; 6304 }), 6305 (r.loadedEndOfParts = function (t, e) { 6306 var r = t[t.length - 1]; 6307 return r && e > r.start && r.loaded; 6308 }), 6309 (r.getInitialLiveFragment = function (t, e) { 6310 var r = this.fragPrevious, 6311 i = null; 6312 if (r) { 6313 if ( 6314 (t.hasProgramDateTime && 6315 (this.log('Live playlist, switching playlist, load frag with same PDT: ' + r.programDateTime), 6316 (i = (function (t, e, r) { 6317 if (null === e || !Array.isArray(t) || !t.length || !E(e)) return null; 6318 if (e < (t[0].programDateTime || 0)) return null; 6319 if (e >= (t[t.length - 1].endProgramDateTime || 0)) return null; 6320 r = r || 0; 6321 for (var i = 0; i < t.length; ++i) { 6322 var n = t[i]; 6323 if (Ze(e, r, n)) return n; 6324 } 6325 return null; 6326 })(e, r.endProgramDateTime, this.config.maxFragLookUpTolerance))), 6327 !i) 6328 ) { 6329 var n = r.sn + 1; 6330 if (n >= t.startSN && n <= t.endSN) { 6331 var a = e[n - t.startSN]; 6332 r.cc === a.cc && 6333 ((i = a), this.log('Live playlist, switching playlist, load frag with next SN: ' + i.sn)); 6334 } 6335 i || 6336 ((i = (function (t, e) { 6337 return Qe(t, function (t) { 6338 return t.cc < e ? 1 : t.cc > e ? -1 : 0; 6339 }); 6340 })(e, r.cc)), 6341 i && this.log('Live playlist, switching playlist, load frag with same CC: ' + i.sn)); 6342 } 6343 } else { 6344 var s = this.hls.liveSyncPosition; 6345 null !== s && (i = this.getFragmentAtPosition(s, this.bitrateTest ? t.fragmentEnd : t.edge, t)); 6346 } 6347 return i; 6348 }), 6349 (r.getFragmentAtPosition = function (t, e, r) { 6350 var i, 6351 n = this.config, 6352 a = this.fragPrevious, 6353 s = r.fragments, 6354 o = r.endSN, 6355 l = r.fragmentHint, 6356 u = n.maxFragLookUpTolerance, 6357 h = r.partList, 6358 d = !!(n.lowLatencyMode && null != h && h.length && l); 6359 if ( 6360 (d && l && !this.bitrateTest && ((s = s.concat(l)), (o = l.sn)), 6361 (i = t < e ? $e(a, s, t, t > e - u ? 0 : u) : s[s.length - 1])) 6362 ) { 6363 var c = i.sn - r.startSN, 6364 f = this.fragmentTracker.getState(i); 6365 if ( 6366 ((f === mr || (f === vr && i.gap)) && (a = i), 6367 a && i.sn === a.sn && (!d || h[0].fragment.sn > i.sn) && a && i.level === a.level) 6368 ) { 6369 var g = s[c + 1]; 6370 i = i.sn < o && this.fragmentTracker.getState(g) !== mr ? g : null; 6371 } 6372 } 6373 return i; 6374 }), 6375 (r.synchronizeToLiveEdge = function (t) { 6376 var e = this.config, 6377 r = this.media; 6378 if (r) { 6379 var i = this.hls.liveSyncPosition, 6380 n = r.currentTime, 6381 a = t.fragments[0].start, 6382 s = t.edge, 6383 o = n >= a - e.maxFragLookUpTolerance && n <= s; 6384 if (null !== i && r.duration > i && (n < i || !o)) { 6385 var l = 6386 void 0 !== e.liveMaxLatencyDuration 6387 ? e.liveMaxLatencyDuration 6388 : e.liveMaxLatencyDurationCount * t.targetduration; 6389 ((!o && r.readyState < 4) || n < s - l) && 6390 (this.loadedmetadata || (this.nextLoadPosition = i), 6391 r.readyState && 6392 (this.warn( 6393 'Playback: ' + 6394 n.toFixed(3) + 6395 ' is located too far from the end of live sliding playlist: ' + 6396 s + 6397 ', reset currentTime to : ' + 6398 i.toFixed(3), 6399 ), 6400 (r.currentTime = i))); 6401 } 6402 } 6403 }), 6404 (r.alignPlaylists = function (t, e) { 6405 var r = this.levels, 6406 i = this.levelLastLoaded, 6407 n = this.fragPrevious, 6408 a = null !== i ? r[i] : null, 6409 s = t.fragments.length; 6410 if (!s) return this.warn('No fragments in live playlist'), 0; 6411 var o = t.fragments[0].start, 6412 l = !e, 6413 u = t.alignedSliding && E(o); 6414 if (l || (!u && !o)) { 6415 xr(n, a, t); 6416 var h = t.fragments[0].start; 6417 return ( 6418 this.log( 6419 'Live playlist sliding: ' + 6420 h.toFixed(2) + 6421 ' start-sn: ' + 6422 (e ? e.startSN : 'na') +
6423 '->' + 6424 t.startSN + 6425 ' prev-sn: ' + 6426 (n ? n.sn : 'na') + 6427 ' fragments: ' + 6428 s, 6429 ), 6430 h 6431 ); 6432 } 6433 return o; 6434 }), 6435 (r.waitForCdnTuneIn = function (t) { 6436 return ( 6437 t.live && t.canBlockReload && t.partTarget && t.tuneInGoal > Math.max(t.partHoldBack, 3 * t.partTarget) 6438 ); 6439 }), 6440 (r.setStartPosition = function (t, e) { 6441 var r = this.startPosition; 6442 if ((r < e && (r = -1), -1 === r || -1 === this.lastCurrentTime)) { 6443 var i = null !== this.startTimeOffset, 6444 n = i ? this.startTimeOffset : t.startTimeOffset; 6445 null !== n && E(n) 6446 ? ((r = e + n), 6447 n < 0 && (r += t.totalduration), 6448 (r = Math.min(Math.max(e, r), e + t.totalduration)), 6449 this.log( 6450 'Start time offset ' + 6451 n + 6452 ' found in ' + 6453 (i ? 'multivariant' : 'media') + 6454 ' playlist, adjust startPosition to ' + 6455 r, 6456 ), 6457 (this.startPosition = r)) 6458 : t.live 6459 ? (r = this.hls.liveSyncPosition || e) 6460 : (this.startPosition = r = 0), 6461 (this.lastCurrentTime = r); 6462 } 6463 this.nextLoadPosition = r; 6464 }), 6465 (r.getLoadPosition = function () { 6466 var t = this.media, 6467 e = 0; 6468 return ( 6469 this.loadedmetadata && t ? (e = t.currentTime) : this.nextLoadPosition && (e = this.nextLoadPosition), e 6470 ); 6471 }), 6472 (r.handleFragLoadAborted = function (t, e) { 6473 this.transmuxer && 6474 'initSegment' !== t.sn && 6475 t.stats.aborted && 6476 (this.warn( 6477 'Fragment ' + t.sn + (e ? ' part ' + e.index : '') + ' of level ' + t.level + ' was aborted', 6478 ), 6479 this.resetFragmentLoading(t)); 6480 }), 6481 (r.resetFragmentLoading = function (t) { 6482 (this.fragCurrent && (this.fragContextChanged(t) || this.state === Yr)) || (this.state = Kr); 6483 }), 6484 (r.onFragmentOrKeyLoadError = function (t, e) { 6485 if (e.chunkMeta && !e.frag) { 6486 var r = this.getCurrentContext(e.chunkMeta); 6487 r && (e.frag = r.frag); 6488 } 6489 var i = e.frag; 6490 if (i && i.type === t && this.levels) 6491 if (this.fragContextChanged(i)) { 6492 var n; 6493 this.warn( 6494 'Frag load error must match current frag to retry ' + 6495 i.url + 6496 ' > ' + 6497 (null == (n = this.fragCurrent) ? void 0 : n.url), 6498 ); 6499 } else { 6500 var a = e.details === R.FRAG_GAP; 6501 a && this.fragmentTracker.fragBuffered(i, !0); 6502 var s = e.errorAction, 6503 o = s || {}, 6504 l = o.action, 6505 u = o.retryCount, 6506 h = void 0 === u ? 0 : u, 6507 d = o.retryConfig; 6508 if (s && l === nr && d) { 6509 var c; 6510 this.resetStartWhenNotLoaded(null != (c = this.levelLastLoaded) ? c : i.level); 6511 var f = qe(d, h); 6512 this.warn( 6513 'Fragment ' + 6514 i.sn + 6515 ' of ' + 6516 t + 6517 ' ' + 6518 i.level + 6519 ' errored with ' + 6520 e.details + 6521 ', retrying loading ' + 6522 (h + 1) + 6523 '/' + 6524 d.maxNumRetry + 6525 ' in ' + 6526 f + 6527 'ms', 6528 ), 6529 (s.resolved = !0), 6530 (this.retryDate = self.performance.now() + f), 6531 (this.state = Yr); 6532 } else 6533 d && s 6534 ? (this.resetFragmentErrors(t), 6535 h < d.maxNumRetry 6536 ? a || (s.resolved = !0) 6537 : w.warn(e.details + ' reached or exceeded max retry (' + h + ')')) 6538 : (null == s ? void 0 : s.action) === ir 6539 ? (this.state = $r) 6540 : (this.state = zr); 6541 this.tickImmediate(); 6542 } 6543 }), 6544 (r.reduceLengthAndFlushBuffer = function (t) { 6545 if (this.state === jr || this.state === qr) { 6546 var e = t.parent, 6547 r = this.getFwdBufferInfo(this.mediaBuffer, e),
6548 i = r && r.len > 0.5; 6549 i && this.reduceMaxBufferLength(r.len); 6550 var n = !i; 6551 return ( 6552 n && this.warn('Buffer full error while media.currentTime is not buffered, flush ' + e + ' buffer'), 6553 t.frag && (this.fragmentTracker.removeFragment(t.frag), (this.nextLoadPosition = t.frag.start)), 6554 this.resetLoadingState(), 6555 n 6556 ); 6557 } 6558 return !1; 6559 }), 6560 (r.resetFragmentErrors = function (t) { 6561 t === ve && (this.fragCurrent = null), 6562 this.loadedmetadata || (this.startFragRequested = !1), 6563 this.state !== Gr && (this.state = Kr); 6564 }), 6565 (r.afterBufferFlushed = function (t, e, r) { 6566 if (t) { 6567 var i = Ir.getBuffered(t); 6568 this.fragmentTracker.detectEvictedFragments(e, i, r), this.state === Xr && this.resetLoadingState(); 6569 } 6570 }), 6571 (r.resetLoadingState = function () { 6572 this.log('Reset loading state'), (this.fragCurrent = null), (this.fragPrevious = null), (this.state = Kr); 6573 }), 6574 (r.resetStartWhenNotLoaded = function (t) { 6575 if (!this.loadedmetadata) { 6576 this.startFragRequested = !1; 6577 var e = this.levels ? this.levels[t].details : null; 6578 null != e && e.live 6579 ? ((this.startPosition = -1), this.setStartPosition(e, 0), this.resetLoadingState()) 6580 : (this.nextLoadPosition = this.startPosition); 6581 } 6582 }), 6583 (r.resetWhenMissingContext = function (t) { 6584 var e; 6585 this.warn( 6586 'The loading context changed while buffering fragment ' + 6587 t.sn + 6588 ' of level ' + 6589 t.level + 6590 '. This chunk will not be buffered.', 6591 ), 6592 this.removeUnbufferedFrags(), 6593 this.resetStartWhenNotLoaded(null != (e = this.levelLastLoaded) ? e : t.level), 6594 this.resetLoadingState(); 6595 }), 6596 (r.removeUnbufferedFrags = function (t) { 6597 void 0 === t && (t = 0), this.fragmentTracker.removeFragmentsInRange(t, 1 / 0, this.playlistType, !1, !0); 6598 }), 6599 (r.updateLevelTiming = function (t, e, r, i) { 6600 var n, 6601 a = this, 6602 s = r.details; 6603 if (s) { 6604 if ( 6605 Object.keys(t.elementaryStreams).reduce(function (e, n) { 6606 var o = t.elementaryStreams[n]; 6607 if (o) { 6608 var l = o.endPTS - o.startPTS; 6609 if (l <= 0) 6610 return ( 6611 a.warn('Could not parse fragment ' + t.sn + ' ' + n + ' duration reliably (' + l + ')'), 6612 e || !1 6613 ); 6614 var u = i ? 0 : Be(s, t, o.startPTS, o.endPTS, o.startDTS, o.endDTS); 6615 return ( 6616 a.hls.trigger(S.LEVEL_PTS_UPDATED, { 6617 details: s, 6618 level: r, 6619 drift: u, 6620 type: n, 6621 frag: t, 6622 start: o.startPTS, 6623 end: o.endPTS, 6624 }), 6625 !0 6626 ); 6627 } 6628 return e; 6629 }, !1) 6630 ) 6631 r.fragmentError = 0; 6632 else if (null === (null == (n = this.transmuxer) ? void 0 : n.error)) { 6633 var o = new Error( 6634 'Found no media in fragment ' + 6635 t.sn + 6636 ' of level ' + 6637 t.level + 6638 ' resetting transmuxer to fallback to playlist timing', 6639 ); 6640 if ( 6641 (0 === r.fragmentError && 6642 (r.fragmentError++, 6643 (t.gap = !0), 6644 this.fragmentTracker.removeFragment(t), 6645 this.fragmentTracker.fragBuffered(t, !0)), 6646 this.warn(o.message), 6647 this.hls.trigger(S.ERROR, { 6648 type: L.MEDIA_ERROR, 6649 details: R.FRAG_PARSING_ERROR, 6650 fatal: !1, 6651 error: o, 6652 frag: t, 6653 reason: 'Found no media in msn ' + t.sn + ' of level "' + r.url + '"', 6654 }), 6655 !this.hls) 6656 ) 6657 return; 6658 this.resetTransmuxer(); 6659 } 6660 (this.state = qr), this.hls.trigger(S.FRAG_PARSED, { frag: t, part: e }); 6661 } else this.warn('level.details undefined'); 6662 }), 6663 (r.resetTransmuxer = function () { 6664 this.transmuxer && (this.transmuxer.destroy(), (this.transmuxer = null)); 6665 }), 6666 (r.recoverWorkerError = function (t) { 6667 var e, r, i; 6668 'demuxerWorker' === t.event && 6669 (this.fragmentTracker.removeAllFragments(), 6670 this.resetTransmuxer(), 6671 this.resetStartWhenNotLoaded( 6672 null != 6673 (e = null != (r = this.levelLastLoaded) ? r : null == (i = this.fragCurrent) ? void 0 : i.level) 6674 ? e 6675 : 0, 6676 ), 6677 this.resetLoadingState()); 6678 }), 6679 a(e, [ 6680 { 6681 key: 'state', 6682 get: function () { 6683 return this._state; 6684 }, 6685 set: function (t) { 6686 var e = this._state; 6687 e !== t && ((this._state = t), this.log(e + '->' + t)); 6688 }, 6689 }, 6690 ]), 6691 e 6692 ); 6693 })(br); 6694 function Zr() { 6695 return self.SourceBuffer || self.WebKitSourceBuffer; 6696 } 6697 function ti(t, e) { 6698 return ( 6699 void 0 === t && (t = ''), 6700 void 0 === e && (e = 9e4), 6701 { type: t, id: -1, pid: -1, inputTimeScale: e, sequenceNumber: -1, samples: [], dropped: 0 } 6702 ); 6703 } 6704 var ei = (function () { 6705 function t() { 6706 (this._audioTrack = void 0), 6707 (this._id3Track = void 0), 6708 (this.frameIndex = 0), 6709 (this.cachedData = null),
6710 (this.basePTS = null), 6711 (this.initPTS = null), 6712 (this.lastPTS = null); 6713 } 6714 var e = t.prototype; 6715 return ( 6716 (e.resetInitSegment = function (t, e, r, i) { 6717 this._id3Track = { 6718 type: 'id3', 6719 id: 3, 6720 pid: -1, 6721 inputTimeScale: 9e4, 6722 sequenceNumber: 0, 6723 samples: [], 6724 dropped: 0, 6725 }; 6726 }), 6727 (e.resetTimeStamp = function (t) { 6728 (this.initPTS = t), this.resetContiguity(); 6729 }), 6730 (e.resetContiguity = function () { 6731 (this.basePTS = null), (this.lastPTS = null), (this.frameIndex = 0); 6732 }), 6733 (e.canParse = function (t, e) { 6734 return !1; 6735 }), 6736 (e.appendFrame = function (t, e, r) {}), 6737 (e.demux = function (t, e) { 6738 this.cachedData && ((t = xt(this.cachedData, t)), (this.cachedData = null)); 6739 var r, 6740 i = st(t, 0), 6741 n = i ? i.length : 0, 6742 a = this._audioTrack, 6743 s = this._id3Track, 6744 o = i 6745 ? (function (t) { 6746 for (var e = dt(t), r = 0; r < e.length; r++) { 6747 var i = e[r]; 6748 if (ut(i)) return mt(i); 6749 } 6750 })(i) 6751 : void 0, 6752 l = t.length; 6753 for ( 6754 (null === this.basePTS || (0 === this.frameIndex && E(o))) && 6755 ((this.basePTS = ri(o, e, this.initPTS)), (this.lastPTS = this.basePTS)), 6756 null === this.lastPTS && (this.lastPTS = this.basePTS), 6757 i && 6758 i.length > 0 && 6759 s.samples.push({ 6760 pts: this.lastPTS, 6761 dts: this.lastPTS, 6762 data: i, 6763 type: Ae, 6764 duration: Number.POSITIVE_INFINITY, 6765 }); 6766 n < l; 6767 6768 ) { 6769 if (this.canParse(t, n)) { 6770 var u = this.appendFrame(a, t, n); 6771 u ? (this.frameIndex++, (this.lastPTS = u.sample.pts), (r = n += u.length)) : (n = l); 6772 } else 6773 lt(t, n) 6774 ? ((i = st(t, n)), 6775 s.samples.push({ 6776 pts: this.lastPTS, 6777 dts: this.lastPTS, 6778 data: i, 6779 type: Ae, 6780 duration: Number.POSITIVE_INFINITY, 6781 }), 6782 (r = n += i.length)) 6783 : n++; 6784 if (n === l && r !== l) { 6785 var h = rt(t, r); 6786 this.cachedData ? (this.cachedData = xt(this.cachedData, h)) : (this.cachedData = h); 6787 } 6788 } 6789 return { audioTrack: a, videoTrack: ti(), id3Track: s, textTrack: ti() }; 6790 }), 6791 (e.demuxSampleAes = function (t, e, r) { 6792 return Promise.reject(new Error('[' + this + '] This demuxer does not support Sample-AES decryption')); 6793 }), 6794 (e.flush = function (t) { 6795 var e = this.cachedData; 6796 return ( 6797 e && ((this.cachedData = null), this.demux(e, 0)), 6798 { audioTrack: this._audioTrack, videoTrack: ti(), id3Track: this._id3Track, textTrack: ti() } 6799 ); 6800 }), 6801 (e.destroy = function () {}), 6802 t 6803 ); 6804 })(), 6805 ri = function (t, e, r) { 6806 return E(t) ? 90 * t : 9e4 * e + (r ? (9e4 * r.baseTime) / r.timescale : 0); 6807 }; 6808 function ii(t, e) { 6809 return 255 === t[e] && 240 == (246 & t[e + 1]); 6810 } 6811 function ni(t, e) { 6812 return 1 & t[e + 1] ? 7 : 9; 6813 } 6814 function ai(t, e) { 6815 return ((3 & t[e + 3]) << 11) | (t[e + 4] << 3) | ((224 & t[e + 5]) >>> 5); 6816 } 6817 function si(t, e) { 6818 return e + 1 < t.length && ii(t, e); 6819 } 6820 function oi(t, e) { 6821 if (si(t, e)) { 6822 var r = ni(t, e); 6823 if (e + r >= t.length) return !1; 6824 var i = ai(t, e); 6825 if (i <= r) return !1; 6826 var n = e + i; 6827 return n === t.length || si(t, n); 6828 } 6829 return !1; 6830 } 6831 function li(t, e, r, i, n) { 6832 if (!t.samplerate) { 6833 var a = (function (t, e, r, i) { 6834 var n, 6835 a, 6836 s, 6837 o, 6838 l = navigator.userAgent.toLowerCase(), 6839 u = i, 6840 h = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; 6841 n = 1 + ((192 & e[r + 2]) >>> 6); 6842 var d = (60 & e[r + 2]) >>> 2; 6843 if (!(d > h.length - 1)) 6844 return ( 6845 (s = (1 & e[r + 2]) << 2), 6846 (s |= (192 & e[r + 3]) >>> 6), 6847 w.log('manifest codec:' + i + ', ADTS type:' + n + ', samplingIndex:' + d), 6848 /firefox/i.test(l) 6849 ? d >= 6
6850 ? ((n = 5), (o = new Array(4)), (a = d - 3)) 6851 : ((n = 2), (o = new Array(2)), (a = d)) 6852 : -1 !== l.indexOf('android') 6853 ? ((n = 2), (o = new Array(2)), (a = d)) 6854 : ((n = 5), 6855 (o = new Array(4)), 6856 (i && (-1 !== i.indexOf('mp4a.40.29') || -1 !== i.indexOf('mp4a.40.5'))) || (!i && d >= 6) 6857 ? (a = d - 3) 6858 : (((i && -1 !== i.indexOf('mp4a.40.2') && ((d >= 6 && 1 === s) || /vivaldi/i.test(l))) || 6859 (!i && 1 === s)) && 6860 ((n = 2), (o = new Array(2))), 6861 (a = d))), 6862 (o[0] = n << 3), 6863 (o[0] |= (14 & d) >> 1), 6864 (o[1] |= (1 & d) << 7), 6865 (o[1] |= s << 3), 6866 5 === n && ((o[1] |= (14 & a) >> 1), (o[2] = (1 & a) << 7), (o[2] |= 8), (o[3] = 0)), 6867 { config: o, samplerate: h[d], channelCount: s, codec: 'mp4a.40.' + n, manifestCodec: u } 6868 ); 6869 t.trigger(S.ERROR, { 6870 type: L.MEDIA_ERROR, 6871 details: R.FRAG_PARSING_ERROR, 6872 fatal: !0, 6873 reason: 'invalid ADTS sampling index:' + d, 6874 }); 6875 })(e, r, i, n); 6876 if (!a) return; 6877 (t.config = a.config), 6878 (t.samplerate = a.samplerate), 6879 (t.channelCount = a.channelCount), 6880 (t.codec = a.codec), 6881 (t.manifestCodec = a.manifestCodec), 6882 w.log('parsed codec:' + t.codec + ', rate:' + a.samplerate + ', channels:' + a.channelCount); 6883 } 6884 } 6885 function ui(t) { 6886 return 9216e4 / t; 6887 } 6888 function hi(t, e, r, i, n) { 6889 var a, 6890 s = i + n * ui(t.samplerate), 6891 o = (function (t, e) { 6892 var r = ni(t, e); 6893 if (e + r <= t.length) { 6894 var i = ai(t, e) - r; 6895 if (i > 0) return { headerLength: r, frameLength: i }; 6896 } 6897 })(e, r); 6898 if (o) { 6899 var l = o.frameLength, 6900 u = o.headerLength, 6901 h = u + l, 6902 d = Math.max(0, r + h - e.length); 6903 d ? (a = new Uint8Array(h - u)).set(e.subarray(r + u, e.length), 0) : (a = e.subarray(r + u, r + h)); 6904 var c = { unit: a, pts: s }; 6905 return d || t.samples.push(c), { sample: c, length: h, missing: d }; 6906 } 6907 var f = e.length - r; 6908 return ( 6909 (a = new Uint8Array(f)).set(e.subarray(r, e.length), 0), 6910 { sample: { unit: a, pts: s }, length: f, missing: -1 } 6911 ); 6912 } 6913 var di = (function (t) { 6914 function e(e, r) { 6915 var i; 6916 return ( 6917 ((i = t.call(this) || this).observer = void 0), (i.config = void 0), (i.observer = e), (i.config = r), i 6918 ); 6919 } 6920 l(e, t); 6921 var r = e.prototype; 6922 return ( 6923 (r.resetInitSegment = function (e, r, i, n) { 6924 t.prototype.resetInitSegment.call(this, e, r, i, n), 6925 (this._audioTrack = { 6926 container: 'audio/adts', 6927 type: 'audio', 6928 id: 2, 6929 pid: -1, 6930 sequenceNumber: 0, 6931 segmentCodec: 'aac', 6932 samples: [], 6933 manifestCodec: r, 6934 duration: n, 6935 inputTimeScale: 9e4, 6936 dropped: 0, 6937 }); 6938 }), 6939 (e.probe = function (t) { 6940 if (!t) return !1; 6941 for (var e = (st(t, 0) || []).length, r = t.length; e < r; e++) 6942 if (oi(t, e)) return w.log('ADTS sync word found !'), !0; 6943 return !1; 6944 }), 6945 (r.canParse = function (t, e) { 6946 return (function (t, e) { 6947 return ( 6948 (function (t, e) { 6949 return e + 5 < t.length; 6950 })(t, e) && 6951 ii(t, e) && 6952 ai(t, e) <= t.length - e 6953 ); 6954 })(t, e); 6955 }), 6956 (r.appendFrame = function (t, e, r) { 6957 li(t, this.observer, e, r, t.manifestCodec); 6958 var i = hi(t, e, r, this.basePTS, this.frameIndex); 6959 if (i && 0 === i.missing) return i; 6960 }), 6961 e 6962 ); 6963 })(ei), 6964 ci = /\/emsg[-/]ID3/i, 6965 fi = (function () { 6966 function t(t, e) { 6967 (this.remainderData = null),
6968 (this.timeOffset = 0), 6969 (this.config = void 0), 6970 (this.videoTrack = void 0), 6971 (this.audioTrack = void 0), 6972 (this.id3Track = void 0), 6973 (this.txtTrack = void 0), 6974 (this.config = e); 6975 } 6976 var e = t.prototype; 6977 return ( 6978 (e.resetTimeStamp = function () {}), 6979 (e.resetInitSegment = function (t, e, r, i) { 6980 var n = (this.videoTrack = ti('video', 1)), 6981 a = (this.audioTrack = ti('audio', 1)), 6982 s = (this.txtTrack = ti('text', 1)); 6983 if (((this.id3Track = ti('id3', 1)), (this.timeOffset = 0), null != t && t.byteLength)) { 6984 var o = Ct(t); 6985 if (o.video) { 6986 var l = o.video, 6987 u = l.id, 6988 h = l.timescale, 6989 d = l.codec; 6990 (n.id = u), (n.timescale = s.timescale = h), (n.codec = d); 6991 } 6992 if (o.audio) { 6993 var c = o.audio, 6994 f = c.id, 6995 g = c.timescale, 6996 v = c.codec; 6997 (a.id = f), (a.timescale = g), (a.codec = v); 6998 } 6999 (s.id = Lt.text), (n.sampleDuration = 0), (n.duration = a.duration = i); 7000 } 7001 }), 7002 (e.resetContiguity = function () { 7003 this.remainderData = null; 7004 }), 7005 (t.probe = function (t) { 7006 return It((t = t.length > 16384 ? t.subarray(0, 16384) : t), ['moof']).length > 0; 7007 }), 7008 (e.demux = function (t, e) { 7009 this.timeOffset = e; 7010 var r = t, 7011 i = this.videoTrack, 7012 n = this.txtTrack; 7013 if (this.config.progressive) { 7014 this.remainderData && (r = xt(this.remainderData, t)); 7015 var a = (function (t) { 7016 var e = { valid: null, remainder: null }, 7017 r = It(t, ['moof']); 7018 if (!r) return e; 7019 if (r.length < 2) return (e.remainder = t), e; 7020 var i = r[r.length - 1]; 7021 return (e.valid = rt(t, 0, i.byteOffset - 8)), (e.remainder = rt(t, i.byteOffset - 8)), e; 7022 })(r); 7023 (this.remainderData = a.remainder), (i.samples = a.valid || new Uint8Array()); 7024 } else i.samples = r; 7025 var s = this.extractID3Track(i, e); 7026 return ( 7027 (n.samples = Ft(e, i)), 7028 { videoTrack: i, audioTrack: this.audioTrack, id3Track: s, textTrack: this.txtTrack } 7029 ); 7030 }), 7031 (e.flush = function () { 7032 var t = this.timeOffset, 7033 e = this.videoTrack, 7034 r = this.txtTrack; 7035 (e.samples = this.remainderData || new Uint8Array()), (this.remainderData = null); 7036 var i = this.extractID3Track(e, this.timeOffset); 7037 return (r.samples = Ft(t, e)), { videoTrack: e, audioTrack: ti(), id3Track: i, textTrack: ti() }; 7038 }), 7039 (e.extractID3Track = function (t, e) { 7040 var r = this.id3Track; 7041 if (t.samples.length) { 7042 var i = It(t.samples, ['emsg']); 7043 i && 7044 i.forEach(function (t) { 7045 var i = (function (t) { 7046 var e = t[0], 7047 r = '', 7048 i = '', 7049 n = 0, 7050 a = 0, 7051 s = 0, 7052 o = 0, 7053 l = 0, 7054 u = 0; 7055 if (0 === e) { 7056 for (; '\0' !== Rt(t.subarray(u, u + 1)); ) (r += Rt(t.subarray(u, u + 1))), (u += 1); 7057 for (r += Rt(t.subarray(u, u + 1)), u += 1; '\0' !== Rt(t.subarray(u, u + 1)); ) 7058 (i += Rt(t.subarray(u, u + 1))), (u += 1); 7059 (i += Rt(t.subarray(u, u + 1))), 7060 (u += 1), 7061 (n = kt(t, 12)), 7062 (a = kt(t, 16)), 7063 (o = kt(t, 20)), 7064 (l = kt(t, 24)), 7065 (u = 28); 7066 } else if (1 === e) { 7067 n = kt(t, (u += 4)); 7068 var h = kt(t, (u += 4)), 7069 d = kt(t, (u += 4)); 7070 for ( 7071 u += 4, 7072 s = Math.pow(2, 32) * h + d, 7073 Number.isSafeInteger(s) || 7074 ((s = Number.MAX_SAFE_INTEGER), 7075 w.warn( 7076 'Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box', 7077 )), 7078 o = kt(t, u),
7079 l = kt(t, (u += 4)), 7080 u += 4; 7081 '\0' !== Rt(t.subarray(u, u + 1)); 7082 7083 ) 7084 (r += Rt(t.subarray(u, u + 1))), (u += 1); 7085 for (r += Rt(t.subarray(u, u + 1)), u += 1; '\0' !== Rt(t.subarray(u, u + 1)); ) 7086 (i += Rt(t.subarray(u, u + 1))), (u += 1); 7087 (i += Rt(t.subarray(u, u + 1))), (u += 1); 7088 } 7089 return { 7090 schemeIdUri: r, 7091 value: i, 7092 timeScale: n, 7093 presentationTime: s, 7094 presentationTimeDelta: a, 7095 eventDuration: o, 7096 id: l, 7097 payload: t.subarray(u, t.byteLength), 7098 }; 7099 })(t); 7100 if (ci.test(i.schemeIdUri)) { 7101 var n = E(i.presentationTime) 7102 ? i.presentationTime / i.timeScale 7103 : e + i.presentationTimeDelta / i.timeScale, 7104 a = 4294967295 === i.eventDuration ? Number.POSITIVE_INFINITY : i.eventDuration / i.timeScale; 7105 a <= 0.001 && (a = Number.POSITIVE_INFINITY); 7106 var s = i.payload; 7107 r.samples.push({ data: s, len: s.byteLength, dts: n, pts: n, type: be, duration: a }); 7108 } 7109 }); 7110 } 7111 return r; 7112 }), 7113 (e.demuxSampleAes = function (t, e, r) { 7114 return Promise.reject(new Error('The MP4 demuxer does not support SAMPLE-AES decryption')); 7115 }), 7116 (e.destroy = function () {}), 7117 t 7118 ); 7119 })(), 7120 gi = null, 7121 vi = [ 7122 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 7123 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 7124 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 7125 ], 7126 mi = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3], 7127 pi = [ 7128 [0, 72, 144, 12], 7129 [0, 0, 0, 0], 7130 [0, 72, 144, 12], 7131 [0, 144, 144, 12], 7132 ], 7133 yi = [0, 1, 1, 4]; 7134 function Ti(t, e, r, i, n) { 7135 if (!(r + 24 > e.length)) { 7136 var a = Ei(e, r); 7137 if (a && r + a.frameLength <= e.length) { 7138 var s = i + n * ((9e4 * a.samplesPerFrame) / a.sampleRate), 7139 o = { unit: e.subarray(r, r + a.frameLength), pts: s, dts: s }; 7140 return ( 7141 (t.config = []), 7142 (t.channelCount = a.channelCount), 7143 (t.samplerate = a.sampleRate), 7144 t.samples.push(o), 7145 { sample: o, length: a.frameLength, missing: 0 } 7146 ); 7147 } 7148 } 7149 } 7150 function Ei(t, e) { 7151 var r = (t[e + 1] >> 3) & 3, 7152 i = (t[e + 1] >> 1) & 3, 7153 n = (t[e + 2] >> 4) & 15, 7154 a = (t[e + 2] >> 2) & 3; 7155 if (1 !== r && 0 !== n && 15 !== n && 3 !== a) { 7156 var s = (t[e + 2] >> 1) & 1, 7157 o = t[e + 3] >> 6, 7158 l = 1e3 * vi[14 * (3 === r ? 3 - i : 3 === i ? 3 : 4) + n - 1], 7159 u = mi[3 * (3 === r ? 0 : 2 === r ? 1 : 2) + a], 7160 h = 3 === o ? 1 : 2, 7161 d = pi[r][i], 7162 c = yi[i], 7163 f = 8 * d * c, 7164 g = Math.floor((d * l) / u + s) * c; 7165 if (null === gi) { 7166 var v = (navigator.userAgent || '').match(/Chrome\/(\d+)/i); 7167 gi = v ? parseInt(v[1]) : 0; 7168 } 7169 return ( 7170 !!gi && gi <= 87 && 2 === i && l >= 224e3 && 0 === o && (t[e + 3] = 128 | t[e + 3]), 7171 { sampleRate: u, channelCount: h, frameLength: g, samplesPerFrame: f } 7172 ); 7173 } 7174 } 7175 function Si(t, e) { 7176 return 255 === t[e] && 224 == (224 & t[e + 1]) && 0 != (6 & t[e + 1]); 7177 } 7178 function Li(t, e) { 7179 return e + 1 < t.length && Si(t, e); 7180 } 7181 function Ri(t, e) { 7182 if (e + 1 < t.length && Si(t, e)) { 7183 var r = Ei(t, e), 7184 i = 4; 7185 null != r && r.frameLength && (i = r.frameLength); 7186 var n = e + i; 7187 return n === t.length || Li(t, n); 7188 } 7189 return !1; 7190 } 7191 var Ai = (function () { 7192 function t(t) { 7193 (this.data = void 0), 7194 (this.bytesAvailable = void 0), 7195 (this.word = void 0), 7196 (this.bitsAvailable = void 0), 7197 (this.data = t), 7198 (this.bytesAvailable = t.byteLength), 7199 (this.word = 0), 7200 (this.bitsAvailable = 0); 7201 } 7202 var e = t.prototype; 7203 return ( 7204 (e.loadWord = function () { 7205 var t = this.data, 7206 e = this.bytesAvailable, 7207 r = t.byteLength - e, 7208 i = new Uint8Array(4), 7209 n = Math.min(4, e); 7210 if (0 === n) throw new Error('no bytes available'); 7211 i.set(t.subarray(r, r + n)), 7212 (this.word = new DataView(i.buffer).getUint32(0)), 7213 (this.bitsAvailable = 8 * n), 7214 (this.bytesAvailable -= n); 7215 }), 7216 (e.skipBits = function (t) { 7217 var e; 7218 (t = Math.min(t, 8 * this.bytesAvailable + this.bitsAvailable)), 7219 this.bitsAvailable > t 7220 ? ((this.word <<= t), (this.bitsAvailable -= t)) 7221 : ((t -= this.bitsAvailable), 7222 (t -= (e = t >> 3) << 3), 7223 (this.bytesAvailable -= e), 7224 this.loadWord(), 7225 (this.word <<= t), 7226 (this.bitsAvailable -= t)); 7227 }), 7228 (e.readBits = function (t) { 7229 var e = Math.min(this.bitsAvailable, t), 7230 r = this.word >>> (32 - e); 7231 if ( 7232 (t > 32 && w.error('Cannot read more than 32 bits at a time'), 7233 (this.bitsAvailable -= e), 7234 this.bitsAvailable > 0) 7235 ) 7236 this.word <<= e; 7237 else { 7238 if (!(this.bytesAvailable > 0)) throw new Error('no bits available'); 7239 this.loadWord(); 7240 } 7241 return (e = t - e) > 0 && this.bitsAvailable ? (r << e) | this.readBits(e) : r; 7242 }), 7243 (e.skipLZ = function () { 7244 var t; 7245 for (t = 0; t < this.bitsAvailable;
7245 ++t) 7246 if (0 != (this.word & (2147483648 >>> t))) return (this.word <<= t), (this.bitsAvailable -= t), t; 7247 return this.loadWord(), t + this.skipLZ(); 7248 }), 7249 (e.skipUEG = function () { 7250 this.skipBits(1 + this.skipLZ()); 7251 }), 7252 (e.skipEG = function () { 7253 this.skipBits(1 + this.skipLZ()); 7254 }), 7255 (e.readUEG = function () { 7256 var t = this.skipLZ(); 7257 return this.readBits(t + 1) - 1; 7258 }), 7259 (e.readEG = function () { 7260 var t = this.readUEG(); 7261 return 1 & t ? (1 + t) >>> 1 : -1 * (t >>> 1); 7262 }), 7263 (e.readBoolean = function () { 7264 return 1 === this.readBits(1); 7265 }), 7266 (e.readUByte = function () { 7267 return this.readBits(8); 7268 }), 7269 (e.readUShort = function () { 7270 return this.readBits(16); 7271 }), 7272 (e.readUInt = function () { 7273 return this.readBits(32); 7274 }), 7275 (e.skipScalingList = function (t) { 7276 for (var e = 8, r = 8, i = 0; i < t; i++) 7277 0 !== r && (r = (e + this.readEG() + 256) % 256), (e = 0 === r ? e : r); 7278 }), 7279 (e.readSPS = function () { 7280 var t, 7281 e, 7282 r, 7283 i = 0, 7284 n = 0, 7285 a = 0, 7286 s = 0, 7287 o = this.readUByte.bind(this), 7288 l = this.readBits.bind(this), 7289 u = this.readUEG.bind(this), 7290 h = this.readBoolean.bind(this), 7291 d = this.skipBits.bind(this), 7292 c = this.skipEG.bind(this), 7293 f = this.skipUEG.bind(this), 7294 g = this.skipScalingList.bind(this); 7295 o(); 7296 var v = o(); 7297 if ( 7298 (l(5), 7299 d(3), 7300 o(), 7301 f(), 7302 100 === v || 7303 110 === v || 7304 122 === v || 7305 244 === v || 7306 44 === v || 7307 83 === v || 7308 86 === v || 7309 118 === v || 7310 128 === v) 7311 ) { 7312 var m = u(); 7313 if ((3 === m && d(1), f(), f(), d(1), h())) 7314 for (e = 3 !== m ? 8 : 12, r = 0; r < e; r++) h() && g(r < 6 ? 16 : 64); 7315 } 7316 f(); 7317 var p = u(); 7318 if (0 === p) u(); 7319 else if (1 === p) for (d(1), c(), c(), t = u(), r = 0; r < t; r++) c(); 7320 f(), d(1); 7321 var y = u(), 7322 T = u(), 7323 E = l(1); 7324 0 === E && d(1), d(1), h() && ((i = u()), (n = u()), (a = u()), (s = u())); 7325 var S = [1, 1]; 7326 if (h() && h()) 7327 switch (o()) { 7328 case 1: 7329 S = [1, 1]; 7330 break; 7331 case 2: 7332 S = [12, 11]; 7333 break; 7334 case 3: 7335 S = [10, 11]; 7336 break; 7337 case 4: 7338 S = [16, 11]; 7339 break; 7340 case 5: 7341 S = [40, 33]; 7342 break; 7343 case 6: 7344 S = [24, 11]; 7345 break; 7346 case 7: 7347 S = [20, 11]; 7348 break; 7349 case 8: 7350 S = [32, 11]; 7351 break; 7352 case 9: 7353 S = [80, 33]; 7354 break; 7355 case 10: 7356 S = [18, 11]; 7357 break; 7358 case 11: 7359 S = [15, 11]; 7360 break; 7361 case 12: 7362 S = [64, 33]; 7363 break; 7364 case 13: 7365 S = [160, 99]; 7366 break; 7367 case 14: 7368 S = [4, 3]; 7369 break; 7370 case 15: 7371 S = [3, 2]; 7372 break; 7373 case 16: 7374 S = [2, 1]; 7375 break; 7376 case 255:
7377 S = [(o() << 8) | o(), (o() << 8) | o()]; 7378 } 7379 return { 7380 width: Math.ceil(16 * (y + 1) - 2 * i - 2 * n), 7381 height: (2 - E) * (T + 1) * 16 - (E ? 2 : 4) * (a + s), 7382 pixelRatio: S, 7383 }; 7384 }), 7385 (e.readSliceType = function () { 7386 return this.readUByte(), this.readUEG(), this.readUEG(); 7387 }), 7388 t 7389 ); 7390 })(), 7391 ki = (function () { 7392 function t(t, e, r) { 7393 (this.keyData = void 0), 7394 (this.decrypter = void 0), 7395 (this.keyData = r), 7396 (this.decrypter = new Ur(e, { removePKCS7Padding: !1 })); 7397 } 7398 var e = t.prototype; 7399 return ( 7400 (e.decryptBuffer = function (t) { 7401 return this.decrypter.decrypt(t, this.keyData.key.buffer, this.keyData.iv.buffer); 7402 }), 7403 (e.decryptAacSample = function (t, e, r) { 7404 var i = this, 7405 n = t[e].unit; 7406 if (!(n.length <= 16)) { 7407 var a = n.subarray(16, n.length - (n.length % 16)), 7408 s = a.buffer.slice(a.byteOffset, a.byteOffset + a.length); 7409 this.decryptBuffer(s).then(function (a) { 7410 var s = new Uint8Array(a); 7411 n.set(s, 16), i.decrypter.isSync() || i.decryptAacSamples(t, e + 1, r); 7412 }); 7413 } 7414 }), 7415 (e.decryptAacSamples = function (t, e, r) { 7416 for (; ; e++) { 7417 if (e >= t.length) return void r(); 7418 if (!(t[e].unit.length < 32 || (this.decryptAacSample(t, e, r), this.decrypter.isSync()))) return; 7419 } 7420 }), 7421 (e.getAvcEncryptedData = function (t) { 7422 for ( 7423 var e = 16 * Math.floor((t.length - 48) / 160) + 16, r = new Int8Array(e), i = 0, n = 32; 7424 n < t.length - 16; 7425 n += 160, i += 16 7426 ) 7427 r.set(t.subarray(n, n + 16), i); 7428 return r; 7429 }), 7430 (e.getAvcDecryptedUnit = function (t, e) { 7431 for (var r = new Uint8Array(e), i = 0, n = 32; n < t.length - 16; n += 160, i += 16) 7432 t.set(r.subarray(i, i + 16), n); 7433 return t; 7434 }), 7435 (e.decryptAvcSample = function (t, e, r, i, n) { 7436 var a = this, 7437 s = Nt(n.data), 7438 o = this.getAvcEncryptedData(s); 7439 this.decryptBuffer(o.buffer).then(function (o) { 7440 (n.data = a.getAvcDecryptedUnit(s, o)), a.decrypter.isSync() || a.decryptAvcSamples(t, e, r + 1, i); 7441 }); 7442 }), 7443 (e.decryptAvcSamples = function (t, e, r, i) { 7444 if (t instanceof Uint8Array) throw new Error('Cannot decrypt samples of type Uint8Array'); 7445 for (; ; e++, r = 0) { 7446 if (e >= t.length) return void i(); 7447 for (var n = t[e].units; !(r >= n.length); r++) { 7448 var a = n[r]; 7449 if ( 7450 !( 7451 a.data.length <= 48 || 7452 (1 !== a.type && 5 !== a.type) || 7453 (this.decryptAvcSample(t, e, r, i, a), this.decrypter.isSync()) 7454 ) 7455 ) 7456 return; 7457 } 7458 } 7459 }), 7460 t 7461 ); 7462 })(), 7463 bi = 188, 7464 Di = (function () { 7465 function t(t, e, r) { 7466 (this.observer = void 0), 7467 (this.config = void 0), 7468 (this.typeSupported = void 0), 7469 (this.sampleAes = null), 7470 (this.pmtParsed = !1), 7471 (this.audioCodec = void 0), 7472 (this.videoCodec = void 0), 7473 (this._duration = 0), 7474 (this._pmtId = -1), 7475 (this._avcTrack = void 0), 7476 (this._audioTrack = void 0), 7477 (this._id3Track = void 0), 7478 (this._txtTrack = void 0), 7479 (this.aacOverFlow = null),
7480 (this.avcSample = null), 7481 (this.remainderData = null), 7482 (this.observer = t), 7483 (this.config = e), 7484 (this.typeSupported = r); 7485 } 7486 (t.probe = function (e) { 7487 var r = t.syncOffset(e); 7488 return r > 0 && w.warn('MPEG2-TS detected but first sync word found @ offset ' + r), -1 !== r; 7489 }), 7490 (t.syncOffset = function (t) { 7491 for (var e = t.length, r = Math.min(940, t.length - bi) + 1, i = 0; i < r; ) { 7492 for (var n = !1, a = -1, s = 0, o = i; o < e; o += bi) { 7493 if (71 !== t[o]) { 7494 if (s) return -1; 7495 break; 7496 } 7497 if ( 7498 (s++, 7499 -1 === a && 0 !== (a = o) && (r = Math.min(a + 18612, t.length - bi) + 1), 7500 n || (n = 0 === wi(t, o)), 7501 n && s > 1 && ((0 === a && s > 2) || o + bi > r)) 7502 ) 7503 return a; 7504 } 7505 i++; 7506 } 7507 return -1; 7508 }), 7509 (t.createTrack = function (t, e) { 7510 return { 7511 container: 'video' === t || 'audio' === t ? 'video/mp2t' : void 0, 7512 type: t, 7513 id: Lt[t], 7514 pid: -1, 7515 inputTimeScale: 9e4, 7516 sequenceNumber: 0, 7517 samples: [], 7518 dropped: 0, 7519 duration: 'audio' === t ? e : void 0, 7520 }; 7521 }); 7522 var e = t.prototype; 7523 return ( 7524 (e.resetInitSegment = function (e, r, i, n) { 7525 (this.pmtParsed = !1), 7526 (this._pmtId = -1), 7527 (this._avcTrack = t.createTrack('video')), 7528 (this._audioTrack = t.createTrack('audio', n)), 7529 (this._id3Track = t.createTrack('id3')), 7530 (this._txtTrack = t.createTrack('text')), 7531 (this._audioTrack.segmentCodec = 'aac'), 7532 (this.aacOverFlow = null), 7533 (this.avcSample = null), 7534 (this.remainderData = null), 7535 (this.audioCodec = r), 7536 (this.videoCodec = i), 7537 (this._duration = n); 7538 }), 7539 (e.resetTimeStamp = function () {}), 7540 (e.resetContiguity = function () { 7541 var t = this._audioTrack, 7542 e = this._avcTrack, 7543 r = this._id3Track; 7544 t && (t.pesData = null), 7545 e && (e.pesData = null), 7546 r && (r.pesData = null), 7547 (this.aacOverFlow = null), 7548 (this.avcSample = null), 7549 (this.remainderData = null); 7550 }), 7551 (e.demux = function (e, r, i, n) { 7552 var a; 7553 void 0 === i && (i = !1), void 0 === n && (n = !1), i || (this.sampleAes = null); 7554 var s = this._avcTrack, 7555 o = this._audioTrack, 7556 l = this._id3Track, 7557 u = this._txtTrack, 7558 h = s.pid, 7559 d = s.pesData, 7560 c = o.pid, 7561 f = l.pid, 7562 g = o.pesData, 7563 v = l.pesData, 7564 m = null, 7565 p = this.pmtParsed, 7566 y = this._pmtId, 7567 T = e.length; 7568 if ( 7569 (this.remainderData && ((T = (e = xt(this.remainderData, e)).length), (this.remainderData = null)), 7570 T < bi && !n) 7571 ) 7572 return (this.remainderData = e), { audioTrack: o, videoTrack: s, id3Track: l, textTrack: u }; 7573 var E = Math.max(0, t.syncOffset(e)); 7574 (T -= (T - E) % bi) < e.byteLength && 7575 !n && 7576 (this.remainderData = new Uint8Array(e.buffer, T, e.buffer.byteLength - T)); 7577 for (var A = 0, k = E; k < T; k += bi) 7578 if (71 === e[k]) { 7579 var b = !!(64 & e[k + 1]), 7580 D = wi(e, k), 7581 I = void 0; 7582 if ((48 & e[k + 3]) >> 4 > 1) { 7583 if ((I = k + 5 + e[k + 4]) === k + bi) continue; 7584 } else I = k + 4; 7585 switch (D) { 7586 case h: 7587 b && (d && (a = Pi(d)) && this.parseAVCPES(s, u, a, !1), (d = { data: [], size: 0 })), 7588 d && (d.data.push(e.subarray(I, k + bi)), (d.size += k + bi - I)); 7589 break; 7590 case c: 7591 if (b) { 7592 if (g && (a = Pi(g))) 7593 switch (o.segmentCodec) { 7594 case 'aac': 7595 this.parseAACPES(o, a); 7596 break; 7597 case 'mp3': 7598 this.parseMPEGPES(o, a); 7599 } 7600 g = { data: [], size: 0 }; 7601 } 7602 g && (g.data.push(e.subarray(I, k + bi)), (g.size += k + bi - I)); 7603 break; 7604 case f: 7605 b && (v && (a = Pi(v)) && this.parseID3PES(l, a), (v = { data: [], size: 0 })), 7606 v && (v.data.push(e.subarray(I, k + bi)), (v.size += k + bi - I)); 7607 break; 7608 case 0: 7609 b && (I += e[I] + 1), (y = this._pmtId = Ci(e, I)); 7610 break; 7611 case y: 7612 b && (I += e[I] + 1);
7613 var C = _i(e, I, this.typeSupported, i); 7614 (h = C.avc) > 0 && (s.pid = h), 7615 (c = C.audio) > 0 && ((o.pid = c), (o.segmentCodec = C.segmentCodec)), 7616 (f = C.id3) > 0 && (l.pid = f), 7617 null === m || 7618 p || 7619 (w.warn( 7620 'MPEG-TS PMT found at ' + 7621 k + 7622 " after unknown PID '" + 7623 m + 7624 "'. Backtracking to sync byte @" + 7625 E + 7626 ' to parse all TS packets.', 7627 ), 7628 (m = null), 7629 (k = E - 188)), 7630 (p = this.pmtParsed = !0); 7631 break; 7632 case 17: 7633 case 8191: 7634 break; 7635 default: 7636 m = D; 7637 } 7638 } else A++; 7639 if (A > 0) { 7640 var _ = new Error('Found ' + A + ' TS packet/s that do not start with 0x47'); 7641 this.observer.emit(S.ERROR, S.ERROR, { 7642 type: L.MEDIA_ERROR, 7643 details: R.FRAG_PARSING_ERROR, 7644 fatal: !1, 7645 error: _, 7646 reason: _.message, 7647 }); 7648 } 7649 (s.pesData = d), (o.pesData = g), (l.pesData = v); 7650 var P = { audioTrack: o, videoTrack: s, id3Track: l, textTrack: u }; 7651 return n && this.extractRemainingSamples(P), P; 7652 }), 7653 (e.flush = function () { 7654 var t, 7655 e = this.remainderData; 7656 return ( 7657 (this.remainderData = null), 7658 (t = e 7659 ? this.demux(e, -1, !1, !0) 7660 : { 7661 videoTrack: this._avcTrack, 7662 audioTrack: this._audioTrack, 7663 id3Track: this._id3Track, 7664 textTrack: this._txtTrack, 7665 }), 7666 this.extractRemainingSamples(t), 7667 this.sampleAes ? this.decrypt(t, this.sampleAes) : t 7668 ); 7669 }), 7670 (e.extractRemainingSamples = function (t) { 7671 var e, 7672 r = t.audioTrack, 7673 i = t.videoTrack, 7674 n = t.id3Track, 7675 a = t.textTrack, 7676 s = i.pesData, 7677 o = r.pesData, 7678 l = n.pesData; 7679 if ( 7680 (s && (e = Pi(s)) ? (this.parseAVCPES(i, a, e, !0), (i.pesData = null)) : (i.pesData = s), 7681 o && (e = Pi(o))) 7682 ) { 7683 switch (r.segmentCodec) { 7684 case 'aac': 7685 this.parseAACPES(r, e); 7686 break; 7687 case 'mp3': 7688 this.parseMPEGPES(r, e); 7689 } 7690 r.pesData = null; 7691 } else 7692 null != o && o.size && w.log('last AAC PES packet truncated,might overlap between fragments'), 7693 (r.pesData = o); 7694 l && (e = Pi(l)) ? (this.parseID3PES(n, e), (n.pesData = null)) : (n.pesData = l); 7695 }), 7696 (e.demuxSampleAes = function (t, e, r) { 7697 var i = this.demux(t, r, !0, !this.config.progressive), 7698 n = (this.sampleAes = new ki(this.observer, this.config, e)); 7699 return this.decrypt(i, n); 7700 }), 7701 (e.decrypt = function (t, e) { 7702 return new Promise(function (r) { 7703 var i = t.audioTrack, 7704 n = t.videoTrack; 7705 i.samples && 'aac' === i.segmentCodec 7706 ? e.decryptAacSamples(i.samples, 0, function () { 7707 n.samples 7708 ? e.decryptAvcSamples(n.samples, 0, 0, function () { 7709 r(t); 7710 }) 7711 : r(t); 7712 }) 7713 : n.samples && 7714 e.decryptAvcSamples(n.samples, 0, 0, function () { 7715 r(t); 7716 }); 7717 }); 7718 }), 7719 (e.destroy = function () { 7720 this._duration = 0; 7721 }),
7722 (e.parseAVCPES = function (t, e, r, i) { 7723 var n, 7724 a = this, 7725 s = this.parseAVCNALu(t, r.data), 7726 o = this.avcSample, 7727 l = !1; 7728 (r.data = null), 7729 o && s.length && !t.audFound && (xi(o, t), (o = this.avcSample = Ii(!1, r.pts, r.dts, ''))), 7730 s.forEach(function (i) { 7731 var s; 7732 switch (i.type) { 7733 case 1: 7734 var u = !1; 7735 n = !0; 7736 var h, 7737 d = i.data; 7738 if (l && d.length > 4) { 7739 var c = new Ai(d).readSliceType(); 7740 (2 !== c && 4 !== c && 7 !== c && 9 !== c) || (u = !0); 7741 } 7742 u && null != (h = o) && h.frame && !o.key && (xi(o, t), (o = a.avcSample = null)), 7743 o || (o = a.avcSample = Ii(!0, r.pts, r.dts, '')), 7744 (o.frame = !0), 7745 (o.key = u); 7746 break; 7747 case 5: 7748 (n = !0), 7749 null != (s = o) && s.frame && !o.key && (xi(o, t), (o = a.avcSample = null)), 7750 o || (o = a.avcSample = Ii(!0, r.pts, r.dts, '')), 7751 (o.key = !0), 7752 (o.frame = !0); 7753 break; 7754 case 6: 7755 (n = !0), Ot(i.data, 1, r.pts, e.samples); 7756 break; 7757 case 7: 7758 if (((n = !0), (l = !0), !t.sps)) { 7759 var f = i.data, 7760 g = new Ai(f).readSPS(); 7761 (t.width = g.width), 7762 (t.height = g.height), 7763 (t.pixelRatio = g.pixelRatio), 7764 (t.sps = [f]), 7765 (t.duration = a._duration); 7766 for (var v = f.subarray(1, 4), m = 'avc1.', p = 0; p < 3; p++) { 7767 var y = v[p].toString(16); 7768 y.length < 2 && (y = '0' + y), (m += y); 7769 } 7770 t.codec = m; 7771 } 7772 break; 7773 case 8: 7774 (n = !0), t.pps || (t.pps = [i.data]); 7775 break; 7776 case 9: 7777 (n = !1), (t.audFound = !0), o && xi(o, t), (o = a.avcSample = Ii(!1, r.pts, r.dts, '')); 7778 break; 7779 case 12: 7780 n = !0; 7781 break; 7782 default: 7783 (n = !1), o && (o.debug += 'unknown NAL ' + i.type + ' '); 7784 } 7785 o && n && o.units.push(i); 7786 }), 7787 i && o && (xi(o, t), (this.avcSample = null)); 7788 }), 7789 (e.getLastNalUnit = function (t) { 7790 var e, 7791 r, 7792 i = this.avcSample; 7793 if (((i && 0 !== i.units.length) || (i = t[t.length - 1]), null != (e = i) && e.units)) { 7794 var n = i.units; 7795 r = n[n.length - 1]; 7796 } 7797 return r; 7798 }), 7799 (e.parseAVCNALu = function (t, e) { 7800 var r, 7801 i, 7802 n = e.byteLength, 7803 a = t.naluState || 0, 7804 s = a, 7805 o = [], 7806 l = 0, 7807 u = -1, 7808 h = 0; 7809 for (-1 === a && ((u = 0), (h = 31 & e[0]), (a = 0), (l = 1)); l < n; ) 7810 if (((r = e[l++]), a)) 7811 if (1 !== a) 7812 if (r) 7813 if (1 === r) { 7814 if (u >= 0) { 7815 var d = { data: e.subarray(u, l - a - 1), type: h }; 7816 o.push(d); 7817 } else { 7818 var c = this.getLastNalUnit(t.samples); 7819 if ( 7820 c && 7821 (s && l <= 4 - s && c.state && (c.data = c.data.subarray(0, c.data.byteLength - s)), 7822 (i = l - a - 1) > 0) 7823 ) { 7824 var f = new Uint8Array(c.data.byteLength + i); 7825 f.set(c.data, 0), f.set(e.subarray(0, i), c.data.byteLength), (c.data = f), (c.state = 0); 7826 } 7827 } 7828 l < n ? ((u = l), (h = 31 & e[l]), (a = 0)) : (a = -1); 7829 } else a = 0; 7830 else a = 3; 7831 else a = r ? 0 : 2; 7832 else a = r ? 0 : 1; 7833 if (u >= 0 && a >= 0) { 7834 var g = { data: e.subarray(u, n), type: h, state: a }; 7835 o.push(g); 7836 } 7837 if (0 === o.length) { 7838 var v = this.getLastNalUnit(t.samples); 7839 if (v) { 7840 var m = new Uint8Array(v.data.byteLength + e.byteLength); 7841 m.set(v.data, 0), m.set(e, v.data.byteLength), (v.data = m); 7842 } 7843 } 7844 return (t.naluState = a), o; 7845 }), 7846 (e.parseAACPES = function (t, e) { 7847 var r, 7848 i, 7849 n, 7850 a = 0, 7851 s = this.aacOverFlow, 7852 o = e.data; 7853 if (s) { 7854 this.aacOverFlow = null; 7855 var l = s.missing, 7856 u = s.sample.unit.byteLength; 7857 if (-1 === l) { 7858 var h = new Uint8Array(u + o.byteLength); 7859 h.set(s.sample.unit, 0), h.set(o, u), (o = h); 7860 } else { 7861 var d = u - l; 7862 s.sample.unit.set(o.subarray(0, l), d), t.samples.push(s.sample), (a = s.missing); 7863 } 7864 } 7865 for (r = a, i = o.length; r < i - 1 && !si(o, r); r++); 7866 if (r !== a) { 7867 var c, 7868 f = r < i - 1; 7869 c = f ? 'AAC PES did not start with ADTS header,offset:' + r : 'No ADTS header found in AAC PES'; 7870 var g = new Error(c); 7871 if ( 7872 (w.warn('parsing error: ' + c), 7873 this.observer.emit(S.ERROR, S.ERROR, { 7874 type: L.MEDIA_ERROR, 7875 details: R.FRAG_PARSING_ERROR, 7876 fatal: !1, 7877 levelRetry: f, 7878 error: g, 7879 reason: c, 7880 }), 7881 !f) 7882 ) 7883 return; 7884 } 7885 if ((li(t, this.observer, o, r, this.audioCodec), void 0 !== e.pts)) n = e.pts; 7886 else { 7887 if (!s) return void w.warn('[tsdemuxer]: AAC PES unknown PTS'); 7888 var v = ui(t.samplerate); 7889 n = s.sample.pts + v; 7890 } 7891 for (var m, p = 0; r < i; ) { 7892 if (((r += (m = hi(t, o, r, n, p)).length), m.missing)) { 7893 this.aacOverFlow = m; 7894 break; 7895 } 7896 for (p++; r < i - 1 && !si(o, r); r++); 7897 } 7898 }), 7899 (e.parseMPEGPES = function (t, e) { 7900 var r = e.data, 7901 i = r.length, 7902 n = 0, 7903 a = 0, 7904 s = e.pts; 7905 if (void 0 !== s) 7906 for (; a < i; ) 7907 if (Li(r, a)) { 7908 var o = Ti(t, r, a, s, n); 7909 if (!o) break; 7910 (a += o.length), n++; 7911 } else a++; 7912 else w.warn('[tsdemuxer]: MPEG PES unknown PTS'); 7913 }), 7914 (e.parseID3PES = function (t, e) { 7915 if (void 0 !== e.pts) { 7916 var r = o({}, e, { type: this._avcTrack ? be : Ae, duration: Number.POSITIVE_INFINITY }); 7917 t.samples.push(r); 7918 } else w.warn('[tsdemuxer]: ID3 PES unknown PTS'); 7919 }), 7920 t 7921 ); 7922 })(); 7923 function Ii(t, e, r, i) { 7924 return { key: t, frame: !1, pts: e, dts: r, units: [], debug: i, length: 0 }; 7925 } 7926 function wi(t, e) { 7927 return ((31 & t[e + 1]) << 8) + t[e + 2]; 7928 } 7929 function Ci(t, e) { 7930 return ((31 & t[e + 10]) << 8) | t[e + 11]; 7931 } 7932 function _i(t, e, r, i) { 7933 var n = { audio: -1, avc: -1, id3: -1, segmentCodec: 'aac' }, 7934 a = e + 3 + (((15 & t[e + 1]) << 8) | t[e + 2]) - 4; 7935 for (e += 12 + (((15 & t[e + 10]) << 8) | t[e + 11]); e < a; ) { 7936 var s = wi(t, e); 7937 switch (t[e]) { 7938 case 207: 7939 if (!i) { 7940 w.log('ADTS AAC with AES-128-CBC frame encryption found in unencrypted stream'); 7941 break; 7942 } 7943 case 15: 7944 -1 === n.audio && (n.audio = s); 7945 break; 7946 case 21: 7947 -1 === n.id3 && (n.id3 = s); 7948 break; 7949 case 219: 7950 if (!i) { 7951 w.log('H.264 with AES-128-CBC slice encryption found in unencrypted stream'); 7952 break; 7953 } 7954 case 27: 7955 -1 === n.avc && (n.avc = s); 7956 break; 7957 case 3: 7958 case 4: 7959 !0 !== r.mpeg && !0 !== r.mp3 7960 ? w.log('MPEG audio found, not supported in this browser') 7961 : -1 === n.audio && ((n.audio = s), (n.segmentCodec = 'mp3')); 7962 break; 7963 case 36: 7964 w.warn('Unsupported HEVC stream type found'); 7965 } 7966 e += 5 + (((15 & t[e + 3]) << 8) | t[e + 4]); 7967 } 7968 return n; 7969 } 7970 function Pi(t) { 7971 var e, 7972 r, 7973 i, 7974 n, 7975 a, 7976 s = 0, 7977 o = t.data; 7978 if (!t || 0 === t.size) return null; 7979 for (; o[0].length < 19 && o.length > 1; ) { 7980 var l = new Uint8Array(o[0].length + o[1].length); 7981 l.set(o[0]), l.set(o[1], o[0].length), (o[0] = l), o.splice(1, 1); 7982 } 7983 if (1 === ((e = o[0])[0] << 16) + (e[1] << 8) + e[2]) { 7984 if ((r = (e[4] << 8) + e[5]) && r > t.size - 6) return null; 7985 var u = e[7]; 7986 192 & u && 7987 ((n = 7988 536870912 * (14 & e[9]) + 7989 4194304 * (255 & e[10]) + 7990 16384 * (254 & e[11]) + 7991 128 * (255 & e[12]) + 7992 (254 & e[13]) / 2), 7993 64 & u 7994 ? n - 7995 (a = 7996 536870912 * (14 & e[14]) + 7997 4194304 * (255 & e[15]) + 7998 16384 * (254 & e[16]) + 7999 128 * (255 & e[17]) + 8000 (254 & e[18]) / 2) > 8001 54e5 && (w.warn(Math.round((n - a) / 9e4) + 's delta between PTS and DTS, align them'), (n = a)) 8002 : (a = n)); 8003 var h = (i = e[8]) + 9; 8004 if (t.size <= h) return null; 8005 t.size -= h; 8006 for (var d = new Uint8Array(t.size), c = 0, f = o.length; c < f; c++) { 8007 var g = (e = o[c]).byteLength; 8008 if (h) { 8009 if (h > g) { 8010 h -= g; 8011 continue; 8012 } 8013 (e = e.subarray(h)), (g -= h), (h = 0); 8014 } 8015 d.set(e, s), (s += g); 8016 } 8017 return r && (r -= i + 3), { data: d, pts: n, dts: a, len: r }; 8018 } 8019 return null; 8020 } 8021 function xi(t, e) { 8022 if (t.units.length && t.frame) { 8023 if (void 0 === t.pts) { 8024 var r = e.samples, 8025 i = r.length; 8026 if (!i) return void e.dropped++; 8027 var n = r[i - 1]; 8028 (t.pts = n.pts), (t.dts = n.dts); 8029 } 8030 e.samples.push(t); 8031 } 8032 t.debug.length && w.log(t.pts + '/' + t.dts + ':' + t.debug); 8033 } 8034 var Fi = (function (t) { 8035 function e() { 8036 return t.apply(this, arguments) || this; 8037 } 8038 l(e, t); 8039 var r = e.prototype; 8040 return ( 8041 (r.resetInitSegment = function (e, r, i, n) { 8042 t.prototype.resetInitSegment.call(this, e, r, i, n), 8043 (this._audioTrack = { 8044 container: 'audio/mpeg', 8045 type: 'audio', 8046 id: 2, 8047 pid: -1, 8048 sequenceNumber: 0, 8049 segmentCodec: 'mp3', 8050 samples: [], 8051 manifestCodec: r, 8052 duration: n, 8053 inputTimeScale: 9e4, 8054 dropped: 0, 8055 }); 8056 }), 8057 (e.probe = function (t) { 8058 if (!t) return !1; 8059 for (var e = (st(t, 0) || []).length, r = t.length; e < r; e++) 8060 if (Ri(t, e)) return w.log('MPEG Audio sync word found !'), !0; 8061 return !1; 8062 }), 8063 (r.canParse = function (t, e) { 8064 return (function (t, e) { 8065 return Si(t, e) && 4 <= t.length - e; 8066 })(t, e); 8067 }), 8068 (r.appendFrame = function (t, e, r) { 8069 if (null !== this.basePTS) return Ti(t, e, r, this.basePTS, this.frameIndex); 8070 }), 8071 e 8072 ); 8073 })(ei), 8074 Mi = (function () { 8075 function t() {} 8076 return ( 8077 (t.getSilentFrame = function (t, e) { 8078 if ('mp4a.40.2' === t) { 8079 if (1 === e) return new Uint8Array([0, 200, 0, 128, 35, 128]); 8080 if (2 === e) return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]); 8081 if (3 === e) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]); 8082 if (4 === e) 8083 return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]); 8084 if (5 === e) 8085 return new Uint8Array([ 8086 0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56, 8087 ]); 8088 if (6 === e) 8089 return new Uint8Array([ 8090 0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 8091 224, 8092 ]); 8093 } else { 8094 if (1 === e) 8095 return new Uint8Array([ 8096 1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 8097 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 8098 90, 90, 90, 90, 90, 90, 90, 90, 94, 8099 ]); 8100 if (2 === e) 8101 return new Uint8Array([ 8102 1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 8103 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 8104 90, 90, 90, 90, 90, 90, 90, 90, 94, 8105 ]); 8106 if (3 === e) 8107 return new Uint8Array([ 8108 1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 8109 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 8110 90, 90, 90, 90, 90, 90, 90, 90, 94, 8111 ]); 8112 } 8113 }), 8114 t 8115 ); 8116 })(), 8117 Oi = Math.pow(2, 32) - 1, 8118 Ni = (function () { 8119 function t() {} 8120 return ( 8121 (t.init = function () { 8122 var e; 8123 for (e in ((t.types = { 8124 avc1: [], 8125 avcC: [], 8126 btrt: [], 8127 dinf: [], 8128 dref: [], 8129 esds: [], 8130 ftyp: [], 8131 hdlr: [], 8132 mdat: [], 8133 mdhd: [], 8134 mdia: [], 8135 mfhd: [], 8136 minf: [], 8137 moof: [], 8138 moov: [], 8139 mp4a: [], 8140 '.mp3': [], 8141 mvex: [], 8142
8142 mvhd: [], 8143 pasp: [], 8144 sdtp: [], 8145 stbl: [], 8146 stco: [], 8147 stsc: [], 8148 stsd: [], 8149 stsz: [], 8150 stts: [], 8151 tfdt: [], 8152 tfhd: [], 8153 traf: [], 8154 trak: [], 8155 trun: [], 8156 trex: [], 8157 tkhd: [], 8158 vmhd: [], 8159 smhd: [], 8160 }), 8161 t.types)) 8162 t.types.hasOwnProperty(e) && 8163 (t.types[e] = [e.charCodeAt(0), e.charCodeAt(1), e.charCodeAt(2), e.charCodeAt(3)]); 8164 var r = new Uint8Array([ 8165 0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 8166 111, 72, 97, 110, 100, 108, 101, 114, 0, 8167 ]), 8168 i = new Uint8Array([ 8169 0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 8170 100, 72, 97, 110, 100, 108, 101, 114, 0, 8171 ]); 8172 t.HDLR_TYPES = { video: r, audio: i }; 8173 var n = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1]), 8174 a = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]); 8175 (t.STTS = t.STSC = t.STCO = a), 8176 (t.STSZ = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])), 8177 (t.VMHD = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])), 8178 (t.SMHD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0])), 8179 (t.STSD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1])); 8180 var s = new Uint8Array([105, 115, 111, 109]), 8181 o = new Uint8Array([97, 118, 99, 49]), 8182 l = new Uint8Array([0, 0, 0, 1]); 8183 (t.FTYP = t.box(t.types.ftyp, s, l, s, o)), (t.DINF = t.box(t.types.dinf, t.box(t.types.dref, n))); 8184 }), 8185 (t.box = function (t) { 8186 for (var e = 8, r = arguments.length, i = new Array(r > 1 ? r - 1 : 0), n = 1; n < r; n++) 8187 i[n - 1] = arguments[n]; 8188 for (var a = i.length, s = a; a--; ) e += i[a].byteLength; 8189 var o = new Uint8Array(e); 8190 for ( 8191 o[0] = (e >> 24) & 255, 8192 o[1] = (e >> 16) & 255, 8193 o[2] = (e >> 8) & 255, 8194 o[3] = 255 & e, 8195 o.set(t, 4), 8196 a = 0, 8197 e = 8; 8198 a < s; 8199 a++ 8200 ) 8201 o.set(i[a], e), (e += i[a].byteLength); 8202 return o; 8203 }), 8204 (t.hdlr = function (e) { 8205 return t.box(t.types.hdlr, t.HDLR_TYPES[e]); 8206 }), 8207 (t.mdat = function (e) { 8208 return t.box(t.types.mdat, e); 8209 }), 8210 (t.mdhd = function (e, r) { 8211 r *= e; 8212 var i = Math.floor(r / (Oi + 1)), 8213 n = Math.floor(r % (Oi + 1)); 8214 return t.box( 8215 t.types.mdhd, 8216 new Uint8Array([ 8217 1, 8218 0, 8219 0, 8220 0, 8221 0, 8222 0, 8223 0, 8224 0, 8225 0, 8226 0, 8227 0, 8228 2, 8229 0, 8230 0, 8231 0, 8232 0, 8233 0, 8234 0, 8235 0, 8236 3, 8237 (e >> 24) & 255, 8238 (e >> 16) & 255, 8239 (e >> 8) & 255, 8240 255 & e, 8241 i >> 24, 8242 (i >> 16) & 255, 8243 (i >> 8) & 255, 8244 255 & i, 8245 n >> 24, 8246 (n >> 16) & 255, 8247 (n >> 8) & 255, 8248 255 & n, 8249 85, 8250 196, 8251 0, 8252 0, 8253 ]), 8254 ); 8255 }), 8256 (t.mdia = function (e) { 8257 return t.box(t.types.mdia, t.mdhd(e.timescale, e.duration), t.hdlr(e.type), t.minf(e)); 8258 }), 8259 (t.mfhd = function (e) { 8260 return t.box( 8261 t.types.mfhd, 8262 new Uint8Array([0, 0, 0, 0, e >> 24, (e >> 16) & 255, (e >> 8) & 255, 255 & e]), 8263 ); 8264 }), 8265 (t.minf = function (e) { 8266 return 'audio' === e.type 8267 ? t.box(t.types.minf, t.box(t.types.smhd, t.SMHD), t.DINF, t.stbl(e)) 8268 : t.box(t.types.minf, t.box(t.types.vmhd, t.VMHD), t.DINF, t.stbl(e)); 8269 }), 8270 (t.moof = function (e, r, i) { 8271 return t.box(t.types.moof, t.mfhd(e), t.traf(i, r)); 8272 }), 8273 (t.moov = function (e) { 8274 for (var r = e.length, i = []; r--; ) i[r] = t.trak(e[r]); 8275 return t.box.apply( 8276 null, 8277 [t.types.moov, t.mvhd(e[0].timescale, e[0].duration)].concat(i).c
8277oncat(t.mvex(e)), 8278 ); 8279 }), 8280 (t.mvex = function (e) { 8281 for (var r = e.length, i = []; r--; ) i[r] = t.trex(e[r]); 8282 return t.box.apply(null, [t.types.mvex].concat(i)); 8283 }), 8284 (t.mvhd = function (e, r) { 8285 r *= e; 8286 var i = Math.floor(r / (Oi + 1)), 8287 n = Math.floor(r % (Oi + 1)), 8288 a = new Uint8Array([ 8289 1, 8290 0, 8291 0, 8292 0, 8293 0, 8294 0, 8295 0, 8296 0, 8297 0, 8298 0, 8299 0, 8300 2, 8301 0, 8302 0, 8303 0, 8304 0, 8305 0, 8306 0, 8307 0, 8308 3, 8309 (e >> 24) & 255, 8310 (e >> 16) & 255, 8311 (e >> 8) & 255, 8312 255 & e, 8313 i >> 24, 8314 (i >> 16) & 255, 8315 (i >> 8) & 255, 8316 255 & i, 8317 n >> 24, 8318 (n >> 16) & 255, 8319 (n >> 8) & 255, 8320 255 & n, 8321 0, 8322 1, 8323 0, 8324 0, 8325 1, 8326 0, 8327 0, 8328 0, 8329 0, 8330 0, 8331 0, 8332 0, 8333 0, 8334 0, 8335 0, 8336 0, 8337 0, 8338 1, 8339 0, 8340 0, 8341 0, 8342 0, 8343 0, 8344 0, 8345 0, 8346 0, 8347 0, 8348 0, 8349 0, 8350 0, 8351 0, 8352 0, 8353 0, 8354 1, 8355 0, 8356 0, 8357 0, 8358 0, 8359 0, 8360 0, 8361 0, 8362 0, 8363 0, 8364 0, 8365 0, 8366 0, 8367 0, 8368 0, 8369 64, 8370 0, 8371 0, 8372 0, 8373 0, 8374 0, 8375 0, 8376 0, 8377 0, 8378 0, 8379 0, 8380 0, 8381 0, 8382 0, 8383 0, 8384 0, 8385 0, 8386 0, 8387 0, 8388 0, 8389 0, 8390 0, 8391 0, 8392 0, 8393 0, 8394 0, 8395 0, 8396 0, 8397 255, 8398 255, 8399 255, 8400 255, 8401 ]); 8402 return t.box(t.types.mvhd, a); 8403 }), 8404 (t.sdtp = function (e) { 8405 var r, 8406 i, 8407 n = e.samples || [], 8408 a = new Uint8Array(4 + n.length); 8409 for (r = 0; r < n.length; r++) 8410 (i = n[r].flags), (a[r + 4] = (i.dependsOn << 4) | (i.isDependedOn << 2) | i.hasRedundancy); 8411 return t.box(t.types.sdtp, a); 8412 }), 8413 (t.stbl = function (e) { 8414 return t.box( 8415 t.types.stbl, 8416 t.stsd(e), 8417 t.box(t.types.stts, t.STTS), 8418 t.box(t.types.stsc, t.STSC), 8419 t.box(t.types.stsz, t.STSZ), 8420 t.box(t.types.stco, t.STCO), 8421 ); 8422 }), 8423 (t.avc1 = function (e) { 8424 var r, 8425 i, 8426 n, 8427 a = [], 8428 s = []; 8429 for (r = 0; r < e.sps.length; r++) 8430 (n = (i = e.sps[r]).byteLength), 8431 a.push((n >>> 8) & 255), 8432 a.push(255 & n), 8433 (a = a.concat(Array.prototype.slice.call(i))); 8434 for (r = 0; r < e.pps.length; r++) 8435 (n = (i = e.pps[r]).byteLength), 8436 s.push((n >>> 8) & 255), 8437 s.push(255 & n), 8438 (s = s.concat(Array.prototype.slice.call(i))); 8439 var o = t.box( 8440 t.types.avcC, 8441 new Uint8Array( 8442 [1, a[3], a[4], a[5], 255, 224 | e.sps.length].concat(a).concat([e.pps.length]).concat(s), 8443 ), 8444 ), 8445 l = e.width, 8446 u = e.height, 8447 h = e.pixelRatio[0], 8448 d = e.pixelRatio[1]; 8449 return t.box( 8450 t.types.avc1, 8451 new Uint8Array([ 8452 0, 8453 0, 8454 0, 8455 0, 8456 0, 8457 0, 8458 0, 8459 1, 8460 0, 8461 0, 8462 0, 8463 0, 8464 0, 8465 0, 8466 0, 8467 0, 8468 0, 8469 0, 8470 0, 8471 0, 8472 0, 8473 0, 8474 0, 8475 0, 8476 (l >> 8) & 255, 8477 255 & l, 8478 (u >> 8) & 255, 8479 255 & u, 8480 0, 8481 72, 8482 0, 8483 0, 8484 0, 8485 72, 8486 0, 8487 0, 8488 0, 8489 0, 8490 0, 8491 0, 8492 0, 8493 1, 8494 18, 8495 100, 8496 97, 8497 105, 8498 108, 8499 121, 8500 109, 8501 111, 8502 116,
8503 105, 8504 111, 8505 110, 8506 47, 8507 104, 8508 108, 8509 115, 8510 46, 8511 106, 8512 115, 8513 0, 8514 0, 8515 0, 8516 0, 8517 0, 8518 0, 8519 0, 8520 0, 8521 0, 8522 0, 8523 0, 8524 0, 8525 0, 8526 0, 8527 24, 8528 17, 8529 17, 8530 ]), 8531 o, 8532 t.box(t.types.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192])), 8533 t.box( 8534 t.types.pasp, 8535 new Uint8Array([ 8536 h >> 24, 8537 (h >> 16) & 255, 8538 (h >> 8) & 255, 8539 255 & h, 8540 d >> 24, 8541 (d >> 16) & 255, 8542 (d >> 8) & 255, 8543 255 & d, 8544 ]), 8545 ), 8546 ); 8547 }), 8548 (t.esds = function (t) { 8549 var e = t.config.length; 8550 return new Uint8Array( 8551 [0, 0, 0, 0, 3, 23 + e, 0, 1, 0, 4, 15 + e, 64, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5] 8552 .concat([e]) 8553 .concat(t.config) 8554 .concat([6, 1, 2]), 8555 ); 8556 }), 8557 (t.mp4a = function (e) { 8558 var r = e.samplerate; 8559 return t.box( 8560 t.types.mp4a, 8561 new Uint8Array([ 8562 0, 8563 0, 8564 0, 8565 0, 8566 0, 8567 0, 8568 0, 8569 1, 8570 0, 8571 0, 8572 0, 8573 0, 8574 0, 8575 0, 8576 0, 8577 0, 8578 0, 8579 e.channelCount, 8580 0, 8581 16, 8582 0, 8583 0, 8584 0, 8585 0, 8586 (r >> 8) & 255, 8587 255 & r, 8588 0, 8589 0, 8590 ]), 8591 t.box(t.types.esds, t.esds(e)), 8592 ); 8593 }), 8594 (t.mp3 = function (e) { 8595 var r = e.samplerate; 8596 return t.box( 8597 t.types['.mp3'], 8598 new Uint8Array([ 8599 0, 8600 0, 8601 0, 8602 0, 8603 0, 8604 0, 8605 0, 8606 1, 8607 0, 8608 0, 8609 0, 8610 0, 8611 0, 8612 0, 8613 0, 8614 0, 8615 0, 8616 e.channelCount, 8617 0, 8618 16, 8619 0, 8620 0, 8621 0, 8622 0, 8623 (r >> 8) & 255, 8624 255 & r, 8625 0, 8626 0, 8627 ]), 8628 ); 8629 }), 8630 (t.stsd = function (e) { 8631 return 'audio' === e.type 8632 ? 'mp3' === e.segmentCodec && 'mp3' === e.codec 8633 ? t.box(t.types.stsd, t.STSD, t.mp3(e)) 8634 : t.box(t.types.stsd, t.STSD, t.mp4a(e)) 8635 : t.box(t.types.stsd, t.STSD, t.avc1(e)); 8636 }), 8637 (t.tkhd = function (e) { 8638 var r = e.id, 8639 i = e.duration * e.timescale, 8640 n = e.width, 8641 a = e.height, 8642 s = Math.floor(i / (Oi + 1)), 8643 o = Math.floor(i % (Oi + 1)); 8644 return t.box( 8645 t.types.tkhd, 8646 new Uint8Array([ 8647 1, 8648 0, 8649 0, 8650 7, 8651 0, 8652 0, 8653 0, 8654 0, 8655 0, 8656 0, 8657 0, 8658 2, 8659 0, 8660 0, 8661 0, 8662 0, 8663 0, 8664 0, 8665 0, 8666 3, 8667 (r >> 24) & 255, 8668 (r >> 16) & 255, 8669 (r >> 8) & 255, 8670 255 & r, 8671 0, 8672 0, 8673 0, 8674 0, 8675 s >> 24, 8676 (s >> 16) & 255, 8677 (s >> 8) & 255, 8678 255 & s, 8679 o >> 24, 8680 (o >> 16) & 255, 8681 (o >> 8) & 255, 8682 255 & o, 8683 0, 8684 0, 8685 0, 8686 0, 8687 0, 8688 0, 8689 0, 8690 0, 8691 0, 8692 0, 8693 0, 8694 0, 8695 0, 8696 0, 8697 0, 8698 0, 8699 0, 8700 1, 8701 0, 8702 0, 8703 0, 8704 0, 8705 0, 8706 0, 8707 0, 8708 0, 8709 0, 8710 0, 8711 0, 8712 0, 8713 0, 8714 0, 8715 0, 8716 1, 8717 0, 8718 0, 8719 0, 8720 0, 8721 0, 8722 0, 8723 0, 8724 0, 8725 0, 8726 0, 8727 0, 8728 0, 8729 0, 8730 0, 8731 64, 8732 0, 8733 0, 8734 0, 8735 (n >> 8) & 255, 8736 255 & n, 8737 0, 8738 0, 8739 (a >> 8) & 255, 8740 255 & a, 8741 0, 8742 0, 8743 ]), 8744 ); 8745 }), 8746 (t.traf = function (e, r) { 8747 var i = t.sdtp(e), 8748 n = e.id, 8749 a = Math.floor(r / (Oi + 1)), 8750 s = Math.floor(r % (Oi + 1)); 8751 return t.box( 8752 t.types.traf, 8753 t.box(t.types.tfhd, new Uint8Array([0, 0, 0, 0, n >> 24, (n >> 16) & 255, (n >> 8) & 255, 255 & n])), 8754 t.box( 8755 t.types.tfdt, 8756 new Uint8Array([ 8757 1, 8758 0, 8759 0, 8760 0, 8761 a >> 24, 8762 (a >> 16) & 255, 8763 (a >> 8) & 255, 8764 255 & a, 8765 s >> 24, 8766 (s >> 16) & 255, 8767 (s >> 8) & 255, 8768 255 & s, 8769 ]), 8770 ), 8771 t.trun(e, i.length + 16 + 20 + 8 + 16 + 8 + 8), 8772 i, 8773 ); 8774 }), 8775 (t.trak = function (e) { 8776 return (e.duration = e.duration || 4294967295), t.box(t.types.trak, t.tkhd(e), t.mdia(e)); 8777 }), 8778 (t.trex = function (e) { 8779 var r = e.id; 8780 return t.box( 8781 t.types.trex, 8782 new Uint8Array([ 8783 0, 8784 0, 8785 0, 8786 0, 8787 r >> 24, 8788 (r >> 16) & 255, 8789 (r >> 8) & 255, 8790 255 & r, 8791 0, 8792 0, 8793 0, 8794 1, 8795 0, 8796 0, 8797 0, 8798 0, 8799 0, 8800 0, 8801 0, 8802 0, 8803 0, 8804 1, 8805 0, 8806 1, 8807 ]), 8808 ); 8809 }), 8810 (t.trun = function (e, r) { 8811 var i, 8812 n, 8813 a, 8814 s, 8815 o, 8816 l, 8817 u = e.samples || [], 8818 h = u.length, 8819 d = 12 + 16 * h, 8820 c = new Uint8Array(d); 8821 for ( 8822 r += 8 + d, 8823 c.set( 8824 [ 8825 'video' === e.type ? 1 : 0, 8826 0, 8827 15, 8828 1, 8829 (h >>> 24) & 255, 8830 (h >>> 16) & 255, 8831 (h >>> 8) & 255, 8832 255 & h, 8833 (r >>> 24) & 255, 8834 (r >>> 16) & 255, 8835 (r >>> 8) & 255, 8836 255 & r, 8837 ], 8838 0, 8839 ), 8840 i = 0; 8841 i < h; 8842 i++ 8843 ) 8844 (a = (n = u[i]).duration), 8845 (s = n.size), 8846 (o = n.flags), 8847 (l = n.cts), 8848 c.set( 8849 [ 8850 (a >>> 24) & 255, 8851 (a >>> 16) & 255, 8852 (a >>> 8) & 255, 8853 255 & a, 8854 (s >>> 24) & 255, 8855 (s >>> 16) & 255, 8856 (s >>> 8) & 255, 8857 255 & s, 8858 (o.isLeading << 2) | o.dependsOn, 8859 (o.isDependedOn << 6) | (o.hasRedundancy << 4) | (o.paddingValue << 1) | o.isNonSync, 8860 61440 & o.degradPrio, 8861 15 & o.degradPrio, 8862 (l >>> 24) & 255, 8863 (l >>> 16) & 255, 8864 (l >>> 8) & 255, 8865 255 & l, 8866 ], 8867 12 + 16 * i, 8868 );
8869 return t.box(t.types.trun, c); 8870 }), 8871 (t.initSegment = function (e) { 8872 t.types || t.init(); 8873 var r = t.moov(e), 8874 i = new Uint8Array(t.FTYP.byteLength + r.byteLength); 8875 return i.set(t.FTYP), i.set(r, t.FTYP.byteLength), i; 8876 }), 8877 t 8878 ); 8879 })(); 8880 function Ui(t, e, r, i) { 8881 void 0 === r && (r = 1), void 0 === i && (i = !1); 8882 var n = t * e * r; 8883 return i ? Math.round(n) : n; 8884 } 8885 function Bi(t, e) { 8886 return void 0 === e && (e = !1), Ui(t, 1e3, 1 / 9e4, e); 8887 } 8888 (Ni.types = void 0), 8889 (Ni.HDLR_TYPES = void 0), 8890 (Ni.STTS = void 0), 8891 (Ni.STSC = void 0), 8892 (Ni.STCO = void 0), 8893 (Ni.STSZ = void 0), 8894 (Ni.VMHD = void 0), 8895 (Ni.SMHD = void 0), 8896 (Ni.STSD = void 0), 8897 (Ni.FTYP = void 0), 8898 (Ni.DINF = void 0); 8899 var Gi = null, 8900 Ki = null, 8901 Hi = (function () { 8902 function t(t, e, r, i) { 8903 if ( 8904 ((this.observer = void 0), 8905 (this.config = void 0), 8906 (this.typeSupported = void 0), 8907 (this.ISGenerated = !1), 8908 (this._initPTS = null), 8909 (this._initDTS = null), 8910 (this.nextAvcDts = null), 8911 (this.nextAudioPts = null), 8912 (this.videoSampleDuration = null), 8913 (this.isAudioContiguous = !1), 8914 (this.isVideoContiguous = !1), 8915 (this.observer = t), 8916 (this.config = e), 8917 (this.typeSupported = r), 8918 (this.ISGenerated = !1), 8919 null === Gi) 8920 ) { 8921 var n = (navigator.userAgent || '').match(/Chrome\/(\d+)/i); 8922 Gi = n ? parseInt(n[1]) : 0; 8923 } 8924 if (null === Ki) { 8925 var a = navigator.userAgent.match(/Safari\/(\d+)/i); 8926 Ki = a ? parseInt(a[1]) : 0; 8927 } 8928 } 8929 var e = t.prototype; 8930 return ( 8931 (e.destroy = function () {}), 8932 (e.resetTimeStamp = function (t) { 8933 w.log('[mp4-remuxer]: initPTS & initDTS reset'), (this._initPTS = this._initDTS = t); 8934 }), 8935 (e.resetNextTimestamp = function () { 8936 w.log('[mp4-remuxer]: reset next timestamp'), 8937 (this.isVideoContiguous = !1), 8938 (this.isAudioContiguous = !1); 8939 }), 8940 (e.resetInitSegment = function () { 8941 w.log('[mp4-remuxer]: ISGenerated flag reset'), (this.ISGenerated = !1); 8942 }), 8943 (e.getVideoStartPts = function (t) { 8944 var e = !1, 8945 r = t.reduce(function (t, r) { 8946 var i = r.pts - t; 8947 return i < -4294967296 ? ((e = !0), Vi(t, r.pts)) : i > 0 ? t : r.pts; 8948 }, t[0].pts); 8949 return e && w.debug('PTS rollover detected'), r; 8950 }), 8951 (e.remux = function (t, e, r, i, n, a, s, o) { 8952 var l, 8953 u, 8954 h, 8955 d, 8956 c, 8957 f, 8958 g = n, 8959 v = n, 8960 m = t.pid > -1, 8961 p = e.pid > -1, 8962 y = e.samples.length, 8963 T = t.samples.length > 0, 8964 E = (s && y > 0) || y > 1; 8965 if (((!m || T) && (!p || E)) || this.ISGenerated || s) { 8966 this.ISGenerated || (h = this.generateIS(t, e, n, a)); 8967 var S, 8968 L = this.isVideoContiguous, 8969 R = -1; 8970 if ( 8971 E && 8972 ((R = (function (t) { 8973 for (var e = 0; e < t.length; e++) if (t[e].key) return e; 8974 return -1; 8975 })(e.samples)), 8976 !L && this.config.forceKeyFrameOnDiscontinuity) 8977 ) 8978 if (((f = !0), R > 0)) { 8979 w.warn('[mp4-remuxer]: Dropped ' + R + ' out of ' + y + ' video samples due to a missing keyframe'); 8980 var A = this.getVideoStartPts(e.samples); 8981 (e.samples = e.samples.slice(R)), 8982 (e.dropped += R), 8983 (S = v += (e.samples[0].pts - A) / e.inputTimeScale); 8984 } else 8985 -1 === R && (w.warn('[mp4-remuxer]: No keyframe found out of ' + y + ' video samples'), (f = !1)); 8986 if (this.ISGenerated) { 8987 if (T && E) { 8988 var k = this.getVideoStartPts(e.samples), 8989 b = (Vi(t.samples[0].pts, k) - k) / e.inputTimeScale; 8990 (g += Math.max(0, b)), (v += Math.max(0, -b)); 8991 } 8992 if (T) { 8993 if ( 8994 (t.samplerate || 8995 (w.warn('[mp4-remuxer]: regenerate InitSegment as audio detected'), 8996 (h = this.generateIS(t, e, n, a))), 8997 (u = this.remuxAudio(t, g, this.isAudioContiguous, a, p || E || o === ve ? v : void 0)), 8998 E) 8999 ) { 9000 var D = u ? u.endPTS - u.startPTS : 0; 9001 e.inputTimeScale || 9002 (w.warn('[mp4-remuxer]: regenerate InitSegment as video detected'), 9003 (h = this.generateIS(t, e, n, a))), 9004 (l = this.remuxVideo(e, v, L, D)); 9005 } 9006 } else E && (l = this.remuxVideo(e, v, L, 0)); 9007 l && ((l.firstKeyFrame = R), (l.independent = -1 !== R), (l.firstKeyFramePTS = S)); 9008 } 9009 } 9010 return ( 9011 this.ISGenerated && 9012 this._initPTS && 9013 this._initDTS && 9014 (r.samples.length && (c = Yi(r, n, this._initPTS, this._initDTS)), 9015 i.samples.length && (d = Wi(i, n, this._initPTS))), 9016 { audio: u, video: l, initSegment: h, independent: f, text: d, id3: c } 9017 ); 9018 }), 9019 (e.generateIS = function (t, e, r, i) { 9020 var n, 9021 a, 9022 s, 9023 o = t.samples, 9024 l = e.samples,
9025 u = this.typeSupported, 9026 h = {}, 9027 d = this._initPTS, 9028 c = !d || i, 9029 f = 'audio/mp4'; 9030 if ( 9031 (c && (n = a = 1 / 0), 9032 t.config && 9033 o.length && 9034 ((t.timescale = t.samplerate), 9035 'mp3' === t.segmentCodec && 9036 (u.mpeg ? ((f = 'audio/mpeg'), (t.codec = '')) : u.mp3 && (t.codec = 'mp3')), 9037 (h.audio = { 9038 id: 'audio', 9039 container: f, 9040 codec: t.codec, 9041 initSegment: 'mp3' === t.segmentCodec && u.mpeg ? new Uint8Array(0) : Ni.initSegment([t]), 9042 metadata: { channelCount: t.channelCount }, 9043 }), 9044 c && 9045 ((s = t.inputTimeScale), 9046 d && s === d.timescale ? (c = !1) : (n = a = o[0].pts - Math.round(s * r)))), 9047 e.sps && 9048 e.pps && 9049 l.length && 9050 ((e.timescale = e.inputTimeScale), 9051 (h.video = { 9052 id: 'main', 9053 container: 'video/mp4', 9054 codec: e.codec, 9055 initSegment: Ni.initSegment([e]), 9056 metadata: { width: e.width, height: e.height }, 9057 }), 9058 c)) 9059 ) 9060 if (((s = e.inputTimeScale), d && s === d.timescale)) c = !1; 9061 else { 9062 var g = this.getVideoStartPts(l), 9063 v = Math.round(s * r); 9064 (a = Math.min(a, Vi(l[0].dts, g) - v)), (n = Math.min(n, g - v)); 9065 } 9066 if (Object.keys(h).length) 9067 return ( 9068 (this.ISGenerated = !0), 9069 c 9070 ? ((this._initPTS = { baseTime: n, timescale: s }), (this._initDTS = { baseTime: a, timescale: s })) 9071 : (n = s = void 0), 9072 { tracks: h, initPTS: n, timescale: s } 9073 ); 9074 }), 9075 (e.remuxVideo = function (t, e, r, i) { 9076 var n, 9077 a, 9078 s = t.inputTimeScale, 9079 l = t.samples, 9080 u = [], 9081 h = l.length, 9082 d = this._initPTS, 9083 c = this.nextAvcDts, 9084 f = 8, 9085 g = this.videoSampleDuration, 9086 v = Number.POSITIVE_INFINITY, 9087 m = Number.NEGATIVE_INFINITY, 9088 p = !1; 9089 (r && null !== c) || (c = e * s - (l[0].pts - Vi(l[0].dts, l[0].pts))); 9090 for (var y = (d.baseTime * s) / d.timescale, T = 0; T < h; T++) { 9091 var E = l[T]; 9092 (E.pts = Vi(E.pts - y, c)), (E.dts = Vi(E.dts - y, c)), E.dts < l[T > 0 ? T - 1 : T].dts && (p = !0); 9093 } 9094 p && 9095 l.sort(function (t, e) { 9096 var r = t.dts - e.dts, 9097 i = t.pts - e.pts; 9098 return r || i; 9099 }), 9100 (n = l[0].dts); 9101 var A = (a = l[l.length - 1].dts) - n, 9102 k = A ? Math.round(A / (h - 1)) : g || t.inputTimeScale / 30; 9103 if (r) { 9104 var b = n - c, 9105 D = b > k, 9106 I = b < -1; 9107 if ( 9108 (D || I) && 9109 (D 9110 ? w.warn('AVC: ' + Bi(b, !0) + ' ms (' + b + 'dts) hole between fragments detected, filling it') 9111 : w.warn('AVC: ' + Bi(-b, !0) + ' ms (' + b + 'dts) overlapping between fragments detected'), 9112 !I || c >= l[0].pts) 9113 ) { 9114 n = c; 9115 var C = l[0].pts - b; 9116 (l[0].dts = n), 9117 (l[0].pts = C), 9118 w.log( 9119 'Video: First PTS/DTS adjusted: ' + Bi(C, !0) + '/' + Bi(n, !0) + ', delta: ' + Bi(b, !0) + ' ms', 9120 ); 9121 } 9122 } 9123 n = Math.max(0, n); 9124 for (var _ = 0, P = 0, x = 0; x < h; x++) { 9125 for (var F = l[x], M = F.units, O = M.length, N = 0, U = 0; U < O; U++) N += M[U].data.length; 9126 (P += N), 9127 (_ += O), 9128 (F.length = N), 9129 (F.dts = Math.max(F.dts, n)), 9130 (v = Math.min(F.pts, v)), 9131 (m = Math.max(F.pts, m)); 9132 } 9133 a = l[h - 1].dts; 9134 var B, 9135 G = P + 4 * _ + 8; 9136 try { 9137 B = new Uint8Array(G); 9138 } catch (t) { 9139 return void this.observer.emit(S.ERROR, S.ERROR, { 9140 type: L.MUX_ERROR,
9141 details: R.REMUX_ALLOC_ERROR, 9142 fatal: !1, 9143 error: t, 9144 bytes: G, 9145 reason: 'fail allocating video mdat ' + G, 9146 }); 9147 } 9148 var K = new DataView(B.buffer); 9149 K.setUint32(0, G), B.set(Ni.types.mdat, 4); 9150 for ( 9151 var H = !1, 9152 V = Number.POSITIVE_INFINITY, 9153 Y = Number.POSITIVE_INFINITY, 9154 W = Number.NEGATIVE_INFINITY, 9155 j = Number.NEGATIVE_INFINITY, 9156 q = 0; 9157 q < h; 9158 q++ 9159 ) { 9160 for (var X = l[q], z = X.units, Q = 0, $ = 0, J = z.length; $ < J; $++) { 9161 var Z = z[$], 9162 tt = Z.data, 9163 et = Z.data.byteLength; 9164 K.setUint32(f, et), (f += 4), B.set(tt, f), (f += et), (Q += 4 + et); 9165 } 9166 var rt = void 0; 9167 if (q < h - 1) (g = l[q + 1].dts - X.dts), (rt = l[q + 1].pts - X.pts); 9168 else { 9169 var it = this.config, 9170 nt = q > 0 ? X.dts - l[q - 1].dts : k; 9171 if ( 9172 ((rt = q > 0 ? X.pts - l[q - 1].pts : k), it.stretchShortVideoTrack && null !== this.nextAudioPts) 9173 ) { 9174 var at = Math.floor(it.maxBufferHole * s), 9175 st = (i ? v + i * s : this.nextAudioPts) - X.pts; 9176 st > at 9177 ? ((g = st - nt) < 0 ? (g = nt) : (H = !0), 9178 w.log( 9179 '[mp4-remuxer]: It is approximately ' + 9180 st / 90 + 9181 ' ms to the next segment; using duration ' + 9182 g / 90 + 9183 ' ms for the last video frame.', 9184 )) 9185 : (g = nt); 9186 } else g = nt; 9187 } 9188 var ot = Math.round(X.pts - X.dts); 9189 (V = Math.min(V, g)), 9190 (W = Math.max(W, g)), 9191 (Y = Math.min(Y, rt)), 9192 (j = Math.max(j, rt)), 9193 u.push(new qi(X.key, g, Q, ot)); 9194 } 9195 if (u.length) 9196 if (Gi) { 9197 if (Gi < 70) { 9198 var lt = u[0].flags; 9199 (lt.dependsOn = 2), (lt.isNonSync = 0); 9200 } 9201 } else if (Ki && j - Y < W - V && k / W < 0.025 && 0 === u[0].cts) { 9202 w.warn( 9203 'Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration.', 9204 ); 9205 for (var ut = n, ht = 0, dt = u.length; ht < dt; ht++) { 9206 var ct = ut + u[ht].duration, 9207 ft = ut + u[ht].cts; 9208 if (ht < dt - 1) { 9209 var gt = ct + u[ht + 1].cts; 9210 u[ht].duration = gt - ft; 9211 } else u[ht].duration = ht ? u[ht - 1].duration : k; 9212 (u[ht].cts = 0), (ut = ct); 9213 } 9214 } 9215 (g = H || !g ? k : g), 9216 (this.nextAvcDts = c = a + g), 9217 (this.videoSampleDuration = g), 9218 (this.isVideoContiguous = !0); 9219 var vt = { 9220 data1: Ni.moof(t.sequenceNumber++, n, o({}, t, { samples: u })), 9221 data2: B, 9222 startPTS: v / s, 9223 endPTS: (m + g) / s, 9224 startDTS: n / s, 9225 endDTS: c / s, 9226 type: 'video', 9227 hasAudio: !1, 9228 hasVideo: !0, 9229 nb: u.length, 9230 dropped: t.dropped, 9231 }; 9232 return (t.samples = []), (t.dropped = 0), vt; 9233 }), 9234 (e.remuxAudio = function (t, e, r, i, n) { 9235 var a = t.inputTimeScale, 9236 s = a / (t.samplerate ? t.samplerate : a), 9237 l = 'aac' === t.segmentCodec ? 1024 : 1152, 9238 u = l * s, 9239 h = this._initPTS,
9240 d = 'mp3' === t.segmentCodec && this.typeSupported.mpeg, 9241 c = [], 9242 f = void 0 !== n, 9243 g = t.samples, 9244 v = d ? 0 : 8, 9245 m = this.nextAudioPts || -1, 9246 p = e * a, 9247 y = (h.baseTime * a) / h.timescale; 9248 if ( 9249 ((this.isAudioContiguous = r = 9250 r || 9251 (g.length && m > 0 && ((i && Math.abs(p - m) < 9e3) || Math.abs(Vi(g[0].pts - y, p) - m) < 20 * u))), 9252 g.forEach(function (t) { 9253 t.pts = Vi(t.pts - y, p); 9254 }), 9255 !r || m < 0) 9256 ) { 9257 if ( 9258 ((g = g.filter(function (t) { 9259 return t.pts >= 0; 9260 })), 9261 !g.length) 9262 ) 9263 return; 9264 m = 0 === n ? 0 : i && !f ? Math.max(0, p) : g[0].pts; 9265 } 9266 if ('aac' === t.segmentCodec) 9267 for (var T = this.config.maxAudioFramesDrift, E = 0, A = m; E < g.length; E++) { 9268 var k = g[E], 9269 b = k.pts, 9270 D = b - A, 9271 I = Math.abs((1e3 * D) / a); 9272 if (D <= -T * u && f) 9273 0 === E && 9274 (w.warn( 9275 'Audio frame @ ' + 9276 (b / a).toFixed(3) + 9277 's overlaps nextAudioPts by ' + 9278 Math.round((1e3 * D) / a) + 9279 ' ms.', 9280 ), 9281 (this.nextAudioPts = m = A = b)); 9282 else if (D >= T * u && I < 1e4 && f) { 9283 var C = Math.round(D / u); 9284 (A = b - C * u) < 0 && (C--, (A += u)), 9285 0 === E && (this.nextAudioPts = m = A), 9286 w.warn( 9287 '[mp4-remuxer]: Injecting ' + 9288 C + 9289 ' audio frame @ ' + 9290 (A / a).toFixed(3) + 9291 's due to ' + 9292 Math.round((1e3 * D) / a) + 9293 ' ms gap.', 9294 ); 9295 for (var _ = 0; _ < C; _++) { 9296 var P = Math.max(A, 0), 9297 x = Mi.getSilentFrame(t.manifestCodec || t.codec, t.channelCount); 9298 x || 9299 (w.log( 9300 '[mp4-remuxer]: Unable to get silent frame for given audio codec; duplicating last frame instead.', 9301 ), 9302 (x = k.unit.subarray())), 9303 g.splice(E, 0, { unit: x, pts: P }), 9304 (A += u), 9305 E++; 9306 } 9307 } 9308 (k.pts = A), (A += u); 9309 } 9310 for (var F, M = null, O = null, N = 0, U = g.length; U--; ) N += g[U].unit.byteLength; 9311 for (var B = 0, G = g.length; B < G; B++) { 9312 var K = g[B], 9313 H = K.unit, 9314 V = K.pts; 9315 if (null !== O) c[B - 1].duration = Math.round((V - O) / s); 9316 else { 9317 if ((r && 'aac' === t.segmentCodec && (V = m), (M = V), !(N > 0))) return; 9318 N += v; 9319 try { 9320 F = new Uint8Array(N); 9321 } catch (t) { 9322 return void this.observer.emit(S.ERROR, S.ERROR, { 9323 type: L.MUX_ERROR, 9324 details: R.REMUX_ALLOC_ERROR, 9325 fatal: !1, 9326 error: t, 9327 bytes: N, 9328 reason: 'fail allocating audio mdat ' + N, 9329 }); 9330 } 9331 d || (new DataView(F.buffer).setUint32(0, N), F.set(Ni.types.mdat, 4)); 9332 } 9333 F.set(H, v); 9334 var Y = H.byteLength; 9335 (v += Y), c.push(new qi(!0, l, Y, 0)), (O = V); 9336 } 9337 var W = c.length; 9338 if (W) { 9339 var j = c[c.length - 1]; 9340 this.nextAudioPts = m = O + s * j.duration; 9341 var q = d ? new Uint8Array(0) : Ni.moof(t.sequenceNumber++, M / s, o({}, t, { samples: c })); 9342 t.samples = []; 9343 var X = M / a, 9344 z = m / a, 9345 Q = { 9346 data1: q, 9347 data2: F, 9348 startPTS: X, 9349 endPTS: z, 9350 startDTS: X, 9351 endDTS: z, 9352 type: 'audio', 9353 hasAudio: !0, 9354 hasVideo: !1, 9355 nb: W, 9356 }; 9357 return (this.isAudioContiguous = !0), Q; 9358 } 9359 }), 9360 (e.remuxEmptyAudio = function (t, e, r, i) { 9361 var n = t.inputTimeScale, 9362 a = n / (t.samplerate ? t.samplerate : n), 9363 s = this.nextAudioPts, 9364 o = this._initDTS, 9365 l = (9e4 * o.baseTime) / o.timescale, 9366 u = (null !== s ? s : i.startDTS * n) + l, 9367 h = i.endDTS * n + l, 9368 d = 1024 * a, 9369 c = Math.ceil((h - u) / d),
9370 f = Mi.getSilentFrame(t.manifestCodec || t.codec, t.channelCount); 9371 if ((w.warn('[mp4-remuxer]: remux empty Audio'), f)) { 9372 for (var g = [], v = 0; v < c; v++) { 9373 var m = u + v * d; 9374 g.push({ unit: f, pts: m, dts: m }); 9375 } 9376 return (t.samples = g), this.remuxAudio(t, e, r, !1); 9377 } 9378 w.trace( 9379 '[mp4-remuxer]: Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec', 9380 ); 9381 }), 9382 t 9383 ); 9384 })(); 9385 function Vi(t, e) { 9386 var r; 9387 if (null === e) return t; 9388 for (r = e < t ? -8589934592 : 8589934592; Math.abs(t - e) > 4294967296; ) t += r; 9389 return t; 9390 } 9391 function Yi(t, e, r, i) { 9392 var n = t.samples.length; 9393 if (n) { 9394 for (var a = t.inputTimeScale, s = 0; s < n; s++) { 9395 var o = t.samples[s]; 9396 (o.pts = Vi(o.pts - (r.baseTime * a) / r.timescale, e * a) / a), 9397 (o.dts = Vi(o.dts - (i.baseTime * a) / i.timescale, e * a) / a); 9398 } 9399 var l = t.samples; 9400 return (t.samples = []), { samples: l }; 9401 } 9402 } 9403 function Wi(t, e, r) { 9404 var i = t.samples.length; 9405 if (i) { 9406 for (var n = t.inputTimeScale, a = 0; a < i; a++) { 9407 var s = t.samples[a]; 9408 s.pts = Vi(s.pts - (r.baseTime * n) / r.timescale, e * n) / n; 9409 } 9410 t.samples.sort(function (t, e) { 9411 return t.pts - e.pts; 9412 }); 9413 var o = t.samples; 9414 return (t.samples = []), { samples: o }; 9415 } 9416 } 9417 var ji, 9418 qi = function (t, e, r, i) { 9419 (this.size = void 0), 9420 (this.duration = void 0), 9421 (this.cts = void 0), 9422 (this.flags = void 0), 9423 (this.duration = e), 9424 (this.size = r), 9425 (this.cts = i), 9426 (this.flags = new Xi(t)); 9427 }, 9428 Xi = function (t) { 9429 (this.isLeading = 0), 9430 (this.isDependedOn = 0), 9431 (this.hasRedundancy = 0), 9432 (this.degradPrio = 0), 9433 (this.dependsOn = 1), 9434 (this.isNonSync = 1), 9435 (this.dependsOn = t ? 2 : 1), 9436 (this.isNonSync = t ? 0 : 1); 9437 }, 9438 zi = (function () { 9439 function t() { 9440 (this.emitInitSegment = !1), 9441 (this.audioCodec = void 0), 9442 (this.videoCodec = void 0), 9443 (this.initData = void 0), 9444 (this.initPTS = null), 9445 (this.initTracks = void 0), 9446 (this.lastEndTime = null); 9447 } 9448 var e = t.prototype; 9449 return ( 9450 (e.destroy = function () {}), 9451 (e.resetTimeStamp = function (t) { 9452 (this.initPTS = t), (this.lastEndTime = null); 9453 }), 9454 (e.resetNextTimestamp = function () { 9455 this.lastEndTime = null; 9456 }), 9457 (e.resetInitSegment = function (t, e, r, i) { 9458 (this.audioCodec = e), 9459 (this.videoCodec = r), 9460 this.generateInitSegment( 9461 (function (t, e) { 9462 if (!t || !e) return t; 9463 var r = e.keyId; 9464 return ( 9465 r && 9466 e.isCommonEncryption && 9467 It(t, ['moov', 'trak']).forEach(function (t) { 9468 var e = It(t, ['mdia', 'minf', 'stbl', 'stsd'])[0].subarray(8), 9469 i = It(e, ['enca']), 9470 n = i.length > 0; 9471 n || (i = It(e, ['encv'])), 9472 i.forEach(function (t) { 9473 It(n ? t.subarray(28) : t.subarray(78), ['sinf']).forEach(function (t) { 9474 var e = _t(t); 9475 if (e) { 9476 var i = e.subarray(8, 24); 9477 i.some(function (t) { 9478 return 0 !== t; 9479 }) || 9480 (w.log( 9481 "[eme] Patching keyId in 'enc" + 9482 (n ? 'a' : 'v') + 9483 ">sinf>>tenc' box: " + 9484 Tt(i) + 9485 ' -> ' + 9486 Tt(r), 9487 ), 9488 e.set(r, 8)); 9489 } 9490 }); 9491 }); 9492 }), 9493 t 9494 ); 9495 })(t, i), 9496 ), 9497 (this.emitInitSegment = !0); 9498 }), 9499 (e.generateInitSegment = function (t) { 9500 var e = this.audioCodec, 9501 r = this.videoCodec; 9502 if (null == t || !t.byteLength) return (this.initTracks = void 0), void (this.initData = void 0); 9503 var i = (this.initData = Ct(t)); 9504 e || (e = Qi(i.audio, O)), r || (r = Qi(i.video, N)); 9505 var n = {}; 9506 i.audio && i.video
9507 ? (n.audiovideo = { container: 'video/mp4', codec: e + ',' + r, initSegment: t, id: 'main' }) 9508 : i.audio 9509 ? (n.audio = { container: 'audio/mp4', codec: e, initSegment: t, id: 'audio' }) 9510 : i.video 9511 ? (n.video = { container: 'video/mp4', codec: r, initSegment: t, id: 'main' }) 9512 : w.warn('[passthrough-remuxer.ts]: initSegment does not contain moov or trak boxes.'), 9513 (this.initTracks = n); 9514 }), 9515 (e.remux = function (t, e, r, i, n, a) { 9516 var s, 9517 o, 9518 l = this.initPTS, 9519 u = this.lastEndTime, 9520 h = { audio: void 0, video: void 0, text: i, id3: r, initSegment: void 0 }; 9521 E(u) || (u = this.lastEndTime = n || 0); 9522 var d = e.samples; 9523 if (null == d || !d.length) return h; 9524 var c = { initPTS: void 0, timescale: 1 }, 9525 f = this.initData; 9526 if ( 9527 ((null != (s = f) && s.length) || (this.generateInitSegment(d), (f = this.initData)), 9528 null == (o = f) || !o.length) 9529 ) 9530 return w.warn('[passthrough-remuxer.ts]: Failed to generate initSegment.'), h; 9531 this.emitInitSegment && ((c.tracks = this.initTracks), (this.emitInitSegment = !1)); 9532 var g = (function (t, e) { 9533 for (var r = 0, i = 0, n = 0, a = It(t, ['moof', 'traf']), s = 0; s < a.length; s++) { 9534 var o = a[s], 9535 l = It(o, ['tfhd'])[0], 9536 u = e[kt(l, 4)]; 9537 if (u) { 9538 var h = u.default, 9539 d = kt(l, 0) | (null == h ? void 0 : h.flags), 9540 c = null == h ? void 0 : h.duration; 9541 8 & d && (c = kt(l, 2 & d ? 12 : 8)); 9542 for (var f = u.timescale || 9e4, g = It(o, ['trun']), v = 0; v < g.length; v++) 9543 !(r = Pt(g[v])) && c && (r = c * kt(g[v], 4)), 9544 u.type === N ? (i += r / f) : u.type === O && (n += r / f); 9545 } 9546 } 9547 if (0 === i && 0 === n) { 9548 for (var m = 0, p = It(t, ['sidx']), y = 0; y < p.length; y++) { 9549 var T = wt(p[y]); 9550 null != T && 9551 T.references && 9552 (m += T.references.reduce(function (t, e) { 9553 return t + e.info.duration || 0; 9554 }, 0)); 9555 } 9556 return m; 9557 } 9558 return i || n; 9559 })(d, f), 9560 v = (function (t, e) { 9561 return It(e, ['moof', 'traf']).reduce(function (e, r) { 9562 var i = It(r, ['tfdt'])[0], 9563 n = i[0], 9564 a = It(r, ['tfhd']).reduce(function (e, r) { 9565 var a = kt(r, 4), 9566 s = t[a]; 9567 if (s) { 9568 var o = kt(i, 4); 9569 if (1 === n) { 9570 if (o === Et) 9571 return ( 9572 w.warn( 9573 '[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time', 9574 ), 9575 e 9576 ); 9577 (o *= Et + 1), (o += kt(i, 8)); 9578 } 9579 var l = o / (s.timescale || 9e4); 9580 if (isFinite(l) && (null === e || l < e)) return l; 9581 } 9582 return e; 9583 }, null); 9584 return null !== a && isFinite(a) && (null === e || a < e) ? a : e; 9585 }, null); 9586 })(f, d), 9587 m = null === v ? n : v; 9588 ((function (t, e, r, i) { 9589 if (null === t) return !0; 9590 var n = Math.max(i, 1), 9591 a = e - t.baseTime / t.timescale; 9592 return Math.abs(a - r) > n; 9593 })(l, m, n, g) || 9594 (c.timescale !== l.timescale && a)) && 9595 ((c.initPTS = m - n), 9596 l && 1 === l.timescale && w.warn('Adjusting initPTS by ' + (c.initPTS - l.baseTime)), 9597 (this.initPTS = l = { baseTime: c.initPTS, timescale: 1 })); 9598 var p = t ? m - l.baseTime / l.timescale : u, 9599 y = p + g; 9600 !(function (t, e, r) {
9601 It(e, ['moof', 'traf']).forEach(function (e) { 9602 It(e, ['tfhd']).forEach(function (i) { 9603 var n = kt(i, 4), 9604 a = t[n]; 9605 if (a) { 9606 var s = a.timescale || 9e4; 9607 It(e, ['tfdt']).forEach(function (t) { 9608 var e = t[0], 9609 i = kt(t, 4); 9610 if (0 === e) (i -= r * s), Dt(t, 4, (i = Math.max(i, 0))); 9611 else { 9612 (i *= Math.pow(2, 32)), (i += kt(t, 8)), (i -= r * s), (i = Math.max(i, 0)); 9613 var n = Math.floor(i / (Et + 1)), 9614 a = Math.floor(i % (Et + 1)); 9615 Dt(t, 4, n), Dt(t, 8, a); 9616 } 9617 }); 9618 } 9619 }); 9620 }); 9621 })(f, d, l.baseTime / l.timescale), 9622 g > 0 9623 ? (this.lastEndTime = y) 9624 : (w.warn('Duration parsed from mp4 should be greater than zero'), this.resetNextTimestamp()); 9625 var T = !!f.audio, 9626 S = !!f.video, 9627 L = ''; 9628 T && (L += 'audio'), S && (L += 'video'); 9629 var R = { 9630 data1: d, 9631 startPTS: p, 9632 startDTS: p, 9633 endPTS: y, 9634 endDTS: y, 9635 type: L, 9636 hasAudio: T, 9637 hasVideo: S, 9638 nb: 1, 9639 dropped: 0, 9640 }; 9641 return ( 9642 (h.audio = 'audio' === R.type ? R : void 0), 9643 (h.video = 'audio' !== R.type ? R : void 0), 9644 (h.initSegment = c), 9645 (h.id3 = Yi(r, n, l, l)), 9646 i.samples.length && (h.text = Wi(i, n, l)), 9647 h 9648 ); 9649 }), 9650 t 9651 ); 9652 })(); 9653 function Qi(t, e) { 9654 var r = null == t ? void 0 : t.codec; 9655 return r && r.length > 4 9656 ? r 9657 : 'hvc1' === r || 'hev1' === r 9658 ? 'hvc1.1.6.L120.90' 9659 : 'av01' === r 9660 ? 'av01.0.04M.08' 9661 : 'avc1' === r || e === N 9662 ? 'avc1.42e01e' 9663 : 'mp4a.40.5'; 9664 } 9665 try { 9666 ji = self.performance.now.bind(self.performance); 9667 } catch (t) { 9668 w.debug('Unable to use Performance API on this environment'), 9669 (ji = 'undefined' != typeof self && self.Date.now); 9670 } 9671 var $i = [ 9672 { demux: fi, remux: zi }, 9673 { demux: Di, remux: Hi }, 9674 { demux: di, remux: Hi }, 9675 { demux: Fi, remux: Hi }, 9676 ], 9677 Ji = (function () { 9678 function t(t, e, r, i, n) { 9679 (this.async = !1), 9680 (this.observer = void 0), 9681 (this.typeSupported = void 0), 9682 (this.config = void 0), 9683 (this.vendor = void 0), 9684 (this.id = void 0), 9685 (this.demuxer = void 0), 9686 (this.remuxer = void 0), 9687 (this.decrypter = void 0), 9688 (this.probe = void 0), 9689 (this.decryptionPromise = null), 9690 (this.transmuxConfig = void 0), 9691 (this.currentTransmuxState = void 0), 9692 (this.observer = t), 9693 (this.typeSupported = e), 9694 (this.config = r), 9695 (this.vendor = i), 9696 (this.id = n); 9697 } 9698 var e = t.prototype; 9699 return ( 9700 (e.configure = function (t) { 9701 (this.transmuxConfig = t), this.decrypter && this.decrypter.reset(); 9702 }), 9703 (e.push = function (t, e, r, i) { 9704 var n = this, 9705 a = r.transmuxing; 9706 a.executeStart = ji(); 9707 var s = new Uint8Array(t), 9708 o = this.currentTransmuxState, 9709 l = this.transmuxConfig; 9710 i && (this.currentTransmuxState = i); 9711 var u = i || o, 9712 h = u.contiguous, 9713 d = u.discontinuity, 9714 c = u.trackSwitch,
9715 f = u.accurateTimeOffset, 9716 g = u.timeOffset, 9717 v = u.initSegmentChange, 9718 m = l.audioCodec, 9719 p = l.videoCodec, 9720 y = l.defaultInitPts, 9721 T = l.duration, 9722 E = l.initSegmentData, 9723 A = (function (t, e) { 9724 var r = null; 9725 return ( 9726 t.byteLength > 0 && null != e && null != e.key && null !== e.iv && null != e.method && (r = e), r 9727 ); 9728 })(s, e); 9729 if (A && 'AES-128' === A.method) { 9730 var k = this.getDecrypter(); 9731 if (!k.isSync()) 9732 return ( 9733 (this.decryptionPromise = k.webCryptoDecrypt(s, A.key.buffer, A.iv.buffer).then(function (t) { 9734 var e = n.push(t, null, r); 9735 return (n.decryptionPromise = null), e; 9736 })), 9737 this.decryptionPromise 9738 ); 9739 var b = k.softwareDecrypt(s, A.key.buffer, A.iv.buffer); 9740 if ((r.part > -1 && (b = k.flush()), !b)) return (a.executeEnd = ji()), Zi(r); 9741 s = new Uint8Array(b); 9742 } 9743 var D = this.needsProbing(d, c); 9744 if (D) { 9745 var I = this.configureTransmuxer(s); 9746 if (I) 9747 return ( 9748 w.warn('[transmuxer] ' + I.message), 9749 this.observer.emit(S.ERROR, S.ERROR, { 9750 type: L.MEDIA_ERROR, 9751 details: R.FRAG_PARSING_ERROR, 9752 fatal: !1, 9753 error: I, 9754 reason: I.message, 9755 }), 9756 (a.executeEnd = ji()), 9757 Zi(r) 9758 ); 9759 } 9760 (d || c || v || D) && this.resetInitSegment(E, m, p, T, e), 9761 (d || v || D) && this.resetInitialTimestamp(y), 9762 h || this.resetContiguity(); 9763 var C = this.transmux(s, A, g, f, r), 9764 _ = this.currentTransmuxState; 9765 return (_.contiguous = !0), (_.discontinuity = !1), (_.trackSwitch = !1), (a.executeEnd = ji()), C; 9766 }), 9767 (e.flush = function (t) { 9768 var e = this, 9769 r = t.transmuxing; 9770 r.executeStart = ji(); 9771 var i = this.decrypter, 9772 n = this.currentTransmuxState, 9773 a = this.decryptionPromise; 9774 if (a) 9775 return a.then(function () { 9776 return e.flush(t); 9777 }); 9778 var s = [], 9779 o = n.timeOffset; 9780 if (i) { 9781 var l = i.flush(); 9782 l && s.push(this.push(l, null, t)); 9783 } 9784 var u = this.demuxer, 9785 h = this.remuxer; 9786 if (!u || !h) return (r.executeEnd = ji()), [Zi(t)]; 9787 var d = u.flush(o); 9788 return tn(d) 9789 ? d.then(function (r) { 9790 return e.flushRemux(s, r, t), s; 9791 }) 9792 : (this.flushRemux(s, d, t), s); 9793 }), 9794 (e.flushRemux = function (t, e, r) { 9795 var i = e.audioTrack, 9796 n = e.videoTrack, 9797 a = e.id3Track, 9798 s = e.textTrack, 9799 o = this.currentTransmuxState, 9800 l = o.accurateTimeOffset, 9801 u = o.timeOffset; 9802 w.log( 9803 '[transmuxer.ts]: Flushed fragment ' + 9804 r.sn + 9805 (r.part > -1 ? ' p: ' + r.part : '') + 9806 ' of level ' + 9807 r.level, 9808 ); 9809 var h = this.remuxer.remux(i, n, a, s, u, l, !0, this.id); 9810 t.push({ remuxResult: h, chunkMeta: r }), (r.transmuxing.executeEnd = ji()); 9811 }), 9812 (e.resetInitialTimestamp = function (t) { 9813 var e = this.demuxer, 9814 r = this.remuxer; 9815 e && r && (e.resetTimeStamp(t), r.resetTimeStamp(t)); 9816 }), 9817 (e.resetContiguity = function () { 9818 var t = this.demuxer, 9819 e = this.remuxer; 9820 t && e && (t.resetContiguity(), e.resetNextTimestamp()); 9821 }), 9822 (e.resetInitSegment = function (t, e, r, i, n) { 9823 var a = this.demuxer, 9824 s = this.remuxer; 9825 a && s && (a.resetInitSegment(t, e, r, i), s.resetInitSegment(t, e, r, n)); 9826 }), 9827 (e.destroy = function () { 9828 this.demuxer && (this.demuxer.destroy(), (this.demuxer = void 0)), 9829 this.remuxer && (this.remuxer.destroy(), (this.remuxer = void 0)); 9830 }), 9831 (e.transmux = function (t, e, r, i, n) { 9832 return e && 'SAMPLE-AES' === e.method 9833 ? this.transmuxSampleAes(t, e, r, i, n) 9834 : this.transmuxUnencrypted(t, r, i, n); 9835 }), 9836 (e.transmuxUnencrypted = function (t, e, r, i) { 9837 var n = this.demuxer.demux(t, e, !1, !this.config.progressive), 9838 a = n.audioTrack, 9839 s = n.videoTrack, 9840 o = n.id3Track, 9841 l = n.textTrack; 9842 return { remuxResult: this.remuxer.remux(a, s, o, l, e, r, !1, this.id), chunkMeta: i }; 9843 }), 9844 (e.transmuxSampleAes = function (t, e, r, i, n) { 9845 var a = this; 9846 return this.demuxer.demuxSampleAes(t, e, r).then(function (t) { 9847 return { 9848 remuxResult: a.remuxer.remux(t.audioTrack, t.videoTrack, t.id3Track, t.textTrack, r, i, !1, a.id), 9849 chunkMeta: n, 9850 }; 9851 }); 9852 }), 9853 (e.configureTransmuxer = function (t) { 9854 for ( 9855 var e, 9856 r = this.config, 9857 i = this.observer,
9858 n = this.typeSupported, 9859 a = this.vendor, 9860 s = 0, 9861 o = $i.length; 9862 s < o; 9863 s++ 9864 ) 9865 if ($i[s].demux.probe(t)) { 9866 e = $i[s]; 9867 break; 9868 } 9869 if (!e) return new Error('Failed to find demuxer by probing fragment data'); 9870 var l = this.demuxer, 9871 u = this.remuxer, 9872 h = e.remux, 9873 d = e.demux; 9874 (u && u instanceof h) || (this.remuxer = new h(i, r, n, a)), 9875 (l && l instanceof d) || ((this.demuxer = new d(i, r, n)), (this.probe = d.probe)); 9876 }), 9877 (e.needsProbing = function (t, e) { 9878 return !this.demuxer || !this.remuxer || t || e; 9879 }), 9880 (e.getDecrypter = function () { 9881 var t = this.decrypter; 9882 return t || (t = this.decrypter = new Ur(this.config)), t; 9883 }), 9884 t 9885 ); 9886 })(), 9887 Zi = function (t) { 9888 return { remuxResult: {}, chunkMeta: t }; 9889 }; 9890 function tn(t) { 9891 return 'then' in t && t.then instanceof Function; 9892 } 9893 var en = function (t, e, r, i, n) { 9894 (this.audioCodec = void 0), 9895 (this.videoCodec = void 0), 9896 (this.initSegmentData = void 0), 9897 (this.duration = void 0), 9898 (this.defaultInitPts = void 0), 9899 (this.audioCodec = t), 9900 (this.videoCodec = e), 9901 (this.initSegmentData = r), 9902 (this.duration = i), 9903 (this.defaultInitPts = n || null); 9904 }, 9905 rn = function (t, e, r, i, n, a) { 9906 (this.discontinuity = void 0), 9907 (this.contiguous = void 0), 9908 (this.accurateTimeOffset = void 0), 9909 (this.trackSwitch = void 0), 9910 (this.timeOffset = void 0), 9911 (this.initSegmentChange = void 0), 9912 (this.discontinuity = t), 9913 (this.contiguous = e), 9914 (this.accurateTimeOffset = r), 9915 (this.trackSwitch = i), 9916 (this.timeOffset = n), 9917 (this.initSegmentChange = a); 9918 }, 9919 nn = { exports: {} }; 9920 !(function (t) { 9921 var e = Object.prototype.hasOwnProperty, 9922 r = '~'; 9923 function i() {} 9924 function n(t, e, r) { 9925 (this.fn = t), (this.context = e), (this.once = r || !1); 9926 } 9927 function a(t, e, i, a, s) { 9928 if ('function' != typeof i) throw new TypeError('The listener must be a function'); 9929 var o = new n(i, a || t, s), 9930 l = r ? r + e : e; 9931 return ( 9932 t._events[l] 9933 ? t._events[l].fn 9934 ? (t._events[l] = [t._events[l], o]) 9935 : t._events[l].push(o) 9936 : ((t._events[l] = o), t._eventsCount++), 9937 t 9938 ); 9939 } 9940 function s(t, e) { 9941 0 == --t._eventsCount ? (t._events = new i()) : delete t._events[e]; 9942 } 9943 function o() { 9944 (this._events = new i()), (this._eventsCount = 0); 9945 } 9946 Object.create && ((i.prototype = Object.create(null)), new i().__proto__ || (r = !1)), 9947 (o.prototype.eventNames = function () { 9948 var t, 9949 i, 9950 n = []; 9951 if (0 === this._eventsCount) return n; 9952 for (i in (t = this._events)) e.call(t, i) && n.push(r ? i.slice(1) : i); 9953 return Object.getOwnPropertySymbols ? n.concat(Object.getOwnPropertySymbols(t)) : n; 9954 }), 9955 (o.prototype.listeners = function (t) { 9956 var e = r ? r + t : t, 9957 i = this._events[e]; 9958 if (!i) return []; 9959 if (i.fn) return [i.fn]; 9960 for (var n = 0, a = i.length, s = new Array(a); n < a; n++) s[n] = i[n].fn; 9961 return s; 9962 }), 9963 (o.prototype.listenerCount = function (t) { 9964 var e = r ? r + t : t, 9965 i = this._events[e]; 9966 return i ? (i.fn ? 1 : i.length) : 0; 9967 }), 9968 (o.prototype.emit = function (t, e, i, n, a, s) { 9969 var o = r ? r + t : t; 9970 if (!this._events[o]) return !1; 9971 var l, 9972 u, 9973 h = this._events[o], 9974 d = arguments.length; 9975 if (h.fn) { 9976 switch ((h.once && this.removeListener(t, h.fn, void 0, !0), d)) { 9977 case 1: 9978 return h.fn.call(h.context), !0; 9979 case 2: 9980 return h.fn.call(h.context, e), !0; 9981 case 3: 9982 return h.fn.call(h.context, e, i), !0; 9983 case 4: 9984 return h.fn.call(h.context, e, i, n), !0; 9985 case 5: 9986 return h.fn.call(h.context, e, i, n, a), !0; 9987 case 6: 9988 return h.fn.call(h.context, e, i, n, a, s), !0; 9989 } 9990 for (u = 1, l = new Array(d - 1); u < d; u++) l[u - 1] = arguments[u]; 9991 h.fn.apply(h.context, l); 9992 } else { 9993 var c, 9994 f = h.length; 9995 for (u = 0; u < f; u++) 9996 switch ((h[u].once && this.removeListener(t, h[u].fn, void 0, !0), d)) { 9997 case 1: 9998 h[u].fn.call(h[u].context); 9999 break; 10000 case 2: 10001 h[u].fn.call(h[u].context, e); 10002 break; 10003 case 3: 10004 h[u].fn.call(h[u].context, e, i); 10005 break; 10006 case 4: 10007 h[u].fn.call(h[u].context, e, i, n); 10008 break; 10009 default: 10010 if (!l) for (c = 1, l = new Array(d - 1); c < d; c++) l[c - 1] = arguments[c]; 10011 h[u].fn.apply(h[u].context, l); 10012 } 10013 } 10014 return !0; 10015 }), 10016 (o.prototype.on = function (t, e, r) { 10017 return a(this, t, e, r, !1); 10018 }), 10019 (o.prototype.once = function (t, e, r) { 10020 return a(this, t, e, r, !0); 10021 }), 10022 (o.prototype.removeListener = function (t, e, i, n) { 10023 var a = r ? r + t : t; 10024 if (!this._events[a]) return this; 10025 if (!e) return s(this, a), this; 10026 var o = this._events[a]; 10027 if (o.fn) o.fn !== e || (n && !o.once) || (i && o.context !== i) || s(this, a); 10028 else { 10029 for (var l = 0, u = [], h = o.length; l < h; l++) 10030 (o[l].fn !== e || (n && !o[l].once) || (i && o[l].context !== i)) && u.push(o[l]); 10031 u.length ? (this._events[a] = 1 === u.length ? u[0] : u) : s(this, a); 10032 } 10033 return this; 10034 }), 10035 (o.prototype.removeAllListeners = function (t) { 10036 var e; 10037 return ( 10038 t 10039 ? ((e = r ? r + t : t), this._events[e] && s(this, e)) 10040 : ((this._events = new i()), (this._eventsCount = 0)), 10041 this 10042 ); 10043 }), 10044 (o.prototype.off = o.prototype.removeListener), 10045 (o.prototype.addListener = o.prototype.on), 10046 (o.prefixed = r), 10047 (o.EventEmitter = o), 10048 (t.exports = o); 10049 })(nn);
10050 var an = p(nn.exports); 10051 function sn(t, e) { 10052 if (!((r = e.remuxResult).audio || r.video || r.text || r.id3 || r.initSegment)) return !1; 10053 var r, 10054 i = [], 10055 n = e.remuxResult, 10056 a = n.audio, 10057 s = n.video; 10058 return a && on(i, a), s && on(i, s), t.postMessage({ event: 'transmuxComplete', data: e }, i), !0; 10059 } 10060 function on(t, e) { 10061 e.data1 && t.push(e.data1.buffer), e.data2 && t.push(e.data2.buffer); 10062 } 10063 function ln(t, e, r) { 10064 e.reduce(function (e, r) { 10065 return sn(t, r) || e; 10066 }, !1) || t.postMessage({ event: 'transmuxComplete', data: e[0] }), 10067 t.postMessage({ event: 'flush', data: r }); 10068 } 10069 void 0 !== e && 10070 e && 10071 (function (t) { 10072 var e = new an(), 10073 r = function (e, r) { 10074 t.postMessage({ event: e, data: r }); 10075 }; 10076 e.on(S.FRAG_DECRYPTED, r), e.on(S.ERROR, r); 10077 var i = function () { 10078 var t = function (t) { 10079 var e = function (e) { 10080 r('workerLog', { logType: t, message: e }); 10081 }; 10082 w[t] = e; 10083 }; 10084 for (var e in w) t(e); 10085 }; 10086 t.addEventListener('message', function (n) { 10087 var a = n.data; 10088 switch (a.cmd) { 10089 case 'init': 10090 var s = JSON.parse(a.config); 10091 (t.transmuxer = new Ji(e, a.typeSupported, s, a.vendor, a.id)), I(s.debug, a.id), i(), r('init', null); 10092 break; 10093 case 'configure': 10094 t.transmuxer.configure(a.config); 10095 break; 10096 case 'demux': 10097 var o = t.transmuxer.push(a.data, a.decryptdata, a.chunkMeta, a.state); 10098 tn(o) 10099 ? ((t.transmuxer.async = !0), 10100 o 10101 .then(function (e) { 10102 sn(t, e); 10103 }) 10104 .catch(function (t) { 10105 r(S.ERROR, { 10106 type: L.MEDIA_ERROR, 10107 details: R.FRAG_PARSING_ERROR, 10108 chunkMeta: a.chunkMeta, 10109 fatal: !1, 10110 error: t, 10111 err: t, 10112 reason: 'transmuxer-worker push error', 10113 }); 10114 })) 10115 : ((t.transmuxer.async = !1), sn(t, o)); 10116 break; 10117 case 'flush': 10118 var l = a.chunkMeta, 10119 u = t.transmuxer.flush(l); 10120 tn(u) || t.transmuxer.async 10121 ? (tn(u) || (u = Promise.resolve(u)), 10122 u 10123 .then(function (e) { 10124 ln(t, e, l); 10125 }) 10126 .catch(function (t) { 10127 r(S.ERROR, { 10128 type: L.MEDIA_ERROR, 10129 details: R.FRAG_PARSING_ERROR, 10130 chunkMeta: a.chunkMeta, 10131 fatal: !1, 10132 error: t, 10133 err: t, 10134 reason: 'transmuxer-worker flush error', 10135 }); 10136 })) 10137 : ln(t, u, l); 10138 } 10139 }); 10140 })(self); 10141 var un = qt() || { 10142 isTypeSupported: function () { 10143 return !1; 10144 }, 10145 }, 10146 hn = (function () { 10147 function e(e, r, i, n) { 10148 var a = this; 10149 (this.error = null), 10150 (this.hls = void 0), 10151 (this.id = void 0), 10152 (this.observer = void 0), 10153 (this.frag = null), 10154 (this.part = null), 10155 (this.useWorker = void 0), 10156 (this.workerContext = null), 10157 (this.onwmsg = void 0), 10158 (this.transmuxer = null), 10159 (this.onTransmuxComplete = void 0), 10160 (this.onFlush = void 0); 10161 var s = e.config; 10162 (this.hls = e), 10163 (this.id = r), 10164 (this.useWorker = !!s.enableWorker), 10165 (this.onTransmuxComplete = i), 10166 (this.onFlush = n); 10167 var o = function (t, e) { 10168 ((e = e || {}).frag = a.frag), (e.id = a.id), t === S.ERROR && (a.error = e.error), a.hls.trigger(t, e); 10169 }; 10170 (this.observer = new an()), this.observer.on(S.FRAG_DECRYPTED, o), this.observer.on(S.ERROR, o); 10171 var l, 10172 u, 10173 h, 10174 d, 10175 c = {
10176 mp4: un.isTypeSupported('video/mp4'), 10177 mpeg: un.isTypeSupported('audio/mpeg'), 10178 mp3: un.isTypeSupported('audio/mp4; codecs="mp3"'), 10179 }, 10180 f = navigator.vendor; 10181 if (!this.useWorker || 'undefined' == typeof Worker || (s.workerPath, 0)) 10182 this.transmuxer = new Ji(this.observer, c, s, f, r); 10183 else 10184 try { 10185 s.workerPath 10186 ? (w.log('loading Web Worker ' + s.workerPath + ' for "' + r + '"'), 10187 (this.workerContext = 10188 ((h = s.workerPath), 10189 (d = new self.URL(h, self.location.href).href), 10190 { worker: new self.Worker(d), scriptURL: d }))) 10191 : (w.log('injecting Web Worker for "' + r + '"'), 10192 (this.workerContext = 10193 ((l = new self.Blob( 10194 [ 10195 'var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(' + 10196 t.toString() + 10197 ')(true);', 10198 ], 10199 { type: 'text/javascript' }, 10200 )), 10201 (u = self.URL.createObjectURL(l)), 10202 { worker: new self.Worker(u), objectURL: u }))), 10203 (this.onwmsg = function (t) { 10204 return a.onWorkerMessage(t); 10205 }); 10206 var g = this.workerContext.worker; 10207 g.addEventListener('message', this.onwmsg), 10208 (g.onerror = function (t) { 10209 var e = new Error(t.message + ' (' + t.filename + ':' + t.lineno + ')'); 10210 (s.enableWorker = !1), 10211 w.warn('Error in "' + r + '" Web Worker, fallback to inline'), 10212 a.hls.trigger(S.ERROR, { 10213 type: L.OTHER_ERROR, 10214 details: R.INTERNAL_EXCEPTION, 10215 fatal: !1, 10216 event: 'demuxerWorker', 10217 error: e, 10218 }); 10219 }), 10220 g.postMessage({ cmd: 'init', typeSupported: c, vendor: f, id: r, config: JSON.stringify(s) }); 10221 } catch (t) { 10222 w.warn('Error setting up "' + r + '" Web Worker, fallback to inline', t), 10223 this.resetWorker(), 10224 (this.error = null), 10225 (this.transmuxer = new Ji(this.observer, c, s, f, r)); 10226 } 10227 } 10228 var r = e.prototype; 10229 return ( 10230 (r.resetWorker = function () { 10231 if (this.workerContext) { 10232 var t = this.workerContext, 10233 e = t.worker, 10234 r = t.objectURL; 10235 r && self.URL.revokeObjectURL(r), 10236 e.removeEventListener('message', this.onwmsg), 10237 (e.onerror = null), 10238 e.terminate(), 10239 (this.workerContext = null); 10240 } 10241 }), 10242 (r.destroy = function () { 10243 if (this.workerContext) this.resetWorker(), (this.onwmsg = void 0); 10244 else { 10245 var t = this.transmuxer; 10246 t && (t.destroy(), (this.transmuxer = null)); 10247 } 10248 var e = this.observer; 10249 e && e.removeAllListeners(), (this.frag = null), (this.observer = null), (this.hls = null); 10250 }), 10251 (r.push = function (t, e, r, i, n, a, s, o, l, u) { 10252 var h, 10253 d, 10254 c = this; 10255 l.transmuxing.start = self.performance.now(); 10256 var f = this.transmuxer, 10257 g = a ? a.start : n.start, 10258 v = n.decryptdata, 10259 m = this.frag, 10260 p = !(m && n.cc === m.cc), 10261 y = !(m && l.level === m.level), 10262 T = m ? l.sn - m.sn : -1, 10263 E = this.part ? l.part - this.part.index : -1, 10264 S = 0 === T && l.id > 1 && l.id === (null == m ? void 0 : m.stats.chunkCount), 10265 L = !y && (1 === T || (0 === T && (1 === E || (S && E <= 0)))), 10266 R = self.performance.now(); 10267 (y || T || 0 === n.stats.parsing.start) && (n.stats.parsing.start = R), 10268 !a || (!E && L) || (a.stats.parsing.start = R); 10269 var A = !( 10270 m && (null == (h = n.initSegment) ? void 0 : h.url) === (null == (d = m.initSegment) ? void 0 : d.url) 10271 ), 10272 k = new rn(p, L, o, y, g, A); 10273 if (!L || p || A) { 10274 w.log( 10275 '[transmuxer-interface, ' + 10276 n.type + 10277 ']: Starting new transmux session for sn: ' + 10278 l.sn + 10279 ' p: ' + 10280 l.part + 10281 ' level: ' + 10282 l.level + 10283 ' id: ' + 10284 l.id + 10285 '\n discontinuity: ' + 10286 p + 10287 '\n trackSwitch: ' + 10288 y + 10289 '\n contiguous: ' + 10290 L +
10291 '\n accurateTimeOffset: ' + 10292 o + 10293 '\n timeOffset: ' + 10294 g + 10295 '\n initSegmentChange: ' + 10296 A, 10297 ); 10298 var b = new en(r, i, e, s, u); 10299 this.configureTransmuxer(b); 10300 } 10301 if (((this.frag = n), (this.part = a), this.workerContext)) 10302 this.workerContext.worker.postMessage( 10303 { cmd: 'demux', data: t, decryptdata: v, chunkMeta: l, state: k }, 10304 t instanceof ArrayBuffer ? [t] : [], 10305 ); 10306 else if (f) { 10307 var D = f.push(t, v, l, k); 10308 tn(D) 10309 ? ((f.async = !0), 10310 D.then(function (t) { 10311 c.handleTransmuxComplete(t); 10312 }).catch(function (t) { 10313 c.transmuxerError(t, l, 'transmuxer-interface push error'); 10314 })) 10315 : ((f.async = !1), this.handleTransmuxComplete(D)); 10316 } 10317 }), 10318 (r.flush = function (t) { 10319 var e = this; 10320 t.transmuxing.start = self.performance.now(); 10321 var r = this.transmuxer; 10322 if (this.workerContext) this.workerContext.worker.postMessage({ cmd: 'flush', chunkMeta: t }); 10323 else if (r) { 10324 var i = r.flush(t); 10325 tn(i) || r.async 10326 ? (tn(i) || (i = Promise.resolve(i)), 10327 i 10328 .then(function (r) { 10329 e.handleFlushResult(r, t); 10330 }) 10331 .catch(function (r) { 10332 e.transmuxerError(r, t, 'transmuxer-interface flush error'); 10333 })) 10334 : this.handleFlushResult(i, t); 10335 } 10336 }), 10337 (r.transmuxerError = function (t, e, r) { 10338 this.hls && 10339 ((this.error = t), 10340 this.hls.trigger(S.ERROR, { 10341 type: L.MEDIA_ERROR, 10342 details: R.FRAG_PARSING_ERROR, 10343 chunkMeta: e, 10344 fatal: !1, 10345 error: t, 10346 err: t, 10347 reason: r, 10348 })); 10349 }), 10350 (r.handleFlushResult = function (t, e) { 10351 var r = this; 10352 t.forEach(function (t) { 10353 r.handleTransmuxComplete(t); 10354 }), 10355 this.onFlush(e); 10356 }), 10357 (r.onWorkerMessage = function (t) { 10358 var e = t.data, 10359 r = this.hls; 10360 switch (e.event) { 10361 case 'init': 10362 var i, 10363 n = null == (i = this.workerContext) ? void 0 : i.objectURL; 10364 n && self.URL.revokeObjectURL(n); 10365 break; 10366 case 'transmuxComplete': 10367 this.handleTransmuxComplete(e.data); 10368 break; 10369 case 'flush': 10370 this.onFlush(e.data); 10371 break; 10372 case 'workerLog': 10373 w[e.data.logType] && w[e.data.logType](e.data.message); 10374 break; 10375 default: 10376 (e.data = e.data || {}), (e.data.frag = this.frag), (e.data.id = this.id), r.trigger(e.event, e.data); 10377 } 10378 }), 10379 (r.configureTransmuxer = function (t) { 10380 var e = this.transmuxer; 10381 this.workerContext 10382 ? this.workerContext.worker.postMessage({ cmd: 'configure', config: t }) 10383 : e && e.configure(t); 10384 }), 10385 (r.handleTransmuxComplete = function (t) { 10386 (t.chunkMeta.transmuxing.end = self.performance.now()), this.onTransmuxComplete(t); 10387 }), 10388 e 10389 ); 10390 })(), 10391 dn = (function () { 10392 function t(t, e, r, i) { 10393 (this.config = void 0), 10394 (this.media = null), 10395 (this.fragmentTracker = void 0), 10396 (this.hls = void 0), 10397 (this.nudgeRetry = 0), 10398 (this.stallReported = !1), 10399 (this.stalled = null),
10400 (this.moved = !1), 10401 (this.seeking = !1), 10402 (this.config = t), 10403 (this.media = e), 10404 (this.fragmentTracker = r), 10405 (this.hls = i); 10406 } 10407 var e = t.prototype; 10408 return ( 10409 (e.destroy = function () { 10410 (this.media = null), (this.hls = this.fragmentTracker = null); 10411 }), 10412 (e.poll = function (t, e) { 10413 var r = this.config, 10414 i = this.media, 10415 n = this.stalled; 10416 if (null !== i) { 10417 var a = i.currentTime, 10418 s = i.seeking, 10419 o = this.seeking && !s, 10420 l = !this.seeking && s; 10421 if (((this.seeking = s), a === t)) { 10422 if (l || o) this.stalled = null; 10423 else if (!((i.paused && !s) || i.ended || 0 === i.playbackRate) && Ir.getBuffered(i).length) { 10424 var u = Ir.bufferInfo(i, a, 0), 10425 h = u.len > 0, 10426 d = u.nextStart || 0; 10427 if (h || d) { 10428 if (s) { 10429 var c = u.len > 2, 10430 f = !d || (e && e.start <= a) || (d - a > 2 && !this.fragmentTracker.getPartialFragment(a)); 10431 if (c || f) return; 10432 this.moved = !1; 10433 } 10434 if (!this.moved && null !== this.stalled) { 10435 var g, 10436 v = Math.max(d, u.start || 0) - a, 10437 m = this.hls.levels ? this.hls.levels[this.hls.currentLevel] : null, 10438 p = (null == m || null == (g = m.details) ? void 0 : g.live) 10439 ? 2 * m.details.targetduration 10440 : 2, 10441 y = this.fragmentTracker.getPartialFragment(a); 10442 if (v > 0 && (v <= p || y)) return void this._trySkipBufferHole(y); 10443 } 10444 var T = self.performance.now(); 10445 if (null !== n) { 10446 var E = T - n; 10447 if (s || !(E >= 250) || (this._reportStall(u), this.media)) { 10448 var S = Ir.bufferInfo(i, a, r.maxBufferHole); 10449 this._tryFixBufferStall(S, E); 10450 } 10451 } else this.stalled = T; 10452 } 10453 } 10454 } else if (((this.moved = !0), null !== n)) { 10455 if (this.stallReported) { 10456 var L = self.performance.now() - n; 10457 w.warn('playback not stuck anymore @' + a + ', after ' + Math.round(L) + 'ms'), 10458 (this.stallReported = !1); 10459 } 10460 (this.stalled = null), (this.nudgeRetry = 0); 10461 } 10462 } 10463 }), 10464 (e._tryFixBufferStall = function (t, e) { 10465 var r = this.config, 10466 i = this.fragmentTracker, 10467 n = this.media; 10468 if (null !== n) { 10469 var a = n.currentTime, 10470 s = i.getPartialFragment(a); 10471 if (s && (this._trySkipBufferHole(s) || !this.media)) return; 10472 (t.len > r.maxBufferHole || (t.nextStart && t.nextStart - a < r.maxBufferHole)) && 10473 e > 1e3 * r.highBufferWatchdogPeriod && 10474 (w.warn('Trying to nudge playhead over buffer-hole'), (this.stalled = null), this._tryNudgeBuffer()); 10475 } 10476 }), 10477 (e._reportStall = function (t) { 10478 var e = this.hls, 10479 r = this.media; 10480 if (!this.stallReported && r) { 10481 this.stallReported = !0; 10482 var i = new Error( 10483 'Playback stalling at @' + r.currentTime + ' due to low buffer (' + JSON.stringify(t) + ')', 10484 ); 10485 w.warn(i.message), 10486 e.trigger(S.ERROR, { 10487 type: L.MEDIA_ERROR, 10488 details: R.BUFFER_STALLED_ERROR, 10489 fatal: !1, 10490 error: i, 10491 buffer: t.len, 10492 }); 10493 } 10494 }), 10495 (e._trySkipBufferHole = function (t) { 10496 var e = this.config, 10497 r = this.hls, 10498 i = this.media; 10499 if (null === i) return 0; 10500 var n = i.currentTime, 10501 a = Ir.bufferInfo(i, n, 0), 10502 s = n < a.start ? a.start : a.nextStart; 10503 if (s) { 10504 var o = a.len <= e.maxBufferHole, 10505 l = a.len > 0 && a.len < 1 && i.readyState < 3,
10506 u = s - n; 10507 if (u > 0 && (o || l)) { 10508 if (u > e.maxBufferHole) { 10509 var h = this.fragmentTracker, 10510 d = !1; 10511 if (0 === n) { 10512 var c = h.getAppendedFrag(0, ge); 10513 c && s < c.end && (d = !0); 10514 } 10515 if (!d) { 10516 var f = t || h.getAppendedFrag(n, ge); 10517 if (f) { 10518 for (var g = !1, v = f.end; v < s; ) { 10519 var m = h.getPartialFragment(v); 10520 if (!m) { 10521 g = !0; 10522 break; 10523 } 10524 v += m.duration; 10525 } 10526 if (g) return 0; 10527 } 10528 } 10529 } 10530 var p = Math.max(s + 0.05, n + 0.1); 10531 if ( 10532 (w.warn('skipping hole, adjusting currentTime from ' + n + ' to ' + p), 10533 (this.moved = !0), 10534 (this.stalled = null), 10535 (i.currentTime = p), 10536 t && !t.gap) 10537 ) { 10538 var y = new Error('fragment loaded with buffer holes, seeking from ' + n + ' to ' + p); 10539 r.trigger(S.ERROR, { 10540 type: L.MEDIA_ERROR, 10541 details: R.BUFFER_SEEK_OVER_HOLE, 10542 fatal: !1, 10543 error: y, 10544 reason: y.message, 10545 frag: t, 10546 }); 10547 } 10548 return p; 10549 } 10550 } 10551 return 0; 10552 }), 10553 (e._tryNudgeBuffer = function () { 10554 var t = this.config, 10555 e = this.hls, 10556 r = this.media, 10557 i = this.nudgeRetry; 10558 if (null !== r) { 10559 var n = r.currentTime; 10560 if ((this.nudgeRetry++, i < t.nudgeMaxRetry)) { 10561 var a = n + (i + 1) * t.nudgeOffset, 10562 s = new Error("Nudging 'currentTime' from " + n + ' to ' + a); 10563 w.warn(s.message), 10564 (r.currentTime = a), 10565 e.trigger(S.ERROR, { type: L.MEDIA_ERROR, details: R.BUFFER_NUDGE_ON_STALL, error: s, fatal: !1 }); 10566 } else { 10567 var o = new Error( 10568 'Playhead still not moving while enough data buffered @' + 10569 n + 10570 ' after ' + 10571 t.nudgeMaxRetry + 10572 ' nudges', 10573 ); 10574 w.error(o.message), 10575 e.trigger(S.ERROR, { type: L.MEDIA_ERROR, details: R.BUFFER_STALLED_ERROR, error: o, fatal: !0 }); 10576 } 10577 } 10578 }), 10579 t 10580 ); 10581 })(), 10582 cn = (function (t) { 10583 function e(e, r, i) { 10584 var n; 10585 return ( 10586 ((n = t.call(this, e, r, i, '[stream-controller]', ge) || this).audioCodecSwap = !1), 10587 (n.gapController = null), 10588 (n.level = -1), 10589 (n._forceStartLoad = !1), 10590 (n.altAudio = !1), 10591 (n.audioOnly = !1), 10592 (n.fragPlaying = null), 10593 (n.onvplaying = null), 10594 (n.onvseeked = null),
10595 (n.fragLastKbps = 0), 10596 (n.couldBacktrack = !1), 10597 (n.backtrackFragment = null), 10598 (n.audioCodecSwitch = !1), 10599 (n.videoBuffer = null), 10600 n._registerListeners(), 10601 n 10602 ); 10603 } 10604 l(e, t); 10605 var r = e.prototype; 10606 return ( 10607 (r._registerListeners = function () { 10608 var t = this.hls; 10609 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 10610 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 10611 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 10612 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 10613 t.on(S.LEVEL_LOADING, this.onLevelLoading, this), 10614 t.on(S.LEVEL_LOADED, this.onLevelLoaded, this), 10615 t.on(S.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this), 10616 t.on(S.ERROR, this.onError, this), 10617 t.on(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), 10618 t.on(S.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this), 10619 t.on(S.BUFFER_CREATED, this.onBufferCreated, this), 10620 t.on(S.BUFFER_FLUSHED, this.onBufferFlushed, this), 10621 t.on(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 10622 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this); 10623 }), 10624 (r._unregisterListeners = function () { 10625 var t = this.hls; 10626 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 10627 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 10628 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 10629 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 10630 t.off(S.LEVEL_LOADED, this.onLevelLoaded, this), 10631 t.off(S.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this), 10632 t.off(S.ERROR, this.onError, this), 10633 t.off(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), 10634 t.off(S.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this), 10635 t.off(S.BUFFER_CREATED, this.onBufferCreated, this), 10636 t.off(S.BUFFER_FLUSHED, this.onBufferFlushed, this), 10637 t.off(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 10638 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this); 10639 }), 10640 (r.onHandlerDestroying = function () { 10641 this._unregisterListeners(), this.onMediaDetaching(); 10642 }), 10643 (r.startLoad = function (t) { 10644 if (this.levels) { 10645 var e = this.lastCurrentTime, 10646 r = this.hls; 10647 if ((this.stopLoad(), this.setInterval(100), (this.level = -1), !this.startFragRequested)) { 10648 var i = r.startLevel; 10649 -1 === i && 10650 (r.config.testBandwidth && this.levels.length > 1 10651 ? ((i = 0), (this.bitrateTest = !0)) 10652 : (i = r.nextAutoLevel)), 10653 (this.level = r.nextLoadLevel = i), 10654 (this.loadedmetadata = !1); 10655 } 10656 e > 0 && 10657 -1 === t && 10658 (this.log('Override startPosition with lastCurrentTime @' + e.toFixed(3)), (t = e)), 10659 (this.state = Kr), 10660 (this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t), 10661 this.tick(); 10662 } else (this._forceStartLoad = !0), (this.state = Gr); 10663 }), 10664 (r.stopLoad = function () { 10665 (this._forceStartLoad = !1), t.prototype.stopLoad.call(this); 10666 }), 10667 (r.doTick = function () { 10668 switch (this.state) { 10669 case $r: 10670 var t, 10671 e = this.levels, 10672 r = this.level, 10673 i = null == e || null == (t = e[r]) ? void 0 : t.details; 10674 if (i && (!i.live || this.levelLastLoaded === this.level)) { 10675 if (this.waitForCdnTuneIn(i)) break; 10676 this.state = Kr; 10677 break; 10678 } 10679 if (this.hls.nextLoadLevel !== this.level) { 10680 this.state = Kr; 10681 break; 10682 } 10683 break; 10684 case Yr: 10685 var n, 10686 a = self.performance.now(), 10687 s = this.retryDate; 10688 (!s || a >= s || (null != (n = this.media) && n.seeking)) && 10689 (this.resetStartWhenNotLoaded(this.level), (this.state = Kr)); 10690 } 10691 this.state === Kr && this.doTickIdle(), this.onTickEnd(); 10692 }), 10693 (r.onTickEnd = function () { 10694 t.prototype.onTickEnd.call(this), this.checkBuffer(), this.checkFragmentChanged(); 10695 }), 10696 (r.doTickIdle = function () { 10697 var t = this.hls, 10698 e = this.levelLastLoaded, 10699 r = this.levels, 10700 i = this.media, 10701 n = t.config, 10702 a = t.nextLoadLevel; 10703 if ( 10704 null !== e && 10705 (i || (!this.startFragRequested && n.startFragPrefetch)) && 10706 (!this.altAudio || !this.audioOnly) && 10707 null != r && 10708 r[a] 10709 ) { 10710 var s = r[a], 10711 o = this.getMainFwdBufferInfo(); 10712 if (null !== o) { 10713 var l = this.getLevelDetails(); 10714 if (l && this._streamEnded(o, l)) { 10715 var u = {}; 10716 return ( 10717 this.altAudio && (u.type = 'video'), this.hls.trigger(S.BUFFER_EOS, u), void (this.state = Xr) 10718 ); 10719 } 10720 t.loadLevel !== a && 10721 -1 === t.manualLevel && 10722 this.log('Adapting to level ' + a + ' from level ' + this.level), 10723 (this.level = t.nextLoadLevel = a); 10724 var h = s.details; 10725 if (!h || this.state === $r || (h.live && this.levelLastLoaded !== a)) 10726 return (this.level = a), void (this.state = $r); 10727 var d = o.len, 10728 c = this.getMaxBufferLength(s.maxBitrate); 10729 if (!(d >= c)) { 10730 this.backtrackFragment && this.backtrackFragment.start > o.end && (this.backtrackFragment = null); 10731 var f = this.backtrackFragment ? this.backtrackFragment.start : o.end, 10732 g = this.getNextFragment(f, h); 10733 if ( 10734 this.couldBacktrack && 10735 !this.fragPrevious && 10736 g && 10737 'initSegment' !== g.sn && 10738 this.fragmentTracker.getState(g) !== mr 10739 ) { 10740 var v, 10741 m = (null != (v = this.backtrackFragment) ? v : g).sn - h.startSN, 10742 p = h.fragments[m - 1]; 10743 p && g.cc === p.cc && ((g = p), this.fragmentTracker.removeFragment(p)); 10744 } else this.backtrackFragment && o.len && (this.backtrackFragment = null); 10745 if (g && this.isLoopLoading(g, f)) { 10746 if (!g.gap) { 10747 var y = this.audioOnly && !this.altAudio ? O : N, 10748 T = (y === N ? this.videoBuffer : this.mediaBuffer) || this.media; 10749 T && this.afterBufferFlushed(T, y, ge); 10750 } 10751 g = this.getNextFragmentLoopLoading(g, h, o, ge, c); 10752 } 10753 g && 10754 (!g.initSegment || g.initSegment.data || this.bitrateTest || (g = g.initSegment), 10755 this.loadFragment(g, s, f)); 10756 } 10757 } 10758 } 10759 }), 10760 (r.loadFragment = function (e, r, i) { 10761 var n = this.fragmentTracker.getState(e); 10762 (this.fragCurrent = e), 10763 n === fr || n === vr 10764 ? 'initSegment' === e.sn 10765 ? this._loadInitSegment(e, r) 10766 : this.bitrateTest 10767 ? (this.log( 10768 'Fragment ' + 10769 e.sn + 10770 ' of level ' + 10771 e.level + 10772 ' is being downloaded to test bitrate and will not be buffered', 10773 ), 10774 this._loadBitrateTestFrag(e, r)) 10775 : ((this.startFragRequested = !0), t.prototype.loadFragment.call(this, e, r, i)) 10776 : this.clearTrackerIfNeeded(e); 10777 }), 10778 (r.getBufferedFrag = function (t) { 10779 return this.fragmentTracker.getBufferedFrag(t, ge); 10780 }), 10781 (r.followingBufferedFrag = function (t) { 10782 return t ? this.getBufferedFrag(t.end + 0.5) : null; 10783 }), 10784 (r.immediateLevelSwitch = function () { 10785 this.abortCurrentFrag(), this.flushMainBuffer(0, Number.POSITIVE_INFINITY); 10786 }), 10787 (r.nextLevelSwitch = function () { 10788 var t = this.levels, 10789 e = this.media; 10790 if (null != e && e.readyState) { 10791 var r, 10792 i = this.getAppendedFrag(e.currentTime); 10793 i && i.start > 1 && this.flushMainBuffer(0, i.start - 1); 10794 var n = this.getLevelDetails(); 10795 if (null != n && n.live) { 10796 var a = this.getMainFwdBufferInfo(); 10797 if (!a || a.len < 2 * n.targetduration) return; 10798 } 10799 if (!e.paused && t) { 10800 var s = t[this.hls.nextLoadLevel], 10801 o = this.fragLastKbps; 10802 r = o && this.fragCurrent ? (this.fragCurrent.duration * s.maxBitrate) / (1e3 * o) + 1 : 0; 10803 } else r = 0; 10804 var l = this.getBufferedFrag(e.currentTime + r); 10805 if (l) { 10806 var u = this.followingBufferedFrag(l); 10807 if (u) { 10808 this.abortCurrentFrag(); 10809 var h = u.maxStartPTS ? u.maxStartPTS : u.start, 10810 d = u.duration, 10811 c = Math.max( 10812 l.end, 10813 h + Math.min(Math.max(d - this.config.maxFragLookUpTolerance, 0.5 * d), 0.75 * d), 10814 ); 10815 this.flushMainBuffer(c, Number.POSITIVE_INFINITY); 10816 } 10817 } 10818 } 10819 }), 10820 (r.abortCurrentFrag = function () { 10821 var t = this.fragCurrent; 10822 switch ( 10823 ((this.fragCurrent = null),
10824 (this.backtrackFragment = null), 10825 t && (t.abortRequests(), this.fragmentTracker.removeFragment(t)), 10826 this.state) 10827 ) { 10828 case Hr: 10829 case Vr: 10830 case Yr: 10831 case jr: 10832 case qr: 10833 this.state = Kr; 10834 } 10835 this.nextLoadPosition = this.getLoadPosition(); 10836 }), 10837 (r.flushMainBuffer = function (e, r) { 10838 t.prototype.flushMainBuffer.call(this, e, r, this.altAudio ? 'video' : null); 10839 }), 10840 (r.onMediaAttached = function (e, r) { 10841 t.prototype.onMediaAttached.call(this, e, r); 10842 var i = r.media; 10843 (this.onvplaying = this.onMediaPlaying.bind(this)), 10844 (this.onvseeked = this.onMediaSeeked.bind(this)), 10845 i.addEventListener('playing', this.onvplaying), 10846 i.addEventListener('seeked', this.onvseeked), 10847 (this.gapController = new dn(this.config, i, this.fragmentTracker, this.hls)); 10848 }), 10849 (r.onMediaDetaching = function () { 10850 var e = this.media; 10851 e && 10852 this.onvplaying && 10853 this.onvseeked && 10854 (e.removeEventListener('playing', this.onvplaying), 10855 e.removeEventListener('seeked', this.onvseeked), 10856 (this.onvplaying = this.onvseeked = null),
10857 (this.videoBuffer = null)), 10858 (this.fragPlaying = null), 10859 this.gapController && (this.gapController.destroy(), (this.gapController = null)), 10860 t.prototype.onMediaDetaching.call(this); 10861 }), 10862 (r.onMediaPlaying = function () { 10863 this.tick(); 10864 }), 10865 (r.onMediaSeeked = function () { 10866 var t = this.media, 10867 e = t ? t.currentTime : null; 10868 E(e) && this.log('Media seeked to ' + e.toFixed(3)); 10869 var r = this.getMainFwdBufferInfo(); 10870 null !== r && 0 !== r.len 10871 ? this.tick() 10872 : this.warn('Main forward buffer length on "seeked" event ' + (r ? r.len : 'empty') + ')'); 10873 }), 10874 (r.onManifestLoading = function () { 10875 this.log('Trigger BUFFER_RESET'), 10876 this.hls.trigger(S.BUFFER_RESET, void 0), 10877 this.fragmentTracker.removeAllFragments(), 10878 (this.couldBacktrack = !1), 10879 (this.startPosition = this.lastCurrentTime = 0), 10880 (this.levels = this.fragPlaying = this.backtrackFragment = null), 10881 (this.altAudio = this.audioOnly = !1); 10882 }), 10883 (r.onManifestParsed = function (t, e) { 10884 var r, 10885 i, 10886 n, 10887 a = !1, 10888 s = !1; 10889 e.levels.forEach(function (t) { 10890 (r = t.audioCodec) && 10891 (-1 !== r.indexOf('mp4a.40.2') && (a = !0), -1 !== r.indexOf('mp4a.40.5') && (s = !0)); 10892 }), 10893 (this.audioCodecSwitch = 10894 a && 10895 s && 10896 !('function' == typeof (null == (n = Zr()) || null == (i = n.prototype) ? void 0 : i.changeType))), 10897 this.audioCodecSwitch && 10898 this.log('Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC'), 10899 (this.levels = e.levels), 10900 (this.startFragRequested = !1); 10901 }), 10902 (r.onLevelLoading = function (t, e) { 10903 var r = this.levels; 10904 if (r && this.state === Kr) { 10905 var i = r[e.level]; 10906 (!i.details || 10907 (i.details.live && this.levelLastLoaded !== e.level) || 10908 this.waitForCdnTuneIn(i.details)) && 10909 (this.state = $r); 10910 } 10911 }), 10912 (r.onLevelLoaded = function (t, e) { 10913 var r, 10914 i = this.levels, 10915 n = e.level, 10916 a = e.details, 10917 s = a.totalduration; 10918 if (i) { 10919 this.log( 10920 'Level ' + 10921 n + 10922 ' loaded [' + 10923 a.startSN + 10924 ',' + 10925 a.endSN + 10926 ']' + 10927 (a.lastPartSn ? '[part-' + a.lastPartSn + '-' + a.lastPartIndex + ']' : '') + 10928 ', cc [' + 10929 a.startCC + 10930 ', ' + 10931 a.endCC + 10932 '] duration:' + 10933 s, 10934 ); 10935 var o = i[n], 10936 l = this.fragCurrent; 10937 !l || 10938 (this.state !== Vr && this.state !== Yr) || 10939 (l.level === e.level && l.urlId === o.urlId) || 10940 !l.loader || 10941 this.abortCurrentFrag(); 10942 var u = 0; 10943 if (a.live || (null != (r = o.details) && r.live)) { 10944 if ((this.checkLiveUpdate(a), a.deltaUpdateFailed)) return; 10945 u = this.alignPlaylists(a, o.details); 10946 } 10947 if ( 10948 ((o.details = a), 10949 (this.levelLastLoaded = n), 10950 this.hls.trigger(S.LEVEL_UPDATED, { details: a, level: n }), 10951 this.state === $r) 10952 ) { 10953 if (this.waitForCdnTuneIn(a)) return; 10954 this.state = Kr; 10955 } 10956 this.startFragRequested ? a.live && this.synchronizeToLiveEdge(a) : this.setStartPosition(a, u), 10957 this.tick(); 10958 } else this.warn('Levels were reset while loading level ' + n); 10959 }), 10960 (r._handleFragmentLoadProgress = function (t) { 10961 var e, 10962 r = t.frag, 10963 i = t.part, 10964 n = t.payload, 10965 a = this.levels; 10966 if (a) { 10967 var s = a[r.level], 10968 o = s.details; 10969 if (!o) 10970 return ( 10971 this.warn('Dropping fragment ' + r.sn + ' of level ' + r.level + ' after level details were reset'), 10972 void this.fragmentTracker.removeFragment(r) 10973 ); 10974 var l = s.videoCodec, 10975 u = o.PTSKnown || !o.live, 10976 h = null == (e = r.initSegment) ? void 0 : e.data, 10977 d = this._getAudioCodec(s), 10978 c = (this.transmuxer = 10979 this.transmuxer || 10980 new hn( 10981 this.hls, 10982 ge, 10983 this._handleTransmuxComplete.bind(this), 10984 this._handleTransmuxerFlush.bind(this), 10985 )), 10986 f = i ? i.index : -1, 10987 g = -1 !== f, 10988 v = new wr(r.level, r.sn, r.stats.chunkCount, n.byteLength, f, g), 10989 m = this.initPTS[r.cc]; 10990 c.push(n, h, d, l, r, i, o.totalduration, u, v, m); 10991 } else 10992 this.warn( 10993 'Levels were reset while fragment load was in progress. Fragment ' + 10994 r.sn + 10995 ' of level ' + 10996 r.level + 10997 ' will not be buffered', 10998 ); 10999 }), 11000 (r.onAudioTrackSwitching = function (t, e) { 11001 var r = this.altAudio; 11002 if (!e.url) { 11003 if (this.mediaBuffer !== this.media) { 11004 this.log('Switching on main audio, use media.buffered to schedule main fragment loading'), 11005 (this.mediaBuffer = this.media); 11006 var i = this.fragCurrent; 11007 i && 11008 (this.log('Switching to main audio track, cancel main fragment load'), 11009 i.abortRequests(), 11010 this.fragmentTracker.removeFragment(i)), 11011 this.resetTransmuxer(), 11012 this.resetLoadingState(); 11013 } else this.audioOnly && this.resetTransmuxer(); 11014 var n = this.hls; 11015 r && 11016 (n.trigger(S.BUFFER_FLUSHING, { startOffset: 0, endOffset: Number.POSITIVE_INFINITY, type: null }), 11017 this.fragmentTracker.removeAllFragments()), 11018 n.trigger(S.AUDIO_TRACK_SWITCHED, e); 11019 } 11020 }), 11021 (r.onAudioTrackSwitched = function (t, e) { 11022 var r = e.id, 11023 i = !!this.hls.audioTracks[r].url; 11024 if (i) { 11025 var n = this.videoBuffer; 11026 n && 11027 this.mediaBuffer !== n && 11028 (this.log('Switching on alternate audio, use video.buffered to schedule main fragment loading'), 11029 (this.mediaBuffer = n)); 11030 } 11031 (this.altAudio = i), this.tick(); 11032 }), 11033 (r.onBufferCreated = function (t, e) { 11034 var r, 11035 i, 11036 n = e.tracks, 11037 a = !1; 11038 for (var s in n) { 11039 var o = n[s]; 11040 if ('main' === o.id) { 11041 if (((i = s), (r = o), 'video' === s)) { 11042 var l = n[s]; 11043 l && (this.videoBuffer = l.buffer); 11044 } 11045 } else a = !0; 11046 } 11047 a && r 11048 ? (this.log('Alternate track found, use ' + i + '.buffered to schedule main fragment loading'), 11049 (this.mediaBuffer = r.buffer)) 11050 : (this.mediaBuffer = this.media); 11051 }), 11052 (r.onFragBuffered = function (t, e) { 11053 var r = e.frag, 11054 i = e.part; 11055 if (!r || r.type === ge) { 11056 if (this.fragContextChanged(r)) 11057 return ( 11058 this.warn( 11059 'Fragment ' + 11060 r.sn + 11061 (i ? ' p: ' + i.index : '') + 11062 ' of level ' + 11063 r.level + 11064 ' finished buffering, but was aborted. state: ' + 11065 this.state, 11066 ), 11067 void (this.state === qr && (this.state = Kr)) 11068 ); 11069 var n = i ? i.stats : r.stats;
11070 (this.fragLastKbps = Math.round((8 * n.total) / (n.buffering.end - n.loading.first))), 11071 'initSegment' !== r.sn && (this.fragPrevious = r), 11072 this.fragBufferedComplete(r, i); 11073 } 11074 }), 11075 (r.onError = function (t, e) { 11076 var r; 11077 if (e.fatal) this.state = zr; 11078 else 11079 switch (e.details) { 11080 case R.FRAG_GAP: 11081 case R.FRAG_PARSING_ERROR: 11082 case R.FRAG_DECRYPT_ERROR: 11083 case R.FRAG_LOAD_ERROR: 11084 case R.FRAG_LOAD_TIMEOUT: 11085 case R.KEY_LOAD_ERROR: 11086 case R.KEY_LOAD_TIMEOUT: 11087 this.onFragmentOrKeyLoadError(ge, e); 11088 break; 11089 case R.LEVEL_LOAD_ERROR: 11090 case R.LEVEL_LOAD_TIMEOUT: 11091 case R.LEVEL_PARSING_ERROR: 11092 e.levelRetry || 11093 this.state !== $r || 11094 (null == (r = e.context) ? void 0 : r.type) !== de || 11095 (this.state = Kr); 11096 break; 11097 case R.BUFFER_FULL_ERROR: 11098 if (!e.parent || 'main' !== e.parent) return; 11099 this.reduceLengthAndFlushBuffer(e) && this.flushMainBuffer(0, Number.POSITIVE_INFINITY); 11100 break; 11101 case R.INTERNAL_EXCEPTION: 11102 this.recoverWorkerError(e); 11103 } 11104 }), 11105 (r.checkBuffer = function () { 11106 var t = this.media, 11107 e = this.gapController; 11108 if (t && e && t.readyState) { 11109 if (this.loadedmetadata || !Ir.getBuffered(t).length) { 11110 var r = this.state !== Kr ? this.fragCurrent : null; 11111 e.poll(this.lastCurrentTime, r); 11112 } 11113 this.lastCurrentTime = t.currentTime; 11114 } 11115 }), 11116 (r.onFragLoadEmergencyAborted = function () { 11117 (this.state = Kr), 11118 this.loadedmetadata || ((this.startFragRequested = !1), (this.nextLoadPosition = this.startPosition)), 11119 this.tickImmediate(); 11120 }), 11121 (r.onBufferFlushed = function (t, e) { 11122 var r = e.type; 11123 if (r !== O || (this.audioOnly && !this.altAudio)) { 11124 var i = (r === N ? this.videoBuffer : this.mediaBuffer) || this.media; 11125 this.afterBufferFlushed(i, r, ge); 11126 } 11127 }), 11128 (r.onLevelsUpdated = function (t, e) { 11129 this.levels = e.levels; 11130 }), 11131 (r.swapAudioCodec = function () { 11132 this.audioCodecSwap = !this.audioCodecSwap; 11133 }), 11134 (r.seekToStartPos = function () { 11135 var t = this.media; 11136 if (t) { 11137 var e = t.currentTime, 11138 r = this.startPosition; 11139 if (r >= 0 && e < r) { 11140 if (t.seeking) return void this.log('could not seek to ' + r + ', already seeking at ' + e); 11141 var i = Ir.getBuffered(t), 11142 n = (i.length ? i.start(0) : 0) - r; 11143 n > 0 && 11144 (n < this.config.maxBufferHole || n < this.config.maxFragLookUpTolerance) && 11145 (this.log('adjusting start position by ' + n + ' to match buffer start'), 11146 (r += n), 11147 (this.startPosition = r)), 11148 this.log('seek to target start position ' + r + ' from current time ' + e), 11149 (t.currentTime = r); 11150 } 11151 } 11152 }), 11153 (r._getAudioCodec = function (t) { 11154 var e = this.config.defaultAudioCodec || t.audioCodec; 11155 return ( 11156 this.audioCodecSwap && 11157 e && 11158 (this.log('Swapping audio codec'), (e = -1 !== e.indexOf('mp4a.40.5') ? 'mp4a.40.2' : 'mp4a.40.5')), 11159 e 11160 ); 11161 }), 11162 (r._loadBitrateTestFrag = function (t, e) { 11163 var r = this; 11164 (t.bitrateTest = !0), 11165 this._doFragLoad(t, e).then(function (i) { 11166 var n = r.hls; 11167 if (i && !r.fragContextChanged(t)) { 11168 (e.fragmentError = 0), (r.state = Kr), (r.startFragRequested = !1), (r.bitrateTest = !1); 11169 var a = t.stats; 11170 (a.parsing.start = a.parsing.end = a.buffering.start = a.buffering.end = self.performance.now()), 11171 n.trigger(S.FRAG_LOADED, i), 11172 (t.bitrateTest = !1); 11173 } 11174 }); 11175 }), 11176 (r._handleTransmuxComplete = function (t) { 11177 var e, 11178 r = 'main', 11179 i = this.hls, 11180 n = t.remuxResult, 11181 a = t.chunkMeta, 11182 s = this.getCurrentContext(a); 11183 if (s) { 11184 var o = s.frag, 11185 l = s.part, 11186 u = s.level, 11187 h = n.video, 11188 d = n.text, 11189 c = n.id3, 11190 f = n.initSegment, 11191 g = u.details, 11192 v = this.altAudio ? void 0 : n.audio; 11193 if (this.fragContextChanged(o)) this.fragmentTracker.removeFragment(o); 11194 else { 11195 if (((this.state = jr), f)) { 11196 if (null != f && f.tracks) { 11197 var m = o.initSegment || o; 11198 this._bufferInitSegment(u, f.tracks, m, a), 11199 i.trigger(S.FRAG_PARSING_INIT_SEGMENT, { frag: m, id: r, tracks: f.tracks }); 11200 } 11201 var p = f.initPTS, 11202 y = f.timescale; 11203 E(p) && 11204 ((this.initPTS[o.cc] = { baseTime: p, timescale: y }), 11205 i.trigger(S.INIT_PTS_FOUND, { frag: o, id: r, initPTS: p, timescale: y })); 11206 } 11207 if (h && g && 'initSegment' !== o.sn) { 11208 var T = g.fragments[o.sn - 1 - g.startSN], 11209 L = o.sn === g.startSN, 11210 R = !T || o.cc > T.cc; 11211 if (!1 !== n.independent) { 11212 var A = h.startPTS, 11213 k = h.endPTS, 11214 b = h.startDTS, 11215 D = h.endDTS; 11216 if (l) l.elementaryStreams[h.type] = { startPTS: A, endPTS: k, startDTS: b, endDTS: D }; 11217 else if ( 11218 (h.firstKeyFrame && h.independent && 1 === a.id && !R && (this.couldBacktrack = !0), 11219 h.dropped && h.independent) 11220 ) { 11221 var I = this.getMainFwdBufferInfo(), 11222 w = (I ? I.end : this.getLoadPosition()) + this.config.maxBufferHole, 11223 C = h.firstKeyFramePTS ? h.firstKeyFramePTS : A; 11224 if (!L && w < C - this.config.maxBufferHole && !R) return void this.backtrack(o); 11225 R && (o.gap = !0), o.setElementaryStreamInfo(h.type, o.start, k, o.start, D, !0); 11226 } 11227 o.setElementaryStreamInfo(h.type, A, k, b, D), 11228 this.backtrackFragment && (this.backtrackFragment = o), 11229 this.bufferFragmentData(h, o, l, a, L || R); 11230 } else { 11231 if (!L && !R) return void this.backtrack(o); 11232 o.gap = !0; 11233 } 11234 } 11235 if (v) { 11236 var _ = v.startPTS, 11237 P = v.endPTS, 11238 x = v.startDTS, 11239 F = v.endDTS; 11240 l && (l.elementaryStreams[O] = { startPTS: _, endPTS: P, startDTS: x, endDTS: F }), 11241 o.setElementaryStreamInfo(O, _, P, x, F), 11242 this.bufferFragmentData(v, o, l, a); 11243 } 11244 if (g && null != c && null != (e = c.samples) && e.length) { 11245 var M = { id: r, frag: o, details: g, samples: c.samples }; 11246 i.trigger(S.FRAG_PARSING_METADATA, M); 11247 } 11248 if (g && d) { 11249 var N = { id: r, frag: o, details: g, samples: d.samples }; 11250 i.trigger(S.FRAG_PARSING_USERDATA, N); 11251 } 11252 } 11253 } else this.resetWhenMissingContext(a); 11254 }), 11255 (r._bufferInitSegment = function (t, e, r, i) { 11256 var n = this; 11257 if (this.state === jr) { 11258 (this.audioOnly = !!e.audio && !e.video), this.altAudio && !this.audioOnly && delete e.audio; 11259 var a = e.audio, 11260 s = e.video, 11261 o = e.audiovideo; 11262 if (a) { 11263 var l = t.audioCodec, 11264 u = navigator.userAgent.toLowerCase(); 11265 this.audioCodecSwitch && 11266 (l && (l = -1 !== l.indexOf('mp4a.40.5') ? 'mp4a.40.2' : 'mp4a.40.5'), 11267 1 !== a.metadata.channelCount && -1 === u.indexOf('firefox') && (l = 'mp4a.40.5')), 11268 -1 !== u.indexOf('android') && 11269 'audio/mpeg' !== a.container && 11270 ((l = 'mp4a.40.2'), this.log('Android: force audio codec to ' + l)), 11271 t.audioCodec && 11272 t.audioCodec !== l && 11273 this.log('Swapping manifest audio codec "' + t.audioCodec + '" for "' + l + '"'), 11274 (a.levelCodec = l), 11275 (a.id = 'main'), 11276 this.log( 11277 'Init audio buffer, container:' + 11278 a.container + 11279 ', codecs[selected/level/parsed]=[' + 11280 (l || '') + 11281 '/' + 11282 (t.audioCodec || '') + 11283 '/' + 11284 a.codec + 11285 ']', 11286 ); 11287 } 11288 s && 11289 ((s.levelCodec = t.videoCodec), 11290 (s.id = 'main'), 11291 this.log( 11292 'Init video buffer, container:' + 11293 s.container + 11294 ', codecs[level/parsed]=[' + 11295 (t.videoCodec || '') + 11296 '/' + 11297 s.codec + 11298 ']', 11299 )), 11300 o && 11301 this.log( 11302 'Init audiovideo buffer, container:' + 11303 o.container + 11304 ', codecs[level/parsed]=[' + 11305 (t.attrs.CODECS || '') + 11306 '/' + 11307 o.codec + 11308 ']', 11309 ), 11310 this.hls.trigger(S.BUFFER_CODECS, e), 11311 Object.keys(e).forEach(function (t) { 11312 var a = e[t].initSegment; 11313 null != a && 11314 a.byteLength && 11315 n.hls.trigger(S.BUFFER_APPENDING, { 11316 type: t, 11317 data: a, 11318 frag: r, 11319 part: null, 11320 chunkMeta: i, 11321 parent: r.type, 11322 }); 11323 }), 11324 this.tick(); 11325 } 11326 }), 11327 (r.getMainFwdBufferInfo = function () { 11328 return this.getFwdBufferInfo(this.mediaBuffer ? this.mediaBuffer : this.media, ge); 11329 }), 11330 (r.backtrack = function (t) { 11331 (this.couldBacktrack = !0), 11332 (this.backtrackFragment = t), 11333 this.resetTransmuxer(), 11334 this.flushBufferGap(t), 11335 this.fragmentTracker.removeFragment(t), 11336 (this.fragPrevious = null),
11337 (this.nextLoadPosition = t.start), 11338 (this.state = Kr); 11339 }), 11340 (r.checkFragmentChanged = function () { 11341 var t = this.media, 11342 e = null; 11343 if (t && t.readyState > 1 && !1 === t.seeking) { 11344 var r = t.currentTime; 11345 if ( 11346 (Ir.isBuffered(t, r) 11347 ? (e = this.getAppendedFrag(r)) 11348 : Ir.isBuffered(t, r + 0.1) && (e = this.getAppendedFrag(r + 0.1)), 11349 e) 11350 ) { 11351 this.backtrackFragment = null; 11352 var i = this.fragPlaying, 11353 n = e.level; 11354 (i && e.sn === i.sn && i.level === n && e.urlId === i.urlId) || 11355 ((this.fragPlaying = e), 11356 this.hls.trigger(S.FRAG_CHANGED, { frag: e }), 11357 (i && i.level === n) || this.hls.trigger(S.LEVEL_SWITCHED, { level: n })); 11358 } 11359 } 11360 }), 11361 a(e, [ 11362 { 11363 key: 'nextLevel', 11364 get: function () { 11365 var t = this.nextBufferedFrag; 11366 return t ? t.level : -1; 11367 }, 11368 }, 11369 { 11370 key: 'currentFrag', 11371 get: function () { 11372 var t = this.media; 11373 return t ? this.fragPlaying || this.getAppendedFrag(t.currentTime) : null; 11374 }, 11375 }, 11376 { 11377 key: 'currentProgramDateTime', 11378 get: function () { 11379 var t = this.media; 11380 if (t) { 11381 var e = t.currentTime, 11382 r = this.currentFrag; 11383 if (r && E(e) && E(r.programDateTime)) { 11384 var i = r.programDateTime + 1e3 * (e - r.start); 11385 return new Date(i); 11386 } 11387 } 11388 return null; 11389 }, 11390 }, 11391 { 11392 key: 'currentLevel', 11393 get: function () { 11394 var t = this.currentFrag; 11395 return t ? t.level : -1; 11396 }, 11397 }, 11398 { 11399 key: 'nextBufferedFrag', 11400 get: function () { 11401 var t = this.currentFrag; 11402 return t ? this.followingBufferedFrag(t) : null; 11403 }, 11404 }, 11405 { 11406 key: 'forceStartLoad', 11407 get: function () { 11408 return this._forceStartLoad; 11409 }, 11410 }, 11411 ]), 11412 e 11413 ); 11414 })(Jr), 11415 fn = (function () { 11416 function t(t, e, r) { 11417 void 0 === e && (e = 0), 11418 void 0 === r && (r = 0), 11419 (this.halfLife = void 0), 11420 (this.alpha_ = void 0), 11421 (this.estimate_ = void 0), 11422 (this.totalWeight_ = void 0), 11423 (this.halfLife = t), 11424 (this.alpha_ = t ? Math.exp(Math.log(0.5) / t) : 0), 11425 (this.estimate_ = e), 11426 (this.totalWeight_ = r); 11427 } 11428 var e = t.prototype; 11429 return ( 11430 (e.sample = function (t, e) { 11431 var r = Math.pow(this.alpha_, t); 11432 (this.estimate_ = e * (1 - r) + r * this.estimate_), (this.totalWeight_ += t); 11433 }), 11434 (e.getTotalWeight = function () { 11435 return this.totalWeight_; 11436 }), 11437 (e.getEstimate = function () { 11438 if (this.alpha_) { 11439 var t = 1 - Math.pow(this.alpha_, this.totalWeight_); 11440 if (t) return this.estimate_ / t; 11441 } 11442 return this.estimate_; 11443 }), 11444 t 11445 ); 11446 })(), 11447 gn = (function () { 11448 function t(t, e, r, i) { 11449 void 0 === i && (i = 100), 11450 (this.defaultEstimate_ = void 0), 11451 (this.minWeight_ = void 0), 11452 (this.minDelayMs_ = void 0), 11453 (this.slow_ = void 0), 11454 (this.fast_ = void 0), 11455 (this.defaultTTFB_ = void 0), 11456 (this.ttfb_ = void 0), 11457 (this.defaultEstimate_ = r), 11458 (this.minWeight_ = 0.001), 11459 (this.minDelayMs_ = 50), 11460 (this.slow_ = new fn(t)), 11461 (this.fast_ = new fn(e)), 11462 (this.defaultTTFB_ = i), 11463 (this.ttfb_ = new fn(t)); 11464 } 11465 var e = t.prototype; 11466 return ( 11467 (e.update = function (t, e) { 11468 var r = this.slow_, 11469 i = this.fast_, 11470 n = this.ttfb_; 11471 r.halfLife !== t && (this.slow_ = new fn(t, r.getEstimate(), r.getTotalWeight(
11471))), 11472 i.halfLife !== e && (this.fast_ = new fn(e, i.getEstimate(), i.getTotalWeight())), 11473 n.halfLife !== t && (this.ttfb_ = new fn(t, n.getEstimate(), n.getTotalWeight())); 11474 }), 11475 (e.sample = function (t, e) { 11476 var r = (t = Math.max(t, this.minDelayMs_)) / 1e3, 11477 i = (8 * e) / r; 11478 this.fast_.sample(r, i), this.slow_.sample(r, i); 11479 }), 11480 (e.sampleTTFB = function (t) { 11481 var e = t / 1e3, 11482 r = Math.sqrt(2) * Math.exp(-Math.pow(e, 2) / 2); 11483 this.ttfb_.sample(r, Math.max(t, 5)); 11484 }), 11485 (e.canEstimate = function () { 11486 return this.fast_.getTotalWeight() >= this.minWeight_; 11487 }), 11488 (e.getEstimate = function () { 11489 return this.canEstimate() 11490 ? Math.min(this.fast_.getEstimate(), this.slow_.getEstimate()) 11491 : this.defaultEstimate_; 11492 }), 11493 (e.getEstimateTTFB = function () { 11494 return this.ttfb_.getTotalWeight() >= this.minWeight_ ? this.ttfb_.getEstimate() : this.defaultTTFB_; 11495 }), 11496 (e.destroy = function () {}), 11497 t 11498 ); 11499 })(), 11500 vn = (function () { 11501 function t(t) { 11502 (this.hls = void 0), 11503 (this.lastLevelLoadSec = 0), 11504 (this.lastLoadedFragLevel = 0), 11505 (this._nextAutoLevel = -1), 11506 (this.timer = -1), 11507 (this.onCheck = this._abandonRulesCheck.bind(this)), 11508 (this.fragCurrent = null), 11509 (this.partCurrent = null), 11510 (this.bitrateTestDelay = 0), 11511 (this.bwEstimator = void 0), 11512 (this.hls = t); 11513 var e = t.config; 11514 (this.bwEstimator = new gn(e.abrEwmaSlowVoD, e.abrEwmaFastVoD, e.abrEwmaDefaultEstimate)), 11515 this.registerListeners(); 11516 } 11517 var e = t.prototype; 11518 return ( 11519 (e.registerListeners = function () { 11520 var t = this.hls; 11521 t.on(S.FRAG_LOADING, this.onFragLoading, this), 11522 t.on(S.FRAG_LOADED, this.onFragLoaded, this), 11523 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this), 11524 t.on(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 11525 t.on(S.LEVEL_LOADED, this.onLevelLoaded, this); 11526 }), 11527 (e.unregisterListeners = function () { 11528 var t = this.hls; 11529 t.off(S.FRAG_LOADING, this.onFragLoading, this), 11530 t.off(S.FRAG_LOADED, this.onFragLoaded, this), 11531 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this), 11532 t.off(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 11533 t.off(S.LEVEL_LOADED, this.onLevelLoaded, this); 11534 }), 11535 (e.destroy = function () { 11536 this.unregisterListeners(), 11537 this.clearTimer(), 11538 (this.hls = this.onCheck = null), 11539 (this.fragCurrent = this.partCurrent = null); 11540 }), 11541 (e.onFragLoading = function (t, e) { 11542 var r, 11543 i = e.frag; 11544 this.ignoreFragment(i) || 11545 ((this.fragCurrent = i), 11546 (this.partCurrent = null != (r = e.part) ? r : null), 11547 this.clearTimer(), 11548 (this.timer = self.setInterval(this.onCheck, 100))); 11549 }), 11550 (e.onLevelSwitching = function (t, e) { 11551 this.clearTimer(); 11552 }), 11553 (e.getTimeToLoadFrag = function (t, e, r, i) { 11554 return t + r / e + (i ? this.lastLevelLoadSec : 0); 11555 }), 11556 (e.onLevelLoaded = function (t, e) { 11557 var r = this.hls.config, 11558 i = e.stats, 11559 n = i.total, 11560 a = i.bwEstimate; 11561 E(n) && E(a) && (this.lastLevelLoadSec = (8 * n) / a), 11562 e.details.live 11563 ? this.bwEstimator.update(r.abrEwmaSlowLive, r.abrEwmaFastLive) 11564 : this.bwEstimator.update(r.abrEwmaSlowVoD, r.abrEwmaFastVoD); 11565 }), 11566 (e._abandonRulesCheck = function () { 11567 var t = this.fragCurrent, 11568 e = this.partCurrent, 11569 r = this.hls, 11570 i = r.autoLevelEnabled, 11571 n = r.media; 11572 if (t && n) { 11573 var a = performance.now(), 11574 s = e ? e.stats : t.stats, 11575 o = e ? e.duration : t.duration, 11576 l = a - s.loading.start; 11577 if (s.aborted || (s.loaded && s.loaded === s.total) || 0 === t.level) 11578 return this.clearTimer(), void (this._nextAutoLevel = -1); 11579 if (i && !n.paused && n.playbackRate && n.readyState) { 11580 var u = r.mainForwardBufferInfo; 11581 if (null !== u) { 11582 var h = this.bwEstimator.getEstimateTTFB(), 11583 d = Math.abs(n.playbackRate); 11584 if (!(l <= Math.max(h, (o / (2 * d)) * 1e3))) { 11585 var c = u.len / d; 11586 if (!(c >= (2 * o) / d)) { 11587 var f = s.loading.first ? s.loading.first - s.loading.start : -1, 11588 g = s.loaded && f > -1, 11589 v = this.bwEstimator.getEstimate(), 11590 m = r.levels, 11591 p = r.minAutoLevel, 11592 y = m[t.level], 11593 T = s.total || Math.max(s.loaded, Math.round((o * y.maxBitrate) / 8)), 11594 L = l - f; 11595 L < 1 && g && (L = Math.min(l, (8 * s.loaded) / v)); 11596 var R = g ? (1e3 * s.loaded) / L : 0, 11597 A = R ? (T - s.loaded) / R : (8 * T) / v + h / 1e3; 11598 if (!(A <= c)) { 11599 var k, 11600 b = R ? 8 * R : v, 11601 D = Number.POSITIVE_INFINITY; 11602 for (k = t.level - 1; k > p; k--) { 11603 var I = m[k].maxBitrate; 11604 if ((D = this.getTimeToLoadFrag(h / 1e3, b, o * I, !m[k].details)) < c) break; 11605 } 11606 D >= A || 11607 D > 10 * o ||
11608 ((r.nextLoadLevel = k), 11609 g ? this.bwEstimator.sample(l - Math.min(h, f), s.loaded) : this.bwEstimator.sampleTTFB(l), 11610 this.clearTimer(), 11611 w.warn( 11612 '[abr] Fragment ' + 11613 t.sn + 11614 (e ? ' part ' + e.index : '') + 11615 ' of level ' + 11616 t.level + 11617 ' is loading too slowly;\n Time to underbuffer: ' + 11618 c.toFixed(3) + 11619 ' s\n Estimated load time for current fragment: ' + 11620 A.toFixed(3) + 11621 ' s\n Estimated load time for down switch fragment: ' + 11622 D.toFixed(3) + 11623 ' s\n TTFB estimate: ' + 11624 f + 11625 '\n Current BW estimate: ' + 11626 (E(v) ? (v / 1024).toFixed(3) : 'Unknown') + 11627 ' Kb/s\n New BW estimate: ' + 11628 (this.bwEstimator.getEstimate() / 1024).toFixed(3) + 11629 ' Kb/s\n Aborting and switching to level ' + 11630 k, 11631 ), 11632 t.loader && ((this.fragCurrent = this.partCurrent = null), t.abortRequests()), 11633 r.trigger(S.FRAG_LOAD_EMERGENCY_ABORTED, { frag: t, part: e, stats: s })); 11634 } 11635 } 11636 } 11637 } 11638 } 11639 } 11640 }), 11641 (e.onFragLoaded = function (t, e) { 11642 var r = e.frag, 11643 i = e.part, 11644 n = i ? i.stats : r.stats; 11645 if ( 11646 (r.type === ge && this.bwEstimator.sampleTTFB(n.loading.first - n.loading.start), 11647 !this.ignoreFragment(r)) 11648 ) { 11649 if ( 11650 (this.clearTimer(), 11651 (this.lastLoadedFragLevel = r.level), 11652 (this._nextAutoLevel = -1), 11653 this.hls.config.abrMaxWithRealBitrate) 11654 ) { 11655 var a = i ? i.duration : r.duration, 11656 s = this.hls.levels[r.level], 11657 o = (s.loaded ? s.loaded.bytes : 0) + n.loaded, 11658 l = (s.loaded ? s.loaded.duration : 0) + a; 11659 (s.loaded = { bytes: o, duration: l }), (s.realBitrate = Math.round((8 * o) / l)); 11660 } 11661 if (r.bitrateTest) { 11662 var u = { stats: n, frag: r, part: i, id: r.type }; 11663 this.onFragBuffered(S.FRAG_BUFFERED, u), (r.bitrateTest = !1); 11664 } 11665 } 11666 }), 11667 (e.onFragBuffered = function (t, e) { 11668 var r = e.frag, 11669 i = e.part, 11670 n = null != i && i.stats.loaded ? i.stats : r.stats; 11671 if (!n.aborted && !this.ignoreFragment(r)) { 11672 var a = 11673 n.parsing.end - 11674 n.loading.start - 11675 Math.min(n.loading.first - n.loading.start, this.bwEstimator.getEstimateTTFB()); 11676 this.bwEstimator.sample(a, n.loaded), 11677 (n.bwEstimate = this.bwEstimator.getEstimate()), 11678 r.bitrateTest ? (this.bitrateTestDelay = a / 1e3) : (this.bitrateTestDelay = 0); 11679 } 11680 }), 11681 (e.ignoreFragment = function (t) { 11682 return t.type !== ge || 'initSegment' === t.sn; 11683 }), 11684 (e.clearTimer = function () { 11685 self.clearInterval(this.timer); 11686 }), 11687 (e.getNextABRAutoLevel = function () { 11688 var t = this.fragCurrent, 11689 e = this.partCurrent, 11690 r = this.hls, 11691 i = r.maxAutoLevel, 11692 n = r.config, 11693 a = r.minAutoLevel, 11694 s = r.media, 11695 o = e ? e.duration : t ? t.duration : 0, 11696 l = s && 0 !== s.playbackRate ? Math.abs(s.playbackRate) : 1, 11697 u = this.bwEstimator ? this.bwEstimator.getEstimate() : n.abrEwmaDefaultEstimate, 11698 h = r.mainForwardBufferInfo, 11699 d = (h ? h.len : 0) / l, 11700 c = this.findBestLevel(u, a, i, d, n.abrBandWidthFactor, n.abrBandWidthUpFactor); 11701 if (c >= 0) return c; 11702 w.trace('[abr] ' + (d ? 'rebuffering expected' : 'buffer is empty') + ', finding optimal quality level'); 11703 var f = o ? Math.min(o, n.maxStarvationDelay) : n.maxStarvationDelay, 11704 g = n.abrBandWidthFactor, 11705 v = n.abrBandWidthUpFactor; 11706 if (!d) { 11707 var m = this.bitrateTestDelay; 11708 m && 11709 ((f = (o ? Math.min(o, n.maxLoadingDelay) : n.maxLoadingDelay) - m), 11710 w.trace( 11711 '[abr] bitrate test took ' + 11712 Math.round(1e3 * m) + 11713 'ms, set first fragment max fetchDuration to ' + 11714 Math.round(1e3 * f) + 11715 ' ms', 11716 ), 11717 (g = v = 1)); 11718 } 11719 return (c = this.findBestLevel(u, a, i, d + f, g, v)), Math.max(c, 0); 11720 }), 11721 (e.findBestLevel = function (t, e, r, i, n, a) { 11722 for ( 11723 var s, 11724 o = this.fragCurrent, 11725 l = this.partCurrent, 11726 u = this.lastLoadedFragLevel, 11727 h = this.hls.levels, 11728 d = h[u], 11729 c = !(null == d || null == (s = d.details) || !s.live),
11730 f = null == d ? void 0 : d.codecSet, 11731 g = l ? l.duration : o ? o.duration : 0, 11732 v = this.bwEstimator.getEstimateTTFB() / 1e3, 11733 m = e, 11734 p = -1, 11735 y = r; 11736 y >= e; 11737 y-- 11738 ) { 11739 var T = h[y]; 11740 if (!T || (f && T.codecSet !== f)) T && ((m = Math.min(y, m)), (p = Math.max(y, p))); 11741 else { 11742 -1 !== p && 11743 w.trace( 11744 '[abr] Skipped level(s) ' + 11745 m + 11746 '-' + 11747 p + 11748 ' with CODECS:"' + 11749 h[p].attrs.CODECS + 11750 '"; not compatible with "' + 11751 d.attrs.CODECS + 11752 '"', 11753 ); 11754 var S = T.details, 11755 L = (l ? (null == S ? void 0 : S.partTarget) : null == S ? void 0 : S.averagetargetduration) || g, 11756 R = void 0; 11757 R = y <= u ? n * t : a * t; 11758 var A = h[y].maxBitrate, 11759 k = this.getTimeToLoadFrag(v, R, A * L, void 0 === S); 11760 if ( 11761 (w.trace( 11762 '[abr] level:' + 11763 y + 11764 ' adjustedbw-bitrate:' + 11765 Math.round(R - A) + 11766 ' avgDuration:' + 11767 L.toFixed(1) + 11768 ' maxFetchDuration:' + 11769 i.toFixed(1) + 11770 ' fetchDuration:' + 11771 k.toFixed(1), 11772 ), 11773 R > A && (0 === k || !E(k) || (c && !this.bitrateTestDelay) || k < i)) 11774 ) 11775 return y; 11776 } 11777 } 11778 return -1; 11779 }), 11780 a(t, [ 11781 { 11782 key: 'nextAutoLevel', 11783 get: function () { 11784 var t = this._nextAutoLevel, 11785 e = this.bwEstimator; 11786 if (-1 !== t && !e.canEstimate()) return t; 11787 var r = this.getNextABRAutoLevel(); 11788 if (-1 !== t) { 11789 var i = this.hls.levels; 11790 if (i.length > Math.max(t, r) && i[t].loadError <= i[r].loadError) return t; 11791 } 11792 return -1 !== t && (r = Math.min(t, r)), r; 11793 }, 11794 set: function (t) { 11795 this._nextAutoLevel = t; 11796 }, 11797 }, 11798 ]), 11799 t 11800 ); 11801 })(), 11802 mn = (function () { 11803 function t() { 11804 (this.chunks = []), (this.dataLength = 0); 11805 } 11806 var e = t.prototype; 11807 return ( 11808 (e.push = function (t) { 11809 this.chunks.push(t), (this.dataLength += t.length); 11810 }), 11811 (e.flush = function () { 11812 var t, 11813 e = this.chunks, 11814 r = this.dataLength; 11815 return e.length 11816 ? ((t = 11817 1 === e.length 11818 ? e[0] 11819 : (function (t, e) { 11820 for (var r = new Uint8Array(e), i = 0, n = 0; n < t.length; n++) { 11821 var a = t[n]; 11822 r.set(a, i), (i += a.length); 11823 } 11824 return r; 11825 })(e, r)), 11826 this.reset(), 11827 t) 11828 : new Uint8Array(0); 11829 }), 11830 (e.reset = function () { 11831 (this.chunks.length = 0), (this.dataLength = 0); 11832 }), 11833 t 11834 ); 11835 })(), 11836 pn = (function (t) { 11837 function e(e, r, i) { 11838 var n; 11839 return ( 11840 ((n = t.call(this, e, r, i, '[audio-stream-controller]', ve) || this).videoBuffer = null), 11841 (n.videoTrackCC = -1), 11842 (n.waitingVideoCC = -1), 11843 (n.bufferedTrack = null),
11844 (n.switchingTrack = null), 11845 (n.trackId = -1), 11846 (n.waitingData = null), 11847 (n.mainDetails = null), 11848 (n.bufferFlushed = !1), 11849 (n.cachedTrackLoadedData = null), 11850 n._registerListeners(), 11851 n 11852 ); 11853 } 11854 l(e, t); 11855 var r = e.prototype; 11856 return ( 11857 (r.onHandlerDestroying = function () { 11858 this._unregisterListeners(), 11859 (this.mainDetails = null), 11860 (this.bufferedTrack = null), 11861 (this.switchingTrack = null); 11862 }), 11863 (r._registerListeners = function () { 11864 var t = this.hls; 11865 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 11866 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 11867 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 11868 t.on(S.LEVEL_LOADED, this.onLevelLoaded, this), 11869 t.on(S.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this), 11870 t.on(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), 11871 t.on(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), 11872 t.on(S.ERROR, this.onError, this), 11873 t.on(S.BUFFER_RESET, this.onBufferReset, this), 11874 t.on(S.BUFFER_CREATED, this.onBufferCreated, this), 11875 t.on(S.BUFFER_FLUSHED, this.onBufferFlushed, this), 11876 t.on(S.INIT_PTS_FOUND, this.onInitPtsFound, this), 11877 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this); 11878 }), 11879 (r._unregisterListeners = function () { 11880 var t = this.hls; 11881 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 11882 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 11883 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 11884 t.off(S.LEVEL_LOADED, this.onLevelLoaded, this), 11885 t.off(S.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this), 11886 t.off(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), 11887 t.off(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), 11888 t.off(S.ERROR, this.onError, this), 11889 t.off(S.BUFFER_RESET, this.onBufferReset, this), 11890 t.off(S.BUFFER_CREATED, this.onBufferCreated, this), 11891 t.off(S.BUFFER_FLUSHED, this.onBufferFlushed, this), 11892 t.off(S.INIT_PTS_FOUND, this.onInitPtsFound, this), 11893 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this); 11894 }), 11895 (r.onInitPtsFound = function (t, e) { 11896 var r = e.frag, 11897 i = e.id, 11898 n = e.initPTS, 11899 a = e.timescale; 11900 if ('main' === i) { 11901 var s = r.cc; 11902 (this.initPTS[r.cc] = { baseTime: n, timescale: a }), 11903 this.log('InitPTS for cc: ' + s + ' found from main: ' + n), 11904 (this.videoTrackCC = s), 11905 this.state === Qr && this.tick(); 11906 } 11907 }), 11908 (r.startLoad = function (t) { 11909 if (!this.levels) return (this.startPosition = t), void (this.state = Gr); 11910 var e = this.lastCurrentTime; 11911 this.stopLoad(), 11912 this.setInterval(100), 11913 e > 0 && -1 === t 11914 ? (this.log('Override startPosition with lastCurrentTime @' + e.toFixed(3)), 11915 (t = e), 11916 (this.state = Kr)) 11917 : ((this.loadedmetadata = !1), (this.state = Wr)), 11918 (this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t), 11919 this.tick(); 11920 }), 11921 (r.doTick = function () { 11922 switch (this.state) { 11923 case Kr: 11924 this.doTickIdle(); 11925 break; 11926 case Wr: 11927 var e, 11928 r = this.levels, 11929 i = this.trackId, 11930 n = null == r || null == (e = r[i]) ? void 0 : e.details; 11931 if (n) { 11932 if (this.waitForCdnTuneIn(n)) break; 11933 this.state = Qr; 11934 } 11935 break; 11936 case Yr: 11937 var a, 11938 s = performance.now(), 11939 o = this.retryDate; 11940 (!o || s >= o || (null != (a = this.media) && a.seeking)) && 11941 (this.log('RetryDate reached, switch back to IDLE state'), 11942 this.resetStartWhenNotLoaded(this.trackId), 11943 (this.state = Kr)); 11944 break; 11945 case Qr: 11946 var l = this.waitingData; 11947 if (l) { 11948 var u = l.frag, 11949 h = l.part, 11950 d = l.cache, 11951 c = l.complete; 11952 if (void 0 !== this.initPTS[u.cc]) { 11953 (this.waitingData = null), (this.waitingVideoCC = -1), (this.state = Vr); 11954 var f = { frag: u, part: h, payload: d.flush(), networkDetails: null }; 11955 this._handleFragmentLoadProgress(f), c && t.prototype._handleFragmentLoadComplete.call(this, f); 11956 } else if (this.videoTrackCC !== this.waitingVideoCC) 11957 this.log( 11958 'Waiting fragment cc (' + u.cc + ') cancelled because video is at cc ' + this.videoTrackCC, 11959 ), 11960 this.clearWaitingFragment(); 11961 else { 11962 var g = this.getLoadPosition(), 11963 v = Ir.bufferInfo(this.mediaBuffer, g, this.config.maxBufferHole); 11964 Je(v.end, this.config.maxFragLookUpTolerance, u) < 0 && 11965 (this.log( 11966 'Waiting fragment cc (' + 11967 u.cc + 11968 ') @ ' + 11969 u.start + 11970 ' cancelled because another fragment at ' + 11971 v.end + 11972 ' is needed', 11973 ), 11974 this.clearWaitingFragment()); 11975 } 11976 } else this.state = Kr; 11977 } 11978 this.onTickEnd(); 11979 }), 11980 (r.clearWaitingFragment = function () { 11981 var t = this.waitingData; 11982 t && 11983 (this.fragmentTracker.removeFragment(t.frag), 11984 (this.waitingData = null),
11985 (this.waitingVideoCC = -1), 11986 (this.state = Kr)); 11987 }), 11988 (r.resetLoadingState = function () { 11989 this.clearWaitingFragment(), t.prototype.resetLoadingState.call(this); 11990 }), 11991 (r.onTickEnd = function () { 11992 var t = this.media; 11993 null != t && t.readyState && (this.lastCurrentTime = t.currentTime); 11994 }), 11995 (r.doTickIdle = function () { 11996 var t = this.hls, 11997 e = this.levels, 11998 r = this.media, 11999 i = this.trackId, 12000 n = t.config; 12001 if (null != e && e[i] && (r || (!this.startFragRequested && n.startFragPrefetch))) { 12002 var a = e[i], 12003 s = a.details; 12004 if (!s || (s.live && this.levelLastLoaded !== i) || this.waitForCdnTuneIn(s)) this.state = Wr; 12005 else { 12006 var o = this.mediaBuffer ? this.mediaBuffer : this.media; 12007 this.bufferFlushed && o && ((this.bufferFlushed = !1), this.afterBufferFlushed(o, O, ve)); 12008 var l = this.getFwdBufferInfo(o, ve); 12009 if (null !== l) { 12010 var u = this.bufferedTrack, 12011 h = this.switchingTrack; 12012 if (!h && this._streamEnded(l, s)) 12013 return t.trigger(S.BUFFER_EOS, { type: 'audio' }), void (this.state = Xr); 12014 var d = this.getFwdBufferInfo(this.videoBuffer ? this.videoBuffer : this.media, ge), 12015 c = l.len, 12016 f = this.getMaxBufferLength(null == d ? void 0 : d.len); 12017 if (!(c >= f) || h) { 12018 var g = s.fragments[0].start, 12019 v = l.end; 12020 if (h && r) { 12021 var m = this.getLoadPosition(); 12022 u && h.attrs !== u.attrs && (v = m), 12023 s.PTSKnown && 12024 m < g && 12025 (l.end > g || l.nextStart) && 12026 (this.log('Alt audio track ahead of main track, seek to start of alt audio track'), 12027 (r.currentTime = g + 0.05)); 12028 } 12029 var p = this.getNextFragment(v, s), 12030 y = !1; 12031 if ( 12032 (p && 12033 this.isLoopLoading(p, v) && 12034 ((y = !!p.gap), (p = this.getNextFragmentLoopLoading(p, s, l, ge, f))), 12035 p) 12036 ) { 12037 var T = d && p.start > d.end + s.targetduration; 12038 if (T || ((null == d || !d.len) && l.len)) { 12039 var E = this.getAppendedFrag(p.start, ge); 12040 if (null === E) return; 12041 if ( 12042 (y || (y = !!E.gap || (!!T && 0 === d.len)), 12043 (T && !y) || (y && l.nextStart && l.nextStart < E.end)) 12044 ) 12045 return; 12046 } 12047 this.loadFragment(p, a, v); 12048 } else this.bufferFlushed = !0; 12049 } 12050 } 12051 } 12052 } 12053 }), 12054 (r.getMaxBufferLength = function (e) { 12055 var r = t.prototype.getMaxBufferLength.call(this); 12056 return e ? Math.min(Math.max(r, e), this.config.maxMaxBufferLength) : r; 12057 }), 12058 (r.onMediaDetaching = function () { 12059 (this.videoBuffer = null), t.prototype.onMediaDetaching.call(this); 12060 }), 12061 (r.onAudioTracksUpdated = function (t, e) { 12062 var r = e.audioTracks; 12063 this.resetTransmuxer(), 12064 (this.levels = r.map(function (t) { 12065 return new Ne(t); 12066 })); 12067 }), 12068 (r.onAudioTrackSwitching = function (t, e) { 12069 var r = !!e.url; 12070 this.trackId = e.id; 12071 var i = this.fragCurrent; 12072 i && (i.abortRequests(), this.removeUnbufferedFrags(i.start)), 12073 this.resetLoadingState(), 12074 r ? this.setInterval(100) : this.resetTransmuxer(), 12075 r 12076 ? ((this.switchingTrack = e), (this.state = Kr)) 12077 : ((this.switchingTrack = null), (this.bufferedTrack = e), (this.state = Gr)), 12078 this.tick(); 12079 }), 12080 (r.onManifestLoading = function () { 12081 this.fragmentTracker.removeAllFragments(), 12082 (this.startPosition = this.lastCurrentTime = 0), 12083 (this.bufferFlushed = !1), 12084 (this.levels = 12085 this.mainDetails = 12086 this.waitingData = 12087 this.bufferedTrack = 12088 this.cachedTrackLoadedData = 12089 this.switchingTrack = 12090 null), 12091 (this.startFragRequested = !1), 12092 (this.trackId = this.videoTrackCC = this.waitingVideoCC = -1); 12093 }), 12094 (r.onLevelLoaded = function (t, e) { 12095 (this.mainDetails = e.details), 12096 null !== this.cachedTrackLoadedData && 12097 (this.hls.trigger(S.AUDIO_TRACK_LOADED, this.cachedTrackLoadedData), 12098 (this.cachedTrackLoadedData = null)); 12099 }), 12100 (r.onAudioTrackLoaded = function (t, e) { 12101 var r; 12102 if (null != this.mainDetails) { 12103 var i = this.levels, 12104 n = e.details, 12105 a = e.id; 12106 if (i) { 12107 this.log( 12108 'Track ' + 12109 a + 12110 ' loaded [' + 12111 n.startSN + 12112 ',' + 12113 n.endSN + 12114 ']' + 12115 (n.lastPartSn ? '[part-' + n.lastPartSn + '-' + n.lastPartIndex + ']' : '') + 12116 ',duration:' + 12117 n.totalduration, 12118 ); 12119 var s = i[a], 12120 o = 0; 12121 if (n.live || (null != (r = s.details) && r.live)) { 12122 this.checkLiveUpdate(n); 12123 var l = this.mainDetails; 12124 if (n.deltaUpdateFailed || !l) return; 12125 !s.details && n.hasProgramDateTime && l.hasProgramDateTime
12126 ? (Fr(n, l), (o = n.fragments[0].start)) 12127 : (o = this.alignPlaylists(n, s.details)); 12128 } 12129 (s.details = n), 12130 (this.levelLastLoaded = a), 12131 this.startFragRequested || (!this.mainDetails && n.live) || this.setStartPosition(s.details, o), 12132 this.state !== Wr || this.waitForCdnTuneIn(n) || (this.state = Kr), 12133 this.tick(); 12134 } else this.warn('Audio tracks were reset while loading level ' + a); 12135 } else this.cachedTrackLoadedData = e; 12136 }), 12137 (r._handleFragmentLoadProgress = function (t) { 12138 var e, 12139 r = t.frag, 12140 i = t.part, 12141 n = t.payload, 12142 a = this.config, 12143 s = this.trackId, 12144 o = this.levels; 12145 if (o) { 12146 var l = o[s]; 12147 if (l) { 12148 var u = l.details; 12149 if (!u) 12150 return ( 12151 this.warn('Audio track details undefined on fragment load progress'), 12152 void this.removeUnbufferedFrags(r.start) 12153 ); 12154 var h = a.defaultAudioCodec || l.audioCodec || 'mp4a.40.2', 12155 d = this.transmuxer; 12156 d || 12157 (d = this.transmuxer = 12158 new hn( 12159 this.hls, 12160 ve, 12161 this._handleTransmuxComplete.bind(this), 12162 this._handleTransmuxerFlush.bind(this), 12163 )); 12164 var c = this.initPTS[r.cc], 12165 f = null == (e = r.initSegment) ? void 0 : e.data; 12166 if (void 0 !== c) { 12167 var g = i ? i.index : -1, 12168 v = -1 !== g, 12169 m = new wr(r.level, r.sn, r.stats.chunkCount, n.byteLength, g, v); 12170 d.push(n, f, h, '', r, i, u.totalduration, !1, m, c); 12171 } else 12172 this.log( 12173 'Unknown video PTS for cc ' + 12174 r.cc + 12175 ', waiting for video PTS before demuxing audio frag ' + 12176 r.sn + 12177 ' of [' + 12178 u.startSN + 12179 ' ,' + 12180 u.endSN + 12181 '],track ' + 12182 s, 12183 ), 12184 (this.waitingData = this.waitingData || { 12185 frag: r, 12186 part: i, 12187 cache: new mn(), 12188 complete: !1, 12189 }).cache.push(new Uint8Array(n)), 12190 (this.waitingVideoCC = this.videoTrackCC), 12191 (this.state = Qr); 12192 } else this.warn('Audio track is undefined on fragment load progress'); 12193 } else 12194 this.warn( 12195 'Audio tracks were reset while fragment load was in progress. Fragment ' + 12196 r.sn + 12197 ' of level ' + 12198 r.level + 12199 ' will not be buffered', 12200 ); 12201 }), 12202 (r._handleFragmentLoadComplete = function (e) { 12203 this.waitingData 12204 ? (this.waitingData.complete = !0) 12205 : t.prototype._handleFragmentLoadComplete.call(this, e); 12206 }), 12207 (r.onBufferReset = function () { 12208 (this.mediaBuffer = this.videoBuffer = null), (this.loadedmetadata = !1); 12209 }), 12210 (r.onBufferCreated = function (t, e) { 12211 var r = e.tracks.audio; 12212 r && (this.mediaBuffer = r.buffer || null), 12213 e.tracks.video && (this.videoBuffer = e.tracks.video.buffer || null); 12214 }), 12215 (r.onFragBuffered = function (t, e) { 12216 var r = e.frag, 12217 n = e.part; 12218 if (r.type === ve) 12219 if (this.fragContextChanged(r)) 12220 this.warn( 12221 'Fragment ' + 12222 r.sn + 12223 (n ? ' p: ' + n.index : '') + 12224 ' of level ' + 12225 r.level + 12226 ' finished buffering, but was aborted. state: ' + 12227 this.state + 12228 ', audioSwitch: ' + 12229 (this.switchingTrack ? this.switchingTrack.name : 'false'), 12230 ); 12231 else { 12232 if ('initSegment' !== r.sn) { 12233 this.fragPrevious = r; 12234 var a = this.switchingTrack; 12235 a && 12236 ((this.bufferedTrack = a), 12237 (this.switchingTrack = null),
12238 this.hls.trigger(S.AUDIO_TRACK_SWITCHED, i({}, a))); 12239 } 12240 this.fragBufferedComplete(r, n); 12241 } 12242 else if (!this.loadedmetadata && r.type === ge) { 12243 var s = this.videoBuffer || this.media; 12244 s && Ir.getBuffered(s).length && (this.loadedmetadata = !0); 12245 } 12246 }), 12247 (r.onError = function (e, r) { 12248 var i; 12249 if (r.fatal) this.state = zr; 12250 else 12251 switch (r.details) { 12252 case R.FRAG_GAP: 12253 case R.FRAG_PARSING_ERROR: 12254 case R.FRAG_DECRYPT_ERROR: 12255 case R.FRAG_LOAD_ERROR: 12256 case R.FRAG_LOAD_TIMEOUT: 12257 case R.KEY_LOAD_ERROR: 12258 case R.KEY_LOAD_TIMEOUT: 12259 this.onFragmentOrKeyLoadError(ve, r); 12260 break; 12261 case R.AUDIO_TRACK_LOAD_ERROR: 12262 case R.AUDIO_TRACK_LOAD_TIMEOUT: 12263 case R.LEVEL_PARSING_ERROR: 12264 r.levelRetry || 12265 this.state !== Wr || 12266 (null == (i = r.context) ? void 0 : i.type) !== ce || 12267 (this.state = Kr); 12268 break; 12269 case R.BUFFER_FULL_ERROR: 12270 if (!r.parent || 'audio' !== r.parent) return; 12271 this.reduceLengthAndFlushBuffer(r) && 12272 ((this.bufferedTrack = null), 12273 t.prototype.flushMainBuffer.call(this, 0, Number.POSITIVE_INFINITY, 'audio')); 12274 break; 12275 case R.INTERNAL_EXCEPTION: 12276 this.recoverWorkerError(r); 12277 } 12278 }), 12279 (r.onBufferFlushed = function (t, e) { 12280 e.type === O && ((this.bufferFlushed = !0), this.state === Xr && (this.state = Kr)); 12281 }), 12282 (r._handleTransmuxComplete = function (t) { 12283 var e, 12284 r = 'audio', 12285 i = this.hls, 12286 n = t.remuxResult, 12287 a = t.chunkMeta, 12288 s = this.getCurrentContext(a); 12289 if (s) { 12290 var l = s.frag, 12291 u = s.part, 12292 h = s.level.details, 12293 d = n.audio, 12294 c = n.text, 12295 f = n.id3, 12296 g = n.initSegment; 12297 if (!this.fragContextChanged(l) && h) { 12298 if ( 12299 ((this.state = jr), 12300 this.switchingTrack && d && this.completeAudioSwitch(this.switchingTrack), 12301 null != g && g.tracks) 12302 ) { 12303 var v = l.initSegment || l; 12304 this._bufferInitSegment(g.tracks, v, a), 12305 i.trigger(S.FRAG_PARSING_INIT_SEGMENT, { frag: v, id: r, tracks: g.tracks }); 12306 } 12307 if (d) { 12308 var m = d.startPTS, 12309 p = d.endPTS, 12310 y = d.startDTS, 12311 T = d.endDTS; 12312 u && (u.elementaryStreams[O] = { startPTS: m, endPTS: p, startDTS: y, endDTS: T }), 12313 l.setElementaryStreamInfo(O, m, p, y, T), 12314 this.bufferFragmentData(d, l, u, a); 12315 } 12316 if (null != f && null != (e = f.samples) && e.length) { 12317 var E = o({ id: r, frag: l, details: h }, f); 12318 i.trigger(S.FRAG_PARSING_METADATA, E); 12319 } 12320 if (c) { 12321 var L = o({ id: r, frag: l, details: h }, c); 12322 i.trigger(S.FRAG_PARSING_USERDATA, L); 12323 } 12324 } else this.fragmentTracker.removeFragment(l); 12325 } else this.resetWhenMissingContext(a); 12326 }), 12327 (r._bufferInitSegment = function (t, e, r) { 12328 if (this.state === jr) { 12329 t.video && delete t.video; 12330 var i = t.audio; 12331 if (i) { 12332 (i.levelCodec = i.codec), 12333 (i.id = 'audio'), 12334 this.log('Init audio buffer, container:' + i.container + ', codecs[parsed]=[' + i.codec + ']'), 12335 this.hls.trigger(S.BUFFER_CODECS, t); 12336 var n = i.initSegment; 12337 if (null != n && n.byteLength) { 12338 var a = { type: 'audio', frag: e, part: null, chunkMeta: r, parent: e.type, data: n }; 12339 this.hls.trigger(S.BUFFER_APPENDING, a); 12340 } 12341 this.tick(); 12342 } 12343 } 12344 }), 12345 (r.loadFragment = function (e, r, i) { 12346 var n, 12347 a = this.fragmentTracker.getState(e); 12348 (this.fragCurrent = e), 12349 this.switchingTrack || a === fr || a === vr 12350 ? 'initSegment' === e.sn 12351 ? this._loadInitSegment(e, r) 12352 : null != (n = r.details) && n.live && !this.initPTS[e.cc] 12353 ? (this.log( 12354 'Waiting for video PTS in continuity counter ' + 12355 e.cc + 12356 ' of live stream before loading audio fragment ' + 12357 e.sn + 12358 ' of level ' + 12359 this.trackId, 12360 ), 12361 (this.state = Qr)) 12362 : ((this.startFragRequested = !0), t.prototype.loadFragment.call(this, e, r, i)) 12363 : this.clearTrackerIfNeeded(e); 12364 }), 12365 (r.completeAudioSwitch = function (e) { 12366 var r = this.hls, 12367 n = this.media, 12368 a = this.bufferedTrack, 12369 s = null == a ? void 0 : a.attrs, 12370 o = e.attrs; 12371 n && 12372 s && 12373 (s.CHANNELS !== o.CHANNELS || s.NAME !== o.NAME || s.LANGUAGE !== o.LANGUAGE) && 12374 (this.log('Switching audio track : flushing all audio'), 12375 t.prototype.flushMainBuffer.call(this, 0, Number.POSITIVE_INFINITY, 'audio')), 12376 (this.bufferedTrack = e), 12377 (this.switchingTrack = null),
12378 r.trigger(S.AUDIO_TRACK_SWITCHED, i({}, e)); 12379 }), 12380 e 12381 ); 12382 })(Jr), 12383 yn = (function (t) { 12384 function e(e) { 12385 var r; 12386 return ( 12387 ((r = t.call(this, e, '[audio-track-controller]') || this).tracks = []), 12388 (r.groupId = null), 12389 (r.tracksInGroup = []), 12390 (r.trackId = -1), 12391 (r.currentTrack = null), 12392 (r.selectDefaultTrack = !0), 12393 r.registerListeners(), 12394 r 12395 ); 12396 } 12397 l(e, t); 12398 var r = e.prototype; 12399 return ( 12400 (r.registerListeners = function () { 12401 var t = this.hls; 12402 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 12403 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 12404 t.on(S.LEVEL_LOADING, this.onLevelLoading, this), 12405 t.on(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 12406 t.on(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), 12407 t.on(S.ERROR, this.onError, this); 12408 }), 12409 (r.unregisterListeners = function () { 12410 var t = this.hls; 12411 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 12412 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 12413 t.off(S.LEVEL_LOADING, this.onLevelLoading, this), 12414 t.off(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 12415 t.off(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), 12416 t.off(S.ERROR, this.onError, this); 12417 }), 12418 (r.destroy = function () { 12419 this.unregisterListeners(), 12420 (this.tracks.length = 0), 12421 (this.tracksInGroup.length = 0), 12422 (this.currentTrack = null), 12423 t.prototype.destroy.call(this); 12424 }), 12425 (r.onManifestLoading = function () { 12426 (this.tracks = []), 12427 (this.groupId = null), 12428 (this.tracksInGroup = []), 12429 (this.trackId = -1), 12430 (this.currentTrack = null), 12431 (this.selectDefaultTrack = !0); 12432 }), 12433 (r.onManifestParsed = function (t, e) { 12434 this.tracks = e.audioTracks || []; 12435 }), 12436 (r.onAudioTrackLoaded = function (t, e) { 12437 var r = e.id, 12438 i = e.groupId, 12439 n = e.details, 12440 a = this.tracksInGroup[r]; 12441 if (a && a.groupId === i) { 12442 var s = a.details; 12443 (a.details = e.details), 12444 this.log( 12445 'audio-track ' + 12446 r + 12447 ' "' + 12448 a.name + 12449 '" lang:' + 12450 a.lang + 12451 ' group:' + 12452 i + 12453 ' loaded [' + 12454 n.startSN + 12455 '-' + 12456 n.endSN + 12457 ']', 12458 ), 12459 r === this.trackId && this.playlistLoaded(r, e, s); 12460 } else this.warn('Track with id:' + r + ' and group:' + i + ' not found in active group ' + a.groupId); 12461 }), 12462 (r.onLevelLoading = function (t, e) { 12463 this.switchLevel(e.level); 12464 }), 12465 (r.onLevelSwitching = function (t, e) { 12466 this.switchLevel(e.level); 12467 }), 12468 (r.switchLevel = function (t) { 12469 var e = this.hls.levels[t]; 12470 if (null != e && e.audioGroupIds) { 12471 var r = e.audioGroupIds[e.urlId]; 12472 if (this.groupId !== r) { 12473 this.groupId = r || null; 12474 var i = this.tracks.filter(function (t) { 12475 return !r || t.groupId === r; 12476 }); 12477 this.selectDefaultTrack && 12478 !i.some(function (t) { 12479 return t.default; 12480 }) && 12481 (this.selectDefaultTrack = !1), 12482 (this.tracksInGroup = i); 12483 var n = { audioTracks: i }; 12484 this.log('Updating audio tracks, ' + i.length + ' track(s) found in group:' + r), 12485 this.hls.trigger(S.AUDIO_TRACKS_UPDATED, n), 12486 this.selectInitialTrack(); 12487 } else this.shouldReloadPlaylist(this.currentTrack) && this.setAudioTrack(this.trackId); 12488 } 12489 }), 12490 (r.onError = function (t, e) { 12491 !e.fatal && 12492 e.context && 12493 e.context.type === ce &&
12494 e.context.id === this.trackId && 12495 e.context.groupId === this.groupId && 12496 ((this.requestScheduled = -1), this.checkRetry(e)); 12497 }), 12498 (r.setAudioTrack = function (t) { 12499 var e = this.tracksInGroup; 12500 if (t < 0 || t >= e.length) this.warn('Invalid id passed to audio-track controller'); 12501 else { 12502 this.clearTimer(); 12503 var r = this.currentTrack; 12504 e[this.trackId]; 12505 var n = e[t], 12506 a = n.groupId, 12507 s = n.name; 12508 if ( 12509 (this.log('Switching to audio-track ' + t + ' "' + s + '" lang:' + n.lang + ' group:' + a), 12510 (this.trackId = t), 12511 (this.currentTrack = n), 12512 (this.selectDefaultTrack = !1), 12513 this.hls.trigger(S.AUDIO_TRACK_SWITCHING, i({}, n)), 12514 !n.details || n.details.live) 12515 ) { 12516 var o = this.switchParams(n.url, null == r ? void 0 : r.details); 12517 this.loadPlaylist(o); 12518 } 12519 } 12520 }), 12521 (r.selectInitialTrack = function () { 12522 var t = this.tracksInGroup, 12523 e = this.findTrackId(this.currentTrack) | this.findTrackId(null); 12524 if (-1 !== e) this.setAudioTrack(e); 12525 else { 12526 var r = new Error( 12527 'No track found for running audio group-ID: ' + this.groupId + ' track count: ' + t.length, 12528 ); 12529 this.warn(r.message), 12530 this.hls.trigger(S.ERROR, { 12531 type: L.MEDIA_ERROR, 12532 details: R.AUDIO_TRACK_LOAD_ERROR, 12533 fatal: !0, 12534 error: r, 12535 }); 12536 } 12537 }), 12538 (r.findTrackId = function (t) { 12539 for (var e = this.tracksInGroup, r = 0; r < e.length; r++) { 12540 var i = e[r]; 12541 if (!this.selectDefaultTrack || i.default) { 12542 if ( 12543 !t || 12544 (void 0 !== t.attrs['STABLE-RENDITION-ID'] && 12545 t.attrs['STABLE-RENDITION-ID'] === i.attrs['STABLE-RENDITION-ID']) 12546 ) 12547 return i.id; 12548 if (t.name === i.name && t.lang === i.lang) return i.id; 12549 } 12550 } 12551 return -1; 12552 }), 12553 (r.loadPlaylist = function (e) { 12554 t.prototype.loadPlaylist.call(this); 12555 var r = this.tracksInGroup[this.trackId]; 12556 if (this.shouldLoadPlaylist(r)) { 12557 var i = r.id, 12558 n = r.groupId, 12559 a = r.url; 12560 if (e) 12561 try { 12562 a = e.addDirectives(a); 12563 } catch (t) { 12564 this.warn('Could not construct new URL with HLS Delivery Directives: ' + t); 12565 } 12566 this.log('loading audio-track playlist ' + i + ' "' + r.name + '" lang:' + r.lang + ' group:' + n), 12567 this.clearTimer(), 12568 this.hls.trigger(S.AUDIO_TRACK_LOADING, { url: a, id: i, groupId: n, deliveryDirectives: e || null }); 12569 } 12570 }), 12571 a(e, [ 12572 { 12573 key: 'audioTracks', 12574 get: function () { 12575 return this.tracksInGroup; 12576 }, 12577 }, 12578 { 12579 key: 'audioTrack', 12580 get: function () { 12581 return this.trackId; 12582 }, 12583 set: function (t) { 12584 (this.selectDefaultTrack = !1), this.setAudioTrack(t); 12585 }, 12586 }, 12587 ]), 12588 e 12589 ); 12590 })(ur); 12591 function Tn(t, e) { 12592 if (t.length !== e.length) return !1; 12593 for (var r = 0; r < t.length; r++) if (!En(t[r].attrs, e[r].attrs)) return !1; 12594 return !0; 12595 } 12596 function En(t, e) { 12597 var r = t['STABLE-RENDITION-ID']; 12598 return r 12599 ? r === e['STABLE-RENDITION-ID'] 12600 : !['LANGUAGE', 'NAME', 'CHARACTERISTICS', 'AUTOSELECT', 'DEFAULT', 'FORCED'].some(function (r) { 12601 return t[r] !== e[r]; 12602 }); 12603 } 12604 var Sn = (function (t) { 12605 function e(e, r, i) { 12606 var n; 12607 return ( 12608 ((n = t.call(this, e, r, i, '[subtitle-stream-controller]', me) || this).levels = []), 12609 (n.currentTrackId = -1), 12610 (n.tracksBuffered = []), 12611 (n.mainDetails = null),
12612 n._registerListeners(), 12613 n 12614 ); 12615 } 12616 l(e, t); 12617 var r = e.prototype; 12618 return ( 12619 (r.onHandlerDestroying = function () { 12620 this._unregisterListeners(), (this.mainDetails = null); 12621 }), 12622 (r._registerListeners = function () { 12623 var t = this.hls; 12624 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 12625 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 12626 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 12627 t.on(S.LEVEL_LOADED, this.onLevelLoaded, this), 12628 t.on(S.ERROR, this.onError, this), 12629 t.on(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), 12630 t.on(S.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this), 12631 t.on(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), 12632 t.on(S.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this), 12633 t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 12634 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this); 12635 }), 12636 (r._unregisterListeners = function () { 12637 var t = this.hls; 12638 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 12639 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 12640 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 12641 t.off(S.LEVEL_LOADED, this.onLevelLoaded, this), 12642 t.off(S.ERROR, this.onError, this), 12643 t.off(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), 12644 t.off(S.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this), 12645 t.off(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), 12646 t.off(S.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this), 12647 t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 12648 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this); 12649 }), 12650 (r.startLoad = function (t) { 12651 this.stopLoad(), 12652 (this.state = Kr), 12653 this.setInterval(500), 12654 (this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t), 12655 this.tick(); 12656 }), 12657 (r.onManifestLoading = function () { 12658 (this.mainDetails = null), this.fragmentTracker.removeAllFragments(); 12659 }), 12660 (r.onMediaDetaching = function () { 12661 (this.tracksBuffered = []), t.prototype.onMediaDetaching.call(this); 12662 }), 12663 (r.onLevelLoaded = function (t, e) { 12664 this.mainDetails = e.details; 12665 }), 12666 (r.onSubtitleFragProcessed = function (t, e) { 12667 var r = e.frag, 12668 i = e.success; 12669 if (((this.fragPrevious = r), (this.state = Kr), i)) { 12670 var n = this.tracksBuffered[this.currentTrackId]; 12671 if (n) { 12672 for (var a, s = r.start, o = 0; o < n.length; o++) 12673 if (s >= n[o].start && s <= n[o].end) { 12674 a = n[o]; 12675 break; 12676 } 12677 var l = r.start + r.duration; 12678 a ? (a.end = l) : ((a = { start: s, end: l }), n.push(a)), this.fragmentTracker.fragBuffered(r); 12679 } 12680 } 12681 }), 12682 (r.onBufferFlushing = function (t, e) { 12683 var r = e.startOffset, 12684 i = e.endOffset; 12685 if (0 === r && i !== Number.POSITIVE_INFINITY) { 12686 var n = i - 1; 12687 if (n <= 0) return; 12688 (e.endOffsetSubtitles = Math.max(0, n)), 12689 this.tracksBuffered.forEach(function (t) { 12690 for (var e = 0; e < t.length; ) 12691 if (t[e].end <= n) t.shift(); 12692 else { 12693 if (!(t[e].start < n)) break; 12694 (t[e].start = n), e++; 12695 } 12696 }), 12697 this.fragmentTracker.removeFragmentsInRange(r, n, me); 12698 } 12699 }), 12700 (r.onFragBuffered = function (t, e) { 12701 var r; 12702 this.loadedmetadata || 12703 e.frag.type !== ge || 12704 (null != (r = this.media) && r.buffered.length && (this.loadedmetadata = !0)); 12705 }), 12706 (r.onError = function (t, e) { 12707 var r = e.frag; 12708 (null == r ? void 0 : r.type) === me && 12709 (this.fragCurrent && this.fragCurrent.abortRequests(), this.state !== Gr && (this.state = Kr)); 12710 }),
12711 (r.onSubtitleTracksUpdated = function (t, e) { 12712 var r = this, 12713 i = e.subtitleTracks; 12714 Tn(this.levels, i) 12715 ? (this.levels = i.map(function (t) { 12716 return new Ne(t); 12717 })) 12718 : ((this.tracksBuffered = []), 12719 (this.levels = i.map(function (t) { 12720 var e = new Ne(t); 12721 return (r.tracksBuffered[e.id] = []), e; 12722 })), 12723 this.fragmentTracker.removeFragmentsInRange(0, Number.POSITIVE_INFINITY, me), 12724 (this.fragPrevious = null), 12725 (this.mediaBuffer = null)); 12726 }), 12727 (r.onSubtitleTrackSwitch = function (t, e) { 12728 if (((this.currentTrackId = e.id), this.levels.length && -1 !== this.currentTrackId)) { 12729 var r = this.levels[this.currentTrackId]; 12730 null != r && r.details ? (this.mediaBuffer = this.mediaBufferTimeRanges) : (this.mediaBuffer = null), 12731 r && this.setInterval(500); 12732 } else this.clearInterval(); 12733 }), 12734 (r.onSubtitleTrackLoaded = function (t, e) { 12735 var r, 12736 i = e.details, 12737 n = e.id, 12738 a = this.currentTrackId, 12739 s = this.levels; 12740 if (s.length) { 12741 var o = s[a]; 12742 if (!(n >= s.length || n !== a) && o) { 12743 this.mediaBuffer = this.mediaBufferTimeRanges; 12744 var l = 0; 12745 if (i.live || (null != (r = o.details) && r.live)) { 12746 var u = this.mainDetails; 12747 if (i.deltaUpdateFailed || !u) return; 12748 var h = u.fragments[0]; 12749 o.details 12750 ? 0 === (l = this.alignPlaylists(i, o.details)) && h && He(i, (l = h.start)) 12751 : i.hasProgramDateTime && u.hasProgramDateTime
12752 ? (Fr(i, u), (l = i.fragments[0].start)) 12753 : h && He(i, (l = h.start)); 12754 } 12755 (o.details = i), 12756 (this.levelLastLoaded = n), 12757 this.startFragRequested || (!this.mainDetails && i.live) || this.setStartPosition(o.details, l), 12758 this.tick(), 12759 i.live && 12760 !this.fragCurrent && 12761 this.media && 12762 this.state === Kr && 12763 ($e(null, i.fragments, this.media.currentTime, 0) || 12764 (this.warn('Subtitle playlist not aligned with playback'), (o.details = void 0))); 12765 } 12766 } 12767 }), 12768 (r._handleFragmentLoadComplete = function (t) { 12769 var e = this, 12770 r = t.frag, 12771 i = t.payload, 12772 n = r.decryptdata, 12773 a = this.hls; 12774 if ( 12775 !this.fragContextChanged(r) && 12776 i && 12777 i.byteLength > 0 && 12778 n && 12779 n.key && 12780 n.iv && 12781 'AES-128' === n.method 12782 ) { 12783 var s = performance.now(); 12784 this.decrypter 12785 .decrypt(new Uint8Array(i), n.key.buffer, n.iv.buffer) 12786 .catch(function (t) { 12787 throw ( 12788 (a.trigger(S.ERROR, { 12789 type: L.MEDIA_ERROR, 12790 details: R.FRAG_DECRYPT_ERROR, 12791 fatal: !1, 12792 error: t, 12793 reason: t.message, 12794 frag: r, 12795 }), 12796 t) 12797 ); 12798 }) 12799 .then(function (t) { 12800 var e = performance.now(); 12801 a.trigger(S.FRAG_DECRYPTED, { frag: r, payload: t, stats: { tstart: s, tdecrypt: e } }); 12802 }) 12803 .catch(function (t) { 12804 e.warn(t.name + ': ' + t.message), (e.state = Kr); 12805 }); 12806 } 12807 }), 12808 (r.doTick = function () { 12809 if (this.media) { 12810 if (this.state === Kr) { 12811 var t = this.currentTrackId, 12812 e = this.levels, 12813 r = e[t]; 12814 if (!e.length || !r || !r.details) return; 12815 var i = this.config, 12816 n = this.getLoadPosition(), 12817 a = Ir.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], n, i.maxBufferHole), 12818 s = a.end, 12819 o = a.len, 12820 l = this.getFwdBufferInfo(this.media, ge), 12821 u = r.details; 12822 if (o > this.getMaxBufferLength(null == l ? void 0 : l.len) + u.levelTargetDuration) return; 12823 var h = u.fragments, 12824 d = h.length, 12825 c = u.edge, 12826 f = null, 12827 g = this.fragPrevious; 12828 if (s < c) { 12829 var v = i.maxFragLookUpTolerance, 12830 m = s > c - v ? 0 : v; 12831 !(f = $e(g, h, Math.max(h[0].start, s), m)) && g && g.start < h[0].start && (f = h[0]); 12832 } else f = h[d - 1]; 12833 if (!f) return; 12834 if ('initSegment' !== (f = this.mapToInitFragWhenRequired(f)).sn) { 12835 var p = h[f.sn - u.startSN - 1]; 12836 p && p.cc === f.cc && this.fragmentTracker.getState(p) === fr && (f = p); 12837 } 12838 this.fragmentTracker.getState(f) === fr && this.loadFragment(f, r, s); 12839 } 12840 } else this.state = Kr; 12841 }), 12842 (r.getMaxBufferLength = function (e) { 12843 var r = t.prototype.getMaxBufferLength.call(this); 12844 return e ? Math.max(r, e) : r; 12845 }), 12846 (r.loadFragment = function (e, r, i) { 12847 (this.fragCurrent = e), 12848 'initSegment' === e.sn 12849 ? this._loadInitSegment(e, r) 12850 : ((this.startFragRequested = !0), t.prototype.loadFragment.call(this, e, r, i)); 12851 }), 12852 a(e, [ 12853 { 12854 key: 'mediaBufferTimeRanges', 12855 get: function () { 12856 return new Ln(this.tracksBuffered[this.currentTrackId] || []); 12857 }, 12858 }, 12859 ]), 12860 e 12861 ); 12862 })(Jr), 12863 Ln = function (t) { 12864 this.buffered = void 0; 12865 var e = function (e, r, i) { 12866 if ((r >>>= 0) > i - 1) 12867 throw new DOMException( 12868 "Failed to execute '" + 12869 e + 12870 "' on 'TimeRanges': The index provided (" + 12871 r + 12872 ') is greater than the maximum bound (' + 12873 i + 12874 ')', 12875 ); 12876 return t[r][e]; 12877 }; 12878 this.buffered = { 12879 get length() { 12880 return t.length; 12881 }, 12882 end: function (r) { 12883 return e('end', r, t.length); 12884 }, 12885 start: function (r) { 12886 return e('start', r, t.length); 12887 }, 12888 }; 12889 }, 12890 Rn = (function (t) { 12891 function e(e) { 12892 var r; 12893 return ( 12894 ((r = t.call(this, e, '[subtitle-track-controller]') || this).media = null),
12895 (r.tracks = []), 12896 (r.groupId = null), 12897 (r.tracksInGroup = []), 12898 (r.trackId = -1), 12899 (r.selectDefaultTrack = !0), 12900 (r.queuedDefaultTrack = -1), 12901 (r.trackChangeListener = function () { 12902 return r.onTextTracksChanged(); 12903 }), 12904 (r.asyncPollTrackChange = function () { 12905 return r.pollTrackChange(0); 12906 }), 12907 (r.useTextTrackPolling = !1), 12908 (r.subtitlePollingInterval = -1), 12909 (r._subtitleDisplay = !0), 12910 r.registerListeners(), 12911 r 12912 ); 12913 } 12914 l(e, t); 12915 var r = e.prototype; 12916 return ( 12917 (r.destroy = function () { 12918 this.unregisterListeners(), 12919 (this.tracks.length = 0), 12920 (this.tracksInGroup.length = 0), 12921 (this.trackChangeListener = this.asyncPollTrackChange = null), 12922 t.prototype.destroy.call(this); 12923 }), 12924 (r.registerListeners = function () { 12925 var t = this.hls; 12926 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 12927 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 12928 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 12929 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 12930 t.on(S.LEVEL_LOADING, this.onLevelLoading, this), 12931 t.on(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 12932 t.on(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), 12933 t.on(S.ERROR, this.onError, this); 12934 }), 12935 (r.unregisterListeners = function () { 12936 var t = this.hls; 12937 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 12938 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 12939 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 12940 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 12941 t.off(S.LEVEL_LOADING, this.onLevelLoading, this), 12942 t.off(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 12943 t.off(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), 12944 t.off(S.ERROR, this.onError, this); 12945 }), 12946 (r.onMediaAttached = function (t, e) { 12947 (this.media = e.media), 12948 this.media && 12949 (this.queuedDefaultTrack > -1 && 12950 ((this.subtitleTrack = this.queuedDefaultTrack), (this.queuedDefaultTrack = -1)), 12951 (this.useTextTrackPolling = !(this.media.textTracks && 'onchange' in this.media.textTracks)), 12952 this.useTextTrackPolling 12953 ? this.pollTrackChange(500) 12954 : this.media.textTracks.addEventListener('change', this.asyncPollTrackChange)); 12955 }), 12956 (r.pollTrackChange = function (t) { 12957 self.clearInterval(this.subtitlePollingInterval), 12958 (this.subtitlePollingInterval = self.setInterval(this.trackChangeListener, t)); 12959 }), 12960 (r.onMediaDetaching = function () { 12961 this.media && 12962 (self.clearInterval(this.subtitlePollingInterval), 12963 this.useTextTrackPolling || 12964 this.media.textTracks.removeEventListener('change', this.asyncPollTrackChange), 12965 this.trackId > -1 && (this.queuedDefaultTrack = this.trackId),
12966 An(this.media.textTracks).forEach(function (t) { 12967 Le(t); 12968 }), 12969 (this.subtitleTrack = -1), 12970 (this.media = null)); 12971 }), 12972 (r.onManifestLoading = function () { 12973 (this.tracks = []), 12974 (this.groupId = null), 12975 (this.tracksInGroup = []), 12976 (this.trackId = -1), 12977 (this.selectDefaultTrack = !0); 12978 }), 12979 (r.onManifestParsed = function (t, e) { 12980 this.tracks = e.subtitleTracks; 12981 }), 12982 (r.onSubtitleTrackLoaded = function (t, e) { 12983 var r = e.id, 12984 i = e.details, 12985 n = this.trackId, 12986 a = this.tracksInGroup[n]; 12987 if (a) { 12988 var s = a.details; 12989 (a.details = e.details), 12990 this.log('subtitle track ' + r + ' loaded [' + i.startSN + '-' + i.endSN + ']'), 12991 r === this.trackId && this.playlistLoaded(r, e, s); 12992 } else this.warn('Invalid subtitle track id ' + r); 12993 }), 12994 (r.onLevelLoading = function (t, e) { 12995 this.switchLevel(e.level); 12996 }), 12997 (r.onLevelSwitching = function (t, e) { 12998 this.switchLevel(e.level); 12999 }), 13000 (r.switchLevel = function (t) { 13001 var e = this.hls.levels[t]; 13002 if (null != e && e.textGroupIds) { 13003 var r = e.textGroupIds[e.urlId], 13004 i = this.tracksInGroup ? this.tracksInGroup[this.trackId] : void 0; 13005 if (this.groupId !== r) { 13006 var n = this.tracks.filter(function (t) { 13007 return !r || t.groupId === r; 13008 }); 13009 this.tracksInGroup = n; 13010 var a = this.findTrackId(null == i ? void 0 : i.name) || this.findTrackId(); 13011 this.groupId = r || null; 13012 var s = { subtitleTracks: n }; 13013 this.log('Updating subtitle tracks, ' + n.length + ' track(s) found in "' + r + '" group-id'), 13014 this.hls.trigger(S.SUBTITLE_TRACKS_UPDATED, s), 13015 -1 !== a && this.setSubtitleTrack(a, i); 13016 } else this.shouldReloadPlaylist(i) && this.setSubtitleTrack(this.trackId, i); 13017 } 13018 }), 13019 (r.findTrackId = function (t) { 13020 for (var e = this.tracksInGroup, r = 0; r < e.length; r++) { 13021 var i = e[r]; 13022 if ((!this.selectDefaultTrack || i.default) && (!t || t === i.name)) return i.id; 13023 } 13024 return -1; 13025 }), 13026 (r.onError = function (t, e) { 13027 !e.fatal && 13028 e.context && 13029 e.context.type === fe && 13030 e.context.id === this.trackId && 13031 e.context.groupId === this.groupId && 13032 this.checkRetry(e); 13033 }), 13034 (r.loadPlaylist = function (e) { 13035 t.prototype.loadPlaylist.call(this); 13036 var r = this.tracksInGroup[this.trackId]; 13037 if (this.shouldLoadPlaylist(r)) { 13038 var i = r.id, 13039 n = r.groupId, 13040 a = r.url; 13041 if (e) 13042 try { 13043 a = e.addDirectives(a); 13044 } catch (t) { 13045 this.warn('Could not construct new URL with HLS Delivery Directives: ' + t); 13046 } 13047 this.log('Loading subtitle playlist for id ' + i), 13048 this.hls.trigger(S.SUBTITLE_TRACK_LOADING, { 13049 url: a, 13050 id: i, 13051 groupId: n, 13052 deliveryDirectives: e || null, 13053 }); 13054 } 13055 }), 13056 (r.toggleTrackModes = function (t) { 13057 var e = this, 13058 r = this.media, 13059 i = this.trackId; 13060 if (r) { 13061 var n = An(r.textTracks), 13062 a = n.filter(function (t) { 13063 return t.groupId === e.groupId; 13064 }); 13065 if (-1 === t)
13066 [].slice.call(n).forEach(function (t) { 13067 t.mode = 'disabled'; 13068 }); 13069 else { 13070 var s = a[i]; 13071 s && (s.mode = 'disabled'); 13072 } 13073 var o = a[t]; 13074 o && (o.mode = this.subtitleDisplay ? 'showing' : 'hidden'); 13075 } 13076 }), 13077 (r.setSubtitleTrack = function (t, e) { 13078 var r, 13079 i = this.tracksInGroup; 13080 if (this.media) { 13081 if ( 13082 (this.trackId !== t && this.toggleTrackModes(t), 13083 !((this.trackId === t && (-1 === t || (null != (r = i[t]) && r.details))) || t < -1 || t >= i.length)) 13084 ) { 13085 this.clearTimer(); 13086 var n = i[t]; 13087 if ( 13088 (this.log( 13089 'Switching to subtitle-track ' + 13090 t + 13091 (n ? ' "' + n.name + '" lang:' + n.lang + ' group:' + n.groupId : ''), 13092 ), 13093 (this.trackId = t), 13094 n) 13095 ) { 13096 var a = n.id, 13097 s = n.groupId, 13098 o = void 0 === s ? '' : s, 13099 l = n.name, 13100 u = n.type, 13101 h = n.url; 13102 this.hls.trigger(S.SUBTITLE_TRACK_SWITCH, { id: a, groupId: o, name: l, type: u, url: h }); 13103 var d = this.switchParams(n.url, null == e ? void 0 : e.details); 13104 this.loadPlaylist(d); 13105 } else this.hls.trigger(S.SUBTITLE_TRACK_SWITCH, { id: t }); 13106 } 13107 } else this.queuedDefaultTrack = t; 13108 }), 13109 (r.onTextTracksChanged = function () { 13110 if ( 13111 (this.useTextTrackPolling || self.clearInterval(this.subtitlePollingInterval), 13112 this.media && this.hls.config.renderTextTracksNatively) 13113 ) { 13114 for (var t = -1, e = An(this.media.textTracks), r = 0; r < e.length; r++) 13115 if ('hidden' === e[r].mode) t = r; 13116 else if ('showing' === e[r].mode) { 13117 t = r; 13118 break; 13119 } 13120 this.subtitleTrack !== t && (this.subtitleTrack = t); 13121 } 13122 }), 13123 a(e, [ 13124 { 13125 key: 'subtitleDisplay', 13126 get: function () { 13127 return this._subtitleDisplay; 13128 }, 13129 set: function (t) { 13130 (this._subtitleDisplay = t), this.trackId > -1 && this.toggleTrackModes(this.trackId); 13131 }, 13132 }, 13133 { 13134 key: 'subtitleTracks', 13135 get: function () { 13136 return this.tracksInGroup; 13137 }, 13138 }, 13139 { 13140 key: 'subtitleTrack', 13141 get: function () { 13142 return this.trackId; 13143 }, 13144 set: function (t) { 13145 this.selectDefaultTrack = !1; 13146 var e = this.tracksInGroup ? this.tracksInGroup[this.trackId] : void 0; 13147 this.setSubtitleTrack(t, e); 13148 }, 13149 }, 13150 ]), 13151 e 13152 ); 13153 })(ur); 13154 function An(t) { 13155 for (var e = [], r = 0; r < t.length; r++) { 13156 var i = t[r]; 13157 ('subtitles' !== i.kind && 'captions' !== i.kind) || !i.label || e.push(t[r]); 13158 } 13159 return e; 13160 } 13161 var kn = (function () { 13162 function t(t) { 13163 (this.buffers = void 0), (this.queues = { video: [], audio: [], audiovideo: [] }), (this.buffers = t); 13164 } 13165 var e = t.prototype; 13166 return ( 13167 (e.append = function (t, e) { 13168 var r = this.queues[e]; 13169 r.push(t), 1 === r.length && this.buffers[e] && this.executeNext(e); 13170 }), 13171 (e.insertAbort = function (t, e) { 13172 this.queues[e].unshift(t), this.executeNext(e); 13173 }), 13174 (e.appendBlocker = function (t) { 13175 var e, 13176 r = new Promise(function (t) { 13177 e = t; 13178 }), 13179 i = { execute: e, onStart: function () {}, onComplete: function () {}, onError: function () {} }; 13180 return this.append(i, t), r; 13181 }), 13182 (e.executeNext = function (t) { 13183 var e = this.buffers, 13184 r = this.queues, 13185 i = e[t], 13186 n = r[t]; 13187 if (n.length) { 13188 var a = n[0]; 13189 try { 13190 a.execute(); 13191 } catch (e) { 13192 w.warn('[buffer-operation-queue]: Unhandled exception executing the current operation'), 13193 a.onError(e), 13194 (null != i && i.updating) || (n.shift(), this.executeNext(t)); 13195 } 13196 } 13197 }), 13198 (e.shiftAndExecuteNext = function (t) { 13199 this.queues[t].shift(), this.executeNext(t); 13200 }), 13201 (e.current = function (t) { 13202 return this.queues[t][0]; 13203 }), 13204 t 13205 ); 13206 })(), 13207 bn = qt(), 13208 Dn = /([ha]vc.)(?:\.[^.,]+)+/, 13209 In = (function () { 13210 function t(t) { 13211 var e = this; 13212 (this.details = null),
13213 (this._objectUrl = null), 13214 (this.operationQueue = void 0), 13215 (this.listeners = void 0), 13216 (this.hls = void 0), 13217 (this.bufferCodecEventsExpected = 0), 13218 (this._bufferCodecEventsTotal = 0), 13219 (this.media = null), 13220 (this.mediaSource = null), 13221 (this.lastMpegAudioChunk = null), 13222 (this.appendError = 0), 13223 (this.tracks = {}), 13224 (this.pendingTracks = {}), 13225 (this.sourceBuffer = void 0), 13226 (this._onMediaSourceOpen = function () { 13227 var t = e.media, 13228 r = e.mediaSource; 13229 w.log('[buffer-controller]: Media source opened'), 13230 t && 13231 (t.removeEventListener('emptied', e._onMediaEmptied), 13232 e.updateMediaElementDuration(), 13233 e.hls.trigger(S.MEDIA_ATTACHED, { media: t })), 13234 r && r.removeEventListener('sourceopen', e._onMediaSourceOpen), 13235 e.checkPendingTracks(); 13236 }), 13237 (this._onMediaSourceClose = function () { 13238 w.log('[buffer-controller]: Media source closed'); 13239 }), 13240 (this._onMediaSourceEnded = function () { 13241 w.log('[buffer-controller]: Media source ended'); 13242 }), 13243 (this._onMediaEmptied = function () { 13244 var t = e.media, 13245 r = e._objectUrl; 13246 t && 13247 t.src !== r && 13248 w.error('Media element src was set while attaching MediaSource (' + r + ' > ' + t.src + ')'); 13249 }), 13250 (this.hls = t), 13251 this._initSourceBuffer(), 13252 this.registerListeners(); 13253 } 13254 var e = t.prototype; 13255 return ( 13256 (e.hasSourceTypes = function () { 13257 return this.getSourceBufferTypes().length > 0 || Object.keys(this.pendingTracks).length > 0; 13258 }), 13259 (e.destroy = function () { 13260 this.unregisterListeners(), (this.details = null), (this.lastMpegAudioChunk = null); 13261 }), 13262 (e.registerListeners = function () { 13263 var t = this.hls; 13264 t.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 13265 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 13266 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 13267 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 13268 t.on(S.BUFFER_RESET, this.onBufferReset, this), 13269 t.on(S.BUFFER_APPENDING, this.onBufferAppending, this), 13270 t.on(S.BUFFER_CODECS, this.onBufferCodecs, this), 13271 t.on(S.BUFFER_EOS, this.onBufferEos, this), 13272 t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 13273 t.on(S.LEVEL_UPDATED, this.onLevelUpdated, this), 13274 t.on(S.FRAG_PARSED, this.onFragParsed, this), 13275 t.on(S.FRAG_CHANGED, this.onFragChanged, this); 13276 }), 13277 (e.unregisterListeners = function () { 13278 var t = this.hls; 13279 t.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 13280 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 13281 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 13282 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 13283 t.off(S.BUFFER_RESET, this.onBufferReset, this), 13284 t.off(S.BUFFER_APPENDING, this.onBufferAppending, this), 13285 t.off(S.BUFFER_CODECS, this.onBufferCodecs, this), 13286 t.off(S.BUFFER_EOS, this.onBufferEos, this), 13287 t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 13288 t.off(S.LEVEL_UPDATED, this.onLevelUpdated, this), 13289 t.off(S.FRAG_PARSED, this.onFragParsed, this), 13290 t.off(S.FRAG_CHANGED, this.onFragChanged, this); 13291 }), 13292 (e._initSourceBuffer = function () { 13293 (this.sourceBuffer = {}), 13294 (this.operationQueue = new kn(this.sourceBuffer)), 13295 (this.listeners = { audio: [], video: [], audiovideo: [] }), 13296 (this.lastMpegAudioChunk = null); 13297 }), 13298 (e.onManifestLoading = function () { 13299 (this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = 0), (this.details = null); 13300 }), 13301 (e.onManifestParsed = function (t, e) { 13302 var r = 2; 13303 ((e.audio && !e.video) || !e.altAudio) && (r = 1), 13304 (this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = r), 13305 w.log(this.bufferCodecEventsExpected + ' bufferCodec event
13305(s) expected'); 13306 }), 13307 (e.onMediaAttaching = function (t, e) { 13308 var r = (this.media = e.media); 13309 if (r && bn) { 13310 var i = (this.mediaSource = new bn()); 13311 i.addEventListener('sourceopen', this._onMediaSourceOpen), 13312 i.addEventListener('sourceended', this._onMediaSourceEnded), 13313 i.addEventListener('sourceclose', this._onMediaSourceClose), 13314 (r.src = self.URL.createObjectURL(i)), 13315 (this._objectUrl = r.src), 13316 r.addEventListener('emptied', this._onMediaEmptied); 13317 } 13318 }), 13319 (e.onMediaDetaching = function () { 13320 var t = this.media, 13321 e = this.mediaSource, 13322 r = this._objectUrl; 13323 if (e) { 13324 if ((w.log('[buffer-controller]: media source detaching'), 'open' === e.readyState)) 13325 try { 13326 e.endOfStream(); 13327 } catch (t) { 13328 w.warn('[buffer-controller]: onMediaDetaching: ' + t.message + ' while calling endOfStream'); 13329 } 13330 this.onBufferReset(), 13331 e.removeEventListener('sourceopen', this._onMediaSourceOpen), 13332 e.removeEventListener('sourceended', this._onMediaSourceEnded), 13333 e.removeEventListener('sourceclose', this._onMediaSourceClose), 13334 t && 13335 (t.removeEventListener('emptied', this._onMediaEmptied), 13336 r && self.URL.revokeObjectURL(r), 13337 t.src === r 13338 ? (t.removeAttribute('src'), t.load()) 13339 : w.warn('[buffer-controller]: media.src was changed by a third party - skip cleanup')), 13340 (this.mediaSource = null), 13341 (this.media = null), 13342 (this._objectUrl = null), 13343 (this.bufferCodecEventsExpected = this._bufferCodecEventsTotal), 13344 (this.pendingTracks = {}), 13345 (this.tracks = {}); 13346 } 13347 this.hls.trigger(S.MEDIA_DETACHED, void 0); 13348 }), 13349 (e.onBufferReset = function () { 13350 var t = this;
13351 this.getSourceBufferTypes().forEach(function (e) { 13352 var r = t.sourceBuffer[e]; 13353 try { 13354 r && 13355 (t.removeBufferListeners(e), 13356 t.mediaSource && t.mediaSource.removeSourceBuffer(r), 13357 (t.sourceBuffer[e] = void 0)); 13358 } catch (t) { 13359 w.warn('[buffer-controller]: Failed to reset the ' + e + ' buffer', t); 13360 } 13361 }), 13362 this._initSourceBuffer(); 13363 }), 13364 (e.onBufferCodecs = function (t, e) { 13365 var r = this, 13366 i = this.getSourceBufferTypes().length; 13367 Object.keys(e).forEach(function (t) { 13368 if (i) { 13369 var n = r.tracks[t]; 13370 if (n && 'function' == typeof n.buffer.changeType) { 13371 var a = e[t], 13372 s = a.id, 13373 o = a.codec, 13374 l = a.levelCodec, 13375 u = a.container, 13376 h = a.metadata, 13377 d = (n.levelCodec || n.codec).replace(Dn, '$1'), 13378 c = (l || o).replace(Dn, '$1'); 13379 if (d !== c) { 13380 var f = u + ';codecs=' + (l || o); 13381 r.appendChangeType(t, f), 13382 w.log('[buffer-controller]: switching codec ' + d + ' to ' + c), 13383 (r.tracks[t] = { buffer: n.buffer, codec: o, container: u, levelCodec: l, metadata: h, id: s }); 13384 } 13385 } 13386 } else r.pendingTracks[t] = e[t]; 13387 }), 13388 i || 13389 ((this.bufferCodecEventsExpected = Math.max(this.bufferCodecEventsExpected - 1, 0)), 13390 this.mediaSource && 'open' === this.mediaSource.readyState && this.checkPendingTracks()); 13391 }), 13392 (e.appendChangeType = function (t, e) { 13393 var r = this, 13394 i = this.operationQueue, 13395 n = { 13396 execute: function () { 13397 var n = r.sourceBuffer[t]; 13398 n && (w.log('[buffer-controller]: changing ' + t + ' sourceBuffer type to ' + e), n.changeType(e)), 13399 i.shiftAndExecuteNext(t); 13400 }, 13401 onStart: function () {}, 13402 onComplete: function () {}, 13403 onError: function (e) { 13404 w.warn('[buffer-controller]: Failed to change ' + t + ' SourceBuffer type', e); 13405 }, 13406 }; 13407 i.append(n, t); 13408 }), 13409 (e.onBufferAppending = function (t, e) { 13410 var r = this, 13411 i = this.hls, 13412 n = this.operationQueue, 13413 a = this.tracks, 13414 s = e.data, 13415 o = e.type, 13416 l = e.frag, 13417 u = e.part, 13418 h = e.chunkMeta, 13419 d = h.buffering[o], 13420 c = self.performance.now(); 13421 d.start = c; 13422 var f = l.stats.buffering, 13423 g = u ? u.stats.buffering : null; 13424 0 === f.start && (f.start = c), g && 0 === g.start && (g.start = c); 13425 var v = a.audio, 13426 m = !1; 13427 'audio' === o && 13428 'audio/mpeg' === (null == v ? void 0 : v.container) && 13429 ((m = !this.lastMpegAudioChunk || 1 === h.id || this.lastMpegAudioChunk.sn !== h.sn), 13430 (this.lastMpegAudioChunk = h)); 13431 var p = l.start, 13432 y = { 13433 execute: function () { 13434 if (((d.executeStart = self.performance.now()), m)) { 13435 var t = r.sourceBuffer[o]; 13436 if (t) { 13437 var e = p - t.timestampOffset; 13438 Math.abs(e) >= 0.1 && 13439 (w.log( 13440 '[buffer-controller]: Updating audio SourceBuffer timestampOffset to ' + 13441 p + 13442 ' (delta: ' + 13443 e + 13444 ') sn: ' + 13445 l.sn + 13446 ')', 13447 ), 13448 (t.timestampOffset = p)); 13449 } 13450 } 13451 r.appendExecutor(s, o); 13452 }, 13453 onStart: function () {}, 13454 onComplete: function () { 13455 var t = self.performance.now(); 13456 (d.executeEnd = d.end = t), 0 === f.first && (f.first = t), g && 0 === g.first && (g.first = t); 13457 var e = r.sourceBuffer, 13458 i = {}; 13459 for (var n in e) i[n] = Ir.getBuffered(e[n]); 13460 (r.appendError = 0), 13461 r.hls.trigger(S.BUFFER_APPENDED, { 13462 type: o, 13463 frag: l, 13464 part: u, 13465 chunkMeta: h, 13466 parent: l.type, 13467 timeRanges: i, 13468 }); 13469 }, 13470 onError: function (t) { 13471 w.error( 13472 '[buffer-controller]: Error encountered while trying to append to the ' + o + ' SourceBuffer', 13473 t, 13474 ); 13475 var e = { 13476 type: L.MEDIA_ERROR, 13477 parent: l.type, 13478 details: R.BUFFER_APPEND_ERROR, 13479 frag: l, 13480 part: u, 13481 chunkMeta: h, 13482 error: t, 13483 err: t, 13484 fatal: !1, 13485 }; 13486 t.code === DOMException.QUOTA_EXCEEDED_ERR 13487 ? (e.details = R.BUFFER_FULL_ERROR) 13488 : (r.appendError++, 13489 (e.details = R.BUFFER_APPEND_ERROR), 13490 r.appendError > i.config.appendErrorMaxRetry && 13491 (w.error( 13492 '[buffer-controller]: Failed ' + 13493 i.config.appendErrorMaxRetry + 13494 ' times to append segment in sourceBuffer', 13495 ), 13496 (e.fatal = !0))), 13497 i.trigger(S.ERROR, e); 13498 }, 13499 }; 13500 n.append(y, o); 13501 }), 13502 (e.onBufferFlushing = function (t, e) { 13503 var r = this, 13504 i = this.operationQueue, 13505 n = function (t) { 13506 return { 13507 execute: r.removeExecutor.bind(r, t, e.startOffset, e.endOffset), 13508 onStart: function () {}, 13509 onComplete: function () { 13510 r.hls.trigger(S.BUFFER_FLUSHED, { type: t }); 13511 }, 13512 onError: function (e) { 13513 w.warn('[buffer-controller]: Failed to remove from ' + t + ' SourceBuffer', e); 13514 }, 13515 }; 13516 }; 13517 e.type 13518 ? i.append(n(e.type), e.type)
13519 : this.getSourceBufferTypes().forEach(function (t) { 13520 i.append(n(t), t); 13521 }); 13522 }), 13523 (e.onFragParsed = function (t, e) { 13524 var r = this, 13525 i = e.frag, 13526 n = e.part, 13527 a = [], 13528 s = n ? n.elementaryStreams : i.elementaryStreams; 13529 s[U] ? a.push('audiovideo') : (s[O] && a.push('audio'), s[N] && a.push('video')), 13530 0 === a.length && 13531 w.warn( 13532 'Fragments must have at least one ElementaryStreamType set. type: ' + 13533 i.type + 13534 ' level: ' + 13535 i.level + 13536 ' sn: ' + 13537 i.sn, 13538 ), 13539 this.blockBuffers(function () { 13540 var t = self.performance.now(); 13541 (i.stats.buffering.end = t), n && (n.stats.buffering.end = t); 13542 var e = n ? n.stats : i.stats; 13543 r.hls.trigger(S.FRAG_BUFFERED, { frag: i, part: n, stats: e, id: i.type }); 13544 }, a); 13545 }), 13546 (e.onFragChanged = function (t, e) { 13547 this.flushBackBuffer(); 13548 }), 13549 (e.onBufferEos = function (t, e) { 13550 var r = this;
13551 this.getSourceBufferTypes().reduce(function (t, i) { 13552 var n = r.sourceBuffer[i]; 13553 return ( 13554 !n || 13555 (e.type && e.type !== i) || 13556 ((n.ending = !0), 13557 n.ended || ((n.ended = !0), w.log('[buffer-controller]: ' + i + ' sourceBuffer now EOS'))), 13558 t && !(n && !n.ended) 13559 ); 13560 }, !0) && 13561 (w.log('[buffer-controller]: Queueing mediaSource.endOfStream()'), 13562 this.blockBuffers(function () { 13563 r.getSourceBufferTypes().forEach(function (t) { 13564 var e = r.sourceBuffer[t]; 13565 e && (e.ending = !1); 13566 }); 13567 var t = r.mediaSource; 13568 t && 'open' === t.readyState 13569 ? (w.log('[buffer-controller]: Calling mediaSource.endOfStream()'), t.endOfStream()) 13570 : t && 13571 w.info( 13572 '[buffer-controller]: Could not call mediaSource.endOfStream(). mediaSource.readyState: ' + 13573 t.readyState, 13574 ); 13575 })); 13576 }), 13577 (e.onLevelUpdated = function (t, e) { 13578 var r = e.details; 13579 r.fragments.length && 13580 ((this.details = r),
13581 this.getSourceBufferTypes().length 13582 ? this.blockBuffers(this.updateMediaElementDuration.bind(this)) 13583 : this.updateMediaElementDuration()); 13584 }), 13585 (e.flushBackBuffer = function () { 13586 var t = this.hls, 13587 e = this.details, 13588 r = this.media, 13589 i = this.sourceBuffer; 13590 if (r && null !== e) { 13591 var n = this.getSourceBufferTypes(); 13592 if (n.length) { 13593 var a = 13594 e.live && null !== t.config.liveBackBufferLength 13595 ? t.config.liveBackBufferLength 13596 : t.config.backBufferLength; 13597 if (E(a) && !(a < 0)) { 13598 var s = r.currentTime, 13599 o = e.levelTargetDuration, 13600 l = Math.max(a, o), 13601 u = Math.floor(s / o) * o - l; 13602 n.forEach(function (r) { 13603 var n = i[r]; 13604 if (n) { 13605 var a = Ir.getBuffered(n); 13606 if (a.length > 0 && u > a.start(0)) { 13607 if ((t.trigger(S.BACK_BUFFER_REACHED, { bufferEnd: u }), e.live)) 13608 t.trigger(S.LIVE_BACK_BUFFER_REACHED, { bufferEnd: u }); 13609 else if (n.ended && a.end(a.length - 1) - s < 2 * o) 13610 return void w.info( 13611 '[buffer-controller]: Cannot flush ' + 13612 r + 13613 ' back buffer while SourceBuffer is in ended state', 13614 ); 13615 t.trigger(S.BUFFER_FLUSHING, { startOffset: 0, endOffset: u, type: r }); 13616 } 13617 } 13618 }); 13619 } 13620 } 13621 } 13622 }), 13623 (e.updateMediaElementDuration = function () { 13624 if (this.details && this.media && this.mediaSource && 'open' === this.mediaSource.readyState) { 13625 var t = this.details, 13626 e = this.hls, 13627 r = this.media, 13628 i = this.mediaSource, 13629 n = t.fragments[0].start + t.totalduration, 13630 a = r.duration, 13631 s = E(i.duration) ? i.duration : 0; 13632 t.live && e.config.liveDurationInfinity 13633 ? (w.log('[buffer-controller]: Media Source duration is set to Infinity'), 13634 (i.duration = 1 / 0), 13635 this.updateSeekableRange(t)) 13636 : ((n > s && n > a) || !E(a)) && 13637 (w.log('[buffer-controller]: Updating Media Source duration to ' + n.toFixed(3)), (i.duration = n)); 13638 } 13639 }), 13640 (e.updateSeekableRange = function (t) { 13641 var e = this.mediaSource, 13642 r = t.fragments; 13643 if (r.length && t.live && null != e && e.setLiveSeekableRange) { 13644 var i = Math.max(0, r[0].start), 13645 n = Math.max(i, i + t.totalduration); 13646 e.setLiveSeekableRange(i, n); 13647 } 13648 }), 13649 (e.checkPendingTracks = function () { 13650 var t = this.bufferCodecEventsExpected, 13651 e = this.operationQueue, 13652 r = this.pendingTracks, 13653 i = Object.keys(r).length; 13654 if ((i && !t) || 2 === i) { 13655 this.createSourceBuffers(r), (this.pendingTracks = {}); 13656 var n = this.getSourceBufferTypes(); 13657 if (n.length) 13658 this.hls.trigger(S.BUFFER_CREATED, { tracks: this.tracks }), 13659 n.forEach(function (t) { 13660 e.executeNext(t); 13661 }); 13662 else { 13663 var a = new Error('could not create source buffer for media codec(s)'); 13664 this.hls.trigger(S.ERROR, { 13665 type: L.MEDIA_ERROR, 13666 details: R.BUFFER_INCOMPATIBLE_CODECS_ERROR, 13667 fatal: !0, 13668 error: a, 13669 reason: a.message, 13670 }); 13671 } 13672 } 13673 }), 13674 (e.createSourceBuffers = function (t) { 13675 var e = this.sourceBuffer, 13676 r = this.mediaSource; 13677 if (!r) throw Error('createSourceBuffers called when mediaSource was null'); 13678 for (var i in t) 13679 if (!e[i]) { 13680 var n = t[i]; 13681 if (!n) throw Error('source buffer exists for track ' + i + ', however track does not'); 13682 var a = n.levelCodec || n.codec, 13683 s = n.container + ';codecs=' + a; 13684 w.log('[buffer-controller]: creating sourceBuffer(' + s + ')'); 13685 try { 13686 var o = (e[i] = r.addSourceBuffer(s)), 13687 l = i; 13688 this.addBufferListener(l, 'updatestart', this._onSBUpdateStart), 13689 this.addBufferListener(l, 'updateend', this._onSBUpdateEnd), 13690 this.addBufferListener(l, 'error', this._onSBUpdateError), 13691 (this.tracks[i] = { 13692 buffer: o, 13693 codec: a, 13694 container: n.container, 13695 levelCodec: n.levelCodec, 13696 metadata: n.metadata, 13697 id: n.id, 13698 }); 13699 } catch (t) { 13700 w.error('[buffer-controller]: error while trying to add sourceBuffer: ' + t.message), 13701 this.hls.trigger(S.ERROR, { 13702 type: L.MEDIA_ERROR, 13703 details: R.BUFFER_ADD_CODEC_ERROR, 13704 fatal: !1, 13705 error: t, 13706 mimeType: s, 13707 }); 13708 } 13709 } 13710 }), 13711 (e._onSBUpdateStart = function (t) { 13712 this.operationQueue.current(t).onStart(); 13713 }), 13714 (e._onSBUpdateEnd = function (t) { 13715 var e = this.operationQueue; 13716 e.current(t).onComplete(), e.shiftAndExecuteNext(t); 13717 }), 13718 (e._onSBUpdateError = function (t, e) { 13719 var r = new Error(t + ' SourceBuffer error'); 13720 w.error('[buffer-controller]: ' + r, e), 13721 this.hls.trigger(S.ERROR, { 13722 type: L.MEDIA_ERROR, 13723 details: R.BUFFER_APPENDING_ERROR, 13724 error: r, 13725 fatal: !1, 13726 }); 13727 var i = this.operationQueue.current(t); 13728 i && i.onError(e); 13729 }), 13730 (e.removeExecutor = function (t, e, r) { 13731 var i = this.media, 13732 n = this.mediaSource, 13733 a = this.operationQueue, 13734 s = this.sourceBuffer[t]; 13735 if (!i || !n || !s) 13736 return ( 13737 w.warn( 13738 '[buffer-controller]: Attempting to remove from the ' + t + ' SourceBuffer, but it does not exist', 13739 ), 13740 void a.shiftAndExecuteNext(t) 13741 ); 13742 var o = E(i.duration) ? i.duration : 1 / 0, 13743 l = E(n.duration) ? n.duration : 1 / 0, 13744 u = Math.max(0, e), 13745 h = Math.min(r, o, l); 13746 h > u && !s.ending 13747 ? ((s.ended = !1), 13748 w.log('[buffer-controller]: Removing [' + u + ',' + h + '] from the ' + t + ' SourceBuffer'), 13749 s.remove(u, h)) 13750 : a.shiftAndExecuteNext(t); 13751 }), 13752 (e.appendExecutor = function (t, e) { 13753 var r = this.operationQueue, 13754 i = this.sourceBuffer[e]; 13755 if (!i) 13756 return ( 13757 w.warn( 13758 '[buffer-controller]: Attempting to append to the ' + e + ' SourceBuffer, but it does not exist', 13759 ), 13760 void r.shiftAndExecuteNext(e) 13761 ); 13762 (i.ended = !1), i.appendBuffer(t); 13763 }), 13764 (e.blockBuffers = function (t, e) { 13765 var r = this;
13766 if ((void 0 === e && (e = this.getSourceBufferTypes()), !e.length)) 13767 return ( 13768 w.log('[buffer-controller]: Blocking operation requested, but no SourceBuffers exist'), 13769 void Promise.resolve().then(t) 13770 ); 13771 var i = this.operationQueue, 13772 n = e.map(function (t) { 13773 return i.appendBlocker(t); 13774 }); 13775 Promise.all(n).then(function () { 13776 t(), 13777 e.forEach(function (t) { 13778 var e = r.sourceBuffer[t]; 13779 (null != e && e.updating) || i.shiftAndExecuteNext(t); 13780 }); 13781 }); 13782 }), 13783 (e.getSourceBufferTypes = function () { 13784 return Object.keys(this.sourceBuffer); 13785 }), 13786 (e.addBufferListener = function (t, e, r) { 13787 var i = this.sourceBuffer[t]; 13788 if (i) { 13789 var n = r.bind(this, t); 13790 this.listeners[t].push({ event: e, listener: n }), i.addEventListener(e, n); 13791 } 13792 }), 13793 (e.removeBufferListeners = function (t) { 13794 var e = this.sourceBuffer[t]; 13795 e && 13796 this.listeners[t].forEach(function (t) { 13797 e.removeEventListener(t.event, t.listener); 13798 }); 13799 }), 13800 t 13801 ); 13802 })(), 13803 wn = { 13804 42: 225, 13805 92: 233, 13806 94: 237, 13807 95: 243, 13808 96: 250, 13809 123: 231, 13810 124: 247, 13811 125: 209, 13812 126: 241, 13813 127: 9608, 13814 128: 174, 13815 129: 176, 13816 130: 189, 13817 131: 191, 13818 132: 8482, 13819 133: 162, 13820 134: 163, 13821 135: 9834, 13822 136: 224, 13823 137: 32, 13824 138: 232, 13825 139: 226, 13826 140: 234, 13827 141: 238, 13828 142: 244, 13829 143: 251, 13830 144: 193, 13831 145: 201, 13832 146: 211, 13833 147: 218, 13834 148: 220, 13835 149: 252, 13836 150: 8216, 13837 151: 161, 13838 152: 42, 13839 153: 8217, 13840 154: 9473, 13841 155: 169, 13842 156: 8480, 13843 157: 8226, 13844 158: 8220, 13845 159: 8221, 13846 160: 192, 13847 161: 194, 13848 162: 199, 13849 163: 200, 13850 164: 202, 13851 165: 203, 13852 166: 235, 13853 167: 206, 13854 168: 207, 13855 169: 239, 13856 170: 212, 13857 171: 217, 13858 172: 249, 13859 173: 219, 13860 174: 171, 13861 175: 187, 13862 176: 195, 13863 177: 227, 13864 178: 205, 13865 179: 204, 13866 180: 236, 13867 181: 210, 13868 182: 242, 13869 183: 213, 13870 184: 245, 13871 185: 123, 13872 186: 125, 13873 187: 92, 13874 188: 94, 13875 189: 95, 13876 190: 124, 13877 191: 8764, 13878 192: 196, 13879 193: 228, 13880 194: 214, 13881 195: 246, 13882 196: 223, 13883 197: 165, 13884 198: 164, 13885 199: 9475, 13886 200: 197, 13887 201: 229, 13888 202: 216, 13889 203: 248, 13890 204: 9487, 13891 205: 9491, 13892 206: 9495, 13893 207: 9499, 13894 }, 13895 Cn = function (t) { 13896 var e = t; 13897 return wn.hasOwnProperty(t) && (e = wn[t]), String.fromCharCode(e); 13898 }, 13899 _n = 15, 13900 Pn = 100, 13901 xn = { 17: 1, 18: 3, 21: 5, 22: 7, 23: 9, 16: 11, 19: 12, 20: 14 }, 13902 Fn = { 17: 2, 18: 4, 21: 6, 22: 8, 23: 10, 19: 13, 20: 15 }, 13903 Mn = { 25: 1, 26: 3, 29: 5, 30: 7, 31: 9, 24: 11, 27: 12, 28: 14 }, 13904 On = { 25: 2, 26: 4, 29: 6, 30: 8, 31: 10, 27: 13, 28: 15 }, 13905 Nn = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'black', 'transparent'], 13906 Un = (function () { 13907 function t() { 13908 (this.time = null), (this.verboseLevel = 0); 13909 } 13910 return ( 13911 (t.prototype.log = function (t, e) { 13912 if (this.verboseLevel >= t) { 13913 var r = 'function' == typeof e ? e() : e; 13914 w.log(this.time + ' [' + t + '] ' + r); 13915 } 13916 }), 13917 t 13918 ); 13919 })(), 13920 Bn = function (t) { 13921 for (var e = [], r = 0; r < t.length; r++) e.push(t[r].toString(16)); 13922 return e; 13923 }, 13924 Gn = (function () { 13925 function t(t, e, r, i, n) { 13926 (this.foreground = void 0), 13927 (this.underline = void 0), 13928 (this.italics = void 0), 13929 (this.background = void 0), 13930 (this.flash = void 0), 13931 (this.foreground = t || 'white'), 13932 (this.underline = e || !1), 13933 (this.italics = r || !1), 13934 (this.background = i || 'black'), 13935 (this.flash = n || !1); 13936 } 13937 var e = t.prototype; 13938 return ( 13939 (e.reset = function () { 13940 (this.foreground = 'white'), 13941 (this.underline = !1), 13942 (this.italics = !1), 13943 (this.background = 'black'), 13944 (this.flash = !1); 13945 }), 13946 (e.setStyles = function (t) { 13947 for (var e = ['foreground', 'underline', 'italics', 'background', 'flash'], r = 0; r < e.length; r++) { 13948 var i = e[r]; 13949 t.hasOwnProperty(i) && (this[i] = t[i]); 13950 } 13951 }), 13952 (e.isDefault = function () { 13953 return ( 13954 'white' === this.foreground && 13955 !this.underline && 13956 !this.italics && 13957 'black' === this.background && 13958 !this.flash 13959 ); 13960 }), 13961 (e.equals = function (t) { 13962 return ( 13963 this.foreground === t.foreground && 13964 this.underline === t.underline && 13965 this.italics === t.italics && 13966 this.background === t.background && 13967 this.flash === t.flash 13968 ); 13969 }), 13970 (e.copy = function (t) { 13971 (this.foreground = t.foreground), 13972 (this.underline = t.underline), 13973 (this.italics = t.italics), 13974 (this.background = t.background), 13975 (this.flash = t.flash); 13976 }), 13977 (e.toString = function () { 13978 return ( 13979 'color=' + 13980 this.foreground + 13981 ', underline=' + 13982 this.underline + 13983 ', italics=' + 13984 this.italics + 13985 ', background=' + 13986 this.background +
13987 ', flash=' + 13988 this.flash 13989 ); 13990 }), 13991 t 13992 ); 13993 })(), 13994 Kn = (function () { 13995 function t(t, e, r, i, n, a) { 13996 (this.uchar = void 0), 13997 (this.penState = void 0), 13998 (this.uchar = t || ' '), 13999 (this.penState = new Gn(e, r, i, n, a)); 14000 } 14001 var e = t.prototype; 14002 return ( 14003 (e.reset = function () { 14004 (this.uchar = ' '), this.penState.reset(); 14005 }), 14006 (e.setChar = function (t, e) { 14007 (this.uchar = t), this.penState.copy(e); 14008 }), 14009 (e.setPenState = function (t) { 14010 this.penState.copy(t); 14011 }), 14012 (e.equals = function (t) { 14013 return this.uchar === t.uchar && this.penState.equals(t.penState); 14014 }), 14015 (e.copy = function (t) { 14016 (this.uchar = t.uchar), this.penState.copy(t.penState); 14017 }), 14018 (e.isEmpty = function () { 14019 return ' ' === this.uchar && this.penState.isDefault(); 14020 }), 14021 t 14022 ); 14023 })(), 14024 Hn = (function () { 14025 function t(t) { 14026 (this.chars = void 0), 14027 (this.pos = void 0), 14028 (this.currPenState = void 0), 14029 (this.cueStartTime = void 0), 14030 (this.logger = void 0), 14031 (this.chars = []); 14032 for (var e = 0; e < Pn; e++) this.chars.push(new Kn()); 14033 (this.logger = t), (this.pos = 0), (this.currPenState = new Gn()); 14034 } 14035 var e = t.prototype; 14036 return ( 14037 (e.equals = function (t) { 14038 for (var e = !0, r = 0; r < Pn; r++) 14039 if (!this.chars[r].equals(t.chars[r])) { 14040 e = !1; 14041 break; 14042 } 14043 return e; 14044 }), 14045 (e.copy = function (t) { 14046 for (var e = 0; e < Pn; e++) this.chars[e].copy(t.chars[e]); 14047 }), 14048 (e.isEmpty = function () { 14049 for (var t = !0, e = 0; e < Pn; e++) 14050 if (!this.chars[e].isEmpty()) { 14051 t = !1; 14052 break; 14053 } 14054 return t; 14055 }), 14056 (e.setCursor = function (t) { 14057 this.pos !== t && (this.pos = t), 14058 this.pos < 0 14059 ? (this.logger.log(3, 'Negative cursor position ' + this.pos), (this.pos = 0)) 14060 : this.pos > Pn && (this.logger.log(3, 'Too large cursor position ' + this.pos), (this.pos = Pn)); 14061 }), 14062 (e.moveCursor = function (t) { 14063 var e = this.pos + t; 14064 if (t > 1) for (var r = this.pos + 1; r < e + 1; r++) this.chars[r].setPenState(this.currPenState); 14065 this.setCursor(e); 14066 }), 14067 (e.backSpace = function () { 14068 this.moveCursor(-1), this.chars[this.pos].setChar(' ', this.currPenState); 14069 }), 14070 (e.insertChar = function (t) { 14071 var e = this; 14072 t >= 144 && this.backSpace(); 14073 var r = Cn(t); 14074 this.pos >= Pn 14075 ? this.logger.log(0, function () { 14076 return 'Cannot insert ' + t.toString(16) + ' (' + r + ') at position ' + e.pos + '. Skipping it!'; 14077 }) 14078 : (this.chars[this.pos].setChar(r, this.currPenState), this.moveCursor(1)); 14079 }), 14080 (e.clearFromPos = function (t) { 14081 var e; 14082 for (e = t; e < Pn; e++) this.chars[e].reset(); 14083 }), 14084 (e.clear = function () { 14085 this.clearFromPos(0), (this.pos = 0), this.currPenState.reset(); 14086 }), 14087 (e.clearToEndOfRow = function () { 14088 this.clearFromPos(this.pos); 14089 }), 14090 (e.getTextString = function () { 14091 for (var t = [], e = !0, r = 0; r < Pn; r++) { 14092 var i = this.chars[r].uchar; 14093 ' ' !== i && (e = !1), t.push(i); 14094 } 14095 return e ? '' : t.join(''); 14096 }), 14097 (e.setPenStyles = function (t) { 14098 this.currPenState.setStyles(t), this.chars[this.pos].setPenState(this.currPenState); 14099 }), 14100 t 14101 ); 14102 })(), 14103 Vn = (function () { 14104 function t(t) { 14105 (this.rows = void 0), 14106 (this.currRow = void 0), 14107 (this.nrRollUpRows = void 0), 14108 (this.lastOutputScreen = void 0), 14109 (this.logger = void 0), 14110 (this.rows = []); 14111 for (var e = 0; e < _n; e++) this.rows.push(new Hn(t)); 14112 (this.logger = t), 14113 (this.currRow = 14), 14114 (this.nrRollUpRows = null),
14115 (this.lastOutputScreen = null), 14116 this.reset(); 14117 } 14118 var e = t.prototype; 14119 return ( 14120 (e.reset = function () { 14121 for (var t = 0; t < _n; t++) this.rows[t].clear(); 14122 this.currRow = 14; 14123 }), 14124 (e.equals = function (t) { 14125 for (var e = !0, r = 0; r < _n; r++) 14126 if (!this.rows[r].equals(t.rows[r])) { 14127 e = !1; 14128 break; 14129 } 14130 return e; 14131 }), 14132 (e.copy = function (t) { 14133 for (var e = 0; e < _n; e++) this.rows[e].copy(t.rows[e]); 14134 }), 14135 (e.isEmpty = function () { 14136 for (var t = !0, e = 0; e < _n; e++) 14137 if (!this.rows[e].isEmpty()) { 14138 t = !1; 14139 break; 14140 } 14141 return t; 14142 }), 14143 (e.backSpace = function () { 14144 this.rows[this.currRow].backSpace(); 14145 }), 14146 (e.clearToEndOfRow = function () { 14147 this.rows[this.currRow].clearToEndOfRow(); 14148 }), 14149 (e.insertChar = function (t) { 14150 this.rows[this.currRow].insertChar(t); 14151 }), 14152 (e.setPen = function (t) { 14153 this.rows[this.currRow].setPenStyles(t); 14154 }), 14155 (e.moveCursor = function (t) { 14156 this.rows[this.currRow].moveCursor(t); 14157 }), 14158 (e.setCursor = function (t) { 14159 this.logger.log(2, 'setCursor: ' + t), this.rows[this.currRow].setCursor(t); 14160 }), 14161 (e.setPAC = function (t) { 14162 this.logger.log(2, function () { 14163 return 'pacData = ' + JSON.stringify(t); 14164 }); 14165 var e = t.row - 1; 14166 if ( 14167 (this.nrRollUpRows && e < this.nrRollUpRows - 1 && (e = this.nrRollUpRows - 1), 14168 this.nrRollUpRows && this.currRow !== e) 14169 ) { 14170 for (var r = 0; r < _n; r++) this.rows[r].clear(); 14171 var i = this.currRow + 1 - this.nrRollUpRows, 14172 n = this.lastOutputScreen; 14173 if (n) { 14174 var a = n.rows[i].cueStartTime, 14175 s = this.logger.time; 14176 if (a && null !== s && a < s) 14177 for (var o = 0; o < this.nrRollUpRows; o++) 14178 this.rows[e - this.nrRollUpRows + o + 1].copy(n.rows[i + o]); 14179 } 14180 } 14181 this.currRow = e; 14182 var l = this.rows[this.currRow]; 14183 if (null !== t.indent) { 14184 var u = t.indent, 14185 h = Math.max(u - 1, 0); 14186 l.setCursor(t.indent), (t.color = l.chars[h].penState.foreground); 14187 } 14188 var d = { 14189 foreground: t.color, 14190 underline: t.underline, 14191 italics: t.italics, 14192 background: 'black', 14193 flash: !1, 14194 }; 14195 this.setPen(d); 14196 }), 14197 (e.setBkgData = function (t) { 14198 this.logger.log(2, function () { 14199 return 'bkgData = ' + JSON.stringify(t); 14200 }), 14201 this.backSpace(), 14202 this.setPen(t), 14203 this.insertChar(32); 14204 }), 14205 (e.setRollUpRows = function (t) { 14206 this.nrRollUpRows = t; 14207 }), 14208 (e.rollUp = function () { 14209 var t = this; 14210 if (null !== this.nrRollUpRows) { 14211 this.logger.log(1, function () { 14212 return t.getDisplayText(); 14213 }); 14214 var e = this.currRow + 1 - this.nrRollUpRows, 14215 r = this.rows.splice(e, 1)[0]; 14216 r.clear(), this.rows.splice(this.currRow, 0, r), this.logger.log(2, 'Rolling up'); 14217 } else this.logger.log(3, 'roll_up but nrRollUpRows not set yet'); 14218 }), 14219 (e.getDisplayText = function (t) { 14220 t = t || !1; 14221 for (var e = [], r = '', i = -1, n = 0; n < _n; n++) { 14222 var a = this.rows[n].getTextString(); 14223 a && ((i = n + 1), t ? e.push('Row ' + i + ": '" + a + "'") : e.push(a.trim())); 14224 } 14225 return e.length > 0 && (r = t ? '[' + e.join(' | ') + ']' : e.join('\n')), r; 14226 }), 14227 (e.getTextAndFormat = function () { 14228 return this.rows; 14229 }), 14230 t 14231 ); 14232 })(), 14233 Yn = (function () { 14234 function t(t, e, r) { 14235 (this.chNr = void 0), 14236 (this.outputFilter = void 0), 14237 (this.mode = void 0), 14238 (this.verbose = void 0), 14239 (this.displayedMemory = void 0), 14240 (this.nonDisplayedMemory = void 0), 14241 (this.lastOutputScreen = void 0), 14242 (this.currRollUpRow = void 0), 14243 (this.writeScreen = void 0), 14244 (this.cueStartTime = void 0), 14245 (this.logger = void 0), 14246 (this.chNr = t), 14247 (this.outputFilter = e), 14248 (this.mode = null),
14249 (this.verbose = 0), 14250 (this.displayedMemory = new Vn(r)), 14251 (this.nonDisplayedMemory = new Vn(r)), 14252 (this.lastOutputScreen = new Vn(r)), 14253 (this.currRollUpRow = this.displayedMemory.rows[14]), 14254 (this.writeScreen = this.displayedMemory), 14255 (this.mode = null), 14256 (this.cueStartTime = null), 14257 (this.logger = r); 14258 } 14259 var e = t.prototype; 14260 return ( 14261 (e.reset = function () { 14262 (this.mode = null), 14263 this.displayedMemory.reset(), 14264 this.nonDisplayedMemory.reset(), 14265 this.lastOutputScreen.reset(), 14266 this.outputFilter.reset(), 14267 (this.currRollUpRow = this.displayedMemory.rows[14]), 14268 (this.writeScreen = this.displayedMemory), 14269 (this.mode = null), 14270 (this.cueStartTime = null); 14271 }), 14272 (e.getHandler = function () { 14273 return this.outputFilter; 14274 }), 14275 (e.setHandler = function (t) { 14276 this.outputFilter = t; 14277 }), 14278 (e.setPAC = function (t) { 14279 this.writeScreen.setPAC(t); 14280 }), 14281 (e.setBkgData = function (t) { 14282 this.writeScreen.setBkgData(t); 14283 }), 14284 (e.setMode = function (t) { 14285 t !== this.mode && 14286 ((this.mode = t), 14287 this.logger.log(2, function () { 14288 return 'MODE=' + t; 14289 }), 14290 'MODE_POP-ON' === this.mode 14291 ? (this.writeScreen = this.nonDisplayedMemory) 14292 : ((this.writeScreen = this.displayedMemory), this.writeScreen.reset()), 14293 'MODE_ROLL-UP' !== this.mode && 14294 ((this.displayedMemory.nrRollUpRows = null), (this.nonDisplayedMemory.nrRollUpRows = null)), 14295 (this.mode = t)); 14296 }), 14297 (e.insertChars = function (t) { 14298 for (var e = this, r = 0; r < t.length; r++) this.writeScreen.insertChar(t[r]); 14299 var i = this.writeScreen === this.displayedMemory ? 'DISP' : 'NON_DISP'; 14300 this.logger.log(2, function () { 14301 return i + ': ' + e.writeScreen.getDisplayText(!0); 14302 }), 14303 ('MODE_PAINT-ON' !== this.mode && 'MODE_ROLL-UP' !== this.mode) || 14304 (this.logger.log(1, function () { 14305 return 'DISPLAYED: ' + e.displayedMemory.getDisplayText(!0); 14306 }), 14307 this.outputDataUpdate()); 14308 }), 14309 (e.ccRCL = function () { 14310 this.logger.log(2, 'RCL - Resume Caption Loading'), this.setMode('MODE_POP-ON'); 14311 }), 14312 (e.ccBS = function () { 14313 this.logger.log(2, 'BS - BackSpace'), 14314 'MODE_TEXT' !== this.mode && 14315 (this.writeScreen.backSpace(), this.writeScreen === this.displayedMemory && this.outputDataUpdate()); 14316 }), 14317 (e.ccAOF = function () {}), 14318 (e.ccAON = function () {}), 14319 (e.ccDER = function () { 14320 this.logger.log(2, 'DER- Delete to End of Row'), 14321 this.writeScreen.clearToEndOfRow(), 14322 this.outputDataUpdate(); 14323 }), 14324 (e.ccRU = function (t) { 14325 this.logger.log(2, 'RU(' + t + ') - Roll Up'), 14326 (this.writeScreen = this.displayedMemory), 14327 this.setMode('MODE_ROLL-UP'), 14328 this.writeScreen.setRollUpRows(t); 14329 }), 14330 (e.ccFON = function () { 14331 this.logger.log(2, 'FON - Flash On'), this.writeScreen.setPen({ flash: !0 }); 14332 }), 14333 (e.ccRDC = function () { 14334 this.logger.log(2, 'RDC - Resume Direct Captioning'), this.setMode('MODE_PAINT-ON'); 14335 }), 14336 (e.ccTR = function () { 14337 this.logger.log(2, 'TR'), this.setMode('MODE_TEXT'); 14338 }), 14339 (e.ccRTD = function () { 14340 this.logger.log(2, 'RTD'), this.setMode('MODE_TEXT'); 14341 }), 14342 (e.ccEDM = function () {
14343 this.logger.log(2, 'EDM - Erase Displayed Memory'), 14344 this.displayedMemory.reset(), 14345 this.outputDataUpdate(!0); 14346 }), 14347 (e.ccCR = function () { 14348 this.logger.log(2, 'CR - Carriage Return'), this.writeScreen.rollUp(), this.outputDataUpdate(!0); 14349 }), 14350 (e.ccENM = function () { 14351 this.logger.log(2, 'ENM - Erase Non-displayed Memory'), this.nonDisplayedMemory.reset(); 14352 }), 14353 (e.ccEOC = function () { 14354 var t = this; 14355 if ((this.logger.log(2, 'EOC - End Of Caption'), 'MODE_POP-ON' === this.mode)) { 14356 var e = this.displayedMemory; 14357 (this.displayedMemory = this.nonDisplayedMemory), 14358 (this.nonDisplayedMemory = e), 14359 (this.writeScreen = this.nonDisplayedMemory), 14360 this.logger.log(1, function () { 14361 return 'DISP: ' + t.displayedMemory.getDisplayText(); 14362 }); 14363 } 14364 this.outputDataUpdate(!0); 14365 }), 14366 (e.ccTO = function (t) { 14367 this.logger.log(2, 'TO(' + t + ') - Tab Offset'), this.writeScreen.moveCursor(t); 14368 }), 14369 (e.ccMIDROW = function (t) { 14370 var e = { flash: !1 }; 14371 if (((e.underline = t % 2 == 1), (e.italics = t >= 46), e.italics)) e.foreground = 'white'; 14372 else { 14373 var r = Math.floor(t / 2) - 16; 14374 e.foreground = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta'][r]; 14375 } 14376 this.logger.log(2, 'MIDROW: ' + JSON.stringify(e)), this.writeScreen.setPen(e); 14377 }), 14378 (e.outputDataUpdate = function (t) { 14379 void 0 === t && (t = !1); 14380 var e = this.logger.time; 14381 null !== e && 14382 this.outputFilter && 14383 (null !== this.cueStartTime || this.displayedMemory.isEmpty() 14384 ? this.displayedMemory.equals(this.lastOutputScreen) || 14385 (this.outputFilter.newCue(this.cueStartTime, e, this.lastOutputScreen), 14386 t && this.outputFilter.dispatchCue && this.outputFilter.dispatchCue(), 14387 (this.cueStartTime = this.displayedMemory.isEmpty() ? null : e)) 14388 : (this.cueStartTime = e), 14389 this.lastOutputScreen.copy(this.displayedMemory)); 14390 }), 14391 (e.cueSplitAtTime = function (t) { 14392 this.outputFilter && 14393 (this.displayedMemory.isEmpty() || 14394 (this.outputFilter.newCue && this.outputFilter.newCue(this.cueStartTime, t, this.displayedMemory), 14395 (this.cueStartTime = t))); 14396 }), 14397 t 14398 ); 14399 })(), 14400 Wn = (function () { 14401 function t(t, e, r) { 14402 (this.channels = void 0), (this.currentChannel = 0), (this.cmdHistory = void 0), (this.logger = void 0); 14403 var i = new Un(); 14404 (this.channels = [null, new Yn(t, e, i), new Yn(t + 1, r, i)]), 14405 (this.cmdHistory = { a: null, b: null }), 14406 (this.logger = i); 14407 } 14408 var e = t.prototype; 14409 return ( 14410 (e.getHandler = function (t) { 14411 return this.channels[t].getHandler(); 14412 }), 14413 (e.setHandler = function (t, e) { 14414 this.channels[t].setHandler(e); 14415 }), 14416 (e.addData = function (t, e) { 14417 var r, 14418 i, 14419 n, 14420 a = !1; 14421 this.logger.time = t; 14422 for (var s = 0; s < e.length; s += 2) 14423 if (((i = 127 & e[s]), (n = 127 & e[s + 1]), 0 !== i || 0 !== n)) { 14424 if ( 14425 (this.logger.log(3, '[' + Bn([e[s], e[s + 1]]) + '] -> (' + Bn([i, n]) + ')'), 14426 (r = this.parseCmd(i, n)) || (r = this.parseMidrow(i, n)), 14427 r || (r = this.parsePAC(i, n)), 14428 r || (r = this.parseBackgroundAttributes(i, n)), 14429 !r && (a = this.parseChars(i, n))) 14430 ) { 14431 var o = this.currentChannel; 14432 o && o > 0 14433 ? this.channels[o].insertChars(a) 14434 : this.logger.log(2, 'No channel found yet. TEXT-MODE?'); 14435 } 14436 r || 14437 a || 14438 this.logger.log(2, "Couldn't parse cleaned data " + Bn([i, n]) + ' orig: ' + Bn([e[s], e[s + 1]])); 14439 } 14440 }), 14441 (e.parseCmd = function (t, e) { 14442 var r = this.cmdHistory; 14443 if ( 14444 !( 14445 ((20 === t || 28 === t || 21 === t || 29 === t) && e >= 32 && e <= 47) || 14446 ((23 === t || 31 === t) && e >= 33 && e <= 35) 14447 ) 14448 ) 14449 return !1; 14450 if (qn(t, e, r)) 14451 return jn(null, null, r), this.logger.log(3, 'Repeated command (' + Bn([t, e]) + ') is dropped'), !0; 14452 var i = 20 === t || 21 === t || 23 === t ? 1 : 2, 14453 n = this.channels[i]; 14454 return ( 14455 20 === t || 21 === t || 28 === t || 29 === t 14456 ? 32 === e 14457 ? n.ccRCL() 14458 : 33 === e 14459 ? n.ccBS() 14460 : 34 === e 14461 ? n.ccAOF() 14462 : 35 === e 14463 ? n.ccAON() 14464 : 36 === e 14465 ? n.ccDER() 14466 : 37 === e 14467 ? n.ccRU(2) 14468 : 38 === e 14469 ? n.ccRU(3) 14470 : 39 === e 14471 ? n.ccRU(4) 14472 : 40 === e 14473 ? n.ccFON() 14474 : 41 === e 14475 ? n.ccRDC() 14476 : 42 === e 14477 ? n.ccTR() 14478 : 43 === e 14479 ? n.ccRTD() 14480 : 44 === e 14481 ? n.ccEDM() 14482 : 45 === e 14483 ? n.ccCR() 14484 : 46 === e 14485 ? n.ccENM() 14486 : 47 === e && n.ccEOC() 14487 : n.ccTO(e - 32), 14488 jn(t, e, r), 14489 (this.currentChannel = i), 14490 !0 14491 ); 14492 }), 14493 (e.parseMidrow = function (t, e) { 14494 var r = 0; 14495 if ((17 === t || 25 === t) && e >= 32 && e <= 47) { 14496 if ((r = 17 === t ? 1 : 2) !== this.currentChannel) 14497 return this.logger.log(0, 'Mismatch channel in midrow parsing'), !1; 14498 var i = this.channels[r]; 14499 return !!i && (i.ccMIDROW(e), this.logger.log(3, 'MIDROW (' + Bn([t, e]) + ')'), !0); 14500 } 14501 return !1; 14502 }), 14503 (e.parsePAC = function (t, e) { 14504 var r, 14505 i = this.cmdHistory; 14506 if ( 14507 !( 14508 (((t >= 17 && t <= 23) || (t >= 25 && t <= 31)) && e >= 64 && e <= 127) || 14509 ((16 === t || 24 === t) && e >= 64 && e <= 95) 14510 ) 14511 ) 14512 return !1; 14513 if (qn(t, e, i)) return jn(null, null, i), !0; 14514 var n = t <= 23 ? 1 : 2; 14515 r = e >= 64 && e <= 95 ? (1 === n ? xn[t] : Mn[t]) : 1 === n ? Fn[t] : On[t]; 14516 var a = this.channels[n]; 14517 return !!a && (a.setPAC(this.interpretPAC(r, e)), jn(t, e, i), (this.currentChannel = n), !0); 14518 }), 14519 (e.interpretPAC = function (t, e) { 14520 var r, 14521 i = { color: null, italics: !1, indent: null, underline: !1, row: t }; 14522 return ( 14523 (r = e > 95 ? e - 96 : e - 64), 14524 (i.underline = 1 == (1 & r)), 14525 r <= 13 14526 ? (i.color = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'white'][ 14527 Math.floor(r / 2) 14528 ]) 14529 : r <= 15 14530 ? ((i.italics = !0), (i.color = 'white')) 14531 : (i.indent = 4 * Math.floor((r - 16) / 2)), 14532 i 14533 ); 14534 }), 14535 (e.parseChars = function (t, e) { 14536 var r, 14537 i, 14538 n = null, 14539 a = null; 14540 if ( 14541 (t >= 25 ? ((r = 2), (a = t - 8)) : ((r = 1), (a = t)), 14542 a >= 17 && a <= 19 14543 ? ((i = 17 === a ? e + 80 : 18 === a ? e + 112 : e + 144), 14544 this.logger.log(2, "Special char '" + Cn(i) + "' in channel " + r), 14545 (n = [i])) 14546 : t >
14546= 32 && t <= 127 && (n = 0 === e ? [t] : [t, e]), 14547 n) 14548 ) { 14549 var s = Bn(n); 14550 this.logger.log(3, 'Char codes = ' + s.join(',')), jn(t, e, this.cmdHistory); 14551 } 14552 return n; 14553 }), 14554 (e.parseBackgroundAttributes = function (t, e) { 14555 var r; 14556 if (!(((16 === t || 24 === t) && e >= 32 && e <= 47) || ((23 === t || 31 === t) && e >= 45 && e <= 47))) 14557 return !1; 14558 var i = {}; 14559 16 === t || 24 === t 14560 ? ((r = Math.floor((e - 32) / 2)), 14561 (i.background = Nn[r]), 14562 e % 2 == 1 && (i.background = i.background + '_semi')) 14563 : 45 === e 14564 ? (i.background = 'transparent') 14565 : ((i.foreground = 'black'), 47 === e && (i.underline = !0)); 14566 var n = t <= 23 ? 1 : 2; 14567 return this.channels[n].setBkgData(i), jn(t, e, this.cmdHistory), !0; 14568 }), 14569 (e.reset = function () { 14570 for (var t = 0; t < Object.keys(this.channels).length; t++) { 14571 var e = this.channels[t]; 14572 e && e.reset(); 14573 } 14574 this.cmdHistory = { a: null, b: null }; 14575 }), 14576 (e.cueSplitAtTime = function (t) { 14577 for (var e = 0; e < this.channels.length; e++) { 14578 var r = this.channels[e]; 14579 r && r.cueSplitAtTime(t); 14580 } 14581 }), 14582 t 14583 ); 14584 })(); 14585 function jn(t, e, r) { 14586 (r.a = t), (r.b = e); 14587 } 14588 function qn(t, e, r) { 14589 return r.a === t && r.b === e; 14590 } 14591 var Xn = (function () { 14592 function t(t, e) { 14593 (this.timelineController = void 0), 14594 (this.cueRanges = []), 14595 (this.trackName = void 0), 14596 (this.startTime = null), 14597 (this.endTime = null), 14598 (this.screen = null), 14599 (this.timelineController = t), 14600 (this.trackName = e); 14601 } 14602 var e = t.prototype; 14603 return ( 14604 (e.dispatchCue = function () { 14605 null !== this.startTime && 14606 (this.timelineController.addCues( 14607 this.trackName, 14608 this.startTime, 14609 this.endTime, 14610 this.screen, 14611 this.cueRanges, 14612 ), 14613 (this.startTime = null)); 14614 }), 14615 (e.newCue = function (t, e, r) { 14616 (null === this.startTime || this.startTime > t) && (this.startTime = t), 14617 (this.endTime = e), 14618 (this.screen = r), 14619 this.timelineController.createCaptionsTrack(this.trackName); 14620 }), 14621 (e.reset = function () { 14622 (this.cueRanges = []), (this.startTime = null); 14623 }), 14624 t 14625 ); 14626 })(), 14627 zn = (function () { 14628 if ('undefined' != typeof self && self.VTTCue) return self.VTTCue; 14629 var t = ['', 'lr', 'rl'], 14630 e = ['start', 'middle', 'end', 'left', 'right']; 14631 function r(t, e) { 14632 if ('string' != typeof e) return !1; 14633 if (!Array.isArray(t)) return !1; 14634 var r = e.toLowerCase(); 14635 return !!~t.indexOf(r) && r; 14636 } 14637 function i(t) { 14638 return r(e, t); 14639 } 14640 function n(t) { 14641 for (var e = arguments.length, r = new Array(e > 1 ? e - 1 : 0), i = 1; i < e; i++) r[i - 1] = arguments[i]; 14642 for (var n = 1; n < arguments.length; n++) { 14643 var a = arguments[n]; 14644 for (var s in a) t[s] = a[s]; 14645 } 14646 return t; 14647 } 14648 function a(e, a, s) { 14649 var o = this, 14650 l = { enumerable: !0 }; 14651 o.hasBeenReset = !1; 14652 var u = '', 14653 h = !1, 14654 d = e, 14655 c = a, 14656 f = s, 14657 g = null, 14658 v = '', 14659 m = !0, 14660 p = 'auto',
14661 y = 'start', 14662 T = 50, 14663 E = 'middle', 14664 S = 50, 14665 L = 'middle'; 14666 Object.defineProperty( 14667 o, 14668 'id', 14669 n({}, l, { 14670 get: function () { 14671 return u; 14672 }, 14673 set: function (t) { 14674 u = '' + t; 14675 }, 14676 }), 14677 ), 14678 Object.defineProperty( 14679 o, 14680 'pauseOnExit', 14681 n({}, l, { 14682 get: function () { 14683 return h; 14684 }, 14685 set: function (t) { 14686 h = !!t; 14687 }, 14688 }), 14689 ), 14690 Object.defineProperty( 14691 o, 14692 'startTime', 14693 n({}, l, { 14694 get: function () { 14695 return d; 14696 }, 14697 set: function (t) { 14698 if ('number' != typeof t) throw new TypeError('Start time must be set to a number.'); 14699 (d = t), (this.hasBeenReset = !0); 14700 }, 14701 }), 14702 ), 14703 Object.defineProperty( 14704 o, 14705 'endTime', 14706 n({}, l, { 14707 get: function () { 14708 return c; 14709 }, 14710 set: function (t) { 14711 if ('number' != typeof t) throw new TypeError('End time must be set to a number.'); 14712 (c = t), (this.hasBeenReset = !0); 14713 }, 14714 }), 14715 ), 14716 Object.defineProperty( 14717 o, 14718 'text', 14719 n({}, l, { 14720 get: function () { 14721 return f; 14722 }, 14723 set: function (t) { 14724 (f = '' + t), (this.hasBeenReset = !0); 14725 }, 14726 }), 14727 ), 14728 Object.defineProperty( 14729 o, 14730 'region', 14731 n({}, l, { 14732 get: function () { 14733 return g; 14734 }, 14735 set: function (t) { 14736 (g = t), (this.hasBeenReset = !0); 14737 }, 14738 }), 14739 ), 14740 Object.defineProperty( 14741 o, 14742 'vertical', 14743 n({}, l, { 14744 get: function () { 14745 return v; 14746 }, 14747 set: function (e) { 14748 var i = (function (e) { 14749 return r(t, e); 14750 })(e); 14751 if (!1 === i) throw new SyntaxError('An invalid or illegal string was specified.'); 14752 (v = i), (this.hasBeenReset = !0); 14753 }, 14754 }), 14755 ), 14756 Object.defineProperty( 14757 o, 14758 'snapToLines', 14759 n({}, l, { 14760 get: function () { 14761 return m; 14762 }, 14763 set: function (t) { 14764 (m = !!t), (this.hasBeenReset = !0); 14765 }, 14766 }), 14767 ), 14768 Object.defineProperty( 14769 o, 14770 'line', 14771 n({}, l, { 14772 get: function () { 14773 return p; 14774 }, 14775 set: function (t) { 14776 if ('number' != typeof t && 'auto' !== t) 14777 throw new SyntaxError('An invalid number or illegal string was specified.'); 14778 (p = t), (this.hasBeenReset = !0); 14779 }, 14780 }), 14781 ), 14782 Object.defineProperty( 14783 o, 14784 'lineAlign', 14785 n({}, l, { 14786 get: function () { 14787 return y; 14788 }, 14789 set: function (t) { 14790 var e = i(t); 14791 if (!e) throw new SyntaxError('An invalid or illegal string was specified.'); 14792 (y = e), (this.hasBeenReset = !0); 14793 }, 14794 }), 14795 ), 14796 Object.defineProperty( 14797 o, 14798 'position', 14799 n({}, l, { 14800 get: function () { 14801 return T; 14802 }, 14803 set: function (t) { 14804 if (t < 0 || t > 100) throw new Error('Position must be between 0 and 100.'); 14805 (T = t), (this.hasBeenReset = !0); 14806 }, 14807 }), 14808 ), 14809 Object.defineProperty( 14810 o, 14811 'positionAlign', 14812 n({}, l, { 14813 get: function () { 14814 return E; 14815 }, 14816 set: function (t) { 14817 var e = i(t); 14818 if (!e) throw new SyntaxError('An invalid or illegal string was specified.'); 14819 (E = e), (this.hasBeenReset = !0); 14820 }, 14821 }), 14822 ), 14823 Object.defineProperty( 14824 o, 14825 'size', 14826 n({}, l, { 14827 get: function () { 14828 return S; 14829 }, 14830 set: function (t) { 14831 if (t < 0 || t > 100) throw new Error('Size must be between 0 and 100.'); 14832 (S = t), (this.hasBeenReset = !0); 14833 }, 14834 }), 14835 ), 14836 Object.defineProperty( 14837 o, 14838 'align', 14839 n({}, l, { 14840 get: function () { 14841 return L; 14842 }, 14843 set: function (t) { 14844 var e = i(t); 14845 if (!e) throw new SyntaxError('An invalid or illegal string was specified.'); 14846 (L = e), (this.hasBeenReset = !0); 14847 }, 14848 }), 14849 ), 14850 (o.displayState = void 0); 14851 } 14852 return ( 14853 (a.prototype.getCueAsHTML = function () { 14854 return self.WebVTT.convertCueToDOMTree(self, this.text); 14855 }), 14856 a 14857 ); 14858 })(), 14859 Qn = (function () { 14860 function t() {} 14861 return ( 14862 (t.prototype.decode = function (t, e) { 14863 if (!t) return ''; 14864 if ('string' != typeof t) throw new Error('Error - expected string data.'); 14865 return decodeURIComponent(encodeURIComponent(t)); 14866 }), 14867 t 14868 ); 14869 })(); 14870 function $n(t) { 14871 function e(t, e, r, i) { 14872 return 3600 * (0 | t) + 60 * (0 | e) + (0 | r) + parseFloat(i || 0); 14873 } 14874 var r = t.match(/^(?:(\d+):)?(\d{2}):(\d{2})(\.\d+)?/); 14875 return r ? (parseFloat(r[2]) > 59 ? e(r[2], r[3], 0, r[4]) : e(r[1], r[2], r[3], r[4])) : null; 14876 } 14877 var Jn = (function () { 14878 function t() { 14879 this.values = Object.create(null); 14880 } 14881 var e = t.prototype; 14882 return ( 14883 (e.set = function (t, e) { 14884 this.get(t) || '' === e || (this.values[t] = e); 14885 }), 14886 (e.get = function (t, e, r) { 14887 return r ? (this.has(t) ? this.values[t] : e[r]) : this.has(t) ? this.values[t] : e; 14888 }), 14889 (e.has = function (t) { 14890 return t in this.values; 14891 }), 14892 (e.alt = function (t, e, r) { 14893 for (var i = 0; i < r.length; ++i) 14894 if (e === r[i]) { 14895 this.set(t, e); 14896 break; 14897 } 14898 }), 14899 (e.integer = function (t, e) { 14900 /^-?\d+$/.test(e) && this.set(t, parseInt(e, 10)); 14901 }), 14902 (e.percent = function (t, e) { 14903 if (/^([\d]{1,3})(\.[\d]*)?%$/.test(e)) { 14904 var r = parseFloat(e); 14905 if (r >= 0 && r <= 100) return this.set(t, r), !0; 14906 } 14907 return !1; 14908 }), 14909 t 14910 ); 14911 })(); 14912 function Zn(t, e, r, i) { 14913 var n = i ? t.split(i) : [t]; 14914 for (var a in n) 14915 if ('string' == typeof n[a]) { 14916 var s = n[a].split(r); 14917 2 === s.length && e(s[0], s[1]); 14918 } 14919 } 14920 var ta = new zn(0, 0, ''), 14921 ea = 'middle' === ta.align ? 'middle' : 'center'; 14922 function ra(t, e, r) { 14923 var i = t; 14924 function n() { 14925 var e = $n(t); 14926 if (null === e) throw new Error('Malformed timestamp: ' + i); 14927 return (t = t.replace(/^[^\sa-zA-Z-]+/, '')), e; 14928 } 14929 function a() { 14930 t = t.replace(/^\s+/, ''); 14931 } 14932 if ((a(), (e.startTime = n()), a(), '--\x3e' !== t.slice(0, 3))) 14933 throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): " + i); 14934 (t = t.slice(3)), 14935 a(), 14936 (e.endTime = n()), 14937 a(), 14938 (function (t, e) { 14939 var i = new Jn(); 14940 Zn( 14941 t, 14942 function (t, e) { 14943 var n; 14944 switch (t) { 14945 case 'region': 14946 for (var a = r.length - 1; a >= 0; a--) 14947 if (r[a].id === e) { 14948 i.set(t, r[a].region); 14949 break; 14950 } 14951 break; 14952 case 'vertical': 14953 i.alt(t, e, ['rl', 'lr']); 14954 break; 14955 case 'line': 14956 (n = e.split(',')), 14957 i.integer(t, n[0]), 14958 i.percent(t, n[0]) && i.set('snapToLines', !1), 14959 i.alt(t, n[0], ['auto']), 14960 2 === n.length && i.alt('lineAlign', n[1], ['start', ea, 'end']); 14961 break; 14962 case 'position': 14963 (n = e.split(',')), 14964 i.percent(t, n[0]), 14965 2 === n.length && 14966 i.alt('positionAlign', n[1], ['start', ea, 'end', 'line-left', 'line-right', 'auto']); 14967 break; 14968 case 'size': 14969 i.percent(t, e); 14970 break; 14971 case 'align': 14972 i.alt(t, e, ['start', ea, 'end', 'left', 'right']); 14973 } 14974 }, 14975 /:/, 14976 /\s/, 14977 ), 14978 (e.region = i.get('region', null)), 14979 (e.vertical = i.get('vertical', '')); 14980 var n = i.get('line', 'auto'); 14981 'auto' === n && -1 === ta.line && (n = -1), 14982 (e.line = n), 14983 (e.lineAlign = i.get('lineAlign', 'start')), 14984 (e.snapToLines = i.get('snapToLines', !0)), 14985 (e.size = i.get('size', 100)), 14986 (e.align = i.get('align', ea)); 14987 var a = i.get('position', 'auto'); 14988 'auto' === a && 14989 50 === ta.position && 14990 (a = 'start' === e.align || 'left' === e.align ? 0 : 'end' === e.align || 'right' === e.align ? 100 : 50), 14991 (e.position = a); 14992 })(t, e); 14993 } 14994 function ia(t) { 14995 return t.replace(/<br(?: \/)?>/gi, '\n'); 14996 } 14997 var na = (function () { 14998 function t() { 14999 (this.state = 'INITIAL'), 15000 (this.buffer = ''), 15001 (this.decoder = new Qn()), 15002 (this.regionList = []), 15003 (this.cue = null),
15004 (this.oncue = void 0), 15005 (this.onparsingerror = void 0), 15006 (this.onflush = void 0); 15007 } 15008 var e = t.prototype; 15009 return ( 15010 (e.parse = function (t) { 15011 var e = this; 15012 function r() { 15013 var t = e.buffer, 15014 r = 0; 15015 for (t = ia(t); r < t.length && '\r' !== t[r] && '\n' !== t[r]; ) ++r; 15016 var i = t.slice(0, r); 15017 return '\r' === t[r] && ++r, '\n' === t[r] && ++r, (e.buffer = t.slice(r)), i; 15018 } 15019 t && (e.buffer += e.decoder.decode(t, { stream: !0 })); 15020 try { 15021 var i = ''; 15022 if ('INITIAL' === e.state) { 15023 if (!/\r\n|\n/.test(e.buffer)) return this; 15024 var n = (i = r()).match(/^()?WEBVTT([ \t].*)?$/); 15025 if (null == n || !n[0]) throw new Error('Malformed WebVTT signature.'); 15026 e.state = 'HEADER'; 15027 } 15028 for (var a = !1; e.buffer; ) { 15029 if (!/\r\n|\n/.test(e.buffer)) return this; 15030 switch ((a ? (a = !1) : (i = r()), e.state)) { 15031 case 'HEADER': 15032 /:/.test(i) ? Zn(i, function (t, e) {}, /:/) : i || (e.state = 'ID'); 15033 continue; 15034 case 'NOTE': 15035 i || (e.state = 'ID'); 15036 continue; 15037 case 'ID': 15038 if (/^NOTE($|[ \t])/.test(i)) { 15039 e.state = 'NOTE'; 15040 break; 15041 } 15042 if (!i) continue; 15043 if (((e.cue = new zn(0, 0, '')), (e.state = 'CUE'), -1 === i.indexOf('--\x3e'))) { 15044 e.cue.id = i; 15045 continue; 15046 } 15047 case 'CUE': 15048 if (!e.cue) { 15049 e.state = 'BADCUE'; 15050 continue; 15051 } 15052 try { 15053 ra(i, e.cue, e.regionList); 15054 } catch (t) { 15055 (e.cue = null), (e.state = 'BADCUE'); 15056 continue; 15057 } 15058 e.state = 'CUETEXT'; 15059 continue; 15060 case 'CUETEXT': 15061 var s = -1 !== i.indexOf('--\x3e'); 15062 if (!i || (s && (a = !0))) { 15063 e.oncue && e.cue && e.oncue(e.cue), (e.cue = null), (e.state = 'ID'); 15064 continue; 15065 } 15066 if (null === e.cue) continue; 15067 e.cue.text && (e.cue.text += '\n'), (e.cue.text += i); 15068 continue; 15069 case 'BADCUE': 15070 i || (e.state = 'ID'); 15071 } 15072 } 15073 } catch (t) { 15074 'CUETEXT' === e.state && e.cue && e.oncue && e.oncue(e.cue), 15075 (e.cue = null), 15076 (e.state = 'INITIAL' === e.state ? 'BADWEBVTT' : 'BADCUE'); 15077 } 15078 return this; 15079 }), 15080 (e.flush = function () { 15081 var t = this; 15082 try { 15083 if ( 15084 ((t.cue || 'HEADER' === t.state) && ((t.buffer += '\n\n'), t.parse()), 15085 'INITIAL' === t.state || 'BADWEBVTT' === t.state) 15086 ) 15087 throw new Error('Malformed WebVTT signature.'); 15088 } catch (e) { 15089 t.onparsingerror && t.onparsingerror(e); 15090 } 15091 return t.onflush && t.onflush(), this; 15092 }), 15093 t 15094 ); 15095 })(), 15096 aa = /\r\n|\n\r|\n|\r/g, 15097 sa = function (t, e, r) { 15098 return void 0 === r && (r = 0), t.slice(r, r + e.length) === e; 15099 }, 15100 oa = function (t) { 15101 for (var e = 5381, r = t.length; r; ) e = (33 * e) ^ t.charCodeAt(--r); 15102 return (e >>> 0).toString(); 15103 }; 15104 function la(t, e, r) { 15105 return oa(t.toString()) + oa(e.toString()) + oa(r); 15106 } 15107 function ua(t, e, r, i, n, a, s) { 15108 var o, 15109 l, 15110 u, 15111 h = new na(), 15112 d = pt(new Uint8Array(t)).trim().replace(aa, '\n').split('\n'), 15113 c = [], 15114 f = e ? ((o = e.baseTime), void 0 === (l = e.timescale) && (l = 1), Ui(o, 9e4, 1 / l)) : 0, 15115 g = '00:00.000', 15116 v = 0, 15117 m = 0, 15118 p = !0; 15119 (h.oncue = function (t) { 15120 var a = r[i], 15121 s = r.ccOffset, 15122 o = (v - f) / 9e4; 15123 if ( 15124 (null != a && 15125 a.new && 15126 (void 0 !== m 15127 ? (s = r.ccOffset = a.start) 15128 : (function (t, e, r) { 15129 var i = t[e], 15130 n = t[i.prevCC]; 15131 if (!n || (!n.new && i.new)) 15132 return (t.ccOffset = t.presentationOffset = i.start), void (i.new = !1); 15133 for (; null != (a = n) && a.new; ) { 15134 var a; 15135 (t.ccOffset += i.start - n.start), (i.new = !1), (n = t[(i = n).prevCC]); 15136 } 15137 t.presentationOffset = r; 15138 })(r, i, o)), 15139 o) 15140 ) { 15141 if (!e) return void (u = new Error('Missing initPTS for VTT MPEGTS')); 15142 s = o - r.presentationOffset; 15143 } 15144 var l = t.endTime - t.startTime, 15145 h = Vi(9e4 * (t.startTime + s - m), 9e4 * n) / 9e4; 15146 (t.startTime = Math.max(h, 0)), (t.endTime = Math.max(h + l, 0)); 15147 var d = t.text.trim(); 15148 (t.text = decodeURIComponent(encodeURIComponent(d))), 15149 t.id || (t.id = la(t.startTime, t.endTime, d)), 15150 t.endTime > 0 && c.push(t); 15151 }), 15152 (h.onparsingerror = function (t) { 15153 u = t; 15154 }), 15155 (h.onflush = function () { 15156 u ? s(u) : a(c); 15157 }), 15158 d.forEach(function (t) { 15159 if (p) { 15160 if (sa(t, 'X-TIMESTAMP-MAP=')) { 15161 (p = !1), 15162 t 15163 .slice(16) 15164 .split(',') 15165 .forEach(function (t) { 15166 sa(t, 'LOCAL:') ? (g = t.slice(6)) : sa(t, 'MPEGTS:') && (v = parseInt(t.slice(7))); 15167 }); 15168 try { 15169 m = 15170 (function (t) { 15171 var e = parseInt(t.slice(-3)), 15172 r = parseInt(t.slice(-6, -4)), 15173 i = parseInt(t.slice(-9, -7)), 15174 n = t.length > 9 ? parseInt(t.substring(0, t.indexOf(':'))) : 0; 15175 if (!(E(e) && E(r) && E(i) && E(n))) throw Error('Malformed X-TIMESTAMP-MAP: Local:' + t); 15176 return (e += 1e3 * r), (e += 6e4 * i) + 36e5 * n; 15177 })(g) / 1e3; 15178 } catch (t) { 15179 u = t; 15180 } 15181 return; 15182 } 15183 '' === t && (p = !1); 15184 } 15185 h.parse(t + '\n'); 15186 }), 15187 h.flush(); 15188 } 15189 var ha = 'stpp.ttml.im1t', 15190 da = /^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/, 15191 ca = /^(\d*(?:\.\d*)?)(h|m|s|ms|f|t)$/, 15192 fa = { left: 'start', center: 'center', right: 'end', start: 'start', end: 'end' }; 15193 function ga(t, e, r, i) { 15194 var n = It(new Uint8Array(t), ['mdat']); 15195 if (0 !== n.length) { 15196 var a, 15197 s, 15198 l, 15199 u, 15200 h = n.map(function (t) { 15201 return pt(t); 15202 }), 15203 d = 15204 ((a = e.baseTime), 15205 (s = 1), 15206 void 0 === (l = e.timescale) && (l = 1), 15207 void 0 === u && (u = !1), 15208 Ui(a, s, 1 / l, u)); 15209 try { 15210 h.forEach(function (t) { 15211 return r( 15212 (function (t, e) { 15213 var r = new DOMParser().parseFromString(t, 'text/xml').getElementsByTagName('tt')[0]; 15214 if (!r) throw new Error('Invalid ttml'); 15215 var i = { frameRate: 30, subFrameRate: 1, frameRateMultiplier: 0, tickRate: 0 }, 15216 n = Object.keys(i).reduce(function (t, e) { 15217 return (t[e] = r.getAttribute('ttp:' + e) || i[e]), t;
15218 }, {}), 15219 a = 'preserve' !== r.getAttribute('xml:space'), 15220 s = ma(va(r, 'styling', 'style')), 15221 l = ma(va(r, 'layout', 'region')), 15222 u = va(r, 'body', '[begin]'); 15223 return [].map 15224 .call(u, function (t) { 15225 var r = pa(t, a); 15226 if (!r || !t.hasAttribute('begin')) return null; 15227 var i = Ea(t.getAttribute('begin'), n), 15228 u = Ea(t.getAttribute('dur'), n), 15229 h = Ea(t.getAttribute('end'), n); 15230 if (null === i) throw Ta(t); 15231 if (null === h) { 15232 if (null === u) throw Ta(t); 15233 h = i + u; 15234 } 15235 var d = new zn(i - e, h - e, r); 15236 d.id = la(d.startTime, d.endTime, d.text); 15237 var c = (function (t, e, r) { 15238 var i = 'http://www.w3.org/ns/ttml#styling', 15239 n = null, 15240 a = ['displayAlign', 'textAlign', 'color', 'backgroundColor', 'fontSize', 'fontFamily'], 15241 s = null != t && t.hasAttribute('style') ? t.getAttribute('style') : null; 15242 return ( 15243 s && r.hasOwnProperty(s) && (n = r[s]), 15244 a.reduce(function (r, a) { 15245 var s = ya(e, i, a) || ya(t, i, a) || ya(n, i, a); 15246 return s && (r[a] = s), r; 15247 }, {}) 15248 ); 15249 })(l[t.getAttribute('region')], s[t.getAttribute('style')], s), 15250 f = c.textAlign; 15251 if (f) { 15252 var g = fa[f]; 15253 g && (d.lineAlign = g), (d.align = f); 15254 } 15255 return o(d, c), d; 15256 }) 15257 .filter(function (t) { 15258 return null !== t; 15259 }); 15260 })(t, d), 15261 ); 15262 }); 15263 } catch (t) { 15264 i(t); 15265 } 15266 } else i(new Error('Could not parse IMSC1 mdat')); 15267 } 15268 function va(t, e, r) { 15269 var i = t.getElementsByTagName(e)[0]; 15270 return i ? [].slice.call(i.querySelectorAll(r)) : []; 15271 } 15272 function ma(t) { 15273 return t.reduce(function (t, e) { 15274 var r = e.getAttribute('xml:id'); 15275 return r && (t[r] = e), t; 15276 }, {}); 15277 } 15278 function pa(t, e) { 15279 return [].slice.call(t.childNodes).reduce(function (t, r, i) { 15280 var n; 15281 return 'br' === r.nodeName && i 15282 ? t + '\n' 15283 : null != (n = r.childNodes) && n.length 15284 ? pa(r, e) 15285 : e 15286 ? t + r.textContent.trim().replace(/\s+/g, ' ') 15287 : t + r.textContent; 15288 }, ''); 15289 } 15290 function ya(t, e, r) { 15291 return t && t.hasAttributeNS(e, r) ? t.getAttributeNS(e, r) : null; 15292 } 15293 function Ta(t) { 15294 return new Error('Could not parse ttml timestamp ' + t); 15295 } 15296 function Ea(t, e) { 15297 if (!t) return null; 15298 var r = $n(t); 15299 return ( 15300 null === r && 15301 (da.test(t) 15302 ? (r = (function (t, e) { 15303 var r = da.exec(t), 15304 i = (0 | r[4]) + (0 | r[5]) / e.subFrameRate; 15305 return 3600 * (0 | r[1]) + 60 * (0 | r[2]) + (0 | r[3]) + i / e.frameRate; 15306 })(t, e)) 15307 : ca.test(t) && 15308 (r = (function (t, e) { 15309 var r = ca.exec(t), 15310 i = Number(r[1]); 15311 switch (r[2]) { 15312 case 'h': 15313 return 3600 * i; 15314 case 'm': 15315 return 60 * i; 15316 case 'ms': 15317 return 1e3 * i; 15318 case 'f': 15319 return i / e.frameRate; 15320 case 't': 15321 return i / e.tickRate; 15322 } 15323 return i; 15324 })(t, e))), 15325 r 15326 ); 15327 } 15328 var Sa = (function () { 15329 function t(t) { 15330 if ( 15331 ((this.hls = void 0), 15332 (this.media = null),
15333 (this.config = void 0), 15334 (this.enabled = !0), 15335 (this.Cues = void 0), 15336 (this.textTracks = []), 15337 (this.tracks = []), 15338 (this.initPTS = []), 15339 (this.unparsedVttFrags = []), 15340 (this.captionsTracks = {}), 15341 (this.nonNativeCaptionsTracks = {}), 15342 (this.cea608Parser1 = void 0), 15343 (this.cea608Parser2 = void 0), 15344 (this.lastSn = -1), 15345 (this.lastPartIndex = -1), 15346 (this.prevCC = -1), 15347 (this.vttCCs = { ccOffset: 0, presentationOffset: 0, 0: { start: 0, prevCC: -1, new: !0 } }), 15348 (this.captionsProperties = void 0), 15349 (this.hls = t), 15350 (this.config = t.config), 15351 (this.Cues = t.config.cueHandler), 15352 (this.captionsProperties = { 15353 textTrack1: { 15354 label: this.config.captionsTextTrack1Label, 15355 languageCode: this.config.captionsTextTrack1LanguageCode, 15356 }, 15357 textTrack2: { 15358 label: this.config.captionsTextTrack2Label, 15359 languageCode: this.config.captionsTextTrack2LanguageCode, 15360 }, 15361 textTrack3: { 15362 label: this.config.captionsTextTrack3Label, 15363 languageCode: this.config.captionsTextTrack3LanguageCode, 15364 }, 15365 textTrack4: { 15366 label: this.config.captionsTextTrack4Label, 15367 languageCode: this.config.captionsTextTrack4LanguageCode, 15368 }, 15369 }), 15370 this.config.enableCEA708Captions) 15371 ) { 15372 var e = new Xn(this, 'textTrack1'), 15373 r = new Xn(this, 'textTrack2'), 15374 i = new Xn(this, 'textTrack3'), 15375 n = new Xn(this, 'textTrack4'); 15376 (this.cea608Parser1 = new Wn(1, e, r)), (this.cea608Parser2 = new Wn(3, i, n)); 15377 } 15378 t.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 15379 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 15380 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 15381 t.on(S.MANIFEST_LOADED, this.onManifestLoaded, this), 15382 t.on(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), 15383 t.on(S.FRAG_LOADING, this.onFragLoading, this), 15384 t.on(S.FRAG_LOADED, this.onFragLoaded, this), 15385 t.on(S.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this), 15386 t.on(S.FRAG_DECRYPTED, this.onFragDecrypted, this), 15387 t.on(S.INIT_PTS_FOUND, this.onInitPtsFound, this), 15388 t.on(S.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this), 15389 t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this); 15390 } 15391 var e = t.prototype; 15392 return ( 15393 (e.destroy = function () { 15394 var t = this.hls; 15395 t.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 15396 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 15397 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 15398 t.off(S.MANIFEST_LOADED, this.onManifestLoaded, this), 15399 t.off(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), 15400 t.off(S.FRAG_LOADING, this.onFragLoading, this), 15401 t.off(S.FRAG_LOADED, this.onFragLoaded, this), 15402 t.off(S.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this), 15403 t.off(S.FRAG_DECRYPTED, this.onFragDecrypted, this), 15404 t.off(S.INIT_PTS_FOUND, this.onInitPtsFound, this), 15405 t.off(S.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this), 15406 t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 15407 (this.hls = this.config = this.cea608Parser1 = this.cea608Parser2 = null); 15408 }), 15409 (e.addCues = function (t, e, r, i, n) { 15410 for (var a, s, o, l, u = !1, h = n.length; h--; ) { 15411 var d = n[h], 15412 c = ((a = d[0]), (s = d[1]), (o = e), (l = r), Math.min(s, l) - Math.max(a, o)); 15413 if (c >= 0 && ((d[0] = Math.min(d[0], e)), (d[1] = Math.max(d[1], r)), (u = !0), c / (r - e) > 0.5)) 15414 return; 15415 } 15416 if ((u || n.push([e, r]), this.config.renderTextTracksNatively)) { 15417 var f = this.captionsTracks[t]; 15418 this.Cues.newCue(f, e, r, i); 15419 } else { 15420 var g = this.Cues.newCue(null, e, r, i); 15421 this.hls.trigger(S.CUES_PARSED, { type: 'captions', cues: g, track: t }); 15422 } 15423 }), 15424 (e.onInitPtsFound = function (t, e) { 15425 var r = this, 15426 i = e.frag, 15427 n = e.id, 15428 a = e.initPTS, 15429 s = e.timescale, 15430 o = this.unparsedVttFrags; 15431 'main' === n && (this.initPTS[i.cc] = { baseTime: a, timescale: s }), 15432 o.length && 15433 ((this.unparsedVttFrags = []), 15434 o.forEach(function (t) { 15435 r.onFragLoaded(S.FRAG_LOADED, t); 15436 })); 15437 }), 15438 (e.getExistingTrack = function (t) { 15439 var e = this.media; 15440 if (e) 15441 for (var r = 0; r < e.textTracks.length; r++) { 15442 var i = e.textTracks[r]; 15443 if (i[t]) return i; 15444 } 15445 return null; 15446 }), 15447 (e.createCaptionsTrack = function (t) { 15448 this.config.renderTextTracksNatively ? this.createNativeTrack(t) : this.createNonNativeTrack(t); 15449 }), 15450 (e.createNativeTrack = function (t) { 15451 if (!this.captionsTracks[t]) { 15452 var e = this.captionsProperties, 15453 r = this.captionsTracks, 15454 i = this.media, 15455 n = e[t], 15456 a = n.label, 15457 s = n.languageCode, 15458 o = this.getExistingTrack(t); 15459 if (o) (r[t] = o), Le(r[t]), Ee(r[t], i); 15460 else { 15461 var l = this.createTextTrack('captions', a, s); 15462 l && ((l[t] = !0), (r[t] = l)); 15463 } 15464 } 15465 }), 15466 (e.createNonNativeTrack = function (t) { 15467 if (!this.nonNativeCaptionsTracks[t]) { 15468 var e = this.captionsProperties[t]; 15469 if (e) { 15470 var r = { 15471 _id: t, 15472 label: e.label, 15473 kind: 'captions', 15474 default: !!e.media && !!e.media.default, 15475 closedCaptions: e.media, 15476 }; 15477 (this.nonNativeCaptionsTracks[t] = r), 15478 this.hls.trigger(S.NON_NATIVE_TEXT_TRACKS_FOUND, { tracks: [r] }); 15479 } 15480 } 15481 }), 15482 (e.createTextTrack = function (t, e, r) { 15483 var i = this.media; 15484 if (i) return i.addTextTrack(t, e, r); 15485 }), 15486 (e.onMediaAttaching = function (t, e) { 15487 (this.media = e.media), this._cleanTracks(); 15488 }), 15489 (e.onMediaDetaching = function () { 15490 var t = this.captionsTracks; 15491 Object.keys(t).forEach(function (e) { 15492 Le(t[e]), delete t[e]; 15493 }), 15494 (this.nonNativeCaptionsTracks = {}); 15495 }), 15496 (e.onManifestLoading = function () { 15497 (this.lastSn = -1), 15498 (this.lastPartIndex = -1), 15499 (this.prevCC = -1), 15500 (this.vttCCs = { ccOffset: 0, presentationOffset: 0, 0: { start: 0, prevCC: -1, new: !0 } }), 15501 this._cleanTracks(), 15502 (this.tracks = []), 15503 (this.captionsTracks = {}), 15504 (this.nonNativeCaptionsTracks = {}), 15505 (this.textTracks = []), 15506 (this.unparsedVttFrags = []), 15507 (this.initPTS = []), 15508 this.cea608Parser1 && this.cea608Parser2 && (this.cea608Parser1.reset(), this.cea608Parser2.reset()); 15509 }), 15510 (e._cleanTracks = function () { 15511 var t = this.media; 15512 if (t) { 15513 var e = t.textTracks; 15514 if (e) for (var r = 0; r < e.length; r++) Le(e[r]); 15515 } 15516 }),
15517 (e.onSubtitleTracksUpdated = function (t, e) { 15518 var r = this, 15519 i = e.subtitleTracks || [], 15520 n = i.some(function (t) { 15521 return t.textCodec === ha; 15522 }); 15523 if (this.config.enableWebVTT || (n && this.config.enableIMSC1)) { 15524 if (Tn(this.tracks, i)) return void (this.tracks = i); 15525 if (((this.textTracks = []), (this.tracks = i), this.config.renderTextTracksNatively)) { 15526 var a = this.media ? this.media.textTracks : null; 15527 this.tracks.forEach(function (t, e) { 15528 var i; 15529 if (a && e < a.length) { 15530 for (var n = null, s = 0; s < a.length; s++) 15531 if (La(a[s], t)) { 15532 n = a[s]; 15533 break; 15534 } 15535 n && (i = n); 15536 } 15537 if (i) Le(i); 15538 else { 15539 var o = r._captionsOrSubtitlesFromCharacteristics(t); 15540 (i = r.createTextTrack(o, t.name, t.lang)) && (i.mode = 'disabled'); 15541 } 15542 i && ((i.groupId = t.groupId), r.textTracks.push(i)); 15543 }); 15544 } else if (this.tracks.length) { 15545 var s = this.tracks.map(function (t) { 15546 return { label: t.name, kind: t.type.toLowerCase(), default: t.default, subtitleTrack: t }; 15547 }); 15548 this.hls.trigger(S.NON_NATIVE_TEXT_TRACKS_FOUND, { tracks: s }); 15549 } 15550 } 15551 }), 15552 (e._captionsOrSubtitlesFromCharacteristics = function (t) { 15553 if (t.attrs.CHARACTERISTICS) { 15554 var e = /transcribes-spoken-dialog/gi.test(t.attrs.CHARACTERISTICS), 15555 r = /describes-music-and-sound/gi.test(t.attrs.CHARACTERISTICS); 15556 if (e && r) return 'captions'; 15557 } 15558 return 'subtitles'; 15559 }), 15560 (e.onManifestLoaded = function (t, e) { 15561 var r = this; 15562 this.config.enableCEA708Captions && 15563 e.captions && 15564 e.captions.forEach(function (t) { 15565 var e = /(?:CC|SERVICE)([1-4])/.exec(t.instreamId); 15566 if (e) { 15567 var i = 'textTrack' + e[1], 15568 n = r.captionsProperties[i]; 15569 n && ((n.label = t.name), t.lang && (n.languageCode = t.lang), (n.media = t)); 15570 } 15571 }); 15572 }), 15573 (e.closedCaptionsForLevel = function (t) { 15574 var e = this.hls.levels[t.level]; 15575 return null == e ? void 0 : e.attrs['CLOSED-CAPTIONS']; 15576 }), 15577 (e.onFragLoading = function (t, e) { 15578 var r = this.cea608Parser1, 15579 i = this.cea608Parser2, 15580 n = this.lastSn, 15581 a = this.lastPartIndex; 15582 if (this.enabled && r && i && e.frag.type === ge) { 15583 var s, 15584 o, 15585 l = e.frag.sn, 15586 u = null != (s = null == e || null == (o = e.part) ? void 0 : o.index) ? s : -1; 15587 l === n + 1 || (l === n && u === a + 1) || (r.reset(), i.reset()), 15588 (this.lastSn = l), 15589 (this.lastPartIndex = u); 15590 } 15591 }), 15592 (e.onFragLoaded = function (t, e) { 15593 var r = e.frag, 15594 i = e.payload; 15595 if (r.type === me) 15596 if (i.byteLength) { 15597 var n = r.decryptdata, 15598 a = 'stats' in e; 15599 if (null == n || !n.encrypted || a) { 15600 var s = this.tracks[r.level], 15601 o = this.vttCCs; 15602 o[r.cc] || ((o[r.cc] = { start: r.start, prevCC: this.prevCC, new: !0 }), (this.prevCC = r.cc)), 15603 s && s.textCodec === ha ? this._parseIMSC1(r, i) : this._parseVTTs(e); 15604 } 15605 } else 15606 this.hls.trigger(S.SUBTITLE_FRAG_PROCESSED, { 15607 success: !1, 15608 frag: r,
15609 error: new Error('Empty subtitle payload'), 15610 }); 15611 }), 15612 (e._parseIMSC1 = function (t, e) { 15613 var r = this, 15614 i = this.hls; 15615 ga( 15616 e, 15617 this.initPTS[t.cc], 15618 function (e) { 15619 r._appendCues(e, t.level), i.trigger(S.SUBTITLE_FRAG_PROCESSED, { success: !0, frag: t }); 15620 }, 15621 function (e) { 15622 w.log('Failed to parse IMSC1: ' + e), 15623 i.trigger(S.SUBTITLE_FRAG_PROCESSED, { success: !1, frag: t, error: e }); 15624 }, 15625 ); 15626 }), 15627 (e._parseVTTs = function (t) { 15628 var e, 15629 r = this, 15630 i = t.frag, 15631 n = t.payload, 15632 a = this.initPTS, 15633 s = this.unparsedVttFrags, 15634 o = a.length - 1; 15635 if (a[i.cc] || -1 !== o) { 15636 var l = this.hls; 15637 ua( 15638 null != (e = i.initSegment) && e.data ? xt(i.initSegment.data, new Uint8Array(n)) : n, 15639 this.initPTS[i.cc], 15640 this.vttCCs, 15641 i.cc, 15642 i.start, 15643 function (t) { 15644 r._appendCues(t, i.level), l.trigger(S.SUBTITLE_FRAG_PROCESSED, { success: !0, frag: i }); 15645 }, 15646 function (e) { 15647 var a = 'Missing initPTS for VTT MPEGTS' === e.message; 15648 a ? s.push(t) : r._fallbackToIMSC1(i, n), 15649 w.log('Failed to parse VTT cue: ' + e), 15650 (a && o > i.cc) || l.trigger(S.SUBTITLE_FRAG_PROCESSED, { success: !1, frag: i, error: e }); 15651 }, 15652 ); 15653 } else s.push(t); 15654 }), 15655 (e._fallbackToIMSC1 = function (t, e) { 15656 var r = this, 15657 i = this.tracks[t.level]; 15658 i.textCodec || 15659 ga( 15660 e, 15661 this.initPTS[t.cc], 15662 function () { 15663 (i.textCodec = ha), r._parseIMSC1(t, e); 15664 }, 15665 function () { 15666 i.textCodec = 'wvtt'; 15667 }, 15668 ); 15669 }), 15670 (e._appendCues = function (t, e) { 15671 var r = this.hls; 15672 if (this.config.renderTextTracksNatively) { 15673 var i = this.textTracks[e]; 15674 if (!i || 'disabled' === i.mode) return; 15675 t.forEach(function (t) { 15676 return Se(i, t); 15677 }); 15678 } else { 15679 var n = this.tracks[e]; 15680 if (!n) return; 15681 var a = n.default ? 'default' : 'subtitles' + e; 15682 r.trigger(S.CUES_PARSED, { type: 'subtitles', cues: t, track: a }); 15683 } 15684 }), 15685 (e.onFragDecrypted = function (t, e) { 15686 e.frag.type === me && this.onFragLoaded(S.FRAG_LOADED, e); 15687 }), 15688 (e.onSubtitleTracksCleared = function () { 15689 (this.tracks = []), (this.captionsTracks = {}); 15690 }), 15691 (e.onFragParsingUserdata = function (t, e) { 15692 var r = this.cea608Parser1, 15693 i = this.cea608Parser2; 15694 if (this.enabled && r && i) { 15695 var n = e.frag, 15696 a = e.samples; 15697 if (n.type !== ge || 'NONE' !== this.closedCaptionsForLevel(n)) 15698 for (var s = 0; s < a.length; s++) { 15699 var o = a[s].bytes; 15700 if (o) { 15701 var l = this.extractCea608Data(o); 15702 r.addData(a[s].pts, l[0]), i.addData(a[s].pts, l[1]); 15703 } 15704 } 15705 } 15706 }), 15707 (e.onBufferFlushing = function (t, e) { 15708 var r = e.startOffset, 15709 i = e.endOffset, 15710 n = e.endOffsetSubtitles, 15711 a = e.type, 15712 s = this.media; 15713 if (s && !(s.currentTime < i)) { 15714 if (!a || 'video' === a) { 15715 var o = this.captionsTracks; 15716 Object.keys(o).forEach(function (t) { 15717 return Re(o[t], r, i); 15718 }); 15719 } 15720 if (this.config.renderTextTracksNatively && 0 === r && void 0 !== n) { 15721 var l = this.textTracks; 15722 Object.keys(l).forEach(function (t) { 15723 return Re(l[t], r, n); 15724 }); 15725 } 15726 } 15727 }), 15728 (e.extractCea608Data = function (t) { 15729 for (var e = [[], []], r = 31 & t[0], i = 2, n = 0; n < r; n++) { 15730 var a = t[i++], 15731 s = 127 & t[i++], 15732 o = 127 & t[i++]; 15733 if ((0 !== s || 0 !== o) && 0 != (4 & a)) { 15734 var l = 3 & a; 15735 (0 !== l && 1 !== l) || (e[l].push(s), e[l].push(o)); 15736 } 15737 } 15738 return e; 15739 }), 15740 t 15741 ); 15742 })(); 15743 function La(t, e) {
15744 return !!t && t.label === e.name && !(t.textTrack1 || t.textTrack2); 15745 } 15746 var Ra = (function () { 15747 function t(t) { 15748 (this.hls = void 0), 15749 (this.autoLevelCapping = void 0), 15750 (this.firstLevel = void 0), 15751 (this.media = void 0), 15752 (this.restrictedLevels = void 0), 15753 (this.timer = void 0), 15754 (this.clientRect = void 0), 15755 (this.streamController = void 0), 15756 (this.hls = t), 15757 (this.autoLevelCapping = Number.POSITIVE_INFINITY), 15758 (this.firstLevel = -1), 15759 (this.media = null), 15760 (this.restrictedLevels = []), 15761 (this.timer = void 0), 15762 (this.clientRect = null), 15763 this.registerListeners(); 15764 } 15765 var e = t.prototype; 15766 return ( 15767 (e.setStreamController = function (t) { 15768 this.streamController = t; 15769 }), 15770 (e.destroy = function () { 15771 this.unregisterListener(), 15772 this.hls.config.capLevelToPlayerSize && this.stopCapping(), 15773 (this.media = null), 15774 (this.clientRect = null), 15775 (this.hls = this.streamController = null); 15776 }), 15777 (e.registerListeners = function () { 15778 var t = this.hls; 15779 t.on(S.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this), 15780 t.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 15781 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 15782 t.on(S.BUFFER_CODECS, this.onBufferCodecs, this), 15783 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this); 15784 }), 15785 (e.unregisterListener = function () { 15786 var t = this.hls; 15787 t.off(S.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this), 15788 t.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 15789 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 15790 t.off(S.BUFFER_CODECS, this.onBufferCodecs, this), 15791 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this); 15792 }), 15793 (e.onFpsDropLevelCapping = function (t, e) { 15794 var r = this.hls.levels[e.droppedLevel]; 15795 this.isLevelAllowed(r) && 15796 this.restrictedLevels.push({ bitrate: r.bitrate, height: r.height, width: r.width }); 15797 }), 15798 (e.onMediaAttaching = function (t, e) { 15799 (this.media = e.media instanceof HTMLVideoElement ? e.media : null), (this.clientRect = null); 15800 }), 15801 (e.onManifestParsed = function (t, e) { 15802 var r = this.hls; 15803 (this.restrictedLevels = []), 15804 (this.firstLevel = e.firstLevel), 15805 r.config.capLevelToPlayerSize && e.video && this.startCapping(); 15806 }), 15807 (e.onBufferCodecs = function (t, e) { 15808 this.hls.config.capLevelToPlayerSize && e.video && this.startCapping(); 15809 }), 15810 (e.onMediaDetaching = function () { 15811 this.stopCapping(); 15812 }), 15813 (e.detectPlayerSize = function () { 15814 if (this.media && this.mediaHeight > 0 && this.mediaWidth > 0) { 15815 var t = this.hls.levels; 15816 if (t.length) { 15817 var e = this.hls; 15818 (e.autoLevelCapping = this.getMaxLevel(t.length - 1)), 15819 e.autoLevelCapping > this.autoLevelCapping && 15820 this.streamController && 15821 this.streamController.nextLevelSwitch(), 15822 (this.autoLevelCapping = e.autoLevelCapping); 15823 } 15824 } 15825 }), 15826 (e.getMaxLevel = function (e) { 15827 var r = this, 15828 i = this.hls.levels; 15829 if (!i.length) return -1; 15830 var n = i.filter(function (t, i) { 15831 return r.isLevelAllowed(t) && i <= e; 15832 }); 15833 return (this.clientRect = null), t.getMaxLevelByMediaSize(n, this.mediaWidth, this.mediaHeight); 15834 }), 15835 (e.startCapping = function () { 15836 this.timer || 15837 ((this.autoLevelCapping = Number.POSITIVE_INFINITY), 15838 (this.hls.firstLevel = this.getMaxLevel(this.firstLevel)), 15839 self.clearInterval(this.timer), 15840 (this.timer = self.setInterval(this.detectPlayerSize.bind(this), 1e3)), 15841 this.detectPlayerSize()); 15842 }), 15843 (e.stopCapping = function () { 15844 (this.restrictedLevels = []), 15845 (this.firstLevel = -1), 15846 (this.autoLevelCapping = Number.POSITIVE_INFINITY), 15847 this.timer && (self.clearInterval(this.timer), (this.timer = void 0)); 15848 }), 15849 (e.getDimensions = function () { 15850 if (this.clientRect) return this.clientRect; 15851 var t = this.media, 15852 e = { width: 0, height: 0 }; 15853 if (t) { 15854 var r = t.getBoundingClientRect(); 15855 (e.width = r.width), 15856 (e.height = r.height),
15857 e.width || 15858 e.height || 15859 ((e.width = r.right - r.left || t.width || 0), (e.height = r.bottom - r.top || t.height || 0)); 15860 } 15861 return (this.clientRect = e), e; 15862 }), 15863 (e.isLevelAllowed = function (t) { 15864 return !this.restrictedLevels.some(function (e) { 15865 return t.bitrate === e.bitrate && t.width === e.width && t.height === e.height; 15866 }); 15867 }), 15868 (t.getMaxLevelByMediaSize = function (t, e, r) { 15869 if (null == t || !t.length) return -1; 15870 for (var i, n, a = t.length - 1, s = 0; s < t.length; s += 1) { 15871 var o = t[s]; 15872 if ( 15873 (o.width >= e || o.height >= r) && 15874 ((i = o), !(n = t[s + 1]) || i.width !== n.width || i.height !== n.height) 15875 ) { 15876 a = s; 15877 break; 15878 } 15879 } 15880 return a; 15881 }), 15882 a(t, [ 15883 { 15884 key: 'mediaWidth', 15885 get: function () { 15886 return this.getDimensions().width * this.contentScaleFactor; 15887 }, 15888 }, 15889 { 15890 key: 'mediaHeight', 15891 get: function () { 15892 return this.getDimensions().height * this.contentScaleFactor; 15893 }, 15894 }, 15895 { 15896 key: 'contentScaleFactor', 15897 get: function () { 15898 var t = 1; 15899 if (!this.hls.config.ignoreDevicePixelRatio) 15900 try { 15901 t = self.devicePixelRatio; 15902 } catch (t) {} 15903 return t; 15904 }, 15905 }, 15906 ]), 15907 t 15908 ); 15909 })(), 15910 Aa = (function () { 15911 function t(t) { 15912 (this.hls = void 0), 15913 (this.isVideoPlaybackQualityAvailable = !1), 15914 (this.timer = void 0), 15915 (this.media = null), 15916 (this.lastTime = void 0), 15917 (this.lastDroppedFrames = 0), 15918 (this.lastDecodedFrames = 0), 15919 (this.streamController = void 0), 15920 (this.hls = t), 15921 this.registerListeners(); 15922 } 15923 var e = t.prototype; 15924 return ( 15925 (e.setStreamController = function (t) { 15926 this.streamController = t; 15927 }), 15928 (e.registerListeners = function () { 15929 this.hls.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this); 15930 }), 15931 (e.unregisterListeners = function () { 15932 this.hls.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this); 15933 }), 15934 (e.destroy = function () { 15935 this.timer && clearInterval(this.timer), 15936 this.unregisterListeners(), 15937 (this.isVideoPlaybackQualityAvailable = !1), 15938 (this.media = null); 15939 }), 15940 (e.onMediaAttaching = function (t, e) { 15941 var r = this.hls.config; 15942 if (r.capLevelOnFPSDrop) { 15943 var i = e.media instanceof self.HTMLVideoElement ? e.media : null; 15944 (this.media = i), 15945 i && 'function' == typeof i.getVideoPlaybackQuality && (this.isVideoPlaybackQualityAvailable = !0), 15946 self.clearInterval(this.timer), 15947 (this.timer = self.setInterval(this.checkFPSInterval.bind(this), r.fpsDroppedMonitoringPeriod)); 15948 } 15949 }), 15950 (e.checkFPS = function (t, e, r) { 15951 var i = performance.now(); 15952 if (e) { 15953 if (this.lastTime) { 15954 var n = i - this.lastTime, 15955 a = r - this.lastDroppedFrames, 15956 s = e - this.lastDecodedFrames, 15957 o = (1e3 * a) / n, 15958 l = this.hls; 15959 if ( 15960 (l.trigger(S.FPS_DROP, { currentDropped: a, currentDecoded: s, totalDroppedFrames: r }), 15961 o > 0 && a > l.config.fpsDroppedMonitoringThreshold * s) 15962 ) { 15963 var u = l.currentLevel; 15964 w.warn('drop FPS ratio greater than max allowed value for currentLevel: ' + u), 15965 u > 0 && 15966 (-1 === l.autoLevelCapping || l.autoLevelCapping >= u) && 15967 ((u -= 1), 15968 l.trigger(S.FPS_DROP_LEVEL_CAPPING, { level: u, droppedLevel: l.currentLevel }), 15969 (l.autoLevelCapping = u), 15970 this.streamController.nextLevelSwitch()); 15971 } 15972 } 15973 (this.lastTime = i), (this.lastDroppedFrames = r), (this.lastDecodedFrames = e); 15974 } 15975 }), 15976 (e.checkFPSInterval = function () { 15977 var t = this.media; 15978 if (t) 15979 if (this.isVideoPlaybackQualityAvailable) { 15980 var e = t.getVideoPlaybackQuality(); 15981 this.checkFPS(t, e.totalVideoFrames, e.droppedVideoFrames); 15982 } else this.checkFPS(t, t.webkitDecodedFrameCount, t.webkitDroppedFrameCount); 15983 }), 15984 t 15985 ); 15986 })(), 15987 ka = '[eme]', 15988 ba = (function () { 15989 function t(e) { 15990 (this.hls = void 0), 15991 (this.config = void 0), 15992 (this.media = null),
15993 (this.keyFormatPromise = null), 15994 (this.keySystemAccessPromises = {}), 15995 (this._requestLicenseFailureCount = 0), 15996 (this.mediaKeySessions = []), 15997 (this.keyIdToKeySessionPromise = {}), 15998 (this.setMediaKeysQueue = t.CDMCleanupPromise ? [t.CDMCleanupPromise] : []), 15999 (this.onMediaEncrypted = this._onMediaEncrypted.bind(this)), 16000 (this.onWaitingForKey = this._onWaitingForKey.bind(this)), 16001 (this.debug = w.debug.bind(w, ka)), 16002 (this.log = w.log.bind(w, ka)), 16003 (this.warn = w.warn.bind(w, ka)), 16004 (this.error = w.error.bind(w, ka)), 16005 (this.hls = e), 16006 (this.config = e.config), 16007 this.registerListeners(); 16008 } 16009 var e = t.prototype; 16010 return ( 16011 (e.destroy = function () { 16012 this.unregisterListeners(), this.onMediaDetached(); 16013 var t = this.config; 16014 (t.requestMediaKeySystemAccessFunc = null), 16015 (t.licenseXhrSetup = t.licenseResponseCallback = void 0), 16016 (t.drmSystems = t.drmSystemOptions = {}), 16017 (this.hls = this.onMediaEncrypted = this.onWaitingForKey = this.keyIdToKeySessionPromise = null), 16018 (this.config = null); 16019 }), 16020 (e.registerListeners = function () { 16021 this.hls.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 16022 this.hls.on(S.MEDIA_DETACHED, this.onMediaDetached, this), 16023 this.hls.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 16024 this.hls.on(S.MANIFEST_LOADED, this.onManifestLoaded, this); 16025 }), 16026 (e.unregisterListeners = function () { 16027 this.hls.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 16028 this.hls.off(S.MEDIA_DETACHED, this.onMediaDetached, this), 16029 this.hls.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 16030 this.hls.off(S.MANIFEST_LOADED, this.onManifestLoaded, this); 16031 }), 16032 (e.getLicenseServerUrl = function (t) { 16033 var e = this.config, 16034 r = e.drmSystems, 16035 i = e.widevineLicenseUrl, 16036 n = r[t]; 16037 if (n) return n.licenseUrl; 16038 if (t === j.WIDEVINE && i) return i; 16039 throw new Error('no license server URL configured for key-system "' + t + '"'); 16040 }), 16041 (e.getServerCertificateUrl = function (t) { 16042 var e = this.config.drmSystems[t]; 16043 if (e) return e.serverCertificateUrl; 16044 this.log('No Server Certificate in config.drmSystems["' + t + '"]'); 16045 }), 16046 (e.attemptKeySystemAccess = function (t) { 16047 var e = this, 16048 r = this.hls.levels, 16049 i = function (t, e, r) { 16050 return !!t && r.indexOf(t) === e; 16051 }, 16052 n = r 16053 .map(function (t) { 16054 return t.audioCodec; 16055 }) 16056 .filter(i), 16057 a = r 16058 .map(function (t) { 16059 return t.videoCodec; 16060 }) 16061 .filter(i); 16062 return ( 16063 n.length + a.length === 0 && a.push('avc1.42e01e'), 16064 new Promise(function (r, i) { 16065 !(function t(s) { 16066 var o = s.shift(); 16067 e.getMediaKeysPromise(o, n, a) 16068 .then(function (t) { 16069 return r({ keySystem: o, mediaKeys: t }); 16070 }) 16071 .catch(function (e) { 16072 s.length 16073 ? t(s) 16074 : i( 16075 e instanceof Da 16076 ? e 16077 : new Da( 16078 { type: L.KEY_SYSTEM_ERROR, details: R.KEY_SYSTEM_NO_ACCESS, error: e, fatal: !0 }, 16079 e.message, 16080 ), 16081 ); 16082 }); 16083 })(t); 16084 }) 16085 ); 16086 }), 16087 (e.requestMediaKeySystemAccess = function (t, e) { 16088 var r = this.config.requestMediaKeySystemAccessFunc; 16089 if ('function' != typeof r) { 16090 var i = 'Configured requestMediaKeySystemAccess is not a function ' + r; 16091 return ( 16092 null === et && 16093 'http:' === self.location.protocol && 16094 (i = 16095 'navigator.requestMediaKeySystemAccess is not available over insecure protocol ' + 16096 location.protocol), 16097 Promise.reject(new Error(i)) 16098 ); 16099 } 16100 return r(t, e); 16101 }), 16102 (e.getMediaKeysPromise = function (t, e, r) { 16103 var i = this, 16104 n = (function (t, e, r, i) { 16105 var n; 16106 switch (t) { 16107 case j.FAIRPLAY: 16108 n = ['cenc', 'sinf']; 16109 break; 16110 case j.WIDEVINE: 16111 case j.PLAYREADY: 16112 n = ['cenc']; 16113 break; 16114 case j.CLEARKEY:
16115 n = ['cenc', 'keyids']; 16116 break; 16117 default: 16118 throw new Error('Unknown key-system: ' + t); 16119 } 16120 return (function (t, e, r, i) { 16121 return [ 16122 { 16123 initDataTypes: t, 16124 persistentState: i.persistentState || 'not-allowed', 16125 distinctiveIdentifier: i.distinctiveIdentifier || 'not-allowed', 16126 sessionTypes: i.sessionTypes || [i.sessionType || 'temporary'], 16127 audioCapabilities: e.map(function (t) { 16128 return { 16129 contentType: 'audio/mp4; codecs="' + t + '"', 16130 robustness: i.audioRobustness || '', 16131 encryptionScheme: i.audioEncryptionScheme || null, 16132 }; 16133 }), 16134 videoCapabilities: r.map(function (t) { 16135 return { 16136 contentType: 'video/mp4; codecs="' + t + '"', 16137 robustness: i.videoRobustness || '', 16138 encryptionScheme: i.videoEncryptionScheme || null, 16139 }; 16140 }), 16141 }, 16142 ]; 16143 })(n, e, r, i); 16144 })(t, e, r, this.config.drmSystemOptions), 16145 a = this.keySystemAccessPromises[t], 16146 s = null == a ? void 0 : a.keySystemAccess; 16147 if (!s) { 16148 this.log('Requesting encrypted media "' + t + '" key-system access with config: ' + JSON.stringify(n)), 16149 (s = this.requestMediaKeySystemAccess(t, n)); 16150 var o = (this.keySystemAccessPromises[t] = { keySystemAccess: s }); 16151 return ( 16152 s.catch(function (e) { 16153 i.log('Failed to obtain access to key-system "' + t + '": ' + e); 16154 }), 16155 s.then(function (e) { 16156 i.log('Access for key-system "' + e.keySystem + '" obtained'); 16157 var r = i.fetchServerCertificate(t); 16158 return ( 16159 i.log('Create media-keys for "' + t + '"'), 16160 (o.mediaKeys = e.createMediaKeys().then(function (e) { 16161 return ( 16162 i.log('Media-keys created for "' + t + '"'), 16163 r.then(function (r) { 16164 return r ? i.setMediaKeysServerCertificate(e, t, r) : e; 16165 }) 16166 ); 16167 })), 16168 o.mediaKeys.catch(function (e) { 16169 i.error('Failed to create media-keys for "' + t + '"}: ' + e); 16170 }), 16171 o.mediaKeys 16172 ); 16173 }) 16174 ); 16175 } 16176 return s.then(function () { 16177 return a.mediaKeys; 16178 }); 16179 }), 16180 (e.createMediaKeySessionContext = function (t) { 16181 var e = t.decryptdata, 16182 r = t.keySystem, 16183 i = t.mediaKeys; 16184 this.log('Creating key-system session "' + r + '" keyId: ' + Tt(e.keyId || [])); 16185 var n = i.createSession(), 16186 a = { decryptdata: e, keySystem: r, mediaKeys: i, mediaKeysSession: n, keyStatus: 'status-pending' }; 16187 return this.mediaKeySessions.push(a), a; 16188 }), 16189 (e.renewKeySession = function (t) { 16190 var e = t.decryptdata; 16191 if (e.pssh) { 16192 var r = this.createMediaKeySessionContext(t), 16193 i = this.getKeyIdString(e); 16194 this.keyIdToKeySessionPromise[i] = this.generateRequestWithPreferredKeySession( 16195 r, 16196 'cenc', 16197 e.pssh, 16198 'expired', 16199 ); 16200 } else this.warn('Could not renew expired session. Missing pssh initData.'); 16201 this.removeSession(t); 16202 }), 16203 (e.getKeyIdString = function (t) { 16204 if (!t) throw new Error('Could not read keyId of undefined decryptdata'); 16205 if (null === t.keyId) throw new Error('keyId is null'); 16206 return Tt(t.keyId); 16207 }), 16208 (e.updateKeySession = function (t, e) { 16209 var r, 16210 i = t.mediaKeysSession; 16211 return ( 16212 this.log( 16213 'Updating key-session "' + 16214 i.sessionId + 16215 '" for keyID ' + 16216 Tt((null == (r = t.decryptdata) ? void 0 : r.keyId) || []) + 16217 '\n } (data length: ' + 16218 (e ? e.byteLength : e) + 16219 ')', 16220 ), 16221 i.update(e) 16222 ); 16223 }), 16224 (e.selectKeySystemFormat = function (t) { 16225 var e = Object.keys(t.levelkeys || {}); 16226 return ( 16227 this.keyFormatPromise || 16228 (this.log( 16229 'Selecting key-system from fragment (sn: ' + 16230 t.sn + 16231 ' ' + 16232 t.type + 16233 ': ' + 16234 t.level + 16235 ') key formats ' + 16236 e.join(', '), 16237 ), 16238 (this.keyFormatPromise = this.getKeyFormatPromise(e))), 16239 this.keyFormatPromise 16240 ); 16241 }), 16242 (e.getKeyFormatPromise = function (t) { 16243 var e = this; 16244 return new Promise(function (r, i) { 16245 var n = tt(e.config), 16246 a = t.map($).filter(function (t) { 16247 return !!t && -1 !== n.indexOf(t); 16248 }); 16249 return e 16250 .getKeySystemSelectionPromise(a) 16251 .then(function (t) {
16252 var e = t.keySystem, 16253 n = Z(e); 16254 n ? r(n) : i(new Error('Unable to find format for key-system "' + e + '"')); 16255 }) 16256 .catch(i); 16257 }); 16258 }), 16259 (e.loadKey = function (t) { 16260 var e = this, 16261 r = t.keyInfo.decryptdata, 16262 i = this.getKeyIdString(r), 16263 n = '(keyId: ' + i + ' format: "' + r.keyFormat + '" method: ' + r.method + ' uri: ' + r.uri + ')'; 16264 this.log('Starting session for key ' + n); 16265 var a = this.keyIdToKeySessionPromise[i]; 16266 return ( 16267 a || 16268 (a = this.keyIdToKeySessionPromise[i] = 16269 this.getKeySystemForKeyPromise(r).then(function (i) { 16270 var a = i.keySystem, 16271 s = i.mediaKeys; 16272 return ( 16273 e.throwIfDestroyed(), 16274 e.log( 16275 'Handle encrypted media sn: ' + 16276 t.frag.sn + 16277 ' ' + 16278 t.frag.type + 16279 ': ' + 16280 t.frag.level + 16281 ' using key ' + 16282 n, 16283 ), 16284 e.attemptSetMediaKeys(a, s).then(function () { 16285 e.throwIfDestroyed(); 16286 var t = e.createMediaKeySessionContext({ keySystem: a, mediaKeys: s, decryptdata: r }); 16287 return e.generateRequestWithPreferredKeySession(t, 'cenc', r.pssh, 'playlist-key'); 16288 }) 16289 ); 16290 })).catch(function (t) { 16291 return e.handleError(t); 16292 }), 16293 a 16294 ); 16295 }), 16296 (e.throwIfDestroyed = function (t) { 16297 if (!this.hls) throw new Error('invalid state'); 16298 }), 16299 (e.handleError = function (t) { 16300 this.hls && 16301 (this.error(t.message), 16302 t instanceof Da 16303 ? this.hls.trigger(S.ERROR, t.data) 16304 : this.hls.trigger(S.ERROR, { 16305 type: L.KEY_SYSTEM_ERROR, 16306 details: R.KEY_SYSTEM_NO_KEYS, 16307 error: t, 16308 fatal: !0, 16309 })); 16310 }), 16311 (e.getKeySystemForKeyPromise = function (t) { 16312 var e = this.getKeyIdString(t), 16313 r = this.keyIdToKeySessionPromise[e]; 16314 if (!r) { 16315 var i = $(t.keyFormat), 16316 n = i ? [i] : tt(this.config); 16317 return this.attemptKeySystemAccess(n); 16318 } 16319 return r; 16320 }), 16321 (e.getKeySystemSelectionPromise = function (t) { 16322 if ((t.length || (t = tt(this.config)), 0 === t.length)) 16323 throw new Da( 16324 { type: L.KEY_SYSTEM_ERROR, details: R.KEY_SYSTEM_NO_CONFIGURED_LICENSE, fatal: !0 }, 16325 'Missing key-system license configuration options ' + 16326 JSON.stringify({ drmSystems: this.config.drmSystems }), 16327 ); 16328 return this.attemptKeySystemAccess(t); 16329 }), 16330 (e._onMediaEncrypted = function (t) { 16331 var e = this, 16332 r = t.initDataType, 16333 i = t.initData; 16334 if ((this.debug('"' + t.type + '" event: init data type: "' + r + '"'), null !== i)) { 16335 var n, a; 16336 if ('sinf' === r && this.config.drmSystems[j.FAIRPLAY]) { 16337 var s = Rt(new Uint8Array(i)); 16338 try { 16339 var o = V(JSON.parse(s).sinf), 16340 l = _t(new Uint8Array(o)); 16341 if (!l) return; 16342 (n = l.subarray(8, 24)), (a = j.FAIRPLAY); 16343 } catch (t) { 16344 return void this.warn('Failed to parse sinf "encrypted" event message initData'); 16345 } 16346 } else { 16347 var u = (function (t) { 16348 if (!(t instanceof ArrayBuffer) || t.byteLength < 32) return null; 16349 var e = { version: 0, systemId: '', kids: null, data: null }, 16350 r = new DataView(t), 16351 i = r.getUint32(0); 16352 if (t.byteLength !== i && i > 44) return null; 16353 if (1886614376 !== r.getUint32(4)) return null; 16354 if (((e.version = r.getUint32(8) >>> 24), e.version > 1)) return null; 16355 e.systemId = Tt(new Uint8Array(t, 12, 16)); 16356 var n = r.getUint32(28); 16357 if (0 === e.version) { 16358 if (i - 32 < n) return null; 16359 e.data = new Uint8Array(t, 32, n); 16360 } else if (1 === e.version) { 16361 e.kids = []; 16362 for (var a = 0; a < n; a++) e.kids.push(new Uint8Array(t, 32 + 16 * a, 16)); 16363 } 16364 return e; 16365 })(i); 16366 if (null === u) return; 16367 0 === u.version && u.systemId === J && u.data && (n = u.data.subarray(8, 24)), 16368 (a = (function (t) { 16369 if (t === J) return j.WIDEVINE; 16370 })(u.systemId)); 16371 } 16372 if (a && n) { 16373 for ( 16374 var h = Tt(n), 16375 d = this.keyIdToKeySessionPromise, 16376 c = this.mediaKeySessions, 16377 f = d[h], 16378 g = function () { 16379 var t = c[v], 16380 a = t.decryptdata; 16381 if (a.pssh || !a.keyId) return 'continue'; 16382 var s = Tt(a.keyId); 16383 return h === s || -1 !== a.uri.replace(/-/g, '').indexOf(h) 16384 ? ((f = d[s]), 16385 delete d[s], 16386 (a.pssh = new Uint8Array(i)), 16387 (a.keyId = n), 16388 (f = d[h] = 16389 f.then(function () { 16390 return e.generateRequestWithPreferredKeySession(t, r, i, 'encrypted-event-key-match'); 16391 })), 16392 'break') 16393 : void 0; 16394 }, 16395 v = 0; 16396 v < c.length; 16397 v++ 16398 ) { 16399 var m = g();
16400 if ('continue' !== m && 'break' === m) break; 16401 } 16402 f || 16403 (f = d[h] = 16404 this.getKeySystemSelectionPromise([a]).then(function (t) { 16405 var a, 16406 s = t.keySystem, 16407 o = t.mediaKeys; 16408 e.throwIfDestroyed(); 16409 var l = new Gt('ISO-23001-7', h, null != (a = Z(s)) ? a : ''); 16410 return ( 16411 (l.pssh = new Uint8Array(i)), 16412 (l.keyId = n), 16413 e.attemptSetMediaKeys(s, o).then(function () { 16414 e.throwIfDestroyed(); 16415 var t = e.createMediaKeySessionContext({ decryptdata: l, keySystem: s, mediaKeys: o }); 16416 return e.generateRequestWithPreferredKeySession(t, r, i, 'encrypted-event-no-match'); 16417 }) 16418 ); 16419 })), 16420 f.catch(function (t) { 16421 return e.handleError(t); 16422 }); 16423 } 16424 } 16425 }), 16426 (e._onWaitingForKey = function (t) { 16427 this.log('"' + t.type + '" event'); 16428 }), 16429 (e.attemptSetMediaKeys = function (t, e) { 16430 var r = this, 16431 i = this.setMediaKeysQueue.slice(); 16432 this.log('Setting media-keys for "' + t + '"'); 16433 var n = Promise.all(i).then(function () { 16434 if (!r.media) throw new Error('Attempted to set mediaKeys without media element attached'); 16435 return r.media.setMediaKeys(e); 16436 }); 16437 return ( 16438 this.setMediaKeysQueue.push(n), 16439 n.then(function () { 16440 r.log('Media-keys set for "' + t + '"'), 16441 i.push(n), 16442 (r.setMediaKeysQueue = r.setMediaKeysQueue.filter(function (t) { 16443 return -1 === i.indexOf(t); 16444 })); 16445 }) 16446 ); 16447 }), 16448 (e.generateRequestWithPreferredKeySession = function (t, e, r, i) { 16449 var n, 16450 a, 16451 s = this, 16452 o = null == (n = this.config.drmSystems) || null == (a = n[t.keySystem]) ? void 0 : a.generateRequest; 16453 if (o) 16454 try { 16455 var l = o.call(this.hls, e, r, t); 16456 if (!l) throw new Error('Invalid response from configured generateRequest filter'); 16457 (e = l.initDataType), (r = t.decryptdata.pssh = l.initData ? new Uint8Array(l.initData) : null); 16458 } catch (t) { 16459 var u; 16460 if ((this.warn(t.message), null != (u = this.hls) && u.config.debug)) throw t; 16461 } 16462 if (null === r) 16463 return this.log('Skipping key-session request for "' + i + '" (no initData)'), Promise.resolve(t); 16464 var h = this.getKeyIdString(t.decryptdata); 16465 this.log( 16466 'Generating key-session request for "' + 16467 i + 16468 '": ' + 16469 h + 16470 ' (init data type: ' + 16471 e + 16472 ' length: ' + 16473 (r ? r.byteLength : null) + 16474 ')', 16475 ); 16476 var d = new an(); 16477 (t.mediaKeysSession.onmessage = function (e) { 16478 var r = t.mediaKeysSession; 16479 if (r) { 16480 var i = e.messageType, 16481 n = e.message; 16482 s.log('"' + i + '" message event for session "' + r.sessionId + '" message size: ' + n.byteLength), 16483 'license-request' === i || 'license-renewal' === i 16484 ? s.renewLicense(t, n).catch(function (t) { 16485 s.handleError(t), d.emit('error', t); 16486 }) 16487 : 'license-release' === i 16488 ? t.keySystem === j.FAIRPLAY && (s.updateKeySession(t, W('acknowledged')), s.removeSession(t))
16489 : s.warn('unhandled media key message type "' + i + '"'); 16490 } else d.emit('error', new Error('invalid state')); 16491 }), 16492 (t.mediaKeysSession.onkeystatuseschange = function (e) { 16493 if (t.mediaKeysSession) { 16494 s.onKeyStatusChange(t); 16495 var r = t.keyStatus; 16496 d.emit('keyStatus', r), 16497 'expired' === r && (s.warn(t.keySystem + ' expired for key ' + h), s.renewKeySession(t)); 16498 } else d.emit('error', new Error('invalid state')); 16499 }); 16500 var c = new Promise(function (t, e) { 16501 d.on('error', e), 16502 d.on('keyStatus', function (r) { 16503 r.startsWith('usable') 16504 ? t() 16505 : 'output-restricted' === r 16506 ? e( 16507 new Da( 16508 { type: L.KEY_SYSTEM_ERROR, details: R.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED, fatal: !1 }, 16509 'HDCP level output restricted', 16510 ), 16511 ) 16512 : 'internal-error' === r 16513 ? e( 16514 new Da( 16515 { type: L.KEY_SYSTEM_ERROR, details: R.KEY_SYSTEM_STATUS_INTERNAL_ERROR, fatal: !0 }, 16516 'key status changed to "' + r + '"', 16517 ), 16518 ) 16519 : 'expired' === r 16520 ? e(new Error('key expired while generating request')) 16521 : s.warn('unhandled key status change "' + r + '"'); 16522 }); 16523 }); 16524 return t.mediaKeysSession 16525 .generateRequest(e, r) 16526 .then(function () { 16527 var e; 16528 s.log( 16529 'Request generated for key-session "' + 16530 (null == (e = t.mediaKeysSession) ? void 0 : e.sessionId) + 16531 '" keyId: ' + 16532 h, 16533 ); 16534 }) 16535 .catch(function (t) { 16536 throw new Da( 16537 { type: L.KEY_SYSTEM_ERROR, details: R.KEY_SYSTEM_NO_SESSION, error: t, fatal: !1 }, 16538 'Error generating key-session request: ' + t, 16539 ); 16540 }) 16541 .then(function () { 16542 return c; 16543 }) 16544 .catch(function (e) { 16545 throw (d.removeAllListeners(), s.removeSession(t), e); 16546 }) 16547 .then(function () { 16548 return d.removeAllListeners(), t; 16549 }); 16550 }), 16551 (e.onKeyStatusChange = function (t) { 16552 var e = this; 16553 t.mediaKeysSession.keyStatuses.forEach(function (r, i) { 16554 e.log( 16555 'key status change "' + 16556 r + 16557 '" for keyStatuses keyId: ' + 16558 Tt('buffer' in i ? new Uint8Array(i.buffer, i.byteOffset, i.byteLength) : new Uint8Array(i)) + 16559 ' session keyId: ' + 16560 Tt(new Uint8Array(t.decryptdata.keyId || [])) + 16561 ' uri: ' + 16562 t.decryptdata.uri, 16563 ), 16564 (t.keyStatus = r); 16565 }); 16566 }), 16567 (e.fetchServerCertificate = function (t) { 16568 var e = this.config, 16569 r = new (0, e.loader)(e), 16570 n = this.getServerCertificateUrl(t); 16571 return n 16572 ? (this.log('Fetching serverCertificate for "' + t + '"'), 16573 new Promise(function (a, s) { 16574 var o = { responseType: 'arraybuffer', url: n }, 16575 l = e.certLoadPolicy.default, 16576 u = { loadPolicy: l, timeout: l.maxLoadTimeMs, maxRetry: 0, retryDelay: 0, maxRetryDelay: 0 }, 16577 h = { 16578 onSuccess: function (t, e, r, i) { 16579 a(t.data); 16580 }, 16581 onError: function (e, r, a, l) { 16582 s( 16583 new Da( 16584 { 16585 type: L.KEY_SYSTEM_ERROR, 16586 details: R.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED, 16587 fatal: !0, 16588 networkDetails: a, 16589 response: i({ url: o.url, data: void 0 }, e), 16590 }, 16591 '"' + 16592 t + 16593 '" certificate request failed (' + 16594 n + 16595 '). Status: ' + 16596 e.code + 16597 ' (' + 16598 e.text + 16599 ')', 16600 ), 16601 ); 16602 }, 16603 onTimeout: function (e, r, i) { 16604 s( 16605 new Da( 16606 { 16607 type: L.KEY_SYSTEM_ERROR, 16608 details: R.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED, 16609 fatal: !0, 16610 networkDetails: i, 16611 response: { url: o.url, data: void 0 }, 16612 }, 16613 '"' + t + '" certificate request timed out (' + n + ')', 16614 ), 16615 ); 16616 }, 16617 onAbort: function (t, e, r) { 16618 s(new Error('aborted')); 16619 }, 16620 }; 16621 r.load(o, u, h); 16622 })) 16623 : Promise.resolve(); 16624 }), 16625 (e.setMediaKeysServerCertificate = function (t, e, r) { 16626 var i = this; 16627 return new Promise(function (n, a) { 16628 t.setServerCertificate(r) 16629 .then(function (a) { 16630 i.log( 16631 'setServerCertificate ' + 16632 (a ? 'success' : 'not supported by CDM') + 16633 ' (' + 16634 (null == r ? void 0 : r.byteLength) + 16635 ') on "' + 16636 e + 16637 '"', 16638 ), 16639 n(t); 16640 }) 16641 .catch(function (t) { 16642 a( 16643 new Da( 16644 { 16645 type: L.KEY_SYSTEM_ERROR, 16646 details: R.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED, 16647 error: t, 16648 fatal: !0, 16649 }, 16650 t.message, 16651 ), 16652 ); 16653 }); 16654 }); 16655 }), 16656 (e.renewLicense = function (t, e) { 16657 var r = this; 16658 return this.requestLicense(t, new Uint8Array(e)).then(function (e) { 16659 return r.updateKeySession(t, new Uint8Array(e)).catch(function (t) { 16660 throw new Da( 16661 { type: L.KEY_SYSTEM_ERROR, details: R.KEY_SYSTEM_SESSION_UPDATE_FAILED, error: t, fatal: !0 }, 16662 t.message, 16663 ); 16664 }); 16665 }); 16666 }), 16667 (e.setupLicenseXHR = function (t, e, r, i) { 16668 var n = this, 16669 a = this.config.licenseXhrSetup; 16670 return a 16671 ? Promise.resolve() 16672 .then(function () { 16673 if (!r.decryptdata) throw new Error('Key removed'); 16674 return a.call(n.hls, t, e, r, i); 16675 }) 16676 .catch(function (s) { 16677 if (!r.decryptdata) throw s; 16678 return t.open('POST', e, !0), a.call(n.hls, t, e, r, i); 16679 }) 16680 .then(function (r) { 16681 return t.readyState || t.open('POST', e, !0), { xhr: t, licenseChallenge: r || i }; 16682 }) 16683 : (t.open('POST', e, !0), Promise.resolve({ xhr: t, licenseChallenge: i })); 16684 }), 16685 (e.requestLicense = function (t, e) { 16686 var r = this, 16687 i = this.config.keyLoadPolicy.default; 16688 return new Promise(function (n, a) { 16689 var s = r.getLicenseServerUrl(t.keySystem); 16690 r.log('Sending license request to URL: ' + s); 16691 var o = new XMLHttpRequest(); 16692 (o.responseType = 'arraybuffer'), 16693 (o.onreadystatechange = function () { 16694 if (!r.hls || !t.mediaKeysSession) return a(new Error('invalid state')); 16695 if (4 === o.readyState) 16696 if (200 === o.status) { 16697 r._requestLicenseFailureCount = 0; 16698 var l = o.response; 16699 r.log('License received ' + (l instanceof ArrayBuffer ? l.byteLength : l)); 16700 var u = r.config.licenseResponseCallback; 16701 if (u) 16702 try { 16703 l = u.call(r.hls, o, s, t); 16704 } catch (t) { 16705 r.error(t); 16706 } 16707 n(l); 16708 } else { 16709 var h = i.errorRetry, 16710 d = h ? h.maxNumRetry : 0; 16711 if ( 16712 (r._requestLicenseFailureCount++, 16713 r._requestLicenseFailureCount > d || (o.status >= 400 && o.status < 500)) 16714 ) 16715 a( 16716 new Da( 16717 { 16718 type: L.KEY_SYSTEM_ERROR, 16719 details: R.KEY_SYSTEM_LICENSE_REQUEST_FAILED, 16720 fatal: !0, 16721 networkDetails: o, 16722 response: { url: s, data: void 0, code: o.status, text: o.statusText }, 16723 }, 16724 'License Request XHR failed (' + s + '). Status: ' + o.status + ' (' + o.statusText + ')', 16725 ), 16726 ); 16727 else { 16728 var c = d - r._requestLicenseFailureCount + 1; 16729 r.warn('Retrying license request, ' + c + ' attempts left'), 16730 r.requestLicense(t, e).then(n, a); 16731 } 16732 } 16733 }), 16734 t.licenseXhr && t.licenseXhr.readyState !== XMLHttpRequest.DONE && t.licenseXhr.abort(), 16735 (t.licenseXhr = o), 16736 r.setupLicenseXHR(o, s, t, e).then(function (t) { 16737 var e = t.xhr, 16738 r = t.licenseChallenge; 16739 e.send(r); 16740 }); 16741 }); 16742 }), 16743 (e.onMediaAttached = function (t, e) { 16744 if (this.config.emeEnabled) { 16745 var r = e.media; 16746 (this.media = r), 16747 r.addEventListener('encrypted', this.onMediaEncrypted), 16748 r.addEventListener('waitingforkey', this.onWaitingForKey); 16749 } 16750 }), 16751 (e.onMediaDetached = function () { 16752 var e = this, 16753 r = this.media, 16754 i = this.mediaKeySessions; 16755 r && 16756 (r.removeEventListener('encrypted', this.onMediaEncrypted), 16757 r.removeEventListener('waitingforkey', this.onWaitingForKey), 16758 (this.media = null)), 16759 (this._requestLicenseFailureCount = 0), 16760 (this.setMediaKeysQueue = []), 16761 (this.mediaKeySessions = []), 16762 (this.keyIdToKeySessionPromise = {}), 16763 Gt.clearKeyUriToKeyIdMap(); 16764 var n = i.length; 16765 t.CDMCleanupPromise = Promise.all( 16766 i 16767 .map(function (t) { 16768 return e.removeSession(t); 16769 }) 16770 .concat( 16771 null == r 16772 ? void 0
16773 : r.setMediaKeys(null).catch(function (t) { 16774 e.log('Could not clear media keys: ' + t + '. media.src: ' + (null == r ? void 0 : r.src)); 16775 }), 16776 ), 16777 ) 16778 .then(function () { 16779 n && (e.log('finished closing key sessions and clearing media keys'), (i.length = 0)); 16780 }) 16781 .catch(function (t) { 16782 e.log( 16783 'Could not close sessions and clear media keys: ' + 16784 t + 16785 '. media.src: ' + 16786 (null == r ? void 0 : r.src), 16787 ); 16788 }); 16789 }), 16790 (e.onManifestLoading = function () { 16791 this.keyFormatPromise = null; 16792 }), 16793 (e.onManifestLoaded = function (t, e) { 16794 var r = e.sessionKeys; 16795 if (r && this.config.emeEnabled && !this.keyFormatPromise) { 16796 var i = r.reduce(function (t, e) { 16797 return -1 === t.indexOf(e.keyFormat) && t.push(e.keyFormat), t; 16798 }, []); 16799 this.log('Selecting key-system from session-keys ' + i.join(', ')), 16800 (this.keyFormatPromise = this.getKeyFormatPromise(i)); 16801 } 16802 }), 16803 (e.removeSession = function (t) { 16804 var e = this, 16805 r = t.mediaKeysSession, 16806 i = t.licenseXhr; 16807 if (r) { 16808 this.log('Remove licenses and keys and close session ' + r.sessionId), 16809 (r.onmessage = null), 16810 (r.onkeystatuseschange = null), 16811 i && i.readyState !== XMLHttpRequest.DONE && i.abort(), 16812 (t.mediaKeysSession = t.decryptdata = t.licenseXhr = void 0); 16813 var n = this.mediaKeySessions.indexOf(t); 16814 return ( 16815 n > -1 && this.mediaKeySessions.splice(n, 1), 16816 r 16817 .remove() 16818 .catch(function (t) { 16819 e.log('Could not remove session: ' + t); 16820 }) 16821 .then(function () { 16822 return r.close(); 16823 }) 16824 .catch(function (t) { 16825 e.log('Could not close session: ' + t); 16826 }) 16827 ); 16828 } 16829 }), 16830 t 16831 ); 16832 })(); 16833 ba.CDMCleanupPromise = void 0; 16834 var Da = (function (t) { 16835 function e(e, r) { 16836 var i; 16837 return ( 16838 ((i = t.call(this, r) || this).data = void 0), 16839 e.error || (e.error = new Error(r)), 16840 (i.data = e), 16841 (e.err = e.error), 16842 i 16843 ); 16844 } 16845 return l(e, t), e; 16846 })(f(Error)), 16847 Ia = 'm', 16848 wa = 'a', 16849 Ca = 'v', 16850 _a = 'av', 16851 Pa = 'i', 16852 xa = 'tt', 16853 Fa = (function () { 16854 function t(e) { 16855 var r = this; 16856 (this.hls = void 0), 16857 (this.config = void 0), 16858 (this.media = void 0), 16859 (this.sid = void 0), 16860 (this.cid = void 0), 16861 (this.useHeaders = !1), 16862 (this.initialized = !1), 16863 (this.starved = !1), 16864 (this.buffering = !0), 16865 (this.audioBuffer = void 0), 16866 (this.videoBuffer = void 0), 16867 (this.onWaiting = function () { 16868 r.initialized && (r.starved = !0), (r.buffering = !0); 16869 }), 16870 (this.onPlaying = function () { 16871 r.initialized || (r.initialized = !0), (r.buffering = !1); 16872 }), 16873 (this.applyPlaylistData = function (t) { 16874 try { 16875 r.apply(t, { ot: Ia, su: !r.initialized }); 16876 } catch (t) { 16877 w.warn('Could not generate manifest CMCD data.', t); 16878 } 16879 }), 16880 (this.applyFragmentData = function (t) { 16881 try { 16882 var e = t.frag, 16883 i = r.hls.levels[e.level], 16884 n = r.getObjectType(e), 16885 a = { d: 1e3 * e.duration, ot: n }; 16886 (n !== Ca && n !== wa && n != _a) || 16887 ((a.br = i.bitrate / 1e3), (a.tb = r.getTopBandwidth(n) / 1e3), (a.bl = r.getBufferLength(n))), 16888 r.apply(t, a); 16889 } catch (t) { 16890 w.warn('Could not generate segment CMCD data.', t); 16891 } 16892 }), 16893 (this.hls = e); 16894 var i = (this.config = e.config), 16895 n = i.cmcd; 16896 null != n && 16897 ((i.pLoader = this.createPlaylistLoader()), 16898 (i.fLoader = this.createFragmentLoader()), 16899 (this.sid = n.sessionId || t.uuid()), 16900 (this.cid = n.contentId), 16901 (this.useHeaders = !0 === n.useHeaders), 16902 this.registerListeners()); 16903 } 16904 var e = t.prototype; 16905 return ( 16906 (e.registerListeners = function () { 16907 var t = this.hls;
16908 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 16909 t.on(S.MEDIA_DETACHED, this.onMediaDetached, this), 16910 t.on(S.BUFFER_CREATED, this.onBufferCreated, this); 16911 }), 16912 (e.unregisterListeners = function () { 16913 var t = this.hls; 16914 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 16915 t.off(S.MEDIA_DETACHED, this.onMediaDetached, this), 16916 t.off(S.BUFFER_CREATED, this.onBufferCreated, this); 16917 }), 16918 (e.destroy = function () { 16919 this.unregisterListeners(), 16920 this.onMediaDetached(), 16921 (this.hls = this.config = this.audioBuffer = this.videoBuffer = null); 16922 }), 16923 (e.onMediaAttached = function (t, e) { 16924 (this.media = e.media), 16925 this.media.addEventListener('waiting', this.onWaiting), 16926 this.media.addEventListener('playing', this.onPlaying); 16927 }), 16928 (e.onMediaDetached = function () { 16929 this.media && 16930 (this.media.removeEventListener('waiting', this.onWaiting), 16931 this.media.removeEventListener('playing', this.onPlaying), 16932 (this.media = null)); 16933 }), 16934 (e.onBufferCreated = function (t, e) { 16935 var r, i; 16936 (this.audioBuffer = null == (r = e.tracks.audio) ? void 0 : r.buffer), 16937 (this.videoBuffer = null == (i = e.tracks.video) ? void 0 : i.buffer); 16938 }), 16939 (e.createData = function () { 16940 var t; 16941 return { 16942 v: 1, 16943 sf: 'h', 16944 sid: this.sid, 16945 cid: this.cid, 16946 pr: null == (t = this.media) ? void 0 : t.playbackRate, 16947 mtp: this.hls.bandwidthEstimate / 1e3, 16948 }; 16949 }), 16950 (e.apply = function (e, r) { 16951 void 0 === r && (r = {}), o(r, this.createData()); 16952 var i = r.ot === Pa || r.ot === Ca || r.ot === _a; 16953 if ( 16954 (this.starved && i && ((r.bs = !0), (r.su = !0), (this.starved = !1)), 16955 null == r.su && (r.su = this.buffering), 16956 this.useHeaders) 16957 ) { 16958 var n = t.toHeaders(r); 16959 if (!Object.keys(n).length) return; 16960 e.headers || (e.headers = {}), o(e.headers, n); 16961 } else { 16962 var a = t.toQuery(r); 16963 if (!a) return; 16964 e.url = t.appendQueryToUri(e.url, a); 16965 } 16966 }), 16967 (e.getObjectType = function (t) { 16968 var e = t.type; 16969 return 'subtitle' === e 16970 ? xa 16971 : 'initSegment' === t.sn 16972 ? Pa 16973 : 'audio' === e 16974 ? wa 16975 : 'main' === e 16976 ? this.hls.audioTracks.length 16977 ? Ca 16978 : _a 16979 : void 0; 16980 }), 16981 (e.getTopBandwidth = function (t) { 16982 var e, 16983 r = 0, 16984 i = this.hls; 16985 if (t === wa) e = i.audioTracks; 16986 else { 16987 var n = i.maxAutoLevel, 16988 a = n > -1 ? n + 1 : i.levels.length; 16989 e = i.levels.slice(0, a); 16990 } 16991 for (var s, o = v(e); !(s = o()).done; ) { 16992 var l = s.value; 16993 l.bitrate > r && (r = l.bitrate); 16994 } 16995 return r > 0 ? r : NaN; 16996 }), 16997 (e.getBufferLength = function (t) { 16998 var e = this.hls.media, 16999 r = t === wa ? this.audioBuffer : this.videoBuffer; 17000 return r && e ? 1e3 * Ir.bufferInfo(r, e.currentTime, this.config.maxBufferHole).len : NaN; 17001 }), 17002 (e.createPlaylistLoader = function () { 17003 var t = this.config.pLoader, 17004 e = this.applyPlaylistData, 17005 r = t || this.config.loader; 17006 return (function () { 17007 function t(t) { 17008 (this.loader = void 0), (this.loader = new r(t)); 17009 } 17010 var i = t.prototype; 17011 return ( 17012 (i.destroy = function () { 17013 this.loader.destroy(); 17014 }), 17015 (i.abort = function () { 17016 this.loader.abort(); 17017 }), 17018 (i.load = function (t, r, i) { 17019 e(t), this.loader.load(t, r, i); 17020 }), 17021 a(t, [ 17022 { 17023 key: 'stats', 17024 get: function () { 17025 return this.loader.stats; 17026 }, 17027 }, 17028 { 17029 key: 'context', 17030 get: function () { 17031 return this.loader.context; 17032 }, 17033 }, 17034 ]), 17035 t 17036 ); 17037 })(); 17038 }), 17039 (e.createFragmentLoader = function () {
17040 var t = this.config.fLoader, 17041 e = this.applyFragmentData, 17042 r = t || this.config.loader; 17043 return (function () { 17044 function t(t) { 17045 (this.loader = void 0), (this.loader = new r(t)); 17046 } 17047 var i = t.prototype; 17048 return ( 17049 (i.destroy = function () { 17050 this.loader.destroy(); 17051 }), 17052 (i.abort = function () { 17053 this.loader.abort(); 17054 }), 17055 (i.load = function (t, r, i) { 17056 e(t), this.loader.load(t, r, i); 17057 }), 17058 a(t, [ 17059 { 17060 key: 'stats', 17061 get: function () { 17062 return this.loader.stats; 17063 }, 17064 }, 17065 { 17066 key: 'context', 17067 get: function () { 17068 return this.loader.context; 17069 }, 17070 }, 17071 ]), 17072 t 17073 ); 17074 })(); 17075 }), 17076 (t.uuid = function () { 17077 var t = URL.createObjectURL(new Blob()), 17078 e = t.toString(); 17079 return URL.revokeObjectURL(t), e.slice(e.lastIndexOf('/') + 1); 17080 }), 17081 (t.serialize = function (t) { 17082 for ( 17083 var e, 17084 r = [], 17085 i = function (t) { 17086 return !Number.isNaN(t) && null != t && '' !== t && !1 !== t; 17087 }, 17088 n = function (t) { 17089 return Math.round(t); 17090 }, 17091 a = function (t) { 17092 return 100 * n(t / 100); 17093 }, 17094 s = { 17095 br: n, 17096 d: n, 17097 bl: a, 17098 dl: a, 17099 mtp: a, 17100 nor: function (t) { 17101 return encodeURIComponent(t); 17102 }, 17103 rtp: a, 17104 tb: n, 17105 }, 17106 o = v(Object.keys(t || {}).sort()); 17107 !(e = o()).done; 17108 17109 ) { 17110 var l = e.value, 17111 u = t[l]; 17112 if (i(u) && !(('v' === l && 1 === u) || ('pr' == l && 1 === u))) { 17113 var h = s[l]; 17114 h && (u = h(u)); 17115 var d = typeof u, 17116 c = void 0; 17117 (c = 17118 'ot' === l || 'sf' === l || 'st' === l 17119 ? l + '=' + u 17120 : 'boolean' === d 17121 ? l 17122 : 'number' === d 17123 ? l + '=' + u 17124 : l + '=' + JSON.stringify(u)), 17125 r.push(c); 17126 } 17127 } 17128 return r.join(','); 17129 }), 17130 (t.toHeaders = function (e) { 17131 for ( 17132 var r = {}, 17133 i = ['Object', 'Request', 'Session', 'Status'], 17134 n = [{}, {}, {}, {}], 17135 a = { 17136 br: 0, 17137 d: 0, 17138 ot: 0, 17139 tb: 0, 17140 bl: 1, 17141 dl: 1, 17142 mtp: 1, 17143 nor: 1, 17144 nrr: 1, 17145 su: 1, 17146 cid: 2, 17147 pr: 2, 17148 sf: 2, 17149 sid: 2, 17150 st: 2, 17151 v: 2, 17152 bs: 3, 17153 rtp: 3, 17154 }, 17155 s = 0, 17156 o = Object.keys(e); 17157 s < o.length; 17158 s++ 17159 ) { 17160 var l = o[s]; 17161 n[null != a[l] ? a[l] : 1][l] = e[l]; 17162 } 17163 for (var u = 0; u < n.length; u++) { 17164 var h = t.serialize(n[u]); 17165 h && (r['CMCD-' + i[u]] = h); 17166 } 17167 return r; 17168 }), 17169 (t.toQuery = function (e) { 17170 return 'CMCD=' + encodeURIComponent(t.serialize(e)); 17171 }), 17172 (t.appendQueryToUri = function (t, e) { 17173 if (!e) return t; 17174 var r = t.includes('?') ? '&' : '?'; 17175 return '' + t + r + e; 17176 }), 17177 t 17178 ); 17179 })(), 17180 Ma = (function () { 17181 function t(t) { 17182 (this.hls = void 0), 17183 (this.log = void 0), 17184 (this.loader = null),
17185 (this.uri = null), 17186 (this.pathwayId = '.'), 17187 (this.pathwayPriority = null), 17188 (this.timeToLoad = 300), 17189 (this.reloadTimer = -1), 17190 (this.updated = 0), 17191 (this.started = !1), 17192 (this.enabled = !0), 17193 (this.levels = null), 17194 (this.audioTracks = null), 17195 (this.subtitleTracks = null), 17196 (this.penalizedPathways = {}), 17197 (this.hls = t), 17198 (this.log = w.log.bind(w, '[content-steering]:')), 17199 this.registerListeners(); 17200 } 17201 var e = t.prototype; 17202 return ( 17203 (e.registerListeners = function () { 17204 var t = this.hls; 17205 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 17206 t.on(S.MANIFEST_LOADED, this.onManifestLoaded, this), 17207 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 17208 t.on(S.ERROR, this.onError, this); 17209 }), 17210 (e.unregisterListeners = function () { 17211 var t = this.hls; 17212 t && 17213 (t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 17214 t.off(S.MANIFEST_LOADED, this.onManifestLoaded, this), 17215 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 17216 t.off(S.ERROR, this.onError, this)); 17217 }), 17218 (e.startLoad = function () { 17219 if (((this.started = !0), self.clearTimeout(this.reloadTimer), this.enabled && this.uri)) 17220 if (this.updated) { 17221 var t = Math.max(1e3 * this.timeToLoad - (performance.now() - this.updated), 0); 17222 this.scheduleRefresh(this.uri, t); 17223 } else this.loadSteeringManifest(this.uri); 17224 }), 17225 (e.stopLoad = function () { 17226 (this.started = !1), 17227 this.loader && (this.loader.destroy(), (this.loader = null)), 17228 self.clearTimeout(this.reloadTimer); 17229 }), 17230 (e.destroy = function () { 17231 this.unregisterListeners(), 17232 this.stopLoad(), 17233 (this.hls = null), 17234 (this.levels = this.audioTracks = this.subtitleTracks = null); 17235 }), 17236 (e.removeLevel = function (t) { 17237 var e = this.levels; 17238 e && 17239 (this.levels = e.filter(function (e) { 17240 return e !== t; 17241 })); 17242 }), 17243 (e.onManifestLoading = function () { 17244 this.stopLoad(), 17245 (this.enabled = !0), 17246 (this.timeToLoad = 300), 17247 (this.updated = 0), 17248 (this.uri = null), 17249 (this.pathwayId = '.'), 17250 (this.levels = this.audioTracks = this.subtitleTracks = null); 17251 }), 17252 (e.onManifestLoaded = function (t, e) { 17253 var r = e.contentSteering; 17254 null !== r && ((this.pathwayId = r.pathwayId), (this.uri = r.uri), this.started && this.startLoad()); 17255 }), 17256 (e.onManifestParsed = function (t, e) { 17257 (this.audioTracks = e.audioTracks), (this.subtitleTracks = e.subtitleTracks); 17258 }), 17259 (e.onError = function (t, e) { 17260 var r = e.errorAction; 17261 if ((null == r ? void 0 : r.action) === ir && r.flags === sr) { 17262 var i = this.pathwayPriority, 17263 n = this.pathwayId; 17264 this.penalizedPathways[n] || (this.penalizedPathways[n] = performance.now()), 17265 !i && 17266 this.levels && 17267 (i = this.levels.reduce(function (t, e) { 17268 return -1 === t.indexOf(e.pathwayId) && t.push(e.pathwayId), t; 17269 }, [])), 17270 i && i.length > 1 && (this.updatePathwayPriority(i), (r.resolved = this.pathwayId !== n)); 17271 } 17272 }), 17273 (e.filterParsedLevels = function (t) { 17274 this.levels = t; 17275 var e = this.getLevelsForPathway(this.pathwayId); 17276 if (0 === e.length) { 17277 var r = t[0].pathwayId; 17278 this.log('No levels found in Pathway ' + this.pathwayId + '. Setting initial Pathway to "' + r + '"'), 17279 (e = this.getLevelsForPathway(r)), 17280 (this.pathwayId = r); 17281 } 17282 return e.length !== t.length 17283 ? (this.log('Found ' + e.length + '/' + t.length + ' levels in Pathway "' + this.pathwayId + '"'), e) 17284 : t; 17285 }), 17286 (e.getLevelsForPathway = function (t) { 17287 return null === this.levels 17288 ? [] 17289 : this.levels.filter(function (e) { 17290 return t === e.pathwayId; 17291 }); 17292 }), 17293 (e.updatePathwayPriority = function (t) { 17294 var e; 17295 this.pathwayPriority = t; 17296 var r = this.penalizedPathways, 17297 i = performance.now(); 17298 Object.keys(r).forEach(function (t) { 17299 i - r[t] > 3e5 && delete r[t]; 17300 }); 17301 for (var n = 0; n < t.length; n++) { 17302 var a = t[n]; 17303 if (!r[a]) { 17304 if (a === this.pathwayId) return; 17305 var s = this.hls.nextLoadLevel, 17306 o = this.hls.levels[s]; 17307 if ((e = this.getLevelsForPathway(a)).length > 0) { 17308 this.log('Setting Pathway to "' + a + '"'), 17309 (this.pathwayId = a), 17310 this.hls.trigger(S.LEVELS_UPDATED, { levels: e }); 17311 var l = this.hls.levels[s]; 17312 o && 17313 l && 17314 this.levels && 17315 (l.attrs['STABLE-VARIANT-ID'] !== o.attrs['STABLE-VARIANT-ID'] && 17316 l.bitrate !== o.bitrate && 17317 this.log('Unstable Pathways change from bitrate ' + o.bitrate + ' to ' + l.bitrate), 17318 (this.hls.nextLoadLevel = s)); 17319 break; 17320 } 17321 } 17322 } 17323 }), 17324 (e.clonePathways = function (t) { 17325 var e = this, 17326 r = this.levels; 17327 if (r) { 17328 var i = {}, 17329 n = {}; 17330 t.forEach(function (t) { 17331 var a = t.ID, 17332 s = t['BASE-ID'], 17333 l = t['URI-REPLACEMENT']; 17334 if ( 17335 !r.some(function (t) { 17336 return t.pathwayId === a; 17337 }) 17338 ) { 17339 var u = e.getLevelsForPathway(s).map(function (t) { 17340 var e = o({}, t); 17341 (e.details = void 0), (e.url = Na(t.uri, t.attrs['STABLE-VARIANT-ID'], 'PER-VARIANT-URIS', l)); 17342 var r = new P(t.attrs); 17343 r['PATHWAY-ID'] = a; 17344 var s = r.AUDIO && r.AUDIO + '_clone_' + a, 17345 u = r.SUBTITLES && r.SUBTITLES + '_clone_' + a; 17346 s && ((i[r.AUDIO] = s), (r.AUDIO = s)), 17347 u && ((n[r.SUBTITLES] = u), (r.SUBTITLES = u)), 17348 (e.attrs = r); 17349 var h = new Ne(e); 17350 return dr(h, 'audio', s), dr(h, 'text', u), h; 17351 }); 17352 r.push.apply(r, u), Oa(e.audioTracks, i, l, a), Oa(e.subt
17352itleTracks, n, l, a); 17353 } 17354 }); 17355 } 17356 }), 17357 (e.loadSteeringManifest = function (t) { 17358 var e, 17359 r = this, 17360 i = this.hls.config, 17361 n = i.loader; 17362 this.loader && this.loader.destroy(), (this.loader = new n(i)); 17363 try { 17364 e = new self.URL(t); 17365 } catch (e) { 17366 return (this.enabled = !1), void this.log('Failed to parse Steering Manifest URI: ' + t); 17367 } 17368 if ('data:' !== e.protocol) { 17369 var a = 0 | (this.hls.bandwidthEstimate || i.abrEwmaDefaultEstimate); 17370 e.searchParams.set('_HLS_pathway', this.pathwayId), e.searchParams.set('_HLS_throughput', '' + a); 17371 } 17372 var s = { responseType: 'json', url: e.href }, 17373 o = i.steeringManifestLoadPolicy.default, 17374 l = o.errorRetry || o.timeoutRetry || {}, 17375 u = { 17376 loadPolicy: o, 17377 timeout: o.maxLoadTimeMs, 17378 maxRetry: l.maxNumRetry || 0, 17379 retryDelay: l.retryDelayMs || 0, 17380 maxRetryDelay: l.maxRetryDelayMs || 0, 17381 }, 17382 h = { 17383 onSuccess: function (t, i, n, a) { 17384 r.log('Loaded steering manifest: "' + e + '"'); 17385 var s = t.data; 17386 if (1 === s.VERSION) { 17387 (r.updated = performance.now()), (r.timeToLoad = s.TTL); 17388 var o = s['RELOAD-URI'], 17389 l = s['PATHWAY-CLONES'], 17390 u = s['PATHWAY-PRIORITY']; 17391 if (o) 17392 try { 17393 r.uri = new self.URL(o, e).href; 17394 } catch (t) { 17395 return (r.enabled = !1), void r.log('Failed to parse Steering Manifest RELOAD-URI: ' + o); 17396 } 17397 r.scheduleRefresh(r.uri || n.url), l && r.clonePathways(l), u && r.updatePathwayPriority(u); 17398 } else r.log('Steering VERSION ' + s.VERSION + ' not supported!'); 17399 }, 17400 onError: function (t, e, i, n) { 17401 if ( 17402 (r.log('Error loading steering manifest: ' + t.code + ' ' + t.text + ' (' + e.url + ')'), 17403 r.stopLoad(), 17404 410 === t.code) 17405 ) 17406 return (r.enabled = !1), void r.log('Steering manifest ' + e.url + ' no longer available'); 17407 var a = 1e3 * r.timeToLoad; 17408 if (429 !== t.code) r.scheduleRefresh(r.uri || e.url, a); 17409 else { 17410 var s = r.loader; 17411 if ('function' == typeof (null == s ? void 0 : s.getResponseHeader)) { 17412 var o = s.getResponseHeader('Retry-After'); 17413 o && (a = 1e3 * parseFloat(o)); 17414 } 17415 r.log('Steering manifest ' + e.url + ' rate limited'); 17416 } 17417 }, 17418 onTimeout: function (t, e, i) { 17419 r.log('Timeout loading steering manifest (' + e.url + ')'), r.scheduleRefresh(r.uri || e.url); 17420 }, 17421 }; 17422 this.log('Requesting steering manifest: ' + e), this.loader.load(s, u, h); 17423 }), 17424 (e.scheduleRefresh = function (t, e) { 17425 var r = this; 17426 void 0 === e && (e = 1e3 * this.timeToLoad), 17427 self.clearTimeout(this.reloadTimer), 17428 (this.reloadTimer = self.setTimeout(function () { 17429 r.loadSteeringManifest(t); 17430 }, e)); 17431 }), 17432 t 17433 ); 17434 })(); 17435 function Oa(t, e, r, i) { 17436 t && 17437 Object.keys(e).forEach(function (n) { 17438 var a = t 17439 .filter(function (t) { 17440 return t.groupId === n; 17441 }) 17442 .map(function (t) { 17443 var a = o({}, t); 17444 return ( 17445 (a.details = void 0), 17446 (a.attrs = new P(a.attrs)), 17447 (a.url = a.attrs.URI = Na(t.url, t.attrs['STABLE-RENDITION-ID'], 'PER-RENDITION-URIS', r)), 17448 (a.groupId = a.attrs['GROUP-ID'] = e[n]), 17449 (a.attrs['PATHWAY-ID'] = i), 17450 a 17451 ); 17452 }); 17453 t.push.apply(t, a); 17454 }); 17455 } 17456 function Na(t, e, r, i) { 17457 var n, 17458 a = i.HOST, 17459 s = i.PARAMS, 17460 o = i[r]; 17461 e && (n = null == o ? void 0 : o[e]) && (t = n); 17462 var l = new self.URL(t); 17463 return ( 17464 a && !n && (l.host = a), 17465 s && 17466 Object.keys(s) 17467 .sort() 17468 .forEach(function (t) { 17469 t && l.searchParams.set(t, s[t]); 17470 }), 17471 l.href 17472 ); 17473 } 17474 var Ua = /^age:\s*[\d.]+\s*$/im, 17475 Ba = (function () { 17476 function t(t) { 17477 (this.xhrSetup = void 0), 17478 (this.requestTimeout = void 0), 17479 (this.retryTimeout = void 0), 17480 (this.retryDelay = void 0), 17481 (this.config = null),
17482 (this.callbacks = null), 17483 (this.context = void 0), 17484 (this.loader = null), 17485 (this.stats = void 0), 17486 (this.xhrSetup = (t && t.xhrSetup) || null), 17487 (this.stats = new M()), 17488 (this.retryDelay = 0); 17489 } 17490 var e = t.prototype; 17491 return ( 17492 (e.destroy = function () { 17493 (this.callbacks = null), this.abortInternal(), (this.loader = null), (this.config = null); 17494 }), 17495 (e.abortInternal = function () { 17496 var t = this.loader; 17497 self.clearTimeout(this.requestTimeout), 17498 self.clearTimeout(this.retryTimeout), 17499 t && 17500 ((t.onreadystatechange = null), 17501 (t.onprogress = null), 17502 4 !== t.readyState && ((this.stats.aborted = !0), t.abort())); 17503 }), 17504 (e.abort = function () { 17505 var t; 17506 this.abortInternal(), 17507 null != (t = this.callbacks) && 17508 t.onAbort && 17509 this.callbacks.onAbort(this.stats, this.context, this.loader); 17510 }), 17511 (e.load = function (t, e, r) { 17512 if (this.stats.loading.start) throw new Error('Loader can only be used once.'); 17513 (this.stats.loading.start = self.performance.now()), 17514 (this.context = t), 17515 (this.config = e), 17516 (this.callbacks = r), 17517 this.loadInternal(); 17518 }), 17519 (e.loadInternal = function () { 17520 var t = this, 17521 e = this.config, 17522 r = this.context; 17523 if (e) { 17524 var i = (this.loader = new self.XMLHttpRequest()), 17525 n = this.stats; 17526 (n.loading.first = 0), (n.loaded = 0), (n.aborted = !1); 17527 var a = this.xhrSetup; 17528 a 17529 ? Promise.resolve() 17530 .then(function () { 17531 if (!t.stats.aborted) return a(i, r.url); 17532 }) 17533 .catch(function (t) { 17534 return i.open('GET', r.url, !0), a(i, r.url); 17535 }) 17536 .then(function () { 17537 t.stats.aborted || t.openAndSendXhr(i, r, e); 17538 }) 17539 .catch(function (e) { 17540 t.callbacks.onError({ code: i.status, text: e.message }, r, i, n); 17541 }) 17542 : this.openAndSendXhr(i, r, e); 17543 } 17544 }), 17545 (e.openAndSendXhr = function (t, e, r) { 17546 t.readyState || t.open('GET', e.url, !0); 17547 var i = this.context.headers, 17548 n = r.loadPolicy, 17549 a = n.maxTimeToFirstByteMs, 17550 s = n.maxLoadTimeMs; 17551 if (i) for (var o in i) t.setRequestHeader(o, i[o]); 17552 e.rangeEnd && t.setRequestHeader('Range', 'bytes=' + e.rangeStart + '-' + (e.rangeEnd - 1)), 17553 (t.onreadystatechange = this.readystatechange.bind(this)), 17554 (t.onprogress = this.loadprogress.bind(this)), 17555 (t.responseType = e.responseType), 17556 self.clearTimeout(this.requestTimeout), 17557 (r.timeout = a && E(a) ? a : s), 17558 (this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), r.timeout)), 17559 t.send(); 17560 }), 17561 (e.readystatechange = function () { 17562 var t = this.context, 17563 e = this.loader, 17564 r = this.stats; 17565 if (t && e) { 17566 var i = e.readyState, 17567 n = this.config; 17568 if ( 17569 !r.aborted && 17570 i >= 2 && 17571 (0 === r.loading.first && 17572 ((r.loading.first = Math.max(self.performance.now(), r.loading.start)), 17573 n.timeout !== n.loadPolicy.maxLoadTimeMs && 17574 (self.clearTimeout(this.requestTimeout), 17575 (n.timeout = n.loadPolicy.maxLoadTimeMs), 17576 (this.requestTimeout = self.setTimeout( 17577 this.loadtimeout.bind(this), 17578 n.loadPolicy.maxLoadTimeMs - (r.loading.first - r.loading.start), 17579 )))), 17580 4 === i) 17581 ) { 17582 self.clearTimeout(this.requestTimeout), (e.onreadystatechange = null), (e.onprogress = null); 17583 var a = e.status, 17584 s = 'text' !== e.responseType; 17585 if (a >= 200 && a < 300 && ((s && e.response) || null !== e.responseText)) { 17586 r.loading.end = Math.max(self.performance.now(), r.loading.first); 17587 var o = s ? e.response : e.responseText, 17588 l = 'arraybuffer' === e.responseType ? o.byteLength : o.length; 17589 if ( 17590 ((r.loaded = r.total = l), 17591 (r.bwEstimate = (8e3 * r.total) / (r.loading.end - r.loading.first)), 17592 !this.callbacks) 17593 ) 17594 return; 17595 var u = this.callbacks.onProgress; 17596 if ((u && u(r, t, o, e), !this.callbacks)) return;
17597 var h = { url: e.responseURL, data: o, code: a }; 17598 this.callbacks.onSuccess(h, r, t, e); 17599 } else { 17600 var d = n.loadPolicy.errorRetry; 17601 ze(d, r.retry, !1, a) 17602 ? this.retry(d) 17603 : (w.error(a + ' while loading ' + t.url), 17604 this.callbacks.onError({ code: a, text: e.statusText }, t, e, r)); 17605 } 17606 } 17607 } 17608 }), 17609 (e.loadtimeout = function () { 17610 var t, 17611 e = null == (t = this.config) ? void 0 : t.loadPolicy.timeoutRetry; 17612 if (ze(e, this.stats.retry, !0)) this.retry(e); 17613 else { 17614 w.warn('timeout while loading ' + this.context.url); 17615 var r = this.callbacks; 17616 r && (this.abortInternal(), r.onTimeout(this.stats, this.context, this.loader)); 17617 } 17618 }), 17619 (e.retry = function (t) { 17620 var e = this.context, 17621 r = this.stats; 17622 (this.retryDelay = qe(t, r.retry)), 17623 r.retry++, 17624 w.warn( 17625 (status ? 'HTTP Status ' + status : 'Timeout') + 17626 ' while loading ' + 17627 e.url + 17628 ', retrying ' + 17629 r.retry + 17630 '/' + 17631 t.maxNumRetry + 17632 ' in ' + 17633 this.retryDelay + 17634 'ms', 17635 ), 17636 this.abortInternal(), 17637 (this.loader = null), 17638 self.clearTimeout(this.retryTimeout), 17639 (this.retryTimeout = self.setTimeout(this.loadInternal.bind(this), this.retryDelay)); 17640 }), 17641 (e.loadprogress = function (t) { 17642 var e = this.stats; 17643 (e.loaded = t.loaded), t.lengthComputable && (e.total = t.total); 17644 }), 17645 (e.getCacheAge = function () { 17646 var t = null; 17647 if (this.loader && Ua.test(this.loader.getAllResponseHeaders())) { 17648 var e = this.loader.getResponseHeader('age'); 17649 t = e ? parseFloat(e) : null; 17650 } 17651 return t; 17652 }), 17653 (e.getResponseHeader = function (t) { 17654 return this.loader && 17655 new RegExp('^' + t + ':\\s*[\\d.]+\\s*$', 'im').test(this.loader.getAllResponseHeaders()) 17656 ? this.loader.getResponseHeader(t) 17657 : null; 17658 }), 17659 t 17660 ); 17661 })(), 17662 Ga = /(\d+)-(\d+)\/(\d+)/, 17663 Ka = (function () { 17664 function t(t) { 17665 (this.fetchSetup = void 0), 17666 (this.requestTimeout = void 0), 17667 (this.request = void 0), 17668 (this.response = void 0), 17669 (this.controller = void 0), 17670 (this.context = void 0), 17671 (this.config = null), 17672 (this.callbacks = null),
17673 (this.stats = void 0), 17674 (this.loader = null), 17675 (this.fetchSetup = t.fetchSetup || Ha), 17676 (this.controller = new self.AbortController()), 17677 (this.stats = new M()); 17678 } 17679 var e = t.prototype; 17680 return ( 17681 (e.destroy = function () { 17682 (this.loader = this.callbacks = null), this.abortInternal(); 17683 }), 17684 (e.abortInternal = function () { 17685 var t = this.response; 17686 (null != t && t.ok) || ((this.stats.aborted = !0), this.controller.abort()); 17687 }), 17688 (e.abort = function () { 17689 var t; 17690 this.abortInternal(), 17691 null != (t = this.callbacks) && 17692 t.onAbort && 17693 this.callbacks.onAbort(this.stats, this.context, this.response); 17694 }), 17695 (e.load = function (t, e, r) { 17696 var i = this, 17697 n = this.stats; 17698 if (n.loading.start) throw new Error('Loader can only be used once.'); 17699 n.loading.start = self.performance.now(); 17700 var a = (function (t, e) { 17701 var r = { 17702 method: 'GET', 17703 mode: 'cors', 17704 credentials: 'same-origin', 17705 signal: e, 17706 headers: new self.Headers(o({}, t.headers)), 17707 }; 17708 return ( 17709 t.rangeEnd && r.headers.set('Range', 'bytes=' + t.rangeStart + '-' + String(t.rangeEnd - 1)), r 17710 ); 17711 })(t, this.controller.signal), 17712 s = r.onProgress, 17713 l = 'arraybuffer' === t.responseType, 17714 u = l ? 'byteLength' : 'length', 17715 h = e.loadPolicy, 17716 d = h.maxTimeToFirstByteMs, 17717 c = h.maxLoadTimeMs; 17718 (this.context = t), 17719 (this.config = e), 17720 (this.callbacks = r), 17721 (this.request = this.fetchSetup(t, a)), 17722 self.clearTimeout(this.requestTimeout), 17723 (e.timeout = d && E(d) ? d : c), 17724 (this.requestTimeout = self.setTimeout(function () { 17725 i.abortInternal(), r.onTimeout(n, t, i.response); 17726 }, e.timeout)), 17727 self 17728 .fetch(this.request) 17729 .then(function (a) { 17730 i.response = i.loader = a; 17731 var o = Math.max(self.performance.now(), n.loading.start); 17732 if ( 17733 (self.clearTimeout(i.requestTimeout), 17734 (e.timeout = c), 17735 (i.requestTimeout = self.setTimeout(function () { 17736 i.abortInternal(), r.onTimeout(n, t, i.response); 17737 }, c - (o - n.loading.start))), 17738 !a.ok) 17739 ) { 17740 var u = a.status, 17741 h = a.statusText; 17742 throw new Va(h || 'fetch, bad network response', u, a); 17743 } 17744 return ( 17745 (n.loading.first = o), 17746 (n.total = 17747 (function (t) { 17748 var e = t.get('Content-Range'); 17749 if (e) { 17750 var r = (function (t) { 17751 var e = Ga.exec(t); 17752 if (e) return parseInt(e[2]) - parseInt(e[1]) + 1; 17753 })(e); 17754 if (E(r)) return r; 17755 } 17756 var i = t.get('Content-Length'); 17757 if (i) return parseInt(i); 17758 })(a.headers) || n.total), 17759 s && E(e.highWaterMark) 17760 ? i.loadProgressively(a, n, t, e.highWaterMark, s) 17761 : l 17762 ? a.arrayBuffer() 17763 : 'json' === t.responseType 17764 ? a.json() 17765 : a.text() 17766 ); 17767 }) 17768 .then(function (a) { 17769 var o = i.response; 17770 self.clearTimeout(i.requestTimeout), 17771 (n.loading.end = Math.max(self.performance.now(), n.loading.first)); 17772 var l = a[u]; 17773 l && (n.loaded = n.total = l); 17774 var h = { url: o.url, data: a, code: o.status }; 17775 s && !E(e.highWaterMark) && s(n, t, a, o), r.onSuccess(h, n, t, o); 17776 }) 17777 .catch(function (e) { 17778 if ((self.clearTimeout(i.requestTimeout), !n.aborted)) { 17779 var a = (e && e.code) || 0, 17780 s = e ? e.message : null; 17781 r.onError({ code: a, text: s }, t, e ? e.details : null, n); 17782 } 17783 }); 17784 }), 17785 (e.getCacheAge = function () { 17786 var t = null; 17787 if (this.response) { 17788 var e = this.response.headers.get('age'); 17789 t = e ? parseFloat(e) : null; 17790 } 17791 return t; 17792 }), 17793 (e.getResponseHeader = function (t) { 17794 return this.response ? this.response.headers.get(t) : null; 17795 }), 17796 (e.loadProgressively = function (t, e, r, i, n) { 17797 void 0 === i && (i = 0); 17798 var a = new mn(), 17799 s = t.body.getReader(); 17800 return (function o() { 17801 return s 17802 .read() 17803 .then(function (s) { 17804 if (s.done) return a.dataLength && n(e, r, a.flush(), t), Promise.resolve(new ArrayBuffer(0)); 17805 var l = s.value, 17806 u = l.length; 17807 return ( 17808 (e.loaded += u), 17809 u < i || a.dataLength ? (a.push(l), a.dataLength >= i && n(e, r, a.flush(), t)) : n(e, r, l, t), 17810 o() 17811 ); 17812 }) 17813 .catch(function () { 17814 return Promise.reject(); 17815 }); 17816 })(); 17817 }), 17818 t 17819 ); 17820 })(); 17821 function Ha(t, e) {
17822 return new self.Request(t.url, e); 17823 } 17824 var Va = (function (t) { 17825 function e(e, r, i) { 17826 var n; 17827 return ( 17828 ((n = t.call(this, e) || this).code = void 0), (n.details = void 0), (n.code = r), (n.details = i), n 17829 ); 17830 } 17831 return l(e, t), e; 17832 })(f(Error)), 17833 Ya = /\s/, 17834 Wa = i( 17835 i( 17836 { 17837 autoStartLoad: !0, 17838 startPosition: -1, 17839 defaultAudioCodec: void 0, 17840 debug: !1, 17841 capLevelOnFPSDrop: !1, 17842 capLevelToPlayerSize: !1, 17843 ignoreDevicePixelRatio: !1, 17844 initialLiveManifestSize: 1, 17845 maxBufferLength: 30, 17846 backBufferLength: 1 / 0, 17847 maxBufferSize: 6e7, 17848 maxBufferHole: 0.1, 17849 highBufferWatchdogPeriod: 2, 17850 nudgeOffset: 0.1, 17851 nudgeMaxRetry: 3, 17852 maxFragLookUpTolerance: 0.25, 17853 liveSyncDurationCount: 3, 17854 liveMaxLatencyDurationCount: 1 / 0, 17855 liveSyncDuration: void 0, 17856 liveMaxLatencyDuration: void 0, 17857 maxLiveSyncPlaybackRate: 1, 17858 liveDurationInfinity: !1, 17859 liveBackBufferLength: null, 17860 maxMaxBufferLength: 600, 17861 enableWorker: !0, 17862 workerPath: null, 17863 enableSoftwareAES: !0, 17864 startLevel: void 0, 17865 startFragPrefetch: !1, 17866 fpsDroppedMonitoringPeriod: 5e3, 17867 fpsDroppedMonitoringThreshold: 0.2, 17868 appendErrorMaxRetry: 3, 17869 loader: Ba, 17870 fLoader: void 0, 17871 pLoader: void 0, 17872 xhrSetup: void 0, 17873 licenseXhrSetup: void 0, 17874 licenseResponseCallback: void 0, 17875 abrController: vn, 17876 bufferController: In, 17877 capLevelController: Ra, 17878 errorController: lr, 17879 fpsController: Aa, 17880 stretchShortVideoTrack: !1, 17881 maxAudioFramesDrift: 1, 17882 forceKeyFrameOnDiscontinuity: !0, 17883 abrEwmaFastLive: 3, 17884 abrEwmaSlowLive: 9, 17885 abrEwmaFastVoD: 3, 17886 abrEwmaSlowVoD: 9, 17887 abrEwmaDefaultEstimate: 5e5, 17888 abrBandWidthFactor: 0.95, 17889 abrBandWidthUpFactor: 0.7, 17890 abrMaxWithRealBitrate: !1, 17891 maxStarvationDelay: 4, 17892 maxLoadingDelay: 4, 17893 minAutoBitrate: 0, 17894 emeEnabled: !1, 17895 widevineLicenseUrl: void 0, 17896 drmSystems: {}, 17897 drmSystemOptions: {}, 17898 requestMediaKeySystemAccessFunc: et, 17899 testBandwidth: !0, 17900 progressive: !1, 17901 lowLatencyMode: !0, 17902 cmcd: void 0, 17903 enableDateRangeMetadataCues: !0, 17904 enableEmsgMetadataCues: !0, 17905 enableID3MetadataCues: !0, 17906 certLoadPolicy: { 17907 default: { maxTimeToFirstByteMs: 8e3, maxLoadTimeMs: 2e4, timeoutRetry: null, errorRetry: null }, 17908 }, 17909 keyLoadPolicy: { 17910 default: { 17911 maxTimeToFirstByteMs: 8e3, 17912 maxLoadTimeMs: 2e4, 17913 timeoutRetry: { maxNumRetry: 1, retryDelayMs: 1e3, maxRetryDelayMs: 2e4, backoff: 'linear' }, 17914 errorRetry: { maxNumRetry: 8, retryDelayMs: 1e3, maxRetryDelayMs: 2e4, backoff: 'linear' }, 17915 }, 17916 }, 17917 manifestLoadPolicy: { 17918 default: { 17919 maxTimeToFirstByteMs: 1 / 0, 17920 maxLoadTimeMs: 2e4, 17921 timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, 17922 errorRetry: { maxNumRetry: 1, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 }, 17923 }, 17924 }, 17925 playlistLoadPolicy: { 17926 default: { 17927 maxTimeToFirstByteMs: 1e4, 17928 maxLoadTimeMs: 2e4, 17929 timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, 17930 errorRetry: { maxNumRetry: 2, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 }, 17931 }, 17932 }, 17933 fragLoadPolicy: { 17934 default: { 17935 maxTimeToFirstByteMs: 1e4, 17936 maxLoadTimeMs: 12e4, 17937 timeoutRetry: { maxNumRetry: 4, retryDelayMs: 0, maxRetryDelayMs: 0 }, 17938 errorRetry: { maxNumRetry: 6, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 }, 17939 }, 17940 }, 17941 steeringManifestLoadPolicy: { 17942 default: { 17943 maxTimeToFirstByteMs: 1e4, 17944 maxLoadTimeMs: 2e4, 17945 timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, 17946 errorRetry: { maxNumRetry: 1, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 }, 17947 }, 17948 }, 17949 manifestLoadingTimeOut: 1e4, 17950 manifestLoadingMaxRetry: 1, 17951 manifestLoadingRetryDelay: 1e3, 17952 manifestLoadingMaxRetryTimeout: 64e3, 17953 levelLoadingTimeOut: 1e4, 17954 levelLoadingMaxRetry: 4, 17955 levelLoadingRetryDelay: 1e3, 17956 levelLoadingMaxRetryTimeout: 64e3, 17957 fragLoadingTimeOut: 2e4, 17958 fragLoadingMaxRetry: 6, 17959 fragLoadingRetryDelay: 1e3, 17960 fragLoadingMaxRetryTimeout: 64e3, 17961 }, 17962 { 17963 cueHandler: { 17964 newCue: function (t, e, r, i) { 17965 for (var n, a, s, o, l, u = [], h = self.VTTCue || self.TextTrackCue, d = 0; d < i.rows.length; d++) 17966 if (((s = !0), (o = 0), (l = ''), !(n = i.rows[d]).isEmpty())) { 17967 for (var c, f = 0; f < n.chars.length; f++) 17968 Ya.test(n.chars[f].uchar) && s ? o++ : ((l += n.chars[f].uchar), (s = !1)); 17969 (n.cueStartTime = e), e === r && (r += 1e-4), o >= 16 ? o-- : o++; 17970 var g = ia(l.trim()), 17971 v = la(e, r, g); 17972 (null != t && null != (c = t.cues) && c.getCueById(v)) || 17973 (((a = new h(e, r, g)).id = v), 17974 (a.line = d + 1), 17975 (a.align = 'left'), 17976 (a.position = 10 + Math.min(80, 10 * Math.floor((8 * o) / 32))), 17977 u.push(a)); 17978 } 17979 return ( 17980 t && 17981 u.length && 17982 (u.sort(function (t, e) { 17983 return 'auto' === t.line || 'auto' === e.line 17984 ? 0 17985 : t.line > 8 && e.line > 8 17986 ? e.line - t.line 17987 : t.line - e.line; 17988 }), 17989 u.forEach(function (e) { 17990 return Se(t, e); 17991 })), 17992 u 17993 ); 17994 }, 17995 }, 17996 enableWebVTT: !0, 17997 enableIMSC1: !0, 17998 enableCEA708Captions: !0, 17999 captionsTextTrack1Label: 'English', 18000 captionsTextTrack1LanguageCode: 'en', 18001 captionsTextTrack2Label: 'Spanish', 18002 captionsTextTrack2LanguageCode: 'es', 18003 captionsTextTrack3Label: 'Unknown CC', 18004 captionsTextTrack3LanguageCode: '', 18005 captionsTextTrack4Label: 'Unknown CC', 18006 captionsTextTrack4LanguageCode: '', 18007 renderTextTracksNatively: !0, 18008 }, 18009 ), 18010 {}, 18011 { 18012 subtitleStreamController: Sn, 18013 subtitleTrackController: Rn, 18014 timelineController: Sa, 18015 audioStreamController: pn, 18016 audioTrackController: yn, 18017 emeController: ba, 18018 cmcdController: Fa, 18019 contentSteeringController: Ma, 18020 }, 18021 ); 18022 function ja(t) { 18023 return t && 'object' == typeof t 18024 ? Array.isArray(t) 18025 ? t.map(ja) 18026 : Object.keys(t).reduce(function (e, r) { 18027 return (e[r] = ja(t[r])), e; 18028 }, {}) 18029 : t; 18030 } 18031 function qa(t) { 18032 var e = t.loader; 18033 e !== Ka && e !== Ba 18034 ? (w.log('[config]: Custom loader detected, cannot enable progressive streaming'), (t.progressive = !1)) 18035 : (function () { 18036 if (self.fetch && self.AbortController && self.ReadableStream && self.Request) 18037 try { 18038 return new self.ReadableStream({}), !0; 18039 } catch (t) {} 18040 return !1; 18041 })() && 18042 ((t.loader = Ka), 18043 (t.progressive = !0),
18044 (t.enableSoftwareAES = !0), 18045 w.log('[config]: Progressive streaming enabled, using FetchLoader')); 18046 } 18047 var Xa = (function () { 18048 function t(e) { 18049 void 0 === e && (e = {}), 18050 (this.config = void 0), 18051 (this.userConfig = void 0), 18052 (this.coreComponents = void 0), 18053 (this.networkControllers = void 0), 18054 (this._emitter = new an()), 18055 (this._autoLevelCapping = void 0), 18056 (this._maxHdcpLevel = null), 18057 (this.abrController = void 0), 18058 (this.bufferController = void 0), 18059 (this.capLevelController = void 0), 18060 (this.latencyController = void 0), 18061 (this.levelController = void 0), 18062 (this.streamController = void 0), 18063 (this.audioTrackController = void 0), 18064 (this.subtitleTrackController = void 0), 18065 (this.emeController = void 0), 18066 (this.cmcdController = void 0), 18067 (this._media = null), 18068 (this.url = null), 18069 I(e.debug || !1, 'Hls instance'); 18070 var r = (this.config = (function (t, e) { 18071 if ( 18072 (e.liveSyncDurationCount || e.liveMaxLatencyDurationCount) && 18073 (e.liveSyncDuration || e.liveMaxLatencyDuration) 18074 ) 18075 throw new Error( 18076 "Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration", 18077 ); 18078 if ( 18079 void 0 !== e.liveMaxLatencyDurationCount && 18080 (void 0 === e.liveSyncDurationCount || e.liveMaxLatencyDurationCount <= e.liveSyncDurationCount) 18081 ) 18082 throw new Error( 18083 'Illegal hls.js config: "liveMaxLatencyDurationCount" must be greater than "liveSyncDurationCount"', 18084 ); 18085 if ( 18086 void 0 !== e.liveMaxLatencyDuration && 18087 (void 0 === e.liveSyncDuration || e.liveMaxLatencyDuration <= e.liveSyncDuration) 18088 ) 18089 throw new Error( 18090 'Illegal hls.js config: "liveMaxLatencyDuration" must be greater than "liveSyncDuration"', 18091 ); 18092 var r = ja(t), 18093 n = ['TimeOut', 'MaxRetry', 'RetryDelay', 'MaxRetryTimeout']; 18094 return ( 18095 ['manifest', 'level', 'frag'].forEach(function (t) { 18096 var i = ('level' === t ? 'playlist' : t) + 'LoadPolicy', 18097 a = void 0 === e[i], 18098 s = []; 18099 n.forEach(function (n) { 18100 var o = t + 'Loading' + n, 18101 l = e[o]; 18102 if (void 0 !== l && a) { 18103 s.push(o); 18104 var u = r[i].default; 18105 switch (((e[i] = { default: u }), n)) { 18106 case 'TimeOut': 18107 (u.maxLoadTimeMs = l), (u.maxTimeToFirstByteMs = l); 18108 break; 18109 case 'MaxRetry': 18110 (u.errorRetry.maxNumRetry = l), (u.timeoutRetry.maxNumRetry = l); 18111 break; 18112 case 'RetryDelay': 18113 (u.errorRetry.retryDelayMs = l), (u.timeoutRetry.retryDelayMs = l); 18114 break; 18115 case 'MaxRetryTimeout': 18116 (u.errorRetry.maxRetryDelayMs = l), (u.timeoutRetry.maxRetryDelayMs = l); 18117 } 18118 } 18119 }), 18120 s.length && 18121 w.warn( 18122 'hls.js config: "' + 18123 s.join('", "') + 18124 '" setting(s) are deprecated, use "' + 18125 i + 18126 '": ' + 18127 JSON.stringify(e[i]), 18128 ); 18129 }), 18130 i(i({}, r), e) 18131 ); 18132 })(t.DefaultConfig, e)); 18133 (this.userConfig = e), (this._autoLevelCapping = -1), r.progressive && qa(r); 18134 var n = r.abrController, 18135 a = r.bufferController, 18136 s = r.capLevelController, 18137 o = r.errorController, 18138 l = r.fpsController, 18139 u = new o(this), 18140 h = (this.abrController = new n(this)), 18141 d = (this.bufferController = new a(this)), 18142 c = (this.capLevelController = new s(this)), 18143 f = new l(this), 18144 g = new Te(this), 18145 v = new Ce(this), 18146 m = r.contentSteeringController, 18147 p = m ? new m(this) : null, 18148 y = (this.levelController = new hr(this, p)), 18149 T = new pr(this), 18150 E = new kr(this.config), 18151 L = (this.streamController = new cn(this, T, E)); 18152 c.setStreamController(L), f.setStreamController(L); 18153 var R = [g, y, L]; 18154 p && R.splice(1, 0, p), (this.networkControllers = R); 18155 var A = [h, d, c, f, v, T]; 18156 this.audioTrackController = this.createController(r.audioTrackController, R); 18157 var k = r.audioStreamController; 18158 k && R.push(new k(this, T, E)), 18159 (this.subtitleTrackController = this.createController(r.subtitleTrackController, R)); 18160 var b = r.subtitleStreamController; 18161 b && R.push(new b(this, T, E)), 18162 this.createController(r.timelineController, A), 18163 (E.emeController = this.emeController = this.createController(r.emeController, A)), 18164 (this.cmcdController = this.createController(r.cmcdController, A)), 18165 (this.latencyController = this.createController(_e, A)), 18166 (this.coreComponents = A), 18167 R.push(u); 18168 var D = u.onErrorOut; 18169 'function' == typeof D && this.on(S.ERROR, D, u); 18170 } 18171 t.isSupported = function () { 18172 return (function () { 18173 var t = qt(); 18174 if (!t) return !1; 18175 var e = Zr(), 18176 r = 18177 t &&
18178 'function' == typeof t.isTypeSupported && 18179 t.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'), 18180 i = 18181 !e || 18182 (e.prototype && 18183 'function' == typeof e.prototype.appendBuffer && 18184 'function' == typeof e.prototype.remove); 18185 return !!r && !!i; 18186 })(); 18187 }; 18188 var e = t.prototype; 18189 return ( 18190 (e.createController = function (t, e) { 18191 if (t) { 18192 var r = new t(this); 18193 return e && e.push(r), r; 18194 } 18195 return null; 18196 }), 18197 (e.on = function (t, e, r) { 18198 void 0 === r && (r = this), this._emitter.on(t, e, r); 18199 }), 18200 (e.once = function (t, e, r) { 18201 void 0 === r && (r = this), this._emitter.once(t, e, r); 18202 }), 18203 (e.removeAllListeners = function (t) { 18204 this._emitter.removeAllListeners(t); 18205 }), 18206 (e.off = function (t, e, r, i) { 18207 void 0 === r && (r = this), this._emitter.off(t, e, r, i); 18208 }), 18209 (e.listeners = function (t) { 18210 return this._emitter.listeners(t); 18211 }), 18212 (e.emit = function (t, e, r) { 18213 return this._emitter.emit(t, e, r); 18214 }), 18215 (e.trigger = function (t, e) { 18216 if (this.config.debug) return this.emit(t, t, e); 18217 try { 18218 return this.emit(t, t, e); 18219 } catch (e) { 18220 w.error( 18221 'An internal error happened while handling event ' + 18222 t + 18223 '. Error message: "' + 18224 e.message + 18225 '". Here is a stacktrace:', 18226 e, 18227 ), 18228 this.trigger(S.ERROR, { 18229 type: L.OTHER_ERROR, 18230 details: R.INTERNAL_EXCEPTION, 18231 fatal: !1, 18232 event: t, 18233 error: e, 18234 }); 18235 } 18236 return !1; 18237 }), 18238 (e.listenerCount = function (t) { 18239 return this._emitter.listenerCount(t); 18240 }), 18241 (e.destroy = function () { 18242 w.log('destroy'), 18243 this.trigger(S.DESTROYING, void 0), 18244 this.detachMedia(), 18245 this.removeAllListeners(), 18246 (this._autoLevelCapping = -1), 18247 (this.url = null), 18248 this.networkControllers.forEach(function (t) { 18249 return t.destroy(); 18250 }), 18251 (this.networkControllers.length = 0), 18252 this.coreComponents.forEach(function (t) { 18253 return t.destroy(); 18254 }), 18255 (this.coreComponents.length = 0); 18256 var t = this.config; 18257 (t.xhrSetup = t.fetchSetup = void 0), (this.userConfig = null); 18258 }), 18259 (e.attachMedia = function (t) { 18260 w.log('attachMedia'), (this._media = t), this.trigger(S.MEDIA_ATTACHING, { media: t }); 18261 }), 18262 (e.detachMedia = function () { 18263 w.log('detachMedia'), this.trigger(S.MEDIA_DETACHING, void 0), (this._media = null); 18264 }), 18265 (e.loadSource = function (t) { 18266 this.stopLoad(); 18267 var e = this.media, 18268 r = this.url, 18269 i = (this.url = T.buildAbsoluteURL(self.location.href, t, { alwaysNormalize: !0 })); 18270 w.log('loadSource:' + i), 18271 e && 18272 r && 18273 (r !== i || this.bufferController.hasSourceTypes()) && 18274 (this.detachMedia(), this.attachMedia(e)), 18275 this.trigger(S.MANIFEST_LOADING, { url: t }); 18276 }), 18277 (e.startLoad = function (t) { 18278 void 0 === t && (t = -1), 18279 w.log('startLoad(' + t + ')'), 18280 this.networkControllers.forEach(function (e) { 18281 e.startLoad(t); 18282 }); 18283 }), 18284 (e.stopLoad = function () { 18285 w.log('stopLoad'), 18286 this.networkControllers.forEach(function (t) { 18287 t.stopLoad(); 18288 }); 18289 }), 18290 (e.swapAudioCodec = function () { 18291 w.log('swapAudioCodec'), this.streamController.swapAudioCodec(); 18292 }), 18293 (e.recoverMediaError = function () { 18294 w.log('recoverMediaError'); 18295 var t = this._media; 18296 this.detachMedia(), t && this.attachMedia(t); 18297 }), 18298 (e.removeLevel = function (t, e) { 18299 void 0 === e && (e = 0), this.levelController.removeLevel(t, e); 18300 }), 18301 a( 18302 t, 18303 [ 18304 { 18305 key: 'levels', 18306 get: function () { 18307 var t = this.levelController.levels; 18308 return t || []; 18309 }, 18310 }, 18311 { 18312 key: 'currentLevel', 18313 get: function () { 18314 return this.streamController.currentLevel; 18315 }, 18316 set: function (t) { 18317 w.log('set currentLevel:' + t), 18318 (this.loadLevel = t), 18319 this.abrController.clearTimer(), 18320 this.streamController.immediateLevelSwitch(); 18321 }, 18322 }, 18323 { 18324 key: 'nextLevel', 18325 get: function () { 18326 return this.streamController.nextLevel; 18327 }, 18328 set: function (t) { 18329 w.log('set nextLevel:' + t), 18330 (this.levelController.manualLevel = t), 18331 this.streamController.nextLevelSwitch(); 18332 }, 18333 }, 18334 { 18335 key: 'loadLevel', 18336 get: function () { 18337 return this.levelController.level; 18338 }, 18339 set: function (t) { 18340 w.log('set loadLevel:' + t), (this.levelController.manualLevel = t); 18341 }, 18342 }, 18343 {
18344 key: 'nextLoadLevel', 18345 get: function () { 18346 return this.levelController.nextLoadLevel; 18347 }, 18348 set: function (t) { 18349 this.levelController.nextLoadLevel = t; 18350 }, 18351 }, 18352 { 18353 key: 'firstLevel', 18354 get: function () { 18355 return Math.max(this.levelController.firstLevel, this.minAutoLevel); 18356 }, 18357 set: function (t) { 18358 w.log('set firstLevel:' + t), (this.levelController.firstLevel = t); 18359 }, 18360 }, 18361 { 18362 key: 'startLevel', 18363 get: function () { 18364 return this.levelController.startLevel; 18365 }, 18366 set: function (t) { 18367 w.log('set startLevel:' + t), 18368 -1 !== t && (t = Math.max(t, this.minAutoLevel)), 18369 (this.levelController.startLevel = t); 18370 }, 18371 }, 18372 { 18373 key: 'capLevelToPlayerSize', 18374 get: function () { 18375 return this.config.capLevelToPlayerSize; 18376 }, 18377 set: function (t) { 18378 var e = !!t; 18379 e !== this.config.capLevelToPlayerSize && 18380 (e 18381 ? this.capLevelController.startCapping() 18382 : (this.capLevelController.stopCapping(), 18383 (this.autoLevelCapping = -1), 18384 this.streamController.nextLevelSwitch()), 18385 (this.config.capLevelToPlayerSize = e)); 18386 }, 18387 }, 18388 { 18389 key: 'autoLevelCapping', 18390 get: function () { 18391 return this._autoLevelCapping; 18392 }, 18393 set: function (t) { 18394 this._autoLevelCapping !== t && (w.log('set autoLevelCapping:' + t), (this._autoLevelCapping = t)); 18395 }, 18396 }, 18397 { 18398 key: 'bandwidthEstimate', 18399 get: function () { 18400 var t = this.abrController.bwEstimator; 18401 return t ? t.getEstimate() : NaN; 18402 }, 18403 }, 18404 { 18405 key: 'ttfbEstimate', 18406 get: function () { 18407 var t = this.abrController.bwEstimator; 18408 return t ? t.getEstimateTTFB() : NaN; 18409 }, 18410 }, 18411 { 18412 key: 'maxHdcpLevel', 18413 get: function () { 18414 return this._maxHdcpLevel; 18415 }, 18416 set: function (t) { 18417 Pe.indexOf(t) > -1 && (this._maxHdcpLevel = t); 18418 }, 18419 }, 18420 { 18421 key: 'autoLevelEnabled', 18422 get: function () { 18423 return -1 === this.levelController.manualLevel; 18424 }, 18425 }, 18426 { 18427 key: 'manualLevel', 18428 get: function () { 18429 return this.levelController.manualLevel; 18430 }, 18431 }, 18432 { 18433 key: 'minAutoLevel', 18434 get: function () { 18435 var t = this.levels, 18436 e = this.config.minAutoBitrate; 18437 if (!t) return 0; 18438 for (var r = t.length, i = 0; i < r; i++) if (t[i].maxBitrate >= e) return i; 18439 return 0; 18440 }, 18441 }, 18442 { 18443 key: 'maxAutoLevel', 18444 get: function () { 18445 var t, 18446 e = this.levels, 18447 r = this.autoLevelCapping, 18448 i = this.maxHdcpLevel; 18449 if (((t = -1 === r && e && e.length ? e.length - 1 : r), i)) 18450 for (var n = t; n--; ) { 18451 var a = e[n].attrs['HDCP-LEVEL']; 18452 if (a && a <= i) return n; 18453 } 18454 return t; 18455 }, 18456 }, 18457 { 18458 key: 'nextAutoLevel', 18459 get: function () { 18460 return Math.min(Math.max(this.abrController.nextAutoLevel, this.minAutoLevel), this.maxAutoLevel); 18461 }, 18462 set: function (t) { 18463 this.abrController.nextAutoLevel = Math.max(this.minAutoLevel, t); 18464 }, 18465 }, 18466 { 18467 key: 'playingDate', 18468 get: function () { 18469 return this.streamController.currentProgramDateTime; 18470 }, 18471 }, 18472 { 18473 key: 'mainForwardBufferInfo', 18474 get: function () { 18475 return this.streamController.getMainFwdBufferInfo(); 18476 }, 18477 }, 18478 { 18479 key: 'audioTracks', 18480 get: function () { 18481 var t = this.audioTrackController; 18482 return t ? t.audioTracks : []; 18483 }, 18484 }, 18485 { 18486 key: 'audioTrack', 18487 get: function () { 18488 var t = this.audioTrackController; 18489 return t ? t.audioTrack : -1; 18490 }, 18491 set: function (t) { 18492 var e = this.audioTrackController; 18493 e && (e.audioTrack = t); 18494 }, 18495 }, 18496 { 18497 key: 'subtitleTracks', 18498 get: function () { 18499 var t = this.subtitleTrackController; 18500 return t ? t.subtitleTracks : []; 18501 }, 18502 }, 18503 { 18504 key: 'subtitleTrack', 18505 get: function () { 18506 var t = this.subtitleTrackController; 18507 return t ? t.subtitleTrack : -1; 18508 }, 18509 set: function (t) { 18510 var e = this.subtitleTrackController; 18511 e && (e.subtitleTrack = t); 18512 }, 18513 }, 18514 { 18515 key: 'media', 18516 get: function () { 18517 return this._media; 18518 }, 18519 }, 18520 { 18521 key: 'subtitleDisplay', 18522 get: function () { 18523 var t = this.subtitleTrackController; 18524 return !!t && t.subtitleDisplay; 18525 }, 18526 set: function (t) { 18527 var e = this.subtitleTrackController; 18528 e && (e.subtitleDisplay = t); 18529 }, 18530 }, 18531 { 18532 key: 'lowLatencyMode', 18533 get: function () { 18534 return this.config.lowLatencyMode; 18535 }, 18536 set: function (t) { 18537 this.config.lowLatencyMode = t; 18538 }, 18539 }, 18540 { 18541 key: 'liveSyncPosition', 18542 get: function () { 18543 return this.latencyController.liveSyncPosition; 18544 }, 18545 }, 18546 { 18547 key: 'latency', 18548 get: function () { 18549 return this.latencyController.latency; 18550 }, 18551 }, 18552 { 18553 key: 'maxLatency', 18554 get: function () { 18555 return this.latencyController.maxLatency; 18556 }, 18557 }, 18558 { 18559 key: 'targetLatency', 18560 get: function () { 18561 return this.latencyController.targetLatency; 18562 }, 18563 }, 18564 { 18565 key: 'drift', 18566 get: function () { 18567 return this.latencyController.drift; 18568 }, 18569 }, 18570 { 18571 key: 'forceStartLoad', 18572 get: function () { 18573 return this.streamController.forceStartLoad; 18574 }, 18575 }, 18576 ], 18577 [ 18578 { 18579 key: 'version', 18580 get: function () { 18581 return '1.4.12'; 18582 }, 18583 }, 18584 { 18585 key: 'Events', 18586 get: function () { 18587 return S; 18588 }, 18589 }, 18590 { 18591 key: 'ErrorTypes', 18592 get: function () { 18593 return L; 18594 }, 18595 }, 18596 { 18597 key: 'ErrorDetails', 18598 get: function () { 18599 return R; 18600 }, 18601 }, 18602 { 18603 key: 'DefaultConfig', 18604 get: function () { 18605 return t.defaultConfig ? t.defaultConfig : Wa; 18606 }, 18607 set: function (e) { 18608 t.defaultConfig = e; 18609 }, 18610 }, 18611 ], 18612 ), 18613 t 18614 ); 18615 })(); 18616 return (Xa.defaultConfig = void 0), Xa; 18617 }), 18618 'object' == typeof exports && 'undefined' != typeof module 18619 ? (module.exports = i()) 18620 : 'function' == typeof define && define.amd 18621 ? define(i) 18622 : ((r = 'undefined' != typeof globalThis ? globalThis : r || self).Hls = i()); 18623})(!1); 18624//# sourceMappingURL=hls.min.js.map
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.