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 var r, a, s; 24 (r = t), 25 (a = e), 26 (s = i[e]), 27 (a = n(a)) in r 28 ? Object.defineProperty(r, a, { 29 value: s, 30 enumerable: !0, 31 configurable: !0, 32 writable: !0, 33 }) 34 : (r[a] = s); 35 }) 36 : Object.getOwnPropertyDescriptors 37 ? Object.defineProperties(t, Object.getOwnPropertyDescriptors(i)) 38 : r(Object(i)).forEach(function (e) { 39 Object.defineProperty(t, e, Object.getOwnPropertyDescriptor(i, e)); 40 }); 41 } 42 return t; 43 } 44 function n(t) { 45 var e = (function (t, e) { 46 if ('object' != typeof t || !t) return t; 47 var r = t[Symbol.toPrimitive]; 48 if (void 0 !== r) { 49 var i = r.call(t, e || 'default'); 50 if ('object' != typeof i) return i; 51 throw new TypeError('@@toPrimitive must return a primitive value.'); 52 } 53 return ('string' === e ? String : Number)(t); 54 })(t, 'string'); 55 return 'symbol' == typeof e ? e : String(e); 56 } 57 function a(t, e) { 58 for (var r = 0; r < e.length; r++) { 59 var i = e[r]; 60 (i.enumerable = i.enumerable || !1), 61 (i.configurable = !0), 62 'value' in i && (i.writable = !0), 63 Object.defineProperty(t, n(i.key), i); 64 } 65 } 66 function s(t, e, r) { 67 return ( 68 e && a(t.prototype, e), 69 r && a(t, r), 70 Object.defineProperty(t, 'prototype', { writable: !1 }), 71 t 72 ); 73 } 74 function o() { 75 return ( 76 (o = Object.assign 77 ? Object.assign.bind() 78 : function (t) { 79 for (var e = 1; e < arguments.length; e++) { 80 var r = arguments[e]; 81 for (var i in r) Object.prototype.hasOwnProperty.call(r, i) && (t[i] = r[i]); 82 } 83 return t; 84 }), 85 o.apply(this, arguments) 86 ); 87 } 88 function l(t, e) { 89 (t.prototype = Object.create(e.prototype)), (t.prototype.constructor = t), h(t, e); 90 } 91 function u(t) { 92 return ( 93 (u = Object.setPrototypeOf 94 ? Object.getPrototypeOf.bind() 95 : function (t) { 96 return t.__proto__ || Object.getPrototypeOf(t); 97 }), 98 u(t) 99 ); 100 } 101 function h(t, e) { 102 return ( 103 (h = Object.setPrototypeOf 104 ? Object.setPrototypeOf.bind() 105 : function (t, e) { 106 return (t.__proto__ = e), t; 107 }), 108 h(t, e) 109 ); 110 } 111 function d(t, e, r) { 112 return ( 113 (d = (function () { 114 if ('undefined' == typeof Reflect || !Reflect.construct) return !1; 115 if (Reflect.construct.sham) return !1; 116 if ('function' == typeof Proxy) return !0; 117 try { 118 return ( 119 Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})), !0 120 ); 121 } catch (t) { 122 return !1; 123 } 124 })() 125 ? Reflect.construct.bind() 126 : function (t, e, r) { 127 var i = [null]; 128 i.push.apply(i, e); 129 var n = new (Function.bind.apply(t, i))(); 130 return r && h(n, r.prototype), n; 131 }), 132 d.apply(null, arguments) 133 ); 134 } 135 function c(t) { 136 var e = 'function' == typeof Map ? new Map() : void 0; 137 return ( 138 (c = function (t) { 139 if ( 140 null === t || 141 !(function (t) { 142 try { 143 return -1 !== Function.toString.call(t).indexOf('[native code]'); 144 } catch (e) { 145 return 'function' == typeof t; 146 } 147 })(t) 148 ) 149 return t; 150 if ('function' != typeof t) 151 throw new TypeError('Super expression must either be null or a function'); 152 if (void 0 !== e) { 153 if (e.has(t)) return e.get(t); 154 e.set(t, r); 155 } 156 function r() { 157 return d(t, arguments, u(this).constructor); 158 } 159 return ( 160 (r.prototype = Object.create(t.prototype, { 161 constructor: { value: r, enumerable: !1, writable: !0, configurable: !0 },
162 })), 163 h(r, t) 164 ); 165 }), 166 c(t) 167 ); 168 } 169 function f(t, e) { 170 (null == e || e > t.length) && (e = t.length); 171 for (var r = 0, i = new Array(e); r < e; r++) i[r] = t[r]; 172 return i; 173 } 174 function g(t, e) { 175 var r = ('undefined' != typeof Symbol && t[Symbol.iterator]) || t['@@iterator']; 176 if (r) return (r = r.call(t)).next.bind(r); 177 if ( 178 Array.isArray(t) || 179 (r = (function (t, e) { 180 if (t) { 181 if ('string' == typeof t) return f(t, e); 182 var r = Object.prototype.toString.call(t).slice(8, -1); 183 return ( 184 'Object' === r && t.constructor && (r = t.constructor.name), 185 'Map' === r || 'Set' === r 186 ? Array.from(t) 187 : 'Arguments' === r || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r) 188 ? f(t, e) 189 : void 0 190 ); 191 } 192 })(t)) || 193 (e && t && 'number' == typeof t.length) 194 ) { 195 r && (t = r); 196 var i = 0; 197 return function () { 198 return i >= t.length ? { done: !0 } : { done: !1, value: t[i++] }; 199 }; 200 } 201 throw new TypeError( 202 'Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.' 203 ); 204 } 205 function v(t) { 206 return t && t.__esModule && Object.prototype.hasOwnProperty.call(t, 'default') 207 ? t.default 208 : t; 209 } 210 var m = { exports: {} }; 211 !(function (t, e) { 212 var r, i, n, a, s; 213 (r = 214 /^(?=((?:[a-zA-Z0-9+\-.]+:)?))\1(?=((?:\/\/[^\/?#]*)?))\2(?=((?:(?:[^?#\/]*\/)*[^;?#\/]*)?))\3((?:;[^?#]*)?)(\?[^#]*)?(#[^]*)?$/), 215 (i = /^(?=([^\/?#]*))\1([^]*)$/), 216 (n = /(?:\/|^)\.(?=\/)/g), 217 (a = /(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g), 218 (s = { 219 buildAbsoluteURL: function (t, e, r) { 220 if (((r = r || {}), (t = t.trim()), !(e = e.trim()))) { 221 if (!r.alwaysNormalize) return t; 222 var n = s.parseURL(t); 223 if (!n) throw new Error('Error trying to parse base URL.'); 224 return (n.path = s.normalizePath(n.path)), s.buildURLFromParts(n); 225 } 226 var a = s.parseURL(e); 227 if (!a) throw new Error('Error trying to parse relative URL.'); 228 if (a.scheme) 229 return r.alwaysNormalize 230 ? ((a.path = s.normalizePath(a.path)), s.buildURLFromParts(a)) 231 : e; 232 var o = s.parseURL(t); 233 if (!o) throw new Error('Error trying to parse base URL.'); 234 if (!o.netLoc && o.path && '/' !== o.path[0]) { 235 var l = i.exec(o.path); 236 (o.netLoc = l[1]), (o.path = l[2]); 237 } 238 o.netLoc && !o.path && (o.path = '/'); 239 var u = { 240 scheme: o.scheme, 241 netLoc: a.netLoc, 242 path: null, 243 params: a.params, 244 query: a.query, 245 fragment: a.fragment, 246 }; 247 if (!a.netLoc && ((u.netLoc = o.netLoc), '/' !== a.path[0])) 248 if (a.path) { 249 var h = o.path, 250 d = h.substring(0, h.lastIndexOf('/') + 1) + a.path; 251 u.path = s.normalizePath(d); 252 } else 253 (u.path = o.path), 254 a.params || ((u.params = o.params), a.query || (u.query = o.query)); 255 return ( 256 null === u.path && (u.path = r.alwaysNormalize ? s.normalizePath(a.path) : a.path), 257 s.buildURLFromParts(u) 258 ); 259 }, 260 parseURL: function (t) { 261 var e = r.exec(t); 262 return e 263 ? { 264 scheme: e[1] || '', 265 netLoc: e[2] || '', 266 path: e[3] || '', 267 params: e[4] || '', 268 query: e[5] || '', 269 fragment: e[6] || '', 270 } 271 : null; 272 }, 273 normalizePath: function (t) { 274 for ( 275 t = t.split('').reverse().join('').replace(n, ''); 276 t.length !== (t = t.replace(a, '')).length; 277 278 ); 279 return t.split('').reverse().join(''); 280 }, 281 buildURLFromParts: function (t) { 282 return t.scheme + t.netLoc + t.path + t.params + t.query + t.fragment; 283 }, 284 }), 285 (t.exports = s); 286 })(m); 287 var p = m.exports, 288 y = 289 Number.isFinite || 290 function (t) { 291 return 'number' == typeof t && isFinite(t); 292 }, 293 E = 294 Number.isSafeInteger || 295 function (t) { 296 return 'number' == typeof t && Math.abs(t) <= T; 297 }, 298 T = Number.MAX_SAFE_INTEGER || 9007199254740991, 299 S = (function (t) { 300 return (
301 (t.MEDIA_ATTACHING = 'hlsMediaAttaching'), 302 (t.MEDIA_ATTACHED = 'hlsMediaAttached'), 303 (t.MEDIA_DETACHING = 'hlsMediaDetaching'), 304 (t.MEDIA_DETACHED = 'hlsMediaDetached'), 305 (t.BUFFER_RESET = 'hlsBufferReset'), 306 (t.BUFFER_CODECS = 'hlsBufferCodecs'), 307 (t.BUFFER_CREATED = 'hlsBufferCreated'), 308 (t.BUFFER_APPENDING = 'hlsBufferAppending'), 309 (t.BUFFER_APPENDED = 'hlsBufferAppended'), 310 (t.BUFFER_EOS = 'hlsBufferEos'), 311 (t.BUFFER_FLUSHING = 'hlsBufferFlushing'), 312 (t.BUFFER_FLUSHED = 'hlsBufferFlushed'), 313 (t.MANIFEST_LOADING = 'hlsManifestLoading'), 314 (t.MANIFEST_LOADED = 'hlsManifestLoaded'), 315 (t.MANIFEST_PARSED = 'hlsManifestParsed'), 316 (t.LEVEL_SWITCHING = 'hlsLevelSwitching'), 317 (t.LEVEL_SWITCHED = 'hlsLevelSwitched'), 318 (t.LEVEL_LOADING = 'hlsLevelLoading'), 319 (t.LEVEL_LOADED = 'hlsLevelLoaded'), 320 (t.LEVEL_UPDATED = 'hlsLevelUpdated'), 321 (t.LEVEL_PTS_UPDATED = 'hlsLevelPtsUpdated'), 322 (t.LEVELS_UPDATED = 'hlsLevelsUpdated'), 323 (t.AUDIO_TRACKS_UPDATED = 'hlsAudioTracksUpdated'), 324 (t.AUDIO_TRACK_SWITCHING = 'hlsAudioTrackSwitching'), 325 (t.AUDIO_TRACK_SWITCHED = 'hlsAudioTrackSwitched'), 326 (t.AUDIO_TRACK_LOADING = 'hlsAudioTrackLoading'), 327 (t.AUDIO_TRACK_LOADED = 'hlsAudioTrackLoaded'), 328 (t.SUBTITLE_TRACKS_UPDATED = 'hlsSubtitleTracksUpdated'), 329 (t.SUBTITLE_TRACKS_CLEARED = 'hlsSubtitleTracksCleared'), 330 (t.SUBTITLE_TRACK_SWITCH = 'hlsSubtitleTrackSwitch'), 331 (t.SUBTITLE_TRACK_LOADING = 'hlsSubtitleTrackLoading'), 332 (t.SUBTITLE_TRACK_LOADED = 'hlsSubtitleTrackLoaded'), 333 (t.SUBTITLE_FRAG_PROCESSED = 'hlsSubtitleFragProcessed'), 334 (t.CUES_PARSED = 'hlsCuesParsed'), 335 (t.NON_NATIVE_TEXT_TRACKS_FOUND = 'hlsNonNativeTextTracksFound'), 336 (t.INIT_PTS_FOUND = 'hlsInitPtsFound'), 337 (t.FRAG_LOADING = 'hlsFragLoading'), 338 (t.FRAG_LOAD_EMERGENCY_ABORTED = 'hlsFragLoadEmergencyAborted'), 339 (t.FRAG_LOADED = 'hlsFragLoaded'), 340 (t.FRAG_DECRYPTED = 'hlsFragDecrypted'), 341 (t.FRAG_PARSING_INIT_SEGMENT = 'hlsFragParsingInitSegment'), 342 (t.FRAG_PARSING_USERDATA = 'hlsFragParsingUserdata'), 343 (t.FRAG_PARSING_METADATA = 'hlsFragParsingMetadata'), 344 (t.FRAG_PARSED = 'hlsFragParsed'), 345 (t.FRAG_BUFFERED = 'hlsFragBuffered'), 346 (t.FRAG_CHANGED = 'hlsFragChanged'), 347 (t.FPS_DROP = 'hlsFpsDrop'), 348 (t.FPS_DROP_LEVEL_CAPPING = 'hlsFpsDropLevelCapping'), 349 (t.MAX_AUTO_LEVEL_UPDATED = 'hlsMaxAutoLevelUpdated'), 350 (t.ERROR = 'hlsError'), 351 (t.DESTROYING = 'hlsDestroying'), 352 (t.KEY_LOADING = 'hlsKeyLoading'), 353 (t.KEY_LOADED = 'hlsKeyLoaded'), 354 (t.LIVE_BACK_BUFFER_REACHED = 'hlsLiveBackBufferReached'), 355 (t.BACK_BUFFER_REACHED = 'hlsBackBufferReached'), 356 (t.STEERING_MANIFEST_LOADED = 'hlsSteeringManifestLoaded'), 357 t 358 ); 359 })({}), 360 L = (function (t) { 361 return ( 362 (t.NETWORK_ERROR = 'networkError'), 363 (t.MEDIA_ERROR = 'mediaError'), 364 (t.KEY_SYSTEM_ERROR = 'keySystemError'), 365 (t.MUX_ERROR = 'muxError'), 366 (t.OTHER_ERROR = 'otherError'), 367 t 368 ); 369 })({}), 370 A = (function (t) { 371 return ( 372 (t.KEY_SYSTEM_NO_KEYS = 'keySystemNoKeys'), 373 (t.KEY_SYSTEM_NO_ACCESS = 'keySystemNoAccess'), 374 (t.KEY_SYSTEM_NO_SESSION = 'keySystemNoSession'), 375 (t.KEY_SYSTEM_NO_CONFIGURED_LICENSE = 'keySystemNoConfiguredLicense'), 376 (t.KEY_SYSTEM_LICENSE_REQUEST_FAILED = 'keySystemLicenseRequestFailed'), 377 (t.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED = 378 'keySystemServerCertificateRequestFailed'), 379 (t.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED = 380 'keySystemServerCertificateUpdateFailed'), 381 (t.KEY_SYSTEM_SESSION_UPDATE_FAILED = 'keySystemSessionUpdateFailed'), 382 (t.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED = 'keySystemStatusOutputRestricted'), 383 (t.KEY_SYSTEM_STATUS_INTERNAL_ERROR = 'keySystemStatusInternalError'), 384 (t.MANIFEST_LOAD_ERROR = 'manifestLoadError'), 385 (t.MANIFEST_LOAD_TIMEOUT = 'manifestLoadTimeOut'), 386 (t.MANIFEST_PARSING_ERROR = 'manifestParsingError'), 387 (t.MANIFEST_INCOMPATIBLE_CODECS_ERROR = 'manifestIncompatibleCodecsError'), 388 (t.LEVEL_EMPTY_ERROR = 'levelEmptyError'), 389 (t.LEVEL_LOAD_ERROR = 'levelLoadError'), 390 (t.LEVEL_LOAD_TIMEOUT = 'levelLoadTimeOut'), 391 (t.LEVEL_PARSING_ERROR = 'levelParsingError'), 392 (t.LEVEL_SWITCH_ERROR = 'levelSwitchError'), 393 (t.AUDIO_TRACK_LOAD_ERROR = 'audioTrackLoadError'), 394 (t.AUDIO_TRACK_LOAD_TIMEOUT = 'audioTrackLoadTimeOut'), 395 (t.SUBTITLE_LOAD_ERROR = 'subtitleTrackLoadError'), 396 (t.SUBTITLE_TRACK_LOAD_TIMEOUT = 'subtitleTrackLoadTimeOut'), 397 (t.FRAG_LOAD_ERROR = 'fragLoadError'), 398 (t.FRAG_LOAD_TIMEOUT = 'fragLoadTimeOut'), 399 (t.FRAG_DECRYPT_ERROR = 'fragDecryptError'), 400 (t.FRAG_PARSING_ERROR = 'fragParsingError'), 401 (t.FRAG_GAP = 'fragGap'),
402 (t.REMUX_ALLOC_ERROR = 'remuxAllocError'), 403 (t.KEY_LOAD_ERROR = 'keyLoadError'), 404 (t.KEY_LOAD_TIMEOUT = 'keyLoadTimeOut'), 405 (t.BUFFER_ADD_CODEC_ERROR = 'bufferAddCodecError'), 406 (t.BUFFER_INCOMPATIBLE_CODECS_ERROR = 'bufferIncompatibleCodecsError'), 407 (t.BUFFER_APPEND_ERROR = 'bufferAppendError'), 408 (t.BUFFER_APPENDING_ERROR = 'bufferAppendingError'), 409 (t.BUFFER_STALLED_ERROR = 'bufferStalledError'), 410 (t.BUFFER_FULL_ERROR = 'bufferFullError'), 411 (t.BUFFER_SEEK_OVER_HOLE = 'bufferSeekOverHole'), 412 (t.BUFFER_NUDGE_ON_STALL = 'bufferNudgeOnStall'), 413 (t.INTERNAL_EXCEPTION = 'internalException'), 414 (t.INTERNAL_ABORTED = 'aborted'), 415 (t.UNKNOWN = 'unknown'), 416 t 417 ); 418 })({}), 419 R = function () {}, 420 b = { trace: R, debug: R, log: R, warn: R, info: R, error: R }, 421 k = b; 422 function D(t) { 423 for (var e = arguments.length, r = new Array(e > 1 ? e - 1 : 0), i = 1; i < e; i++) 424 r[i - 1] = arguments[i]; 425 r.forEach(function (e) { 426 k[e] = t[e] 427 ? t[e].bind(t) 428 : (function (t) { 429 var e = self.console[t]; 430 return e ? e.bind(self.console, '[' + t + '] >') : R; 431 })(e); 432 }); 433 } 434 function I(t, e) { 435 if (('object' == typeof console && !0 === t) || 'object' == typeof t) { 436 D(t, 'debug', 'log', 'info', 'warn', 'error'); 437 try { 438 k.log('Debug logs enabled for "' + e + '" in hls.js version 1.5.18'); 439 } catch (t) { 440 k = b; 441 } 442 } else k = b; 443 } 444 var w = k, 445 C = /^(\d+)x(\d+)$/, 446 _ = /(.+?)=(".*?"|.*?)(?:,|$)/g, 447 x = (function () { 448 function t(e) { 449 'string' == typeof e && (e = t.parseAttrList(e)), o(this, e); 450 } 451 var e = t.prototype; 452 return ( 453 (e.decimalInteger = function (t) { 454 var e = parseInt(this[t], 10); 455 return e > Number.MAX_SAFE_INTEGER ? 1 / 0 : e; 456 }), 457 (e.hexadecimalInteger = function (t) { 458 if (this[t]) { 459 var e = (this[t] || '0x').slice(2); 460 e = (1 & e.length ? '0' : '') + e; 461 for (var r = new Uint8Array(e.length / 2), i = 0; i < e.length / 2; i++) 462 r[i] = parseInt(e.slice(2 * i, 2 * i + 2), 16); 463 return r; 464 } 465 return null; 466 }), 467 (e.hexadecimalIntegerAsNumber = function (t) { 468 var e = parseInt(this[t], 16); 469 return e > Number.MAX_SAFE_INTEGER ? 1 / 0 : e; 470 }), 471 (e.decimalFloatingPoint = function (t) { 472 return parseFloat(this[t]); 473 }), 474 (e.optionalFloat = function (t, e) { 475 var r = this[t]; 476 return r ? parseFloat(r) : e; 477 }), 478 (e.enumeratedString = function (t) { 479 return this[t]; 480 }), 481 (e.bool = function (t) { 482 return 'YES' === this[t]; 483 }), 484 (e.decimalResolution = function (t) { 485 var e = C.exec(this[t]); 486 if (null !== e) return { width: parseInt(e[1], 10), height: parseInt(e[2], 10) }; 487 }), 488 (t.parseAttrList = function (t) { 489 var e, 490 r = {}; 491 for (_.lastIndex = 0; null !== (e = _.exec(t)); ) { 492 var i = e[2]; 493 0 === i.indexOf('"') && i.lastIndexOf('"') === i.length - 1 && (i = i.slice(1, -1)), 494 (r[e[1].trim()] = i); 495 } 496 return r; 497 }), 498 s(t, [ 499 { 500 key: 'clientAttrs', 501 get: function () { 502 return Object.keys(this).filter(function (t) { 503 return 'X-' === t.substring(0, 2); 504 }); 505 }, 506 }, 507 ]), 508 t 509 ); 510 })(); 511 function P(t) { 512 return 'SCTE35-OUT' === t || 'SCTE35-IN' === t; 513 } 514 var F = (function () { 515 function t(t, e) { 516 if ( 517 ((this.attr = void 0), 518 (this._startDate = void 0), 519 (this._endDate = void 0), 520 (this._badValueForSameId = void 0), 521 e) 522 ) { 523 var r = e.attr; 524 for (var i in r) 525 if (Object.prototype.hasOwnProperty.call(t, i) && t[i] !== r[i]) { 526 w.warn( 527 'DATERANGE tag attribute: "' + 528 i + 529 '" does not match for tags with ID: "' + 530 t.ID + 531 '"' 532 ), 533 (this._badValueForSameId = i); 534 break; 535 } 536 t = o(new x({}), r, t); 537 } 538 if ( 539 ((this.attr = t), 540 (this._startDate = new Date(t['START-DATE'])), 541 'END-DATE' in this.attr) 542 ) { 543 var n = new Date(this.attr['END-DATE']); 544 y(n.getTime()) && (this._endDate = n); 545 } 546 } 547 return ( 548 s(t, [ 549 { 550 key: 'id', 551 get: function () { 552 return this.attr.ID; 553 }, 554 }, 555 { 556 key: 'class', 557 get: function () { 558 return this.attr.CLASS; 559 }, 560 }, 561 { 562 key: 'startDate', 563 get: function () { 564 return this._startDate; 565 }, 566 }, 567 { 568 key: 'endDate', 569 get: function () { 570 if (this._endDate) return this._endDate; 571 var t = this.duration; 572 return null !== t ? new Date(this._startDate.getTime() + 1e3 * t) : null; 573 }, 574 }, 575 { 576 key: 'duration', 577 get: function () { 578 if ('DURATION' in this.attr) { 579 var t = this.attr.decimalFloatingPoint('DURATION'); 580 if (y(t)) return t; 581 } else if (this._endDate) 582 return (this._endDate.getTime() - this._startDate.getTime()) / 1e3; 583 return null; 584 }, 585 }, 586 { 587 key: 'plannedDuration', 588 get: function () { 589 return 'PLANNED-DURATION' in this.attr 590 ? this.attr.decimalFloatingPoint('PLANNED-DURATION') 591 : null; 592 }, 593 }, 594 { 595 key: 'endOnNext', 596 get: function () { 597 return this.attr.bool('END-ON-NEXT'); 598 }, 599 }, 600 { 601 key: 'isValid', 602 get: function () { 603 return ( 604 !!this.id && 605 !this._badValueForSameId && 606 y(this.startDate.getTime()) && 607 (null === this.duration || this.duration >= 0) && 608 (!this.endOnNext || !!this.class) 609 ); 610 }, 611 }, 612 ]), 613 t 614 ); 615 })(), 616 M = function () { 617 (this.aborted = !1), 618 (this.loaded = 0), 619 (this.retry = 0), 620 (this.total = 0), 621 (this.chunkCount = 0), 622 (this.bwEstimate = 0), 623 (this.loading = { start: 0, first: 0, end: 0 }), 624 (this.parsing = { start: 0, end: 0 }), 625 (this.buffering = { start: 0, first: 0, end: 0 }); 626 }, 627 O = 'audio', 628 N = 'video', 629 U = 'audiovideo', 630 B = (function () { 631 function t(t) { 632 var e; 633 (this._byteRange = null),
634 (this._url = null), 635 (this.baseurl = void 0), 636 (this.relurl = void 0), 637 (this.elementaryStreams = (((e = {})[O] = null), (e[N] = null), (e[U] = null), e)), 638 (this.baseurl = t); 639 } 640 return ( 641 (t.prototype.setByteRange = function (t, e) { 642 var r, 643 i = t.split('@', 2); 644 (r = 645 1 === i.length ? (null == e ? void 0 : e.byteRangeEndOffset) || 0 : parseInt(i[1])), 646 (this._byteRange = [r, parseInt(i[0]) + r]); 647 }), 648 s(t, [ 649 { 650 key: 'byteRange', 651 get: function () { 652 return this._byteRange ? this._byteRange : []; 653 }, 654 }, 655 { 656 key: 'byteRangeStartOffset', 657 get: function () { 658 return this.byteRange[0]; 659 }, 660 }, 661 { 662 key: 'byteRangeEndOffset', 663 get: function () { 664 return this.byteRange[1]; 665 }, 666 }, 667 { 668 key: 'url', 669 get: function () { 670 return ( 671 !this._url && 672 this.baseurl && 673 this.relurl && 674 (this._url = p.buildAbsoluteURL(this.baseurl, this.relurl, { 675 alwaysNormalize: !0, 676 })), 677 this._url || '' 678 ); 679 }, 680 set: function (t) { 681 this._url = t; 682 }, 683 }, 684 ]), 685 t 686 ); 687 })(), 688 G = (function (t) { 689 function e(e, r) { 690 var i; 691 return ( 692 ((i = t.call(this, r) || this)._decryptdata = null), 693 (i.rawProgramDateTime = null), 694 (i.programDateTime = null), 695 (i.tagList = []), 696 (i.duration = 0), 697 (i.sn = 0), 698 (i.levelkeys = void 0), 699 (i.type = void 0), 700 (i.loader = null), 701 (i.keyLoader = null), 702 (i.level = -1), 703 (i.cc = 0), 704 (i.startPTS = void 0), 705 (i.endPTS = void 0), 706 (i.startDTS = void 0), 707 (i.endDTS = void 0), 708 (i.start = 0), 709 (i.deltaPTS = void 0), 710 (i.maxStartPTS = void 0), 711 (i.minEndPTS = void 0), 712 (i.stats = new M()), 713 (i.data = void 0), 714 (i.bitrateTest = !1), 715 (i.title = null), 716 (i.initSegment = null), 717 (i.endList = void 0), 718 (i.gap = void 0), 719 (i.urlId = 0), 720 (i.type = e), 721 i 722 ); 723 } 724 l(e, t); 725 var r = e.prototype; 726 return ( 727 (r.setKeyFormat = function (t) { 728 if (this.levelkeys) { 729 var e = this.levelkeys[t]; 730 e && !this._decryptdata && (this._decryptdata = e.getDecryptData(this.sn)); 731 } 732 }), 733 (r.abortRequests = function () { 734 var t, e; 735 null == (t = this.loader) || t.abort(), null == (e = this.keyLoader) || e.abort(); 736 }), 737 (r.setElementaryStreamInfo = function (t, e, r, i, n, a) { 738 void 0 === a && (a = !1); 739 var s = this.elementaryStreams, 740 o = s[t]; 741 o 742 ? ((o.startPTS = Math.min(o.startPTS, e)), 743 (o.endPTS = Math.max(o.endPTS, r)), 744 (o.startDTS = Math.min(o.startDTS, i)), 745 (o.endDTS = Math.max(o.endDTS, n))) 746 : (s[t] = { startPTS: e, endPTS: r, startDTS: i, endDTS: n, partial: a }); 747 }), 748 (r.clearElementaryStreamInfo = function () { 749 var t = this.elementaryStreams; 750 (t[O] = null), (t[N] = null), (t[U] = null); 751 }), 752 s(e, [ 753 { 754 key: 'decryptdata', 755 get: function () { 756 if (!this.levelkeys && !this._decryptdata) return null; 757 if (!this._decryptdata && this.levelkeys && !this.levelkeys.NONE) { 758 var t = this.levelkeys.identity; 759 if (t) this._decryptdata = t.getDecryptData(this.sn); 760 else { 761 var e = Object.keys(this.levelkeys); 762 if (1 === e.length) 763 return (this._decryptdata = this.levelkeys[e[0]].getDecryptData(this.sn)); 764 } 765 } 766 return this._decryptdata; 767 }, 768 }, 769 { 770 key: 'end', 771 get: function () { 772 return this.start + this.duration; 773 }, 774 }, 775 { 776 key: 'endProgramDateTime', 777 get: function () { 778 if (null === this.programDateTime) return null; 779 if (!y(this.programDateTime)) return null; 780 var t = y(this.duration) ? this.duration : 0; 781 return this.programDateTime + 1e3 * t; 782 }, 783 }, 784 { 785 key: 'encrypted', 786 get: function () { 787 var t; 788 if (null != (t = this._decryptdata) && t.encrypted) return !0; 789 if (this.levelkeys) { 790 var e = Object.keys(this.levelkeys), 791 r = e.length; 792 if (r > 1 || (1 === r && this.levelkeys[e[0]].encrypted)) return !0; 793 } 794 return !1; 795 }, 796 }, 797 ]), 798 e 799 ); 800 })(B), 801 K = (function (t) { 802 function e(e, r, i, n, a) { 803 var s; 804 ((s = t.call(this, i) || this).fragOffset = 0), 805 (s.duration = 0), 806 (s.gap = !1), 807 (s.independent = !1), 808 (s.relurl = void 0), 809 (s.fragment = void 0), 810 (s.index = void 0), 811 (s.stats = new M()), 812 (s.duration = e.decimalFloatingPoint('DURATION')), 813 (s.gap = e.bool('GAP')), 814 (s.independent = e.bool('INDEPENDENT')), 815 (s.relurl = e.enumeratedString('URI')), 816 (s.fragment = r), 817 (s.index = n); 818 var o = e.enumeratedString('BYTERANGE'); 819 return o && s.setByteRange(o, a), a && (s.fragOffset = a.fragOffset + a.duration), s; 820 } 821 return ( 822 l(e, t), 823 s(e, [ 824 { 825 key: 'start', 826 get: function () { 827 return this.fragment.start + this.fragOffset; 828 }, 829 }, 830 { 831 key: 'end', 832 get: function () { 833 return this.start + this.duration; 834 }, 835 }, 836 { 837 key: 'loaded', 838 get: function () { 839 var t = this.elementaryStreams; 840 return !!(t.audio || t.video || t.audiovideo); 841 }, 842 }, 843 ]), 844 e 845 ); 846 })(B), 847 H = (function () { 848 function t(t) { 849 (this.PTSKnown = !1), 850 (this.alignedSliding = !1), 851 (this.averagetargetduration = void 0), 852 (this.endCC = 0), 853 (this.endSN = 0), 854 (this.fragments = void 0), 855 (this.fragmentHint = void 0), 856 (this.partList = null),
857 (this.dateRanges = void 0), 858 (this.live = !0), 859 (this.ageHeader = 0), 860 (this.advancedDateTime = void 0), 861 (this.updated = !0), 862 (this.advanced = !0), 863 (this.availabilityDelay = void 0), 864 (this.misses = 0), 865 (this.startCC = 0), 866 (this.startSN = 0), 867 (this.startTimeOffset = null), 868 (this.targetduration = 0), 869 (this.totalduration = 0), 870 (this.type = null), 871 (this.url = void 0), 872 (this.m3u8 = ''), 873 (this.version = null), 874 (this.canBlockReload = !1), 875 (this.canSkipUntil = 0), 876 (this.canSkipDateRanges = !1), 877 (this.skippedSegments = 0), 878 (this.recentlyRemovedDateranges = void 0), 879 (this.partHoldBack = 0), 880 (this.holdBack = 0), 881 (this.partTarget = 0), 882 (this.preloadHint = void 0), 883 (this.renditionReports = void 0), 884 (this.tuneInGoal = 0), 885 (this.deltaUpdateFailed = void 0), 886 (this.driftStartTime = 0), 887 (this.driftEndTime = 0), 888 (this.driftStart = 0), 889 (this.driftEnd = 0), 890 (this.encryptedFragments = void 0), 891 (this.playlistParsingError = null), 892 (this.variableList = null), 893 (this.hasVariableRefs = !1), 894 (this.fragments = []), 895 (this.encryptedFragments = []), 896 (this.dateRanges = {}), 897 (this.url = t); 898 } 899 return ( 900 (t.prototype.reloaded = function (t) { 901 if (!t) return (this.advanced = !0), void (this.updated = !0); 902 var e = this.lastPartSn - t.lastPartSn, 903 r = this.lastPartIndex - t.lastPartIndex; 904 (this.updated = this.endSN !== t.endSN || !!r || !!e || !this.live), 905 (this.advanced = this.endSN > t.endSN || e > 0 || (0 === e && r > 0)), 906 this.updated || this.advanced 907 ? (this.misses = Math.floor(0.6 * t.misses)) 908 : (this.misses = t.misses + 1), 909 (this.availabilityDelay = t.availabilityDelay); 910 }), 911 s(t, [ 912 { 913 key: 'hasProgramDateTime', 914 get: function () { 915 return ( 916 !!this.fragments.length && 917 y(this.fragments[this.fragments.length - 1].programDateTime) 918 ); 919 }, 920 }, 921 { 922 key: 'levelTargetDuration', 923 get: function () { 924 return this.averagetargetduration || this.targetduration || 10; 925 }, 926 }, 927 { 928 key: 'drift', 929 get: function () { 930 var t = this.driftEndTime - this.driftStartTime; 931 return t > 0 ? (1e3 * (this.driftEnd - this.driftStart)) / t : 1; 932 }, 933 }, 934 { 935 key: 'edge', 936 get: function () { 937 return this.partEnd || this.fragmentEnd; 938 }, 939 }, 940 { 941 key: 'partEnd', 942 get: function () { 943 var t; 944 return null != (t = this.partList) && t.length 945 ? this.partList[this.partList.length - 1].end 946 : this.fragmentEnd; 947 }, 948 }, 949 { 950 key: 'fragmentEnd', 951 get: function () { 952 var t; 953 return null != (t = this.fragments) && t.length 954 ? this.fragments[this.fragments.length - 1].end 955 : 0; 956 }, 957 }, 958 { 959 key: 'age', 960 get: function () { 961 return this.advancedDateTime 962 ? Math.max(Date.now() - this.advancedDateTime, 0) / 1e3 963 : 0; 964 }, 965 }, 966 { 967 key: 'lastPartIndex', 968 get: function () { 969 var t; 970 return null != (t = this.partList) && t.length 971 ? this.partList[this.partList.length - 1].index 972 : -1; 973 }, 974 }, 975 { 976 key: 'lastPartSn', 977 get: function () { 978 var t; 979 return null != (t = this.partList) && t.length 980 ? this.partList[this.partList.length - 1].fragment.sn 981 : this.endSN; 982 }, 983 }, 984 ]), 985 t 986 ); 987 })(); 988 function V(t) { 989 return Uint8Array.from(atob(t), function (t) { 990 return t.charCodeAt(0); 991 }); 992 } 993 function Y(t) { 994 var e, 995 r, 996 i = t.split(':'), 997 n = null; 998 if ('data' === i[0] && 2 === i.length) { 999 var a = i[1].split(';'), 1000 s = a[a.length - 1].split(','); 1001 if (2 === s.length) { 1002 var o = 'base64' === s[0], 1003 l = s[1]; 1004 o 1005 ? (a.splice(-1, 1), (n = V(l))) 1006 : ((e = W(l).subarray(0, 16)), 1007 (r = new Uint8Array(16)).set(e, 16 - e.length), 1008 (n = r)); 1009 } 1010 } 1011 return n; 1012 } 1013 function W(t) { 1014 return Uint8Array.from(unescape(encodeURIComponent(t)), function (t) { 1015 return t.charCodeAt(0); 1016 }); 1017 } 1018 var j = 'undefined' != typeof self ? self : void 0, 1019 q = { 1020 CLEARKEY: 'org.w3.clearkey', 1021 FAIRPLAY: 'com.apple.fps', 1022 PLAYREADY: 'com.microsoft.playready', 1023 WIDEVINE: 'com.widevine.alpha', 1024 }, 1025 X = 'org.w3.clearkey', 1026 z = 'com.apple.streamingkeydelivery', 1027 Q = 'com.microsoft.playready', 1028 J = 'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed'; 1029 function $(t) { 1030 switch (t) { 1031 case z: 1032 return q.FAIRPLAY; 1033 case Q: 1034 return q.PLAYREADY; 1035 case J: 1036 return q.WIDEVINE; 1037 case X: 1038 return q.CLEARKEY; 1039 } 1040 } 1041 var Z = '1077efecc0b24d02ace33c1e52e2fb4b', 1042 tt = 'e2719d58a985b3c9781ab030af78d30e', 1043 et = '9a04f07998404286ab92e65be0885f95', 1044 rt = 'edef8ba979d64acea3c827dcd51d21ed'; 1045 function it(t) { 1046 return t === rt 1047 ? q.WIDEVINE 1048 : t === et 1049 ? q.PLAYREADY 1050 : t === Z || t === tt 1051 ? q.CLEARKEY 1052 : void 0; 1053 } 1054 function nt(t) { 1055 switch (t) { 1056 case q.FAIRPLAY: 1057 return z; 1058 case q.PLAYREADY: 1059 return Q; 1060 case q.WIDEVINE: 1061 return J; 1062 case q.CLEARKEY: 1063 return X; 1064 } 1065 } 1066 function at(t) { 1067 var e = t.drmSystems, 1068 r = t.widevineLicenseUrl, 1069 i = e
1070 ? [q.FAIRPLAY, q.WIDEVINE, q.PLAYREADY, q.CLEARKEY].filter(function (t) { 1071 return !!e[t]; 1072 }) 1073 : []; 1074 return !i[q.WIDEVINE] && r && i.push(q.WIDEVINE), i; 1075 } 1076 var st, 1077 ot = 1078 null != j && null != (st = j.navigator) && st.requestMediaKeySystemAccess 1079 ? self.navigator.requestMediaKeySystemAccess.bind(self.navigator) 1080 : null; 1081 function lt(t, e, r) { 1082 return Uint8Array.prototype.slice 1083 ? t.slice(e, r) 1084 : new Uint8Array(Array.prototype.slice.call(t, e, r)); 1085 } 1086 var ut, 1087 ht = function (t, e) { 1088 return ( 1089 e + 10 <= t.length && 1090 73 === t[e] && 1091 68 === t[e + 1] && 1092 51 === t[e + 2] && 1093 t[e + 3] < 255 && 1094 t[e + 4] < 255 && 1095 t[e + 6] < 128 && 1096 t[e + 7] < 128 && 1097 t[e + 8] < 128 && 1098 t[e + 9] < 128 1099 ); 1100 }, 1101 dt = function (t, e) { 1102 return ( 1103 e + 10 <= t.length && 1104 51 === t[e] && 1105 68 === t[e + 1] && 1106 73 === t[e + 2] && 1107 t[e + 3] < 255 && 1108 t[e + 4] < 255 && 1109 t[e + 6] < 128 && 1110 t[e + 7] < 128 && 1111 t[e + 8] < 128 && 1112 t[e + 9] < 128 1113 ); 1114 }, 1115 ct = function (t, e) { 1116 for (var r = e, i = 0; ht(t, e); ) 1117 (i += 10), (i += ft(t, e + 6)), dt(t, e + 10) && (i += 10), (e += i); 1118 if (i > 0) return t.subarray(r, r + i); 1119 }, 1120 ft = function (t, e) { 1121 var r = 0; 1122 return ( 1123 (r = (127 & t[e]) << 21), 1124 (r |= (127 & t[e + 1]) << 14), 1125 (r |= (127 & t[e + 2]) << 7), 1126 (r |= 127 & t[e + 3]) 1127 ); 1128 }, 1129 gt = function (t, e) { 1130 return ht(t, e) && ft(t, e + 6) + 10 <= t.length - e; 1131 }, 1132 vt = function (t) { 1133 for (var e = yt(t), r = 0; r < e.length; r++) { 1134 var i = e[r]; 1135 if (mt(i)) return At(i); 1136 } 1137 }, 1138 mt = function (t) { 1139 return t && 'PRIV' === t.key && 'com.apple.streaming.transportStreamTimestamp' === t.info; 1140 }, 1141 pt = function (t) { 1142 var e = String.fromCharCode(t[0], t[1], t[2], t[3]), 1143 r = ft(t, 4); 1144 return { type: e, size: r, data: t.subarray(10, 10 + r) }; 1145 }, 1146 yt = function (t) { 1147 for (var e = 0, r = []; ht(t, e); ) { 1148 for (var i = ft(t, e + 6), n = (e += 10) + i; e + 8 < n; ) { 1149 var a = pt(t.subarray(e)), 1150 s = Et(a); 1151 s && r.push(s), (e += a.size + 10); 1152 } 1153 dt(t, e) && (e += 10); 1154 } 1155 return r; 1156 }, 1157 Et = function (t) { 1158 return 'PRIV' === t.type ? Tt(t) : 'W' === t.type[0] ? Lt(t) : St(t); 1159 }, 1160 Tt = function (t) { 1161 if (!(t.size < 2)) { 1162 var e = Rt(t.data, !0), 1163 r = new Uint8Array(t.data.subarray(e.length + 1)); 1164 return { key: t.type, info: e, data: r.buffer }; 1165 } 1166 }, 1167 St = function (t) { 1168 if (!(t.size < 2)) { 1169 if ('TXXX' === t.type) { 1170 var e = 1, 1171 r = Rt(t.data.subarray(e), !0); 1172 e += r.length + 1; 1173 var i = Rt(t.data.subarray(e)); 1174 return { key: t.type, info: r, data: i }; 1175 } 1176 var n = Rt(t.data.subarray(1)); 1177 return { key: t.type, data: n }; 1178 } 1179 }, 1180 Lt = function (t) { 1181 if ('WXXX' === t.type) { 1182 if (t.size < 2) return; 1183 var e = 1, 1184 r = Rt(t.data.subarray(e), !0); 1185 e += r.length + 1; 1186 var i = Rt(t.data.subarray(e)); 1187 return { key: t.type, info: r, data: i }; 1188 } 1189 var n = Rt(t.data); 1190 return { key: t.type, data: n }; 1191 }, 1192 At = function (t) { 1193 if (8 === t.data.byteLength) { 1194 var e = new Uint8Array(t.data), 1195 r = 1 & e[3], 1196 i = (e[4] << 23) + (e[5] << 15) + (e[6] << 7) + e[7]; 1197 return (i /= 45), r && (i += 47721858.84), Math.round(i); 1198 } 1199 }, 1200 Rt = function (t, e) { 1201 void 0 === e && (e = !1); 1202 var r = bt(); 1203 if (r) { 1204 var i = r.decode(t); 1205 if (e) { 1206 var n = i.indexOf('\0'); 1207 return -1 !== n ? i.substring(0, n) : i; 1208 } 1209 return i.replace(/\0/g, ''); 1210 } 1211 for (var a, s, o, l = t.length, u = '', h = 0; h < l; ) { 1212 if (0 === (a = t[h++]) && e) return u; 1213 if (0 !== a && 3 !== a) 1214 switch (a >> 4) { 1215 case 0: 1216 case 1: 1217 case 2: 1218 case 3: 1219 case 4: 1220 case 5: 1221 case 6: 1222 case 7: 1223 u += String.fromCharCode(a); 1224 break; 1225 case 12: 1226 case 13: 1227 (s = t[h++]), (u += String.fromCharCode(((31 & a) << 6) | (63 & s))); 1228 break; 1229 case 14: 1230 (s = t[h++]), 1231 (o = t[h++]), 1232 (u += String.fromCharCode( 1233 ((15 & a) << 12) | ((63 & s) << 6) | ((63 & o) << 0) 1234 )); 1235 } 1236 } 1237 return u; 1238 }; 1239 function bt() { 1240 if (!navigator.userAgent.includes('PlayStation 4')) 1241 return ut || void 0 === self.TextDecoder || (ut = new self.TextDecoder('utf-8')), ut; 1242 } 1243 var kt = { 1244 hexDump: function (t) { 1245 for (var e = '', r = 0; r < t.length; r++) { 1246 var i = t[r].toString(16); 1247 i.length < 2 && (i = '0' + i), (e += i); 1248 } 1249 return e; 1250 }, 1251 }, 1252 Dt = Math.pow(2, 32) - 1, 1253 It = [].push, 1254 wt = { video: 1, audio: 2, id3: 3, text: 4 }; 1255 function Ct(t) { 1256 return String.fromCharCode.apply(null, t); 1257 } 1258 function _t(t, e) { 1259 var r = (t[e] << 8) | t[e + 1]; 1260 return r < 0 ? 65536 + r : r; 1261 } 1262 function xt(t, e) { 1263 var r = Ft(t, e); 1264 return r < 0 ? 4294967296 + r : r; 1265 } 1266 function Pt(t, e) { 1267 var r = xt(t, e); 1268 return (r *= Math.pow(2, 32)), (r += xt(t, e + 4)); 1269 } 1270 function Ft(t, e) { 1271 return (t[e] << 24) | (t[e + 1] << 16) | (t[e + 2] << 8) | t[e + 3]; 1272 } 1273 function Mt(t, e, r) { 1274 (t[e] = r >> 24), 1275 (t[e + 1] = (r >> 16) & 255), 1276 (t[e + 2] = (r >> 8) & 255), 1277 (t[e + 3] = 255 & r); 1278 } 1279 function Ot(t, e) { 1280 var r = []; 1281 if (!e.length) return r; 1282 for (var i = t.byteLength, n = 0; n < i; ) { 1283 var a = xt(t, n), 1284 s = a > 1 ? n + a : i; 1285 if (Ct(t.subarray(n + 4, n + 8)) === e[0])
1286 if (1 === e.length) r.push(t.subarray(n + 8, s)); 1287 else { 1288 var o = Ot(t.subarray(n + 8, s), e.slice(1)); 1289 o.length && It.apply(r, o); 1290 } 1291 n = s; 1292 } 1293 return r; 1294 } 1295 function Nt(t) { 1296 var e = [], 1297 r = t[0], 1298 i = 8, 1299 n = xt(t, i); 1300 i += 4; 1301 var a = 0, 1302 s = 0; 1303 0 === r 1304 ? ((a = xt(t, i)), (s = xt(t, i + 4)), (i += 8)) 1305 : ((a = Pt(t, i)), (s = Pt(t, i + 8)), (i += 16)), 1306 (i += 2); 1307 var o = t.length + s, 1308 l = _t(t, i); 1309 i += 2; 1310 for (var u = 0; u < l; u++) { 1311 var h = i, 1312 d = xt(t, h); 1313 h += 4; 1314 var c = 2147483647 & d; 1315 if (1 == (2147483648 & d) >>> 31) 1316 return w.warn('SIDX has hierarchical references (not supported)'), null; 1317 var f = xt(t, h); 1318 (h += 4), 1319 e.push({ 1320 referenceSize: c, 1321 subsegmentDuration: f, 1322 info: { duration: f / n, start: o, end: o + c - 1 }, 1323 }), 1324 (o += c), 1325 (i = h += 4); 1326 } 1327 return { 1328 earliestPresentationTime: a, 1329 timescale: n, 1330 version: r, 1331 referencesCount: l, 1332 references: e, 1333 }; 1334 } 1335 function Ut(t) { 1336 for (var e = [], r = Ot(t, ['moov', 'trak']), n = 0; n < r.length; n++) { 1337 var a = r[n], 1338 s = Ot(a, ['tkhd'])[0]; 1339 if (s) { 1340 var o = s[0], 1341 l = xt(s, 0 === o ? 12 : 20), 1342 u = Ot(a, ['mdia', 'mdhd'])[0]; 1343 if (u) { 1344 var h = xt(u, 0 === (o = u[0]) ? 12 : 20), 1345 d = Ot(a, ['mdia', 'hdlr'])[0]; 1346 if (d) { 1347 var c = Ct(d.subarray(8, 12)), 1348 f = { soun: O, vide: N }[c]; 1349 if (f) { 1350 var g = Bt(Ot(a, ['mdia', 'minf', 'stbl', 'stsd'])[0]); 1351 (e[l] = { timescale: h, type: f }), (e[f] = i({ timescale: h, id: l }, g)); 1352 } 1353 } 1354 } 1355 } 1356 } 1357 return ( 1358 Ot(t, ['moov', 'mvex', 'trex']).forEach(function (t) { 1359 var r = xt(t, 4), 1360 i = e[r]; 1361 i && (i.default = { duration: xt(t, 12), flags: xt(t, 20) }); 1362 }), 1363 e 1364 ); 1365 } 1366 function Bt(t) { 1367 var e = t.subarray(8), 1368 r = e.subarray(86), 1369 i = Ct(e.subarray(4, 8)), 1370 n = i, 1371 a = 'enca' === i || 'encv' === i; 1372 if (a) { 1373 var s = Ot(e, [i])[0]; 1374 Ot(s.subarray('enca' === i ? 28 : 78), ['sinf']).forEach(function (t) { 1375 var e = Ot(t, ['schm'])[0]; 1376 if (e) { 1377 var r = Ct(e.subarray(4, 8)); 1378 if ('cbcs' === r || 'cenc' === r) { 1379 var i = Ot(t, ['frma'])[0]; 1380 i && (n = Ct(i)); 1381 } 1382 } 1383 }); 1384 } 1385 switch (n) { 1386 case 'avc1': 1387 case 'avc2': 1388 case 'avc3': 1389 case 'avc4': 1390 var o = Ot(r, ['avcC'])[0]; 1391 n += '.' + Kt(o[1]) + Kt(o[2]) + Kt(o[3]); 1392 break; 1393 case 'mp4a': 1394 var l = Ot(e, [i])[0], 1395 u = Ot(l.subarray(28), ['esds'])[0]; 1396 if (u && u.length > 12) { 1397 var h = 4; 1398 if (3 !== u[h++]) break; 1399 (h = Gt(u, h)), (h += 2); 1400 var d = u[h++]; 1401 if ((128 & d && (h += 2), 64 & d && (h += u[h++]), 4 !== u[h++])) break; 1402 h = Gt(u, h); 1403 var c = u[h++]; 1404 if (64 !== c) break; 1405 if (((n += '.' + Kt(c)), (h += 12), 5 !== u[h++])) break; 1406 h = Gt(u, h); 1407 var f = u[h++], 1408 g = (248 & f) >> 3; 1409 31 === g && (g += 1 + ((7 & f) << 3) + ((224 & u[h]) >> 5)), (n += '.' + g); 1410 } 1411 break; 1412 case 'hvc1': 1413 case 'hev1': 1414 var v = Ot(r, ['hvcC'])[0], 1415 m = v[1], 1416 p = ['', 'A', 'B', 'C'][m >> 6], 1417 y = 31 & m, 1418 E = xt(v, 2), 1419 T = (32 & m) >> 5 ? 'H' : 'L', 1420 S = v[12], 1421 L = v.subarray(6, 12); 1422 (n += '.' + p + y), (n += '.' + E.toString(16).toUpperCase()), (n += '.' + T + S); 1423 for (var A = '', R = L.length; R--; ) { 1424 var b = L[R]; 1425 (b || A) && (A = '.' + b.toString(16).toUpperCase() + A); 1426 } 1427 n += A; 1428 break; 1429 case 'dvh1': 1430 case 'dvhe': 1431 var k = Ot(r, ['dvcC'])[0], 1432 D = (k[2] >> 1) & 127, 1433 I = ((k[2] << 5) & 32) | ((k[3] >> 3) & 31); 1434 n += '.' + Ht(D) + '.' + Ht(I); 1435 break; 1436 case 'vp09': 1437 var w = Ot(r, ['vpcC'])[0], 1438 C = w[4], 1439 _ = w[5], 1440 x = (w[6] >> 4) & 15; 1441 n += '.' + Ht(C) + '.' + Ht(_) + '.' + Ht(x); 1442 break; 1443 case 'av01': 1444 var P = Ot(r, ['av1C'])[0], 1445 F = P[1] >>> 5, 1446 M = 31 & P[1], 1447 O = P[2] >>> 7 ? 'H' : 'M', 1448 N = (64 & P[2]) >> 6, 1449 U = (32 & P[2]) >> 5, 1450 B = 2 === F && N ? (U ? 12 : 10) : N ? 10 : 8, 1451 G = (16 & P[2]) >> 4, 1452 K = (8 & P[2]) >> 3, 1453 H = (4 & P[2]) >> 2, 1454 V = 3 & P[2]; 1455 n += 1456 '.' + 1457 F + 1458 '.' + 1459 Ht(M) + 1460 O + 1461 '.' + 1462 Ht(B) + 1463 '.' + 1464 G + 1465 '.' + 1466 K + 1467 H + 1468 V + 1469 '.' + 1470 Ht(1) + 1471 '.' + 1472 Ht(1) + 1473 '.' + 1474 Ht(1) + 1475 '.0'; 1476 } 1477 return { codec: n, encrypted: a }; 1478 } 1479 function Gt(t, e) { 1480 for (var r = e + 5; 128 & t[e++] && e < r; ); 1481 return e; 1482 } 1483 function Kt(t) { 1484 return ('0' + t.toString(16).toUpperCase()).slice(-2); 1485 } 1486 function Ht(t) { 1487 return (t < 10 ? '0' : '') + t; 1488 } 1489 function Vt(t) { 1490 var e = Ot(t, ['schm'])[0]; 1491 if (e) { 1492 var r = Ct(e.subarray(4, 8));
1493 if ('cbcs' === r || 'cenc' === r) return Ot(t, ['schi', 'tenc'])[0]; 1494 } 1495 return null; 1496 } 1497 function Yt(t) { 1498 var e = xt(t, 0), 1499 r = 8; 1500 1 & e && (r += 4), 4 & e && (r += 4); 1501 for (var i = 0, n = xt(t, 4), a = 0; a < n; a++) 1502 256 & e && ((i += xt(t, r)), (r += 4)), 1503 512 & e && (r += 4), 1504 1024 & e && (r += 4), 1505 2048 & e && (r += 4); 1506 return i; 1507 } 1508 function Wt(t, e) { 1509 var r = new Uint8Array(t.length + e.length); 1510 return r.set(t), r.set(e, t.length), r; 1511 } 1512 function jt(t, e) { 1513 var r = [], 1514 i = e.samples, 1515 n = e.timescale, 1516 a = e.id, 1517 s = !1; 1518 return ( 1519 Ot(i, ['moof']).map(function (o) { 1520 var l = o.byteOffset - 8; 1521 Ot(o, ['traf']).map(function (o) { 1522 var u = Ot(o, ['tfdt']).map(function (t) { 1523 var e = t[0], 1524 r = xt(t, 4); 1525 return 1 === e && ((r *= Math.pow(2, 32)), (r += xt(t, 8))), r / n; 1526 })[0]; 1527 return ( 1528 void 0 !== u && (t = u), 1529 Ot(o, ['tfhd']).map(function (u) { 1530 var h = xt(u, 4), 1531 d = 16777215 & xt(u, 0), 1532 c = 0, 1533 f = 0 != (16 & d), 1534 g = 0, 1535 v = 0 != (32 & d), 1536 m = 8; 1537 h === a && 1538 (0 != (1 & d) && (m += 8), 1539 0 != (2 & d) && (m += 4), 1540 0 != (8 & d) && ((c = xt(u, m)), (m += 4)), 1541 f && ((g = xt(u, m)), (m += 4)), 1542 v && (m += 4), 1543 'video' === e.type && 1544 (s = (function (t) { 1545 if (!t) return !1; 1546 var e = t.indexOf('.'), 1547 r = e < 0 ? t : t.substring(0, e); 1548 return 'hvc1' === r || 'hev1' === r || 'dvh1' === r || 'dvhe' === r; 1549 })(e.codec)), 1550 Ot(o, ['trun']).map(function (a) { 1551 var o = a[0], 1552 u = 16777215 & xt(a, 0), 1553 h = 0 != (1 & u), 1554 d = 0, 1555 f = 0 != (4 & u), 1556 v = 0 != (256 & u), 1557 m = 0, 1558 p = 0 != (512 & u), 1559 y = 0, 1560 E = 0 != (1024 & u), 1561 T = 0 != (2048 & u), 1562 S = 0, 1563 L = xt(a, 4), 1564 A = 8; 1565 h && ((d = xt(a, A)), (A += 4)), f && (A += 4); 1566 for (var R = d + l, b = 0; b < L; b++) { 1567 if ( 1568 (v ? ((m = xt(a, A)), (A += 4)) : (m = c), 1569 p ? ((y = xt(a, A)), (A += 4)) : (y = g), 1570 E && (A += 4), 1571 T && ((S = 0 === o ? xt(a, A) : Ft(a, A)), (A += 4)), 1572 e.type === N) 1573 ) 1574 for (var k = 0; k < y; ) { 1575 var D = xt(i, R); 1576 qt(s, i[(R += 4)]) && Xt(i.subarray(R, R + D), s ? 2 : 1, t + S / n, r), 1577 (R += D), 1578 (k += D + 4); 1579 } 1580 t += m / n; 1581 } 1582 })); 1583 }) 1584 ); 1585 }); 1586 }), 1587 r 1588 ); 1589 } 1590 function qt(t, e) { 1591 if (t) { 1592 var r = (e >> 1) & 63; 1593 return 39 === r || 40 === r; 1594 } 1595 return 6 == (31 & e); 1596 } 1597 function Xt(t, e, r, i) { 1598 var n = zt(t), 1599 a = 0; 1600 a += e; 1601 for (var s = 0, o = 0, l = 0; a < n.length; ) { 1602 s = 0; 1603 do { 1604 if (a >= n.length) break; 1605 s += l = n[a++]; 1606 } while (255 === l); 1607 o = 0; 1608 do { 1609 if (a >= n.length) break; 1610 o += l = n[a++]; 1611 } while (255 === l); 1612 var u = n.length - a, 1613 h = a; 1614 if (o < u) a += o; 1615 else if (o > u) { 1616 w.error( 1617 'Malformed SEI payload. ' + o + ' is too small, only ' + u + ' bytes left to parse.' 1618 ); 1619 break; 1620 } 1621 if (4 === s) {
1622 if (181 === n[h++]) { 1623 var d = _t(n, h); 1624 if (((h += 2), 49 === d)) { 1625 var c = xt(n, h); 1626 if (((h += 4), 1195456820 === c)) { 1627 var f = n[h++]; 1628 if (3 === f) { 1629 var g = n[h++], 1630 v = 64 & g, 1631 m = v ? 2 + 3 * (31 & g) : 0, 1632 p = new Uint8Array(m); 1633 if (v) { 1634 p[0] = g; 1635 for (var y = 1; y < m; y++) p[y] = n[h++]; 1636 } 1637 i.push({ type: f, payloadType: s, pts: r, bytes: p }); 1638 } 1639 } 1640 } 1641 } 1642 } else if (5 === s && o > 16) { 1643 for (var E = [], T = 0; T < 16; T++) { 1644 var S = n[h++].toString(16); 1645 E.push(1 == S.length ? '0' + S : S), 1646 (3 !== T && 5 !== T && 7 !== T && 9 !== T) || E.push('-'); 1647 } 1648 for (var L = o - 16, A = new Uint8Array(L), R = 0; R < L; R++) A[R] = n[h++]; 1649 i.push({ payloadType: s, pts: r, uuid: E.join(''), userData: Rt(A), userDataBytes: A }); 1650 } 1651 } 1652 } 1653 function zt(t) { 1654 for (var e = t.byteLength, r = [], i = 1; i < e - 2; ) 1655 0 === t[i] && 0 === t[i + 1] && 3 === t[i + 2] ? (r.push(i + 2), (i += 2)) : i++; 1656 if (0 === r.length) return t; 1657 var n = e - r.length, 1658 a = new Uint8Array(n), 1659 s = 0; 1660 for (i = 0; i < n; s++, i++) s === r[0] && (s++, r.shift()), (a[i] = t[s]); 1661 return a; 1662 } 1663 function Qt(t, e, r) { 1664 if (16 !== t.byteLength) throw new RangeError('Invalid system id'); 1665 var i, n, a; 1666 if (e) { 1667 (i = 1), (n = new Uint8Array(16 * e.length)); 1668 for (var s = 0; s < e.length; s++) { 1669 var o = e[s]; 1670 if (16 !== o.byteLength) throw new RangeError('Invalid key'); 1671 n.set(o, 16 * s); 1672 } 1673 } else (i = 0), (n = new Uint8Array()); 1674 i > 0 1675 ? ((a = new Uint8Array(4)), 1676 e.length > 0 && new DataView(a.buffer).setUint32(0, e.length, !1)) 1677 : (a = new Uint8Array()); 1678 var l = new Uint8Array(4); 1679 return ( 1680 r && r.byteLength > 0 && new DataView(l.buffer).setUint32(0, r.byteLength, !1), 1681 (function (t) { 1682 for (var e = arguments.length, r = new Array(e > 1 ? e - 1 : 0), i = 1; i < e; i++) 1683 r[i - 1] = arguments[i]; 1684 for (var n = r.length, a = 8, s = n; s--; ) a += r[s].byteLength; 1685 var o = new Uint8Array(a); 1686 for ( 1687 o[0] = (a >> 24) & 255, 1688 o[1] = (a >> 16) & 255, 1689 o[2] = (a >> 8) & 255, 1690 o[3] = 255 & a, 1691 o.set(t, 4), 1692 s = 0, 1693 a = 8; 1694 s < n; 1695 s++ 1696 ) 1697 o.set(r[s], a), (a += r[s].byteLength); 1698 return o; 1699 })([112, 115, 115, 104], new Uint8Array([i, 0, 0, 0]), t, a, n, l, r || new Uint8Array()) 1700 ); 1701 } 1702 function Jt(t) { 1703 var e = t.getUint32(0), 1704 r = t.byteOffset, 1705 i = t.byteLength; 1706 if (i < e) return { offset: r, size: i }; 1707 if (1886614376 !== t.getUint32(4)) return { offset: r, size: e }; 1708 var n = t.getUint32(8) >>> 24; 1709 if (0 !== n && 1 !== n) return { offset: r, size: e }; 1710 var a = t.buffer, 1711 s = kt.hexDump(new Uint8Array(a, r + 12, 16)), 1712 o = t.getUint32(28), 1713 l = null, 1714 u = null; 1715 if (0 === n) { 1716 if (e - 32 < o || o < 22) return { offset: r, size: e }; 1717 u = new Uint8Array(a, r + 32, o); 1718 } else if (1 === n) { 1719 if (!o || i < r + 32 + 16 * o + 16) return { offset: r, size: e }; 1720 l = []; 1721 for (var h = 0; h < o; h++) l.push(new Uint8Array(a, r + 32 + 16 * h, 16)); 1722 } 1723 return { version: n, systemId: s, kids: l, data: u, offset: r, size: e }; 1724 } 1725 var $t = {}, 1726 Zt = (function () { 1727 function t(t, e, r, i, n) { 1728 void 0 === i && (i = [1]), 1729 void 0 === n && (n = null),
1730 (this.uri = void 0), 1731 (this.method = void 0), 1732 (this.keyFormat = void 0), 1733 (this.keyFormatVersions = void 0), 1734 (this.encrypted = void 0), 1735 (this.isCommonEncryption = void 0), 1736 (this.iv = null), 1737 (this.key = null), 1738 (this.keyId = null), 1739 (this.pssh = null), 1740 (this.method = t), 1741 (this.uri = e), 1742 (this.keyFormat = r), 1743 (this.keyFormatVersions = i), 1744 (this.iv = n), 1745 (this.encrypted = !!t && 'NONE' !== t), 1746 (this.isCommonEncryption = this.encrypted && 'AES-128' !== t); 1747 } 1748 t.clearKeyUriToKeyIdMap = function () { 1749 $t = {}; 1750 }; 1751 var e = t.prototype; 1752 return ( 1753 (e.isSupported = function () { 1754 if (this.method) { 1755 if ('AES-128' === this.method || 'NONE' === this.method) return !0; 1756 if ('identity' === this.keyFormat) return 'SAMPLE-AES' === this.method; 1757 switch (this.keyFormat) { 1758 case z: 1759 case J: 1760 case Q: 1761 case X: 1762 return ( 1763 -1 !== 1764 ['ISO-23001-7', 'SAMPLE-AES', 'SAMPLE-AES-CENC', 'SAMPLE-AES-CTR'].indexOf( 1765 this.method 1766 ) 1767 ); 1768 } 1769 } 1770 return !1; 1771 }), 1772 (e.getDecryptData = function (e) { 1773 if (!this.encrypted || !this.uri) return null; 1774 if ('AES-128' === this.method && this.uri && !this.iv) { 1775 'number' != typeof e && 1776 ('AES-128' !== this.method || 1777 this.iv || 1778 w.warn( 1779 'missing IV for initialization segment with method="' + 1780 this.method + 1781 '" - compliance issue' 1782 ), 1783 (e = 0)); 1784 var r = (function (t) { 1785 for (var e = new Uint8Array(16), r = 12; r < 16; r++) 1786 e[r] = (t >> (8 * (15 - r))) & 255; 1787 return e; 1788 })(e); 1789 return new t(this.method, this.uri, 'identity', this.keyFormatVersions, r); 1790 } 1791 var i = Y(this.uri); 1792 if (i) 1793 switch (this.keyFormat) { 1794 case J: 1795 (this.pssh = i), 1796 i.length >= 22 && (this.keyId = i.subarray(i.length - 22, i.length - 6)); 1797 break; 1798 case Q: 1799 var n = new Uint8Array([ 1800 154, 4, 240, 121, 152, 64, 66, 134, 171, 146, 230, 91, 224, 136, 95, 149, 1801 ]); 1802 this.pssh = Qt(n, null, i); 1803 var a = new Uint16Array(i.buffer, i.byteOffset, i.byteLength / 2), 1804 s = String.fromCharCode.apply(null, Array.from(a)), 1805 o = s.substring(s.indexOf('<'), s.length), 1806 l = new DOMParser() 1807 .parseFromString(o, 'text/xml') 1808 .getElementsByTagName('KID')[0]; 1809 if (l) { 1810 var u = l.childNodes[0] ? l.childNodes[0].nodeValue : l.getAttribute('VALUE'); 1811 if (u) { 1812 var h = V(u).subarray(0, 16); 1813 !(function (t) { 1814 var e = function (t, e, r) { 1815 var i = t[e]; 1816 (t[e] = t[r]), (t[r] = i); 1817 }; 1818 e(t, 0, 3), e(t, 1, 2), e(t, 4, 5), e(t, 6, 7); 1819 })(h), 1820 (this.keyId = h); 1821 } 1822 } 1823 break; 1824 default: 1825 var d = i.subarray(0, 16); 1826 if (16 !== d.length) { 1827 var c = new Uint8Array(16); 1828 c.set(d, 16 - d.length), (d = c); 1829 } 1830 this.keyId = d; 1831 } 1832 if (!this.keyId || 16 !== this.keyId.byteLength) { 1833 var f = $t[this.uri]; 1834 if (!f) { 1835 var g = Object.keys($t).length % Number.MAX_SAFE_INTEGER; 1836 (f = new Uint8Array(16)), 1837 new DataView(f.buffer, 12, 4).setUint32(0, g), 1838 ($t[this.uri] = f); 1839 } 1840 this.keyId = f; 1841 } 1842 return this; 1843 }), 1844 t 1845 ); 1846 })(), 1847 te = /\{\$([a-zA-Z0-9-_]+)\}/g; 1848 function ee(t) { 1849 return te.test(t); 1850 } 1851 function re(t, e, r) { 1852 if (null !== t.variableList || t.hasVariableRefs) 1853 for (var i = r.length; i--; ) { 1854 var n = r[i], 1855 a = e[n]; 1856 a && (e[n] = ie(t, a)); 1857 } 1858 } 1859 function ie(t, e) { 1860 if (null !== t.variableList || t.hasVariableRefs) { 1861 var r = t.variableList; 1862 return e.replace(te, function (e) { 1863 var i = e.substring(2, e.length - 1), 1864 n = null == r ? void 0 : r[i]; 1865 return void 0 === n 1866 ? (t.playlistParsingError || 1867 (t.playlistParsingError = new Error( 1868 'Missing preceding EXT-X-DEFINE tag for Variable Reference: "' + i + '"' 1869 )), 1870 e) 1871 : n; 1872 }); 1873 } 1874 return e; 1875 } 1876 function ne(t, e, r) { 1877 var i, 1878 n, 1879 a = t.variableList; 1880 if ((a || (t.variableList = a = {}), 'QUERYPARAM' in e)) { 1881 i = e.QUERYPARAM; 1882 try { 1883 var s = new self.URL(r).searchParams; 1884 if (!s.has(i)) 1885 throw new Error('"' + i + '" does not match any query parameter in URI: "' + r + '"'); 1886 n = s.get(i); 1887 } catch (e) { 1888 t.playlistParsingError || 1889 (t.playlistParsingError = new Error('EXT-X-DEFINE QUERYPARAM: ' + e.message)); 1890 } 1891 } else (i = e.NAME), (n = e.VALUE); 1892 i in a 1893 ? t.playlistParsingError || 1894 (t.playlistParsingError = new Error( 1895 'EXT-X-DEFINE duplicate Variable Name declarations: "' + i + '"' 1896 )) 1897 : (a[i] = n || ''); 1898 } 1899 function ae(t, e, r) { 1900 var i = e.IMPORT; 1901 if (r && i in r) { 1902 var n = t.variableList; 1903 n || (t.variableList = n = {}), (n[i] = r[i]); 1904 } else 1905 t.playlistParsingError || 1906 (t.playlistParsingError = new Error( 1907 'EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: "' + i + '"' 1908 )); 1909 } 1910 function se(t) { 1911 if ((void 0 === t && (t = !0), 'undefined' != typeof self)) 1912 return ( 1913 ((t || !self.MediaSource) && self.ManagedMediaSource) || 1914 self.MediaSource || 1915 self.WebKitMediaSource 1916 ); 1917 } 1918 var oe = { 1919 audio: { 1920 a3ds: 1, 1921 'ac-3': 0.95, 1922 'ac-4': 1, 1923 alac: 0.9, 1924 alaw: 1, 1925 dra1: 1, 1926 'dts+': 1, 1927 'dts-': 1, 1928 dtsc: 1, 1929 dtse: 1, 1930 dtsh: 1, 1931 'ec-3': 0.9, 1932 enca: 1, 1933 fLaC: 0.9, 1934 flac: 0.9, 1935 FLAC: 0.9, 1936 g719: 1, 1937 g726: 1, 1938 m4ae: 1, 1939 mha1: 1, 1940 mha2: 1, 1941 mhm1: 1, 1942 mhm2: 1, 1943 mlpa: 1, 1944 mp4a: 1, 1945 'raw ': 1, 1946 Opus: 1, 1947 opus: 1, 1948 samr: 1, 1949 sawb: 1, 1950 sawp: 1, 1951 sevc: 1, 1952 sqcp: 1, 1953 ssmv: 1, 1954 twos: 1, 1955 ulaw: 1, 1956 }, 1957 video: { 1958 avc1: 1, 1959 avc2: 1, 1960 avc3: 1, 1961 avc4: 1, 1962 avcp: 1, 1963 av01: 0.8, 1964 drac: 1, 1965 dva1: 1, 1966 dvav: 1, 1967 dvh1: 0.7, 1968 dvhe: 0.7, 1969 encv: 1, 1970 hev1: 0.75, 1971 hvc1: 0.75, 1972 mjp2: 1, 1973 mp4v: 1, 1974 mvc1: 1, 1975 mvc2: 1, 1976 mvc3: 1, 1977 mvc4: 1, 1978 resv: 1, 1979 rv60: 1, 1980 s263: 1, 1981 svc1: 1, 1982 svc2: 1, 1983 'vc-1': 1, 1984 vp08: 1, 1985 vp09: 0.9, 1986 }, 1987 text: { stpp: 1, wvtt: 1 }, 1988 }; 1989 function le(t, e, r) { 1990 return ( 1991 void 0 === r && (r = !0), 1992 !t.split(',').some(function (t) { 1993 return !ue(t, e, r); 1994 }) 1995 ); 1996 } 1997 function ue(t, e, r) { 1998 var i; 1999 void 0 === r && (r = !0); 2000 var n = se(r);
2001 return null != (i = null == n ? void 0 : n.isTypeSupported(he(t, e))) && i; 2002 } 2003 function he(t, e) { 2004 return e + '/mp4;codecs="' + t + '"'; 2005 } 2006 function de(t) { 2007 if (t) { 2008 var e = t.substring(0, 4); 2009 return oe.video[e]; 2010 } 2011 return 2; 2012 } 2013 function ce(t) { 2014 return t.split(',').reduce(function (t, e) { 2015 var r = oe.video[e]; 2016 return r ? (2 * r + t) / (t ? 3 : 2) : (oe.audio[e] + t) / (t ? 2 : 1); 2017 }, 0); 2018 } 2019 var fe = {}, 2020 ge = /flac|opus/i; 2021 function ve(t, e) { 2022 return ( 2023 void 0 === e && (e = !0), 2024 t.replace(ge, function (t) { 2025 return (function (t, e) { 2026 if ((void 0 === e && (e = !0), fe[t])) return fe[t]; 2027 for ( 2028 var r = { flac: ['flac', 'fLaC', 'FLAC'], opus: ['opus', 'Opus'] }[t], i = 0; 2029 i < r.length; 2030 i++ 2031 ) 2032 if (ue(r[i], 'audio', e)) return (fe[t] = r[i]), r[i]; 2033 return t; 2034 })(t.toLowerCase(), e); 2035 }) 2036 ); 2037 } 2038 function me(t, e) { 2039 return t && 'mp4a' !== t ? t : e ? e.split(',')[0] : e; 2040 } 2041 var pe = 2042 /#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, 2043 ye = /#EXT-X-MEDIA:(.*)/g, 2044 Ee = /^#EXT(?:INF|-X-TARGETDURATION):/m, 2045 Te = new RegExp( 2046 [ 2047 /#EXTINF:\s*(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source, 2048 /(?!#) *(\S[^\r\n]*)/.source, 2049 /#EXT-X-BYTERANGE:*(.+)/.source, 2050 /#EXT-X-PROGRAM-DATE-TIME:(.+)/.source, 2051 /#.*/.source, 2052 ].join('|'), 2053 'g' 2054 ), 2055 Se = new RegExp( 2056 [ 2057 /#(EXTM3U)/.source, 2058 /#EXT-X-(DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/ 2059 .source, 2060 /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\d+)/ 2061 .source, 2062 /#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source, 2063 /(#)([^:]*):(.*)/.source, 2064 /(#)(.*)(?:.*)\r?\n?/.source, 2065 ].join('|') 2066 ), 2067 Le = (function () { 2068 function t() {} 2069 return ( 2070 (t.findGroup = function (t, e) { 2071 for (var r = 0; r < t.length; r++) { 2072 var i = t[r]; 2073 if (i.id === e) return i; 2074 } 2075 }), 2076 (t.resolve = function (t, e) { 2077 return p.buildAbsoluteURL(e, t, { alwaysNormalize: !0 }); 2078 }), 2079 (t.isMediaPlaylist = function (t) { 2080 return Ee.test(t); 2081 }), 2082 (t.parseMasterPlaylist = function (e, r) { 2083 var i, 2084 n = { 2085 contentSteering: null, 2086 levels: [], 2087 playlistParsingError: null, 2088 sessionData: null, 2089 sessionKeys: null, 2090 startTimeOffset: null, 2091 variableList: null, 2092 hasVariableRefs: ee(e), 2093 }, 2094 a = []; 2095 for (pe.lastIndex = 0; null != (i = pe.exec(e)); ) 2096 if (i[1]) { 2097 var s, 2098 o = new x(i[1]); 2099 re(n, o, [ 2100 'CODECS', 2101 'SUPPLEMENTAL-CODECS', 2102 'ALLOWED-CPC', 2103 'PATHWAY-ID', 2104 'STABLE-VARIANT-ID', 2105 'AUDIO', 2106 'VIDEO', 2107 'SUBTITLES', 2108 'CLOSED-CAPTIONS', 2109 'NAME', 2110 ]); 2111 var l = ie(n, i[2]), 2112 u = { 2113 attrs: o, 2114 bitrate: 2115 o.decimalInteger('BANDWIDTH') || o.decimalInteger('AVERAGE-BANDWIDTH'), 2116 name: o.NAME, 2117 url: t.resolve(l, r), 2118 }, 2119 h = o.decimalResolution('RESOLUTION'); 2120 h && ((u.width = h.width), (u.height = h.height)), 2121 be(o.CODECS, u), 2122 (null != (s = u.unknownCodecs) && s.length) || a.push(u), 2123 n.levels.push(u); 2124 } else if (i[3]) { 2125 var d = i[3], 2126 c = i[4]; 2127 switch (d) { 2128 case 'SESSION-DATA': 2129 var f = new x(c); 2130 re(n, f, ['DATA-ID', 'LANGUAGE', 'VALUE', 'URI']); 2131 var g = f['DATA-ID']; 2132 g && (null === n.sessionData && (n.sessionData = {}), (n.sessionData[g] = f)); 2133 break; 2134 case 'SESSION-KEY': 2135 var v = Ae(c, r, n); 2136 v.encrypted && v.isSupported() 2137 ? (null === n.sessionKeys && (n.sessionKeys = []), n.sessionKeys.push(v)) 2138 : w.warn('[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: "' + c + '"'); 2139 break; 2140 case 'DEFINE': 2141 var m = new x(c); 2142 re(n, m, ['NAME', 'VALUE', 'QUERYPARAM']), ne(n, m, r); 2143 break; 2144 case 'CONTENT-STEERING': 2145 var p = new x(c); 2146 re(n, p, ['SERVER-URI', 'PATHWAY-ID']), 2147 (n.contentSteering = { 2148 uri: t.resolve(p['SERVER-URI'], r), 2149 pathwayId: p['PATHWAY-ID'] || '.', 2150 }); 2151 break; 2152 case 'START': 2153 n.startTimeOffset = Re(c); 2154 } 2155 } 2156 var y = a.length > 0 && a.length < n.levels.length; 2157 return ( 2158 (n.levels = y ? a : n.levels), 2159 0 === n.levels.length && 2160 (n.playlistParsingError = new Error('no levels found in manifest')), 2161 n 2162 ); 2163 }), 2164 (t.parseMasterPlaylistMedia = function (e, r, i) { 2165 var n, 2166 a = {}, 2167 s = i.levels, 2168 o = { 2169 AUDIO: s.map(function (t) { 2170 return { id: t.attrs.AUDIO, audioCodec: t.audioCodec }; 2171 }), 2172 SUBTITLES: s.map(function (t) { 2173 return { id: t.attrs.SUBTITLES, textCodec: t.textCodec }; 2174 }), 2175 'CLOSED-CAPTIONS': [], 2176 }, 2177 l = 0; 2178 for (ye.lastIndex = 0; null !== (n = ye.exec(e)); ) { 2179 var u = new x(n[1]), 2180 h = u.TYPE; 2181 if (h) { 2182 var d = o[h], 2183 c = a[h] || []; 2184 (a[h] = c), 2185 re(i, u, [ 2186 'URI', 2187 'GROUP-ID', 2188 'LANGUAGE', 2189 'ASSOC-LANGUAGE', 2190 'STABLE-RENDITION-ID',
2191 'NAME', 2192 'INSTREAM-ID', 2193 'CHARACTERISTICS', 2194 'CHANNELS', 2195 ]); 2196 var f = u.LANGUAGE, 2197 g = u['ASSOC-LANGUAGE'], 2198 v = u.CHANNELS, 2199 m = u.CHARACTERISTICS, 2200 p = u['INSTREAM-ID'], 2201 y = { 2202 attrs: u, 2203 bitrate: 0, 2204 id: l++, 2205 groupId: u['GROUP-ID'] || '', 2206 name: u.NAME || f || '', 2207 type: h, 2208 default: u.bool('DEFAULT'), 2209 autoselect: u.bool('AUTOSELECT'), 2210 forced: u.bool('FORCED'), 2211 lang: f, 2212 url: u.URI ? t.resolve(u.URI, r) : '', 2213 }; 2214 if ( 2215 (g && (y.assocLang = g), 2216 v && (y.channels = v), 2217 m && (y.characteristics = m), 2218 p && (y.instreamId = p), 2219 null != d && d.length) 2220 ) { 2221 var E = t.findGroup(d, y.groupId) || d[0]; 2222 ke(y, E, 'audioCodec'), ke(y, E, 'textCodec'); 2223 } 2224 c.push(y); 2225 } 2226 } 2227 return a; 2228 }), 2229 (t.parseLevelPlaylist = function (t, e, r, i, n, a) { 2230 var s, 2231 l, 2232 u, 2233 h = new H(e), 2234 d = h.fragments, 2235 c = null, 2236 f = 0, 2237 g = 0, 2238 v = 0, 2239 m = 0, 2240 p = null, 2241 E = new G(i, e), 2242 T = -1, 2243 S = !1, 2244 L = null; 2245 for ( 2246 Te.lastIndex = 0, h.m3u8 = t, h.hasVariableRefs = ee(t); 2247 null !== (s = Te.exec(t)); 2248 2249 ) { 2250 S && 2251 ((S = !1), 2252 ((E = new G(i, e)).start = v), 2253 (E.sn = f), 2254 (E.cc = m), 2255 (E.level = r), 2256 c && 2257 ((E.initSegment = c), 2258 (E.rawProgramDateTime = c.rawProgramDateTime), 2259 (c.rawProgramDateTime = null), 2260 L && (E.setByteRange(L), (L = null)))); 2261 var A = s[1]; 2262 if (A) { 2263 E.duration = parseFloat(A); 2264 var R = (' ' + s[2]).slice(1); 2265 (E.title = R || null), E.tagList.push(R ? ['INF', A, R] : ['INF', A]); 2266 } else if (s[3]) { 2267 if (y(E.duration)) { 2268 (E.start = v), 2269 u && we(E, u, h), 2270 (E.sn = f), 2271 (E.level = r), 2272 (E.cc = m), 2273 d.push(E); 2274 var b = (' ' + s[3]).slice(1); 2275 (E.relurl = ie(h, b)), 2276 De(E, p), 2277 (p = E), 2278 (v += E.duration), 2279 f++, 2280 (g = 0), 2281 (S = !0); 2282 } 2283 } else if (s[4]) { 2284 var k = (' ' + s[4]).slice(1); 2285 p ? E.setByteRange(k, p) : E.setByteRange(k); 2286 } else if (s[5]) 2287 (E.rawProgramDateTime = (' ' + s[5]).slice(1)), 2288 E.tagList.push(['PROGRAM-DATE-TIME', E.rawProgramDateTime]), 2289 -1 === T && (T = d.length); 2290 else { 2291 if (!(s = s[0].match(Se))) { 2292 w.warn('No matches on slow regex match for level playlist!'); 2293 continue; 2294 } 2295 for (l = 1; l < s.length && void 0 === s[l]; l++); 2296 var D = (' ' + s[l]).slice(1), 2297 I = (' ' + s[l + 1]).slice(1), 2298 C = s[l + 2] ? (' ' + s[l + 2]).slice(1) : ''; 2299 switch (D) { 2300 case 'PLAYLIST-TYPE':
2301 h.type = I.toUpperCase(); 2302 break; 2303 case 'MEDIA-SEQUENCE': 2304 f = h.startSN = parseInt(I); 2305 break; 2306 case 'SKIP': 2307 var _ = new x(I); 2308 re(h, _, ['RECENTLY-REMOVED-DATERANGES']); 2309 var P = _.decimalInteger('SKIPPED-SEGMENTS'); 2310 if (y(P)) { 2311 h.skippedSegments = P; 2312 for (var M = P; M--; ) d.unshift(null); 2313 f += P; 2314 } 2315 var O = _.enumeratedString('RECENTLY-REMOVED-DATERANGES'); 2316 O && (h.recentlyRemovedDateranges = O.split('\t')); 2317 break; 2318 case 'TARGETDURATION': 2319 h.targetduration = Math.max(parseInt(I), 1); 2320 break; 2321 case 'VERSION': 2322 h.version = parseInt(I); 2323 break; 2324 case 'INDEPENDENT-SEGMENTS': 2325 case 'EXTM3U': 2326 break; 2327 case 'ENDLIST': 2328 h.live = !1; 2329 break; 2330 case '#': 2331 (I || C) && E.tagList.push(C ? [I, C] : [I]); 2332 break; 2333 case 'DISCONTINUITY': 2334 m++, E.tagList.push(['DIS']); 2335 break; 2336 case 'GAP': 2337 (E.gap = !0), E.tagList.push([D]); 2338 break; 2339 case 'BITRATE': 2340 E.tagList.push([D, I]); 2341 break; 2342 case 'DATERANGE': 2343 var N = new x(I); 2344 re(h, N, [ 2345 'ID', 2346 'CLASS', 2347 'START-DATE', 2348 'END-DATE', 2349 'SCTE35-CMD', 2350 'SCTE35-OUT', 2351 'SCTE35-IN', 2352 ]), 2353 re(h, N, N.clientAttrs); 2354 var U = new F(N, h.dateRanges[N.ID]); 2355 U.isValid || h.skippedSegments 2356 ? (h.dateRanges[U.id] = U) 2357 : w.warn('Ignoring invalid DATERANGE tag: "' + I + '"'), 2358 E.tagList.push(['EXT-X-DATERANGE', I]); 2359 break; 2360 case 'DEFINE': 2361 var B = new x(I); 2362 re(h, B, ['NAME', 'VALUE', 'IMPORT', 'QUERYPARAM']), 2363 'IMPORT' in B ? ae(h, B, a) : ne(h, B, e); 2364 break; 2365 case 'DISCONTINUITY-SEQUENCE': 2366 m = parseInt(I); 2367 break; 2368 case 'KEY': 2369 var V = Ae(I, e, h); 2370 if (V.isSupported()) { 2371 if ('NONE' === V.method) { 2372 u = void 0; 2373 break; 2374 } 2375 u || (u = {}), u[V.keyFormat] && (u = o({}, u)), (u[V.keyFormat] = V); 2376 } else w.warn('[Keys] Ignoring invalid EXT-X-KEY tag: "' + I + '"'); 2377 break; 2378 case 'START': 2379 h.startTimeOffset = Re(I); 2380 break; 2381 case 'MAP': 2382 var Y = new x(I); 2383 if ((re(h, Y, ['BYTERANGE', 'URI']), E.duration)) { 2384 var W = new G(i, e); 2385 Ie(W, Y, r, u), 2386 (c = W), 2387 (E.initSegment = c), 2388 c.rawProgramDateTime && 2389 !E.rawProgramDateTime && 2390 (E.rawProgramDateTime = c.rawProgramDateTime); 2391 } else { 2392 var j = E.byteRangeEndOffset; 2393 if (j) { 2394 var q = E.byteRangeStartOffset; 2395 L = j - q + '@' + q; 2396 } else L = null; 2397 Ie(E, Y, r, u), (c = E), (S = !0); 2398 } 2399 break; 2400 case 'SERVER-CONTROL': 2401 var X = new x(I); 2402 (h.canBlockReload = X.bool('CAN-BLOCK-RELOAD')), 2403 (h.canSkipUntil = X.optionalFloat('CAN-SKIP-UNTIL', 0)), 2404 (h.canSkipDateRanges = h.canSkipUntil > 0 && X.bool('CAN-SKIP-DATERANGES')), 2405 (h.partHoldBack = X.optionalFloat('PART-HOLD-BACK', 0)), 2406 (h.holdBack = X.optionalFloat('HOLD-BACK', 0)); 2407 break; 2408 case 'PART-INF': 2409 var z = new x(I); 2410 h.partTarget = z.decimalFloatingPoint('PART-TARGET'); 2411 break; 2412 case 'PART': 2413 var Q = h.partList; 2414 Q || (Q = h.partList = []); 2415 var J = g > 0 ? Q[Q.length - 1] : void 0, 2416 $ = g++, 2417 Z = new x(I); 2418 re(h, Z, ['BYTERANGE', 'URI']); 2419 var tt = new K(Z, E, e, $, J); 2420 Q.push(tt), (E.duration += tt.duration); 2421 break; 2422 case 'PRELOAD-HINT': 2423 var et = new x(I); 2424 re(h, et, ['URI']), (h.preloadHint = et); 2425 break; 2426 case 'RENDITION-REPORT': 2427 var rt = new x(I); 2428 re(h, rt, ['URI']), 2429 (h.renditionReports = h.renditionReports || []), 2430 h.renditionReports.push(rt); 2431 break; 2432 default: 2433 w.warn('line parsed but not handled: ' + s); 2434 } 2435 } 2436 } 2437 p && !p.relurl 2438 ? (d.pop(), (v -= p.duration), h.partList && (h.fragmentHint = p)) 2439 : h.partList && (De(E, p), (E.cc = m), (h.fragmentHint = E), u && we(E, u, h)); 2440 var it = d.length, 2441 nt = d[0], 2442 at = d[it - 1]; 2443 if ((v += h.skippedSegments * h.targetduration) > 0 && it && at) { 2444 h.averagetargetduration = v / it; 2445 var st = at.sn; 2446 (h.endSN = 'initSegment' !== st ? st : 0), 2447 h.live || (at.endList = !0), 2448 nt && (h.startCC = nt.cc); 2449 } else (h.endSN = 0), (h.startCC = 0); 2450 return ( 2451 h.fragmentHint && (v += h.fragmentHint.duration), 2452 (h.totalduration = v), 2453 (h.endCC = m), 2454 T > 0 && 2455 (function (t, e) { 2456 for (var r = t[e], i = e; i--; ) { 2457 var n = t[i]; 2458 if (!n) return; 2459 (n.programDateTime = r.programDateTime - 1e3 * n.duration), (r = n); 2460 } 2461 })(d, T), 2462 h 2463 ); 2464 }), 2465 t 2466 ); 2467 })(); 2468 function Ae(t, e, r) { 2469 var i, 2470 n, 2471 a = new x(t); 2472 re(r, a, ['KEYFORMAT', 'KEYFORMATVERSIONS', 'URI', 'IV', 'URI']); 2473 var s = null != (i = a.METHOD) ? i : '', 2474 o = a.URI, 2475 l = a.hexadecimalInteger('IV'), 2476 u = a.KEYFORMATVERSIONS, 2477 h = null != (n = a.KEYFORMAT) ? n : 'identity'; 2478 o && a.IV && !l && w.error('Invalid IV: ' + a.IV); 2479 var d = o ? Le.resolve(o, e) : '', 2480 c = (u || '1').split('/').map(Number).filter(Number.isFinite); 2481 return new Zt(s, d, h, c, l); 2482 } 2483 function Re(t) { 2484 var e = new x(t).decimalFloatingPoint('TIME-OFFSET'); 2485 return y(e) ? e : null; 2486 } 2487 function be(t, e) { 2488 var r = (t || '').split(/[ ,]+/).filter(function (t) { 2489 return t; 2490 }); 2491 ['video', 'audio', 'text'].forEach(function (t) { 2492 var i = r.filter(function (e) { 2493 return (function (t, e) { 2494 var r = oe[e]; 2495 return !!r && !!r[t.slice(0, 4)]; 2496 })(e, t); 2497 }); 2498 i.length && 2499 ((e[t + 'Codec'] = i.join(',')), 2500 (r = r.filter(function (t) { 2501 return -1 === i.indexOf(t); 2502 }))); 2503 }), 2504 (e.unknownCodecs = r); 2505 } 2506 function ke(t, e, r) { 2507 var i = e[r]; 2508 i && (t[r] = i); 2509 } 2510 function De(t, e) { 2511 t.rawProgramDateTime
2512 ? (t.programDateTime = Date.parse(t.rawProgramDateTime)) 2513 : null != e && e.programDateTime && (t.programDateTime = e.endProgramDateTime), 2514 y(t.programDateTime) || ((t.programDateTime = null), (t.rawProgramDateTime = null)); 2515 } 2516 function Ie(t, e, r, i) { 2517 (t.relurl = e.URI), 2518 e.BYTERANGE && t.setByteRange(e.BYTERANGE), 2519 (t.level = r), 2520 (t.sn = 'initSegment'), 2521 i && (t.levelkeys = i), 2522 (t.initSegment = null); 2523 } 2524 function we(t, e, r) { 2525 t.levelkeys = e; 2526 var i = r.encryptedFragments; 2527 (i.length && i[i.length - 1].levelkeys === e) || 2528 !Object.keys(e).some(function (t) { 2529 return e[t].isCommonEncryption; 2530 }) || 2531 i.push(t); 2532 } 2533 var Ce = 'manifest', 2534 _e = 'level', 2535 xe = 'audioTrack', 2536 Pe = 'subtitleTrack', 2537 Fe = 'main', 2538 Me = 'audio', 2539 Oe = 'subtitle'; 2540 function Ne(t) { 2541 switch (t.type) { 2542 case xe: 2543 return Me; 2544 case Pe: 2545 return Oe; 2546 default: 2547 return Fe; 2548 } 2549 } 2550 function Ue(t, e) { 2551 var r = t.url; 2552 return (void 0 !== r && 0 !== r.indexOf('data:')) || (r = e.url), r; 2553 } 2554 var Be = (function () { 2555 function t(t) { 2556 (this.hls = void 0), 2557 (this.loaders = Object.create(null)), 2558 (this.variableList = null), 2559 (this.hls = t), 2560 this.registerListeners(); 2561 } 2562 var e = t.prototype; 2563 return ( 2564 (e.startLoad = function (t) {}), 2565 (e.stopLoad = function () { 2566 this.destroyInternalLoaders(); 2567 }), 2568 (e.registerListeners = function () { 2569 var t = this.hls; 2570 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 2571 t.on(S.LEVEL_LOADING, this.onLevelLoading, this), 2572 t.on(S.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this), 2573 t.on(S.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this); 2574 }), 2575 (e.unregisterListeners = function () { 2576 var t = this.hls; 2577 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 2578 t.off(S.LEVEL_LOADING, this.onLevelLoading, this), 2579 t.off(S.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this), 2580 t.off(S.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this); 2581 }), 2582 (e.createInternalLoader = function (t) { 2583 var e = this.hls.config, 2584 r = e.pLoader, 2585 i = e.loader, 2586 n = new (r || i)(e); 2587 return (this.loaders[t.type] = n), n; 2588 }), 2589 (e.getInternalLoader = function (t) { 2590 return this.loaders[t.type]; 2591 }), 2592 (e.resetInternalLoader = function (t) { 2593 this.loaders[t] && delete this.loaders[t]; 2594 }), 2595 (e.destroyInternalLoaders = function () { 2596 for (var t in this.loaders) { 2597 var e = this.loaders[t]; 2598 e && e.destroy(), this.resetInternalLoader(t); 2599 } 2600 }), 2601 (e.destroy = function () { 2602 (this.variableList = null), this.unregisterListeners(), this.destroyInternalLoaders(); 2603 }), 2604 (e.onManifestLoading = function (t, e) { 2605 var r = e.url; 2606 (this.variableList = null), 2607 this.load({ 2608 id: null, 2609 level: 0, 2610 responseType: 'text', 2611 type: Ce, 2612 url: r, 2613 deliveryDirectives: null, 2614 }); 2615 }), 2616 (e.onLevelLoading = function (t, e) { 2617 var r = e.id, 2618 i = e.level, 2619 n = e.pathwayId, 2620 a = e.url, 2621 s = e.deliveryDirectives; 2622 this.load({ 2623 id: r, 2624 level: i, 2625 pathwayId: n, 2626 responseType: 'text', 2627 type: _e, 2628 url: a, 2629 deliveryDirectives: s, 2630 }); 2631 }), 2632 (e.onAudioTrackLoading = function (t, e) { 2633 var r = e.id, 2634 i = e.groupId, 2635 n = e.url, 2636 a = e.deliveryDirectives; 2637 this.load({ 2638 id: r, 2639 groupId: i, 2640 level: null, 2641 responseType: 'text', 2642 type: xe, 2643 url: n, 2644 deliveryDirectives: a, 2645 }); 2646 }), 2647 (e.onSubtitleTrackLoading = function (t, e) { 2648 var r = e.id, 2649 i = e.groupId, 2650 n = e.url, 2651 a = e.deliveryDirectives; 2652 this.load({ 2653 id: r, 2654 groupId: i, 2655 level: null, 2656 responseType: 'text', 2657 type: Pe, 2658 url: n, 2659 deliveryDirectives: a, 2660 }); 2661 }), 2662 (e.load = function (t) { 2663 var e, 2664 r, 2665 i, 2666 n = this, 2667 a = this.hls.config, 2668 s = this.getInternalLoader(t); 2669 if (s) { 2670 var l = s.context; 2671 if (l && l.url === t.url && l.level === t.level) 2672 return void w.trace('[playlist-loader]: playlist request ongoing'); 2673 w.log('[playlist-loader]: aborting previous loader for type: ' + t.type), s.abort(); 2674 } 2675 if ( 2676 ((r = 2677 t.type === Ce 2678 ? a.manifestLoadPolicy.default 2679 : o({}, a.playlistLoadPolicy.default, { timeoutRetry: null, errorRetry: null })), 2680 (s = this.createInternalLoader(t)), 2681 y(null == (e = t.deliveryDirectives) ? void 0 : e.part) && 2682 (t.type === _e && null !== t.level 2683 ? (i = this.hls.levels[t.level].details) 2684 : t.type === xe && null !== t.id 2685 ? (i = this.hls.audioTracks[t.id].details) 2686 : t.type === Pe && null !== t.id && (i = this.hls.subtitleTracks[t.id].details), 2687 i)) 2688 ) { 2689 var u = i.partTarget, 2690 h = i.targetduration; 2691 if (u && h) { 2692 var d = 1e3 * Math.max(3 * u, 0.8 * h); 2693 r = o({}, r, { 2694 maxTimeToFirstByteMs: Math.min(d, r.maxTimeToFirstByteMs), 2695 maxLoadTimeMs: Math.min(d, r.maxTimeToFirstByteMs), 2696 }); 2697 } 2698 } 2699 var c = r.errorRetry || r.timeoutRetry || {}, 2700 f = { 2701 loadPolicy: r, 2702 timeout: r.maxLoadTimeMs, 2703 maxRetry: c.maxNumRetry || 0, 2704 retryDelay: c.retryDelayMs || 0, 2705 maxRetryDelay: c.maxRetryDelayMs || 0, 2706 }, 2707 g = { 2708 onSuccess: function (t, e, r, i) { 2709 var a = n.getInternalLoader(r); 2710 n.resetInternalLoader(r.type); 2711 var s = t.data; 2712 0 === s.indexOf('#EXTM3U') 2713 ? ((e.parsing.start = performance.now()), 2714 Le.isMediaPlaylist(s) 2715 ? n.handleTrackOrLevelPlaylist(t, e, r, i || null, a) 2716 : n.handleMasterPlaylist(t, e, r, i)) 2717 : n.handleManifestParsingError( 2718 t, 2719 r, 2720 new Error('no EXTM3U delimiter'), 2721 i || null, 2722 e 2723 ); 2724 }, 2725 onError: function (t, e, r, i) { 2726 n.handleNetworkError(e, r, !1, t, i); 2727 }, 2728 onTimeout: function (t, e, r) { 2729 n.handleNetworkError(e, r, !0, void 0, t); 2730 }, 2731 }; 2732 s.load(t, f, g); 2733 }), 2734 (e.handleMasterPlaylist = function (t, e, r, i) { 2735 var n = this.hls, 2736 a = t.data, 2737 s = Ue(t, r), 2738 o = Le.parseMasterPlaylist(a, s); 2739 if (o.playlistParsingError) 2740 this.handleManifestParsingError(t, r, o.playlistParsingError, i, e); 2741 else { 2742 var l = o.contentSteering, 2743 u = o.levels, 2744 h = o.sessionData, 2745 d = o.sessionKeys, 2746 c = o.startTimeOffset, 2747 f = o.variableList; 2748 this.variableList = f; 2749 var g = Le.parseMasterPlaylistMedia(a, s, o), 2750 v = g.AUDIO, 2751 m = void 0 === v ? [] : v, 2752 p = g.SUBTITLES, 2753 y = g['CLOSED-CAPTIONS']; 2754 m.length && 2755 (m.some(function (t) { 2756 return !t.url; 2757 }) || 2758 !u[0].audioCodec || 2759 u[0].attrs.AUDIO || 2760 (w.log( 2761 '[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one' 2762 ), 2763 m.unshift({ 2764 type: 'main', 2765 name: 'main', 2766 groupId: 'main', 2767 default: !1, 2768 autoselect: !1, 2769 forced: !1, 2770 id: -1, 2771 attrs: new x({}), 2772 bitrate: 0, 2773 url: '', 2774 }))), 2775 n.trigger(S.MANIFEST_LOADED, { 2776 levels: u, 2777 audioTracks: m, 2778 subtitles: p, 2779 captions: y, 2780 contentSteering: l, 2781 url: s, 2782 stats: e, 2783 networkDetails: i, 2784 sessionData: h, 2785 sessionKeys: d, 2786 startTimeOffset: c, 2787 variableList: f, 2788 }); 2789 } 2790 }), 2791 (e.handleTrackOrLevelPlaylist = function (t, e, r, i, n) { 2792 var a = this.hls, 2793 s = r.id, 2794 o = r.level, 2795 l = r.type, 2796 u = Ue(t, r), 2797 h = y(o) ? o : y(s) ? s : 0, 2798 d = Ne(r), 2799 c = Le.parseLevelPlaylist(t.data, u, h, d, 0, this.variableList); 2800 if (l === Ce) { 2801 var f = { attrs: new x({}), bitrate: 0, details: c, name: '', url: u }; 2802 a.trigger(S.MANIFEST_LOADED, { 2803 levels: [f], 2804 audioTracks: [], 2805 url: u, 2806 stats: e, 2807 networkDetails: i, 2808 sessionData: null, 2809 sessionKeys: null, 2810 contentSteering: null, 2811 startTimeOffset: null, 2812 variableList: null, 2813 }); 2814 } 2815 (e.parsing.end = performance.now()), 2816 (r.levelDetails = c), 2817 this.handlePlaylistLoaded(c, t, e, r, i, n); 2818 }), 2819 (e.handleManifestParsingError = function (t, e, r, i, n) { 2820 this.hls.trigger(S.ERROR, {
2821 type: L.NETWORK_ERROR, 2822 details: A.MANIFEST_PARSING_ERROR, 2823 fatal: e.type === Ce, 2824 url: t.url, 2825 err: r, 2826 error: r, 2827 reason: r.message, 2828 response: t, 2829 context: e, 2830 networkDetails: i, 2831 stats: n, 2832 }); 2833 }), 2834 (e.handleNetworkError = function (t, e, r, n, a) { 2835 void 0 === r && (r = !1); 2836 var s = 2837 'A network ' + 2838 (r ? 'timeout' : 'error' + (n ? ' (status ' + n.code + ')' : '')) + 2839 ' occurred while loading ' + 2840 t.type; 2841 t.type === _e 2842 ? (s += ': ' + t.level + ' id: ' + t.id) 2843 : (t.type !== xe && t.type !== Pe) || 2844 (s += ' id: ' + t.id + ' group-id: "' + t.groupId + '"'); 2845 var o = new Error(s); 2846 w.warn('[playlist-loader]: ' + s); 2847 var l = A.UNKNOWN, 2848 u = !1, 2849 h = this.getInternalLoader(t); 2850 switch (t.type) { 2851 case Ce: 2852 (l = r ? A.MANIFEST_LOAD_TIMEOUT : A.MANIFEST_LOAD_ERROR), (u = !0); 2853 break; 2854 case _e: 2855 (l = r ? A.LEVEL_LOAD_TIMEOUT : A.LEVEL_LOAD_ERROR), (u = !1); 2856 break; 2857 case xe: 2858 (l = r ? A.AUDIO_TRACK_LOAD_TIMEOUT : A.AUDIO_TRACK_LOAD_ERROR), (u = !1); 2859 break; 2860 case Pe: 2861 (l = r ? A.SUBTITLE_TRACK_LOAD_TIMEOUT : A.SUBTITLE_LOAD_ERROR), (u = !1); 2862 } 2863 h && this.resetInternalLoader(t.type); 2864 var d = { 2865 type: L.NETWORK_ERROR, 2866 details: l, 2867 fatal: u, 2868 url: t.url, 2869 loader: h, 2870 context: t, 2871 error: o, 2872 networkDetails: e, 2873 stats: a, 2874 }; 2875 if (n) { 2876 var c = (null == e ? void 0 : e.url) || t.url; 2877 d.response = i({ url: c, data: void 0 }, n); 2878 } 2879 this.hls.trigger(S.ERROR, d); 2880 }), 2881 (e.handlePlaylistLoaded = function (t, e, r, i, n, a) { 2882 var s = this.hls, 2883 o = i.type, 2884 l = i.level, 2885 u = i.id, 2886 h = i.groupId, 2887 d = i.deliveryDirectives, 2888 c = Ue(e, i), 2889 f = Ne(i), 2890 g = 'number' == typeof i.level && f === Fe ? l : void 0; 2891 if (t.fragments.length) { 2892 t.targetduration || (t.playlistParsingError = new Error('Missing Target Duration')); 2893 var v = t.playlistParsingError; 2894 if (v) 2895 s.trigger(S.ERROR, { 2896 type: L.NETWORK_ERROR, 2897 details: A.LEVEL_PARSING_ERROR, 2898 fatal: !1, 2899 url: c, 2900 error: v, 2901 reason: v.message, 2902 response: e, 2903 context: i, 2904 level: g, 2905 parent: f, 2906 networkDetails: n, 2907 stats: r, 2908 }); 2909 else 2910 switch ( 2911 (t.live && 2912 a && 2913 (a.getCacheAge && (t.ageHeader = a.getCacheAge() || 0), 2914 (a.getCacheAge && !isNaN(t.ageHeader)) || (t.ageHeader = 0)), 2915 o) 2916 ) { 2917 case Ce: 2918 case _e: 2919 s.trigger(S.LEVEL_LOADED, { 2920 details: t, 2921 level: g || 0, 2922 id: u || 0, 2923 stats: r, 2924 networkDetails: n, 2925 deliveryDirectives: d, 2926 }); 2927 break; 2928 case xe: 2929 s.trigger(S.AUDIO_TRACK_LOADED, { 2930 details: t, 2931 id: u || 0, 2932 groupId: h || '', 2933 stats: r, 2934 networkDetails: n, 2935 deliveryDirectives: d, 2936 }); 2937 break; 2938 case Pe: 2939 s.trigger(S.SUBTITLE_TRACK_LOADED, { 2940 details: t, 2941 id: u || 0, 2942 groupId: h || '', 2943 stats: r, 2944 networkDetails: n, 2945 deliveryDirectives: d, 2946 }); 2947 } 2948 } else { 2949 var m = new Error('No Segments found in Playlist'); 2950 s.trigger(S.ERROR, {
2951 type: L.NETWORK_ERROR, 2952 details: A.LEVEL_EMPTY_ERROR, 2953 fatal: !1, 2954 url: c, 2955 error: m, 2956 reason: m.message, 2957 response: e, 2958 context: i, 2959 level: g, 2960 parent: f, 2961 networkDetails: n, 2962 stats: r, 2963 }); 2964 } 2965 }), 2966 t 2967 ); 2968 })(); 2969 function Ge(t, e) { 2970 var r; 2971 try { 2972 r = new Event('addtrack'); 2973 } catch (t) { 2974 (r = document.createEvent('Event')).initEvent('addtrack', !1, !1); 2975 } 2976 (r.track = t), e.dispatchEvent(r); 2977 } 2978 function Ke(t, e) { 2979 var r = t.mode; 2980 if (('disabled' === r && (t.mode = 'hidden'), t.cues && !t.cues.getCueById(e.id))) 2981 try { 2982 if ((t.addCue(e), !t.cues.getCueById(e.id))) 2983 throw new Error('addCue is failed for: ' + e); 2984 } catch (r) { 2985 w.debug('[texttrack-utils]: ' + r); 2986 try { 2987 var i = new self.TextTrackCue(e.startTime, e.endTime, e.text); 2988 (i.id = e.id), t.addCue(i); 2989 } catch (t) { 2990 w.debug('[texttrack-utils]: Legacy TextTrackCue fallback failed: ' + t); 2991 } 2992 } 2993 'disabled' === r && (t.mode = r); 2994 } 2995 function He(t) { 2996 var e = t.mode; 2997 if (('disabled' === e && (t.mode = 'hidden'), t.cues)) 2998 for (var r = t.cues.length; r--; ) t.removeCue(t.cues[r]); 2999 'disabled' === e && (t.mode = e); 3000 } 3001 function Ve(t, e, r, i) { 3002 var n = t.mode; 3003 if (('disabled' === n && (t.mode = 'hidden'), t.cues && t.cues.length > 0)) 3004 for ( 3005 var a = (function (t, e, r) { 3006 var i = [], 3007 n = (function (t, e) { 3008 if (e < t[0].startTime) return 0; 3009 var r = t.length - 1; 3010 if (e > t[r].endTime) return -1; 3011 for (var i = 0, n = r; i <= n; ) {
3012 var a = Math.floor((n + i) / 2); 3013 if (e < t[a].startTime) n = a - 1; 3014 else { 3015 if (!(e > t[a].startTime && i < r)) return a; 3016 i = a + 1; 3017 } 3018 } 3019 return t[i].startTime - e < e - t[n].startTime ? i : n; 3020 })(t, e); 3021 if (n > -1) 3022 for (var a = n, s = t.length; a < s; a++) { 3023 var o = t[a]; 3024 if (o.startTime >= e && o.endTime <= r) i.push(o); 3025 else if (o.startTime > r) return i; 3026 } 3027 return i; 3028 })(t.cues, e, r), 3029 s = 0; 3030 s < a.length; 3031 s++ 3032 ) 3033 (i && !i(a[s])) || t.removeCue(a[s]); 3034 'disabled' === n && (t.mode = n); 3035 } 3036 function Ye(t) { 3037 for (var e = [], r = 0; r < t.length; r++) { 3038 var i = t[r]; 3039 ('subtitles' !== i.kind && 'captions' !== i.kind) || !i.label || e.push(t[r]); 3040 } 3041 return e; 3042 } 3043 var We = 'org.id3', 3044 je = 'com.apple.quicktime.HLS', 3045 qe = 'https://aomedia.org/emsg/ID3'; 3046 function Xe() { 3047 if ('undefined' != typeof self) return self.VTTCue || self.TextTrackCue; 3048 } 3049 function ze(t, e, r, n, a) { 3050 var s = new t(e, r, ''); 3051 try { 3052 (s.value = n), a && (s.type = a); 3053 } catch (o) { 3054 s = new t(e, r, JSON.stringify(a ? i({ type: a }, n) : n)); 3055 } 3056 return s; 3057 } 3058 var Qe = (function () { 3059 var t = Xe(); 3060 try { 3061 t && new t(0, Number.POSITIVE_INFINITY, ''); 3062 } catch (t) { 3063 return Number.MAX_VALUE; 3064 } 3065 return Number.POSITIVE_INFINITY; 3066 })(); 3067 function Je(t, e) { 3068 return t.getTime() / 1e3 - e; 3069 } 3070 var $e = (function () { 3071 function t(t) { 3072 (this.hls = void 0), 3073 (this.id3Track = null), 3074 (this.media = null), 3075 (this.dateRangeCuesAppended = {}), 3076 (this.hls = t), 3077 this._registerListeners(); 3078 } 3079 var e = t.prototype; 3080 return ( 3081 (e.destroy = function () { 3082 this._unregisterListeners(), 3083 (this.id3Track = null), 3084 (this.media = null), 3085 (this.dateRangeCuesAppended = {}), 3086 (this.hls = null); 3087 }), 3088 (e._registerListeners = function () { 3089 var t = this.hls; 3090 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 3091 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 3092 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 3093 t.on(S.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this), 3094 t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 3095 t.on(S.LEVEL_UPDATED, this.onLevelUpdated, this); 3096 }), 3097 (e._unregisterListeners = function () { 3098 var t = this.hls; 3099 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 3100 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 3101 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 3102 t.off(S.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this), 3103 t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 3104 t.off(S.LEVEL_UPDATED, this.onLevelUpdated, this); 3105 }), 3106 (e.onMediaAttached = function (t, e) { 3107 this.media = e.media; 3108 }), 3109 (e.onMediaDetaching = function () { 3110 this.id3Track && 3111 (He(this.id3Track), 3112 (this.id3Track = null), 3113 (this.media = null), 3114 (this.dateRangeCuesAppended = {})); 3115 }), 3116 (e.onManifestLoading = function () { 3117 this.dateRangeCuesAppended = {}; 3118 }), 3119 (e.createTrack = function (t) { 3120 var e = this.getID3Track(t.textTracks); 3121 return (e.mode = 'hidden'), e; 3122 }), 3123 (e.getID3Track = function (t) { 3124 if (this.media) { 3125 for (var e = 0; e < t.length; e++) { 3126 var r = t[e]; 3127 if ('metadata' === r.kind && 'id3' === r.label) return Ge(r, this.media), r; 3128 } 3129 return this.media.addTextTrack('metadata', 'id3'); 3130 } 3131 }), 3132 (e.onFragParsingMetadata = function (t, e) { 3133 if (this.media) { 3134 var r = this.hls.config, 3135 i = r.enableEmsgMetadataCues, 3136 n = r.enableID3MetadataCues; 3137 if (i || n) { 3138 var a = e.samples; 3139 this.id3Track || (this.id3Track = this.createTrack(this.media)); 3140 var s = Xe(); 3141 if (s) 3142 for (var o = 0; o < a.length; o++) { 3143 var l = a[o].type; 3144 if ((l !== qe || i) && n) { 3145 var u = yt(a[o].data); 3146 if (u) { 3147 var h = a[o].pts, 3148 d = h + a[o].duration; 3149 d > Qe && (d = Qe), d - h <= 0 && (d = h + 0.25); 3150 for (var c = 0; c < u.length; c++) { 3151 var f = u[c]; 3152 if (!mt(f)) { 3153 this.updateId3CueEnds(h, l); 3154 var g = ze(s, h, d, f, l); 3155 g && this.id3Track.addCue(g); 3156 } 3157 } 3158 } 3159 } 3160 } 3161 } 3162 } 3163 }), 3164 (e.updateId3CueEnds = function (t, e) { 3165 var r, 3166 i = null == (r = this.id3Track) ? void 0 : r.cues; 3167 if (i) 3168 for (var n = i.length; n--; ) { 3169 var a = i[n]; 3170 a.type === e && a.startTime < t && a.endTime === Qe && (a.endTime = t); 3171 } 3172 }), 3173 (e.onBufferFlushing = function (t, e) { 3174 var r = e.startOffset, 3175 i = e.endOffset, 3176 n = e.type, 3177 a = this.id3Track, 3178 s = this.hls; 3179 if (s) { 3180 var o = s.config, 3181 l = o.enableEmsgMetadataCues, 3182 u = o.enableID3MetadataCues; 3183 a && 3184 (l || u) && 3185 Ve( 3186 a, 3187 r, 3188 i, 3189 'audio' === n 3190 ? function (t) { 3191 return t.type === We && u; 3192 } 3193 : 'video' === n 3194 ? function (t) { 3195 return t.type === qe && l; 3196 } 3197 : function (t) { 3198 return (t.type === We && u) || (t.type === qe && l); 3199 } 3200 ); 3201 } 3202 }), 3203 (e.onLevelUpdated = function (t, e) { 3204 var r = this, 3205 i = e.details; 3206 if ( 3207 this.media && 3208 i.hasProgramDateTime && 3209 this.hls.config.enableDateRangeMetadataCues 3210 ) { 3211 var n = this.dateRangeCuesAppended, 3212 a = this.id3Track, 3213 s = i.dateRanges, 3214 o = Object.keys(s); 3215 if (a) 3216 for ( 3217 var l = Object.keys(n).filter(function (t) { 3218 return !o.includes(t); 3219 }), 3220 u = function () { 3221 var t = l[h];
3222 Object.keys(n[t].cues).forEach(function (e) { 3223 a.removeCue(n[t].cues[e]); 3224 }), 3225 delete n[t]; 3226 }, 3227 h = l.length; 3228 h--; 3229 3230 ) 3231 u(); 3232 var d = i.fragments[i.fragments.length - 1]; 3233 if (0 !== o.length && y(null == d ? void 0 : d.programDateTime)) { 3234 this.id3Track || (this.id3Track = this.createTrack(this.media)); 3235 for ( 3236 var c = d.programDateTime / 1e3 - d.start, 3237 f = Xe(), 3238 g = function () { 3239 var t = o[v], 3240 e = s[t], 3241 i = Je(e.startDate, c), 3242 a = n[t], 3243 l = (null == a ? void 0 : a.cues) || {}, 3244 u = (null == a ? void 0 : a.durationKnown) || !1, 3245 h = Qe, 3246 d = e.endDate; 3247 if (d) (h = Je(d, c)), (u = !0); 3248 else if (e.endOnNext && !u) { 3249 var g = o.reduce(function (t, r) { 3250 if (r !== e.id) { 3251 var i = s[r]; 3252 if ( 3253 i.class === e.class && 3254 i.startDate > e.startDate && 3255 (!t || e.startDate < t.startDate) 3256 ) 3257 return i; 3258 } 3259 return t; 3260 }, null); 3261 g && ((h = Je(g.startDate, c)), (u = !0)); 3262 } 3263 for (var m, p, y = Object.keys(e.attr), E = 0; E < y.length; E++) { 3264 var T = y[E]; 3265 if ( 3266 'ID' !== (p = T) && 3267 'CLASS' !== p && 3268 'START-DATE' !== p && 3269 'DURATION' !== p && 3270 'END-DATE' !== p && 3271 'END-ON-NEXT' !== p 3272 ) { 3273 var S = l[T]; 3274 if (S) u && !a.durationKnown && (S.endTime = h); 3275 else if (f) { 3276 var L = e.attr[T]; 3277 P(T) && 3278 ((m = L), 3279 (L = Uint8Array.from( 3280 m 3281 .replace(/^0x/, '') 3282 .replace(/([\da-fA-F]{2}) ?/g, '0x$1 ') 3283 .replace(/ +$/, '') 3284 .split(' ') 3285 ).buffer)); 3286 var A = ze(f, i, h, { key: T, data: L }, je); 3287 A && ((A.id = t), r.id3Track.addCue(A), (l[T] = A)); 3288 } 3289 } 3290 } 3291 n[t] = { cues: l, dateRange: e, durationKnown: u }; 3292 }, 3293 v = 0; 3294 v < o.length; 3295 v++ 3296 ) 3297 g(); 3298 } 3299 } 3300 }), 3301 t 3302 ); 3303 })(), 3304 Ze = (function () { 3305 function t(t) { 3306 var e = this; 3307 (this.hls = void 0), 3308 (this.config = void 0), 3309 (this.media = null), 3310 (this.levelDetails = null), 3311 (this.currentTime = 0), 3312 (this.stallCount = 0), 3313 (this._latency = null),
3314 (this.timeupdateHandler = function () { 3315 return e.timeupdate(); 3316 }), 3317 (this.hls = t), 3318 (this.config = t.config), 3319 this.registerListeners(); 3320 } 3321 var e = t.prototype; 3322 return ( 3323 (e.destroy = function () { 3324 this.unregisterListeners(), 3325 this.onMediaDetaching(), 3326 (this.levelDetails = null), 3327 (this.hls = this.timeupdateHandler = null); 3328 }), 3329 (e.registerListeners = function () { 3330 this.hls.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 3331 this.hls.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 3332 this.hls.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 3333 this.hls.on(S.LEVEL_UPDATED, this.onLevelUpdated, this), 3334 this.hls.on(S.ERROR, this.onError, this); 3335 }), 3336 (e.unregisterListeners = function () { 3337 this.hls.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 3338 this.hls.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 3339 this.hls.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 3340 this.hls.off(S.LEVEL_UPDATED, this.onLevelUpdated, this), 3341 this.hls.off(S.ERROR, this.onError, this); 3342 }), 3343 (e.onMediaAttached = function (t, e) { 3344 (this.media = e.media), 3345 this.media.addEventListener('timeupdate', this.timeupdateHandler); 3346 }), 3347 (e.onMediaDetaching = function () { 3348 this.media && 3349 (this.media.removeEventListener('timeupdate', this.timeupdateHandler), 3350 (this.media = null)); 3351 }), 3352 (e.onManifestLoading = function () { 3353 (this.levelDetails = null), (this._latency = null), (this.stallCount = 0); 3354 }), 3355 (e.onLevelUpdated = function (t, e) { 3356 var r = e.details; 3357 (this.levelDetails = r), 3358 r.advanced && this.timeupdate(), 3359 !r.live && 3360 this.media && 3361 this.media.removeEventListener('timeupdate', this.timeupdateHandler); 3362 }), 3363 (e.onError = function (t, e) { 3364 var r; 3365 e.details === A.BUFFER_STALLED_ERROR && 3366 (this.stallCount++, 3367 null != (r = this.levelDetails) && 3368 r.live && 3369 w.warn('[playback-rate-controller]: Stall detected, adjusting target latency')); 3370 }), 3371 (e.timeupdate = function () { 3372 var t = this.media, 3373 e = this.levelDetails; 3374 if (t && e) { 3375 this.currentTime = t.currentTime; 3376 var r = this.computeLatency(); 3377 if (null !== r) { 3378 this._latency = r; 3379 var i = this.config, 3380 n = i.lowLatencyMode, 3381 a = i.maxLiveSyncPlaybackRate; 3382 if (n && 1 !== a && e.live) { 3383 var s = this.targetLatency; 3384 if (null !== s) { 3385 var o = r - s; 3386 if ( 3387 o < Math.min(this.maxLatency, s + e.targetduration) && 3388 o > 0.05 && 3389 this.forwardBufferLength > 1 3390 ) { 3391 var l = Math.min(2, Math.max(1, a)), 3392 u = 3393 Math.round((2 / (1 + Math.exp(-0.75 * o - this.edgeStalled))) * 20) / 3394 20; 3395 t.playbackRate = Math.min(l, Math.max(1, u)); 3396 } else 1 !== t.playbackRate && 0 !== t.playbackRate && (t.playbackRate = 1); 3397 } 3398 } 3399 } 3400 } 3401 }), 3402 (e.estimateLiveEdge = function () { 3403 var t = this.levelDetails; 3404 return null === t ? null : t.edge + t.age; 3405 }), 3406 (e.computeLatency = function () { 3407 var t = this.estimateLiveEdge(); 3408 return null === t ? null : t - this.currentTime; 3409 }), 3410 s(t, [ 3411 { 3412 key: 'latency', 3413 get: function () { 3414 return this._latency || 0; 3415 }, 3416 }, 3417 { 3418 key: 'maxLatency', 3419 get: function () { 3420 var t = this.config, 3421 e = this.levelDetails; 3422 return void 0 !== t.liveMaxLatencyDuration 3423 ? t.liveMaxLatencyDuration 3424 : e 3425 ? t.liveMaxLatencyDurationCount * e.targetduration 3426 : 0; 3427 }, 3428 }, 3429 { 3430 key: 'targetLatency', 3431 get: function () { 3432 var t = this.levelDetails; 3433 if (null === t) return null; 3434 var e = t.holdBack, 3435 r = t.partHoldBack, 3436 i = t.targetduration, 3437 n = this.config, 3438 a = n.liveSyncDuration, 3439 s = n.liveSyncDurationCount, 3440 o = n.lowLatencyMode, 3441 l = this.hls.userConfig, 3442 u = (o && r) || e; 3443 (l.liveSyncDuration || l.liveSyncDurationCount || 0 === u) && 3444 (u = void 0 !== a ? a : s * i); 3445 var h = i; 3446 return u + Math.min(1 * this.stallCount, h); 3447 }, 3448 }, 3449 { 3450 key: 'liveSyncPosition', 3451 get: function () { 3452 var t = this.estimateLiveEdge(), 3453 e = this.targetLatency, 3454 r = this.levelDetails; 3455 if (null === t || null === e || null === r) return null; 3456 var i = r.edge, 3457 n = t - e - this.edgeStalled, 3458 a = i - r.totalduration,
3459 s = i - ((this.config.lowLatencyMode && r.partTarget) || r.targetduration); 3460 return Math.min(Math.max(a, n), s); 3461 }, 3462 }, 3463 { 3464 key: 'drift', 3465 get: function () { 3466 var t = this.levelDetails; 3467 return null === t ? 1 : t.drift; 3468 }, 3469 }, 3470 { 3471 key: 'edgeStalled', 3472 get: function () { 3473 var t = this.levelDetails; 3474 if (null === t) return 0; 3475 var e = 3 * ((this.config.lowLatencyMode && t.partTarget) || t.targetduration); 3476 return Math.max(t.age - e, 0); 3477 }, 3478 }, 3479 { 3480 key: 'forwardBufferLength', 3481 get: function () { 3482 var t = this.media, 3483 e = this.levelDetails; 3484 if (!t || !e) return 0; 3485 var r = t.buffered.length; 3486 return (r ? t.buffered.end(r - 1) : e.edge) - this.currentTime; 3487 }, 3488 }, 3489 ]), 3490 t 3491 ); 3492 })(), 3493 tr = ['NONE', 'TYPE-0', 'TYPE-1', null], 3494 er = ['SDR', 'PQ', 'HLG'], 3495 rr = '', 3496 ir = 'YES', 3497 nr = 'v2'; 3498 function ar(t) { 3499 var e = t.canSkipUntil, 3500 r = t.canSkipDateRanges, 3501 i = t.age; 3502 return e && i < e / 2 ? (r ? nr : ir) : rr; 3503 } 3504 var sr = (function () { 3505 function t(t, e, r) { 3506 (this.msn = void 0), 3507 (this.part = void 0), 3508 (this.skip = void 0), 3509 (this.msn = t), 3510 (this.part = e), 3511 (this.skip = r); 3512 } 3513 return ( 3514 (t.prototype.addDirectives = function (t) { 3515 var e = new self.URL(t); 3516 return ( 3517 void 0 !== this.msn && e.searchParams.set('_HLS_msn', this.msn.toString()), 3518 void 0 !== this.part && e.searchParams.set('_HLS_part', this.part.toString()), 3519 this.skip && e.searchParams.set('_HLS_skip', this.skip), 3520 e.href 3521 ); 3522 }), 3523 t 3524 ); 3525 })(), 3526 or = (function () { 3527 function t(t) { 3528 (this._attrs = void 0), 3529 (this.audioCodec = void 0), 3530 (this.bitrate = void 0), 3531 (this.codecSet = void 0), 3532 (this.url = void 0), 3533 (this.frameRate = void 0), 3534 (this.height = void 0), 3535 (this.id = void 0), 3536 (this.name = void 0), 3537 (this.videoCodec = void 0), 3538 (this.width = void 0), 3539 (this.details = void 0), 3540 (this.fragmentError = 0), 3541 (this.loadError = 0), 3542 (this.loaded = void 0), 3543 (this.realBitrate = 0), 3544 (this.supportedPromise = void 0), 3545 (this.supportedResult = void 0), 3546 (this._avgBitrate = 0), 3547 (this._audioGroups = void 0), 3548 (this._subtitleGroups = void 0), 3549 (this._urlId = 0), 3550 (this.url = [t.url]), 3551 (this._attrs = [t.attrs]), 3552 (this.bitrate = t.bitrate), 3553 t.details && (this.details = t.details), 3554 (this.id = t.id || 0), 3555 (this.name = t.name), 3556 (this.width = t.width || 0), 3557 (this.height = t.height || 0), 3558 (this.frameRate = t.attrs.optionalFloat('FRAME-RATE', 0)), 3559 (this._avgBitrate = t.attrs.decimalInteger('AVERAGE-BANDWIDTH')), 3560 (this.audioCodec = t.audioCodec), 3561 (this.videoCodec = t.videoCodec), 3562 (this.codecSet = [t.videoCodec, t.audioCodec] 3563 .filter(function (t) { 3564 return !!t; 3565 }) 3566 .map(function (t) { 3567 return t.substring(0, 4); 3568 }) 3569 .join(',')), 3570 this.addGroupId('audio', t.attrs.AUDIO), 3571 this.addGroupId('text', t.attrs.SUBTITLES); 3572 } 3573 var e = t.prototype; 3574 return ( 3575 (e.hasAudioGroup = function (t) { 3576 return lr(this._audioGroups, t); 3577 }), 3578 (e.hasSubtitleGroup = function (t) { 3579 return lr(this._subtitleGroups, t); 3580 }), 3581 (e.addGroupId = function (t, e) { 3582 if (e) 3583 if ('audio' === t) { 3584 var r = this._audioGroups; 3585 r || (r = this._audioGroups = []), -1 === r.indexOf(e) && r.push(e); 3586 } else if ('text' === t) { 3587 var i = this._subtitleGroups; 3588 i || (i = this._subtitleGroups = []), -1 === i.indexOf(e) && i.push(e); 3589 } 3590 }), 3591 (e.addFallback = function () {}), 3592 s(t, [ 3593 { 3594 key: 'maxBitrate', 3595 get: function () { 3596 return Math.max(this.realBitrate, this.bitrate); 3597 }, 3598 }, 3599 { 3600 key: 'averageBitrate', 3601 get: function () { 3602 return this._avgBitrate || this.realBitrate || this.bitrate; 3603 }, 3604 }, 3605 { 3606 key: 'attrs', 3607 get: function () { 3608 return this._attrs[0]; 3609 }, 3610 }, 3611 { 3612 key: 'codecs', 3613 get: function () { 3614 return this.attrs.CODECS || ''; 3615 }, 3616 }, 3617 { 3618 key: 'pathwayId', 3619 get: function () { 3620 return this.attrs['PATHWAY-ID'] || '.'; 3621 }, 3622 }, 3623 { 3624 key: 'videoRange', 3625 get: function () { 3626 return this.attrs['VIDEO-RANGE'] || 'SDR'; 3627 }, 3628 }, 3629 { 3630 key: 'score', 3631 get: function () { 3632 return this.attrs.optionalFloat('SCORE', 0); 3633 }, 3634 }, 3635 { 3636 key: 'uri', 3637 get: function () { 3638 return this.url[0] || ''; 3639 }, 3640 }, 3641 { 3642 key: 'audioGroups', 3643 get: function () { 3644 return this._audioGroups; 3645 }, 3646 }, 3647 { 3648 key: 'subtitleGroups', 3649 get: function () { 3650 return this._subtitleGroups; 3651 }, 3652 }, 3653 { 3654 key: 'urlId', 3655 get: function () { 3656 return 0; 3657 }, 3658 set: function (t) {}, 3659 }, 3660 { 3661 key: 'audioGroupIds', 3662 get: function () { 3663 return this.audioGroups ? [this.audioGroupId] : void 0; 3664 }, 3665 }, 3666 { 3667 key: 'textGroupIds', 3668 get: function () { 3669 return this.subtitleGroups ? [this.textGroupId] : void 0; 3670 }, 3671 }, 3672 { 3673 key: 'audioGroupId', 3674 get: function () { 3675 var t; 3676 return null == (t = this.audioGroups) ? void 0 : t[0]; 3677 }, 3678 }, 3679 { 3680 key: 'textGroupId', 3681 get: function () { 3682 var t; 3683 return null == (t = this.subtitleGroups) ? void 0 : t[0]; 3684 }, 3685 }, 3686 ]), 3687 t 3688 ); 3689 })(); 3690 function lr(t, e) { 3691 return !(!e || !t) && -1 !== t.indexOf(e); 3692 } 3693 function ur(t, e) { 3694 var r = e.startPTS; 3695 if (y(r)) { 3696 var i, 3697 n = 0; 3698 e.sn > t.sn ? ((n = r - t.start), (i = t)) : ((n = t.start - r), (i = e)), 3699 i.duration !== n && (i.duration = n); 3700 } else 3701 e.sn > t.sn 3702 ? t.cc === e.cc && t.minEndPTS 3703 ? (e.start = t.start + (t.minEndPTS - t.start)) 3704 : (e.start = t.start + t.duration) 3705 : (e.start = Math.max(t.start - e.duration, 0)); 3706 } 3707 function hr(t, e, r, i, n, a) { 3708 i - r <= 0 && 3709 (w.warn('Fragment should have a positive duration', e), 3710 (i = r + e.duration), 3711 (a = n + e.duration)); 3712 var s = r, 3713 o = i, 3714 l = e.startPTS, 3715 u = e.endPTS; 3716 if (y(l)) { 3717 var h = Math.abs(l - r); 3718 y(e.deltaPTS) ? (e.deltaPTS = Math.max(h, e.deltaPTS)) : (e.deltaPTS = h), 3719 (s = Math.max(r, l)), 3720 (r = Math.min(r, l)), 3721 (n = Math.min(n, e.startDTS)), 3722 (o = Math.min(i, u)), 3723 (i = Math.max(i, u)), 3724 (a = Math.max(a, e.endDTS)); 3725 } 3726 var d = r - e.start; 3727 0 !== e.start && (e.start = r), 3728 (e.duration = i - e.start), 3729 (e.startPTS = r), 3730 (e.maxStartPTS = s), 3731 (e.startDTS = n), 3732 (e.endPTS = i), 3733 (e.minEndPTS = o), 3734 (e.endDTS = a); 3735 var c, 3736 f = e.sn; 3737 if (!t || f < t.startSN || f > t.endSN) return 0; 3738 var g = f - t.startSN, 3739 v = t.fragments; 3740 for (v[g] = e, c = g; c > 0; c--) ur(v[c], v[c - 1]); 3741 for (c = g; c < v.length - 1; c++) ur(v[c], v[c + 1]); 3742 return ( 3743 t.fragmentHint && ur(v[v.length - 1], t.fragmentHint), 3744 (t.PTSKnown = t.alignedSliding = !0), 3745 d 3746 ); 3747 } 3748 function dr(t, e) { 3749 for (var r = null, i = t.fragments, n = i.length - 1; n >= 0; n--) { 3750 var a = i[n].initSegment; 3751 if (a) { 3752 r = a; 3753 break; 3754 } 3755 } 3756 t.fragmentHint && delete t.fragmentHint.endPTS; 3757 var s, 3758 l, 3759 u, 3760 h, 3761 d, 3762 c = 0; 3763 if ( 3764 ((function (t, e, r) { 3765 for ( 3766 var i = e.skippedSegments, 3767 n = Math.max(t.startSN, e.startSN) - e.startSN, 3768 a = 3769 (t.fragmentHint ? 1 : 0) + (i ? e.endSN : Math.min(t.endSN, e.endSN)) - e.startSN, 3770 s = e.startSN - t.startSN, 3771 o = e.fragmentHint ? e.fragments.concat(e.fragmentHint) : e.fragments, 3772 l = t.fragmentHint ? t.fragments.concat(t.fragmentHint) : t.fragments, 3773 u = n; 3774 u <= a; 3775 u++ 3776 ) { 3777 var h = l[s + u], 3778 d = o[u]; 3779 i && !d && u < i && (d = e.fragments[u] = h), h && d && r(h, d); 3780 } 3781 })(t, e, function (t, i) { 3782 t.relurl && (c = t.cc - i.cc), 3783 y(t.startPTS) && 3784 y(t.endPTS) && 3785 ((i.start = i.startPTS = t.startPTS), 3786 (i.startDTS = t.startDTS), 3787 (i.maxStartPTS = t.maxStartPTS), 3788 (i.endPTS = t.endPTS), 3789 (i.endDTS = t.endDTS), 3790 (i.minEndPTS = t.minEndPTS), 3791 (i.duration = t.endPTS - t.startPTS), 3792 i.duration && (s = i), 3793 (e.PTSKnown = e.alignedSliding = !0)), 3794 (i.elementaryStreams = t.elementaryStreams), 3795 (i.loader = t.loader), 3796 (i.stats = t.stats), 3797 t.initSegment && ((i.initSegment = t.initSegment), (r = t.initSegment)); 3798 }), 3799 r && 3800 (e.fragmentHint ? e.fragments.concat(e.fragmentHint) : e.fragments).forEac
3800h(function ( 3801 t 3802 ) { 3803 var e; 3804 !t || 3805 (t.initSegment && t.initSegment.relurl !== (null == (e = r) ? void 0 : e.relurl)) || 3806 (t.initSegment = r); 3807 }), 3808 e.skippedSegments) 3809 ) 3810 if ( 3811 ((e.deltaUpdateFailed = e.fragments.some(function (t) { 3812 return !t; 3813 })), 3814 e.deltaUpdateFailed) 3815 ) { 3816 w.warn('[level-helper] Previous playlist missing segments skipped in delta playlist'); 3817 for (var f = e.skippedSegments; f--; ) e.fragments.shift(); 3818 (e.startSN = e.fragments[0].sn), (e.startCC = e.fragments[0].cc); 3819 } else 3820 e.canSkipDateRanges && 3821 (e.dateRanges = 3822 ((l = t.dateRanges), 3823 (u = e.dateRanges), 3824 (h = e.recentlyRemovedDateranges), 3825 (d = o({}, l)), 3826 h && 3827 h.forEach(function (t) { 3828 delete d[t]; 3829 }), 3830 Object.keys(u).forEach(function (t) { 3831 var e = new F(u[t].attr, d[t]); 3832 e.isValid 3833 ? (d[t] = e) 3834 : w.warn( 3835 'Ignoring invalid Playlist Delta Update DATERANGE tag: "' + 3836 JSON.stringify(u[t].attr) + 3837 '"' 3838 ); 3839 }), 3840 d)); 3841 var g = e.fragments; 3842 if (c) { 3843 w.warn('discontinuity sliding from playlist, take drift into account'); 3844 for (var v = 0; v < g.length; v++) g[v].cc += c; 3845 } 3846 e.skippedSegments && (e.startCC = e.fragments[0].cc), 3847 (function (t, e, r) { 3848 if (t && e) 3849 for (var i = 0, n = 0, a = t.length; n <= a; n++) { 3850 var s = t[n], 3851 o = e[n + i]; 3852 s && o && s.index === o.index && s.fragment.sn === o.fragment.sn ? r(s, o) : i--; 3853 } 3854 })(t.partList, e.partList, function (t, e) { 3855 (e.elementaryStreams = t.elementaryStreams), (e.stats = t.stats); 3856 }), 3857 s ? hr(e, s, s.startPTS, s.endPTS, s.startDTS, s.endDTS) : cr(t, e), 3858 g.length && (e.totalduration = e.edge - g[0].start), 3859 (e.driftStartTime = t.driftStartTime), 3860 (e.driftStart = t.driftStart); 3861 var m = e.advancedDateTime; 3862 if (e.advanced && m) { 3863 var p = e.edge; 3864 e.driftStart || ((e.driftStartTime = m), (e.driftStart = p)), 3865 (e.driftEndTime = m), 3866 (e.driftEnd = p); 3867 } else 3868 (e.driftEndTime = t.driftEndTime), 3869 (e.driftEnd = t.driftEnd), 3870 (e.advancedDateTime = t.advancedDateTime); 3871 } 3872 function cr(t, e) { 3873 var r = e.startSN + e.skippedSegments - t.startSN, 3874 i = t.fragments; 3875 r < 0 || r >= i.length || fr(e, i[r].start); 3876 } 3877 function fr(t, e) { 3878 if (e) { 3879 for (var r = t.fragments, i = t.skippedSegments; i < r.length; i++) r[i].start += e; 3880 t.fragmentHint && (t.fragmentHint.start += e); 3881 } 3882 } 3883 function gr(t, e, r) { 3884 var i; 3885 return null != t && t.details 3886 ? vr(null == (i = t.details) ? void 0 : i.partList, e, r) 3887 : null; 3888 } 3889 function vr(t, e, r) { 3890 if (t) 3891 for (var i = t.length; i--; ) { 3892 var n = t[i]; 3893 if (n.index === r && n.fragment.sn === e) return n; 3894 } 3895 return null; 3896 } 3897 function mr(t) { 3898 t.forEach(function (t, e) { 3899 var r = t.details; 3900 null != r && 3901 r.fragments && 3902 r.fragments.forEach(function (t) { 3903 t.level = e; 3904 }); 3905 }); 3906 } 3907 function pr(t) { 3908 switch (t.details) { 3909 case A.FRAG_LOAD_TIMEOUT: 3910 case A.KEY_LOAD_TIMEOUT: 3911 case A.LEVEL_LOAD_TIMEOUT: 3912 case A.MANIFEST_LOAD_TIMEOUT: 3913 return !0; 3914 } 3915 return !1; 3916 } 3917 function yr(t, e) { 3918 var r = pr(e); 3919 return t.default[(r ? 'timeout' : 'error') + 'Retry']; 3920 } 3921 function Er(t, e) { 3922 var r = 'linear' === t.backoff ? 1 : Math.pow(2, e); 3923 return Math.min(r * t.retryDelayMs, t.maxRetryDelayMs); 3924 } 3925 function Tr(t) { 3926 return i(i({}, t), { errorRetry: null, timeoutRetry: null }); 3927 } 3928 function Sr(t, e, r, i) { 3929 if (!t) return !1; 3930 var n = null == i ? void 0 : i.code, 3931 a = 3932 e < t.maxNumRetry && 3933 ((function (t) { 3934 return (0 === t && !1 === navigator.onLine) || (!!t && (t < 400 || t > 499)); 3935 })(n) || 3936 !!r); 3937 return t.shouldRetry ? t.shouldRetry(t, e, r, i, a) : a; 3938 } 3939 var Lr = function (t, e) { 3940 for (var r = 0, i = t.length - 1, n = null, a = null; r <= i; ) { 3941 var s = e((a = t[(n = ((r + i) / 2) | 0)])); 3942 if (s > 0) r = n + 1; 3943 else { 3944 if (!(s < 0)) return a; 3945 i = n - 1; 3946 } 3947 } 3948 return null; 3949 }; 3950 function Ar(t, e, r, i, n) { 3951 void 0 === r && (r = 0), void 0 === i && (i = 0), void 0 === n && (n = 0.005); 3952 var a = null; 3953 if (t) { 3954 a = e[t.sn - e[0].sn + 1] || null; 3955 var s = t.endDTS - r; 3956 s > 0 && s < 15e-7 && (r += 15e-7); 3957 } else 0 === r && 0 === e[0].start && (a = e[0]); 3958 if ( 3959 a && 3960 (((!t || t.level === a.level) && 0 === Rr(r, i, a)) || 3961 (function (t, e, r) { 3962 if (e && 0 === e.start && e.level < t.level && (e.endPTS || 0) > 0) { 3963 var i = e.tagList.reduce(function (t, e) { 3964 return 'INF' === e[0] && (t += parseFloat(e[1])), t; 3965 }, r); 3966 return t.start <= i; 3967 } 3968 return !1; 3969 }
3969)(a, t, Math.min(n, i))) 3970 ) 3971 return a; 3972 var o = Lr(e, Rr.bind(null, r, i)); 3973 return !o || (o === t && a) ? a : o; 3974 } 3975 function Rr(t, e, r) { 3976 if ( 3977 (void 0 === t && (t = 0), 3978 void 0 === e && (e = 0), 3979 r.start <= t && r.start + r.duration > t) 3980 ) 3981 return 0; 3982 var i = Math.min(e, r.duration + (r.deltaPTS ? r.deltaPTS : 0)); 3983 return r.start + r.duration - i <= t ? 1 : r.start - i > t && r.start ? -1 : 0; 3984 } 3985 function br(t, e, r) { 3986 var i = 1e3 * Math.min(e, r.duration + (r.deltaPTS ? r.deltaPTS : 0)); 3987 return (r.endProgramDateTime || 0) - i > t; 3988 } 3989 var kr = 0, 3990 Dr = 2, 3991 Ir = 3, 3992 wr = 5, 3993 Cr = 0, 3994 _r = 1, 3995 xr = 2, 3996 Pr = (function () { 3997 function t(t) { 3998 (this.hls = void 0), 3999 (this.playlistError = 0), 4000 (this.penalizedRenditions = {}), 4001 (this.log = void 0), 4002 (this.warn = void 0), 4003 (this.error = void 0), 4004 (this.hls = t), 4005 (this.log = w.log.bind(w, '[info]:')), 4006 (this.warn = w.warn.bind(w, '[warning]:')), 4007 (this.error = w.error.bind(w, '[error]:')), 4008 this.registerListeners(); 4009 } 4010 var e = t.prototype; 4011 return ( 4012 (e.registerListeners = function () { 4013 var t = this.hls; 4014 t.on(S.ERROR, this.onError, this), 4015 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 4016 t.on(S.LEVEL_UPDATED, this.onLevelUpdated, this); 4017 }), 4018 (e.unregisterListeners = function () { 4019 var t = this.hls; 4020 t && 4021 (t.off(S.ERROR, this.onError, this), 4022 t.off(S.ERROR, this.onErrorOut, this), 4023 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 4024 t.off(S.LEVEL_UPDATED, this.onLevelUpdated, this)); 4025 }), 4026 (e.destroy = function () { 4027 this.unregisterListeners(), (this.hls = null), (this.penalizedRenditions = {}); 4028 }), 4029 (e.startLoad = function (t) {}), 4030 (e.stopLoad = function () { 4031 this.playlistError = 0; 4032 }), 4033 (e.getVariantLevelIndex = function (t) { 4034 return (null == t ? void 0 : t.type) === Fe ? t.level : this.hls.loadLevel; 4035 }), 4036 (e.onManifestLoading = function () { 4037 (this.playlistError = 0), (this.penalizedRenditions = {}); 4038 }), 4039 (e.onLevelUpdated = function () { 4040 this.playlistError = 0; 4041 }), 4042 (e.onError = function (t, e) { 4043 var r, i; 4044 if (!e.fatal) { 4045 var n = this.hls, 4046 a = e.context; 4047 switch (e.details) { 4048 case A.FRAG_LOAD_ERROR: 4049 case A.FRAG_LOAD_TIMEOUT: 4050 case A.KEY_LOAD_ERROR: 4051 case A.KEY_LOAD_TIMEOUT: 4052 return void (e.errorAction = this.getFragRetryOrSwitchAction(e)); 4053 case A.FRAG_PARSING_ERROR: 4054 if (null != (r = e.frag) && r.gap) 4055 return void (e.errorAction = { action: kr, flags: Cr }); 4056 case A.FRAG_GAP: 4057 case A.FRAG_DECRYPT_ERROR: 4058 return ( 4059 (e.errorAction = this.getFragRetryOrSwitchAction(e)), 4060 void (e.errorAction.action = Dr) 4061 ); 4062 case A.LEVEL_EMPTY_ERROR: 4063 case A.LEVEL_PARSING_ERROR: 4064 var s, 4065 o, 4066 l = e.parent === Fe ? e.level : n.loadLevel; 4067 return void (e.details === A.LEVEL_EMPTY_ERROR && 4068 null != (s = e.context) && 4069 null != (o = s.levelDetails) && 4070 o.live 4071 ? (e.errorAction = this.getPlaylistRetryOrSwitchAction(e, l)) 4072 : ((e.levelRetry = !1), (e.errorAction = this.getLevelSwitchAction(e, l)))); 4073 case A.LEVEL_LOAD_ERROR: 4074 case A.LEVEL_LOAD_TIMEOUT: 4075 return void ( 4076 'number' == typeof (null == a ? void 0 : a.level) && 4077 (e.errorAction = this.getPlaylistRetryOrSwitchAction(e, a.level)) 4078 ); 4079 case A.AUDIO_TRACK_LOAD_ERROR: 4080 case A.AUDIO_TRACK_LOAD_TIMEOUT: 4081 case A.SUBTITLE_LOAD_ERROR: 4082 case A.SUBTITLE_TRACK_LOAD_TIMEOUT: 4083 if (a) { 4084 var u = n.levels[n.loadLevel]; 4085 if ( 4086 u && 4087 ((a.type === xe && u.hasAudioGroup(a.groupId)) || 4088 (a.type === Pe && u.hasSubtitleGroup(a.groupId))) 4089 ) 4090 return ( 4091 (e.errorAction = this.getPlaylistRetryOrSwitchAction(e, n.loadLevel)), 4092 (e.errorAction.action = Dr), 4093 void (e.errorAction.flags = _r) 4094 ); 4095 } 4096 return; 4097 case A.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED: 4098 var h = n.levels[n.loadLevel], 4099 d = null == h ? void 0 : h.attrs['HDCP-LEVEL']; 4100 return void (d 4101 ? (e.errorAction = { action: Dr, flags: xr, hdcpLevel: d }) 4102 : this.keySystemError(e)); 4103 case A.BUFFER_ADD_CODEC_ERROR:
4104 case A.REMUX_ALLOC_ERROR: 4105 case A.BUFFER_APPEND_ERROR: 4106 return void (e.errorAction = this.getLevelSwitchAction( 4107 e, 4108 null != (i = e.level) ? i : n.loadLevel 4109 )); 4110 case A.INTERNAL_EXCEPTION: 4111 case A.BUFFER_APPENDING_ERROR: 4112 case A.BUFFER_FULL_ERROR: 4113 case A.LEVEL_SWITCH_ERROR: 4114 case A.BUFFER_STALLED_ERROR: 4115 case A.BUFFER_SEEK_OVER_HOLE: 4116 case A.BUFFER_NUDGE_ON_STALL: 4117 return void (e.errorAction = { action: kr, flags: Cr }); 4118 } 4119 e.type === L.KEY_SYSTEM_ERROR && this.keySystemError(e); 4120 } 4121 }), 4122 (e.keySystemError = function (t) { 4123 var e = this.getVariantLevelIndex(t.frag); 4124 (t.levelRetry = !1), (t.errorAction = this.getLevelSwitchAction(t, e)); 4125 }), 4126 (e.getPlaylistRetryOrSwitchAction = function (t, e) { 4127 var r = yr(this.hls.config.playlistLoadPolicy, t), 4128 i = this.playlistError++; 4129 if (Sr(r, i, pr(t), t.response)) 4130 return { action: wr, flags: Cr, retryConfig: r, retryCount: i }; 4131 var n = this.getLevelSwitchAction(t, e); 4132 return r && ((n.retryConfig = r), (n.retryCount = i)), n; 4133 }), 4134 (e.getFragRetryOrSwitchAction = function (t) { 4135 var e = this.hls, 4136 r = this.getVariantLevelIndex(t.frag), 4137 i = e.levels[r], 4138 n = e.config, 4139 a = n.fragLoadPolicy, 4140 s = n.keyLoadPolicy, 4141 o = yr(t.details.startsWith('key') ? s : a, t), 4142 l = e.levels.reduce(function (t, e) { 4143 return t + e.fragmentError; 4144 }, 0); 4145 if (i && (t.details !== A.FRAG_GAP && i.fragmentError++, Sr(o, l, pr(t), t.response))) 4146 return { action: wr, flags: Cr, retryConfig: o, retryCount: l }; 4147 var u = this.getLevelSwitchAction(t, r); 4148 return o && ((u.retryConfig = o), (u.retryCount = l)), u; 4149 }), 4150 (e.getLevelSwitchAction = function (t, e) { 4151 var r = this.hls; 4152 null == e && (e = r.loadLevel); 4153 var i = this.hls.levels[e]; 4154 if (i) { 4155 var n, 4156 a, 4157 s = t.details; 4158 i.loadError++, s === A.BUFFER_APPEND_ERROR && i.fragmentError++; 4159 var o = -1, 4160 l = r.levels, 4161 u = r.loadLevel, 4162 h = r.minAutoLevel, 4163 d = r.maxAutoLevel; 4164 r.autoLevelEnabled || (r.loadLevel = -1); 4165 for ( 4166 var c, 4167 f = null == (n = t.frag) ? void 0 : n.type, 4168 g = 4169 ((f === Me && s === A.FRAG_PARSING_ERROR) || 4170 ('audio' === t.sourceBufferName && 4171 (s === A.BUFFER_ADD_CODEC_ERROR || s === A.BUFFER_APPEND_ERROR))) && 4172 l.some(function (t) { 4173 var e = t.audioCodec; 4174 return i.audioCodec !== e; 4175 }), 4176 v = 4177 'video' === t.sourceBufferName && 4178 (s === A.BUFFER_ADD_CODEC_ERROR || s === A.BUFFER_APPEND_ERROR) && 4179 l.some(function (t) { 4180 var e = t.codecSet, 4181 r = t.audioCodec;
4182 return i.codecSet !== e && i.audioCodec === r; 4183 }), 4184 m = null != (a = t.context) ? a : {}, 4185 p = m.type, 4186 y = m.groupId, 4187 E = function () { 4188 var e = (T + u) % l.length; 4189 if (e !== u && e >= h && e <= d && 0 === l[e].loadError) { 4190 var r, 4191 n, 4192 a = l[e]; 4193 if (s === A.FRAG_GAP && f === Fe && t.frag) { 4194 var c = l[e].details; 4195 if (c) { 4196 var m = Ar(t.frag, c.fragments, t.frag.start); 4197 if (null != m && m.gap) return 0; 4198 } 4199 } else { 4200 if ( 4201 (p === xe && a.hasAudioGroup(y)) || 4202 (p === Pe && a.hasSubtitleGroup(y)) 4203 ) 4204 return 0; 4205 if ( 4206 (f === Me && 4207 null != (r = i.audioGroups) && 4208 r.some(function (t) { 4209 return a.hasAudioGroup(t); 4210 })) || 4211 (f === Oe && 4212 null != (n = i.subtitleGroups) && 4213 n.some(function (t) { 4214 return a.hasSubtitleGroup(t); 4215 })) || 4216 (g && i.audioCodec === a.audioCodec) || 4217 (!g && i.audioCodec !== a.audioCodec) || 4218 (v && i.codecSet === a.codecSet) 4219 ) 4220 return 0; 4221 } 4222 return (o = e), 1; 4223 } 4224 }, 4225 T = l.length; 4226 T-- && (0 === (c = E()) || 1 !== c); 4227 4228 ); 4229 if (o > -1 && r.loadLevel !== o) 4230 return ( 4231 (t.levelRetry = !0), 4232 (this.playlistError = 0), 4233 { action: Dr, flags: Cr, nextAutoLevel: o } 4234 ); 4235 } 4236 return { action: Dr, flags: _r }; 4237 }), 4238 (e.onErrorOut = function (t, e) { 4239 var r; 4240 switch (null == (r = e.errorAction) ? void 0 : r.action) { 4241 case kr: 4242 break; 4243 case Dr: 4244 this.sendAlternateToPenaltyBox(e), 4245 e.errorAction.resolved || e.details === A.FRAG_GAP 4246 ? /MediaSource readyState: ended/.test(e.error.message) && 4247 (this.warn( 4248 'MediaSource ended after "' + 4249 e.sourceBufferName + 4250 '" sourceBuffer append error. Attempting to recover from media error.' 4251 ), 4252 this.hls.recoverMediaError()) 4253 : (e.fatal = !0); 4254 } 4255 e.fatal && this.hls.stopLoad(); 4256 }), 4257 (e.sendAlternateToPenaltyBox = function (t) { 4258 var e = this.hls, 4259 r = t.errorAction; 4260 if (r) { 4261 var i = r.flags, 4262 n = r.hdcpLevel, 4263 a = r.nextAutoLevel; 4264 switch (i) { 4265 case Cr: 4266 this.switchLevel(t, a); 4267 break; 4268 case xr: 4269 n && ((e.maxHdcpLevel = tr[tr.indexOf(n) - 1]), (r.resolved = !0)), 4270 this.warn( 4271 'Restricting playback to HDCP-LEVEL of "' + e.maxHdcpLevel + '" or lower' 4272 ); 4273 } 4274 r.resolved || this.switchLevel(t, a); 4275 } 4276 }), 4277 (e.switchLevel = function (t, e) { 4278 void 0 !== e && 4279 t.errorAction && 4280 (this.warn('switching to level ' + e + ' after ' + t.details), 4281 (this.hls.nextAutoLevel = e), 4282 (t.errorAction.resolved = !0), 4283 (this.hls.nextLoadLevel = this.hls.nextAutoLevel)); 4284 }), 4285 t 4286 ); 4287 })(), 4288 Fr = (function () { 4289 function t(t, e) { 4290 (this.hls = void 0), 4291 (this.timer = -1), 4292 (this.requestScheduled = -1), 4293 (this.canLoad = !1), 4294 (this.log = void 0), 4295 (this.warn = void 0), 4296 (this.log = w.log.bind(w, e + ':')), 4297 (this.warn = w.warn.bind(w, e + ':')), 4298 (this.hls = t); 4299 } 4300 var e = t.prototype; 4301 return ( 4302 (e.destroy = function () { 4303 this.clearTimer(), (this.hls = this.log = this.warn = null); 4304 }), 4305 (e.clearTimer = function () { 4306 -1 !== this.timer && (self.clearTimeout(this.timer), (this.timer = -1)); 4307 }), 4308 (e.startLoad = function () { 4309 (this.canLoad = !0), (this.requestScheduled = -1), this.loadPlaylist(); 4310 }), 4311 (e.stopLoad = function () { 4312 (this.canLoad = !1), this.clearTimer(); 4313 }), 4314 (e.switchParams = function (t, e, r) { 4315 var i = null == e ? void 0 : e.renditionReports; 4316 if (i) { 4317 for (var n = -1, a = 0; a < i.length; a++) { 4318 var s = i[a], 4319 o = void 0; 4320 try { 4321 o = new self.URL(s.URI, e.url).href; 4322 } catch (t) { 4323 w.warn('Could not construct new URL for Rendition Report: ' + t), 4324 (o = s.URI || ''); 4325 } 4326 if (o === t) { 4327 n = a; 4328 break; 4329 } 4330 o === t.substring(0, o.length) && (n = a); 4331 } 4332 if (-1 !== n) { 4333 var l = i[n], 4334 u = parseInt(l['LAST-MSN']) || (null == e ? void 0 : e.lastPartSn), 4335 h = parseInt(l['LAST-PART']) || (null == e ? void 0 : e.lastPartIndex); 4336 if (this.hls.config.lowLatencyMode) { 4337 var d = Math.min(e.age - e.partTarget, e.targetduration); 4338 h >= 0 && d > e.partTarget && (h += 1); 4339 } 4340 var c = r && ar(r); 4341 return new sr(u, h >
4341= 0 ? h : void 0, c); 4342 } 4343 } 4344 }), 4345 (e.loadPlaylist = function (t) { 4346 -1 === this.requestScheduled && (this.requestScheduled = self.performance.now()); 4347 }), 4348 (e.shouldLoadPlaylist = function (t) { 4349 return this.canLoad && !!t && !!t.url && (!t.details || t.details.live); 4350 }), 4351 (e.shouldReloadPlaylist = function (t) { 4352 return ( 4353 -1 === this.timer && -1 === this.requestScheduled && this.shouldLoadPlaylist(t) 4354 ); 4355 }), 4356 (e.playlistLoaded = function (t, e, r) { 4357 var i = this, 4358 n = e.details, 4359 a = e.stats, 4360 s = self.performance.now(), 4361 o = a.loading.first ? Math.max(0, s - a.loading.first) : 0; 4362 if (((n.advancedDateTime = Date.now() - o), n.live || (null != r && r.live))) { 4363 if ( 4364 (n.reloaded(r), 4365 r && 4366 this.log( 4367 'live playlist ' + 4368 t + 4369 ' ' + 4370 (n.advanced 4371 ? 'REFRESHED ' + n.lastPartSn + '-' + n.lastPartIndex 4372 : n.updated 4373 ? 'UPDATED' 4374 : 'MISSED') 4375 ), 4376 r && n.fragments.length > 0 && dr(r, n), 4377 !this.canLoad || !n.live) 4378 ) 4379 return; 4380 var l, 4381 u = void 0, 4382 h = void 0; 4383 if (n.canBlockReload && n.endSN && n.advanced) { 4384 var d = this.hls.config.lowLatencyMode, 4385 c = n.lastPartSn, 4386 f = n.endSN, 4387 g = n.lastPartIndex, 4388 v = c === f; 4389 -1 !== g ? ((u = v ? f + 1 : c), (h = v ? (d ? 0 : g) : g + 1)) : (u = f + 1); 4390 var m = n.age, 4391 p = m + n.ageHeader, 4392 y = Math.min(p - n.partTarget, 1.5 * n.targetduration); 4393 if (y > 0) { 4394 if (r && y > r.tuneInGoal) 4395 this.warn( 4396 'CDN Tune-in goal increased from: ' + 4397 r.tuneInGoal + 4398 ' to: ' + 4399 y + 4400 ' with playlist age: ' + 4401 n.age 4402 ), 4403 (y = 0); 4404 else { 4405 var E = Math.floor(y / n.targetduration); 4406 (u += E), 4407 void 0 !== h && (h += Math.round((y % n.targetduration) / n.partTarget)), 4408 this.log( 4409 'CDN Tune-in age: ' + 4410 n.ageHeader + 4411 's last advanced ' + 4412 m.toFixed(2) + 4413 's goal: ' + 4414 y + 4415 ' skip sn ' + 4416 E + 4417 ' to part ' + 4418 h 4419 ); 4420 } 4421 n.tuneInGoal = y; 4422 } 4423 if (((l = this.getDeliveryDirectives(n, e.deliveryDirectives, u, h)), d || !v)) 4424 return void this.loadPlaylist(l); 4425 } else 4426 (n.canBlockReload || n.canSkipUntil) && 4427 (l = this.getDeliveryDirectives(n, e.deliveryDirectives, u, h)); 4428 var T = this.hls.mainForwardBufferInfo, 4429 S = T ? T.end - T.len : 0, 4430 L = (function (t, e) { 4431 void 0 === e && (e = 1 / 0); 4432 var r = 1e3 * t.targetduration; 4433 if (t.updated) { 4434 var i = t.fragments; 4435 if (i.length && 4 * r > e) { 4436 var n = 1e3 * i[i.length - 1].duration; 4437 n < r && (r = n); 4438 } 4439 } else r /= 2; 4440 return Math.round(r); 4441 })(n, 1e3 * (n.edge - S)); 4442 n.updated && 4443 s > this.requestScheduled + L && 4444 (this.requestScheduled = a.loading.start), 4445 void 0 !== u && n.canBlockReload 4446 ? (this.requestScheduled = a.loading.first + L - (1e3 * n.partTarget || 1e3)) 4447 : -1 === this.requestScheduled || this.requestScheduled + L < s 4448 ? (this.requestScheduled = s) 4449 : this.requestScheduled - s <= 0 && (this.requestScheduled += L); 4450 var A = this.requestScheduled - s; 4451 (A = Math.max(0, A)), 4452 this.log('reload live playlist ' + t + ' in ' + Math.round(A) + ' ms'), 4453 (this.timer = self.setTimeout(function () { 4454 return i.loadPlaylist(l); 4455 }, A)); 4456 } else this.clearTimer(); 4457 }), 4458 (e.getDeliveryDirectives = function (t, e, r, i) { 4459 var n = ar(t); 4460 return ( 4461 null != e && e.skip && t.deltaUpdateFailed && ((r = e.msn), (i = e.part), (n = rr)), 4462 new sr(r, i, n) 4463 ); 4464 }), 4465 (e.checkRetry = function (t) { 4466 var e = this, 4467 r = t.details, 4468 i = pr(t), 4469 n = t.errorAction, 4470 a = n || {}, 4471 s = a.action, 4472 o = a.retryCount, 4473 l = void 0 === o ? 0 : o, 4474 u = a.retryConfig, 4475 h = !!n && !!u && (s === wr || (!n.resolved && s === Dr)); 4476 if (h) { 4477 var d; 4478 if (((this.requestScheduled = -1), l >= u.maxNumRetry)) return !1; 4479 if (i && null != (d = t.context) && d.deliveryDirectives) 4480 this.warn( 4481 'Retrying playlist loading ' + 4482 (l + 1) + 4483 '/' + 4484 u.maxNumRetry + 4485 ' after "' + 4486 r + 4487 '" without delivery-directives' 4488 ), 4489 this.loadPlaylist(); 4490 else { 4491 var c = Er(u, l); 4492 (this.timer = self.setTimeout(function () { 4493 return e.loadPlaylist(); 4494 }, c)), 4495 this.warn( 4496 'Retrying playlist loading ' + 4497 (l + 1) + 4498 '/' + 4499 u.maxNumRetry + 4500 ' after "' + 4501 r + 4502 '" in ' + 4503 c + 4504 'ms' 4505 ); 4506 } 4507 (t.levelRetry = !0), (n.resolved = !0); 4508 } 4509 return h; 4510 }), 4511 t 4512 ); 4513 })(), 4514 Mr = (function () { 4515 function t(t, e, r) { 4516 void 0 === e && (e = 0), 4517 void 0 === r && (r = 0), 4518 (this.halfLife = void 0), 4519 (this.alpha_ = void 0), 4520 (this.estimate_ = void 0), 4521 (this.totalWeight_ = void 0), 4522 (this.halfLife = t), 4523 (this.alpha_ = t ? Math.exp(Math.log(0.5) / t) : 0), 4524 (this.estimate_ = e), 4525 (this.totalWeight_ = r); 4526 } 4527 var e = t.prototype; 4528 return ( 4529 (e.sample = function (t, e) { 4530 var r = Math.pow(this.alpha_, t); 4531 (this.estimate_ = e * (1 - r) + r * this.estimate_), (this.totalWeight_ += t); 4532 }), 4533 (e.getTotalWeight = function () { 4534 return this.totalWeight_; 4535 }), 4536 (e.getEstimate = function () { 4537 if (this.alpha_) { 4538 var t = 1 - Math.pow(this.alpha_, this.totalWeight_); 4539 if (t) return this.estimate_ / t; 4540 } 4541 return this.estimate_; 4542 }), 4543 t 4544 ); 4545 })(), 4546 Or = (function () { 4547 function t(t, e, r, i) { 4548 void 0 === i && (i = 100), 4549 (this.defaultEstimate_ = void 0), 4550 (this.minWeight_ = void 0), 4551 (this.minDelayMs_ = void 0), 4552 (this.slow_ = void 0), 4553 (this.fast_ = void 0), 4554 (this.defaultTTFB_ = void 0), 4555 (this.ttfb_ = void 0), 4556 (this.defaultEstimate_ = r), 4557 (this.minWeight_ = 0.001), 4558 (this.minDelayMs_ = 50), 4559 (this.slow_ = new Mr(t)), 4560 (this.fast_ = new Mr(e)), 4561 (this.defaultTTFB_ = i), 4562 (this.ttfb_ = new Mr(t)); 4563 } 4564 var e = t.prototype; 4565 return ( 4566 (e.update = function (t, e) { 4567 var r = this.slow_, 4568 i = this.fast_, 4569 n = this.ttfb_; 4570 r.halfLife !== t && (this.slow_ = new Mr(t, r.getEstimate(), r.getTotalWeight(
4570))), 4571 i.halfLife !== e && (this.fast_ = new Mr(e, i.getEstimate(), i.getTotalWeight())), 4572 n.halfLife !== t && (this.ttfb_ = new Mr(t, n.getEstimate(), n.getTotalWeight())); 4573 }), 4574 (e.sample = function (t, e) { 4575 var r = (t = Math.max(t, this.minDelayMs_)) / 1e3, 4576 i = (8 * e) / r; 4577 this.fast_.sample(r, i), this.slow_.sample(r, i); 4578 }), 4579 (e.sampleTTFB = function (t) { 4580 var e = t / 1e3, 4581 r = Math.sqrt(2) * Math.exp(-Math.pow(e, 2) / 2); 4582 this.ttfb_.sample(r, Math.max(t, 5)); 4583 }), 4584 (e.canEstimate = function () { 4585 return this.fast_.getTotalWeight() >= this.minWeight_; 4586 }), 4587 (e.getEstimate = function () { 4588 return this.canEstimate() 4589 ? Math.min(this.fast_.getEstimate(), this.slow_.getEstimate()) 4590 : this.defaultEstimate_; 4591 }), 4592 (e.getEstimateTTFB = function () { 4593 return this.ttfb_.getTotalWeight() >= this.minWeight_ 4594 ? this.ttfb_.getEstimate() 4595 : this.defaultTTFB_; 4596 }), 4597 (e.destroy = function () {}), 4598 t 4599 ); 4600 })(), 4601 Nr = { 4602 supported: !0, 4603 configurations: [], 4604 decodingInfoResults: [{ supported: !0, powerEfficient: !0, smooth: !0 }], 4605 }, 4606 Ur = {}; 4607 function Br(t, e, r) { 4608 var n = t.videoCodec, 4609 a = t.audioCodec; 4610 if (!n || !a || !r) return Promise.resolve(Nr); 4611 var s = { 4612 width: t.width, 4613 height: t.height, 4614 bitrate: Math.ceil(Math.max(0.9 * t.bitrate, t.averageBitrate)), 4615 framerate: t.frameRate || 30, 4616 }, 4617 o = t.videoRange; 4618 'SDR' !== o && (s.transferFunction = o.toLowerCase()); 4619 var l = n.split(',').map(function (t) { 4620 return { type: 'media-source', video: i(i({}, s), {}, { contentType: he(t, 'video') }) }; 4621 }); 4622 return ( 4623 a && 4624 t.audioGroups && 4625 t.audioGroups.forEach(function (t) { 4626 var r; 4627 t && 4628 (null == (r = e.groups[t]) || 4629 r.tracks.forEach(function (e) { 4630 if (e.groupId === t) { 4631 var r = e.channels || '', 4632 i = parseFloat(r); 4633 y(i) && 4634 i > 2 && 4635 l.push.apply( 4636 l, 4637 a.split(',').map(function (t) { 4638 return { 4639 type: 'media-source', 4640 audio: { contentType: he(t, 'audio'), channels: '' + i }, 4641 }; 4642 }) 4643 ); 4644 } 4645 })); 4646 }), 4647 Promise.all( 4648 l.map(function (t) { 4649 var e = (function (t) { 4650 var e = t.audio, 4651 r = t.video, 4652 i = r || e; 4653 if (i) { 4654 var n = i.contentType.split('"')[1]; 4655 if (r) 4656 return ( 4657 'r' + 4658 r.height + 4659 'x' + 4660 r.width + 4661 'f' + 4662 Math.ceil(r.framerate) + 4663 (r.transferFunction || 'sd') + 4664 '_' + 4665 n + 4666 '_' + 4667 Math.ceil(r.bitrate / 1e5) 4668 ); 4669 if (e) return 'c' + e.channels + (e.spatialRendering ? 's' : 'n') + '_' + n; 4670 } 4671 return ''; 4672 })(t); 4673 return Ur[e] || (Ur[e] = r.decodingInfo(t)); 4674 }) 4675 ) 4676 .then(function (t) { 4677 return { 4678 supported: !t.some(function (t) { 4679 return !t.supported; 4680 }), 4681 configurations: l, 4682 decodingInfoResults: t, 4683 }; 4684 }) 4685 .catch(function (t) { 4686 return { supported: !1, configurations: l, decodingInfoResults: [], error: t }; 4687 }) 4688 ); 4689 } 4690 function Gr(t, e) { 4691 var r = !1, 4692 i = []; 4693 return ( 4694 t && ((r = 'SDR' !== t), (i = [t])), 4695 e && 4696 ((i = e.allowedVideoRanges || er.slice(0)), 4697 (i = (r = 4698 void 0 !== e.preferHDR 4699 ? e.preferHDR 4700 : (function () { 4701 if ('function' == typeof matchMedia) { 4702 var t = matchMedia('(dynamic-range: high)'), 4703 e = matchMedia('bad query'); 4704 if (t.media !== e.media) return !0 === t.matches; 4705 } 4706 return !1; 4707 })()) 4708 ? i.filter(function (t) { 4709 return 'SDR' !== t; 4710 }) 4711 : ['SDR'])), 4712 { preferHDR: r, allowedVideoRanges: i } 4713 ); 4714 } 4715 function Kr(t, e) { 4716 w.log('[abr] start candidates with "' + t + '" ignored because ' + e); 4717 } 4718 function Hr(t, e, r) { 4719 if ('attrs' in t) { 4720 var i = e.indexOf(t); 4721 if (-1 !== i) return i; 4722 } 4723 for (var n = 0; n < e.length; n++) if (Vr(t, e[n], r)) return n; 4724 return -1; 4725 } 4726 function Vr(t, e, r) { 4727 var i = t.groupId, 4728 n = t.name, 4729 a = t.lang, 4730 s = t.assocLang, 4731 o = t.characteristics, 4732 l = t.default, 4733 u = t.forced; 4734 return ( 4735 (void 0 === i || e.groupId === i) && 4736 (void 0 === n || e.name === n) && 4737 (void 0 === a || e.lang === a) && 4738 (void 0 === a || e.assocLang === s) && 4739 (void 0 === l || e.default === l) && 4740 (void 0 === u || e.forced === u) && 4741 (void 0 === o || 4742 (function (t, e) { 4743 void 0 === e && (e = ''); 4744 var r = t.split(','), 4745 i = e.split(','); 4746 return ( 4747 r.length === i.length && 4748 !r.some(function (t) { 4749 return -1 === i.indexOf(t); 4750 }) 4751 ); 4752 })(o, e.characteristics)) && 4753 (void 0 === r || r(t, e)) 4754 ); 4755 } 4756 function Yr(t, e) { 4757 var r = t.audioCodec, 4758 i = t.channels; 4759 return !( 4760 (void 0 !== r && (e.audioCodec || '').substring(0, 4) !== r.substring(0, 4)) || 4761 (void 0 !== i && i !== (e.channels || '2')) 4762 ); 4763 } 4764 function Wr(t, e, r) { 4765 for (var i = e; i > -1; i--) if (r(t[i])) return i; 4766 for (var n = e + 1; n < t.length; n++) if (r(t[n])) return n; 4767 return -1; 4768 } 4769 var jr = (function () { 4770 function t(t) { 4771 var e = this; 4772 (this.hls = void 0), 4773 (this.lastLevelLoadSec = 0), 4774 (this.lastLoadedFragLevel = -1), 4775 (this.firstSelection = -1), 4776 (this._nextAutoLevel = -1), 4777 (this.nextAutoLevelKey = ''), 4778 (this.audioTracksByGroup = null),
4779 (this.codecTiers = null), 4780 (this.timer = -1), 4781 (this.fragCurrent = null), 4782 (this.partCurrent = null), 4783 (this.bitrateTestDelay = 0), 4784 (this.bwEstimator = void 0), 4785 (this._abandonRulesCheck = function () { 4786 var t = e.fragCurrent, 4787 r = e.partCurrent, 4788 i = e.hls, 4789 n = i.autoLevelEnabled, 4790 a = i.media; 4791 if (t && a) { 4792 var s = performance.now(), 4793 o = r ? r.stats : t.stats, 4794 l = r ? r.duration : t.duration, 4795 u = s - o.loading.start, 4796 h = i.minAutoLevel; 4797 if (o.aborted || (o.loaded && o.loaded === o.total) || t.level <= h) 4798 return e.clearTimer(), void (e._nextAutoLevel = -1); 4799 if (n && !a.paused && a.playbackRate && a.readyState) { 4800 var d = i.mainForwardBufferInfo; 4801 if (null !== d) { 4802 var c = e.bwEstimator.getEstimateTTFB(), 4803 f = Math.abs(a.playbackRate); 4804 if (!(u <= Math.max(c, (l / (2 * f)) * 1e3))) { 4805 var g = d.len / f, 4806 v = o.loading.first ? o.loading.first - o.loading.start : -1, 4807 m = o.loaded && v > -1, 4808 p = e.getBwEstimate(), 4809 E = i.levels, 4810 T = E[t.level], 4811 L = o.total || Math.max(o.loaded, Math.round((l * T.averageBitrate) / 8)), 4812 A = m ? u - v : u; 4813 A < 1 && m && (A = Math.min(u, (8 * o.loaded) / p)); 4814 var R = m ? (1e3 * o.loaded) / A : 0, 4815 b = R ? (L - o.loaded) / R : (8 * L) / p + c / 1e3; 4816 if (!(b <= g)) { 4817 var k, 4818 D = R ? 8 * R : p, 4819 I = Number.POSITIVE_INFINITY; 4820 for (k = t.level - 1; k > h; k--) { 4821 var C = E[k].maxBitrate; 4822 if ((I = e.getTimeToLoadFrag(c / 1e3, D, l * C, !E[k].details)) < g) 4823 break; 4824 } 4825 if (!(I >= b || I > 10 * l)) { 4826 (i.nextLoadLevel = i.nextAutoLevel = k), 4827 m 4828 ? e.bwEstimator.sample(u - Math.min(c, v), o.loaded) 4829 : e.bwEstimator.sampleTTFB(u); 4830 var _ = E[k].maxBitrate; 4831 e.getBwEstimate() * e.hls.config.abrBandWidthUpFactor > _ && 4832 e.resetEstimator(_), 4833 e.clearTimer(), 4834 w.warn( 4835 '[abr] Fragment ' + 4836 t.sn + 4837 (r ? ' part ' + r.index : '') + 4838 ' of level ' + 4839 t.level + 4840 ' is loading too slowly;\n Time to underbuffer: ' + 4841 g.toFixed(3) + 4842 ' s\n Estimated load time for current fragment: ' + 4843 b.toFixed(3) + 4844 ' s\n Estimated load time for down switch fragment: ' + 4845 I.toFixed(3) + 4846 ' s\n TTFB estimate: ' + 4847 (0 | v) + 4848 ' ms\n Current BW estimate: ' + 4849 (y(p) ? 0 | p : 'Unknown') + 4850 ' bps\n New BW estimate: ' + 4851 (0 | e.getBwEstimate()) + 4852 ' bps\n Switching to level ' + 4853 k + 4854 ' @ ' + 4855 (0 | _) + 4856 ' bps' 4857 ), 4858 i.trigger(S.FRAG_LOAD_EMERGENCY_ABORTED, { 4859 frag: t, 4860 part: r, 4861 stats: o, 4862 }); 4863 } 4864 } 4865 } 4866 } 4867 } 4868 } 4869 }), 4870 (this.hls = t), 4871 (this.bwEstimator = this.initEstimator()), 4872 this.registerListeners(); 4873 } 4874 var e = t.prototype; 4875 return ( 4876 (e.resetEstimator = function (t) { 4877 t && 4878 (w.log('setting initial bwe to ' + t), 4879 (this.hls.config.abrEwmaDefaultEstimate = t)), 4880 (this.firstSelection = -1), 4881 (this.bwEstimator = this.initEstimator()); 4882 }), 4883 (e.initEstimator = function () { 4884 var t = this.hls.config; 4885 return new Or(t.abrEwmaSlowVoD, t.abrEwmaFastVoD, t.abrEwmaDefaultEstimate); 4886 }), 4887 (e.registerListeners = function () { 4888 var t = this.hls; 4889 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 4890 t.on(S.FRAG_LOADING, this.onFragLoading, this), 4891 t.on(S.FRAG_LOADED, this.onFragLoaded, this), 4892 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this), 4893 t.on(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 4894 t.on(S.LEVEL_LOADED, this.onLevelLoaded, this), 4895 t.on(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 4896 t.on(S.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this), 4897 t.on(S.ERROR, this.onError, this); 4898 }), 4899 (e.unregisterListeners = function () { 4900 var t = this.hls; 4901 t && 4902 (t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 4903 t.off(S.FRAG_LOADING, this.onFragLoading, this), 4904 t.off(S.FRAG_LOADED, this.onFragLoaded, this), 4905 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this), 4906 t.off(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 4907 t.off(S.LEVEL_LOADED, this.onLevelLoaded, this), 4908 t.off(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 4909 t.off(S.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this), 4910 t.off(S.ERROR, this.onError, this)); 4911 }), 4912 (e.destroy = function () { 4913 this.unregisterListeners(), 4914 this.clearTimer(), 4915 (this.hls = this._abandonRulesCheck = null),
4916 (this.fragCurrent = this.partCurrent = null); 4917 }), 4918 (e.onManifestLoading = function (t, e) { 4919 (this.lastLoadedFragLevel = -1), 4920 (this.firstSelection = -1), 4921 (this.lastLevelLoadSec = 0), 4922 (this.fragCurrent = this.partCurrent = null), 4923 this.onLevelsUpdated(), 4924 this.clearTimer(); 4925 }), 4926 (e.onLevelsUpdated = function () { 4927 this.lastLoadedFragLevel > -1 && 4928 this.fragCurrent && 4929 (this.lastLoadedFragLevel = this.fragCurrent.level), 4930 (this._nextAutoLevel = -1), 4931 this.onMaxAutoLevelUpdated(), 4932 (this.codecTiers = null), 4933 (this.audioTracksByGroup = null); 4934 }), 4935 (e.onMaxAutoLevelUpdated = function () { 4936 (this.firstSelection = -1), (this.nextAutoLevelKey = ''); 4937 }), 4938 (e.onFragLoading = function (t, e) { 4939 var r, 4940 i = e.frag; 4941 this.ignoreFragment(i) || 4942 (i.bitrateTest || 4943 ((this.fragCurrent = i), (this.partCurrent = null != (r = e.part) ? r : null)), 4944 this.clearTimer(), 4945 (this.timer = self.setInterval(this._abandonRulesCheck, 100))); 4946 }), 4947 (e.onLevelSwitching = function (t, e) { 4948 this.clearTimer(); 4949 }), 4950 (e.onError = function (t, e) { 4951 if (!e.fatal) 4952 switch (e.details) { 4953 case A.BUFFER_ADD_CODEC_ERROR: 4954 case A.BUFFER_APPEND_ERROR: 4955 (this.lastLoadedFragLevel = -1), (this.firstSelection = -1); 4956 break; 4957 case A.FRAG_LOAD_TIMEOUT: 4958 var r = e.frag, 4959 i = this.fragCurrent, 4960 n = this.partCurrent; 4961 if (r && i && r.sn === i.sn && r.level === i.level) { 4962 var a = performance.now(), 4963 s = n ? n.stats : r.stats, 4964 o = a - s.loading.start, 4965 l = s.loading.first ? s.loading.first - s.loading.start : -1; 4966 if (s.loaded && l > -1) { 4967 var u = this.bwEstimator.getEstimateTTFB(); 4968 this.bwEstimator.sample(o - Math.min(u, l), s.loaded); 4969 } else this.bwEstimator.sampleTTFB(o); 4970 } 4971 } 4972 }), 4973 (e.getTimeToLoadFrag = function (t, e, r, i) { 4974 return t + r / e + (i ? this.lastLevelLoadSec : 0); 4975 }), 4976 (e.onLevelLoaded = function (t, e) { 4977 var r = this.hls.config, 4978 i = e.stats.loading, 4979 n = i.end - i.start; 4980 y(n) && (this.lastLevelLoadSec = n / 1e3), 4981 e.details.live 4982 ? this.bwEstimator.update(r.abrEwmaSlowLive, r.abrEwmaFastLive) 4983 : this.bwEstimator.update(r.abrEwmaSlowVoD, r.abrEwmaFastVoD); 4984 }), 4985 (e.onFragLoaded = function (t, e) { 4986 var r = e.frag, 4987 i = e.part, 4988 n = i ? i.stats : r.stats; 4989 if ( 4990 (r.type === Fe && this.bwEstimator.sampleTTFB(n.loading.first - n.loading.start), 4991 !this.ignoreFragment(r)) 4992 ) { 4993 if ( 4994 (this.clearTimer(), 4995 r.level === this._nextAutoLevel && (this._nextAutoLevel = -1), 4996 (this.firstSelection = -1), 4997 this.hls.config.abrMaxWithRealBitrate) 4998 ) { 4999 var a = i ? i.duration : r.duration, 5000 s = this.hls.levels[r.level], 5001 o = (s.loaded ? s.loaded.bytes : 0) + n.loaded, 5002 l = (s.loaded ? s.loaded.duration : 0) + a; 5003 (s.loaded = { bytes: o, duration: l }), (s.realBitrate = Math.round((8 * o) / l)); 5004 } 5005 if (r.bitrateTest) { 5006 var u = { stats: n, frag: r, part: i, id: r.type }; 5007 this.onFragBuffered(S.FRAG_BUFFERED, u), (r.bitrateTest = !1); 5008 } else this.lastLoadedFragLevel = r.level; 5009 } 5010 }), 5011 (e.onFragBuffered = function (t, e) { 5012 var r = e.frag, 5013 i = e.part, 5014 n = null != i && i.stats.loaded ? i.stats : r.stats; 5015 if (!n.aborted && !this.ignoreFragment(r)) { 5016 var a = 5017 n.parsing.end - 5018 n.loading.start - 5019 Math.min(n.loading.first - n.loading.start, this.bwEstimator.getEstimateTTFB()); 5020 this.bwEstimator.sample(a, n.loaded), 5021 (n.bwEstimate = this.getBwEstimate()),
5022 r.bitrateTest ? (this.bitrateTestDelay = a / 1e3) : (this.bitrateTestDelay = 0); 5023 } 5024 }), 5025 (e.ignoreFragment = function (t) { 5026 return t.type !== Fe || 'initSegment' === t.sn; 5027 }), 5028 (e.clearTimer = function () { 5029 this.timer > -1 && (self.clearInterval(this.timer), (this.timer = -1)); 5030 }), 5031 (e.getAutoLevelKey = function () { 5032 return this.getBwEstimate() + '_' + this.getStarvationDelay().toFixed(2); 5033 }), 5034 (e.getNextABRAutoLevel = function () { 5035 var t = this.fragCurrent, 5036 e = this.partCurrent, 5037 r = this.hls, 5038 i = r.maxAutoLevel, 5039 n = r.config, 5040 a = r.minAutoLevel, 5041 s = e ? e.duration : t ? t.duration : 0, 5042 o = this.getBwEstimate(), 5043 l = this.getStarvationDelay(), 5044 u = n.abrBandWidthFactor, 5045 h = n.abrBandWidthUpFactor; 5046 if (l) { 5047 var d = this.findBestLevel(o, a, i, l, 0, u, h); 5048 if (d >= 0) return d; 5049 } 5050 var c = s ? Math.min(s, n.maxStarvationDelay) : n.maxStarvationDelay; 5051 if (!l) { 5052 var f = this.bitrateTestDelay; 5053 f && 5054 ((c = (s ? Math.min(s, n.maxLoadingDelay) : n.maxLoadingDelay) - f), 5055 w.info( 5056 '[abr] bitrate test took ' + 5057 Math.round(1e3 * f) + 5058 'ms, set first fragment max fetchDuration to ' + 5059 Math.round(1e3 * c) + 5060 ' ms' 5061 ), 5062 (u = h = 1)); 5063 } 5064 var g = this.findBestLevel(o, a, i, l, c, u, h); 5065 if ( 5066 (w.info( 5067 '[abr] ' + 5068 (l ? 'rebuffering expected' : 'buffer is empty') + 5069 ', optimal quality level ' + 5070 g 5071 ), 5072 g > -1) 5073 ) 5074 return g; 5075 var v = r.levels[a], 5076 m = r.levels[r.loadLevel]; 5077 return (null == v ? void 0 : v.bitrate) < (null == m ? void 0 : m.bitrate) 5078 ? a 5079 : r.loadLevel; 5080 }), 5081 (e.getStarvationDelay = function () { 5082 var t = this.hls, 5083 e = t.media; 5084 if (!e) return 1 / 0; 5085 var r = e && 0 !== e.playbackRate ? Math.abs(e.playbackRate) : 1, 5086 i = t.mainForwardBufferInfo; 5087 return (i ? i.len : 0) / r; 5088 }), 5089 (e.getBwEstimate = function () { 5090 return this.bwEstimator.canEstimate() 5091 ? this.bwEstimator.getEstimate() 5092 : this.hls.config.abrEwmaDefaultEstimate; 5093 }), 5094 (e.findBestLevel = function (t, e, r, i, n, a, s) { 5095 var o, 5096 l = this, 5097 u = i + n, 5098 h = this.lastLoadedFragLevel, 5099 d = -1 === h ? this.hls.firstLevel : h, 5100 c = this.fragCurrent, 5101 f = this.partCurrent, 5102 g = this.hls, 5103 v = g.levels, 5104 m = g.allAudioTracks, 5105 p = g.loadLevel, 5106 E = g.config; 5107 if (1 === v.length) return 0; 5108 var T, 5109 S = v[d], 5110 L = !(null == S || null == (o = S.details) || !o.live), 5111 A = -1 === p || -1 === h, 5112 R = 'SDR', 5113 b = (null == S ? void 0 : S.frameRate) || 0, 5114 k = E.audioPreference, 5115 D = E.videoPreference, 5116 I = 5117 this.audioTracksByGroup || 5118 (this.audioTracksByGroup = (function (t) { 5119 return t.reduce( 5120 function (t, e) { 5121 var r = t.groups[e.groupId]; 5122 r || 5123 (r = t.groups[e.groupId] = 5124 { tracks: [], channels: { 2: 0 }, hasDefault: !1, hasAutoSelect: !1 }), 5125 r.tracks.push(e); 5126 var i = e.channels || '2'; 5127 return ( 5128 (r.channels[i] = (r.channels[i] || 0) + 1), 5129 (r.hasDefault = r.hasDefault || e.default), 5130 (r.hasAutoSelect = r.hasAutoSelect || e.autoselect), 5131 r.hasDefault && (t.hasDefaultAudio = !0), 5132 r.hasAutoSelect && (t.hasAutoSelectAudio = !0), 5133 t 5134 ); 5135 }, 5136 { hasDefaultAudio: !1, hasAutoSelectAudio: !1, groups: {} } 5137 ); 5138 })(m)); 5139 if (A) { 5140 if (-1 !== this.firstSelection) return this.firstSelection; 5141 var C = 5142 this.codecTiers || 5143 (this.codecTiers = (function (t, e, r, i) { 5144 return t.slice(r, i + 1).reduce(function (t, r) { 5145 if (!r.codecSet) return t; 5146 var i = r.audioGroups, 5147 n = t[r.codecSet]; 5148 n || 5149 (t[r.codecSet] = n = 5150 { 5151 minBitrate: 1 / 0, 5152 minHeight: 1 / 0, 5153 minFramerate: 1 / 0, 5154 maxScore: 0, 5155 videoRanges: { SDR: 0 }, 5156 channels: { 2: 0 }, 5157 hasDefaultAudio: !i, 5158 fragmentError: 0, 5159 }), 5160 (n.minBitrate = Math.min(n.minBitrate, r.bitrate)); 5161 var a = Math.min(r.height, r.width); 5162 return ( 5163 (n.minHeight = Math.min(n.minHeight, a)), 5164 (n.minFramerate = Math.min(n.minFramerate, r.frameRate)), 5165 (n.maxScore = Math.max(n.maxScore, r.score)), 5166 (n.fragmentError += r.fragmentError),
5167 (n.videoRanges[r.videoRange] = (n.videoRanges[r.videoRange] || 0) + 1), 5168 i && 5169 i.forEach(function (t) { 5170 if (t) { 5171 var r = e.groups[t]; 5172 r && 5173 ((n.hasDefaultAudio = 5174 n.hasDefaultAudio || e.hasDefaultAudio 5175 ? r.hasDefault 5176 : r.hasAutoSelect || 5177 (!e.hasDefaultAudio && !e.hasAutoSelectAudio)), 5178 Object.keys(r.channels).forEach(function (t) { 5179 n.channels[t] = (n.channels[t] || 0) + r.channels[t]; 5180 })); 5181 } 5182 }), 5183 t 5184 ); 5185 }, {}); 5186 })(v, I, e, r)), 5187 _ = (function (t, e, r, i, n) { 5188 for ( 5189 var a = Object.keys(t), 5190 s = null == i ? void 0 : i.channels, 5191 o = null == i ? void 0 : i.audioCodec, 5192 l = s && 2 === parseInt(s), 5193 u = !0, 5194 h = !1, 5195 d = 1 / 0, 5196 c = 1 / 0, 5197 f = 1 / 0, 5198 g = 0, 5199 v = [], 5200 m = Gr(e, n), 5201 p = m.preferHDR, 5202 E = m.allowedVideoRanges, 5203 T = function () { 5204 var e = t[a[S]]; 5205 (u = e.channels[2] > 0), 5206 (d = Math.min(d, e.minHeight)), 5207 (c = Math.min(c, e.minFramerate)), 5208 (f = Math.min(f, e.minBitrate)); 5209 var r = E.filter(function (t) { 5210 return e.videoRanges[t] > 0; 5211 }); 5212 r.length > 0 && ((h = !0), (v = r)); 5213 }, 5214 S = a.length; 5215 S--; 5216 5217 ) 5218 T(); 5219 (d = y(d) ? d : 0), (c = y(c) ? c : 0); 5220 var L = Math.max(1080, d), 5221 A = Math.max(30, c); 5222 return ( 5223 (f = y(f) ? f : r), 5224 (r = Math.max(f, r)), 5225 h || ((e = void 0), (v = [])), 5226 { 5227 codecSet: a.reduce(function (e, i) { 5228 var n = t[i]; 5229 if (i === e) return e; 5230 if (n.minBitrate > r) 5231 return ( 5232 Kr( 5233 i, 5234 'min bitrate of ' + n.minBitrate + ' > current estimate of ' + r 5235 ), 5236 e 5237 ); 5238 if (!n.hasDefaultAudio) 5239 return ( 5240 Kr(i, 'no renditions with default or auto-select sound found'), e 5241 ); 5242 if (o && i.indexOf(o.substring(0, 4)) % 5 != 0) 5243 return Kr(i, 'audio codec preference "' + o + '" not found'), e; 5244 if (s && !l) { 5245 if (!n.channels[s]) 5246 return ( 5247 Kr( 5248 i, 5249 'no renditions with ' + 5250 s + 5251 ' channel sound found (channels options: ' + 5252 Object.keys(n.channels) + 5253 ')' 5254 ), 5255 e 5256 ); 5257 } else if ((!o || l) && u && 0 === n.channels[2]) return Kr(i, 'no renditions with stereo sound found'), e; 5258 return n.minHeight > L 5259 ? (Kr(i, 'min resolution of ' + n.minHeight + ' > maximum of ' + L), e) 5260 : n.minFramerate > A 5261 ? (Kr(i, 'min framerate of ' + n.minFramerate + ' > maximum of ' + A), 5262 e) 5263 : v.some(function (t) { 5264 return n.videoRanges[t] > 0; 5265 }) 5266 ? n.maxScore < g 5267 ? (Kr(i, 'max score of ' + n.maxScore + ' < selected max of ' + g), e) 5268 : e && (ce(i) >= ce(e) || n.fragmentError > t[e].fragmentError) 5269 ? e 5270 : ((g = n.maxScore), i) 5271 : (Kr( 5272 i, 5273 'no variants with VIDEO-RANGE of ' + JSON.stringify(v) + ' found' 5274 ), 5275 e); 5276 }, void 0), 5277 videoRanges: v, 5278 preferHDR: p, 5279 minFramerate: c, 5280 minBitrate: f, 5281 } 5282 ); 5283 })(C, R, t, k, D), 5284 x = _.codecSet, 5285 P = _.videoRanges, 5286 F = _.minFramerate, 5287 M = _.minBitrate, 5288 O = _.preferHDR; 5289 (T = x), 5290 (R = O ? P[P.length - 1] : P[0]), 5291 (b = F), 5292 (t = Math.max(t, M)), 5293 w.log('[abr] picked start tier ' + JSON.stringify(_)); 5294 } else (T = null == S ? void 0 : S.codecSet), (R = null == S ? void 0 : S.videoRange); 5295 for ( 5296 var N, 5297 U = f ? f.duration : c ? c.duration : 0, 5298 B = this.bwEstimator.getEstimateTTFB() / 1e3, 5299 G = [], 5300 K = function () { 5301 var e, 5302 o = v[H], 5303 c = H > d; 5304 if (!o) return 0; 5305 if (E.useMediaCapabilities && !o.supportedResult && !o.supportedPromise) { 5306 var g = navigator.mediaCapabilities; 5307 'function' == typeof (null == g ? void 0 : g.decodingInfo) && 5308 (function (t, e, r, i, n, a) { 5309 var s = t.audioCodec ? t.audioGroups : null, 5310 o = null == a ? void 0 : a.audioCodec, 5311 l = null == a ? void 0 : a.channels, 5312 u = l ? parseInt(l) : o ? 1 / 0 : 2, 5313 h = null; 5314 if (null != s && s.length) 5315 try { 5316 h = 5317 1 === s.length && s[0] 5318 ? e.groups[s[0]].channels 5319 : s.reduce( 5320 function (t, r) { 5321 if (r) { 5322 var i = e.groups[r]; 5323 if (!i) 5324 throw new Error('Audio track group ' + r + ' not found'); 5325 Object.keys(i.channels).forEac
5325h(function (e) { 5326 t[e] = (t[e] || 0) + i.channels[e]; 5327 }); 5328 } 5329 return t; 5330 }, 5331 { 2: 0 } 5332 ); 5333 } catch (t) { 5334 return !0; 5335 } 5336 return ( 5337 (void 0 !== t.videoCodec && 5338 ((t.width > 1920 && t.height > 1088) || 5339 (t.height > 1920 && t.width > 1088) || 5340 t.frameRate > Math.max(i, 30) || 5341 ('SDR' !== t.videoRange && t.videoRange !== r) || 5342 t.bitrate > Math.max(n, 8e6))) || 5343 (!!h && 5344 y(u) && 5345 Object.keys(h).some(function (t) { 5346 return parseInt(t) > u; 5347 })) 5348 ); 5349 })(o, I, R, b, t, k) 5350 ? ((o.supportedPromise = Br(o, I, g)), 5351 o.supportedPromise.then(function (t) { 5352 if (l.hls) { 5353 o.supportedResult = t; 5354 var e = l.hls.levels, 5355 r = e.indexOf(o); 5356 t.error 5357 ? w.warn( 5358 '[abr] MediaCapabilities decodingInfo error: "' + 5359 t.error + 5360 '" for level ' + 5361 r + 5362 ' ' + 5363 JSON.stringify(t) 5364 ) 5365 : t.supported || 5366 (w.warn( 5367 '[abr] Unsupported MediaCapabilities decodingInfo result for level ' + 5368 r + 5369 ' ' + 5370 JSON.stringify(t) 5371 ), 5372 r > -1 && 5373 e.length > 1 && 5374 (w.log('[abr] Removing unsupported level ' + r), 5375 l.hls.removeLevel(r))); 5376 } 5377 })) 5378 : (o.supportedResult = Nr); 5379 } 5380 if ( 5381 (T && o.codecSet !== T) || 5382 (R && o.videoRange !== R) || 5383 (c && b > o.frameRate) || 5384 (!c && b > 0 && b < o.frameRate) || 5385 (o.supportedResult && 5386 (null == (e = o.supportedResult.decodingInfoResults) || !e[0].smooth)) 5387 ) 5388 return G.push(H), 0; 5389 var m, 5390 D = o.details, 5391 C = 5392 (f 5393 ? null == D 5394 ? void 0 5395 : D.partTarget 5396 : null == D 5397 ? void 0 5398 : D.averagetargetduration) || U; 5399 m = c ? s * t : a * t; 5400 var _ = U && i >= 2 * U && 0 === n ? v[H].averageBitrate : v[H].maxBitrate, 5401 x = l.getTimeToLoadFrag(B, m, _ * C, void 0 === D); 5402 if ( 5403 m >= _ && 5404 (H === h || (0 === o.loadError && 0 === o.fragmentError)) && 5405 (x <= B || !y(x) || (L && !l.bitrateTestDelay) || x < u) 5406 ) { 5407 var P = l.forcedAutoLevel; 5408 return ( 5409 H === p || 5410 (-1 !== P && P === p) || 5411 (G.length && 5412 w.trace(
5413 '[abr] Skipped level(s) ' + 5414 G.join(',') + 5415 ' of ' + 5416 r + 5417 ' max with CODECS and VIDEO-RANGE:"' + 5418 v[G[0]].codecs + 5419 '" ' + 5420 v[G[0]].videoRange + 5421 '; not compatible with "' + 5422 S.codecs + 5423 '" ' + 5424 R 5425 ), 5426 w.info( 5427 '[abr] switch candidate:' + 5428 d + 5429 '->' + 5430 H + 5431 ' adjustedbw(' + 5432 Math.round(m) + 5433 ')-bitrate=' + 5434 Math.round(m - _) + 5435 ' ttfb:' + 5436 B.toFixed(1) + 5437 ' avgDuration:' + 5438 C.toFixed(1) + 5439 ' maxFetchDuration:' + 5440 u.toFixed(1) + 5441 ' fetchDuration:' + 5442 x.toFixed(1) + 5443 ' firstSelection:' + 5444 A + 5445 ' codecSet:' + 5446 T + 5447 ' videoRange:' + 5448 R + 5449 ' hls.loadLevel:' + 5450 p 5451 )), 5452 A && (l.firstSelection = H), 5453 { v: H } 5454 ); 5455 } 5456 }, 5457 H = r; 5458 H >= e; 5459 H-- 5460 ) 5461 if (0 !== (N = K()) && N) return N.v; 5462 return -1; 5463 }), 5464 s(t, [ 5465 { 5466 key: 'firstAutoLevel', 5467 get: function () { 5468 var t = this.hls, 5469 e = t.maxAutoLevel, 5470 r = t.minAutoLevel, 5471 i = this.getBwEstimate(), 5472 n = this.hls.config.maxStarvationDelay, 5473 a = this.findBestLevel(i, r, e, 0, n, 1, 1); 5474 if (a > -1) return a; 5475 var s = this.hls.firstLevel, 5476 o = Math.min(Math.max(s, r), e); 5477 return ( 5478 w.warn( 5479 '[abr] Could not find best starting auto level. Defaulting to first in playlist ' + 5480 s + 5481 ' clamped to ' + 5482 o 5483 ), 5484 o 5485 ); 5486 }, 5487 }, 5488 { 5489 key: 'forcedAutoLevel', 5490 get: function () { 5491 return this.nextAutoLevelKey ? -1 : this._nextAutoLevel; 5492 }, 5493 }, 5494 { 5495 key: 'nextAutoLevel', 5496 get: function () { 5497 var t = this.forcedAutoLevel, 5498 e = this.bwEstimator.canEstimate(), 5499 r = this.lastLoadedFragLevel > -1; 5500 if (!(-1 === t || (e && r && this.nextAutoLevelKey !== this.getAutoLevelKey()))) 5501 return t; 5502 var i = e && r ? this.getNextABRAutoLevel() : this.firstAutoLevel; 5503 if (-1 !== t) { 5504 var n = this.hls.levels; 5505 if (n.length > Math.max(t, i) && n[t].loadError <= n[i].loadError) return t; 5506 } 5507 return ( 5508 (this._nextAutoLevel = i), (this.nextAutoLevelKey = this.getAutoLevelKey()), i 5509 ); 5510 }, 5511 set: function (t) { 5512 var e = this.hls, 5513 r = e.maxAutoLevel, 5514 i = e.minAutoLevel, 5515 n = Math.min(Math.max(t, i), r); 5516 this._nextAutoLevel !== n && 5517 ((this.nextAutoLevelKey = ''), (this._nextAutoLevel = n)); 5518 }, 5519 }, 5520 ]), 5521 t 5522 ); 5523 })(), 5524 qr = (function () { 5525 function t() { 5526 (this._boundTick = void 0), 5527 (this._tickTimer = null),
5528 (this._tickInterval = null), 5529 (this._tickCallCount = 0), 5530 (this._boundTick = this.tick.bind(this)); 5531 } 5532 var e = t.prototype; 5533 return ( 5534 (e.destroy = function () { 5535 this.onHandlerDestroying(), this.onHandlerDestroyed(); 5536 }), 5537 (e.onHandlerDestroying = function () { 5538 this.clearNextTick(), this.clearInterval(); 5539 }), 5540 (e.onHandlerDestroyed = function () {}), 5541 (e.hasInterval = function () { 5542 return !!this._tickInterval; 5543 }), 5544 (e.hasNextTick = function () { 5545 return !!this._tickTimer; 5546 }), 5547 (e.setInterval = function (t) { 5548 return ( 5549 !this._tickInterval && 5550 ((this._tickCallCount = 0), 5551 (this._tickInterval = self.setInterval(this._boundTick, t)), 5552 !0) 5553 ); 5554 }), 5555 (e.clearInterval = function () { 5556 return ( 5557 !!this._tickInterval && 5558 (self.clearInterval(this._tickInterval), (this._tickInterval = null), !0) 5559 ); 5560 }), 5561 (e.clearNextTick = function () { 5562 return ( 5563 !!this._tickTimer && 5564 (self.clearTimeout(this._tickTimer), (this._tickTimer = null), !0) 5565 ); 5566 }), 5567 (e.tick = function () { 5568 this._tickCallCount++, 5569 1 === this._tickCallCount && 5570 (this.doTick(), 5571 this._tickCallCount > 1 && this.tickImmediate(), 5572 (this._tickCallCount = 0)); 5573 }), 5574 (e.tickImmediate = function () { 5575 this.clearNextTick(), (this._tickTimer = self.setTimeout(this._boundTick, 0)); 5576 }), 5577 (e.doTick = function () {}), 5578 t 5579 ); 5580 })(), 5581 Xr = 'NOT_LOADED', 5582 zr = 'APPENDING', 5583 Qr = 'PARTIAL', 5584 Jr = 'OK', 5585 $r = (function () { 5586 function t(t) { 5587 (this.activePartLists = Object.create(null)), 5588 (this.endListFragments = Object.create(null)), 5589 (this.fragments = Object.create(null)), 5590 (this.timeRanges = Object.create(null)), 5591 (this.bufferPadding = 0.2), 5592 (this.hls = void 0), 5593 (this.hasGaps = !1), 5594 (this.hls = t), 5595 this._registerListeners(); 5596 } 5597 var e = t.prototype; 5598 return ( 5599 (e._registerListeners = function () { 5600 var t = this.hls; 5601 t.on(S.BUFFER_APPENDED, this.onBufferAppended, this), 5602 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this), 5603 t.on(S.FRAG_LOADED, this.onFragLoaded, this); 5604 }), 5605 (e._unregisterListeners = function () { 5606 var t = this.hls; 5607 t.off(S.BUFFER_APPENDED, this.onBufferAppended, this), 5608 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this), 5609 t.off(S.FRAG_LOADED, this.onFragLoaded, this); 5610 }), 5611 (e.destroy = function () { 5612 this._unregisterListeners(), 5613 (this.fragments = 5614 this.activePartLists = 5615 this.endListFragments = 5616 this.timeRanges = 5617 null); 5618 }), 5619 (e.getAppendedFrag = function (t, e) { 5620 var r = this.activePartLists[e]; 5621 if (r) 5622 for (var i = r.length; i--; ) { 5623 var n = r[i]; 5624 if (!n) break; 5625 var a = n.end; 5626 if (n.start <= t && null !== a && t <= a) return n; 5627 } 5628 return this.getBufferedFrag(t, e); 5629 }), 5630 (e.getBufferedFrag = function (t, e) { 5631 for (var r = this.fragments, i = Object.keys(r), n = i.length; n--; ) { 5632 var a = r[i[n]]; 5633 if ((null == a ? void 0 : a.body.type) === e && a.buffered) { 5634 var s = a.body; 5635 if (s.start <= t && t <= s.end) return s; 5636 } 5637 } 5638 return null; 5639 }), 5640 (e.detectEvictedFragments = function (t, e, r, i) { 5641 var n = this; 5642 this.timeRanges && (this.timeRanges[t] = e); 5643 var a = (null == i ? void 0 : i.fragment.sn) || -1;
5644 Object.keys(this.fragments).forEach(function (i) { 5645 var s = n.fragments[i]; 5646 if (s && !(a >= s.body.sn)) 5647 if (s.buffered || s.loaded) { 5648 var o = s.range[t]; 5649 o && 5650 o.time.some(function (t) { 5651 var r = !n.isTimeBuffered(t.startPTS, t.endPTS, e); 5652 return r && n.removeFragment(s.body), r; 5653 }); 5654 } else s.body.type === r && n.removeFragment(s.body); 5655 }); 5656 }), 5657 (e.detectPartialFragments = function (t) { 5658 var e = this, 5659 r = this.timeRanges, 5660 i = t.frag, 5661 n = t.part; 5662 if (r && 'initSegment' !== i.sn) { 5663 var a = ti(i), 5664 s = this.fragments[a]; 5665 if (!(!s || (s.buffered && i.gap))) { 5666 var o = !i.relurl; 5667 Object.keys(r).forEach(function (t) { 5668 var a = i.elementaryStreams[t]; 5669 if (a) { 5670 var l = r[t], 5671 u = o || !0 === a.partial; 5672 s.range[t] = e.getBufferedTimes(i, n, u, l); 5673 } 5674 }), 5675 (s.loaded = null),
5676 Object.keys(s.range).length 5677 ? ((s.buffered = !0), 5678 (s.body.endList = i.endList || s.body.endList) && 5679 (this.endListFragments[s.body.type] = s), 5680 Zr(s) || this.removeParts(i.sn - 1, i.type)) 5681 : this.removeFragment(s.body); 5682 } 5683 } 5684 }), 5685 (e.removeParts = function (t, e) { 5686 var r = this.activePartLists[e]; 5687 r && 5688 (this.activePartLists[e] = r.filter(function (e) { 5689 return e.fragment.sn >= t; 5690 })); 5691 }), 5692 (e.fragBuffered = function (t, e) { 5693 var r = ti(t), 5694 i = this.fragments[r]; 5695 !i && 5696 e && 5697 ((i = this.fragments[r] = 5698 { 5699 body: t, 5700 appendedPTS: null, 5701 loaded: null, 5702 buffered: !1, 5703 range: Object.create(null), 5704 }), 5705 t.gap && (this.hasGaps = !0)), 5706 i && ((i.loaded = null), (i.buffered = !0)); 5707 }), 5708 (e.getBufferedTimes = function (t, e, r, i) { 5709 for ( 5710 var n = { time: [], partial: r }, 5711 a = t.start, 5712 s = t.end, 5713 o = t.minEndPTS || s, 5714 l = t.maxStartPTS || a, 5715 u = 0; 5716 u < i.length; 5717 u++ 5718 ) { 5719 var h = i.start(u) - this.bufferPadding, 5720 d = i.end(u) + this.bufferPadding; 5721 if (l >= h && o <= d) { 5722 n.time.push({ startPTS: Math.max(a, i.start(u)), endPTS: Math.min(s, i.end(u)) }); 5723 break; 5724 } 5725 if (a < d && s > h) { 5726 var c = Math.max(a, i.start(u)), 5727 f = Math.min(s, i.end(u)); 5728 f > c && ((n.partial = !0), n.time.push({ startPTS: c, endPTS: f })); 5729 } else if (s <= h) break; 5730 } 5731 return n; 5732 }), 5733 (e.getPartialFragment = function (t) { 5734 var e, 5735 r, 5736 i, 5737 n = null, 5738 a = 0, 5739 s = this.bufferPadding, 5740 o = this.fragments; 5741 return ( 5742 Object.keys(o).forEach(function (l) { 5743 var u = o[l]; 5744 u && 5745 Zr(u) && 5746 ((r = u.body.start - s), 5747 (i = u.body.end + s), 5748 t >= r && 5749 t <= i && 5750 ((e = Math.min(t - r, i - t)), a <= e && ((n = u.body), (a = e)))); 5751 }), 5752 n 5753 ); 5754 }), 5755 (e.isEndListAppended = function (t) { 5756 var e = this.endListFragments[t]; 5757 return void 0 !== e && (e.buffered || Zr(e)); 5758 }), 5759 (e.getState = function (t) { 5760 var e = ti(t), 5761 r = this.fragments[e]; 5762 return r ? (r.buffered ? (Zr(r) ? Qr : Jr) : zr) : Xr; 5763 }), 5764 (e.isTimeBuffered = function (t, e, r) { 5765 for (var i, n, a = 0; a < r.length; a++) { 5766 if ( 5767 ((i = r.start(a) - this.bufferPadding), 5768 (n = r.end(a) + this.bufferPadding), 5769 t >= i && e <= n) 5770 ) 5771 return !0; 5772 if (e <= i) return !1; 5773 } 5774 return !1; 5775 }), 5776 (e.onFragLoaded = function (t, e) { 5777 var r = e.frag, 5778 i = e.part; 5779 if ('initSegment' !== r.sn && !r.bitrateTest) { 5780 var n = i ? null : e, 5781 a = ti(r); 5782 this.fragments[a] = { 5783 body: r, 5784 appendedPTS: null, 5785 loaded: n, 5786 buffered: !1, 5787 range: Object.create(null), 5788 }; 5789 } 5790 }), 5791 (e.onBufferAppended = function (t, e) { 5792 var r = this, 5793 i = e.frag, 5794 n = e.part, 5795 a = e.timeRanges; 5796 if ('initSegment' !== i.sn) { 5797 var s = i.type; 5798 if (n) { 5799 var o = this.activePartLists[s]; 5800 o || (this.activePartLists[s] = o = []), o.push(n); 5801 } 5802 (this.timeRanges = a),
5803 Object.keys(a).forEach(function (t) { 5804 var e = a[t]; 5805 r.detectEvictedFragments(t, e, s, n); 5806 }); 5807 } 5808 }), 5809 (e.onFragBuffered = function (t, e) { 5810 this.detectPartialFragments(e); 5811 }), 5812 (e.hasFragment = function (t) { 5813 var e = ti(t); 5814 return !!this.fragments[e]; 5815 }), 5816 (e.hasParts = function (t) { 5817 var e; 5818 return !(null == (e = this.activePartLists[t]) || !e.length); 5819 }), 5820 (e.removeFragmentsInRange = function (t, e, r, i, n) { 5821 var a = this; 5822 (i && !this.hasGaps) || 5823 Object.keys(this.fragments).forEach(function (s) { 5824 var o = a.fragments[s]; 5825 if (o) { 5826 var l = o.body; 5827 l.type !== r || 5828 (i && !l.gap) || 5829 (l.start < e && l.end > t && (o.buffered || n) && a.removeFragment(l)); 5830 } 5831 }); 5832 }), 5833 (e.removeFragment = function (t) { 5834 var e = ti(t); 5835 (t.stats.loaded = 0), t.clearElementaryStreamInfo(); 5836 var r = this.activePartLists[t.type]; 5837 if (r) { 5838 var i = t.sn; 5839 this.activePartLists[t.type] = r.filter(function (t) { 5840 return t.fragment.sn !== i; 5841 }); 5842 } 5843 delete this.fragments[e], t.endList && delete this.endListFragments[t.type]; 5844 }), 5845 (e.removeAllFragments = function () { 5846 (this.fragments = Object.create(null)), 5847 (this.endListFragments = Object.create(null)), 5848 (this.activePartLists = Object.create(null)), 5849 (this.hasGaps = !1); 5850 }), 5851 t 5852 ); 5853 })(); 5854 function Zr(t) { 5855 var e, r, i; 5856 return ( 5857 t.buffered && 5858 (t.body.gap || 5859 (null == (e = t.range.video) ? void 0 : e.partial) || 5860 (null == (r = t.range.audio) ? void 0 : r.partial) || 5861 (null == (i = t.range.audiovideo) ? void 0 : i.partial)) 5862 ); 5863 } 5864 function ti(t) { 5865 return t.type + '_' + t.level + '_' + t.sn; 5866 } 5867 var ei = { 5868 length: 0, 5869 start: function () { 5870 return 0; 5871 }, 5872 end: function () { 5873 return 0; 5874 }, 5875 }, 5876 ri = (function () { 5877 function t() {} 5878 return ( 5879 (t.isBuffered = function (e, r) { 5880 try { 5881 if (e) 5882 for (var i = t.getBuffered(e), n = 0; n < i.length; n++) 5883 if (r >= i.start(n) && r <= i.end(n)) return !0; 5884 } catch (t) {} 5885 return !1; 5886 }), 5887 (t.bufferInfo = function (e, r, i) { 5888 try { 5889 if (e) { 5890 var n, 5891 a = t.getBuffered(e), 5892 s = []; 5893 for (n = 0; n < a.length; n++) s.push({ start: a.start(n), end: a.end(n) }); 5894 return this.bufferedInfo(s, r, i); 5895 } 5896 } catch (t) {} 5897 return { len: 0, start: r, end: r, nextStart: void 0 }; 5898 }), 5899 (t.bufferedInfo = function (t, e, r) { 5900 (e = Math.max(0, e)), 5901 t.sort(function (t, e) { 5902 var r = t.start - e.start; 5903 return r || e.end - t.end; 5904 }); 5905 var i = []; 5906 if (r) 5907 for (var n = 0; n < t.length; n++) { 5908 var a = i.length; 5909 if (a) { 5910 var s = i[a - 1].end; 5911 t[n].start - s < r ? t[n].end > s && (i[a - 1].end = t[n].end) : i.push(t[n]); 5912 } else i.push(t[n]); 5913 } 5914 else i = t; 5915 for (var o, l = 0, u = e, h = e, d = 0; d < i.length; d++) { 5916 var c = i[d].start, 5917 f = i[d].end; 5918 if (e + r >= c && e < f) (u = c), (l = (h = f) - e); 5919 else if (e + r < c) { 5920 o = c; 5921 break; 5922 } 5923 } 5924 return { len: l, start: u || 0, end: h || 0, nextStart: o }; 5925 }), 5926 (t.getBuffered = function (t) { 5927 try { 5928 return t.buffered; 5929 } catch (t) { 5930 return w.log('failed to get media.buffered', t), ei; 5931 } 5932 }), 5933 t 5934 ); 5935 })(), 5936 ii = function (t, e, r, i, n, a) { 5937 void 0 === i && (i = 0), 5938 void 0 === n && (n = -1), 5939 void 0 === a && (a = !1), 5940 (this.level = void 0), 5941 (this.sn = void 0), 5942 (this.part = void 0), 5943 (this.id = void 0), 5944 (this.size = void 0), 5945 (this.partial = void 0), 5946 (this.transmuxing = { start: 0, executeStart: 0, executeEnd: 0, end: 0 }), 5947 (this.buffering = { 5948 audio: { start: 0, executeStart: 0, executeEnd: 0, end: 0 }, 5949 video: { start: 0, executeStart: 0, executeEnd: 0, end: 0 }, 5950 audiovideo: { start: 0, executeStart: 0, executeEnd: 0, end: 0 }, 5951 }), 5952 (this.level = t), 5953 (this.sn = e), 5954 (this.id = r), 5955 (this.size = i), 5956 (this.part = n), 5957 (this.partial = a); 5958 }; 5959 function ni(t, e) { 5960 for (var r = 0, i = t.length; r < i; r++) { 5961 var n; 5962 if ((null == (n = t[r]) ? void 0 : n.cc) === e) return t[r]; 5963 } 5964 return null; 5965 } 5966 function ai(t, e) { 5967 if (t) { 5968 var r = t.start + e; 5969 (t.start = t.startPTS = r), (t.endPTS = r + t.duration); 5970 } 5971 } 5972 function si(t, e) { 5973 for (var r = e.fragments, i = 0, n = r.length; i < n; i++) ai(r[i], t); 5974 e.fragmentHint && ai(e.fragmentHint, t), (e.alignedSliding = !0); 5975 } 5976 function oi(t, e, r) { 5977 e && 5978 ((function (t, e, r) { 5979 if ( 5980 (function (t, e, r) { 5981 return !(!e || !(r.endCC > r.startCC || (t && t.cc < r.startCC))); 5982 })(t, r, e) 5983 ) { 5984 var i = (function (t, e) { 5985 var r = t.fragments, 5986 i = e.fragments; 5987 if (i.length && r.length) { 5988 var n = ni(r, i[0].cc);
5989 if (n && (!n || n.startPTS)) return n; 5990 w.log('No frag in previous level to align on'); 5991 } else w.log('No fragments to align'); 5992 })(r, e); 5993 i && 5994 y(i.start) && 5995 (w.log( 5996 'Adjusting PTS using last level due to CC increase within current level ' + e.url 5997 ), 5998 si(i.start, e)); 5999 } 6000 })(t, r, e), 6001 !r.alignedSliding && e && li(r, e), 6002 r.alignedSliding || !e || r.skippedSegments || cr(e, r)); 6003 } 6004 function li(t, e) { 6005 if (t.hasProgramDateTime && e.hasProgramDateTime) { 6006 var r = t.fragments, 6007 i = e.fragments; 6008 if (r.length && i.length) { 6009 var n, 6010 a, 6011 s = Math.min(e.endCC, t.endCC); 6012 e.startCC < s && t.startCC < s && ((n = ni(i, s)), (a = ni(r, s))), 6013 (n && a) || 6014 (a = ni(r, (n = i[Math.floor(i.length / 2)]).cc) || r[Math.floor(r.length / 2)]); 6015 var o = n.programDateTime, 6016 l = a.programDateTime; 6017 o && l && si((l - o) / 1e3 - (a.start - n.start), t); 6018 } 6019 } 6020 } 6021 var ui = Math.pow(2, 17), 6022 hi = (function () { 6023 function t(t) { 6024 (this.config = void 0), 6025 (this.loader = null), 6026 (this.partLoadTimeout = -1), 6027 (this.config = t); 6028 } 6029 var e = t.prototype; 6030 return ( 6031 (e.destroy = function () { 6032 this.loader && (this.loader.destroy(), (this.loader = null)); 6033 }), 6034 (e.abort = function () { 6035 this.loader && this.loader.abort(); 6036 }), 6037 (e.load = function (t, e) { 6038 var r = this, 6039 n = t.url; 6040 if (!n) 6041 return Promise.reject( 6042 new fi({ 6043 type: L.NETWORK_ERROR, 6044 details: A.FRAG_LOAD_ERROR, 6045 fatal: !1, 6046 frag: t, 6047 error: new Error('Fragment does not have a ' + (n ? 'part list' : 'url')), 6048 networkDetails: null, 6049 }) 6050 ); 6051 this.abort(); 6052 var a = this.config, 6053 s = a.fLoader, 6054 o = a.loader; 6055 return new Promise(function (l, u) { 6056 if ((r.loader && r.loader.destroy(), t.gap)) { 6057 if ( 6058 t.tagList.some(function (t) { 6059 return 'GAP' === t[0]; 6060 }) 6061 ) 6062 return void u(ci(t)); 6063 t.gap = !1; 6064 } 6065 var h = (r.loader = t.loader = s ? new s(a) : new o(a)), 6066 d = di(t), 6067 c = Tr(a.fragLoadPolicy.default), 6068 f = { 6069 loadPolicy: c, 6070 timeout: c.maxLoadTimeMs, 6071 maxRetry: 0, 6072 retryDelay: 0, 6073 maxRetryDelay: 0, 6074 highWaterMark: 'initSegment' === t.sn ? 1 / 0 : ui, 6075 }; 6076 (t.stats = h.stats), 6077 h.load(d, f, { 6078 onSuccess: function (e, i, n, a) { 6079 r.resetLoader(t, h); 6080 var s = e.data; 6081 n.resetIV && 6082 t.decryptdata && 6083 ((t.decryptdata.iv = new Uint8Array(s.slice(0, 16))), (s = s.slice(16))), 6084 l({ frag: t, part: null, payload: s, networkDetails: a }); 6085 }, 6086 onError: function (e, a, s, o) { 6087 r.resetLoader(t, h), 6088 u( 6089 new fi({ 6090 type: L.NETWORK_ERROR, 6091 details: A.FRAG_LOAD_ERROR, 6092 fatal: !1, 6093 frag: t, 6094 response: i({ url: n, data: void 0 }, e), 6095 error: new Error('HTTP Error ' + e.code + ' ' + e.text), 6096 networkDetails: s, 6097 stats: o, 6098 }) 6099 ); 6100 }, 6101 onAbort: function (e, i, n) { 6102 r.resetLoader(t, h), 6103 u( 6104 new fi({
6105 type: L.NETWORK_ERROR, 6106 details: A.INTERNAL_ABORTED, 6107 fatal: !1, 6108 frag: t, 6109 error: new Error('Aborted'), 6110 networkDetails: n, 6111 stats: e, 6112 }) 6113 ); 6114 }, 6115 onTimeout: function (e, i, n) { 6116 r.resetLoader(t, h), 6117 u( 6118 new fi({ 6119 type: L.NETWORK_ERROR, 6120 details: A.FRAG_LOAD_TIMEOUT, 6121 fatal: !1, 6122 frag: t, 6123 error: new Error('Timeout after ' + f.timeout + 'ms'), 6124 networkDetails: n, 6125 stats: e, 6126 }) 6127 ); 6128 }, 6129 onProgress: function (r, i, n, a) { 6130 e && e({ frag: t, part: null, payload: n, networkDetails: a }); 6131 }, 6132 }); 6133 }); 6134 }), 6135 (e.loadPart = function (t, e, r) { 6136 var n = this; 6137 this.abort(); 6138 var a = this.config, 6139 s = a.fLoader, 6140 o = a.loader; 6141 return new Promise(function (l, u) { 6142 if ((n.loader && n.loader.destroy(), t.gap || e.gap)) u(ci(t, e)); 6143 else { 6144 var h = (n.loader = t.loader = s ? new s(a) : new o(a)), 6145 d = di(t, e), 6146 c = Tr(a.fragLoadPolicy.default), 6147 f = { 6148 loadPolicy: c, 6149 timeout: c.maxLoadTimeMs, 6150 maxRetry: 0, 6151 retryDelay: 0, 6152 maxRetryDelay: 0, 6153 highWaterMark: ui, 6154 }; 6155 (e.stats = h.stats), 6156 h.load(d, f, { 6157 onSuccess: function (i, a, s, o) { 6158 n.resetLoader(t, h), n.updateStatsFromPart(t, e); 6159 var u = { frag: t, part: e, payload: i.data, networkDetails: o }; 6160 r(u), l(u); 6161 }, 6162 onError: function (r, a, s, o) { 6163 n.resetLoader(t, h), 6164 u( 6165 new fi({ 6166 type: L.NETWORK_ERROR, 6167 details: A.FRAG_LOAD_ERROR, 6168 fatal: !1, 6169 frag: t, 6170 part: e, 6171 response: i({ url: d.url, data: void 0 }, r), 6172 error: new Error('HTTP Error ' + r.code + ' ' + r.text), 6173 networkDetails: s, 6174 stats: o, 6175 }) 6176 ); 6177 }, 6178 onAbort: function (r, i, a) { 6179 (t.stats.aborted = e.stats.aborted), 6180 n.resetLoader(t, h), 6181 u( 6182 new fi({ 6183 type: L.NETWORK_ERROR, 6184 details: A.INTERNAL_ABORTED, 6185 fatal: !1, 6186 frag: t, 6187 part: e, 6188 error: new Error('Aborted'), 6189 networkDetails: a, 6190 stats: r, 6191 }) 6192 ); 6193 }, 6194 onTimeout: function (r, i, a) { 6195 n.resetLoader(t, h), 6196 u( 6197 new fi({ 6198 type: L.NETWORK_ERROR, 6199 details: A.FRAG_LOAD_TIMEOUT, 6200 fatal: !1, 6201 frag: t, 6202 part: e, 6203 error: new Error('Timeout after ' + f.timeout + 'ms'), 6204 networkDetails: a, 6205 stats: r, 6206 }) 6207 ); 6208 }, 6209 }); 6210 } 6211 }); 6212 }), 6213 (e.updateStatsFromPart = function (t, e) { 6214 var r = t.stats, 6215 i = e.stats, 6216 n = i.total; 6217 if (((r.loaded += i.loaded), n)) { 6218 var a = Math.round(t.duration / e.duration), 6219 s = Math.min(Math.round(r.loaded / n), a),
6220 o = (a - s) * Math.round(r.loaded / s); 6221 r.total = r.loaded + o; 6222 } else r.total = Math.max(r.loaded, r.total); 6223 var l = r.loading, 6224 u = i.loading; 6225 l.start ? (l.first += u.first - u.start) : ((l.start = u.start), (l.first = u.first)), 6226 (l.end = u.end); 6227 }), 6228 (e.resetLoader = function (t, e) { 6229 (t.loader = null), 6230 this.loader === e && 6231 (self.clearTimeout(this.partLoadTimeout), (this.loader = null)), 6232 e.destroy(); 6233 }), 6234 t 6235 ); 6236 })(); 6237 function di(t, e) { 6238 void 0 === e && (e = null); 6239 var r = e || t, 6240 i = { 6241 frag: t, 6242 part: e, 6243 responseType: 'arraybuffer', 6244 url: r.url, 6245 headers: {}, 6246 rangeStart: 0, 6247 rangeEnd: 0, 6248 }, 6249 n = r.byteRangeStartOffset, 6250 a = r.byteRangeEndOffset; 6251 if (y(n) && y(a)) { 6252 var s, 6253 o = n, 6254 l = a; 6255 if ( 6256 'initSegment' === t.sn && 6257 'AES-128' === (null == (s = t.decryptdata) ? void 0 : s.method) 6258 ) { 6259 var u = a - n; 6260 u % 16 && (l = a + (16 - (u % 16))), 0 !== n && ((i.resetIV = !0), (o = n - 16)); 6261 } 6262 (i.rangeStart = o), (i.rangeEnd = l); 6263 } 6264 return i; 6265 } 6266 function ci(t, e) { 6267 var r = new Error('GAP ' + (t.gap ? 'tag' : 'attribute') + ' found'), 6268 i = { 6269 type: L.MEDIA_ERROR, 6270 details: A.FRAG_GAP, 6271 fatal: !1, 6272 frag: t, 6273 error: r, 6274 networkDetails: null, 6275 }; 6276 return e && (i.part = e), ((e || t).stats.aborted = !0), new fi(i); 6277 } 6278 var fi = (function (t) { 6279 function e(e) { 6280 var r; 6281 return ((r = t.call(this, e.error.message) || this).data = void 0), (r.data = e), r; 6282 } 6283 return l(e, t), e; 6284 })(c(Error)), 6285 gi = (function () { 6286 function t(t, e) { 6287 (this.subtle = void 0), (this.aesIV = void 0), (this.subtle = t), (this.aesIV = e); 6288 } 6289 return ( 6290 (t.prototype.decrypt = function (t, e) { 6291 return this.subtle.decrypt({ name: 'AES-CBC', iv: this.aesIV }, e, t); 6292 }), 6293 t 6294 ); 6295 })(), 6296 vi = (function () { 6297 function t(t, e) { 6298 (this.subtle = void 0), (this.key = void 0), (this.subtle = t), (this.key = e); 6299 } 6300 return ( 6301 (t.prototype.expandKey = function () { 6302 return this.subtle.importKey('raw', this.key, { name: 'AES-CBC' }, !1, [ 6303 'encrypt', 6304 'decrypt', 6305 ]); 6306 }), 6307 t 6308 ); 6309 })(), 6310 mi = (function () { 6311 function t() { 6312 (this.rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]), 6313 (this.subMix = [ 6314 new Uint32Array(256), 6315 new Uint32Array(256), 6316 new Uint32Array(256), 6317 new Uint32Array(256), 6318 ]), 6319 (this.invSubMix = [ 6320 new Uint32Array(256), 6321 new Uint32Array(256), 6322 new Uint32Array(256), 6323 new Uint32Array(256), 6324 ]), 6325 (this.sBox = new Uint32Array(256)), 6326 (this.invSBox = new Uint32Array(256)), 6327 (this.key = new Uint32Array(0)), 6328 (this.ksRows = 0), 6329 (this.keySize = 0), 6330 (this.keySchedule = void 0), 6331 (this.invKeySchedule = void 0), 6332 this.initTable(); 6333 } 6334 var e = t.prototype; 6335 return ( 6336 (e.uint8ArrayToUint32Array_ = function (t) { 6337 for (var e = new DataView(t), r = new Uint32Array(4), i = 0; i < 4; i++) 6338 r[i] = e.getUint32(4 * i); 6339 return r; 6340 }), 6341 (e.initTable = function () { 6342 var t = this.sBox, 6343 e = this.invSBox, 6344 r = this.subMix, 6345 i = r[0], 6346 n = r[1], 6347 a = r[2], 6348 s = r[3], 6349 o = this.invSubMix, 6350 l = o[0], 6351 u = o[1], 6352 h = o[2],
6353 d = o[3], 6354 c = new Uint32Array(256), 6355 f = 0, 6356 g = 0, 6357 v = 0; 6358 for (v = 0; v < 256; v++) c[v] = v < 128 ? v << 1 : (v << 1) ^ 283; 6359 for (v = 0; v < 256; v++) { 6360 var m = g ^ (g << 1) ^ (g << 2) ^ (g << 3) ^ (g << 4); 6361 (m = (m >>> 8) ^ (255 & m) ^ 99), (t[f] = m), (e[m] = f); 6362 var p = c[f], 6363 y = c[p], 6364 E = c[y], 6365 T = (257 * c[m]) ^ (16843008 * m); 6366 (i[f] = (T << 24) | (T >>> 8)), 6367 (n[f] = (T << 16) | (T >>> 16)), 6368 (a[f] = (T << 8) | (T >>> 24)), 6369 (s[f] = T), 6370 (T = (16843009 * E) ^ (65537 * y) ^ (257 * p) ^ (16843008 * f)), 6371 (l[m] = (T << 24) | (T >>> 8)), 6372 (u[m] = (T << 16) | (T >>> 16)), 6373 (h[m] = (T << 8) | (T >>> 24)), 6374 (d[m] = T), 6375 f ? ((f = p ^ c[c[c[E ^ p]]]), (g ^= c[c[g]])) : (f = g = 1); 6376 } 6377 }), 6378 (e.expandKey = function (t) { 6379 for (var e = this.uint8ArrayToUint32Array_(t), r = !0, i = 0; i < e.length && r; ) 6380 (r = e[i] === this.key[i]), i++; 6381 if (!r) { 6382 this.key = e; 6383 var n = (this.keySize = e.length); 6384 if (4 !== n && 6 !== n && 8 !== n) throw new Error('Invalid aes key size=' + n); 6385 var a, 6386 s, 6387 o, 6388 l, 6389 u = (this.ksRows = 4 * (n + 6 + 1)), 6390 h = (this.keySchedule = new Uint32Array(u)), 6391 d = (this.invKeySchedule = new Uint32Array(u)), 6392 c = this.sBox, 6393 f = this.rcon, 6394 g = this.invSubMix, 6395 v = g[0], 6396 m = g[1], 6397 p = g[2], 6398 y = g[3]; 6399 for (a = 0; a < u; a++) 6400 a < n 6401 ? (o = h[a] = e[a]) 6402 : ((l = o), 6403 a % n == 0 6404 ? ((l = 6405 (c[(l = (l << 8) | (l >>> 24)) >>> 24] << 24) | 6406 (c[(l >>> 16) & 255] << 16) | 6407 (c[(l >>> 8) & 255] << 8) | 6408 c[255 & l]), 6409 (l ^= f[(a / n) | 0] << 24)) 6410 : n > 6 && 6411 a % n == 4 && 6412 (l = 6413 (c[l >>> 24] << 24) | 6414 (c[(l >>> 16) & 255] << 16) | 6415 (c[(l >>> 8) & 255] << 8) | 6416 c[255 & l]), 6417 (h[a] = o = (h[a - n] ^ l) >>> 0)); 6418 for (s = 0; s < u; s++) 6419 (a = u - s), 6420 (l = 3 & s ? h[a] : h[a - 4]), 6421 (d[s] = 6422 s < 4 || a <= 4 6423 ? l 6424 : v[c[l >>> 24]] ^ 6425 m[c[(l >>> 16) & 255]] ^ 6426 p[c[(l >>> 8) & 255]] ^ 6427 y[c[255 & l]]), 6428 (d[s] = d[s] >>> 0); 6429 } 6430 }), 6431 (e.networkToHostOrderSwap = function (t) { 6432 return (t << 24) | ((65280 & t) << 8) | ((16711680 & t) >> 8) | (t >>> 24); 6433 }), 6434 (e.decrypt = function (t, e, r) { 6435 for ( 6436 var i, 6437 n, 6438 a, 6439 s, 6440 o, 6441 l, 6442 u, 6443 h, 6444 d, 6445 c, 6446 f, 6447 g, 6448 v, 6449 m, 6450 p = this.keySize + 6, 6451 y = this.invKeySchedule, 6452 E = this.invSBox, 6453 T = this.invSubMix, 6454 S = T[0], 6455 L = T[1], 6456 A = T[2], 6457 R = T[3], 6458 b = this.uint8ArrayToUint32Array_(r), 6459 k = b[0], 6460 D = b[1], 6461 I = b[2], 6462 w = b[3], 6463 C = new Int32Array(t), 6464 _ = new Int32Array(C.length), 6465 x = this.networkToHostOrderSwap; 6466 e < C.length; 6467 6468 ) { 6469 for ( 6470 d = x(C[e]),
6471 c = x(C[e + 1]), 6472 f = x(C[e + 2]), 6473 g = x(C[e + 3]), 6474 o = d ^ y[0], 6475 l = g ^ y[1], 6476 u = f ^ y[2], 6477 h = c ^ y[3], 6478 v = 4, 6479 m = 1; 6480 m < p; 6481 m++ 6482 ) 6483 (i = S[o >>> 24] ^ L[(l >> 16) & 255] ^ A[(u >> 8) & 255] ^ R[255 & h] ^ y[v]), 6484 (n = 6485 S[l >>> 24] ^ L[(u >> 16) & 255] ^ A[(h >> 8) & 255] ^ R[255 & o] ^ y[v + 1]), 6486 (a = 6487 S[u >>> 24] ^ L[(h >> 16) & 255] ^ A[(o >> 8) & 255] ^ R[255 & l] ^ y[v + 2]), 6488 (s = 6489 S[h >>> 24] ^ L[(o >> 16) & 255] ^ A[(l >> 8) & 255] ^ R[255 & u] ^ y[v + 3]), 6490 (o = i), 6491 (l = n), 6492 (u = a), 6493 (h = s), 6494 (v += 4); 6495 (i = 6496 (E[o >>> 24] << 24) ^ 6497 (E[(l >> 16) & 255] << 16) ^ 6498 (E[(u >> 8) & 255] << 8) ^ 6499 E[255 & h] ^ 6500 y[v]), 6501 (n = 6502 (E[l >>> 24] << 24) ^ 6503 (E[(u >> 16) & 255] << 16) ^ 6504 (E[(h >> 8) & 255] << 8) ^ 6505 E[255 & o] ^ 6506 y[v + 1]), 6507 (a = 6508 (E[u >>> 24] << 24) ^ 6509 (E[(h >> 16) & 255] << 16) ^ 6510 (E[(o >> 8) & 255] << 8) ^ 6511 E[255 & l] ^ 6512 y[v + 2]), 6513 (s = 6514 (E[h >>> 24] << 24) ^ 6515 (E[(o >> 16) & 255] << 16) ^ 6516 (E[(l >> 8) & 255] << 8) ^ 6517 E[255 & u] ^ 6518 y[v + 3]), 6519 (_[e] = x(i ^ k)), 6520 (_[e + 1] = x(s ^ D)), 6521 (_[e + 2] = x(a ^ I)), 6522 (_[e + 3] = x(n ^ w)), 6523 (k = d), 6524 (D = c), 6525 (I = f), 6526 (w = g), 6527 (e += 4); 6528 } 6529 return _.buffer; 6530 }), 6531 t 6532 ); 6533 })(), 6534 pi = (function () { 6535 function t(t, e) { 6536 var r = (void 0 === e ? {} : e).removePKCS7Padding, 6537 i = void 0 === r || r; 6538 if ( 6539 ((this.logEnabled = !0), 6540 (this.removePKCS7Padding = void 0), 6541 (this.subtle = null), 6542 (this.softwareDecrypter = null), 6543 (this.key = null), 6544 (this.fastAesKey = null), 6545 (this.remainderData = null), 6546 (this.currentIV = null), 6547 (this.currentResult = null), 6548 (this.useSoftware = void 0), 6549 (this.useSoftware = t.enableSoftwareAES), 6550 (this.removePKCS7Padding = i), 6551 i) 6552 ) 6553 try { 6554 var n = self.crypto; 6555 n && (this.subtle = n.subtle || n.webkitSubtle); 6556 } catch (t) {} 6557 this.useSoftware = !this.subtle; 6558 } 6559 var e = t.prototype; 6560 return ( 6561 (e.destroy = function () { 6562 (this.subtle = null), 6563 (this.softwareDecrypter = null), 6564 (this.key = null), 6565 (this.fastAesKey = null), 6566 (this.remainderData = null), 6567 (this.currentIV = null), 6568 (this.currentResult = null); 6569 }), 6570 (e.isSync = function () { 6571 return this.useSoftware; 6572 }), 6573 (e.flush = function () { 6574 var t = this.currentResult, 6575 e = this.remainderData; 6576 if (!t || e) return this.reset(), null; 6577 var r, 6578 i, 6579 n, 6580 a = new Uint8Array(t); 6581 return ( 6582 this.reset(), 6583 this.removePKCS7Padding 6584 ? ((i = (r = a).byteLength), 6585 (n = i && new DataView(r.buffer).getUint8(i - 1)) ? lt(r, 0, i - n) : r) 6586 : a 6587 ); 6588 }), 6589 (e.reset = function () { 6590 (this.currentResult = null),
6591 (this.currentIV = null), 6592 (this.remainderData = null), 6593 this.softwareDecrypter && (this.softwareDecrypter = null); 6594 }), 6595 (e.decrypt = function (t, e, r) { 6596 var i = this; 6597 return this.useSoftware 6598 ? new Promise(function (n, a) { 6599 i.softwareDecrypt(new Uint8Array(t), e, r); 6600 var s = i.flush(); 6601 s ? n(s.buffer) : a(new Error('[softwareDecrypt] Failed to decrypt data')); 6602 }) 6603 : this.webCryptoDecrypt(new Uint8Array(t), e, r); 6604 }), 6605 (e.softwareDecrypt = function (t, e, r) { 6606 var i = this.currentIV, 6607 n = this.currentResult, 6608 a = this.remainderData; 6609 this.logOnce('JS AES decrypt'), a && ((t = Wt(a, t)), (this.remainderData = null)); 6610 var s = this.getValidChunk(t); 6611 if (!s.length) return null; 6612 i && (r = i); 6613 var o = this.softwareDecrypter; 6614 o || (o = this.softwareDecrypter = new mi()), o.expandKey(e); 6615 var l = n; 6616 return ( 6617 (this.currentResult = o.decrypt(s.buffer, 0, r)), 6618 (this.currentIV = lt(s, -16).buffer), 6619 l || null 6620 ); 6621 }), 6622 (e.webCryptoDecrypt = function (t, e, r) { 6623 var i = this; 6624 if (this.key !== e || !this.fastAesKey) { 6625 if (!this.subtle) return Promise.resolve(this.onWebCryptoError(t, e, r)); 6626 (this.key = e), (this.fastAesKey = new vi(this.subtle, e)); 6627 } 6628 return this.fastAesKey 6629 .expandKey() 6630 .then(function (e) { 6631 return i.subtle 6632 ? (i.logOnce('WebCrypto AES decrypt'), 6633 new gi(i.subtle, new Uint8Array(r)).decrypt(t.buffer, e)) 6634 : Promise.reject(new Error('web crypto not initialized')); 6635 }) 6636 .catch(function (n) { 6637 return ( 6638 w.warn( 6639 '[decrypter]: WebCrypto Error, disable WebCrypto API, ' + 6640 n.name + 6641 ': ' + 6642 n.message 6643 ), 6644 i.onWebCryptoError(t, e, r) 6645 ); 6646 }); 6647 }), 6648 (e.onWebCryptoError = function (t, e, r) { 6649 (this.useSoftware = !0), (this.logEnabled = !0), this.softwareDecrypt(t, e, r); 6650 var i = this.flush(); 6651 if (i) return i.buffer; 6652 throw new Error('WebCrypto and softwareDecrypt: failed to decrypt data'); 6653 }), 6654 (e.getValidChunk = function (t) { 6655 var e = t, 6656 r = t.length - (t.length % 16); 6657 return r !== t.length && ((e = lt(t, 0, r)), (this.remainderData = lt(t, r))), e; 6658 }), 6659 (e.logOnce = function (t) { 6660 this.logEnabled && (w.log('[decrypter]: ' + t), (this.logEnabled = !1)); 6661 }), 6662 t 6663 ); 6664 })(), 6665 yi = function (t) { 6666 for (var e = '', r = t.length, i = 0; i < r; i++) 6667 e += '[' + t.start(i).toFixed(3) + '-' + t.end(i).toFixed(3) + ']'; 6668 return e; 6669 }, 6670 Ei = 'STOPPED', 6671 Ti = 'IDLE', 6672 Si = 'KEY_LOADING', 6673 Li = 'FRAG_LOADING', 6674 Ai = 'FRAG_LOADING_WAITING_RETRY', 6675 Ri = 'WAITING_TRACK', 6676 bi = 'PARSING', 6677 ki = 'PARSED', 6678 Di = 'ENDED', 6679 Ii = 'ERROR', 6680 wi = 'WAITING_INIT_PTS', 6681 Ci = 'WAITING_LEVEL', 6682 _i = (function (t) { 6683 function e(e, r, i, n, a) { 6684 var s; 6685 return ( 6686 ((s = t.call(this) || this).hls = void 0), 6687 (s.fragPrevious = null), 6688 (s.fragCurrent = null), 6689 (s.fragmentTracker = void 0), 6690 (s.transmuxer = null), 6691 (s._state = Ei), 6692 (s.playlistType = void 0), 6693 (s.media = null),
6694 (s.mediaBuffer = null), 6695 (s.config = void 0), 6696 (s.bitrateTest = !1), 6697 (s.lastCurrentTime = 0), 6698 (s.nextLoadPosition = 0), 6699 (s.startPosition = 0), 6700 (s.startTimeOffset = null), 6701 (s.loadedmetadata = !1), 6702 (s.retryDate = 0), 6703 (s.levels = null), 6704 (s.fragmentLoader = void 0), 6705 (s.keyLoader = void 0), 6706 (s.levelLastLoaded = null), 6707 (s.startFragRequested = !1), 6708 (s.decrypter = void 0), 6709 (s.initPTS = []), 6710 (s.buffering = !0), 6711 (s.onvseeking = null), 6712 (s.onvended = null), 6713 (s.logPrefix = ''), 6714 (s.log = void 0), 6715 (s.warn = void 0), 6716 (s.playlistType = a), 6717 (s.logPrefix = n), 6718 (s.log = w.log.bind(w, n + ':')), 6719 (s.warn = w.warn.bind(w, n + ':')), 6720 (s.hls = e), 6721 (s.fragmentLoader = new hi(e.config)), 6722 (s.keyLoader = i), 6723 (s.fragmentTracker = r), 6724 (s.config = e.config), 6725 (s.decrypter = new pi(e.config)), 6726 e.on( 6727 S.MANIFEST_LOADED, 6728 s.onManifestLoaded, 6729 (function (t) { 6730 if (void 0 === t) 6731 throw new ReferenceError( 6732 "this hasn't been initialised - super() hasn't been called" 6733 ); 6734 return t; 6735 })(s) 6736 ), 6737 s 6738 ); 6739 } 6740 l(e, t); 6741 var r = e.prototype; 6742 return ( 6743 (r.doTick = function () { 6744 this.onTickEnd(); 6745 }), 6746 (r.onTickEnd = function () {}), 6747 (r.startLoad = function (t) {}), 6748 (r.stopLoad = function () { 6749 this.fragmentLoader.abort(), this.keyLoader.abort(this.playlistType); 6750 var t = this.fragCurrent; 6751 null != t && t.loader && (t.abortRequests(), this.fragmentTracker.removeFragment(t)), 6752 this.resetTransmuxer(), 6753 (this.fragCurrent = null), 6754 (this.fragPrevious = null), 6755 this.clearInterval(), 6756 this.clearNextTick(), 6757 (this.state = Ei); 6758 }), 6759 (r.pauseBuffering = function () { 6760 this.buffering = !1; 6761 }), 6762 (r.resumeBuffering = function () { 6763 this.buffering = !0; 6764 }), 6765 (r._streamEnded = function (t, e) { 6766 if (e.live || t.nextStart || !t.end || !this.media) return !1; 6767 var r = e.partList; 6768 if (null != r && r.length) { 6769 var i = r[r.length - 1]; 6770 return ri.isBuffered(this.media, i.start + i.duration / 2); 6771 } 6772 var n = e.fragments[e.fragments.length - 1].type; 6773 return this.fragmentTracker.isEndListAppended(n); 6774 }), 6775 (r.getLevelDetails = function () { 6776 var t; 6777 if (this.levels && null !== this.levelLastLoaded) 6778 return null == (t = this.levelLastLoaded) ? void 0 : t.details; 6779 }), 6780 (r.onMediaAttached = function (t, e) { 6781 var r = (this.media = this.mediaBuffer = e.media); 6782 (this.onvseeking = this.onMediaSeeking.bind(this)), 6783 (this.onvended = this.onMediaEnded.bind(this)), 6784 r.addEventListener('seeking', this.onvseeking), 6785 r.addEventListener('ended', this.onvended); 6786 var i = this.config; 6787 this.levels && 6788 i.autoStartLoad && 6789 this.state === Ei && 6790 this.startLoad(i.startPosition); 6791 }), 6792 (r.onMediaDetaching = function () { 6793 var t = this.media; 6794 null != t && 6795 t.ended && 6796 (this.log('MSE detaching and video ended, reset startPosition'), 6797 (this.startPosition = this.lastCurrentTime = 0)), 6798 t && 6799 this.onvseeking && 6800 this.onvended && 6801 (t.removeEventListener('seeking', this.onvseeking), 6802 t.removeEventListener('ended', this.onvended), 6803 (this.onvseeking = this.onvended = null)), 6804 this.keyLoader && this.keyLoader.detach(), 6805 (this.media = this.mediaBuffer = null),
6806 (this.loadedmetadata = !1), 6807 this.fragmentTracker.removeAllFragments(), 6808 this.stopLoad(); 6809 }), 6810 (r.onMediaSeeking = function () { 6811 var t = this.config, 6812 e = this.fragCurrent, 6813 r = this.media, 6814 i = this.mediaBuffer, 6815 n = this.state, 6816 a = r ? r.currentTime : 0, 6817 s = ri.bufferInfo(i || r, a, t.maxBufferHole); 6818 if ( 6819 (this.log('media seeking to ' + (y(a) ? a.toFixed(3) : a) + ', state: ' + n), 6820 this.state === Di) 6821 ) 6822 this.resetLoadingState(); 6823 else if (e) { 6824 var o = t.maxFragLookUpTolerance, 6825 l = e.start - o, 6826 u = e.start + e.duration + o; 6827 if (!s.len || u < s.start || l > s.end) { 6828 var h = a > u; 6829 (a < l || h) && 6830 (h && 6831 e.loader && 6832 (this.log( 6833 'seeking outside of buffer while fragment load in progress, cancel fragment load' 6834 ), 6835 e.abortRequests(), 6836 this.resetLoadingState()), 6837 (this.fragPrevious = null)); 6838 } 6839 } 6840 r && 6841 (this.fragmentTracker.removeFragmentsInRange(a, 1 / 0, this.playlistType, !0), 6842 (this.lastCurrentTime = a)), 6843 this.loadedmetadata || s.len || (this.nextLoadPosition = this.startPosition = a), 6844 this.tickImmediate(); 6845 }), 6846 (r.onMediaEnded = function () { 6847 this.startPosition = this.lastCurrentTime = 0; 6848 }), 6849 (r.onManifestLoaded = function (t, e) { 6850 (this.startTimeOffset = e.startTimeOffset), (this.initPTS = []); 6851 }), 6852 (r.onHandlerDestroying = function () { 6853 this.hls.off(S.MANIFEST_LOADED, this.onManifestLoaded, this), 6854 this.stopLoad(), 6855 t.prototype.onHandlerDestroying.call(this), 6856 (this.hls = null); 6857 }), 6858 (r.onHandlerDestroyed = function () { 6859 (this.state = Ei), 6860 this.fragmentLoader && this.fragmentLoader.destroy(), 6861 this.keyLoader && this.keyLoader.destroy(), 6862 this.decrypter && this.decrypter.destroy(), 6863 (this.hls = 6864 this.log = 6865 this.warn = 6866 this.decrypter = 6867 this.keyLoader = 6868 this.fragmentLoader = 6869 this.fragmentTracker = 6870 null), 6871 t.prototype.onHandlerDestroyed.call(this); 6872 }), 6873 (r.loadFragment = function (t, e, r) { 6874 this._loadFragForPlayback(t, e, r); 6875 }), 6876 (r._loadFragForPlayback = function (t, e, r) { 6877 var i = this; 6878 this._doFragLoad(t, e, r, function (e) { 6879 if (i.fragContextChanged(t)) 6880 return ( 6881 i.warn( 6882 'Fragment ' + 6883 t.sn + 6884 (e.part ? ' p: ' + e.part.index : '') + 6885 ' of level ' + 6886 t.level + 6887 ' was dropped during download.' 6888 ), 6889 void i.fragmentTracker.removeFragment(t) 6890 ); 6891 t.stats.chunkCount++, i._handleFragmentLoadProgress(e); 6892 }) 6893 .then(function (e) { 6894 if (e) { 6895 var r = i.state; 6896 i.fragContextChanged(t) 6897 ? (r === Li || (!i.fragCurrent && r === bi)) && 6898 (i.fragmentTracker.removeFragment(t), (i.state = Ti)) 6899 : ('payload' in e && 6900 (i.log('Loaded fragment ' + t.sn + ' of level ' + t.level), 6901 i.hls.trigger(S.FRAG_LOADED, e)), 6902 i._handleFragmentLoadComplete(e)); 6903 } 6904 }) 6905 .catch(function (e) { 6906 i.state !== Ei && 6907 i.state !== Ii && 6908 (i.warn('Frag error: ' + ((null == e ? void 0 : e.message) || e)), 6909 i.resetFragmentLoading(t)); 6910 }); 6911 }), 6912 (r.clearTrackerIfNeeded = function (t) { 6913 var e, 6914 r = this.fragmentTracker; 6915 if (r.getState(t) === zr) { 6916 var i = t.type, 6917 n = this.getFwdBufferInfo(this.mediaBuffer, i), 6918 a = Math.max(t.duration, n ? n.len : this.config.maxBufferLength), 6919 s = this.backtrackFragment; 6920 (1 == (s ? t.sn - s.sn : 0) || this.reduceMaxBufferLength(a, t.duration)) && 6921 r.removeFragment(t); 6922 } else 6923 0 === (null == (e = this.mediaBuffer) ? void 0 : e.buffered.length) 6924 ? r.removeAllFragments() 6925 : r.hasParts(t.type) && 6926 (r.detectPartialFragments({ frag: t, part: null, stats: t.stats, id: t.type }), 6927 r.getState(t) === Qr && r.removeFragment(t)); 6928 }), 6929 (r.checkLiveUpdate = function (t) { 6930 if (t.updated && !t.live) { 6931 var e = t.fragments[t.fragments.length - 1]; 6932 this.fragmentTracker.detectPartialFragments({ 6933 frag: e, 6934 part: null, 6935 stats: e.stats, 6936 id: e.type, 6937 }); 6938 } 6939 t.fragments[0] || (t.deltaUpdateFailed = !0); 6940 }), 6941 (r.flushMainBuffer = function (t, e, r) { 6942 if ((void 0 === r && (r = null), t - e)) { 6943 var i = { startOffset: t, endOffset: e, type: r }; 6944 this.hls.trigger(S.BUFFER_FLUSHING, i); 6945 } 6946 }), 6947 (r._loadInitSegment = function (t, e) { 6948 var r = this; 6949 this._doFragLoad(t, e) 6950 .then(function (e) { 6951 if (!e || r.fragContextChanged(t) || !r.levels) 6952 throw new Error('init load aborted'); 6953 return e; 6954 }) 6955 .then(function (e) { 6956 var i = r.hls, 6957 n = e.payload, 6958 a = t.decryptdata; 6959 if ( 6960 n && 6961 n.byteLength > 0 && 6962 null != a && 6963 a.key && 6964 a.iv && 6965 'AES-128' === a.method 6966 ) { 6967 var s = self.performance.now(); 6968 return r.decrypter
6969 .decrypt(new Uint8Array(n), a.key.buffer, a.iv.buffer) 6970 .catch(function (e) { 6971 throw ( 6972 (i.trigger(S.ERROR, { 6973 type: L.MEDIA_ERROR, 6974 details: A.FRAG_DECRYPT_ERROR, 6975 fatal: !1, 6976 error: e, 6977 reason: e.message, 6978 frag: t, 6979 }), 6980 e) 6981 ); 6982 }) 6983 .then(function (n) { 6984 var a = self.performance.now(); 6985 return ( 6986 i.trigger(S.FRAG_DECRYPTED, { 6987 frag: t, 6988 payload: n, 6989 stats: { tstart: s, tdecrypt: a }, 6990 }), 6991 (e.payload = n), 6992 r.completeInitSegmentLoad(e) 6993 ); 6994 }); 6995 } 6996 return r.completeInitSegmentLoad(e); 6997 }) 6998 .catch(function (e) { 6999 r.state !== Ei && r.state !== Ii && (r.warn(e), r.resetFragmentLoading(t)); 7000 }); 7001 }), 7002 (r.completeInitSegmentLoad = function (t) { 7003 if (!this.levels) throw new Error('init load aborted, missing levels'); 7004 var e = t.frag.stats; 7005 (this.state = Ti), 7006 (t.frag.data = new Uint8Array(t.payload)), 7007 (e.parsing.start = e.buffering.start = self.performance.now()), 7008 (e.parsing.end = e.buffering.end = self.performance.now()), 7009 this.tick(); 7010 }), 7011 (r.fragContextChanged = function (t) { 7012 var e = this.fragCurrent; 7013 return !t || !e || t.sn !== e.sn || t.level !== e.level; 7014 }), 7015 (r.fragBufferedComplete = function (t, e) { 7016 var r, 7017 i, 7018 n, 7019 a, 7020 s = this.mediaBuffer ? this.mediaBuffer : this.media; 7021 if ( 7022 (this.log( 7023 'Buffered ' + 7024 t.type + 7025 ' sn: ' + 7026 t.sn + 7027 (e ? ' part: ' + e.index : '') + 7028 ' of ' + 7029 (this.playlistType === Fe ? 'level' : 'track') + 7030 ' ' + 7031 t.level + 7032 ' (frag:[' + 7033 (null != (r = t.startPTS) ? r : NaN).toFixed(3) + 7034 '-' + 7035 (null != (i = t.endPTS) ? i : NaN).toFixed(3) + 7036 '] > buffer:' + 7037 (s ? yi(ri.getBuffered(s)) : '(detached)') + 7038 ')' 7039 ), 7040 'initSegment' !== t.sn) 7041 ) { 7042 var o; 7043 if (t.type !== Oe) { 7044 var l = t.elementaryStreams; 7045 if ( 7046 !Object.keys(l).some(function (t) { 7047 return !!l[t]; 7048 }) 7049 ) 7050 return void (this.state = Ti); 7051 } 7052 var u = null == (o = this.levels) ? void 0 : o[t.level]; 7053 null != u && 7054 u.fragmentError && 7055 (this.log( 7056 'Resetting level fragment error count of ' + 7057 u.fragmentError + 7058 ' on frag buffered' 7059 ), 7060 (u.fragmentError = 0)); 7061 } 7062 (this.state = Ti), 7063 s && 7064 (!this.loadedmetadata && 7065 t.type == Fe && 7066 s.buffered.length && 7067 (null == (n = this.fragCurrent) ? void 0 : n.sn) === 7068 (null == (a = this.fragPrevious) ? void 0 : a.sn) && 7069 ((this.loadedmetadata = !0), this.seekToStartPos()), 7070 this.tick()); 7071 }), 7072 (r.seekToStartPos = function () {}), 7073 (r._handleFragmentLoadComplete = function (t) { 7074 var e = this.transmuxer; 7075 if (e) { 7076 var r = t.frag, 7077 i = t.part, 7078 n = t.partsLoaded, 7079 a = 7080 !n || 7081 0 === n.length || 7082 n.some(function (t) { 7083 return !t; 7084 }), 7085 s = new ii(r.level, r.sn, r.stats.chunkCount + 1, 0, i ? i.index : -1, !a); 7086 e.flush(s); 7087 } 7088 }), 7089 (r._handleFragmentLoadProgress = function (t) {}), 7090 (r._doFragLoad = function (t, e, r, i) { 7091 var n, 7092 a = this; 7093 void 0 === r && (r = null); 7094 var s = null == e ? void 0 : e.details; 7095 if (!this.levels || !s) 7096 throw new Error('frag load aborted, missing level' + (s ? '' : ' detail') + 's'); 7097 var o = null; 7098 if ( 7099 (!t.encrypted || (null != (n = t.decryptdata) && n.key) 7100 ? !t.encrypted && 7101 s.encryptedFragments.length && 7102 this.keyLoader.loadClear(t, s.encryptedFragments) 7103 : (this.log( 7104 'Loading key for ' + 7105 t.sn + 7106 ' of [' + 7107 s.startSN +
7108 '-' + 7109 s.endSN + 7110 '], ' + 7111 ('[stream-controller]' === this.logPrefix ? 'level' : 'track') + 7112 ' ' + 7113 t.level 7114 ), 7115 (this.state = Si), 7116 (this.fragCurrent = t), 7117 (o = this.keyLoader.load(t).then(function (t) { 7118 if (!a.fragContextChanged(t.frag)) 7119 return a.hls.trigger(S.KEY_LOADED, t), a.state === Si && (a.state = Ti), t; 7120 })), 7121 this.hls.trigger(S.KEY_LOADING, { frag: t }), 7122 null === this.fragCurrent && 7123 (o = Promise.reject( 7124 new Error('frag load aborted, context changed in KEY_LOADING') 7125 ))), 7126 (r = Math.max(t.start, r || 0)), 7127 this.config.lowLatencyMode && 'initSegment' !== t.sn) 7128 ) { 7129 var l = s.partList; 7130 if (l && i) { 7131 r > t.end && s.fragmentHint && (t = s.fragmentHint); 7132 var u = this.getNextPart(l, t, r); 7133 if (u > -1) { 7134 var h, 7135 d = l[u]; 7136 return ( 7137 this.log( 7138 'Loading part sn: ' + 7139 t.sn + 7140 ' p: ' + 7141 d.index + 7142 ' cc: ' + 7143 t.cc + 7144 ' of playlist [' + 7145 s.startSN + 7146 '-' + 7147 s.endSN + 7148 '] parts [0-' + 7149 u + 7150 '-' + 7151 (l.length - 1) + 7152 '] ' + 7153 ('[stream-controller]' === this.logPrefix ? 'level' : 'track') + 7154 ': ' + 7155 t.level + 7156 ', target: ' + 7157 parseFloat(r.toFixed(3)) 7158 ), 7159 (this.nextLoadPosition = d.start + d.duration), 7160 (this.state = Li), 7161 (h = o 7162 ? o 7163 .then(function (r) { 7164 return !r || a.fragContextChanged(r.frag) 7165 ? null 7166 : a.doFragPartsLoad(t, d, e, i); 7167 }) 7168 .catch(function (t) { 7169 return a.handleFragLoadError(t); 7170 }) 7171 : this.doFragPartsLoad(t, d, e, i).catch(function (t) { 7172 return a.handleFragLoadError(t); 7173 })), 7174 this.hls.trigger(S.FRAG_LOADING, { frag: t, part: d, targetBufferTime: r }), 7175 null === this.fragCurrent 7176 ? Promise.reject( 7177 new Error('frag load aborted, context changed in FRAG_LOADING parts') 7178 ) 7179 : h 7180 ); 7181 } 7182 if (!t.url || this.loadedEndOfParts(l, r)) return Promise.resolve(null); 7183 } 7184 } 7185 this.log( 7186 'Loading fragment ' + 7187 t.sn + 7188 ' cc: ' + 7189 t.cc + 7190 ' ' + 7191 (s ? 'of [' + s.startSN + '-' + s.endSN + '] ' : '') + 7192 ('[stream-controller]' === this.logPrefix ? 'level' : 'track') + 7193 ': ' + 7194 t.level + 7195 ', target: ' + 7196 parseFloat(r.toFixed(3)) 7197 ), 7198 y(t.sn) && !this.bitrateTest && (this.nextLoadPosition = t.start + t.duration), 7199 (this.state = Li); 7200 var c, 7201 f = this.config.progressive; 7202 return ( 7203 (c = 7204 f && o 7205 ? o 7206 .then(function (e) { 7207 return !e || a.fragContextChanged(null == e ? void 0 : e.frag) 7208 ? null 7209 : a.fragmentLoader.load(t, i); 7210 }) 7211 .catch(function (t) { 7212 return a.handleFragLoadError(t); 7213 }) 7214 : Promise.all([this.fragmentLoader.load(t, f ? i : void 0), o]) 7215 .then(function (t) { 7216 var e = t[0]; 7217 return !f && e && i && i(e), e; 7218 }) 7219 .catch(function (t) { 7220 return a.handleFragLoadError(t); 7221 })), 7222 this.hls.trigger(S.FRAG_LOADING, { frag: t, targetBufferTime: r }), 7223 null === this.fragCurrent 7224 ? Promise.reject(new Error('frag load aborted, context changed in FRAG_LOADING')) 7225 : c 7226 ); 7227 }), 7228 (r.doFragPartsLoad = function (t, e, r, i) { 7229 var n = this; 7230 return new Promise(function (a, s) { 7231 var o, 7232 l = [], 7233 u = null == (o = r.details) ? void 0 : o.partList; 7234 !(function e(o) { 7235 n.fragmentLoader 7236 .loadPart(t, o, i) 7237 .then(function (i) { 7238 l[o.index] = i; 7239 var s = i.part; 7240 n.hls.trigger(S.FRAG_LOADED, i); 7241 var h = gr(r, t.sn, o.index + 1) || vr(u, t.sn, o.index + 1); 7242 if (!h) return a({ frag: t, part: s, partsLoaded: l }); 7243 e(h); 7244 }) 7245 .catch(s); 7246 })(e); 7247 }); 7248 }), 7249 (r.handleFragLoadError = function (t) { 7250 if ('data' in t) { 7251 var e = t.data; 7252 t.data && e.details === A.INTERNAL_ABORTED 7253 ? this.handleFragLoadAborted(e.frag, e.part) 7254 : this.hls.trigger(S.ERROR, e); 7255 } else 7256 this.hls.trigger(S.ERROR, { 7257 type: L.OTHER_ERROR, 7258 details: A.INTERNAL_EXCEPTION, 7259 err: t, 7260 error: t, 7261 fatal: !0, 7262 }); 7263 return null; 7264 }), 7265 (r._handleTransmuxerFlush = function (t) { 7266 var e = this.getCurrentContext(t); 7267 if (e && this.state === bi) { 7268 var r = e.frag, 7269 i = e.part, 7270 n = e.level, 7271 a = self.performance.now(); 7272 (r.stats.parsing.end = a), 7273 i && (i.stats.parsing.end = a), 7274 this.updateLevelTiming(r, i, n, t.partial); 7275 } else 7276 this.fragCurrent || this.state === Ei || this.state === Ii || (this.state = Ti); 7277 }), 7278 (r.getCurrentContext = function (t) { 7279 var e = this.levels, 7280 r = this.fragCurrent, 7281 i = t.level, 7282 n = t.sn, 7283 a = t.part; 7284 if (null == e || !e[i]) 7285 return ( 7286 this.warn( 7287 'Levels object was unset while buffering fragment ' + 7288 n + 7289 ' of level ' + 7290 i + 7291 '. The current chunk will not be buffered.' 7292 ), 7293 null 7294 ); 7295 var s = e[i], 7296 o = a > -1 ? gr(s, n, a) : null, 7297 l = o 7298 ? o.fragment 7299 : (function (t, e, r) { 7300 if (null == t || !t.details) return null; 7301 var i = t.details, 7302 n = i.fragments[e - i.startSN]; 7303 return ( 7304 n || 7305 ((n = i.fragmentHint) && n.sn === e 7306 ? n 7307 : e < i.startSN && r && r.sn === e 7308 ? r 7309 : null) 7310 ); 7311 })(s, n, r); 7312 return l 7313 ? (r && r !== l && (l.stats = r.stats), { frag: l, part: o, level: s }) 7314 : null; 7315 }), 7316 (r.bufferFragmentData = function (t, e, r, i, n) { 7317 var a; 7318 if (t && this.state === bi) { 7319 var s = t.data1, 7320 o = t.data2, 7321 l = s; 7322 if ((s && o && (l = Wt(s, o)), null != (a = l) && a.length)) { 7323 var u = { type: t.type, frag: e, part: r, chunkMeta: i, parent: e.type, data: l }; 7324 if ((this.hls.trigger(S.BUFFER_APPENDING, u), t.dropped && t.independent && !r)) { 7325 if (n) return; 7326 this.flushBufferGap(e); 7327 } 7328 } 7329 } 7330 }), 7331 (r.flushBufferGap = function (t) { 7332 var e = this.media; 7333 if (e) 7334 if (ri.isBuffered(e, e.currentTime)) { 7335 var r = e.currentTime, 7336 i = ri.bufferInfo(e, r, 0), 7337 n = t.duration, 7338 a = Math.min(2 * this.config.maxFragLookUpTolerance, 0.25 * n), 7339 s = Math.max(Math.min(t.start - a, i.end - a), r + a); 7340 t.start - s > a && this.flushMainBuffer(s, t.start); 7341 } else this.flushMainBuffer(0, t.start); 7342 }), 7343 (r.getFwdBufferInfo = function (t, e) { 7344 var r = this.getLoadPosition(); 7345 return y(r) ? this.getFwdBufferInfoAtPos(t, r, e) : null; 7346 }), 7347 (r.getFwdBufferInfoAtPos = function (t, e, r) { 7348 var i = this.config.maxBufferHole, 7349 n = ri.bufferInfo(t, e, i); 7350 if (0 === n.len && void 0 !== n.nextStart) { 7351 var a = this.fragmentTracker.getBufferedFrag(e, r); 7352 if (a && n.nextStart < a.end) return ri.bufferInfo(t, e, Math.max(n.nextStart, i)); 7353 } 7354 return n; 7355 }), 7356 (r.getMaxBufferLength = function (t) { 7357 var e, 7358 r = this.config; 7359 return ( 7360 (e = t 7361 ? Math.max((8 * r.maxBufferSize) / t, r.maxBufferLength)
7362 : r.maxBufferLength), 7363 Math.min(e, r.maxMaxBufferLength) 7364 ); 7365 }), 7366 (r.reduceMaxBufferLength = function (t, e) { 7367 var r = this.config, 7368 i = Math.max(Math.min(t - e, r.maxBufferLength), e), 7369 n = Math.max(t - 3 * e, r.maxMaxBufferLength / 2, i); 7370 return ( 7371 n >= i && 7372 ((r.maxMaxBufferLength = n), 7373 this.warn('Reduce max buffer length to ' + n + 's'), 7374 !0) 7375 ); 7376 }), 7377 (r.getAppendedFrag = function (t, e) { 7378 var r = this.fragmentTracker.getAppendedFrag(t, Fe); 7379 return r && 'fragment' in r ? r.fragment : r; 7380 }), 7381 (r.getNextFragment = function (t, e) { 7382 var r = e.fragments, 7383 i = r.length; 7384 if (!i) return null; 7385 var n, 7386 a = this.config, 7387 s = r[0].start; 7388 if (e.live) { 7389 var o = a.initialLiveManifestSize; 7390 if (i < o) 7391 return ( 7392 this.warn( 7393 'Not enough fragments to start playback (have: ' + i + ', need: ' + o + ')' 7394 ), 7395 null 7396 ); 7397 ((!e.PTSKnown && !this.startFragRequested && -1 === this.startPosition) || t < s) && 7398 ((n = this.getInitialLiveFragment(e, r)), 7399 (this.startPosition = this.nextLoadPosition = 7400 n ? this.hls.liveSyncPosition || n.start : t)); 7401 } else t <= s && (n = r[0]); 7402 if (!n) { 7403 var l = a.lowLatencyMode ? e.partEnd : e.fragmentEnd; 7404 n = this.getFragmentAtPosition(t, l, e); 7405 } 7406 return this.mapToInitFragWhenRequired(n); 7407 }), 7408 (r.isLoopLoading = function (t, e) { 7409 var r = this.fragmentTracker.getState(t); 7410 return (r === Jr || (r === Qr && !!t.gap)) && this.nextLoadPosition > e; 7411 }), 7412 (r.getNextFragmentLoopLoading = function (t, e, r, i, n) { 7413 var a = t.gap, 7414 s = this.getNextFragment(this.nextLoadPosition, e); 7415 if (null === s) return s; 7416 if (((t = s), a && t && !t.gap && r.nextStart)) { 7417 var o = this.getFwdBufferInfoAtPos( 7418 this.mediaBuffer ? this.mediaBuffer : this.media, 7419 r.nextStart, 7420 i 7421 ); 7422 if (null !== o && r.len + o.len >= n) 7423 return ( 7424 this.log( 7425 'buffer full after gaps in "' + i + '" playlist starting at sn: ' + t.sn 7426 ), 7427 null 7428 ); 7429 } 7430 return t; 7431 }), 7432 (r.mapToInitFragWhenRequired = function (t) { 7433 return null == t || 7434 !t.initSegment || 7435 (null != t && t.initSegment.data) || 7436 this.bitrateTest 7437 ? t 7438 : t.initSegment; 7439 }), 7440 (r.getNextPart = function (t, e, r) { 7441 for (var i = -1, n = !1, a = !0, s = 0, o = t.length; s < o; s++) { 7442 var l = t[s]; 7443 if (((a = a && !l.independent), i > -1 && r < l.start)) break; 7444 var u = l.loaded; 7445 u ? (i = -1) : (n || l.independent || a) && l.fragment === e && (i = s), (n = u); 7446 } 7447 return i; 7448 }), 7449 (r.loadedEndOfParts = function (t, e) { 7450 var r = t[t.length - 1]; 7451 return r && e > r.start && r.loaded; 7452 }), 7453 (r.getInitialLiveFragment = function (t, e) { 7454 var r = this.fragPrevious, 7455 i = null; 7456 if (r) { 7457 if ( 7458 (t.hasProgramDateTime && 7459 (this.log( 7460 'Live playlist, switching playlist, load frag with same PDT: ' + 7461 r.programDateTime
7462 ), 7463 (i = (function (t, e, r) { 7464 if (null === e || !Array.isArray(t) || !t.length || !y(e)) return null; 7465 if (e < (t[0].programDateTime || 0)) return null; 7466 if (e >= (t[t.length - 1].endProgramDateTime || 0)) return null; 7467 r = r || 0; 7468 for (var i = 0; i < t.length; ++i) { 7469 var n = t[i]; 7470 if (br(e, r, n)) return n; 7471 } 7472 return null; 7473 })(e, r.endProgramDateTime, this.config.maxFragLookUpTolerance))), 7474 !i) 7475 ) { 7476 var n = r.sn + 1; 7477 if (n >= t.startSN && n <= t.endSN) { 7478 var a = e[n - t.startSN]; 7479 r.cc === a.cc && 7480 ((i = a), 7481 this.log( 7482 'Live playlist, switching playlist, load frag with next SN: ' + i.sn 7483 )); 7484 } 7485 i || 7486 ((i = (function (t, e) { 7487 return Lr(t, function (t) { 7488 return t.cc < e ? 1 : t.cc > e ? -1 : 0; 7489 }); 7490 })(e, r.cc)), 7491 i && 7492 this.log( 7493 'Live playlist, switching playlist, load frag with same CC: ' + i.sn 7494 )); 7495 } 7496 } else { 7497 var s = this.hls.liveSyncPosition; 7498 null !== s && 7499 (i = this.getFragmentAtPosition(s, this.bitrateTest ? t.fragmentEnd : t.edge, t)); 7500 } 7501 return i; 7502 }), 7503 (r.getFragmentAtPosition = function (t, e, r) { 7504 var i, 7505 n = this.config, 7506 a = this.fragPrevious, 7507 s = r.fragments, 7508 o = r.endSN, 7509 l = r.fragmentHint, 7510 u = n.maxFragLookUpTolerance, 7511 h = r.partList, 7512 d = !!(n.lowLatencyMode && null != h && h.length && l); 7513 if ( 7514 (d && l && !this.bitrateTest && ((s = s.concat(l)), (o = l.sn)), 7515 (i = t < e ? Ar(a, s, t, t > e - u ? 0 : u) : s[s.length - 1])) 7516 ) { 7517 var c = i.sn - r.startSN, 7518 f = this.fragmentTracker.getState(i); 7519 if ( 7520 ((f === Jr || (f === Qr && i.gap)) && (a = i), 7521 a && i.sn === a.sn && (!d || h[0].fragment.sn > i.sn) && a && i.level === a.level) 7522 ) { 7523 var g = s[c + 1]; 7524 i = i.sn < o && this.fragmentTracker.getState(g) !== Jr ? g : null; 7525 } 7526 } 7527 return i; 7528 }), 7529 (r.synchronizeToLiveEdge = function (t) { 7530 var e = this.config, 7531 r = this.media; 7532 if (r) { 7533 var i = this.hls.liveSyncPosition, 7534 n = r.currentTime, 7535 a = t.fragments[0].start, 7536 s = t.edge, 7537 o = n >= a - e.maxFragLookUpTolerance && n <= s; 7538 if (null !== i && r.duration > i && (n < i || !o)) { 7539 var l = 7540 void 0 !== e.liveMaxLatencyDuration 7541 ? e.liveMaxLatencyDuration 7542 : e.liveMaxLatencyDurationCount * t.targetduration; 7543 ((!o && r.readyState < 4) || n < s - l) && 7544 (this.loadedmetadata || (this.nextLoadPosition = i), 7545 r.readyState && 7546 (this.warn( 7547 'Playback: ' + 7548 n.toFixed(3) + 7549 ' is located too far from the end of live sliding playlist: ' + 7550 s + 7551 ', reset currentTime to : ' + 7552 i.toFixed(3) 7553 ), 7554 (r.currentTime = i))); 7555 } 7556 } 7557 }), 7558 (r.alignPlaylists = function (t, e, r) { 7559 var i = t.fragments.length; 7560 if (!i) return this.warn('No fragments in live playlist'), 0; 7561 var n = t.fragments[0].start, 7562 a = !e, 7563 s = t.alignedSliding && y(n); 7564 if (a || (!s && !n)) { 7565 var o = this.fragPrevious; 7566 oi(o, r, t); 7567 var l = t.fragments[0].start; 7568 return ( 7569 this.log( 7570 'Live playlist sliding: ' + 7571 l.toFixed(2) + 7572 ' start-sn: ' + 7573 (e ? e.startSN : 'na') +
7574 '->' + 7575 t.startSN + 7576 ' prev-sn: ' + 7577 (o ? o.sn : 'na') + 7578 ' fragments: ' + 7579 i 7580 ), 7581 l 7582 ); 7583 } 7584 return n; 7585 }), 7586 (r.waitForCdnTuneIn = function (t) { 7587 return ( 7588 t.live && 7589 t.canBlockReload && 7590 t.partTarget && 7591 t.tuneInGoal > Math.max(t.partHoldBack, 3 * t.partTarget) 7592 ); 7593 }), 7594 (r.setStartPosition = function (t, e) { 7595 var r = this.startPosition; 7596 if ((r < e && (r = -1), -1 === r || -1 === this.lastCurrentTime)) { 7597 var i = null !== this.startTimeOffset, 7598 n = i ? this.startTimeOffset : t.startTimeOffset; 7599 null !== n && y(n) 7600 ? ((r = e + n), 7601 n < 0 && (r += t.totalduration), 7602 (r = Math.min(Math.max(e, r), e + t.totalduration)), 7603 this.log( 7604 'Start time offset ' + 7605 n + 7606 ' found in ' + 7607 (i ? 'multivariant' : 'media') + 7608 ' playlist, adjust startPosition to ' + 7609 r 7610 ), 7611 (this.startPosition = r)) 7612 : t.live 7613 ? (r = this.hls.liveSyncPosition || e) 7614 : (this.startPosition = r = 0), 7615 (this.lastCurrentTime = r); 7616 } 7617 this.nextLoadPosition = r; 7618 }), 7619 (r.getLoadPosition = function () { 7620 var t = this.media, 7621 e = 0; 7622 return ( 7623 this.loadedmetadata && t 7624 ? (e = t.currentTime) 7625 : this.nextLoadPosition && (e = this.nextLoadPosition), 7626 e 7627 ); 7628 }), 7629 (r.handleFragLoadAborted = function (t, e) { 7630 this.transmuxer && 7631 'initSegment' !== t.sn && 7632 t.stats.aborted && 7633 (this.warn( 7634 'Fragment ' + 7635 t.sn + 7636 (e ? ' part ' + e.index : '') + 7637 ' of level ' + 7638 t.level + 7639 ' was aborted' 7640 ), 7641 this.resetFragmentLoading(t)); 7642 }), 7643 (r.resetFragmentLoading = function (t) { 7644 (this.fragCurrent && (this.fragContextChanged(t) || this.state === Ai)) || 7645 (this.state = Ti); 7646 }), 7647 (r.onFragmentOrKeyLoadError = function (t, e) { 7648 if (e.chunkMeta && !e.frag) { 7649 var r = this.getCurrentContext(e.chunkMeta); 7650 r && (e.frag = r.frag); 7651 } 7652 var i = e.frag; 7653 if (i && i.type === t && this.levels) 7654 if (this.fragContextChanged(i)) { 7655 var n; 7656 this.warn( 7657 'Frag load error must match current frag to retry ' + 7658 i.url + 7659 ' > ' + 7660 (null == (n = this.fragCurrent) ? void 0 : n.url) 7661 ); 7662 } else { 7663 var a = e.details === A.FRAG_GAP; 7664 a && this.fragmentTracker.fragBuffered(i, !0); 7665 var s = e.errorAction, 7666 o = s || {}, 7667 l = o.action, 7668 u = o.retryCount, 7669 h = void 0 === u ? 0 : u, 7670 d = o.retryConfig; 7671 if (s && l === wr && d) { 7672 this.resetStartWhenNotLoaded(this.levelLastLoaded); 7673 var c = Er(d, h); 7674 this.warn( 7675 'Fragment ' + 7676 i.sn + 7677 ' of ' + 7678 t + 7679 ' ' + 7680 i.level + 7681 ' errored with ' + 7682 e.details + 7683 ', retrying loading ' + 7684 (h + 1) + 7685 '/' + 7686 d.maxNumRetry + 7687 ' in ' + 7688 c + 7689 'ms' 7690 ), 7691 (s.resolved = !0), 7692 (this.retryDate = self.performance.now() + c), 7693 (this.state = Ai); 7694 } else if (d && s) { 7695 if ((this.resetFragmentErrors(t), !(h < d.maxNumRetry))) 7696 return void w.warn(e.details + ' reached or exceeded max retry (' + h + ')'); 7697 a || l === Ir || (s.resolved = !0); 7698 } else 7699 (null == s ? void 0 : s.action) === Dr ? (this.state = Ci) : (this.state = Ii); 7700 this.tickImmediate(); 7701 } 7702 }), 7703 (r.reduceLengthAndFlushBuffer = function (t) { 7704 if (this.state === bi || this.state === ki) { 7705 var e = t.frag, 7706 r = t.parent, 7707 i = this.getFwdBufferInfo(this.mediaBuffer, r), 7708 n = i && i.len > 0.5; 7709 n && this.reduceMaxBufferLength(i.len, (null == e ? void 0 : e.duration) || 10); 7710 var a = !n; 7711 return ( 7712 a && 7713 this.warn( 7714 'Buffer full error while media.currentTime is not buffered, flush ' + 7715 r + 7716 ' buffer' 7717 ), 7718 e && (this.fragmentTracker.removeFragment(e), (this.nextLoadPosition = e.start)), 7719 this.resetLoadingState(), 7720 a 7721 ); 7722 } 7723 return !1; 7724 }), 7725 (r.resetFragmentErrors = function (t) { 7726 t === Me && (this.fragCurrent = null),
7727 this.loadedmetadata || (this.startFragRequested = !1), 7728 this.state !== Ei && (this.state = Ti); 7729 }), 7730 (r.afterBufferFlushed = function (t, e, r) { 7731 if (t) { 7732 var i = ri.getBuffered(t); 7733 this.fragmentTracker.detectEvictedFragments(e, i, r), 7734 this.state === Di && this.resetLoadingState(); 7735 } 7736 }), 7737 (r.resetLoadingState = function () { 7738 this.log('Reset loading state'), 7739 (this.fragCurrent = null), 7740 (this.fragPrevious = null), 7741 (this.state = Ti); 7742 }), 7743 (r.resetStartWhenNotLoaded = function (t) { 7744 if (!this.loadedmetadata) { 7745 this.startFragRequested = !1; 7746 var e = t ? t.details : null; 7747 null != e && e.live 7748 ? ((this.startPosition = -1), 7749 this.setStartPosition(e, 0), 7750 this.resetLoadingState()) 7751 : (this.nextLoadPosition = this.startPosition); 7752 } 7753 }), 7754 (r.resetWhenMissingContext = function (t) { 7755 this.warn( 7756 'The loading context changed while buffering fragment ' + 7757 t.sn + 7758 ' of level ' + 7759 t.level + 7760 '. This chunk will not be buffered.' 7761 ), 7762 this.removeUnbufferedFrags(), 7763 this.resetStartWhenNotLoaded(this.levelLastLoaded), 7764 this.resetLoadingState(); 7765 }), 7766 (r.removeUnbufferedFrags = function (t) { 7767 void 0 === t && (t = 0), 7768 this.fragmentTracker.removeFragmentsInRange(t, 1 / 0, this.playlistType, !1, !0); 7769 }), 7770 (r.updateLevelTiming = function (t, e, r, i) { 7771 var n, 7772 a = this, 7773 s = r.details; 7774 if (s) { 7775 if ( 7776 !Object.keys(t.elementaryStreams).reduce(function (e, n) { 7777 var o = t.elementaryStreams[n]; 7778 if (o) { 7779 var l = o.endPTS - o.startPTS; 7780 if (l <= 0) 7781 return ( 7782 a.warn( 7783 'Could not parse fragment ' + 7784 t.sn + 7785 ' ' + 7786 n + 7787 ' duration reliably (' + 7788 l + 7789 ')' 7790 ), 7791 e || !1 7792 ); 7793 var u = i ? 0 : hr(s, t, o.startPTS, o.endPTS, o.startDTS, o.endDTS); 7794 return ( 7795 a.hls.trigger(S.LEVEL_PTS_UPDATED, { 7796 details: s, 7797 level: r, 7798 drift: u, 7799 type: n, 7800 frag: t, 7801 start: o.startPTS, 7802 end: o.endPTS, 7803 }), 7804 !0 7805 ); 7806 } 7807 return e; 7808 }, !1) && 7809 null === (null == (n = this.transmuxer) ? void 0 : n.error) 7810 ) { 7811 var o = new Error( 7812 'Found no media in fragment ' + 7813 t.sn + 7814 ' of level ' + 7815 t.level + 7816 ' resetting transmuxer to fallback to playlist timing' 7817 ); 7818 if ( 7819 (0 === r.fragmentError && 7820 (r.fragmentError++, 7821 (t.gap = !0), 7822 this.fragmentTracker.removeFragment(t), 7823 this.fragmentTracker.fragBuffered(t, !0)), 7824 this.warn(o.message), 7825 this.hls.trigger(S.ERROR, { 7826 type: L.MEDIA_ERROR, 7827 details: A.FRAG_PARSING_ERROR, 7828 fatal: !1, 7829 error: o, 7830 frag: t, 7831 reason: 'Found no media in msn ' + t.sn + ' of level "' + r.url + '"', 7832 }), 7833 !this.hls) 7834 ) 7835 return; 7836 this.resetTransmuxer(); 7837 } 7838 (this.state = ki), this.hls.trigger(S.FRAG_PARSED, { frag: t, part: e }); 7839 } else this.warn('level.details undefined'); 7840 }), 7841 (r.resetTransmuxer = function () { 7842 this.transmuxer && (this.transmuxer.destroy(), (this.transmuxer = null)); 7843 }), 7844 (r.recoverWorkerError = function (t) { 7845 'demuxerWorker' === t.event && 7846 (this.fragmentTracker.removeAllFragments(), 7847 this.resetTransmuxer(), 7848 this.resetStartWhenNotLoaded(this.levelLastLoaded), 7849 this.resetLoadingState()); 7850 }), 7851 s(e, [ 7852 { 7853 key: 'state', 7854 get: function () { 7855 return this._state; 7856 }, 7857 set: function (t) { 7858 var e = this._state; 7859 e !== t && ((this._state = t), this.log(e + '->' + t)); 7860 }, 7861 }, 7862 ]), 7863 e 7864 ); 7865 })(qr), 7866 xi = (function () { 7867 function t() { 7868 (this.chunks = []), (this.dataLength = 0); 7869 } 7870 var e = t.prototype; 7871 return ( 7872 (e.push = function (t) { 7873 this.chunks.push(t), (this.dataLength += t.length); 7874 }), 7875 (e.flush = function () { 7876 var t, 7877 e = this.chunks, 7878 r = this.dataLength; 7879 return e.length 7880 ? ((t = 7881 1 === e.length 7882 ? e[0] 7883 : (function (t, e) { 7884 for (var r = new Uint8Array(e), i = 0, n = 0; n < t.length; n++) { 7885 var a = t[n]; 7886 r.set(a, i), (i += a.length); 7887 } 7888 return r; 7889 })(e, r)), 7890 this.reset(), 7891 t) 7892 : new Uint8Array(0); 7893 }), 7894 (e.reset = function () { 7895 (this.chunks.length = 0), (this.dataLength = 0); 7896 }), 7897 t 7898 ); 7899 })(); 7900 function Pi(t, e) { 7901 return ( 7902 void 0 === t && (t = ''), 7903 void 0 === e && (e = 9e4), 7904 { 7905 type: t, 7906 id: -1, 7907 pid: -1, 7908 inputTimeScale: e, 7909 sequenceNumber: -1, 7910 samples: [], 7911 dropped: 0, 7912 } 7913 ); 7914 } 7915 var Fi = (function () { 7916 function t() { 7917 (this._audioTrack = void 0), 7918 (this._id3Track = void 0), 7919 (this.frameIndex = 0), 7920 (this.cachedData = null),
7921 (this.basePTS = null), 7922 (this.initPTS = null), 7923 (this.lastPTS = null); 7924 } 7925 var e = t.prototype; 7926 return ( 7927 (e.resetInitSegment = function (t, e, r, i) { 7928 this._id3Track = { 7929 type: 'id3', 7930 id: 3, 7931 pid: -1, 7932 inputTimeScale: 9e4, 7933 sequenceNumber: 0, 7934 samples: [], 7935 dropped: 0, 7936 }; 7937 }), 7938 (e.resetTimeStamp = function (t) { 7939 (this.initPTS = t), this.resetContiguity(); 7940 }), 7941 (e.resetContiguity = function () { 7942 (this.basePTS = null), (this.lastPTS = null), (this.frameIndex = 0); 7943 }), 7944 (e.canParse = function (t, e) { 7945 return !1; 7946 }), 7947 (e.appendFrame = function (t, e, r) {}), 7948 (e.demux = function (t, e) { 7949 this.cachedData && ((t = Wt(this.cachedData, t)), (this.cachedData = null)); 7950 var r, 7951 i = ct(t, 0), 7952 n = i ? i.length : 0, 7953 a = this._audioTrack, 7954 s = this._id3Track, 7955 o = i ? vt(i) : void 0, 7956 l = t.length; 7957 for ( 7958 (null === this.basePTS || (0 === this.frameIndex && y(o))) && 7959 ((this.basePTS = Mi(o, e, this.initPTS)), (this.lastPTS = this.basePTS)), 7960 null === this.lastPTS && (this.lastPTS = this.basePTS), 7961 i && 7962 i.length > 0 && 7963 s.samples.push({ 7964 pts: this.lastPTS, 7965 dts: this.lastPTS, 7966 data: i, 7967 type: We, 7968 duration: Number.POSITIVE_INFINITY, 7969 }); 7970 n < l; 7971 7972 ) { 7973 if (this.canParse(t, n)) { 7974 var u = this.appendFrame(a, t, n); 7975 u 7976 ? (this.frameIndex++, (this.lastPTS = u.sample.pts), (r = n += u.length)) 7977 : (n = l); 7978 } else 7979 gt(t, n) 7980 ? ((i = ct(t, n)), 7981 s.samples.push({ 7982 pts: this.lastPTS, 7983 dts: this.lastPTS, 7984 data: i, 7985 type: We, 7986 duration: Number.POSITIVE_INFINITY, 7987 }), 7988 (r = n += i.length)) 7989 : n++; 7990 if (n === l && r !== l) { 7991 var h = lt(t, r); 7992 this.cachedData 7993 ? (this.cachedData = Wt(this.cachedData, h)) 7994 : (this.cachedData = h); 7995 } 7996 } 7997 return { audioTrack: a, videoTrack: Pi(), id3Track: s, textTrack: Pi() }; 7998 }), 7999 (e.demuxSampleAes = function (t, e, r) { 8000 return Promise.reject( 8001 new Error('[' + this + '] This demuxer does not support Sample-AES decryption') 8002 ); 8003 }), 8004 (e.flush = function (t) { 8005 var e = this.cachedData; 8006 return ( 8007 e && ((this.cachedData = null), this.demux(e, 0)), 8008 { 8009 audioTrack: this._audioTrack, 8010 videoTrack: Pi(), 8011 id3Track: this._id3Track, 8012 textTrack: Pi(), 8013 } 8014 ); 8015 }), 8016 (e.destroy = function () {}), 8017 t 8018 ); 8019 })(), 8020 Mi = function (t, e, r) { 8021 return y(t) ? 90 * t : 9e4 * e + (r ? (9e4 * r.baseTime) / r.timescale : 0); 8022 }; 8023 function Oi(t, e) { 8024 return 255 === t[e] && 240 == (246 & t[e + 1]); 8025 } 8026 function Ni(t, e) { 8027 return 1 & t[e + 1] ? 7 : 9; 8028 } 8029 function Ui(t, e) { 8030 return ((3 & t[e + 3]) << 11) | (t[e + 4] << 3) | ((224 & t[e + 5]) >>> 5); 8031 } 8032 function Bi(t, e) { 8033 return e + 1 < t.length && Oi(t, e); 8034 } 8035 function Gi(t, e) { 8036 if (Bi(t, e)) { 8037 var r = Ni(t, e); 8038 if (e + r >= t.length) return !1; 8039 var i = Ui(t, e); 8040 if (i <= r) return !1; 8041 var n = e + i; 8042 return n === t.length || Bi(t, n); 8043 } 8044 return !1; 8045 } 8046 function Ki(t, e, r, i, n) { 8047 if (!t.samplerate) { 8048 var a = (function (t, e, r, i) { 8049 var n, 8050 a, 8051 s, 8052 o, 8053 l = navigator.userAgent.toLowerCase(), 8054 u = i, 8055 h = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; 8056 n = 1 + ((192 & e[r + 2]) >>> 6); 8057 var d = (60 & e[r + 2]) >>> 2; 8058 if (!(d > h.length - 1)) 8059 return ( 8060 (s = (1 & e[r + 2]) << 2), 8061 (s |= (192 & e[r + 3]) >>> 6), 8062 w.log('manifest codec:' + i + ', ADTS type:' + n + ', samplingIndex:' + d), 8063 /firefox/i.test(l) 8064 ? d >= 6
8065 ? ((n = 5), (o = new Array(4)), (a = d - 3)) 8066 : ((n = 2), (o = new Array(2)), (a = d)) 8067 : -1 !== l.indexOf('android') 8068 ? ((n = 2), (o = new Array(2)), (a = d)) 8069 : ((n = 5), 8070 (o = new Array(4)), 8071 (i && (-1 !== i.indexOf('mp4a.40.29') || -1 !== i.indexOf('mp4a.40.5'))) || 8072 (!i && d >= 6) 8073 ? (a = d - 3) 8074 : (((i && 8075 -1 !== i.indexOf('mp4a.40.2') && 8076 ((d >= 6 && 1 === s) || /vivaldi/i.test(l))) || 8077 (!i && 1 === s)) && 8078 ((n = 2), (o = new Array(2))), 8079 (a = d))), 8080 (o[0] = n << 3), 8081 (o[0] |= (14 & d) >> 1), 8082 (o[1] |= (1 & d) << 7), 8083 (o[1] |= s << 3), 8084 5 === n && 8085 ((o[1] |= (14 & a) >> 1), (o[2] = (1 & a) << 7), (o[2] |= 8), (o[3] = 0)), 8086 { 8087 config: o, 8088 samplerate: h[d], 8089 channelCount: s, 8090 codec: 'mp4a.40.' + n, 8091 manifestCodec: u, 8092 } 8093 ); 8094 var c = new Error('invalid ADTS sampling index:' + d); 8095 t.emit(S.ERROR, S.ERROR, { 8096 type: L.MEDIA_ERROR, 8097 details: A.FRAG_PARSING_ERROR, 8098 fatal: !0, 8099 error: c, 8100 reason: c.message, 8101 }); 8102 })(e, r, i, n); 8103 if (!a) return; 8104 (t.config = a.config), 8105 (t.samplerate = a.samplerate), 8106 (t.channelCount = a.channelCount), 8107 (t.codec = a.codec), 8108 (t.manifestCodec = a.manifestCodec), 8109 w.log( 8110 'parsed codec:' + t.codec + ', rate:' + a.samplerate + ', channels:' + a.channelCount 8111 ); 8112 } 8113 } 8114 function Hi(t) { 8115 return 9216e4 / t; 8116 } 8117 function Vi(t, e, r, i, n) { 8118 var a, 8119 s = i + n * Hi(t.samplerate), 8120 o = (function (t, e) { 8121 var r = Ni(t, e); 8122 if (e + r <= t.length) { 8123 var i = Ui(t, e) - r; 8124 if (i > 0) return { headerLength: r, frameLength: i }; 8125 } 8126 })(e, r); 8127 if (o) { 8128 var l = o.frameLength, 8129 u = o.headerLength, 8130 h = u + l, 8131 d = Math.max(0, r + h - e.length); 8132 d 8133 ? (a = new Uint8Array(h - u)).set(e.subarray(r + u, e.length), 0) 8134 : (a = e.subarray(r + u, r + h)); 8135 var c = { unit: a, pts: s }; 8136 return d || t.samples.push(c), { sample: c, length: h, missing: d }; 8137 } 8138 var f = e.length - r; 8139 return ( 8140 (a = new Uint8Array(f)).set(e.subarray(r, e.length), 0), 8141 { sample: { unit: a, pts: s }, length: f, missing: -1 } 8142 ); 8143 } 8144 var Yi = null, 8145 Wi = [ 8146 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 8147 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 8148 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 8149 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160, 8150 ], 8151 ji = [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3], 8152 qi = [ 8153 [0, 72, 144, 12], 8154 [0, 0, 0, 0], 8155 [0, 72, 144, 12], 8156 [0, 144, 144, 12], 8157 ], 8158 Xi = [0, 1, 1, 4]; 8159 function zi(t, e, r, i, n) { 8160 if (!(r + 24 > e.length)) { 8161 var a = Qi(e, r); 8162 if (a && r + a.frameLength <= e.length) { 8163 var s = i + n * ((9e4 * a.samplesPerFrame) / a.sampleRate), 8164 o = { unit: e.subarray(r, r + a.frameLength), pts: s, dts: s }; 8165 return ( 8166 (t.config = []), 8167 (t.channelCount = a.channelCount), 8168 (t.samplerate = a.sampleRate), 8169 t.samples.push(o), 8170 { sample: o, length: a.frameLength, missing: 0 } 8171 ); 8172 } 8173 } 8174 } 8175 function Qi(t, e) { 8176 var r = (t[e + 1] >> 3) & 3, 8177 i = (t[e + 1] >> 1) & 3, 8178 n = (t[e + 2] >> 4) & 15, 8179 a = (t[e + 2] >> 2) & 3; 8180 if (1 !== r && 0 !== n && 15 !== n && 3 !== a) { 8181 var s = (t[e + 2] >> 1) & 1, 8182 o = t[e + 3] >> 6, 8183 l = 1e3 * Wi[14 * (3 === r ? 3 - i : 3 === i ? 3 : 4) + n - 1], 8184 u = ji[3 * (3 === r ? 0 : 2 === r ? 1 : 2) + a], 8185 h = 3 === o ? 1 : 2, 8186 d = qi[r][i], 8187 c = Xi[i], 8188 f = 8 * d * c, 8189 g = Math.floor((d * l) / u + s) * c; 8190 if (null === Yi) { 8191 var v = (navigator.userAgent || '').match(/Chrome\/(\d+)/i); 8192 Yi = v ? parseInt(v[1]) : 0; 8193 } 8194 return ( 8195 !!Yi && Yi <= 87 && 2 === i && l >= 224e3 && 0 === o && (t[e + 3] = 128 | t[e + 3]), 8196 { sampleRate: u, channelCount: h, frameLength: g, samplesPerFrame: f } 8197 ); 8198 } 8199 } 8200 function Ji(t, e) { 8201 return 255 === t[e] && 224 == (224 & t[e + 1]) && 0 != (6 & t[e + 1]); 8202 } 8203 function $i(t, e) { 8204 return e + 1 < t.length && Ji(t, e); 8205 } 8206 function Zi(t, e) { 8207 if (e + 1 < t.length && Ji(t, e)) { 8208 var r = Qi(t, e), 8209 i = 4; 8210 null != r && r.frameLength && (i = r.frameLength); 8211 var n = e + i; 8212 return n === t.length || $i(t, n); 8213 } 8214 return !1; 8215 } 8216 var tn = (function (t) { 8217 function e(e, r) { 8218 var i; 8219 return ( 8220 ((i = t.call(this) || this).observer = void 0), 8221 (i.config = void 0), 8222 (i.observer = e), 8223 (i.config = r), 8224 i 8225 ); 8226 } 8227 l(e, t); 8228 var r = e.prototype; 8229 return ( 8230 (r.resetInitSegment = function (e, r, i, n) { 8231 t.prototype.resetInitSegment.call(this, e, r, i, n), 8232 (this._audioTrack = { 8233 container: 'audio/adts', 8234 type: 'audio', 8235 id: 2, 8236 pid: -1, 8237 sequenceNumber: 0, 8238 segmentCodec: 'aac', 8239 samples: [], 8240 manifestCodec: r, 8241 duration: n, 8242 inputTimeScale: 9e4, 8243 dropped: 0, 8244 }); 8245 }), 8246 (e.probe = function (t) { 8247 if (!t) return !1; 8248 var e = ct(t, 0), 8249 r = (null == e ? void 0 : e.length) || 0; 8250 if (Zi(t, r)) return !1; 8251 for (var i = t.length; r < i; r++) 8252 if (Gi(t, r)) return w.log('ADTS sync word found !'), !0; 8253 return !1; 8254 }), 8255 (r.canParse = function (t, e) { 8256 return (function (t, e) { 8257 return ( 8258 (function (t, e) { 8259 return e + 5 < t.length; 8260 })(t, e) && 8261 Oi(t, e) && 8262 Ui(t, e) <= t.length - e 8263 ); 8264 })(t, e); 8265 }), 8266 (r.appendFrame = function (t, e, r) { 8267 Ki(t, this.observer, e, r, t.manifestCodec); 8268 var i = Vi(t, e, r, this.basePTS, this.frameIndex); 8269 if (i && 0 === i.missing) return i; 8270 }), 8271 e 8272 ); 8273 })(Fi), 8274 en = /\/emsg[-/]ID3/i, 8275 rn = (function () { 8276 function t(t, e) { 8277 (this.remainderData = null),
8278 (this.timeOffset = 0), 8279 (this.config = void 0), 8280 (this.videoTrack = void 0), 8281 (this.audioTrack = void 0), 8282 (this.id3Track = void 0), 8283 (this.txtTrack = void 0), 8284 (this.config = e); 8285 } 8286 var e = t.prototype; 8287 return ( 8288 (e.resetTimeStamp = function () {}), 8289 (e.resetInitSegment = function (t, e, r, i) { 8290 var n = (this.videoTrack = Pi('video', 1)), 8291 a = (this.audioTrack = Pi('audio', 1)), 8292 s = (this.txtTrack = Pi('text', 1)); 8293 if ( 8294 ((this.id3Track = Pi('id3', 1)), (this.timeOffset = 0), null != t && t.byteLength) 8295 ) { 8296 var o = Ut(t); 8297 if (o.video) { 8298 var l = o.video, 8299 u = l.id, 8300 h = l.timescale, 8301 d = l.codec; 8302 (n.id = u), (n.timescale = s.timescale = h), (n.codec = d); 8303 } 8304 if (o.audio) { 8305 var c = o.audio, 8306 f = c.id, 8307 g = c.timescale, 8308 v = c.codec; 8309 (a.id = f), (a.timescale = g), (a.codec = v); 8310 } 8311 (s.id = wt.text), (n.sampleDuration = 0), (n.duration = a.duration = i); 8312 } 8313 }), 8314 (e.resetContiguity = function () { 8315 this.remainderData = null; 8316 }), 8317 (t.probe = function (t) { 8318 return (function (t) { 8319 for (var e = t.byteLength, r = 0; r < e; ) { 8320 var i = xt(t, r); 8321 if ( 8322 i > 8 && 8323 109 === t[r + 4] && 8324 111 === t[r + 5] && 8325 111 === t[r + 6] && 8326 102 === t[r + 7] 8327 ) 8328 return !0; 8329 r = i > 1 ? r + i : e; 8330 } 8331 return !1; 8332 })(t); 8333 }), 8334 (e.demux = function (t, e) { 8335 this.timeOffset = e; 8336 var r = t, 8337 i = this.videoTrack, 8338 n = this.txtTrack; 8339 if (this.config.progressive) { 8340 this.remainderData && (r = Wt(this.remainderData, t)); 8341 var a = (function (t) { 8342 var e = { valid: null, remainder: null }, 8343 r = Ot(t, ['moof']); 8344 if (r.length < 2) return (e.remainder = t), e; 8345 var i = r[r.length - 1]; 8346 return ( 8347 (e.valid = lt(t, 0, i.byteOffset - 8)), 8348 (e.remainder = lt(t, i.byteOffset - 8)), 8349 e 8350 ); 8351 })(r); 8352 (this.remainderData = a.remainder), (i.samples = a.valid || new Uint8Array()); 8353 } else i.samples = r; 8354 var s = this.extractID3Track(i, e); 8355 return ( 8356 (n.samples = jt(e, i)), 8357 { 8358 videoTrack: i, 8359 audioTrack: this.audioTrack, 8360 id3Track: s, 8361 textTrack: this.txtTrack, 8362 } 8363 ); 8364 }), 8365 (e.flush = function () { 8366 var t = this.timeOffset, 8367 e = this.videoTrack, 8368 r = this.txtTrack; 8369 (e.samples = this.remainderData || new Uint8Array()), (this.remainderData = null); 8370 var i = this.extractID3Track(e, this.timeOffset); 8371 return ( 8372 (r.samples = jt(t, e)), 8373 { videoTrack: e, audioTrack: Pi(), id3Track: i, textTrack: Pi() } 8374 ); 8375 }), 8376 (e.extractID3Track = function (t, e) { 8377 var r = this.id3Track; 8378 if (t.samples.length) { 8379 var i = Ot(t.samples, ['emsg']); 8380 i && 8381 i.forEach(function (t) { 8382 var i = (function (t) { 8383 var e = t[0], 8384 r = '', 8385 i = '', 8386 n = 0, 8387 a = 0, 8388 s = 0, 8389 o = 0, 8390 l = 0, 8391 u = 0; 8392 if (0 === e) { 8393 for (; '\0' !== Ct(t.subarray(u, u + 1)); ) 8394 (r += Ct(t.subarray(u, u + 1))), (u += 1); 8395 for ( 8396 r += Ct(t.subarray(u, u + 1)), u += 1; 8397 '\0' !== Ct(t.subarray(u, u + 1)); 8398 8399 ) 8400 (i += Ct(t.subarray(u, u + 1))), (u += 1); 8401 (i += Ct(t.subarray(u, u + 1))), 8402 (u += 1), 8403 (n = xt(t, 12)), 8404 (a = xt(t, 16)), 8405 (o = xt(t, 20)), 8406 (l = xt(t, 24)), 8407 (u = 28); 8408 } else if (1 === e) { 8409 n = xt(t, (u += 4)); 8410 var h = xt(t, (u += 4)), 8411 d = xt(t, (u += 4)); 8412 for ( 8413 u += 4, 8414 s = Math.pow(2, 32) * h + d, 8415 E(s) || 8416 ((s = Number.MAX_SAFE_INTEGER), 8417 w.warn( 8418 'Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box' 8419 )), 8420 o = xt(t, u), 8421 l = xt(t, (u += 4)), 8422 u += 4; 8423 '\0' !== Ct(t.subarray(u, u + 1)); 8424 8425 ) 8426 (r += Ct(t.subarray(u, u + 1))), (u += 1); 8427 for ( 8428 r += Ct(t.subarray(u, u + 1)), u += 1; 8429 '\0' !== Ct(t.subarray(u, u + 1)); 8430 8431 ) 8432 (i += Ct(t.subarray(u, u + 1))), (u += 1); 8433 (i += Ct(t.subarray(u, u + 1))), (u += 1); 8434 } 8435 return { 8436 schemeIdUri: r, 8437 value: i, 8438 timeScale: n, 8439 presentationTime: s, 8440 presentationTimeDelta: a, 8441 eventDuration: o, 8442 id: l, 8443 payload: t.subarray(u, t.byteLength), 8444 }; 8445 })(t); 8446 if (en.test(i.schemeIdUri)) { 8447 var n = y(i.presentationTime) 8448 ? i.presentationTime / i.timeScale 8449 : e + i.presentationTimeDelta / i.timeScale, 8450 a = 8451 4294967295 === i.eventDuration 8452 ? Number.POSITIVE_INFINITY 8453 : i.eventDuration / i.timeScale; 8454 a <= 0.001 && (a = Number.POSITIVE_INFINITY); 8455 var s = i.payload; 8456 r.samples.push({ 8457 data: s, 8458 len: s.byteLength, 8459 dts: n, 8460 pts: n, 8461 type: qe, 8462 duration: a, 8463 }); 8464 } 8465 }); 8466 } 8467 return r; 8468 }), 8469 (e.demuxSampleAes = function (t, e, r) { 8470 return Promise.reject( 8471 new Error('The MP4 demuxer does not support SAMPLE-AES decryption') 8472 ); 8473 }), 8474 (e.destroy = function () {}), 8475 t 8476 ); 8477 })(), 8478 nn = function (t, e) { 8479 var r = 0, 8480 i = 5; 8481 e += i; 8482 for (var n = new Uint32Array(1), a = new Uint32Array(1), s = new Uint8Array(1); i > 0; ) { 8483 s[0] = t[e]; 8484 var o = Math.min(i, 8), 8485 l = 8 - o; 8486 (a[0] = (4278190080 >>> (24 + l)) << l), 8487 (n[0] = (s[0] & a[0]) >> l), 8488 (r = r ? (r << o) | n[0] : n[0]), 8489 (e += 1), 8490 (i -= o); 8491 } 8492 return r; 8493 }, 8494 an = (function (t) { 8495 function e(e) { 8496 var r; 8497 return ((r = t.call(this) || this).observer = void 0), (r.observer = e), r; 8498 } 8499 l(e, t); 8500 var r = e.prototype; 8501 return ( 8502 (r.resetInitSegment = function (e, r, i, n) { 8503 t.prototype.resetInitSegment.call(this, e, r, i, n), 8504 (this._audioTrack = { 8505 container: 'audio/ac-3', 8506 type: 'audio', 8507 id: 2, 8508 pid: -1, 8509 sequenceNumber: 0, 8510 segmentCodec: 'ac3', 8511 samples: [], 8512 manifestCodec: r, 8513 duration: n, 8514 inputTimeScale: 9e4, 8515 dropped: 0, 8516 }); 8517 }), 8518 (r.canParse = function (t, e) { 8519 return e + 64 < t.length; 8520 }), 8521 (r.appendFrame = function (t, e, r) { 8522 var i = sn(t, e, r, this.basePTS, this.frameIndex); 8523 if (-1 !== i) 8524 return { sample: t.samples[t.samples.length - 1], length: i, missing: 0 }; 8525 }), 8526 (e.probe = function (t) { 8527 if (!t) return !1; 8528 var e = ct(t, 0); 8529 if (!e) return !1; 8530 var r = e.length; 8531 return 11 === t[r] && 119 === t[r + 1] && void 0 !== vt(e) && nn(t, r) < 16; 8532 }), 8533 e 8534 ); 8535 })(Fi); 8536 function sn(t, e, r, i, n) { 8537 if (r + 8 > e.length) return -1; 8538 if (11 !== e[r] || 119 !== e[r + 1]) return -1; 8539 var a = e[r + 4] >> 6; 8540 if (a >= 3) return -1; 8541 var s = [48e3, 44100, 32e3][a], 8542 o = 63 & e[r + 4], 8543 l = 8544 2 * 8545 [ 8546 64, 69, 96, 64, 70, 96, 80, 87, 120, 80, 88, 120, 96, 104, 144, 96, 105, 144, 112, 8547 121, 168, 112, 122, 168, 128, 139, 192, 128, 140, 192, 160, 174, 240, 160, 175, 240, 8548 192, 208, 288, 192, 209, 288, 224, 243, 336, 224, 244, 336, 256, 278, 384, 256, 279, 8549 384, 320, 348, 480, 320, 349, 480, 384, 417, 576, 384, 418, 5
854976, 448, 487, 672, 448, 8550 488, 672, 512, 557, 768, 512, 558, 768, 640, 696, 960, 640, 697, 960, 768, 835, 1152, 8551 768, 836, 1152, 896, 975, 1344, 896, 976, 1344, 1024, 1114, 1536, 1024, 1115, 1536, 8552 1152, 1253, 1728, 1152, 1254, 1728, 1280, 1393, 1920, 1280, 1394, 1920, 8553 ][3 * o + a]; 8554 if (r + l > e.length) return -1; 8555 var u = e[r + 6] >> 5, 8556 h = 0; 8557 2 === u ? (h += 2) : (1 & u && 1 !== u && (h += 2), 4 & u && (h += 2)); 8558 var d = (((e[r + 6] << 8) | e[r + 7]) >> (12 - h)) & 1, 8559 c = [2, 1, 2, 3, 3, 4, 4, 5][u] + d, 8560 f = e[r + 5] >> 3, 8561 g = 7 & e[r + 5], 8562 v = new Uint8Array([ 8563 (a << 6) | (f << 1) | (g >> 2), 8564 ((3 & g) << 6) | (u << 3) | (d << 2) | (o >> 4), 8565 (o << 4) & 224, 8566 ]), 8567 m = i + n * ((1536 / s) * 9e4), 8568 p = e.subarray(r, r + l); 8569 return ( 8570 (t.config = v), 8571 (t.channelCount = c), 8572 (t.samplerate = s), 8573 t.samples.push({ unit: p, pts: m }), 8574 l 8575 ); 8576 } 8577 var on = (function () { 8578 function t() { 8579 this.VideoSample = null; 8580 } 8581 var e = t.prototype; 8582 return ( 8583 (e.createVideoSample = function (t, e, r, i) { 8584 return { key: t, frame: !1, pts: e, dts: r, units: [], debug: i, length: 0 }; 8585 }), 8586 (e.getLastNalUnit = function (t) { 8587 var e, 8588 r, 8589 i = this.VideoSample; 8590 if ( 8591 ((i && 0 !== i.units.length) || (i = t[t.length - 1]), null != (e = i) && e.units) 8592 ) { 8593 var n = i.units; 8594 r = n[n.length - 1]; 8595 } 8596 return r; 8597 }), 8598 (e.pushAccessUnit = function (t, e) { 8599 if (t.units.length && t.frame) { 8600 if (void 0 === t.pts) { 8601 var r = e.samples, 8602 i = r.length; 8603 if (!i) return void e.dropped++; 8604 var n = r[i - 1]; 8605 (t.pts = n.pts), (t.dts = n.dts); 8606 } 8607 e.samples.push(t); 8608 } 8609 t.debug.length && w.log(t.pts + '/' + t.dts + ':' + t.debug); 8610 }), 8611 t 8612 ); 8613 })(), 8614 ln = (function () { 8615 function t(t) { 8616 (this.data = void 0), 8617 (this.bytesAvailable = void 0), 8618 (this.word = void 0), 8619 (this.bitsAvailable = void 0), 8620 (this.data = t), 8621 (this.bytesAvailable = t.byteLength), 8622 (this.word = 0), 8623 (this.bitsAvailable = 0); 8624 } 8625 var e = t.prototype; 8626 return ( 8627 (e.loadWord = function () { 8628 var t = this.data, 8629 e = this.bytesAvailable, 8630 r = t.byteLength - e, 8631 i = new Uint8Array(4), 8632 n = Math.min(4, e); 8633 if (0 === n) throw new Error('no bytes available'); 8634 i.set(t.subarray(r, r + n)), 8635 (this.word = new DataView(i.buffer).getUint32(0)), 8636 (this.bitsAvailable = 8 * n), 8637 (this.bytesAvailable -= n); 8638 }), 8639 (e.skipBits = function (t) { 8640 var e; 8641 (t = Math.min(t, 8 * this.bytesAvailable + this.bitsAvailable)), 8642 this.bitsAvailable > t 8643 ? ((this.word <<= t), (this.bitsAvailable -= t)) 8644 : ((t -= this.bitsAvailable), 8645 (t -= (e = t >> 3) << 3), 8646 (this.bytesAvailable -= e), 8647 this.loadWord(), 8648 (this.word <<= t), 8649 (this.bitsAvailable -= t)); 8650 }), 8651 (e.readBits = function (t) { 8652 var e = Math.min(this.bitsAvailable, t), 8653 r = this.word >>> (32 - e); 8654 if ( 8655 (t > 32 && w.error('Cannot read more than 32 bits at a time'), 8656 (this.bitsAvailable -= e), 8657 this.bitsAvailable > 0) 8658 ) 8659 this.word <<= e; 8660 else { 8661 if (!(this.bytesAvailable > 0)) throw new Error('no bits available'); 8662 this.loadWord(); 8663 } 8664 return (e = t - e) > 0 && this.bitsAvailable ? (r << e) | this.readBits(e) : r; 8665 }), 8666 (e.skipLZ = function () { 8667 var t; 8668 for (t = 0; t < this.bitsAvailable;
8668 ++t) 8669 if (0 != (this.word & (2147483648 >>> t))) 8670 return (this.word <<= t), (this.bitsAvailable -= t), t; 8671 return this.loadWord(), t + this.skipLZ(); 8672 }), 8673 (e.skipUEG = function () { 8674 this.skipBits(1 + this.skipLZ()); 8675 }), 8676 (e.skipEG = function () { 8677 this.skipBits(1 + this.skipLZ()); 8678 }), 8679 (e.readUEG = function () { 8680 var t = this.skipLZ(); 8681 return this.readBits(t + 1) - 1; 8682 }), 8683 (e.readEG = function () { 8684 var t = this.readUEG(); 8685 return 1 & t ? (1 + t) >>> 1 : -1 * (t >>> 1); 8686 }), 8687 (e.readBoolean = function () { 8688 return 1 === this.readBits(1); 8689 }), 8690 (e.readUByte = function () { 8691 return this.readBits(8); 8692 }), 8693 (e.readUShort = function () { 8694 return this.readBits(16); 8695 }), 8696 (e.readUInt = function () { 8697 return this.readBits(32); 8698 }), 8699 (e.skipScalingList = function (t) { 8700 for (var e = 8, r = 8, i = 0; i < t; i++) 8701 0 !== r && (r = (e + this.readEG() + 256) % 256), (e = 0 === r ? e : r); 8702 }), 8703 (e.readSPS = function () { 8704 var t, 8705 e, 8706 r, 8707 i = 0, 8708 n = 0, 8709 a = 0, 8710 s = 0, 8711 o = this.readUByte.bind(this), 8712 l = this.readBits.bind(this), 8713 u = this.readUEG.bind(this), 8714 h = this.readBoolean.bind(this), 8715 d = this.skipBits.bind(this), 8716 c = this.skipEG.bind(this), 8717 f = this.skipUEG.bind(this), 8718 g = this.skipScalingList.bind(this); 8719 o(); 8720 var v = o(); 8721 if ( 8722 (l(5), 8723 d(3), 8724 o(), 8725 f(), 8726 100 === v || 8727 110 === v || 8728 122 === v || 8729 244 === v || 8730 44 === v || 8731 83 === v || 8732 86 === v || 8733 118 === v || 8734 128 === v) 8735 ) { 8736 var m = u(); 8737 if ((3 === m && d(1), f(), f(), d(1), h())) 8738 for (e = 3 !== m ? 8 : 12, r = 0; r < e; r++) h() && g(r < 6 ? 16 : 64); 8739 } 8740 f(); 8741 var p = u(); 8742 if (0 === p) u(); 8743 else if (1 === p) for (d(1), c(), c(), t = u(), r = 0; r < t; r++) c(); 8744 f(), d(1); 8745 var y = u(), 8746 E = u(), 8747 T = l(1); 8748 0 === T && d(1), d(1), h() && ((i = u()), (n = u()), (a = u()), (s = u())); 8749 var S = [1, 1]; 8750 if (h() && h()) 8751 switch (o()) { 8752 case 1: 8753 S = [1, 1]; 8754 break; 8755 case 2: 8756 S = [12, 11]; 8757 break; 8758 case 3: 8759 S = [10, 11]; 8760 break; 8761 case 4: 8762 S = [16, 11]; 8763 break; 8764 case 5: 8765 S = [40, 33]; 8766 break; 8767 case 6: 8768 S = [24, 11]; 8769 break; 8770 case 7: 8771 S = [20, 11]; 8772 break; 8773 case 8: 8774 S = [32, 11]; 8775 break; 8776 case 9: 8777 S = [80, 33]; 8778 break; 8779 case 10: 8780 S = [18, 11]; 8781 break; 8782 case 11: 8783 S = [15, 11]; 8784 break; 8785 case 12: 8786 S = [64, 33]; 8787 break; 8788 case 13: 8789 S = [160, 99]; 8790 break; 8791 case 14: 8792 S = [4, 3]; 8793 break; 8794 case 15: 8795 S = [3, 2]; 8796 break; 8797 case 16: 8798 S = [2, 1]; 8799 break; 8800 case 255:
8801 S = [(o() << 8) | o(), (o() << 8) | o()]; 8802 } 8803 return { 8804 width: Math.ceil(16 * (y + 1) - 2 * i - 2 * n), 8805 height: (2 - T) * (E + 1) * 16 - (T ? 2 : 4) * (a + s), 8806 pixelRatio: S, 8807 }; 8808 }), 8809 (e.readSliceType = function () { 8810 return this.readUByte(), this.readUEG(), this.readUEG(); 8811 }), 8812 t 8813 ); 8814 })(), 8815 un = (function (t) { 8816 function e() { 8817 return t.apply(this, arguments) || this; 8818 } 8819 l(e, t); 8820 var r = e.prototype; 8821 return ( 8822 (r.parseAVCPES = function (t, e, r, i, n) { 8823 var a, 8824 s = this, 8825 o = this.parseAVCNALu(t, r.data), 8826 l = this.VideoSample, 8827 u = !1; 8828 (r.data = null), 8829 l && 8830 o.length && 8831 !t.audFound && 8832 (this.pushAccessUnit(l, t), 8833 (l = this.VideoSample = this.createVideoSample(!1, r.pts, r.dts, ''))), 8834 o.forEach(function (i) { 8835 var o; 8836 switch (i.type) { 8837 case 1: 8838 var h = !1; 8839 a = !0; 8840 var d, 8841 c = i.data; 8842 if (u && c.length > 4) { 8843 var f = new ln(c).readSliceType(); 8844 (2 !== f && 4 !== f && 7 !== f && 9 !== f) || (h = !0); 8845 } 8846 h && 8847 null != (d = l) && 8848 d.frame && 8849 !l.key && 8850 (s.pushAccessUnit(l, t), (l = s.VideoSample = null)), 8851 l || (l = s.VideoSample = s.createVideoSample(!0, r.pts, r.dts, '')), 8852 (l.frame = !0), 8853 (l.key = h); 8854 break; 8855 case 5: 8856 (a = !0), 8857 null != (o = l) && 8858 o.frame && 8859 !l.key && 8860 (s.pushAccessUnit(l, t), (l = s.VideoSample = null)), 8861 l || (l = s.VideoSample = s.createVideoSample(!0, r.pts, r.dts, '')), 8862 (l.key = !0), 8863 (l.frame = !0); 8864 break; 8865 case 6: 8866 (a = !0), Xt(i.data, 1, r.pts, e.samples); 8867 break; 8868 case 7: 8869 var g, v; 8870 (a = !0), (u = !0); 8871 var m = i.data, 8872 p = new ln(m).readSPS(); 8873 if ( 8874 !t.sps || 8875 t.width !== p.width || 8876 t.height !== p.height || 8877 (null == (g = t.pixelRatio) ? void 0 : g[0]) !== p.pixelRatio[0] || 8878 (null == (v = t.pixelRatio) ? void 0 : v[1]) !== p.pixelRatio[1] 8879 ) { 8880 (t.width = p.width), 8881 (t.height = p.height), 8882 (t.pixelRatio = p.pixelRatio), 8883 (t.sps = [m]), 8884 (t.duration = n); 8885 for (var y = m.subarray(1, 4), E = 'avc1.', T = 0; T < 3; T++) { 8886 var S = y[T].toString(16); 8887 S.length < 2 && (S = '0' + S), (E += S); 8888 } 8889 t.codec = E; 8890 } 8891 break; 8892 case 8: 8893 (a = !0), (t.pps = [i.data]); 8894 break; 8895 case 9: 8896 (a = !0), 8897 (t.audFound = !0), 8898 l && s.pushAccessUnit(l, t), 8899 (l = s.VideoSample = s.createVideoSample(!1, r.pts, r.dts, '')); 8900 break; 8901 case 12: 8902 a = !0; 8903 break; 8904 default: 8905 (a = !1), l && (l.debug += 'unknown NAL ' + i.type + ' '); 8906 } 8907 l && a && l.units.push(i); 8908 }), 8909 i && l && (this.pushAccessUnit(l, t), (this.VideoSample = null)); 8910 }), 8911 (r.parseAVCNALu = function (t, e) { 8912 var r, 8913 i, 8914 n = e.byteLength, 8915 a = t.naluState || 0, 8916 s = a, 8917 o = [], 8918 l = 0, 8919 u = -1, 8920 h = 0; 8921 for (-1 === a && ((u = 0), (h = 31 & e[0]), (a = 0), (l = 1)); l < n; ) 8922 if (((r = e[l++]), a)) 8923 if (1 !== a) 8924 if (r) 8925 if (1 === r) { 8926 if (((i = l - a - 1), u >= 0)) { 8927 var d = { data: e.subarray(u, i), type: h }; 8928 o.push(d); 8929 } else { 8930 var c = this.getLastNalUnit(t.samples); 8931 c && 8932 (s && 8933 l <= 4 - s && 8934 c.state && 8935 (c.data = c.data.subarray(0, c.data.byteLength - s)), 8936 i > 0 && ((c.data = Wt(c.data, e.subarray(0, i))), (c.state = 0))); 8937 } 8938 l < n ? ((u = l), (h = 31 & e[l]), (a = 0)) : (a = -1); 8939 } else a = 0; 8940 else a = 3; 8941 else a = r ? 0 : 2; 8942 else a = r ? 0 : 1; 8943 if (u >= 0 && a >= 0) { 8944 var f = { data: e.subarray(u, n), type: h, state: a }; 8945 o.push(f); 8946 } 8947 if (0 === o.length) { 8948 var g = this.getLastNalUnit(t.samples); 8949 g && (g.data = Wt(g.data, e)); 8950 } 8951 return (t.naluState = a), o; 8952 }), 8953 e 8954 ); 8955 })(on), 8956 hn = (function () { 8957 function t(t, e, r) { 8958 (this.keyData = void 0), 8959 (this.decrypter = void 0), 8960 (this.keyData = r), 8961 (this.decrypter = new pi(e, { removePKCS7Padding: !1 })); 8962 } 8963 var e = t.prototype; 8964 return ( 8965 (e.decryptBuffer = function (t) { 8966 return this.decrypter.decrypt(t, this.keyData.key.buffer, this.keyData.iv.buffer); 8967 }), 8968 (e.decryptAacSample = function (t, e, r) { 8969 var i = this, 8970 n = t[e].unit; 8971 if (!(n.length <= 16)) { 8972 var a = n.subarray(16, n.length - (n.length % 16)), 8973 s = a.buffer.slice(a.byteOffset, a.byteOffset + a.length); 8974 this.decryptBuffer(s).then(function (a) { 8975 var s = new Uint8Array(a); 8976 n.set(s, 16), i.decrypter.isSync() || i.decryptAacSamples(t, e + 1, r); 8977 }); 8978 } 8979 }), 8980 (e.decryptAacSamples = function (t, e, r) { 8981 for (; ; e++) { 8982 if (e >= t.length) return void r(); 8983 if ( 8984 !( 8985 t[e].unit.length < 32 || 8986 (this.decryptAacSample(t, e, r), this.decrypter.isSync()) 8987 ) 8988 ) 8989 return; 8990 } 8991 }), 8992 (e.getAvcEncryptedData = function (t) { 8993 for ( 8994 var e = 16 * Math.floor((t.length - 48) / 160) + 16, 8995 r = new Int8Array(e), 8996 i = 0, 8997 n = 32; 8998 n < t.length - 16; 8999 n += 160, i += 16 9000 ) 9001 r.set(t.subarray(n, n + 16), i); 9002 return r; 9003 }), 9004 (e.getAvcDecryptedUnit = function (t, e) { 9005 for (var r = new Uint8Array(e), i = 0, n = 32; n < t.length - 16; n += 160, i += 16) 9006 t.set(r.subarray(i, i + 16), n); 9007 return t; 9008 }), 9009 (e.decryptAvcSample = function (t, e, r, i, n) { 9010 var a = this, 9011 s = zt(n.data), 9012 o = this.getAvcEncryptedData(s); 9013 this.decryptBuffer(o.buffer).then(function (o) { 9014 (n.data = a.getAvcDecryptedUnit(s, o)), 9015 a.decrypter.isSync() || a.decryptAvcSamples(t, e, r + 1, i); 9016 }); 9017 }), 9018 (e.decryptAvcSamples = function (t, e, r, i) { 9019 if (t instanceof Uint8Array) 9020 throw new Error('Cannot decrypt samples of type Uint8Array'); 9021 for (; ; e++, r = 0) { 9022 if (e >= t.length) return void i(); 9023 for (var n = t[e].units; !(r >= n.length); r++) { 9024 var a = n[r]; 9025 if ( 9026 !( 9027 a.data.length <= 48 || 9028 (1 !== a.type && 5 !== a.type) || 9029 (this.decryptAvcSample(t, e, r, i, a), this.decrypter.isSync()) 9030 ) 9031 ) 9032 return; 9033 } 9034 } 9035 }), 9036 t 9037 ); 9038 })(), 9039 dn = 188, 9040 cn = (function () { 9041 function t(t, e, r) { 9042 (this.observer = void 0), 9043 (this.config = void 0),
9044 (this.typeSupported = void 0), 9045 (this.sampleAes = null), 9046 (this.pmtParsed = !1), 9047 (this.audioCodec = void 0), 9048 (this.videoCodec = void 0), 9049 (this._duration = 0), 9050 (this._pmtId = -1), 9051 (this._videoTrack = void 0), 9052 (this._audioTrack = void 0), 9053 (this._id3Track = void 0), 9054 (this._txtTrack = void 0), 9055 (this.aacOverFlow = null), 9056 (this.remainderData = null), 9057 (this.videoParser = void 0), 9058 (this.observer = t), 9059 (this.config = e), 9060 (this.typeSupported = r), 9061 (this.videoParser = new un()); 9062 } 9063 (t.probe = function (e) { 9064 var r = t.syncOffset(e); 9065 return ( 9066 r > 0 && w.warn('MPEG2-TS detected but first sync word found @ offset ' + r), -1 !== r 9067 ); 9068 }), 9069 (t.syncOffset = function (t) { 9070 for (var e = t.length, r = Math.min(940, e - dn) + 1, i = 0; i < r; ) { 9071 for (var n = !1, a = -1, s = 0, o = i; o < e; o += dn) { 9072 if (71 !== t[o] || (e - o !== dn && 71 !== t[o + dn])) { 9073 if (s) return -1; 9074 break; 9075 } 9076 if ( 9077 (s++, 9078 -1 === a && 0 !== (a = o) && (r = Math.min(a + 18612, t.length - dn) + 1), 9079 n || (n = 0 === fn(t, o)), 9080 n && s > 1 && ((0 === a && s > 2) || o + dn > r)) 9081 ) 9082 return a; 9083 } 9084 i++; 9085 } 9086 return -1; 9087 }), 9088 (t.createTrack = function (t, e) { 9089 return { 9090 container: 'video' === t || 'audio' === t ? 'video/mp2t' : void 0, 9091 type: t, 9092 id: wt[t], 9093 pid: -1, 9094 inputTimeScale: 9e4, 9095 sequenceNumber: 0, 9096 samples: [], 9097 dropped: 0, 9098 duration: 'audio' === t ? e : void 0, 9099 }; 9100 }); 9101 var e = t.prototype; 9102 return ( 9103 (e.resetInitSegment = function (e, r, i, n) { 9104 (this.pmtParsed = !1), 9105 (this._pmtId = -1), 9106 (this._videoTrack = t.createTrack('video')), 9107 (this._audioTrack = t.createTrack('audio', n)), 9108 (this._id3Track = t.createTrack('id3')), 9109 (this._txtTrack = t.createTrack('text')), 9110 (this._audioTrack.segmentCodec = 'aac'), 9111 (this.aacOverFlow = null), 9112 (this.remainderData = null), 9113 (this.audioCodec = r), 9114 (this.videoCodec = i), 9115 (this._duration = n); 9116 }), 9117 (e.resetTimeStamp = function () {}), 9118 (e.resetContiguity = function () { 9119 var t = this._audioTrack, 9120 e = this._videoTrack, 9121 r = this._id3Track; 9122 t && (t.pesData = null), 9123 e && (e.pesData = null), 9124 r && (r.pesData = null), 9125 (this.aacOverFlow = null), 9126 (this.remainderData = null); 9127 }), 9128 (e.demux = function (e, r, i, n) { 9129 var a; 9130 void 0 === i && (i = !1), void 0 === n && (n = !1), i || (this.sampleAes = null); 9131 var s = this._videoTrack, 9132 o = this._audioTrack, 9133 l = this._id3Track, 9134 u = this._txtTrack, 9135 h = s.pid, 9136 d = s.pesData, 9137 c = o.pid, 9138 f = l.pid, 9139 g = o.pesData, 9140 v = l.pesData, 9141 m = null, 9142 p = this.pmtParsed, 9143 y = this._pmtId, 9144 E = e.length; 9145 if ( 9146 (this.remainderData && 9147 ((E = (e = Wt(this.remainderData, e)).length), (this.remainderData = null)), 9148 E < dn && !n) 9149 ) 9150 return ( 9151 (this.remainderData = e), 9152 { audioTrack: o, videoTrack: s, id3Track: l, textTrack: u } 9153 ); 9154 var T = Math.max(0, t.syncOffset(e)); 9155 (E -= (E - T) % dn) < e.byteLength && 9156 !n && 9157 (this.remainderData = new Uint8Array(e.buffer, E, e.buffer.byteLength - E)); 9158 for (var S = 0, L = T; L < E; L += dn) 9159 if (71 === e[L]) { 9160 var A = !!(64 & e[L + 1]), 9161 R = fn(e, L), 9162 b = void 0; 9163 if ((48 & e[L + 3]) >> 4 > 1) { 9164 if ((b = L + 5 + e[L + 4]) === L + dn) continue; 9165 } else b = L + 4; 9166 switch (R) { 9167 case h: 9168 A && 9169 (d && 9170 (a = yn(d)) &&
9171 this.videoParser.parseAVCPES(s, u, a, !1, this._duration), 9172 (d = { data: [], size: 0 })), 9173 d && (d.data.push(e.subarray(b, L + dn)), (d.size += L + dn - b)); 9174 break; 9175 case c: 9176 if (A) { 9177 if (g && (a = yn(g))) 9178 switch (o.segmentCodec) { 9179 case 'aac': 9180 this.parseAACPES(o, a); 9181 break; 9182 case 'mp3': 9183 this.parseMPEGPES(o, a); 9184 break; 9185 case 'ac3': 9186 this.parseAC3PES(o, a); 9187 } 9188 g = { data: [], size: 0 }; 9189 } 9190 g && (g.data.push(e.subarray(b, L + dn)), (g.size += L + dn - b)); 9191 break; 9192 case f: 9193 A && 9194 (v && (a = yn(v)) && this.parseID3PES(l, a), (v = { data: [], size: 0 })), 9195 v && (v.data.push(e.subarray(b, L + dn)), (v.size += L + dn - b)); 9196 break; 9197 case 0: 9198 A && (b += e[b] + 1), (y = this._pmtId = gn(e, b)); 9199 break; 9200 case y: 9201 A && (b += e[b] + 1); 9202 var k = vn(e, b, this.typeSupported, i, this.observer); 9203 (h = k.videoPid) > 0 && ((s.pid = h), (s.segmentCodec = k.segmentVideoCodec)), 9204 (c = k.audioPid) > 0 && 9205 ((o.pid = c), (o.segmentCodec = k.segmentAudioCodec)), 9206 (f = k.id3Pid) > 0 && (l.pid = f), 9207 null === m || 9208 p || 9209 (w.warn( 9210 'MPEG-TS PMT found at ' + 9211 L + 9212 " after unknown PID '" + 9213 m + 9214 "'. Backtracking to sync byte @" + 9215 T + 9216 ' to parse all TS packets.' 9217 ), 9218 (m = null), 9219 (L = T - 188)), 9220 (p = this.pmtParsed = !0); 9221 break; 9222 case 17: 9223 case 8191: 9224 break; 9225 default: 9226 m = R; 9227 } 9228 } else S++; 9229 S > 0 && 9230 mn( 9231 this.observer, 9232 new Error('Found ' + S + ' TS packet/s that do not start with 0x47') 9233 ), 9234 (s.pesData = d), 9235 (o.pesData = g), 9236 (l.pesData = v); 9237 var D = { audioTrack: o, videoTrack: s, id3Track: l, textTrack: u }; 9238 return n && this.extractRemainingSamples(D), D; 9239 }), 9240 (e.flush = function () { 9241 var t, 9242 e = this.remainderData; 9243 return ( 9244 (this.remainderData = null), 9245 (t = e 9246 ? this.demux(e, -1, !1, !0) 9247 : { 9248 videoTrack: this._videoTrack, 9249 audioTrack: this._audioTrack, 9250 id3Track: this._id3Track, 9251 textTrack: this._txtTrack, 9252 }), 9253 this.extractRemainingSamples(t), 9254 this.sampleAes ? this.decrypt(t, this.sampleAes) : t 9255 ); 9256 }), 9257 (e.extractRemainingSamples = function (t) { 9258 var e, 9259 r = t.audioTrack, 9260 i = t.videoTrack, 9261 n = t.id3Track, 9262 a = t.textTrack, 9263 s = i.pesData, 9264 o = r.pesData, 9265 l = n.pesData; 9266 if ( 9267 (s && (e = yn(s))
9268 ? (this.videoParser.parseAVCPES(i, a, e, !0, this._duration), (i.pesData = null)) 9269 : (i.pesData = s), 9270 o && (e = yn(o))) 9271 ) { 9272 switch (r.segmentCodec) { 9273 case 'aac': 9274 this.parseAACPES(r, e); 9275 break; 9276 case 'mp3': 9277 this.parseMPEGPES(r, e); 9278 break; 9279 case 'ac3': 9280 this.parseAC3PES(r, e); 9281 } 9282 r.pesData = null; 9283 } else 9284 null != o && 9285 o.size && 9286 w.log('last AAC PES packet truncated,might overlap between fragments'), 9287 (r.pesData = o); 9288 l && (e = yn(l)) ? (this.parseID3PES(n, e), (n.pesData = null)) : (n.pesData = l); 9289 }), 9290 (e.demuxSampleAes = function (t, e, r) { 9291 var i = this.demux(t, r, !0, !this.config.progressive), 9292 n = (this.sampleAes = new hn(this.observer, this.config, e)); 9293 return this.decrypt(i, n); 9294 }), 9295 (e.decrypt = function (t, e) { 9296 return new Promise(function (r) { 9297 var i = t.audioTrack, 9298 n = t.videoTrack; 9299 i.samples && 'aac' === i.segmentCodec 9300 ? e.decryptAacSamples(i.samples, 0, function () { 9301 n.samples 9302 ? e.decryptAvcSamples(n.samples, 0, 0, function () { 9303 r(t); 9304 }) 9305 : r(t); 9306 }) 9307 : n.samples && 9308 e.decryptAvcSamples(n.samples, 0, 0, function () { 9309 r(t); 9310 }); 9311 }); 9312 }), 9313 (e.destroy = function () { 9314 this._duration = 0; 9315 }), 9316 (e.parseAACPES = function (t, e) { 9317 var r, 9318 i, 9319 n, 9320 a = 0, 9321 s = this.aacOverFlow, 9322 o = e.data; 9323 if (s) { 9324 this.aacOverFlow = null; 9325 var l = s.missing, 9326 u = s.sample.unit.byteLength; 9327 if (-1 === l) o = Wt(s.sample.unit, o); 9328 else { 9329 var h = u - l; 9330 s.sample.unit.set(o.subarray(0, l), h), t.samples.push(s.sample), (a = s.missing); 9331 } 9332 } 9333 for (r = a, i = o.length; r < i - 1 && !Bi(o, r); r++); 9334 if (r !== a) { 9335 var d, 9336 c = r < i - 1; 9337 if ( 9338 ((d = c 9339 ? 'AAC PES did not start with ADTS header,offset:' + r 9340 : 'No ADTS header found in AAC PES'), 9341 mn(this.observer, new Error(d), c), 9342 !c) 9343 ) 9344 return; 9345 } 9346 if ((Ki(t, this.observer, o, r, this.audioCodec), void 0 !== e.pts)) n = e.pts; 9347 else { 9348 if (!s) return void w.warn('[tsdemuxer]: AAC PES unknown PTS'); 9349 var f = Hi(t.samplerate); 9350 n = s.sample.pts + f; 9351 } 9352 for (var g, v = 0; r < i; ) { 9353 if (((r += (g = Vi(t, o, r, n, v)).length), g.missing)) { 9354 this.aacOverFlow = g; 9355 break; 9356 } 9357 for (v++; r < i - 1 && !Bi(o, r); r++); 9358 } 9359 }), 9360 (e.parseMPEGPES = function (t, e) { 9361 var r = e.data, 9362 i = r.length, 9363 n = 0, 9364 a = 0, 9365 s = e.pts; 9366 if (void 0 !== s) 9367 for (; a < i; ) 9368 if ($i(r, a)) { 9369 var o = zi(t, r, a, s, n); 9370 if (!o) break; 9371 (a += o.length), n++; 9372 } else a++; 9373 else w.warn('[tsdemuxer]: MPEG PES unknown PTS'); 9374 }), 9375 (e.parseAC3PES = function (t, e) { 9376 var r = e.data, 9377 i = e.pts; 9378 if (void 0 !== i) 9379 for (var n, a = r.length, s = 0, o = 0; o < a && (n = sn(t, r, o, i, s++)) > 0; ) 9380 o += n; 9381 else w.warn('[tsdemuxer]: AC3 PES unknown PTS'); 9382 }), 9383 (e.parseID3PES = function (t, e) { 9384 if (void 0 !== e.pts) { 9385 var r = o({}, e, { 9386 type: this._videoTrack ? qe : We, 9387 duration: Number.POSITIVE_INFINITY, 9388 }); 9389 t.samples.push(r); 9390 } else w.warn('[tsdemuxer]: ID3 PES unknown PTS'); 9391 }), 9392 t 9393 ); 9394 })(); 9395 function fn(t, e) { 9396 return ((31 & t[e + 1]) << 8) + t[e + 2]; 9397 } 9398 function gn(t, e) { 9399 return ((31 & t[e + 10]) << 8) | t[e + 11]; 9400 } 9401 function vn(t, e, r, i, n) { 9402 var a = { 9403 audioPid: -1, 9404 videoPid: -1, 9405 id3Pid: -1, 9406 segmentVideoCodec: 'avc', 9407 segmentAudioCodec: 'aac', 9408 }, 9409 s = e + 3 + (((15 & t[e + 1]) << 8) | t[e + 2]) - 4; 9410 for (e += 12 + (((15 & t[e + 10]) << 8) | t[e + 11]); e < s; ) { 9411 var o = fn(t, e), 9412 l = ((15 & t[e + 3]) << 8) | t[e + 4]; 9413 switch (t[e]) { 9414 case 207: 9415 if (!i) { 9416 pn('ADTS AAC'); 9417 break; 9418 } 9419 case 15: 9420 -1 === a.audioPid && (a.audioPid = o); 9421 break; 9422 case 21: 9423 -1 === a.id3Pid && (a.id3Pid = o); 9424 break; 9425 case 219: 9426 if (!i) { 9427 pn('H.264'); 9428 break; 9429 } 9430 case 27: 9431 -1 === a.videoPid && ((a.videoPid = o), (a.segmentVideoCodec = 'avc')); 9432 break; 9433 case 3: 9434 case 4: 9435 r.mpeg || r.mp3 9436 ? -1 === a.audioPid && ((a.audioPid = o), (a.segmentAudioCodec = 'mp3')) 9437 : w.log('MPEG audio found, not supported in this browser'); 9438 break; 9439 case 193: 9440 if (!i) { 9441 pn('AC-3'); 9442 break; 9443 } 9444 case 129: 9445 r.ac3 9446 ? -1 === a.audioPid && ((a.audioPid = o), (a.segmentAudioCodec = 'ac3')) 9447 : w.log('AC-3 audio found, not supported in this browser'); 9448 break; 9449 case 6: 9450 if (-1 === a.audioPid && l > 0) 9451 for (var u = e + 5, h = l; h > 2; ) { 9452 106 === t[u] && 9453 (!0 !== r.ac3 9454 ? w.log('AC-3 audio found, not supported in this browser for now') 9455 : ((a.audioPid = o), (a.segmentAudioCodec = 'ac3'))); 9456 var d = t[u + 1] + 2; 9457 (u += d), (h -= d); 9458 } 9459 break; 9460 case 194: 9461 case 135: 9462 return mn(n, new Error('Unsupported EC-3 in M2TS found')), a; 9463 case 36: 9464 return mn(n, new Error('Unsupported HEVC in M2TS found')), a; 9465 } 9466 e += l + 5; 9467 } 9468 return a; 9469 } 9470 function mn(t, e, r) { 9471 w.warn('parsing error: ' + e.message), 9472 t.emit(S.ERROR, S.ERROR, { 9473 type: L.MEDIA_ERROR, 9474 details: A.FRAG_PARSING_ERROR, 9475 fatal: !1, 9476 levelRetry: r, 9477 error: e, 9478 reason: e.message, 9479 }); 9480 } 9481 function pn(t) { 9482 w.log(t + ' with AES-128-CBC encryption found in unencrypted stream'); 9483 } 9484 function yn(t) { 9485 var e, 9486 r, 9487 i, 9488 n, 9489 a, 9490 s = 0, 9491 o = t.data; 9492 if (!t || 0 === t.size) return null; 9493 for (; o[0].length < 19 && o.length > 1; ) (o[0] = Wt(o[0], o[1])), o.splice(1, 1); 9494 if (1 === ((e = o[0])[0] << 16) + (e[1] << 8) + e[2]) { 9495 if ((r = (e[4] << 8) + e[5]) && r > t.size - 6) return null; 9496 var l = e[7]; 9497 192 & l && 9498 ((n = 9499 536870912 * (14 & e[9]) + 9500 4194304 * (255 & e[10]) + 9501 16384 * (254 & e[11]) + 9502 128 * (255 & e[12]) + 9503 (254 & e[13]) / 2), 9504 64 & l 9505 ? n - 9506 (a = 9507 536870912 * (14 & e[14]) + 9508 4194304 * (255 & e[15]) + 9509 16384 * (254 & e[16]) + 9510 128 * (255 & e[17]) + 9511 (254 & e[18]) / 2) > 9512 54e5 && 9513 (w.warn(Math.round((n - a) / 9e4) + 's delta between PTS and DTS, align them'), 9514 (n = a)) 9515 : (a = n)); 9516 var u = (i = e[8]) + 9; 9517 if (t.size <= u) return null; 9518 t.size -= u; 9519 for (var h = new Uint8Array(t.size), d = 0, c = o.length; d < c; d++) { 9520 var f = (e = o[d]).byteLength; 9521 if (u) { 9522 if (u > f) { 9523 u -= f; 9524 continue; 9525 } 9526 (e = e.subarray(u)), (f -= u), (u = 0); 9527 } 9528 h.set(e, s), (s += f); 9529 } 9530 return r && (r -= i + 3), { data: h, pts: n, dts: a, len: r }; 9531 } 9532 return null; 9533 } 9534 var En = (function (t) { 9535 function e() { 9536 return t.apply(this, arguments) || this; 9537 } 9538 l(e, t); 9539 var r = e.prototype; 9540 return ( 9541 (r.resetInitSegment = function (e, r, i, n) { 9542 t.prototype.resetInitSegment.call(this, e, r, i, n), 9543 (this._audioTrack = { 9544 container: 'audio/mpeg', 9545 type: 'audio', 9546 id: 2, 9547 pid: -1, 9548 sequenceNumber: 0, 9549 segmentCodec: 'mp3', 9550 samples: [], 9551 manifestCodec: r, 9552 duration: n, 9553 inputTimeScale: 9e4, 9554 dropped: 0, 9555 }); 9556 }), 9557 (e.probe = function (t) { 9558 if (!t) return !1; 9559 var e = ct(t, 0), 9560 r = (null == e ? void 0 : e.length) || 0; 9561 if (e && 11 === t[r] && 119 === t[r + 1] && void 0 !== vt(e) && nn(t, r) <= 16) 9562 return !1; 9563 for (var i = t.length; r < i; r++) 9564 if (Zi(t, r)) return w.log('MPEG Audio sync word found !'), !0; 9565 return !1; 9566 }), 9567 (r.canParse = function (t, e) { 9568 return (function (t, e) { 9569 return Ji(t, e) && 4 <= t.length - e; 9570 })(t, e); 9571 }), 9572 (r.appendFrame = function (t, e, r) { 9573 if (null !== this.basePTS) return zi(t, e, r, this.basePTS, this.frameIndex); 9574 }), 9575 e 9576 ); 9577 })(Fi), 9578 Tn = (function () { 9579 function t() {} 9580 return ( 9581 (t.getSilentFrame = function (t, e) { 9582 if ('mp4a.40.2' === t) { 9583 if (1 === e) return new Uint8Array([0, 200, 0, 128, 35, 128]); 9584 if (2 === e) return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]); 9585 if (3 === e) 9586 return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]); 9587 if (4 === e) 9588 return new Uint8Array([ 9589 0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56, 9590 ]); 9591 if (5 === e) 9592 return new Uint8Array([ 9593 0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 9594 56, 9595 ]); 9596 if (6 === e) 9597 return new Uint8Array([ 9598 0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 9599 0, 178, 0, 32, 8, 224, 9600 ]); 9601 } else { 9602 if (1 === e) 9603 return new Uint8Array([ 9604 1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 9605 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 9606 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94, 9607 ]); 9608 if (2 === e) 9609 return new Uint8Array([ 9610 1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 9611 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 9612 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94, 9613 ]); 9614 if (3 === e) 9615 return new Uint8Array([ 9616 1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 9617 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 9618 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94, 9619 ]); 9620 } 9621 }), 9622 t 9623 ); 9624 })(), 9625 Sn = Math.pow(2, 32) - 1, 9626 Ln = (function () { 9627 function t() {} 9628 return ( 9629 (t.init = function () { 9630 var e; 9631 for (e in ((t.types = { 9632 avc1: [], 9633 avcC: [], 9634 btrt: [], 9635 dinf: [], 9636 dref: [], 9637 esds: [], 9638 ftyp: [], 9639 hdlr: [], 9640 mdat: [], 9641 mdhd: [], 9642 mdia: [], 9643 mfhd: [], 9644 minf: [], 9645 moof: [], 9646 moov: [], 9647 mp4a: [], 9648 '.mp3': [], 9649 dac3: [], 9650 'ac-3': [], 9651 mvex: [], 9652 mvhd: [], 9653 pasp: [], 9654 sdtp: [], 9655 stbl: [], 9656 stco: [], 9657 stsc: [], 9658 stsd: [], 9659 stsz: [], 9660 stts: [], 9661 tfdt: [], 9662 tfhd: [], 9663 traf: [], 9664 trak: [], 9665 trun: [], 9666 trex: [], 9667 tkhd: [], 9668 vmhd: [], 9669 smhd: [], 9670 }), 9671 t.types)) 9672 t.types.hasOwnProperty(e) && 9673 (t.types[e] = [ 9674 e.charCodeAt(0), 9675 e.charCodeAt(1), 9676 e.charCodeAt(2), 9677 e.charCodeAt(3), 9678 ]); 9679 var r = new Uint8Array([ 9680 0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9681 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0, 9682 ]), 9683 i = new Uint8Array([ 9684 0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 9685 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0, 9686 ]); 9687 t.HDLR_TYPES = { video: r, audio: i }; 9688 var n = new Uint8Array([ 9689 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1, 9690 ]), 9691 a = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]); 9692 (t.STTS = t.STSC = t.STCO = a), 9693 (t.STSZ = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])), 9694 (t.VMHD = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0])), 9695 (t.SMHD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0])), 9696 (t.STSD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1])); 9697 var s = new Uint8Array([105, 115, 111, 109]), 9698 o = new Uint8Array([97, 118, 99, 49]), 9699 l = new Uint8Array([0, 0, 0, 1]); 9700 (t.FTYP = t.box(t.types.ftyp, s, l, s, o)), 9701 (t.DINF = t.box(t.types.dinf, t.box(t.types.dref, n))); 9702 }), 9703 (t.box = function (t) { 9704 for ( 9705 var e = 8, r = arguments.length, i = new Array(r > 1 ?
9705 r - 1 : 0), n = 1; 9706 n < r; 9707 n++ 9708 ) 9709 i[n - 1] = arguments[n]; 9710 for (var a = i.length, s = a; a--; ) e += i[a].byteLength; 9711 var o = new Uint8Array(e); 9712 for ( 9713 o[0] = (e >> 24) & 255, 9714 o[1] = (e >> 16) & 255, 9715 o[2] = (e >> 8) & 255, 9716 o[3] = 255 & e, 9717 o.set(t, 4), 9718 a = 0, 9719 e = 8; 9720 a < s; 9721 a++ 9722 ) 9723 o.set(i[a], e), (e += i[a].byteLength); 9724 return o; 9725 }), 9726 (t.hdlr = function (e) { 9727 return t.box(t.types.hdlr, t.HDLR_TYPES[e]); 9728 }), 9729 (t.mdat = function (e) { 9730 return t.box(t.types.mdat, e); 9731 }), 9732 (t.mdhd = function (e, r) { 9733 r *= e; 9734 var i = Math.floor(r / (Sn + 1)), 9735 n = Math.floor(r % (Sn + 1)); 9736 return t.box( 9737 t.types.mdhd, 9738 new Uint8Array([ 9739 1, 9740 0, 9741 0, 9742 0, 9743 0, 9744 0, 9745 0, 9746 0, 9747 0, 9748 0, 9749 0, 9750 2, 9751 0, 9752 0, 9753 0, 9754 0, 9755 0, 9756 0, 9757 0, 9758 3, 9759 (e >> 24) & 255, 9760 (e >> 16) & 255, 9761 (e >> 8) & 255, 9762 255 & e, 9763 i >> 24, 9764 (i >> 16) & 255, 9765 (i >> 8) & 255, 9766 255 & i, 9767 n >> 24, 9768 (n >> 16) & 255, 9769 (n >> 8) & 255, 9770 255 & n, 9771 85, 9772 196, 9773 0, 9774 0, 9775 ]) 9776 ); 9777 }), 9778 (t.mdia = function (e) { 9779 return t.box( 9780 t.types.mdia, 9781 t.mdhd(e.timescale, e.duration), 9782 t.hdlr(e.type), 9783 t.minf(e) 9784 ); 9785 }), 9786 (t.mfhd = function (e) { 9787 return t.box( 9788 t.types.mfhd, 9789 new Uint8Array([0, 0, 0, 0, e >> 24, (e >> 16) & 255, (e >> 8) & 255, 255 & e]) 9790 ); 9791 }), 9792 (t.minf = function (e) { 9793 return 'audio' === e.type 9794 ? t.box(t.types.minf, t.box(t.types.smhd, t.SMHD), t.DINF, t.stbl(e)) 9795 : t.box(t.types.minf, t.box(t.types.vmhd, t.VMHD), t.DINF, t.stbl(e)); 9796 }), 9797 (t.moof = function (e, r, i) { 9798 return t.box(t.types.moof, t.mfhd(e), t.traf(i, r)); 9799 }), 9800 (t.moov = function (e) { 9801 for (var r = e.length, i = []; r--; ) i[r] = t.trak(e[r]); 9802 return t.box.apply( 9803 null, 9804 [t.types.moov, t.mvhd(e[0].timescale, e[0].duration)].concat(i).concat(t.mvex(e)) 9805 ); 9806 }), 9807 (t.mvex = function (e) { 9808 for (var r = e.length, i = []; r--; ) i[r] = t.trex(e[r]); 9809 return t.box.apply(null, [t.types.mvex].concat(i)); 9810 }), 9811 (t.mvhd = function (e, r) { 9812 r *= e; 9813 var i = Math.floor(r / (Sn + 1)), 9814 n = Math.floor(r % (Sn + 1)), 9815 a = new Uint8Array([ 9816 1, 9817 0, 9818 0, 9819 0, 9820 0, 9821 0, 9822 0, 9823 0, 9824 0, 9825 0, 9826 0, 9827 2, 9828 0, 9829 0, 9830 0, 9831 0, 9832 0, 9833 0, 9834 0, 9835 3, 9836 (e >> 24) & 255, 9837 (e >> 16) & 255, 9838 (e >> 8) & 255, 9839 255 & e, 9840 i >> 24, 9841 (i >> 16) & 255, 9842 (i >> 8) & 255, 9843 255 & i, 9844 n >> 24, 9845 (n >> 16) & 255, 9846 (n >> 8) & 255, 9847 255 & n, 9848 0, 9849 1, 9850 0, 9851 0, 9852 1, 9853 0, 9854 0, 9855 0, 9856 0, 9857 0, 9858 0, 9859 0, 9860 0, 9861 0, 9862 0, 9863 0, 9864 0, 9865 1, 9866 0, 9867 0, 9868 0, 9869 0, 9870 0, 9871 0, 9872 0, 9873 0, 9874 0, 9875 0, 9876 0, 9877 0, 9878 0, 9879 0, 9880 0, 9881 1, 9882 0, 9883 0, 9884 0, 9885 0, 9886 0, 9887 0, 9888 0, 9889 0, 9890 0, 9891 0, 9892 0, 9893 0, 9894 0, 9895 0, 9896 64, 9897 0, 9898 0, 9899 0, 9900 0, 9901 0, 9902 0, 9903 0, 9904 0, 9905 0, 9906 0, 9907 0, 9908 0, 9909 0, 9910 0, 9911 0, 9912 0, 9913 0, 9914 0, 9915 0, 9916 0, 9917 0, 9918 0, 9919 0, 9920 0, 9921 0, 9922 0, 9923 0, 9924 255, 9925 255, 9926 255, 9927 255, 9928 ]); 9929 return t.box(t.types.mvhd, a); 9930 }), 9931 (t.sdtp = function (e) { 9932 var r, 9933 i, 9934 n = e.samples || [], 9935 a = new Uint8Array(4 + n.length); 9936 for (r = 0; r < n.length; r++) 9937 (i = n[r].flags), 9938 (a[r + 4] = (i.dependsOn << 4) | (i.isDependedOn << 2) | i.hasRedundancy); 9939 return t.box(t.types.sdtp, a); 9940 }), 9941 (t.stbl = function (e) { 9942 return t.box( 9943 t.types.stbl, 9944 t.stsd(e), 9945 t.box(t.types.stts, t.STTS), 9946 t.box(t.types.stsc, t.STSC), 9947 t.box(t.types.stsz, t.STSZ), 9948 t.box(t.types.stco, t.STCO) 9949 ); 9950 }), 9951 (t.avc1 = function (e) { 9952 var r, 9953 i, 9954 n, 9955 a = [], 9956 s = []; 9957 for (r = 0; r < e.sps.length; r++) 9958 (n = (i = e.sps[r]).byteLength), 9959 a.push((n >>> 8) & 255), 9960 a.push(255 & n), 9961 (a = a.concat(Array.prototype.slice.call(i))); 9962 for (r = 0; r < e.pps.length; r++) 9963 (n = (i = e.pps[r]).byteLength), 9964 s.push((n >>> 8) & 255), 9965 s.push(255 & n), 9966 (s = s.concat(Array.prototype.slice.call(i))); 9967 var o = t.box( 9968 t.types.avcC, 9969 new Uint8Array( 9970 [1, a[3], a[4], a[5], 255, 224 | e.sps.length] 9971 .concat(a) 9972 .concat([e.pps.length]) 9973 .concat(s) 9974 ) 9975 ), 9976 l = e.width, 9977 u = e.height, 9978 h = e.pixelRatio[0], 9979 d = e.pixelRatio[1]; 9980 return t.box( 9981 t.types.avc1, 9982 new Uint8Array([ 9983 0, 9984 0, 9985 0, 9986 0, 9987 0, 9988 0, 9989 0, 9990 1, 9991 0, 9992 0, 9993 0, 9994 0, 9995 0, 9996 0, 9997 0, 9998 0, 9999 0, 10000 0, 10001 0, 10002 0, 10003 0, 10004 0, 10005 0, 10006 0, 10007 (l >> 8) & 255, 10008 255 & l, 10009 (u >> 8) & 255, 10010 255 & u, 10011 0, 10012 72, 10013 0, 10014 0, 10015 0, 10016 72, 10017 0, 10018 0, 10019 0, 10020 0, 10021 0, 10022 0, 10023 0, 10024 1, 10025 18, 10026 100, 10027 97, 10028 105, 10029 108, 10030 121, 10031 109, 10032 111, 10033 116,
10034 105, 10035 111, 10036 110, 10037 47, 10038 104, 10039 108, 10040 115, 10041 46, 10042 106, 10043 115, 10044 0, 10045 0, 10046 0, 10047 0, 10048 0, 10049 0, 10050 0, 10051 0, 10052 0, 10053 0, 10054 0, 10055 0, 10056 0, 10057 0, 10058 24, 10059 17, 10060 17, 10061 ]), 10062 o, 10063 t.box( 10064 t.types.btrt, 10065 new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192]) 10066 ), 10067 t.box( 10068 t.types.pasp, 10069 new Uint8Array([ 10070 h >> 24, 10071 (h >> 16) & 255, 10072 (h >> 8) & 255, 10073 255 & h, 10074 d >> 24, 10075 (d >> 16) & 255, 10076 (d >> 8) & 255, 10077 255 & d, 10078 ]) 10079 ) 10080 ); 10081 }), 10082 (t.esds = function (t) { 10083 var e = t.config.length; 10084 return new Uint8Array( 10085 [ 10086 0, 10087 0, 10088 0, 10089 0, 10090 3, 10091 23 + e, 10092 0, 10093 1, 10094 0, 10095 4, 10096 15 + e, 10097 64, 10098 21, 10099 0, 10100 0, 10101 0, 10102 0, 10103 0, 10104 0, 10105 0, 10106 0, 10107 0, 10108 0, 10109 0, 10110 5, 10111 ] 10112 .concat([e]) 10113 .concat(t.config) 10114 .concat([6, 1, 2]) 10115 ); 10116 }), 10117 (t.audioStsd = function (t) { 10118 var e = t.samplerate; 10119 return new Uint8Array([ 10120 0, 10121 0, 10122 0, 10123 0, 10124 0, 10125 0, 10126 0, 10127 1, 10128 0, 10129 0, 10130 0, 10131 0, 10132 0, 10133 0, 10134 0, 10135 0, 10136 0, 10137 t.channelCount, 10138 0, 10139 16, 10140 0, 10141 0, 10142 0, 10143 0, 10144 (e >> 8) & 255, 10145 255 & e, 10146 0, 10147 0, 10148 ]); 10149 }), 10150 (t.mp4a = function (e) { 10151 return t.box(t.types.mp4a, t.audioStsd(e), t.box(t.types.esds, t.esds(e))); 10152 }), 10153 (t.mp3 = function (e) { 10154 return t.box(t.types['.mp3'], t.audioStsd(e)); 10155 }), 10156 (t.ac3 = function (e) { 10157 return t.box(t.types['ac-3'], t.audioStsd(e), t.box(t.types.dac3, e.config)); 10158 }), 10159 (t.stsd = function (e) { 10160 return 'audio' === e.type 10161 ? 'mp3' === e.segmentCodec && 'mp3' === e.codec 10162 ? t.box(t.types.stsd, t.STSD, t.mp3(e)) 10163 : 'ac3' === e.segmentCodec 10164 ? t.box(t.types.stsd, t.STSD, t.ac3(e)) 10165 : t.box(t.types.stsd, t.STSD, t.mp4a(e)) 10166 : t.box(t.types.stsd, t.STSD, t.avc1(e)); 10167 }), 10168 (t.tkhd = function (e) { 10169 var r = e.id, 10170 i = e.duration * e.timescale, 10171 n = e.width, 10172 a = e.height, 10173 s = Math.floor(i / (Sn + 1)), 10174 o = Math.floor(i % (Sn + 1)); 10175 return t.box( 10176 t.types.tkhd, 10177 new Uint8Array([ 10178 1, 10179 0, 10180 0, 10181 7, 10182 0, 10183 0, 10184 0, 10185 0, 10186 0, 10187 0, 10188 0, 10189 2, 10190 0, 10191 0, 10192 0, 10193 0, 10194 0, 10195 0, 10196 0, 10197 3, 10198 (r >> 24) & 255, 10199 (r >> 16) & 255, 10200 (r >> 8) & 255, 10201 255 & r, 10202 0, 10203 0, 10204 0, 10205 0, 10206 s >> 24, 10207 (s >> 16) & 255, 10208 (s >> 8) & 255, 10209 255 & s, 10210 o >> 24, 10211 (o >> 16) & 255, 10212 (o >> 8) & 255, 10213 255 & o, 10214 0, 10215 0, 10216 0, 10217 0, 10218 0, 10219 0, 10220 0, 10221 0, 10222 0, 10223 0, 10224 0, 10225 0, 10226 0, 10227 0, 10228 0, 10229 0, 10230 0, 10231 1, 10232 0, 10233 0, 10234 0, 10235 0, 10236 0, 10237 0, 10238 0, 10239 0, 10240 0, 10241 0, 10242 0, 10243 0, 10244 0, 10245 0, 10246 0, 10247 1, 10248 0, 10249 0, 10250 0, 10251 0, 10252 0, 10253 0, 10254 0, 10255 0, 10256 0, 10257 0, 10258 0, 10259 0, 10260 0, 10261 0, 10262 64, 10263 0, 10264 0, 10265 0, 10266 (n >> 8) & 255, 10267 255 & n, 10268 0, 10269 0, 10270 (a >> 8) & 255, 10271 255 & a, 10272 0, 10273 0, 10274 ]) 10275 ); 10276 }), 10277 (t.traf = function (e, r) { 10278 var i = t.sdtp(e), 10279 n = e.id, 10280 a = Math.floor(r / (Sn + 1)), 10281 s = Math.floor(r % (Sn + 1)); 10282 return t.box( 10283 t.types.traf, 10284 t.box( 10285 t.types.tfhd, 10286 new Uint8Array([0, 0, 0, 0, n >> 24, (n >> 16) & 255, (n >> 8) & 255, 255 & n]) 10287 ), 10288 t.box( 10289 t.types.tfdt, 10290 new Uint8Array([ 10291 1, 10292 0, 10293 0, 10294 0, 10295 a >> 24, 10296 (a >> 16) & 255, 10297 (a >> 8) & 255, 10298 255 & a, 10299 s >> 24, 10300 (s >> 16) & 255, 10301 (s >> 8) & 255, 10302 255 & s, 10303 ]) 10304 ), 10305 t.trun(e, i.length + 16 + 20 + 8 + 16 + 8 + 8), 10306 i 10307 ); 10308 }), 10309 (t.trak = function (e) { 10310 return ( 10311 (e.duration = e.duration || 4294967295), t.box(t.types.trak, t.tkhd(e), t.mdia(e)) 10312 ); 10313 }), 10314 (t.trex = function (e) { 10315 var r = e.id; 10316 return t.box( 10317 t.types.trex, 10318 new Uint8Array([ 10319 0, 10320 0, 10321 0, 10322 0, 10323 r >> 24, 10324 (r >> 16) & 255, 10325 (r >> 8) & 255, 10326 255 & r, 10327 0, 10328 0, 10329 0, 10330 1, 10331 0, 10332 0, 10333 0, 10334 0, 10335 0, 10336 0, 10337 0, 10338 0, 10339 0, 10340 1, 10341 0, 10342 1, 10343 ]) 10344 ); 10345 }), 10346 (t.trun = function (e, r) { 10347 var i, 10348 n, 10349 a, 10350 s, 10351 o, 10352 l, 10353 u = e.samples || [], 10354 h = u.length, 10355 d = 12 + 16 * h, 10356 c = new Uint8Array(d); 10357 for ( 10358 r += 8 + d, 10359 c.set( 10360 [ 10361 'video' === e.type ? 1 : 0, 10362 0, 10363 15, 10364 1, 10365 (h >>> 24) & 255, 10366 (h >>> 16) & 255, 10367 (h >>> 8) & 255, 10368 255 & h, 10369 (r >>> 24) & 255, 10370 (r >>> 16) & 255, 10371 (r >>> 8) & 255, 10372 255 & r, 10373 ], 10374 0 10375 ), 10376 i = 0; 10377 i < h; 10378 i++ 10379 ) 10380 (a = (n = u[i]).duration), 10381 (s = n.size), 10382 (o = n.flags), 10383 (l = n.cts), 10384 c.set( 10385 [ 10386 (a >>> 24) & 255, 10387 (a >>> 16) & 255, 10388 (a >>> 8) & 255, 10389 255 & a, 10390 (s >>> 24) & 255, 10391 (s >>> 16) & 255, 10392 (s >>> 8) & 255, 10393 255 & s, 10394 (o.isLeading << 2) | o.dependsOn, 10395 (o.isDependedOn << 6) | 10396 (o.hasRedundancy << 4) | 10397 (o.paddingValue << 1) | 10398 o.isNonSync, 10399 61440 & o.degradPrio, 10400 15 & o.degradPrio, 10401 (l >>> 24) & 255, 10402 (l >>> 16) & 255, 10403 (l >>> 8) & 255, 10404 255 & l, 10405 ], 10406 12 + 16 * i 10407 );
10408 return t.box(t.types.trun, c); 10409 }), 10410 (t.initSegment = function (e) { 10411 t.types || t.init(); 10412 var r = t.moov(e); 10413 return Wt(t.FTYP, r); 10414 }), 10415 t 10416 ); 10417 })(); 10418 (Ln.types = void 0), 10419 (Ln.HDLR_TYPES = void 0), 10420 (Ln.STTS = void 0), 10421 (Ln.STSC = void 0), 10422 (Ln.STCO = void 0), 10423 (Ln.STSZ = void 0), 10424 (Ln.VMHD = void 0), 10425 (Ln.SMHD = void 0), 10426 (Ln.STSD = void 0), 10427 (Ln.FTYP = void 0), 10428 (Ln.DINF = void 0); 10429 var An = 9e4; 10430 function Rn(t, e, r, i) { 10431 void 0 === r && (r = 1), void 0 === i && (i = !1); 10432 var n = t * e * r; 10433 return i ? Math.round(n) : n; 10434 } 10435 function bn(t, e) { 10436 return void 0 === e && (e = !1), Rn(t, 1e3, 1 / An, e); 10437 } 10438 var kn = null, 10439 Dn = null, 10440 In = (function () { 10441 function t(t, e, r, i) { 10442 if ( 10443 ((this.observer = void 0), 10444 (this.config = void 0), 10445 (this.typeSupported = void 0), 10446 (this.ISGenerated = !1), 10447 (this._initPTS = null), 10448 (this._initDTS = null), 10449 (this.nextAvcDts = null), 10450 (this.nextAudioPts = null), 10451 (this.videoSampleDuration = null), 10452 (this.isAudioContiguous = !1), 10453 (this.isVideoContiguous = !1), 10454 (this.videoTrackConfig = void 0), 10455 (this.observer = t), 10456 (this.config = e), 10457 (this.typeSupported = r), 10458 (this.ISGenerated = !1), 10459 null === kn) 10460 ) { 10461 var n = (navigator.userAgent || '').match(/Chrome\/(\d+)/i); 10462 kn = n ? parseInt(n[1]) : 0; 10463 } 10464 if (null === Dn) { 10465 var a = navigator.userAgent.match(/Safari\/(\d+)/i); 10466 Dn = a ? parseInt(a[1]) : 0; 10467 } 10468 } 10469 var e = t.prototype; 10470 return ( 10471 (e.destroy = function () { 10472 this.config = this.videoTrackConfig = this._initPTS = this._initDTS = null; 10473 }), 10474 (e.resetTimeStamp = function (t) { 10475 w.log('[mp4-remuxer]: initPTS & initDTS reset'), (this._initPTS = this._initDTS = t); 10476 }), 10477 (e.resetNextTimestamp = function () { 10478 w.log('[mp4-remuxer]: reset next timestamp'), 10479 (this.isVideoContiguous = !1), 10480 (this.isAudioContiguous = !1); 10481 }), 10482 (e.resetInitSegment = function () { 10483 w.log('[mp4-remuxer]: ISGenerated flag reset'), 10484 (this.ISGenerated = !1), 10485 (this.videoTrackConfig = void 0); 10486 }), 10487 (e.getVideoStartPts = function (t) { 10488 var e = !1, 10489 r = t[0].pts, 10490 i = t.reduce(function (t, i) { 10491 var n = i.pts, 10492 a = n - t; 10493 return a < -4294967296 && ((e = !0), (a = (n = wn(n, r)) - t)), a > 0 ? t : n; 10494 }, r); 10495 return e && w.debug('PTS rollover detected'), i; 10496 }), 10497 (e.remux = function (t, e, r, i, n, a, s, o) { 10498 var l, 10499 u, 10500 h, 10501 d, 10502 c, 10503 f, 10504 g = n, 10505 v = n, 10506 m = t.pid > -1, 10507 p = e.pid > -1, 10508 y = e.samples.length, 10509 E = t.samples.length > 0, 10510 T = (s && y > 0) || y > 1; 10511 if (((!m || E) && (!p || T)) || this.ISGenerated || s) { 10512 if (this.ISGenerated) { 10513 var S, 10514 L, 10515 A, 10516 R, 10517 b = this.videoTrackConfig; 10518 !b || 10519 (e.width === b.width && 10520 e.height === b.height && 10521 (null == (S = e.pixelRatio) ? void 0 : S[0]) === 10522 (null == (L = b.pixelRatio) ? void 0 : L[0]) && 10523 (null == (A = e.pixelRatio) ? void 0 : A[1]) === 10524 (null == (R = b.pixelRatio) ? void 0 : R[1])) || 10525 this.resetInitSegment(); 10526 } else h = this.generateIS(t, e, n, a); 10527 var k, 10528 D = this.isVideoContiguous, 10529 I = -1; 10530 if ( 10531 T && 10532 ((I = (function (t) { 10533 for (var e = 0; e < t.length; e++) if (t[e].key) return e; 10534 return -1; 10535 })(e.samples)), 10536 !D && this.config.forceKeyFrameOnDiscontinuity) 10537 ) 10538 if (((f = !0), I >
10538 0)) { 10539 w.warn( 10540 '[mp4-remuxer]: Dropped ' + 10541 I + 10542 ' out of ' + 10543 y + 10544 ' video samples due to a missing keyframe' 10545 ); 10546 var C = this.getVideoStartPts(e.samples); 10547 (e.samples = e.samples.slice(I)), 10548 (e.dropped += I), 10549 (k = v += (e.samples[0].pts - C) / e.inputTimeScale); 10550 } else 10551 -1 === I && 10552 (w.warn('[mp4-remuxer]: No keyframe found out of ' + y + ' video samples'), 10553 (f = !1)); 10554 if (this.ISGenerated) { 10555 if (E && T) { 10556 var _ = this.getVideoStartPts(e.samples), 10557 x = (wn(t.samples[0].pts, _) - _) / e.inputTimeScale; 10558 (g += Math.max(0, x)), (v += Math.max(0, -x)); 10559 } 10560 if (E) { 10561 if ( 10562 (t.samplerate || 10563 (w.warn('[mp4-remuxer]: regenerate InitSegment as audio detected'), 10564 (h = this.generateIS(t, e, n, a))), 10565 (u = this.remuxAudio( 10566 t, 10567 g, 10568 this.isAudioContiguous, 10569 a, 10570 p || T || o === Me ? v : void 0 10571 )), 10572 T) 10573 ) { 10574 var P = u ? u.endPTS - u.startPTS : 0; 10575 e.inputTimeScale || 10576 (w.warn('[mp4-remuxer]: regenerate InitSegment as video detected'), 10577 (h = this.generateIS(t, e, n, a))), 10578 (l = this.remuxVideo(e, v, D, P)); 10579 } 10580 } else T && (l = this.remuxVideo(e, v, D, 0)); 10581 l && 10582 ((l.firstKeyFrame = I), (l.independent = -1 !== I), (l.firstKeyFramePTS = k)); 10583 } 10584 } 10585 return ( 10586 this.ISGenerated && 10587 this._initPTS && 10588 this._initDTS && 10589 (r.samples.length && (c = Cn(r, n, this._initPTS, this._initDTS)), 10590 i.samples.length && (d = _n(i, n, this._initPTS))), 10591 { audio: u, video: l, initSegment: h, independent: f, text: d, id3: c } 10592 ); 10593 }), 10594 (e.generateIS = function (t, e, r, i) { 10595 var n, 10596 a, 10597 s, 10598 o = t.samples, 10599 l = e.samples, 10600 u = this.typeSupported, 10601 h = {}, 10602 d = this._initPTS, 10603 c = !d || i, 10604 f = 'audio/mp4'; 10605 if ((c && (n = a = 1 / 0), t.config && o.length)) { 10606 switch (((t.timescale = t.samplerate), t.segmentCodec)) { 10607 case 'mp3': 10608 u.mpeg ? ((f = 'audio/mpeg'), (t.codec = '')) : u.mp3 && (t.codec = 'mp3'); 10609 break; 10610 case 'ac3': 10611 t.codec = 'ac-3'; 10612 } 10613 (h.audio = { 10614 id: 'audio', 10615 container: f, 10616 codec: t.codec, 10617 initSegment: 10618 'mp3' === t.segmentCodec && u.mpeg ? new Uint8Array(0) : Ln.initSegment([t]), 10619 metadata: { channelCount: t.channelCount }, 10620 }), 10621 c && 10622 ((s = t.inputTimeScale), 10623 d && s === d.timescale ? (c = !1) : (n = a = o[0].pts - Math.round(s * r))); 10624 } 10625 if (e.sps && e.pps && l.length) { 10626 if ( 10627 ((e.timescale = e.inputTimeScale), 10628 (h.video = { 10629 id: 'main', 10630 container: 'video/mp4', 10631 codec: e.codec, 10632 initSegment: Ln.initSegment([e]), 10633 metadata: { width: e.width, height: e.height }, 10634 }), 10635 c) 10636 ) 10637 if (((s = e.inputTimeScale), d && s === d.timescale)) c = !1; 10638 else { 10639 var g = this.getVideoStartPts(l), 10640 v = Math.round(s * r); 10641 (a = Math.min(a, wn(l[0].dts, g) - v)), (n = Math.min(n, g - v)); 10642 } 10643 this.videoTrackConfig = { 10644 width: e.width, 10645 height: e.height, 10646 pixelRatio: e.pixelRatio, 10647 }; 10648 } 10649 if (Object.keys(h).length) 10650 return ( 10651 (this.ISGenerated = !0), 10652 c 10653 ? ((this._initPTS = { baseTime: n, timescale: s }), 10654 (this._initDTS = { baseTime: a, timescale: s })) 10655 : (n = s = void 0), 10656 { tracks: h, initPTS: n, timescale: s } 10657 ); 10658 }), 10659 (e.remuxVideo = function (t, e, r, i) { 10660 var n, 10661 a, 10662 s = t.inputTimeScale, 10663 l = t.samples, 10664 u = [], 10665 h = l.length, 10666 d = this._initPTS, 10667 c = this.nextAvcDts, 10668 f = 8, 10669 g = this.videoSampleDuration, 10670 v = Number.POSITIVE_INFINITY, 10671 m = Number.NEGATIVE_INFINITY, 10672 p = !1; 10673 if (!r || null === c) { 10674 var y = e * s, 10675 E = l[0].pts - wn(l[0].dts, l[0].pts); 10676 kn && null !== c && Math.abs(y - E - c) < 15e3 ? (r = !0) : (c = y - E); 10677 } 10678 for (var T = (d.baseTime * s) / d.timescale, R = 0; R < h; R++) { 10679 var b = l[R]; 10680 (b.pts = wn(b.pts - T, c)), 10681 (b.dts = wn(b.dts - T, c)), 10682 b.dts < l[R > 0 ? R - 1 : R].dts && (p = !0); 10683 } 10684 p && 10685 l.sort(function (t, e) { 10686 var r = t.dts - e.dts, 10687 i = t.pts - e.pts; 10688 return r || i; 10689 }), 10690 (n = l[0].dts); 10691 var k = (a = l[l.length - 1].dts) - n, 10692 D = k ? Math.round(k / (h - 1)) : g || t.inputTimeScale / 30; 10693 if (r) { 10694 var I = n - c, 10695 C = I > D, 10696 _ = I < -1; 10697 if ( 10698 (C || _) && 10699 (C 10700 ? w.warn( 10701 'AVC: ' + 10702 bn(I, !0) + 10703 ' ms (' + 10704 I + 10705 'dts) hole between fragments detected at ' + 10706 e.toFixed(3) 10707 ) 10708 : w.warn( 10709 'AVC: ' + 10710 bn(-I, !0) + 10711 ' ms (' + 10712 I + 10713 'dts) overlapping between fragments detected at ' + 10714 e.toFixed(3) 10715 ), 10716 !_ || c >= l[0].pts || kn) 10717 ) { 10718 n = c; 10719 var x = l[0].pts - I; 10720 if (C) (l[0].dts = n), (l[0].pts = x); 10721 else 10722 for (var P = 0; P < l.length && !(l[P].dts > x); P++) 10723 (l[P].dts -= I), (l[P].pts -= I); 10724 w.log( 10725 'Video: Initial PTS/DTS adjusted: ' + 10726 bn(x, !0) + 10727 '/' + 10728 bn(n, !0) + 10729 ', delta: ' + 10730 bn(I, !0) + 10731 ' ms' 10732 ); 10733 } 10734 } 10735 for (var F = 0, M = 0, O = (n = Math.max(0, n)), N = 0; N < h; N++) { 10736 for (var U = l[N], B = U.units, G = B.length, K = 0, H = 0; H < G; H++) 10737 K += B[H].data.length; 10738 (M += K), 10739 (F += G), 10740 (U.length = K), 10741 U.dts < O ? ((U.dts = O), (O += (D / 4) | 0 || 1)) : (O = U.dts), 10742 (v = Math.min(U.pts, v)), 10743 (m = Math.max(U.pts, m)); 10744 } 10745 a = l[h - 1].dts; 10746 var V, 10747 Y = M + 4 * F + 8; 10748 try { 10749 V = new Uint8Array(Y); 10750 } catch (t) { 10751 return void this.observer.emit(S.ERROR, S.ERROR, { 10752 type: L.MUX_ERROR,
10753 details: A.REMUX_ALLOC_ERROR, 10754 fatal: !1, 10755 error: t, 10756 bytes: Y, 10757 reason: 'fail allocating video mdat ' + Y, 10758 }); 10759 } 10760 var W = new DataView(V.buffer); 10761 W.setUint32(0, Y), V.set(Ln.types.mdat, 4); 10762 for ( 10763 var j = !1, 10764 q = Number.POSITIVE_INFINITY, 10765 X = Number.POSITIVE_INFINITY, 10766 z = Number.NEGATIVE_INFINITY, 10767 Q = Number.NEGATIVE_INFINITY, 10768 J = 0; 10769 J < h; 10770 J++ 10771 ) { 10772 for (var $ = l[J], Z = $.units, tt = 0, et = 0, rt = Z.length; et < rt; et++) { 10773 var it = Z[et], 10774 nt = it.data, 10775 at = it.data.byteLength; 10776 W.setUint32(f, at), (f += 4), V.set(nt, f), (f += at), (tt += 4 + at); 10777 } 10778 var st = void 0; 10779 if (J < h - 1) (g = l[J + 1].dts - $.dts), (st = l[J + 1].pts - $.pts); 10780 else { 10781 var ot = this.config, 10782 lt = J > 0 ? $.dts - l[J - 1].dts : D; 10783 if ( 10784 ((st = J > 0 ? $.pts - l[J - 1].pts : D), 10785 ot.stretchShortVideoTrack && null !== this.nextAudioPts) 10786 ) { 10787 var ut = Math.floor(ot.maxBufferHole * s), 10788 ht = (i ? v + i * s : this.nextAudioPts) - $.pts; 10789 ht > ut 10790 ? ((g = ht - lt) < 0 ? (g = lt) : (j = !0), 10791 w.log( 10792 '[mp4-remuxer]: It is approximately ' + 10793 ht / 90 + 10794 ' ms to the next segment; using duration ' + 10795 g / 90 + 10796 ' ms for the last video frame.' 10797 )) 10798 : (g = lt); 10799 } else g = lt; 10800 } 10801 var dt = Math.round($.pts - $.dts); 10802 (q = Math.min(q, g)), 10803 (z = Math.max(z, g)), 10804 (X = Math.min(X, st)), 10805 (Q = Math.max(Q, st)), 10806 u.push(new Pn($.key, g, tt, dt)); 10807 } 10808 if (u.length) 10809 if (kn) { 10810 if (kn < 70) { 10811 var ct = u[0].flags; 10812 (ct.dependsOn = 2), (ct.isNonSync = 0); 10813 } 10814 } else if (Dn && Q - X < z - q && D / z < 0.025 && 0 === u[0].cts) { 10815 w.warn( 10816 'Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration.' 10817 ); 10818 for (var ft = n, gt = 0, vt = u.length; gt < vt; gt++) { 10819 var mt = ft + u[gt].duration, 10820 pt = ft + u[gt].cts; 10821 if (gt < vt - 1) { 10822 var yt = mt + u[gt + 1].cts; 10823 u[gt].duration = yt - pt; 10824 } else u[gt].duration = gt ? u[gt - 1].duration : D; 10825 (u[gt].cts = 0), (ft = mt); 10826 } 10827 } 10828 (g = j || !g ? D : g), 10829 (this.nextAvcDts = c = a + g), 10830 (this.videoSampleDuration = g), 10831 (this.isVideoContiguous = !0); 10832 var Et = { 10833 data1: Ln.moof(t.sequenceNumber++, n, o({}, t, { samples: u })), 10834 data2: V, 10835 startPTS: v / s, 10836 endPTS: (m + g) / s, 10837 startDTS: n / s, 10838 endDTS: c / s, 10839 type: 'video', 10840 hasAudio: !1, 10841 hasVideo: !0, 10842 nb: u.length, 10843 dropped: t.dropped, 10844 }; 10845 return (t.samples = []), (t.dropped = 0), Et; 10846 }), 10847 (e.getSamplesPerFrame = function (t) { 10848 switch (t.segmentCodec) { 10849 case 'mp3': 10850 return 1152; 10851 case 'ac3': 10852 return 1536; 10853 default: 10854 return 1024; 10855 } 10856 }), 10857 (e.remuxAudio = function (t, e, r, i, n) { 10858 var a = t.inputTimeScale, 10859 s = a / (t.samplerate ? t.samplerate : a),
10860 l = this.getSamplesPerFrame(t), 10861 u = l * s, 10862 h = this._initPTS, 10863 d = 'mp3' === t.segmentCodec && this.typeSupported.mpeg, 10864 c = [], 10865 f = void 0 !== n, 10866 g = t.samples, 10867 v = d ? 0 : 8, 10868 m = this.nextAudioPts || -1, 10869 p = e * a, 10870 y = (h.baseTime * a) / h.timescale; 10871 if ( 10872 ((this.isAudioContiguous = r = 10873 r || 10874 (g.length && 10875 m > 0 && 10876 ((i && Math.abs(p - m) < 9e3) || Math.abs(wn(g[0].pts - y, p) - m) < 20 * u))), 10877 g.forEach(function (t) { 10878 t.pts = wn(t.pts - y, p); 10879 }), 10880 !r || m < 0) 10881 ) { 10882 if ( 10883 ((g = g.filter(function (t) { 10884 return t.pts >= 0; 10885 })), 10886 !g.length) 10887 ) 10888 return; 10889 m = 0 === n ? 0 : i && !f ? Math.max(0, p) : g[0].pts; 10890 } 10891 if ('aac' === t.segmentCodec) 10892 for (var E = this.config.maxAudioFramesDrift, T = 0, R = m; T < g.length; T++) { 10893 var b = g[T], 10894 k = b.pts, 10895 D = k - R, 10896 I = Math.abs((1e3 * D) / a); 10897 if (D <= -E * u && f) 10898 0 === T && 10899 (w.warn( 10900 'Audio frame @ ' + 10901 (k / a).toFixed(3) + 10902 's overlaps nextAudioPts by ' + 10903 Math.round((1e3 * D) / a) + 10904 ' ms.' 10905 ), 10906 (this.nextAudioPts = m = R = k)); 10907 else if (D >= E * u && I < 1e4 && f) { 10908 var C = Math.round(D / u); 10909 (R = k - C * u) < 0 && (C--, (R += u)), 10910 0 === T && (this.nextAudioPts = m = R), 10911 w.warn( 10912 '[mp4-remuxer]: Injecting ' + 10913 C + 10914 ' audio frame @ ' + 10915 (R / a).toFixed(3) + 10916 's due to ' + 10917 Math.round((1e3 * D) / a) + 10918 ' ms gap.' 10919 ); 10920 for (var _ = 0; _ < C; _++) { 10921 var x = Math.max(R, 0), 10922 P = Tn.getSilentFrame(t.manifestCodec || t.codec, t.channelCount); 10923 P || 10924 (w.log( 10925 '[mp4-remuxer]: Unable to get silent frame for given audio codec; duplicating last frame instead.' 10926 ), 10927 (P = b.unit.subarray())), 10928 g.splice(T, 0, { unit: P, pts: x }), 10929 (R += u), 10930 T++; 10931 } 10932 } 10933 (b.pts = R), (R += u); 10934 } 10935 for (var F, M = null, O = null, N = 0, U = g.length; U--; ) N += g[U].unit.byteLength; 10936 for (var B = 0, G = g.length; B < G; B++) { 10937 var K = g[B], 10938 H = K.unit, 10939 V = K.pts; 10940 if (null !== O) c[B - 1].duration = Math.round((V - O) / s); 10941 else { 10942 if ((r && 'aac' === t.segmentCodec && (V = m), (M = V), !(N > 0))) return; 10943 N += v; 10944 try { 10945 F = new Uint8Array(N); 10946 } catch (t) { 10947 return void this.observer.emit(S.ERROR, S.ERROR, { 10948 type: L.MUX_ERROR, 10949 details: A.REMUX_ALLOC_ERROR, 10950 fatal: !1, 10951 error: t, 10952 bytes: N, 10953 reason: 'fail allocating audio mdat ' + N, 10954 }); 10955 } 10956 d || (new DataView(F.buffer).setUint32(0, N), F.set(Ln.types.mdat, 4)); 10957 } 10958 F.set(H, v); 10959 var Y = H.byteLength; 10960 (v += Y), c.push(new Pn(!0, l, Y, 0)), (O = V); 10961 } 10962 var W = c.length; 10963 if (W) { 10964 var j = c[c.length - 1]; 10965 this.nextAudioPts = m = O + s * j.duration; 10966 var q = d 10967 ? new Uint8Array(0) 10968 : Ln.moof(t.sequenceNumber++, M / s, o({}, t, { samples: c })); 10969 t.samples = []; 10970 var X = M / a, 10971 z = m / a, 10972 Q = { 10973 data1: q, 10974 data2: F, 10975 startPTS: X, 10976 endPTS: z, 10977 startDTS: X, 10978 endDTS: z, 10979 type: 'audio', 10980 hasAudio: !0, 10981 hasVideo: !1, 10982 nb: W, 10983 }; 10984 return (this.isAudioContiguous = !0), Q; 10985 } 10986 }), 10987 (e.remuxEmptyAudio = function (t, e, r, i) { 10988 var n = t.inputTimeScale, 10989 a = n / (t.samplerate ? t.samplerate : n), 10990 s = this.nextAudioPts, 10991 o = this._initDTS, 10992 l = (9e4 * o.baseTime) / o.timescale, 10993 u = (null !== s ? s : i.startDTS * n) + l, 10994 h = i.endDTS * n + l, 10995 d = 1024 * a, 10996 c = Math.ceil((h - u) / d), 10997 f = Tn.getSilentFrame(t.manifestCodec || t.codec, t.channelCount); 10998 if ((w.warn('[mp4-remuxer]: remux empty Audio'), f)) { 10999 for (var g = [], v = 0; v < c; v++) { 11000 var m = u + v * d; 11001 g.push({ unit: f, pts: m, dts: m }); 11002 } 11003 return (t.samples = g), this.remuxAudio(t, e, r, !1); 11004 } 11005 w.trace( 11006 '[mp4-remuxer]: Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec' 11007 ); 11008 }), 11009 t 11010 ); 11011 })(); 11012 function wn(t, e) { 11013 var r; 11014 if (null === e) return t; 11015 for (r = e < t ? -8589934592 : 8589934592; Math.abs(t - e) > 4294967296; ) t += r; 11016 return t; 11017 } 11018 function Cn(t, e, r, i) { 11019 var n = t.samples.length; 11020 if (n) { 11021 for (var a = t.inputTimeScale, s = 0; s < n; s++) { 11022 var o = t.samples[s]; 11023 (o.pts = wn(o.pts - (r.baseTime * a) / r.timescale, e * a) / a), 11024 (o.dts = wn(o.dts - (i.baseTime * a) / i.timescale, e * a) / a); 11025 } 11026 var l = t.samples; 11027 return (t.samples = []), { samples: l }; 11028 } 11029 } 11030 function _n(t, e, r) { 11031 var i = t.samples.length; 11032 if (i) { 11033 for (var n = t.inputTimeScale, a = 0; a < i; a++) { 11034 var s = t.samples[a]; 11035 s.pts = wn(s.pts - (r.baseTime * n) / r.timescale, e * n) / n; 11036 } 11037 t.samples.sort(function (t, e) { 11038 return t.pts - e.pts; 11039 }); 11040 var o = t.samples; 11041 return (t.samples = []), { samples: o }; 11042 } 11043 } 11044 var xn, 11045 Pn = function (t, e, r, i) { 11046 (this.size = void 0), 11047 (this.duration = void 0), 11048 (this.cts = void 0), 11049 (this.flags = void 0), 11050 (this.duration = e), 11051 (this.size = r), 11052 (this.cts = i), 11053 (this.flags = { 11054 isLeading: 0, 11055 isDependedOn: 0, 11056 hasRedundancy: 0, 11057 degradPrio: 0, 11058 dependsOn: t ? 2 : 1, 11059 isNonSync: t ? 0 : 1, 11060 }); 11061 },
11062 Fn = (function () { 11063 function t() { 11064 (this.emitInitSegment = !1), 11065 (this.audioCodec = void 0), 11066 (this.videoCodec = void 0), 11067 (this.initData = void 0), 11068 (this.initPTS = null), 11069 (this.initTracks = void 0), 11070 (this.lastEndTime = null); 11071 } 11072 var e = t.prototype; 11073 return ( 11074 (e.destroy = function () {}), 11075 (e.resetTimeStamp = function (t) { 11076 (this.initPTS = t), (this.lastEndTime = null); 11077 }), 11078 (e.resetNextTimestamp = function () { 11079 this.lastEndTime = null; 11080 }), 11081 (e.resetInitSegment = function (t, e, r, i) { 11082 (this.audioCodec = e), 11083 (this.videoCodec = r), 11084 this.generateInitSegment( 11085 (function (t, e) { 11086 if (!t || !e) return t; 11087 var r = e.keyId; 11088 return ( 11089 r && 11090 e.isCommonEncryption && 11091 Ot(t, ['moov', 'trak']).forEach(function (t) { 11092 var e = Ot(t, ['mdia', 'minf', 'stbl', 'stsd'])[0].subarray(8), 11093 i = Ot(e, ['enca']), 11094 n = i.length > 0; 11095 n || (i = Ot(e, ['encv'])), 11096 i.forEach(function (t) { 11097 Ot(n ? t.subarray(28) : t.subarray(78), ['sinf']).forEach(function ( 11098 t 11099 ) { 11100 var e = Vt(t); 11101 if (e) { 11102 var i = e.subarray(8, 24); 11103 i.some(function (t) { 11104 return 0 !== t; 11105 }) || 11106 (w.log( 11107 "[eme] Patching keyId in 'enc" + 11108 (n ? 'a' : 'v') + 11109 ">sinf>>tenc' box: " + 11110 kt.hexDump(i) + 11111 ' -> ' + 11112 kt.hexDump(r) 11113 ), 11114 e.set(r, 8)); 11115 } 11116 }); 11117 }); 11118 }), 11119 t 11120 ); 11121 })(t, i) 11122 ), 11123 (this.emitInitSegment = !0); 11124 }), 11125 (e.generateInitSegment = function (t) { 11126 var e = this.audioCodec, 11127 r = this.videoCodec; 11128 if (null == t || !t.byteLength) 11129 return (this.initTracks = void 0), void (this.initData = void 0); 11130 var i = (this.initData = Ut(t)); 11131 i.audio && (e = Mn(i.audio, O)), i.video && (r = Mn(i.video, N)); 11132 var n = {}; 11133 i.audio && i.video 11134 ? (n.audiovideo = { 11135 container: 'video/mp4', 11136 codec: e + ',' + r, 11137 initSegment: t, 11138 id: 'main', 11139 }) 11140 : i.audio 11141 ? (n.audio = { container: 'audio/mp4', codec: e, initSegment: t, id: 'audio' }) 11142 : i.video 11143 ? (n.video = { container: 'video/mp4', codec: r, initSegment: t, id: 'main' }) 11144 : w.warn( 11145 '[passthrough-remuxer.ts]: initSegment does not contain moov or trak boxes.' 11146 ), 11147 (this.initTracks = n); 11148 }), 11149 (e.remux = function (t, e, r, i, n, a) { 11150 var s, 11151 o, 11152 l = this.initPTS, 11153 u = this.lastEndTime, 11154 h = { audio: void 0, video: void 0, text: i, id3: r, initSegment: void 0 }; 11155 y(u) || (u = this.lastEndTime = n || 0); 11156 var d = e.samples; 11157 if (null == d || !d.length) return h; 11158 var c = { initPTS: void 0, timescale: 1 }, 11159 f = this.initData; 11160 if ( 11161 ((null != (s = f) && s.length) || 11162 (this.generateInitSegment(d), (f = this.initData)), 11163 null == (o = f) || !o.length) 11164 ) 11165 return w.warn('[passthrough-remuxer.ts]: Failed to generate initSegment.'), h; 11166 this.emitInitSegment && ((c.tracks = this.initTracks), (this.emitInitSegment = !1)); 11167 var g = (function (t, e) { 11168 for ( 11169 var r = 0, i = 0, n = 0, a = Ot(t, ['moof', 'traf']), s = 0; 11170 s < a.length; 11171 s++ 11172 ) { 11173 var o = a[s], 11174 l = Ot(o, ['tfhd'])[0], 11175 u = e[xt(l, 4)]; 11176 if (u) { 11177 var h = u.default, 11178 d = xt(l, 0) | (null == h ? void 0 : h.flags), 11179 c = null == h ? void 0 : h.duration; 11180 8 & d && (c = xt(l, 2 & d ? 12 : 8)); 11181 for ( 11182 var f = u.timescale || 9e4, g = Ot(o, ['trun']), v = 0; 11183 v < g.length; 11184 v++ 11185 ) 11186 !(r = Yt(g[v])) && c && (r = c * xt(g[v], 4)), 11187 u.type === N ? (i += r / f) : u.type === O && (n += r / f); 11188 } 11189 } 11190 if (0 === i && 0 === n) { 11191 for ( 11192 var m = 1 / 0, p = 0, E = 0, T = Ot(t, ['sidx']), S = 0; 11193 S < T.length; 11194 S++ 11195 ) { 11196 var L = Nt(T[S]); 11197 if (null != L && L.references) { 11198 m = Math.min(m, L.earliestPresentationTime / L.timescale); 11199 var A = L.references.reduce(function (t, e) { 11200 return t + e.info.duration || 0; 11201 }, 0); 11202 E = (p = Math.max(p, A + L.earliestPresentationTime / L.timescale)) - m; 11203 } 11204 } 11205 if (E && y(E)) return E; 11206 } 11207 return i || n; 11208 })(d, f), 11209 v = (function (t, e) { 11210 return Ot(e, ['moof', 'traf']).reduce(function (e, r) { 11211 var i = Ot(r, ['tfdt'])[0], 11212 n = i[0], 11213 a = Ot(r, ['tfhd']).reduce(function (e, r) { 11214 var a = xt(r, 4), 11215 s = t[a]; 11216 if (s) { 11217 var o = xt(i, 4); 11218 if (1 === n) { 11219 if (o === Dt) 11220 return ( 11221 w.warn( 11222 '[mp4-demuxer]: Ignoring assumed invali
11222d signed 64-bit track fragment decode time' 11223 ), 11224 e 11225 ); 11226 (o *= Dt + 1), (o += xt(i, 8)); 11227 } 11228 var l = o / (s.timescale || 9e4); 11229 if (y(l) && (null === e || l < e)) return l; 11230 } 11231 return e; 11232 }, null); 11233 return null !== a && y(a) && (null === e || a < e) ? a : e; 11234 }, null); 11235 })(f, d), 11236 m = null === v ? n : v; 11237 ((function (t, e, r, i) { 11238 if (null === t) return !0; 11239 var n = Math.max(i, 1), 11240 a = e - t.baseTime / t.timescale; 11241 return Math.abs(a - r) > n; 11242 })(l, m, n, g) || 11243 (c.timescale !== l.timescale && a)) && 11244 ((c.initPTS = m - n), 11245 l && 11246 1 === l.timescale && 11247 w.warn('Adjusting initPTS by ' + (c.initPTS - l.baseTime)), 11248 (this.initPTS = l = { baseTime: c.initPTS, timescale: 1 })); 11249 var p = t ? m - l.baseTime / l.timescale : u, 11250 E = p + g; 11251 !(function (t, e, r) { 11252 Ot(e, ['moof', 'traf']).forEach(function (e) {
11253 Ot(e, ['tfhd']).forEach(function (i) { 11254 var n = xt(i, 4), 11255 a = t[n]; 11256 if (a) { 11257 var s = a.timescale || 9e4; 11258 Ot(e, ['tfdt']).forEach(function (t) { 11259 var e = t[0], 11260 i = r * s; 11261 if (i) { 11262 var n = xt(t, 4); 11263 if (0 === e) (n -= i), Mt(t, 4, (n = Math.max(n, 0))); 11264 else { 11265 (n *= Math.pow(2, 32)), (n += xt(t, 8)), (n -= i), (n = Math.max(n, 0)); 11266 var a = Math.floor(n / (Dt + 1)), 11267 o = Math.floor(n % (Dt + 1)); 11268 Mt(t, 4, a), Mt(t, 8, o); 11269 } 11270 } 11271 }); 11272 } 11273 }); 11274 }); 11275 })(f, d, l.baseTime / l.timescale), 11276 g > 0 11277 ? (this.lastEndTime = E) 11278 : (w.warn('Duration parsed from mp4 should be greater than zero'), 11279 this.resetNextTimestamp()); 11280 var T = !!f.audio, 11281 S = !!f.video, 11282 L = ''; 11283 T && (L += 'audio'), S && (L += 'video'); 11284 var A = { 11285 data1: d, 11286 startPTS: p, 11287 startDTS: p, 11288 endPTS: E, 11289 endDTS: E, 11290 type: L, 11291 hasAudio: T, 11292 hasVideo: S, 11293 nb: 1, 11294 dropped: 0, 11295 }; 11296 return ( 11297 (h.audio = 'audio' === A.type ? A : void 0), 11298 (h.video = 'audio' !== A.type ? A : void 0), 11299 (h.initSegment = c), 11300 (h.id3 = Cn(r, n, l, l)), 11301 i.samples.length && (h.text = _n(i, n, l)), 11302 h 11303 ); 11304 }), 11305 t 11306 ); 11307 })(); 11308 function Mn(t, e) { 11309 var r = null == t ? void 0 : t.codec; 11310 if (r && r.length > 4) return r; 11311 if (e === O) { 11312 if ('ec-3' === r || 'ac-3' === r || 'alac' === r) return r; 11313 if ('fLaC' === r || 'Opus' === r) return ve(r, !1); 11314 var i = 'mp4a.40.5'; 11315 return ( 11316 w.info( 11317 'Parsed audio codec "' + r + '" or audio object type not handled. Using "' + i + '"' 11318 ), 11319 i 11320 ); 11321 } 11322 return ( 11323 w.warn('Unhandled video codec "' + r + '"'), 11324 'hvc1' === r || 'hev1' === r 11325 ? 'hvc1.1.6.L120.90' 11326 : 'av01' === r 11327 ? 'av01.0.04M.08' 11328 : 'avc1.42e01e' 11329 ); 11330 } 11331 try { 11332 xn = self.performance.now.bind(self.performance); 11333 } catch (t) { 11334 w.debug('Unable to use Performance API on this environment'), 11335 (xn = null == j ? void 0 : j.Date.now); 11336 } 11337 var On = [ 11338 { demux: rn, remux: Fn }, 11339 { demux: cn, remux: In }, 11340 { demux: tn, remux: In }, 11341 { demux: En, remux: In }, 11342 ]; 11343 On.splice(2, 0, { demux: an, remux: In }); 11344 var Nn = (function () { 11345 function t(t, e, r, i, n) { 11346 (this.async = !1), 11347 (this.observer = void 0), 11348 (this.typeSupported = void 0), 11349 (this.config = void 0), 11350 (this.vendor = void 0), 11351 (this.id = void 0), 11352 (this.demuxer = void 0), 11353 (this.remuxer = void 0), 11354 (this.decrypter = void 0), 11355 (this.probe = void 0), 11356 (this.decryptionPromise = null), 11357 (this.transmuxConfig = void 0), 11358 (this.currentTransmuxState = void 0), 11359 (this.observer = t), 11360 (this.typeSupported = e), 11361 (this.config = r), 11362 (this.vendor = i), 11363 (this.id = n); 11364 } 11365 var e = t.prototype; 11366 return ( 11367 (e.configure = function (t) { 11368 (this.transmuxConfig = t), this.decrypter && this.decrypter.reset(); 11369 }), 11370 (e.push = function (t, e, r, i) { 11371 var n = this, 11372 a = r.transmuxing; 11373 a.executeStart = xn(); 11374 var s = new Uint8Array(t), 11375 o = this.currentTransmuxState, 11376 l = this.transmuxConfig; 11377 i && (this.currentTransmuxState = i); 11378 var u = i || o, 11379 h = u.contiguous, 11380 d = u.discontinuity, 11381 c = u.trackSwitch,
11382 f = u.accurateTimeOffset, 11383 g = u.timeOffset, 11384 v = u.initSegmentChange, 11385 m = l.audioCodec, 11386 p = l.videoCodec, 11387 y = l.defaultInitPts, 11388 E = l.duration, 11389 T = l.initSegmentData, 11390 R = (function (t, e) { 11391 var r = null; 11392 return ( 11393 t.byteLength > 0 && 11394 null != (null == e ? void 0 : e.key) && 11395 null !== e.iv && 11396 null != e.method && 11397 (r = e), 11398 r 11399 ); 11400 })(s, e); 11401 if (R && 'AES-128' === R.method) { 11402 var b = this.getDecrypter(); 11403 if (!b.isSync()) 11404 return ( 11405 (this.decryptionPromise = b 11406 .webCryptoDecrypt(s, R.key.buffer, R.iv.buffer) 11407 .then(function (t) { 11408 var e = n.push(t, null, r); 11409 return (n.decryptionPromise = null), e; 11410 })), 11411 this.decryptionPromise 11412 ); 11413 var k = b.softwareDecrypt(s, R.key.buffer, R.iv.buffer); 11414 if ((r.part > -1 && (k = b.flush()), !k)) return (a.executeEnd = xn()), Un(r); 11415 s = new Uint8Array(k); 11416 } 11417 var D = this.needsProbing(d, c); 11418 if (D) { 11419 var I = this.configureTransmuxer(s); 11420 if (I) 11421 return ( 11422 w.warn('[transmuxer] ' + I.message), 11423 this.observer.emit(S.ERROR, S.ERROR, { 11424 type: L.MEDIA_ERROR, 11425 details: A.FRAG_PARSING_ERROR, 11426 fatal: !1, 11427 error: I, 11428 reason: I.message, 11429 }), 11430 (a.executeEnd = xn()), 11431 Un(r) 11432 ); 11433 } 11434 (d || c || v || D) && this.resetInitSegment(T, m, p, E, e), 11435 (d || v || D) && this.resetInitialTimestamp(y), 11436 h || this.resetContiguity(); 11437 var C = this.transmux(s, R, g, f, r), 11438 _ = this.currentTransmuxState; 11439 return ( 11440 (_.contiguous = !0), 11441 (_.discontinuity = !1), 11442 (_.trackSwitch = !1), 11443 (a.executeEnd = xn()), 11444 C 11445 ); 11446 }), 11447 (e.flush = function (t) { 11448 var e = this, 11449 r = t.transmuxing; 11450 r.executeStart = xn(); 11451 var i = this.decrypter, 11452 n = this.currentTransmuxState, 11453 a = this.decryptionPromise; 11454 if (a) 11455 return a.then(function () { 11456 return e.flush(t); 11457 }); 11458 var s = [], 11459 o = n.timeOffset; 11460 if (i) { 11461 var l = i.flush(); 11462 l && s.push(this.push(l, null, t)); 11463 } 11464 var u = this.demuxer, 11465 h = this.remuxer; 11466 if (!u || !h) return (r.executeEnd = xn()), [Un(t)]; 11467 var d = u.flush(o); 11468 return Bn(d) 11469 ? d.then(function (r) { 11470 return e.flushRemux(s, r, t), s; 11471 }) 11472 : (this.flushRemux(s, d, t), s); 11473 }), 11474 (e.flushRemux = function (t, e, r) { 11475 var i = e.audioTrack, 11476 n = e.videoTrack, 11477 a = e.id3Track, 11478 s = e.textTrack, 11479 o = this.currentTransmuxState, 11480 l = o.accurateTimeOffset, 11481 u = o.timeOffset; 11482 w.log( 11483 '[transmuxer.ts]: Flushed fragment ' + 11484 r.sn + 11485 (r.part > -1 ? ' p: ' + r.part : '') + 11486 ' of level ' + 11487 r.level 11488 ); 11489 var h = this.remuxer.remux(i, n, a, s, u, l, !0, this.id); 11490 t.push({ remuxResult: h, chunkMeta: r }), (r.transmuxing.executeEnd = xn()); 11491 }), 11492 (e.resetInitialTimestamp = function (t) { 11493 var e = this.demuxer, 11494 r = this.remuxer; 11495 e && r && (e.resetTimeStamp(t), r.resetTimeStamp(t)); 11496 }), 11497 (e.resetContiguity = function () { 11498 var t = this.demuxer, 11499 e = this.remuxer; 11500 t && e && (t.resetContiguity(), e.resetNextTimestamp()); 11501 }), 11502 (e.resetInitSegment = function (t, e, r, i, n) { 11503 var a = this.demuxer, 11504 s = this.remuxer; 11505 a && s && (a.resetInitSegment(t, e, r, i), s.resetInitSegment(t, e, r, n)); 11506 }), 11507 (e.destroy = function () { 11508 this.demuxer && (this.demuxer.destroy(), (this.demuxer = void 0)), 11509 this.remuxer && (this.remuxer.destroy(), (this.remuxer = void 0)); 11510 }), 11511 (e.transmux = function (t, e, r, i, n) { 11512 return e && 'SAMPLE-AES' === e.method 11513 ? this.transmuxSampleAes(t, e, r, i, n) 11514 : this.transmuxUnencrypted(t, r, i, n); 11515 }), 11516 (e.transmuxUnencrypted = function (t, e, r, i) { 11517 var n = this.demuxer.demux(t, e, !1, !this.config.progressive), 11518 a = n.audioTrack, 11519 s = n.videoTrack, 11520 o = n.id3Track, 11521 l = n.textTrack; 11522 return { 11523 remuxResult: this.remuxer.remux(a, s, o, l, e, r, !1, this.id), 11524 chunkMeta: i, 11525 }; 11526 }), 11527 (e.transmuxSampleAes = function (t, e, r, i, n) { 11528 var a = this; 11529 return this.demuxer.demuxSampleAes(t, e, r).then(function (t) { 11530 return { 11531 remuxResult: a.remuxer.remux( 11532 t.audioTrack, 11533 t.videoTrack, 11534 t.id3Track, 11535 t.textTrack, 11536 r, 11537 i, 11538 !1, 11539 a.id 11540 ), 11541 chunkMeta: n, 11542 }; 11543 }); 11544 }), 11545 (e.configureTransmuxer = function (t) { 11546 for ( 11547 var e, 11548 r = this.config, 11549 i = this.observer,
11550 n = this.typeSupported, 11551 a = this.vendor, 11552 s = 0, 11553 o = On.length; 11554 s < o; 11555 s++ 11556 ) { 11557 var l; 11558 if (null != (l = On[s].demux) && l.probe(t)) { 11559 e = On[s]; 11560 break; 11561 } 11562 } 11563 if (!e) return new Error('Failed to find demuxer by probing fragment data'); 11564 var u = this.demuxer, 11565 h = this.remuxer, 11566 d = e.remux, 11567 c = e.demux; 11568 (h && h instanceof d) || (this.remuxer = new d(i, r, n, a)), 11569 (u && u instanceof c) || ((this.demuxer = new c(i, r, n)), (this.probe = c.probe)); 11570 }), 11571 (e.needsProbing = function (t, e) { 11572 return !this.demuxer || !this.remuxer || t || e; 11573 }), 11574 (e.getDecrypter = function () { 11575 var t = this.decrypter; 11576 return t || (t = this.decrypter = new pi(this.config)), t; 11577 }), 11578 t 11579 ); 11580 })(), 11581 Un = function (t) { 11582 return { remuxResult: {}, chunkMeta: t }; 11583 }; 11584 function Bn(t) { 11585 return 'then' in t && t.then instanceof Function; 11586 } 11587 var Gn = function (t, e, r, i, n) { 11588 (this.audioCodec = void 0), 11589 (this.videoCodec = void 0), 11590 (this.initSegmentData = void 0), 11591 (this.duration = void 0), 11592 (this.defaultInitPts = void 0), 11593 (this.audioCodec = t), 11594 (this.videoCodec = e), 11595 (this.initSegmentData = r), 11596 (this.duration = i), 11597 (this.defaultInitPts = n || null); 11598 }, 11599 Kn = function (t, e, r, i, n, a) { 11600 (this.discontinuity = void 0), 11601 (this.contiguous = void 0), 11602 (this.accurateTimeOffset = void 0), 11603 (this.trackSwitch = void 0), 11604 (this.timeOffset = void 0), 11605 (this.initSegmentChange = void 0), 11606 (this.discontinuity = t), 11607 (this.contiguous = e), 11608 (this.accurateTimeOffset = r), 11609 (this.trackSwitch = i), 11610 (this.timeOffset = n), 11611 (this.initSegmentChange = a); 11612 }, 11613 Hn = { exports: {} }; 11614 !(function (t) { 11615 var e = Object.prototype.hasOwnProperty, 11616 r = '~'; 11617 function i() {} 11618 function n(t, e, r) { 11619 (this.fn = t), (this.context = e), (this.once = r || !1); 11620 } 11621 function a(t, e, i, a, s) { 11622 if ('function' != typeof i) throw new TypeError('The listener must be a function'); 11623 var o = new n(i, a || t, s), 11624 l = r ? r + e : e; 11625 return ( 11626 t._events[l] 11627 ? t._events[l].fn 11628 ? (t._events[l] = [t._events[l], o]) 11629 : t._events[l].push(o) 11630 : ((t._events[l] = o), t._eventsCount++), 11631 t 11632 ); 11633 } 11634 function s(t, e) { 11635 0 == --t._eventsCount ? (t._events = new i()) : delete t._events[e]; 11636 } 11637 function o() { 11638 (this._events = new i()), (this._eventsCount = 0); 11639 } 11640 Object.create && ((i.prototype = Object.create(null)), new i().__proto__ || (r = !1)), 11641 (o.prototype.eventNames = function () { 11642 var t, 11643 i, 11644 n = []; 11645 if (0 === this._eventsCount) return n; 11646 for (i in (t = this._events)) e.call(t, i) && n.push(r ? i.slice(1) : i); 11647 return Object.getOwnPropertySymbols ? n.concat(Object.getOwnPropertySymbols(t)) : n; 11648 }), 11649 (o.prototype.listeners = function (t) { 11650 var e = r ? r + t : t, 11651 i = this._events[e]; 11652 if (!i) return []; 11653 if (i.fn) return [i.fn]; 11654 for (var n = 0, a = i.length, s = new Array(a); n < a; n++) s[n] = i[n].fn; 11655 return s; 11656 }), 11657 (o.prototype.listenerCount = function (t) { 11658 var e = r ? r + t : t, 11659 i = this._events[e]; 11660 return i ? (i.fn ? 1 : i.length) : 0; 11661 }), 11662 (o.prototype.emit = function (t, e, i, n, a, s) { 11663 var o = r ? r + t : t; 11664 if (!this._events[o]) return !1; 11665 var l, 11666 u, 11667 h = this._events[o], 11668 d = arguments.length; 11669 if (h.fn) { 11670 switch ((h.once && this.removeListener(t, h.fn, void 0, !0), d)) { 11671 case 1: 11672 return h.fn.call(h.context), !0; 11673 case 2: 11674 return h.fn.call(h.context, e), !0; 11675 case 3: 11676 return h.fn.call(h.context, e, i), !0; 11677 case 4: 11678 return h.fn.call(h.context, e, i, n), !0; 11679 case 5: 11680 return h.fn.call(h.context, e, i, n, a), !0; 11681 case 6: 11682 return h.fn.call(h.context, e, i, n, a, s), !0; 11683 } 11684 for (u = 1, l = new Array(d - 1); u < d; u++) l[u - 1] = arguments[u]; 11685 h.fn.apply(h.context, l); 11686 } else { 11687 var c, 11688 f = h.length; 11689 for (u = 0; u < f; u++) 11690 switch ((h[u].once && this.removeListener(t, h[u].fn, void 0, !0), d)) { 11691 case 1: 11692 h[u].fn.call(h[u].context); 11693 break; 11694 case 2: 11695 h[u].fn.call(h[u].context, e); 11696 break; 11697 case 3: 11698 h[u].fn.call(h[u].context, e, i); 11699 break; 11700 case 4: 11701 h[u].fn.call(h[u].context, e, i, n); 11702 break; 11703 default: 11704 if (!l) for (c = 1, l = new Array(d - 1); c < d; c++) l[c - 1] = arguments[c]; 11705 h[u].fn.apply(h[u].context, l); 11706 } 11707 } 11708 return !0; 11709 }), 11710 (o.prototype.on = function (t, e, r) { 11711 return a(this, t, e, r, !1); 11712 }), 11713 (o.prototype.once = function (t, e, r) { 11714 return a(this, t, e, r, !0); 11715 }), 11716 (o.prototype.removeListener = function (t, e, i, n) { 11717 var a = r ? r + t : t; 11718 if (!this._events[a]) return this; 11719 if (!e) return s(this, a), this; 11720 var o = this._events[a]; 11721 if (o.fn) o.fn !== e || (n && !o.once) || (i && o.context !== i) || s(this, a); 11722 else { 11723 for (var l = 0, u = [], h = o.length; l < h; l++) 11724 (o[l].fn !== e || (n && !o[l].once) || (i && o[l].context !== i)) && u.push(o[l]); 11725 u.length ? (this._events[a] = 1 === u.length ? u[0] : u) : s(this, a); 11726 } 11727 return this; 11728 }), 11729 (o.prototype.removeAllListeners = function (t) { 11730 var e; 11731 return ( 11732 t 11733 ? ((e = r ? r + t : t), this._events[e] && s(this, e)) 11734 : ((this._events = new i()), (this._eventsCount = 0)), 11735 this 11736 ); 11737 }), 11738 (o.prototype.off = o.prototype.removeListener), 11739 (o.prototype.addListener = o.prototype.on), 11740 (o.prefixed = r), 11741 (o.EventEmitter = o), 11742 (t.exports = o); 11743 })(Hn);
11744 var Vn = v(Hn.exports); 11745 function Yn(t, e) { 11746 if (!((r = e.remuxResult).audio || r.video || r.text || r.id3 || r.initSegment)) return !1; 11747 var r, 11748 i = [], 11749 n = e.remuxResult, 11750 a = n.audio, 11751 s = n.video; 11752 return ( 11753 a && Wn(i, a), s && Wn(i, s), t.postMessage({ event: 'transmuxComplete', data: e }, i), !0 11754 ); 11755 } 11756 function Wn(t, e) { 11757 e.data1 && t.push(e.data1.buffer), e.data2 && t.push(e.data2.buffer); 11758 } 11759 function jn(t, e, r) { 11760 e.reduce(function (e, r) { 11761 return Yn(t, r) || e; 11762 }, !1) || t.postMessage({ event: 'transmuxComplete', data: e[0] }), 11763 t.postMessage({ event: 'flush', data: r }); 11764 } 11765 void 0 !== e && 11766 e && 11767 (function (t) { 11768 var e = new Vn(), 11769 r = function (e, r) { 11770 t.postMessage({ event: e, data: r }); 11771 }; 11772 e.on(S.FRAG_DECRYPTED, r), e.on(S.ERROR, r); 11773 var i = function () { 11774 var t = function (t) { 11775 var e = function (e) { 11776 r('workerLog', { logType: t, message: e }); 11777 }; 11778 w[t] = e; 11779 }; 11780 for (var e in w) t(e); 11781 }; 11782 t.addEventListener('message', function (n) { 11783 var a = n.data; 11784 switch (a.cmd) { 11785 case 'init': 11786 var s = JSON.parse(a.config); 11787 (t.transmuxer = new Nn(e, a.typeSupported, s, '', a.id)), 11788 I(s.debug, a.id), 11789 i(), 11790 r('init', null); 11791 break; 11792 case 'configure': 11793 t.transmuxer.configure(a.config); 11794 break; 11795 case 'demux': 11796 var o = t.transmuxer.push(a.data, a.decryptdata, a.chunkMeta, a.state); 11797 Bn(o) 11798 ? ((t.transmuxer.async = !0), 11799 o 11800 .then(function (e) { 11801 Yn(t, e); 11802 }) 11803 .catch(function (t) { 11804 r(S.ERROR, { 11805 type: L.MEDIA_ERROR, 11806 details: A.FRAG_PARSING_ERROR, 11807 chunkMeta: a.chunkMeta, 11808 fatal: !1, 11809 error: t, 11810 err: t, 11811 reason: 'transmuxer-worker push error', 11812 }); 11813 })) 11814 : ((t.transmuxer.async = !1), Yn(t, o)); 11815 break; 11816 case 'flush': 11817 var l = a.chunkMeta, 11818 u = t.transmuxer.flush(l); 11819 Bn(u) || t.transmuxer.async 11820 ? (Bn(u) || (u = Promise.resolve(u)), 11821 u 11822 .then(function (e) { 11823 jn(t, e, l); 11824 }) 11825 .catch(function (t) { 11826 r(S.ERROR, { 11827 type: L.MEDIA_ERROR, 11828 details: A.FRAG_PARSING_ERROR, 11829 chunkMeta: a.chunkMeta, 11830 fatal: !1, 11831 error: t, 11832 err: t, 11833 reason: 'transmuxer-worker flush error', 11834 }); 11835 })) 11836 : jn(t, u, l); 11837 } 11838 }); 11839 })(self); 11840 var qn = (function () { 11841 function e(e, r, i, n) { 11842 var a = this; 11843 (this.error = null), 11844 (this.hls = void 0), 11845 (this.id = void 0), 11846 (this.observer = void 0), 11847 (this.frag = null), 11848 (this.part = null), 11849 (this.useWorker = void 0), 11850 (this.workerContext = null), 11851 (this.onwmsg = void 0), 11852 (this.transmuxer = null), 11853 (this.onTransmuxComplete = void 0), 11854 (this.onFlush = void 0); 11855 var s = e.config; 11856 (this.hls = e), 11857 (this.id = r), 11858 (this.useWorker = !!s.enableWorker), 11859 (this.onTransmuxComplete = i), 11860 (this.onFlush = n); 11861 var o = function (t, e) { 11862 ((e = e || {}).frag = a.frag), 11863 (e.id = a.id), 11864 t === S.ERROR && (a.error = e.error), 11865 a.hls.trigger(t, e); 11866 }; 11867 (this.observer = new Vn()), 11868 this.observer.on(S.FRAG_DECRYPTED, o), 11869 this.observer.on(S.ERROR, o); 11870 var l, 11871 u, 11872 h, 11873 d, 11874 c = se(s.preferManagedMediaSource) || {
11875 isTypeSupported: function () { 11876 return !1; 11877 }, 11878 }, 11879 f = { 11880 mpeg: c.isTypeSupported('audio/mpeg'), 11881 mp3: c.isTypeSupported('audio/mp4; codecs="mp3"'), 11882 ac3: c.isTypeSupported('audio/mp4; codecs="ac-3"'), 11883 }; 11884 if (!this.useWorker || 'undefined' == typeof Worker || (s.workerPath, 0)) 11885 this.transmuxer = new Nn(this.observer, f, s, '', r); 11886 else 11887 try { 11888 s.workerPath 11889 ? (w.log('loading Web Worker ' + s.workerPath + ' for "' + r + '"'), 11890 (this.workerContext = 11891 ((h = s.workerPath), 11892 (d = new self.URL(h, self.location.href).href), 11893 { worker: new self.Worker(d), scriptURL: d }))) 11894 : (w.log('injecting Web Worker for "' + r + '"'), 11895 (this.workerContext = 11896 ((l = new self.Blob( 11897 [ 11898 'var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(' + 11899 t.toString() + 11900 ')(true);', 11901 ], 11902 { type: 'text/javascript' } 11903 )), 11904 (u = self.URL.createObjectURL(l)), 11905 { worker: new self.Worker(u), objectURL: u }))), 11906 (this.onwmsg = function (t) { 11907 return a.onWorkerMessage(t); 11908 }); 11909 var g = this.workerContext.worker; 11910 g.addEventListener('message', this.onwmsg), 11911 (g.onerror = function (t) { 11912 var e = new Error(t.message + ' (' + t.filename + ':' + t.lineno + ')'); 11913 (s.enableWorker = !1), 11914 w.warn('Error in "' + r + '" Web Worker, fallback to inline'), 11915 a.hls.trigger(S.ERROR, { 11916 type: L.OTHER_ERROR, 11917 details: A.INTERNAL_EXCEPTION, 11918 fatal: !1, 11919 event: 'demuxerWorker', 11920 error: e, 11921 }); 11922 }), 11923 g.postMessage({ 11924 cmd: 'init', 11925 typeSupported: f, 11926 vendor: '', 11927 id: r, 11928 config: JSON.stringify(s), 11929 }); 11930 } catch (t) { 11931 w.warn('Error setting up "' + r + '" Web Worker, fallback to inline', t), 11932 this.resetWorker(), 11933 (this.error = null), 11934 (this.transmuxer = new Nn(this.observer, f, s, '', r)); 11935 } 11936 } 11937 var r = e.prototype; 11938 return ( 11939 (r.resetWorker = function () { 11940 if (this.workerContext) { 11941 var t = this.workerContext, 11942 e = t.worker, 11943 r = t.objectURL; 11944 r && self.URL.revokeObjectURL(r), 11945 e.removeEventListener('message', this.onwmsg), 11946 (e.onerror = null), 11947 e.terminate(), 11948 (this.workerContext = null); 11949 } 11950 }), 11951 (r.destroy = function () { 11952 if (this.workerContext) this.resetWorker(), (this.onwmsg = void 0); 11953 else { 11954 var t = this.transmuxer; 11955 t && (t.destroy(), (this.transmuxer = null)); 11956 } 11957 var e = this.observer; 11958 e && e.removeAllListeners(), 11959 (this.frag = null), 11960 (this.observer = null), 11961 (this.hls = null); 11962 }), 11963 (r.push = function (t, e, r, i, n, a, s, o, l, u) { 11964 var h, 11965 d, 11966 c = this; 11967 l.transmuxing.start = self.performance.now(); 11968 var f = this.transmuxer, 11969 g = a ? a.start : n.start, 11970 v = n.decryptdata, 11971 m = this.frag, 11972 p = !(m && n.cc === m.cc), 11973 y = !(m && l.level === m.level), 11974 E = m ? l.sn - m.sn : -1, 11975 T = this.part ? l.part - this.part.index : -1, 11976 S = 0 === E && l.id > 1 && l.id === (null == m ? void 0 : m.stats.chunkCount), 11977 L = !y && (1 === E || (0 === E && (1 === T || (S && T <= 0)
11977))), 11978 A = self.performance.now(); 11979 (y || E || 0 === n.stats.parsing.start) && (n.stats.parsing.start = A), 11980 !a || (!T && L) || (a.stats.parsing.start = A); 11981 var R = !( 11982 m && 11983 (null == (h = n.initSegment) ? void 0 : h.url) === 11984 (null == (d = m.initSegment) ? void 0 : d.url) 11985 ), 11986 b = new Kn(p, L, o, y, g, R); 11987 if (!L || p || R) { 11988 w.log( 11989 '[transmuxer-interface, ' + 11990 n.type + 11991 ']: Starting new transmux session for sn: ' + 11992 l.sn + 11993 ' p: ' + 11994 l.part + 11995 ' level: ' + 11996 l.level + 11997 ' id: ' + 11998 l.id + 11999 '\n discontinuity: ' + 12000 p + 12001 '\n trackSwitch: ' + 12002 y + 12003 '\n contiguous: ' + 12004 L + 12005 '\n accurateTimeOffset: ' + 12006 o + 12007 '\n timeOffset: ' + 12008 g + 12009 '\n initSegmentChange: ' + 12010 R 12011 ); 12012 var k = new Gn(r, i, e, s, u); 12013 this.configureTransmuxer(k); 12014 } 12015 if (((this.frag = n), (this.part = a), this.workerContext)) 12016 this.workerContext.worker.postMessage( 12017 { cmd: 'demux', data: t, decryptdata: v, chunkMeta: l, state: b }, 12018 t instanceof ArrayBuffer ? [t] : [] 12019 ); 12020 else if (f) { 12021 var D = f.push(t, v, l, b); 12022 Bn(D) 12023 ? ((f.async = !0), 12024 D.then(function (t) { 12025 c.handleTransmuxComplete(t); 12026 }).catch(function (t) { 12027 c.transmuxerError(t, l, 'transmuxer-interface push error'); 12028 })) 12029 : ((f.async = !1), this.handleTransmuxComplete(D)); 12030 } 12031 }), 12032 (r.flush = function (t) { 12033 var e = this; 12034 t.transmuxing.start = self.performance.now(); 12035 var r = this.transmuxer; 12036 if (this.workerContext) 12037 this.workerContext.worker.postMessage({ cmd: 'flush', chunkMeta: t }); 12038 else if (r) { 12039 var i = r.flush(t); 12040 Bn(i) || r.async 12041 ? (Bn(i) || (i = Promise.resolve(i)), 12042 i 12043 .then(function (r) { 12044 e.handleFlushResult(r, t); 12045 }) 12046 .catch(function (r) { 12047 e.transmuxerError(r, t, 'transmuxer-interface flush error'); 12048 })) 12049 : this.handleFlushResult(i, t); 12050 } 12051 }), 12052 (r.transmuxerError = function (t, e, r) { 12053 this.hls && 12054 ((this.error = t), 12055 this.hls.trigger(S.ERROR, { 12056 type: L.MEDIA_ERROR, 12057 details: A.FRAG_PARSING_ERROR, 12058 chunkMeta: e, 12059 frag: this.frag || void 0, 12060 fatal: !1, 12061 error: t, 12062 err: t, 12063 reason: r, 12064 })); 12065 }), 12066 (r.handleFlushResult = function (t, e) { 12067 var r = this; 12068 t.forEach(function (t) { 12069 r.handleTransmuxComplete(t); 12070 }), 12071 this.onFlush(e); 12072 }), 12073 (r.onWorkerMessage = function (t) { 12074 var e = t.data; 12075 if (null != e && e.event) { 12076 var r = this.hls; 12077 if (this.hls) 12078 switch (e.event) { 12079 case 'init': 12080 var i, 12081 n = null == (i = this.workerContext) ? void 0 : i.objectURL; 12082 n && self.URL.revokeObjectURL(n); 12083 break; 12084 case 'transmuxComplete': 12085 this.handleTransmuxComplete(e.data); 12086 break; 12087 case 'flush': 12088 this.onFlush(e.data); 12089 break; 12090 case 'workerLog': 12091 w[e.data.logType] && w[e.data.logType](e.data.message); 12092 break; 12093 default: 12094 (e.data = e.data || {}), 12095 (e.data.frag = this.frag), 12096 (e.data.id = this.id), 12097 r.trigger(e.event, e.data); 12098 } 12099 } else w.warn('worker message received with no ' + (e ? 'event name' : 'data')); 12100 }), 12101 (r.configureTransmuxer = function (t) { 12102 var e = this.transmuxer; 12103 this.workerContext 12104 ? this.workerContext.worker.postMessage({ cmd: 'configure', config: t }) 12105 : e && e.configure(t); 12106 }), 12107 (r.handleTransmuxComplete = function (t) { 12108 (t.chunkMeta.transmuxing.end = self.performance.now()), this.onTransmuxComplete(t); 12109 }), 12110 e 12111 ); 12112 })(); 12113 function Xn(t, e) { 12114 if (t.length !== e.length) return !1; 12115 for (var r = 0; r < t.length; r++) if (!zn(t[r].attrs, e[r].attrs)) return !1; 12116 return !0; 12117 } 12118 function zn(t, e, r) { 12119 var i = t['STABLE-RENDITION-ID']; 12120 return i && !r 12121 ? i === e['STABLE-RENDITION-ID'] 12122 : !( 12123 r || [ 12124 'LANGUAGE',
12125 'NAME', 12126 'CHARACTERISTICS', 12127 'AUTOSELECT', 12128 'DEFAULT', 12129 'FORCED', 12130 'ASSOC-LANGUAGE', 12131 ] 12132 ).some(function (r) { 12133 return t[r] !== e[r]; 12134 }); 12135 } 12136 function Qn(t, e) { 12137 return ( 12138 e.label.toLowerCase() === t.name.toLowerCase() && 12139 (!e.language || e.language.toLowerCase() === (t.lang || '').toLowerCase()) 12140 ); 12141 } 12142 var Jn = (function (t) { 12143 function e(e, r, i) { 12144 var n; 12145 return ( 12146 ((n = t.call(this, e, r, i, '[audio-stream-controller]', Me) || this).videoBuffer = 12147 null), 12148 (n.videoTrackCC = -1), 12149 (n.waitingVideoCC = -1), 12150 (n.bufferedTrack = null), 12151 (n.switchingTrack = null), 12152 (n.trackId = -1), 12153 (n.waitingData = null), 12154 (n.mainDetails = null), 12155 (n.flushing = !1), 12156 (n.bufferFlushed = !1), 12157 (n.cachedTrackLoadedData = null), 12158 n._registerListeners(), 12159 n 12160 ); 12161 } 12162 l(e, t); 12163 var r = e.prototype; 12164 return ( 12165 (r.onHandlerDestroying = function () { 12166 this._unregisterListeners(), 12167 t.prototype.onHandlerDestroying.call(this), 12168 (this.mainDetails = null), 12169 (this.bufferedTrack = null), 12170 (this.switchingTrack = null); 12171 }), 12172 (r._registerListeners = function () { 12173 var t = this.hls; 12174 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 12175 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 12176 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 12177 t.on(S.LEVEL_LOADED, this.onLevelLoaded, this), 12178 t.on(S.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this), 12179 t.on(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), 12180 t.on(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), 12181 t.on(S.ERROR, this.onError, this), 12182 t.on(S.BUFFER_RESET, this.onBufferReset, this), 12183 t.on(S.BUFFER_CREATED, this.onBufferCreated, this), 12184 t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 12185 t.on(S.BUFFER_FLUSHED, this.onBufferFlushed, this), 12186 t.on(S.INIT_PTS_FOUND, this.onInitPtsFound, this), 12187 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this); 12188 }), 12189 (r._unregisterListeners = function () { 12190 var t = this.hls; 12191 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 12192 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 12193 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 12194 t.off(S.LEVEL_LOADED, this.onLevelLoaded, this), 12195 t.off(S.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this), 12196 t.off(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), 12197 t.off(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), 12198 t.off(S.ERROR, this.onError, this), 12199 t.off(S.BUFFER_RESET, this.onBufferReset, this), 12200 t.off(S.BUFFER_CREATED, this.onBufferCreated, this), 12201 t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 12202 t.off(S.BUFFER_FLUSHED, this.onBufferFlushed, this), 12203 t.off(S.INIT_PTS_FOUND, this.onInitPtsFound, this), 12204 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this); 12205 }), 12206 (r.onInitPtsFound = function (t, e) { 12207 var r = e.frag, 12208 i = e.id, 12209 n = e.initPTS, 12210 a = e.timescale; 12211 if ('main' === i) { 12212 var s = r.cc; 12213 (this.initPTS[r.cc] = { baseTime: n, timescale: a }), 12214 this.log('InitPTS for cc: ' + s + ' found from main: ' + n), 12215 (this.videoTrackCC = s), 12216 this.state === wi && this.tick(); 12217 } 12218 }), 12219 (r.startLoad = function (t) { 12220 if (!this.levels) return (this.startPosition = t), void (this.state = Ei); 12221 var e = this.lastCurrentTime; 12222 this.stopLoad(), 12223 this.setInterval(100), 12224 e > 0 && -1 === t 12225 ? (this.log('Override startPosition with lastCurrentTime @' + e.toFixed(3)), 12226 (t = e), 12227 (this.state = Ti)) 12228 : ((this.loadedmetadata = !1), (this.state = Ri)), 12229 (this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t), 12230 this.tick(); 12231 }), 12232 (r.doTick = function () { 12233 switch (this.state) { 12234 case Ti: 12235 this.doTickIdle(); 12236 break; 12237 case Ri: 12238 var e, 12239 r = this.levels, 12240 i = this.trackId, 12241 n = null == r || null == (e = r[i]) ? void 0 : e.details; 12242 if (n) { 12243 if (this.waitForCdnTuneIn(n)) break; 12244 this.state = wi; 12245 } 12246 break; 12247 case Ai: 12248 var a, 12249 s = performance.now(), 12250 o = this.retryDate; 12251 if (!o || s >= o || (null != (a = this.media) && a.seeking)) { 12252 var l = this.levels, 12253 u = this.trackId; 12254 this.log('RetryDate reached, switch back to IDLE state'), 12255 this.resetStartWhenNotLoaded((null == l ? void 0 : l[u]) || null), 12256 (this.state = Ti); 12257 } 12258 break; 12259 case wi: 12260 var h = this.waitingData; 12261 if (h) { 12262 var d = h.frag, 12263 c = h.part, 12264 f = h.cache, 12265 g = h.complete; 12266 if (void 0 !== this.initPTS[d.cc]) { 12267 (this.waitingData = null), (this.waitingVideoCC = -1), (this.state = Li); 12268 var v = { frag: d, part: c, payload: f.flush(), networkDetails: null }; 12269 this._handleFragmentLoadProgress(v), 12270 g && t.prototype._handleFragmentLoadComplete.call(this, v); 12271 } else if (this.videoTrackCC !== this.waitingVideoCC) 12272 this.log( 12273 'Waiting fragment cc (' + 12274 d.cc + 12275 ') cancelled because video is at cc ' + 12276 this.videoTrackCC 12277 ), 12278 this.clearWaitingFragment(); 12279 else { 12280 var m = this.getLoadPosition(), 12281 p = ri.bufferInfo(this.mediaBuffer, m, this.config.maxBufferHole); 12282 Rr(p.end, this.config.maxFragLookUpTolerance, d) < 0 && 12283 (this.log( 12284 'Waiting fragment cc (' + 12285 d.cc + 12286 ') @ ' + 12287 d.start + 12288 ' cancelled because another fragment at ' + 12289 p.end + 12290 ' is needed' 12291 ), 12292 this.clearWaitingFragment()); 12293 } 12294 } else this.state = Ti; 12295 } 12296 this.onTickEnd(); 12297 }), 12298 (r.clearWaitingFragment = function () { 12299 var t = this.waitingData; 12300 t && 12301 (this.fragmentTracker.removeFragment(t.frag), 12302 (this.waitingData = null),
12303 (this.waitingVideoCC = -1), 12304 (this.state = Ti)); 12305 }), 12306 (r.resetLoadingState = function () { 12307 this.clearWaitingFragment(), t.prototype.resetLoadingState.call(this); 12308 }), 12309 (r.onTickEnd = function () { 12310 var t = this.media; 12311 null != t && t.readyState && (this.lastCurrentTime = t.currentTime); 12312 }), 12313 (r.doTickIdle = function () { 12314 var t = this.hls, 12315 e = this.levels, 12316 r = this.media, 12317 i = this.trackId, 12318 n = t.config; 12319 if ( 12320 this.buffering && 12321 (r || (!this.startFragRequested && n.startFragPrefetch)) && 12322 null != e && 12323 e[i] 12324 ) { 12325 var a = e[i], 12326 s = a.details; 12327 if (!s || (s.live && this.levelLastLoaded !== a) || this.waitForCdnTuneIn(s)) 12328 this.state = Ri; 12329 else { 12330 var o = this.mediaBuffer ? this.mediaBuffer : this.media; 12331 this.bufferFlushed && 12332 o && 12333 ((this.bufferFlushed = !1), this.afterBufferFlushed(o, O, Me)); 12334 var l = this.getFwdBufferInfo(o, Me); 12335 if (null !== l) { 12336 var u = this.bufferedTrack, 12337 h = this.switchingTrack; 12338 if (!h && this._streamEnded(l, s)) 12339 return t.trigger(S.BUFFER_EOS, { type: 'audio' }), void (this.state = Di); 12340 var d = this.getFwdBufferInfo( 12341 this.videoBuffer ? this.videoBuffer : this.media, 12342 Fe 12343 ), 12344 c = l.len, 12345 f = this.getMaxBufferLength(null == d ? void 0 : d.len), 12346 g = s.fragments, 12347 v = g[0].start, 12348 m = this.flushing ? this.getLoadPosition() : l.end; 12349 if (h && r) { 12350 var p = this.getLoadPosition(); 12351 u && !zn(h.attrs, u.attrs) && (m = p), 12352 s.PTSKnown && 12353 p < v && 12354 (l.end > v || l.nextStart) && 12355 (this.log( 12356 'Alt audio track ahead of main track, seek to start of alt audio track' 12357 ), 12358 (r.currentTime = v + 0.05)); 12359 } 12360 if (!(c >= f && !h && m < g[g.length - 1].start)) { 12361 var y = this.getNextFragment(m, s), 12362 E = !1; 12363 if ( 12364 (y && 12365 this.isLoopLoading(y, m) && 12366 ((E = !!y.gap), (y = this.getNextFragmentLoopLoading(y, s, l, Fe, f))), 12367 y) 12368 ) { 12369 var T = d && y.start > d.end + s.targetduration; 12370 if (T || ((null == d || !d.len) && l.len)) { 12371 var L = this.getAppendedFrag(y.start, Fe); 12372 if (null === L) return; 12373 if ( 12374 (E || (E = !!L.gap || (!!T && 0 === d.len)), 12375 (T && !E) || (E && l.nextStart && l.nextStart < L.end)) 12376 ) 12377 return; 12378 } 12379 this.loadFragment(y, a, m); 12380 } else this.bufferFlushed = !0; 12381 } 12382 } 12383 } 12384 } 12385 }), 12386 (r.getMaxBufferLength = function (e) { 12387 var r = t.prototype.getMaxBufferLength.call(this); 12388 return e ? Math.min(Math.max(r, e), this.config.maxMaxBufferLength) : r; 12389 }), 12390 (r.onMediaDetaching = function () { 12391 (this.videoBuffer = null), 12392 (this.bufferFlushed = this.flushing = !1), 12393 t.prototype.onMediaDetaching.call(this); 12394 }), 12395 (r.onAudioTracksUpdated = function (t, e) { 12396 var r = e.audioTracks; 12397 this.resetTransmuxer(), 12398 (this.levels = r.map(function (t) { 12399 return new or(t); 12400 })); 12401 }), 12402 (r.onAudioTrackSwitching = function (t, e) { 12403 var r = !!e.url; 12404 this.trackId = e.id; 12405 var i = this.fragCurrent; 12406 i && (i.abortRequests(), this.removeUnbufferedFrags(i.start)), 12407 this.resetLoadingState(), 12408 r ? this.setInterval(100) : this.resetTransmuxer(), 12409 r 12410 ? ((this.switchingTrack = e), (this.state = Ti), this.flushAudioIfNeeded(e)) 12411 : ((this.switchingTrack = null), (this.bufferedTrack = e), (this.state = Ei)), 12412 this.tick(); 12413 }), 12414 (r.onManifestLoading = function () { 12415 this.fragmentTracker.removeAllFragments(), 12416 (this.startPosition = this.lastCurrentTime = 0), 12417 (this.bufferFlushed = this.flushing = !1), 12418 (this.levels = 12419 this.mainDetails = 12420 this.waitingData = 12421 this.bufferedTrack = 12422 this.cachedTrackLoadedData = 12423 this.switchingTrack = 12424 null), 12425 (this.startFragRequested = !1), 12426 (this.trackId = this.videoTrackCC = this.waitingVideoCC = -1); 12427 }), 12428 (r.onLevelLoaded = function (t, e) { 12429 (this.mainDetails = e.details), 12430 null !== this.cachedTrackLoadedData && 12431 (this.hls.trigger(S.AUDIO_TRACK_LOADED, this.cachedTrackLoadedData), 12432 (this.cachedTrackLoadedData = null)); 12433 }), 12434 (r.onAudioTrackLoaded = function (t, e) { 12435 var r; 12436 if (null != this.mainDetails) { 12437 var i = this.levels, 12438 n = e.details, 12439 a = e.id; 12440 if (i) { 12441 this.log( 12442 'Audio track ' + 12443 a + 12444 ' loaded [' + 12445 n.startSN + 12446 ',' + 12447 n.endSN + 12448 ']' + 12449 (n.lastPartSn ? '[part-' + n.lastPartSn + '-' + n.lastPartIndex + ']' : '') + 12450 ',duration:' + 12451 n.totalduration 12452 ); 12453 var s = i[a], 12454 o = 0; 12455 if (n.live || (null != (r = s.details) && r.live)) { 12456 this.checkLiveUpdate(n); 12457 var l, 12458 u = this.mainDetails; 12459 if (n.deltaUpdateFailed || !u) return; 12460 !s.details && n.hasProgramDateTime && u.hasProgramDateTime
12461 ? (li(n, u), (o = n.fragments[0].start)) 12462 : (o = this.alignPlaylists( 12463 n, 12464 s.details, 12465 null == (l = this.levelLastLoaded) ? void 0 : l.details 12466 )); 12467 } 12468 (s.details = n), 12469 (this.levelLastLoaded = s), 12470 this.startFragRequested || 12471 (!this.mainDetails && n.live) || 12472 this.setStartPosition(this.mainDetails || n, o), 12473 this.state !== Ri || this.waitForCdnTuneIn(n) || (this.state = Ti), 12474 this.tick(); 12475 } else this.warn('Audio tracks were reset while loading level ' + a); 12476 } else this.cachedTrackLoadedData = e; 12477 }), 12478 (r._handleFragmentLoadProgress = function (t) { 12479 var e, 12480 r = t.frag, 12481 i = t.part, 12482 n = t.payload, 12483 a = this.config, 12484 s = this.trackId, 12485 o = this.levels; 12486 if (o) { 12487 var l = o[s]; 12488 if (l) { 12489 var u = l.details; 12490 if (!u) 12491 return ( 12492 this.warn('Audio track details undefined on fragment load progress'), 12493 void this.removeUnbufferedFrags(r.start) 12494 ); 12495 var h = a.defaultAudioCodec || l.audioCodec || 'mp4a.40.2', 12496 d = this.transmuxer; 12497 d || 12498 (d = this.transmuxer = 12499 new qn( 12500 this.hls, 12501 Me, 12502 this._handleTransmuxComplete.bind(this), 12503 this._handleTransmuxerFlush.bind(this) 12504 )); 12505 var c = this.initPTS[r.cc], 12506 f = null == (e = r.initSegment) ? void 0 : e.data; 12507 if (void 0 !== c) { 12508 var g = i ? i.index : -1, 12509 v = -1 !== g, 12510 m = new ii(r.level, r.sn, r.stats.chunkCount, n.byteLength, g, v); 12511 d.push(n, f, h, '', r, i, u.totalduration, !1, m, c); 12512 } else 12513 this.log( 12514 'Unknown video PTS for cc ' + 12515 r.cc + 12516 ', waiting for video PTS before demuxing audio frag ' + 12517 r.sn + 12518 ' of [' + 12519 u.startSN + 12520 ' ,' + 12521 u.endSN + 12522 '],track ' + 12523 s 12524 ), 12525 (this.waitingData = this.waitingData || { 12526 frag: r, 12527 part: i, 12528 cache: new xi(), 12529 complete: !1, 12530 }).cache.push(new Uint8Array(n)), 12531 (this.waitingVideoCC = this.videoTrackCC), 12532 (this.state = wi); 12533 } else this.warn('Audio track is undefined on fragment load progress'); 12534 } else 12535 this.warn( 12536 'Audio tracks were reset while fragment load was in progress. Fragment ' + 12537 r.sn + 12538 ' of level ' + 12539 r.level + 12540 ' will not be buffered' 12541 ); 12542 }), 12543 (r._handleFragmentLoadComplete = function (e) { 12544 this.waitingData 12545 ? (this.waitingData.complete = !0) 12546 : t.prototype._handleFragmentLoadComplete.call(this, e); 12547 }), 12548 (r.onBufferReset = function () { 12549 (this.mediaBuffer = this.videoBuffer = null), (this.loadedmetadata = !1); 12550 }), 12551 (r.onBufferCreated = function (t, e) { 12552 var r = e.tracks.audio; 12553 r && (this.mediaBuffer = r.buffer || null), 12554 e.tracks.video && (this.videoBuffer = e.tracks.video.buffer || null); 12555 }), 12556 (r.onFragBuffered = function (t, e) { 12557 var r = e.frag, 12558 n = e.part; 12559 if (r.type === Me) 12560 if (this.fragContextChanged(r)) 12561 this.warn( 12562 'Fragment ' + 12563 r.sn + 12564 (n ? ' p: ' + n.index : '') + 12565 ' of level ' + 12566 r.level + 12567 ' finished buffering, but was aborted. state: ' + 12568 this.state + 12569 ', audioSwitch: ' + 12570 (this.switchingTrack ? this.switchingTrack.name : 'false') 12571 ); 12572 else { 12573 if ('initSegment' !== r.sn) { 12574 this.fragPrevious = r; 12575 var a = this.switchingTrack; 12576 a && 12577 ((this.bufferedTrack = a), 12578 (this.switchingTrack = null),
12579 this.hls.trigger(S.AUDIO_TRACK_SWITCHED, i({}, a))); 12580 } 12581 this.fragBufferedComplete(r, n); 12582 } 12583 else if (!this.loadedmetadata && r.type === Fe) { 12584 var s = this.videoBuffer || this.media; 12585 s && ri.getBuffered(s).length && (this.loadedmetadata = !0); 12586 } 12587 }), 12588 (r.onError = function (e, r) { 12589 var i; 12590 if (r.fatal) this.state = Ii; 12591 else 12592 switch (r.details) { 12593 case A.FRAG_GAP: 12594 case A.FRAG_PARSING_ERROR: 12595 case A.FRAG_DECRYPT_ERROR: 12596 case A.FRAG_LOAD_ERROR: 12597 case A.FRAG_LOAD_TIMEOUT: 12598 case A.KEY_LOAD_ERROR: 12599 case A.KEY_LOAD_TIMEOUT: 12600 this.onFragmentOrKeyLoadError(Me, r); 12601 break; 12602 case A.AUDIO_TRACK_LOAD_ERROR: 12603 case A.AUDIO_TRACK_LOAD_TIMEOUT: 12604 case A.LEVEL_PARSING_ERROR: 12605 r.levelRetry || 12606 this.state !== Ri || 12607 (null == (i = r.context) ? void 0 : i.type) !== xe || 12608 (this.state = Ti); 12609 break; 12610 case A.BUFFER_APPEND_ERROR: 12611 case A.BUFFER_FULL_ERROR: 12612 if (!r.parent || 'audio' !== r.parent) return; 12613 if (r.details === A.BUFFER_APPEND_ERROR) return void this.resetLoadingState(); 12614 this.reduceLengthAndFlushBuffer(r) && 12615 ((this.bufferedTrack = null), 12616 t.prototype.flushMainBuffer.call(this, 0, Number.POSITIVE_INFINITY, 'audio')); 12617 break; 12618 case A.INTERNAL_EXCEPTION: 12619 this.recoverWorkerError(r); 12620 } 12621 }), 12622 (r.onBufferFlushing = function (t, e) { 12623 e.type !== N && (this.flushing = !0); 12624 }), 12625 (r.onBufferFlushed = function (t, e) { 12626 var r = e.type; 12627 if (r !== N) { 12628 (this.flushing = !1), 12629 (this.bufferFlushed = !0), 12630 this.state === Di && (this.state = Ti); 12631 var i = this.mediaBuffer || this.media; 12632 i && (this.afterBufferFlushed(i, r, Me), this.tick()); 12633 } 12634 }), 12635 (r._handleTransmuxComplete = function (t) { 12636 var e, 12637 r = 'audio', 12638 i = this.hls, 12639 n = t.remuxResult, 12640 a = t.chunkMeta, 12641 s = this.getCurrentContext(a); 12642 if (s) { 12643 var l = s.frag, 12644 u = s.part, 12645 h = s.level, 12646 d = h.details, 12647 c = n.audio, 12648 f = n.text, 12649 g = n.id3, 12650 v = n.initSegment; 12651 if (!this.fragContextChanged(l) && d) { 12652 if ( 12653 ((this.state = bi), 12654 this.switchingTrack && c && this.completeAudioSwitch(this.switchingTrack), 12655 null != v && v.tracks) 12656 ) { 12657 var m = l.initSegment || l; 12658 this._bufferInitSegment(h, v.tracks, m, a), 12659 i.trigger(S.FRAG_PARSING_INIT_SEGMENT, { frag: m, id: r, tracks: v.tracks }); 12660 } 12661 if (c) { 12662 var p = c.startPTS, 12663 y = c.endPTS, 12664 E = c.startDTS, 12665 T = c.endDTS; 12666 u && 12667 (u.elementaryStreams[O] = { startPTS: p, endPTS: y, startDTS: E, endDTS: T }), 12668 l.setElementaryStreamInfo(O, p, y, E, T), 12669 this.bufferFragmentData(c, l, u, a); 12670 } 12671 if (null != g && null != (e = g.samples) && e.length) { 12672 var L = o({ id: r, frag: l, details: d }, g); 12673 i.trigger(S.FRAG_PARSING_METADATA, L); 12674 } 12675 if (f) { 12676 var A = o({ id: r, frag: l, details: d }, f); 12677 i.trigger(S.FRAG_PARSING_USERDATA, A); 12678 } 12679 } else this.fragmentTracker.removeFragment(l); 12680 } else this.resetWhenMissingContext(a); 12681 }), 12682 (r._bufferInitSegment = function (t, e, r, i) { 12683 if (this.state === bi) { 12684 e.video && delete e.video; 12685 var n = e.audio; 12686 if (n) { 12687 n.id = 'audio'; 12688 var a = t.audioCodec; 12689 this.log( 12690 'Init audio buffer, container:' + 12691 n.container + 12692 ', codecs[level/parsed]=[' + 12693 a + 12694 '/' + 12695 n.codec + 12696 ']' 12697 ), 12698 a && 1 === a.split(',').length && (n.levelCodec = a), 12699 this.hls.trigger(S.BUFFER_CODECS, e); 12700 var s = n.initSegment; 12701 if (null != s && s.byteLength) { 12702 var o = { 12703 type: 'audio', 12704 frag: r, 12705 part: null, 12706 chunkMeta: i, 12707 parent: r.type, 12708 data: s, 12709 }; 12710 this.hls.trigger(S.BUFFER_APPENDING, o); 12711 } 12712 this.tickImmediate(); 12713 } 12714 } 12715 }), 12716 (r.loadFragment = function (e, r, i) { 12717 var n, 12718 a = this.fragmentTracker.getState(e); 12719 if (((this.fragCurrent = e), this.switchingTrack || a === Xr || a === Qr)) 12720 if ('initSegment' === e.sn) this._loadInitSegment(e, r); 12721 else if (null != (n = r.details) && n.live && !this.initPTS[e.cc]) { 12722 this.log( 12723 'Waiting for video PTS in continuity counter ' + 12724 e.cc + 12725 ' of live stream before loading audio fragment ' + 12726 e.sn + 12727 ' of level ' + 12728 this.trackId 12729 ), 12730 (this.state = wi); 12731 var s = this.mainDetails; 12732 s && s.fragments[0].start !== r.details.fragments[0].start && li(r.details, s); 12733 } else (this.startFragRequested = !0), t.prototype.loadFragment.call(this, e, r, i); 12734 else this.clearTrackerIfNeeded(e); 12735 }), 12736 (r.flushAudioIfNeeded = function (e) { 12737 var r = this.media, 12738 i = this.bufferedTrack, 12739 n = null == i ? void 0 : i.attrs, 12740 a = e.attrs; 12741 r && 12742 n && 12743 (n.CHANNELS !== a.CHANNELS || i.name !== e.name || i.lang !== e.lang) && 12744 (this.log('Switching audio track : flushing all audio'), 12745 t.prototype.flushMainBuffer.call(this, 0, Number.POSITIVE_INFINITY, 'audio'), 12746 (this.bufferedTrack = null)); 12747 }), 12748 (r.completeAudioSwitch = function (t) { 12749 var e = this.hls; 12750 this.flushAudioIfNeeded(t), 12751 (this.bufferedTrack = t), 12752 (this.switchingTrack = null),
12753 e.trigger(S.AUDIO_TRACK_SWITCHED, i({}, t)); 12754 }), 12755 e 12756 ); 12757 })(_i), 12758 $n = (function (t) { 12759 function e(e) { 12760 var r; 12761 return ( 12762 ((r = t.call(this, e, '[audio-track-controller]') || this).tracks = []), 12763 (r.groupIds = null), 12764 (r.tracksInGroup = []), 12765 (r.trackId = -1), 12766 (r.currentTrack = null), 12767 (r.selectDefaultTrack = !0), 12768 r.registerListeners(), 12769 r 12770 ); 12771 } 12772 l(e, t); 12773 var r = e.prototype; 12774 return ( 12775 (r.registerListeners = function () { 12776 var t = this.hls; 12777 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 12778 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 12779 t.on(S.LEVEL_LOADING, this.onLevelLoading, this), 12780 t.on(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 12781 t.on(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), 12782 t.on(S.ERROR, this.onError, this); 12783 }), 12784 (r.unregisterListeners = function () { 12785 var t = this.hls; 12786 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 12787 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 12788 t.off(S.LEVEL_LOADING, this.onLevelLoading, this), 12789 t.off(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 12790 t.off(S.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this), 12791 t.off(S.ERROR, this.onError, this); 12792 }), 12793 (r.destroy = function () { 12794 this.unregisterListeners(), 12795 (this.tracks.length = 0), 12796 (this.tracksInGroup.length = 0), 12797 (this.currentTrack = null), 12798 t.prototype.destroy.call(this); 12799 }), 12800 (r.onManifestLoading = function () { 12801 (this.tracks = []), 12802 (this.tracksInGroup = []), 12803 (this.groupIds = null), 12804 (this.currentTrack = null), 12805 (this.trackId = -1), 12806 (this.selectDefaultTrack = !0); 12807 }), 12808 (r.onManifestParsed = function (t, e) { 12809 this.tracks = e.audioTracks || []; 12810 }), 12811 (r.onAudioTrackLoaded = function (t, e) { 12812 var r = e.id, 12813 i = e.groupId, 12814 n = e.details, 12815 a = this.tracksInGroup[r]; 12816 if (a && a.groupId === i) { 12817 var s = a.details; 12818 (a.details = e.details), 12819 this.log( 12820 'Audio track ' + 12821 r + 12822 ' "' + 12823 a.name + 12824 '" lang:' + 12825 a.lang + 12826 ' group:' + 12827 i + 12828 ' loaded [' + 12829 n.startSN + 12830 '-' + 12831 n.endSN + 12832 ']' 12833 ), 12834 r === this.trackId && this.playlistLoaded(r, e, s); 12835 } else 12836 this.warn( 12837 'Audio track with id:' + 12838 r + 12839 ' and group:' + 12840 i + 12841 ' not found in active group ' + 12842 (null == a ? void 0 : a.groupId) 12843 ); 12844 }), 12845 (r.onLevelLoading = function (t, e) { 12846 this.switchLevel(e.level); 12847 }), 12848 (r.onLevelSwitching = function (t, e) { 12849 this.switchLevel(e.level); 12850 }), 12851 (r.switchLevel = function (t) { 12852 var e = this.hls.levels[t]; 12853 if (e) { 12854 var r = e.audioGroups || null, 12855 i = this.groupIds, 12856 n = this.currentTrack; 12857 if ( 12858 !r || 12859 (null == i ? void 0 : i.length) !== (null == r ? void 0 : r.length) || 12860 (null != r && 12861 r.some(function (t) { 12862 return -1 === (null == i ? void 0 : i.indexOf(t)); 12863 })) 12864 ) { 12865 (this.groupIds = r), (this.trackId = -1), (this.currentTrack = null); 12866 var a = this.tracks.filter(function (t) { 12867 return !r || -1 !== r.indexOf(t.groupId); 12868 }); 12869 if (a.length) 12870 this.selectDefaultTrack && 12871 !a.some(function (t) { 12872 return t.default; 12873 }) && 12874 (this.selectDefaultTrack = !1), 12875 a.forEach(function (t, e) { 12876 t.id = e; 12877 }); 12878 else if (!n && !this.tracksInGroup.length) return; 12879 this.tracksInGroup = a; 12880 var s = this.hls.config.audioPreference; 12881 if (!n && s) { 12882 var o = Hr(s, a, Yr); 12883 if (o > -1) n = a[o]; 12884 else { 12885 var l = Hr(s, this.tracks); 12886 n = this.tracks[l]; 12887 } 12888 } 12889 var u = this.findTrackId(n); 12890 -1 === u && n && (u = this.findTrackId(null)); 12891 var h = { audioTracks: a }; 12892 this.log( 12893 'Updating audio tracks, ' + 12894 a.length + 12895 ' track(s) found in group(s): ' + 12896 (null == r ? void 0 : r.join(',')) 12897 ), 12898 this.hls.trigger(S.AUDIO_TRACKS_UPDATED, h); 12899 var d = this.trackId; 12900 if (-1 !== u && -1 === d) this.setAudioTrack(u); 12901 else if (a.length && -1 === d) { 12902 var c, 12903 f = new Error(
12904 'No audio track selected for current audio group-ID(s): ' + 12905 (null == (c = this.groupIds) ? void 0 : c.join(',')) + 12906 ' track count: ' + 12907 a.length 12908 ); 12909 this.warn(f.message), 12910 this.hls.trigger(S.ERROR, { 12911 type: L.MEDIA_ERROR, 12912 details: A.AUDIO_TRACK_LOAD_ERROR, 12913 fatal: !0, 12914 error: f, 12915 }); 12916 } 12917 } else this.shouldReloadPlaylist(n) && this.setAudioTrack(this.trackId); 12918 } 12919 }), 12920 (r.onError = function (t, e) { 12921 !e.fatal && 12922 e.context && 12923 (e.context.type !== xe || 12924 e.context.id !== this.trackId || 12925 (this.groupIds && -1 === this.groupIds.indexOf(e.context.groupId)) || 12926 ((this.requestScheduled = -1), this.checkRetry(e))); 12927 }), 12928 (r.setAudioOption = function (t) { 12929 var e = this.hls; 12930 if (((e.config.audioPreference = t), t)) { 12931 var r = this.allAudioTracks; 12932 if (((this.selectDefaultTrack = !1), r.length)) { 12933 var i = this.currentTrack; 12934 if (i && Vr(t, i, Yr)) return i; 12935 var n = Hr(t, this.tracksInGroup, Yr); 12936 if (n > -1) { 12937 var a = this.tracksInGroup[n]; 12938 return this.setAudioTrack(n), a; 12939 } 12940 if (i) { 12941 var s = e.loadLevel; 12942 -1 === s && (s = e.firstAutoLevel); 12943 var o = (function (t, e, r, i, n) { 12944 var a = e[i], 12945 s = e.reduce(function (t, e, r) { 12946 var i = e.uri; 12947 return (t[i] || (t[i] = [])).push(r), t; 12948 }, {})[a.uri]; 12949 s.length > 1 && (i = Math.max.apply(Math, s)); 12950 var o = a.videoRange, 12951 l = a.frameRate, 12952 u = a.codecSet.substring(0, 4), 12953 h = Wr(e, i, function (e) { 12954 if ( 12955 e.videoRange !== o || 12956 e.frameRate !== l || 12957 e.codecSet.substring(0, 4) !== u 12958 ) 12959 return !1; 12960 var i = e.audioGroups, 12961 a = r.filter(function (t) { 12962 return !i || -1 !== i.indexOf(t.groupId); 12963 }); 12964 return Hr(t, a, n) > -1; 12965 }); 12966 return h > -1 12967 ? h 12968 : Wr(e, i, function (e) { 12969 var i = e.audioGroups, 12970 a = r.filter(function (t) { 12971 return !i || -1 !== i.indexOf(t.groupId); 12972 }); 12973 return Hr(t, a, n) > -1; 12974 }); 12975 })(t, e.levels, r, s, Yr); 12976 if (-1 === o) return null; 12977 e.nextLoadLevel = o; 12978 } 12979 if (t.channels || t.audioCodec) { 12980 var l = Hr(t, r); 12981 if (l > -1) return r[l]; 12982 } 12983 } 12984 } 12985 return null; 12986 }), 12987 (r.setAudioTrack = function (t) { 12988 var e = this.tracksInGroup; 12989 if (t < 0 || t >= e.length) this.warn('Invalid audio track id: ' + t); 12990 else { 12991 this.clearTimer(), (this.selectDefaultTrack = !1); 12992 var r = this.currentTrack, 12993 n = e[t], 12994 a = n.details && !n.details.live; 12995 if ( 12996 !( 12997 (t === this.trackId && n === r && a) || 12998 (this.log( 12999 'Switching to audio-track ' + 13000 t + 13001 ' "' + 13002 n.name + 13003 '" lang:' + 13004 n.lang + 13005 ' group:' + 13006 n.groupId + 13007 ' channels:' + 13008 n.channels 13009 ), 13010 (this.trackId = t), 13011 (this.currentTrack = n), 13012 this.hls.trigger(S.AUDIO_TRACK_SWITCHING, i({}, n)), 13013 a) 13014 ) 13015 ) { 13016 var s = this.switchParams(n.url, null == r ? void 0 : r.details, n.details); 13017 this.loadPlaylist(s); 13018 } 13019 } 13020 }), 13021 (r.findTrackId = function (t) { 13022 for (var e = this.tracksInGroup, r = 0; r < e.length; r++) { 13023 var i = e[r]; 13024 if ((!this.selectDefaultTrack || i.default) && (!t || Vr(t, i, Yr))) return r; 13025 } 13026 if (t) { 13027 for ( 13028 var n = t.name, 13029 a = t.lang, 13030 s = t.assocLang, 13031 o = t.characteristics, 13032 l = t.audioCodec, 13033 u = t.channels, 13034 h = 0; 13035 h < e.length; 13036 h++ 13037 ) 13038 if ( 13039 Vr( 13040 { 13041 name: n, 13042 lang: a, 13043 assocLang: s, 13044 characteristics: o, 13045 audioCodec: l, 13046 channels: u, 13047 }, 13048 e[h], 13049 Yr 13050 ) 13051 ) 13052 return h; 13053 for (var d = 0; d < e.length; d++) { 13054 var c = e[d];
13055 if (zn(t.attrs, c.attrs, ['LANGUAGE', 'ASSOC-LANGUAGE', 'CHARACTERISTICS'])) 13056 return d; 13057 } 13058 for (var f = 0; f < e.length; f++) { 13059 var g = e[f]; 13060 if (zn(t.attrs, g.attrs, ['LANGUAGE'])) return f; 13061 } 13062 } 13063 return -1; 13064 }), 13065 (r.loadPlaylist = function (e) { 13066 var r = this.currentTrack; 13067 if (this.shouldLoadPlaylist(r) && r) { 13068 t.prototype.loadPlaylist.call(this); 13069 var i = r.id, 13070 n = r.groupId, 13071 a = r.url; 13072 if (e) 13073 try { 13074 a = e.addDirectives(a); 13075 } catch (t) { 13076 this.warn('Could not construct new URL with HLS Delivery Directives: ' + t); 13077 } 13078 this.log( 13079 'loading audio-track playlist ' + 13080 i + 13081 ' "' + 13082 r.name + 13083 '" lang:' + 13084 r.lang + 13085 ' group:' + 13086 n 13087 ), 13088 this.clearTimer(), 13089 this.hls.trigger(S.AUDIO_TRACK_LOADING, { 13090 url: a, 13091 id: i, 13092 groupId: n, 13093 deliveryDirectives: e || null, 13094 }); 13095 } 13096 }), 13097 s(e, [ 13098 { 13099 key: 'allAudioTracks', 13100 get: function () { 13101 return this.tracks; 13102 }, 13103 }, 13104 { 13105 key: 'audioTracks', 13106 get: function () { 13107 return this.tracksInGroup; 13108 }, 13109 }, 13110 { 13111 key: 'audioTrack', 13112 get: function () { 13113 return this.trackId; 13114 }, 13115 set: function (t) { 13116 (this.selectDefaultTrack = !1), this.setAudioTrack(t); 13117 }, 13118 }, 13119 ]), 13120 e 13121 ); 13122 })(Fr), 13123 Zn = (function (t) { 13124 function e(e, r, i) { 13125 var n; 13126 return ( 13127 ((n = 13128 t.call(this, e, r, i, '[subtitle-stream-controller]', Oe) || this).currentTrackId = 13129 -1), 13130 (n.tracksBuffered = []), 13131 (n.mainDetails = null), 13132 n._registerListeners(), 13133 n 13134 ); 13135 } 13136 l(e, t); 13137 var r = e.prototype; 13138 return ( 13139 (r.onHandlerDestroying = function () { 13140 this._unregisterListeners(), 13141 t.prototype.onHandlerDestroying.call(this), 13142 (this.mainDetails = null); 13143 }), 13144 (r._registerListeners = function () { 13145 var t = this.hls; 13146 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 13147 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 13148 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 13149 t.on(S.LEVEL_LOADED, this.onLevelLoaded, this), 13150 t.on(S.ERROR, this.onError, this), 13151 t.on(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), 13152 t.on(S.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this), 13153 t.on(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), 13154 t.on(S.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this), 13155 t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 13156 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this); 13157 }), 13158 (r._unregisterListeners = function () { 13159 var t = this.hls; 13160 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 13161 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 13162 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 13163 t.off(S.LEVEL_LOADED, this.onLevelLoaded, this), 13164 t.off(S.ERROR, this.onError, this), 13165 t.off(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUp
13165dated, this), 13166 t.off(S.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this), 13167 t.off(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), 13168 t.off(S.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this), 13169 t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 13170 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this); 13171 }), 13172 (r.startLoad = function (t) { 13173 this.stopLoad(), 13174 (this.state = Ti), 13175 this.setInterval(500), 13176 (this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t), 13177 this.tick(); 13178 }), 13179 (r.onManifestLoading = function () { 13180 (this.mainDetails = null), this.fragmentTracker.removeAllFragments(); 13181 }), 13182 (r.onMediaDetaching = function () { 13183 (this.tracksBuffered = []), t.prototype.onMediaDetaching.call(this); 13184 }), 13185 (r.onLevelLoaded = function (t, e) { 13186 this.mainDetails = e.details; 13187 }), 13188 (r.onSubtitleFragProcessed = function (t, e) { 13189 var r = e.frag, 13190 i = e.success; 13191 if (((this.fragPrevious = r), (this.state = Ti), i)) { 13192 var n = this.tracksBuffered[this.currentTrackId]; 13193 if (n) { 13194 for (var a, s = r.start, o = 0; o < n.length; o++) 13195 if (s >= n[o].start && s <= n[o].end) { 13196 a = n[o]; 13197 break; 13198 } 13199 var l = r.start + r.duration; 13200 a ? (a.end = l) : ((a = { start: s, end: l }), n.push(a)), 13201 this.fragmentTracker.fragBuffered(r), 13202 this.fragBufferedComplete(r, null); 13203 } 13204 } 13205 }), 13206 (r.onBufferFlushing = function (t, e) { 13207 var r = e.startOffset, 13208 i = e.endOffset; 13209 if (0 === r && i !== Number.POSITIVE_INFINITY) { 13210 var n = i - 1; 13211 if (n <= 0) return; 13212 (e.endOffsetSubtitles = Math.max(0, n)), 13213 this.tracksBuffered.forEach(function (t) { 13214 for (var e = 0; e < t.length; ) 13215 if (t[e].end <= n) t.shift(); 13216 else { 13217 if (!(t[e].start < n)) break; 13218 (t[e].start = n), e++; 13219 } 13220 }), 13221 this.fragmentTracker.removeFragmentsInRange(r, n, Oe); 13222 } 13223 }), 13224 (r.onFragBuffered = function (t, e) { 13225 var r; 13226 this.loadedmetadata || 13227 e.frag.type !== Fe || 13228 (null != (r = this.media) && r.buffered.length && (this.loadedmetadata = !0)); 13229 }), 13230 (r.onError = function (t, e) { 13231 var r = e.frag; 13232 (null == r ? void 0 : r.type) === Oe && 13233 (e.details === A.FRAG_GAP && this.fragmentTracker.fragBuffered(r, !0), 13234 this.fragCurrent && this.fragCurrent.abortRequests(), 13235 this.state !== Ei && (this.state = Ti)); 13236 }), 13237 (r.onSubtitleTracksUpdated = function (t, e) { 13238 var r = this, 13239 i = e.subtitleTracks; 13240 this.levels && Xn(this.levels, i) 13241 ? (this.levels = i.map(function (t) { 13242 return new or(t); 13243 })) 13244 : ((this.tracksBuffered = []), 13245 (this.levels = i.map(function (t) { 13246 var e = new or(t); 13247 return (r.tracksBuffered[e.id] = []), e; 13248 })), 13249 this.fragmentTracker.removeFragmentsInRange(0, Number.POSITIVE_INFINITY, Oe), 13250 (this.fragPrevious = null), 13251 (this.mediaBuffer = null)); 13252 }), 13253 (r.onSubtitleTrackSwitch = function (t, e) { 13254 var r; 13255 if ( 13256 ((this.currentTrackId = e.id), 13257 null != (r = this.levels) && r.length && -1 !== this.currentTrackId) 13258 ) { 13259 var i = this.levels[this.currentTrackId]; 13260 null != i && i.details 13261 ? (this.mediaBuffer = this.mediaBufferTimeRanges) 13262 : (this.mediaBuffer = null),
13263 i && this.setInterval(500); 13264 } else this.clearInterval(); 13265 }), 13266 (r.onSubtitleTrackLoaded = function (t, e) { 13267 var r, 13268 i = this.currentTrackId, 13269 n = this.levels, 13270 a = e.details, 13271 s = e.id; 13272 if (n) { 13273 var o = n[s]; 13274 if (!(s >= n.length) && o) { 13275 this.log( 13276 'Subtitle track ' + 13277 s + 13278 ' loaded [' + 13279 a.startSN + 13280 ',' + 13281 a.endSN + 13282 ']' + 13283 (a.lastPartSn ? '[part-' + a.lastPartSn + '-' + a.lastPartIndex + ']' : '') + 13284 ',duration:' + 13285 a.totalduration 13286 ), 13287 (this.mediaBuffer = this.mediaBufferTimeRanges); 13288 var l = 0; 13289 if (a.live || (null != (r = o.details) && r.live)) { 13290 var u = this.mainDetails; 13291 if (a.deltaUpdateFailed || !u) return; 13292 var h, 13293 d = u.fragments[0]; 13294 o.details 13295 ? 0 === 13296 (l = this.alignPlaylists( 13297 a, 13298 o.details, 13299 null == (h = this.levelLastLoaded) ? void 0 : h.details 13300 )) && 13301 d && 13302 fr(a, (l = d.start)) 13303 : a.hasProgramDateTime && u.hasProgramDateTime
13304 ? (li(a, u), (l = a.fragments[0].start)) 13305 : d && fr(a, (l = d.start)); 13306 } 13307 (o.details = a), 13308 (this.levelLastLoaded = o), 13309 s === i && 13310 (this.startFragRequested || 13311 (!this.mainDetails && a.live) || 13312 this.setStartPosition(this.mainDetails || a, l), 13313 this.tick(), 13314 a.live && 13315 !this.fragCurrent && 13316 this.media && 13317 this.state === Ti && 13318 (Ar(null, a.fragments, this.media.currentTime, 0) || 13319 (this.warn('Subtitle playlist not aligned with playback'), 13320 (o.details = void 0)))); 13321 } 13322 } else this.warn('Subtitle tracks were reset while loading level ' + s); 13323 }), 13324 (r._handleFragmentLoadComplete = function (t) { 13325 var e = this, 13326 r = t.frag, 13327 i = t.payload, 13328 n = r.decryptdata, 13329 a = this.hls; 13330 if ( 13331 !this.fragContextChanged(r) && 13332 i && 13333 i.byteLength > 0 && 13334 null != n && 13335 n.key && 13336 n.iv && 13337 'AES-128' === n.method 13338 ) { 13339 var s = performance.now(); 13340 this.decrypter 13341 .decrypt(new Uint8Array(i), n.key.buffer, n.iv.buffer) 13342 .catch(function (t) { 13343 throw ( 13344 (a.trigger(S.ERROR, { 13345 type: L.MEDIA_ERROR, 13346 details: A.FRAG_DECRYPT_ERROR, 13347 fatal: !1, 13348 error: t, 13349 reason: t.message, 13350 frag: r, 13351 }), 13352 t) 13353 ); 13354 }) 13355 .then(function (t) { 13356 var e = performance.now(); 13357 a.trigger(S.FRAG_DECRYPTED, { 13358 frag: r, 13359 payload: t, 13360 stats: { tstart: s, tdecrypt: e }, 13361 }); 13362 }) 13363 .catch(function (t) { 13364 e.warn(t.name + ': ' + t.message), (e.state = Ti); 13365 }); 13366 } 13367 }), 13368 (r.doTick = function () { 13369 if (this.media) { 13370 if (this.state === Ti) { 13371 var t = this.currentTrackId, 13372 e = this.levels, 13373 r = null == e ? void 0 : e[t]; 13374 if (!r || !e.length || !r.details) return; 13375 var i = this.config, 13376 n = this.getLoadPosition(), 13377 a = ri.bufferedInfo( 13378 this.tracksBuffered[this.currentTrackId] || [], 13379 n, 13380 i.maxBufferHole 13381 ), 13382 s = a.end, 13383 o = a.len, 13384 l = this.getFwdBufferInfo(this.media, Fe), 13385 u = r.details; 13386 if ( 13387 o > 13388 this.getMaxBufferLength(null == l ? void 0 : l.len) + u.levelTargetDuration 13389 ) 13390 return; 13391 var h = u.fragments, 13392 d = h.length, 13393 c = u.edge, 13394 f = null, 13395 g = this.fragPrevious; 13396 if (s < c) { 13397 var v = i.maxFragLookUpTolerance, 13398 m = s > c - v ? 0 : v; 13399 !(f = Ar(g, h, Math.max(h[0].start, s), m)) && 13400 g && 13401 g.start < h[0].start && 13402 (f = h[0]); 13403 } else f = h[d - 1]; 13404 if (!f) return; 13405 if ('initSegment' !== (f = this.mapToInitFragWhenRequired(f)).sn) { 13406 var p = h[f.sn - u.startSN - 1]; 13407 p && p.cc === f.cc && this.fragmentTracker.getState(p) === Xr && (f = p); 13408 } 13409 this.fragmentTracker.getState(f) === Xr && this.loadFragment(f, r, s); 13410 } 13411 } else this.state = Ti; 13412 }), 13413 (r.getMaxBufferLength = function (e) { 13414 var r = t.prototype.getMaxBufferLength.call(this); 13415 return e ? Math.max(r, e) : r; 13416 }), 13417 (r.loadFragment = function (e, r, i) { 13418 (this.fragCurrent = e), 13419 'initSegment' === e.sn 13420 ? this._loadInitSegment(e, r) 13421 : ((this.startFragRequested = !0), t.prototype.loadFragment.call(this, e, r, i)); 13422 }), 13423 s(e, [ 13424 { 13425 key: 'mediaBufferTimeRanges', 13426 get: function () { 13427 return new ta(this.tracksBuffered[this.currentTrackId] || []); 13428 }, 13429 }, 13430 ]), 13431 e 13432 ); 13433 })(_i), 13434 ta = function (t) { 13435 this.buffered = void 0; 13436 var e = function (e, r, i) { 13437 if ((r >>>= 0) > i - 1) 13438 throw new DOMException( 13439 "Failed to execute '" + 13440 e + 13441 "' on 'TimeRanges': The index provided (" + 13442 r + 13443 ') is greater than the maximum bound (' + 13444 i + 13445 ')' 13446 ); 13447 return t[r][e]; 13448 }; 13449 this.buffered = { 13450 get length() { 13451 return t.length; 13452 }, 13453 end: function (r) { 13454 return e('end', r, t.length); 13455 }, 13456 start: function (r) { 13457 return e('start', r, t.length); 13458 }, 13459 }; 13460 }, 13461 ea = (function (t) { 13462 function e(e) { 13463 var r; 13464 return ( 13465 ((r = t.call(this, e, '[subtitle-track-controller]') || this).media = null),
13466 (r.tracks = []), 13467 (r.groupIds = null), 13468 (r.tracksInGroup = []), 13469 (r.trackId = -1), 13470 (r.currentTrack = null), 13471 (r.selectDefaultTrack = !0), 13472 (r.queuedDefaultTrack = -1), 13473 (r.asyncPollTrackChange = function () { 13474 return r.pollTrackChange(0); 13475 }), 13476 (r.useTextTrackPolling = !1), 13477 (r.subtitlePollingInterval = -1), 13478 (r._subtitleDisplay = !0), 13479 (r.onTextTracksChanged = function () { 13480 if ( 13481 (r.useTextTrackPolling || self.clearInterval(r.subtitlePollingInterval), 13482 r.media && r.hls.config.renderTextTracksNatively) 13483 ) { 13484 for (var t = null, e = Ye(r.media.textTracks), i = 0; i < e.length; i++) 13485 if ('hidden' === e[i].mode) t = e[i]; 13486 else if ('showing' === e[i].mode) { 13487 t = e[i]; 13488 break; 13489 } 13490 var n = r.findTrackForTextTrack(t); 13491 r.subtitleTrack !== n && r.setSubtitleTrack(n); 13492 } 13493 }), 13494 r.registerListeners(), 13495 r 13496 ); 13497 } 13498 l(e, t); 13499 var r = e.prototype; 13500 return ( 13501 (r.destroy = function () { 13502 this.unregisterListeners(), 13503 (this.tracks.length = 0), 13504 (this.tracksInGroup.length = 0), 13505 (this.currentTrack = null), 13506 (this.onTextTracksChanged = this.asyncPollTrackChange = null), 13507 t.prototype.destroy.call(this); 13508 }), 13509 (r.registerListeners = function () { 13510 var t = this.hls; 13511 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 13512 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 13513 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 13514 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 13515 t.on(S.LEVEL_LOADING, this.onLevelLoading, this), 13516 t.on(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 13517 t.on(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), 13518 t.on(S.ERROR, this.onError, this); 13519 }), 13520 (r.unregisterListeners = function () { 13521 var t = this.hls; 13522 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 13523 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 13524 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 13525 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 13526 t.off(S.LEVEL_LOADING, this.onLevelLoading, this), 13527 t.off(S.LEVEL_SWITCHING, this.onLevelSwitching, this), 13528 t.off(S.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this), 13529 t.off(S.ERROR, this.onError, this); 13530 }), 13531 (r.onMediaAttached = function (t, e) { 13532 (this.media = e.media), 13533 this.media && 13534 (this.queuedDefaultTrack > -1 && 13535 ((this.subtitleTrack = this.queuedDefaultTrack), 13536 (this.queuedDefaultTrack = -1)), 13537 (this.useTextTrackPolling = !( 13538 this.media.textTracks && 'onchange' in this.media.textTracks 13539 )), 13540 this.useTextTrackPolling 13541 ? this.pollTrackChange(500) 13542 : this.media.textTracks.addEventListener('change', this.asyncPollTrackChange)); 13543 }), 13544 (r.pollTrackChange = function (t) { 13545 self.clearInterval(this.subtitlePollingInterval), 13546 (this.subtitlePollingInterval = self.setInterval(this.onTextTracksChanged, t)); 13547 }), 13548 (r.onMediaDetaching = function () { 13549 this.media && 13550 (self.clearInterval(this.subtitlePollingInterval), 13551 this.useTextTrackPolling || 13552 this.media.textTracks.removeEventListener('change', this.asyncPollTrackChange), 13553 this.trackId > -1 && (this.queuedDefaultTrack = this.trackId),
13554 Ye(this.media.textTracks).forEach(function (t) { 13555 He(t); 13556 }), 13557 (this.subtitleTrack = -1), 13558 (this.media = null)); 13559 }), 13560 (r.onManifestLoading = function () { 13561 (this.tracks = []), 13562 (this.groupIds = null), 13563 (this.tracksInGroup = []), 13564 (this.trackId = -1), 13565 (this.currentTrack = null), 13566 (this.selectDefaultTrack = !0); 13567 }), 13568 (r.onManifestParsed = function (t, e) { 13569 this.tracks = e.subtitleTracks; 13570 }), 13571 (r.onSubtitleTrackLoaded = function (t, e) { 13572 var r = e.id, 13573 i = e.groupId, 13574 n = e.details, 13575 a = this.tracksInGroup[r]; 13576 if (a && a.groupId === i) { 13577 var s = a.details; 13578 (a.details = e.details), 13579 this.log( 13580 'Subtitle track ' + 13581 r + 13582 ' "' + 13583 a.name + 13584 '" lang:' + 13585 a.lang + 13586 ' group:' + 13587 i + 13588 ' loaded [' + 13589 n.startSN + 13590 '-' + 13591 n.endSN + 13592 ']' 13593 ), 13594 r === this.trackId && this.playlistLoaded(r, e, s); 13595 } else 13596 this.warn( 13597 'Subtitle track with id:' + 13598 r + 13599 ' and group:' + 13600 i + 13601 ' not found in active group ' + 13602 (null == a ? void 0 : a.groupId) 13603 ); 13604 }), 13605 (r.onLevelLoading = function (t, e) { 13606 this.switchLevel(e.level); 13607 }), 13608 (r.onLevelSwitching = function (t, e) { 13609 this.switchLevel(e.level); 13610 }), 13611 (r.switchLevel = function (t) { 13612 var e = this.hls.levels[t]; 13613 if (e) { 13614 var r = e.subtitleGroups || null, 13615 i = this.groupIds, 13616 n = this.currentTrack; 13617 if ( 13618 !r || 13619 (null == i ? void 0 : i.length) !== (null == r ? void 0 : r.length) || 13620 (null != r && 13621 r.some(function (t) { 13622 return -1 === (null == i ? void 0 : i.indexOf(t)); 13623 })) 13624 ) { 13625 (this.groupIds = r), (this.trackId = -1), (this.currentTrack = null); 13626 var a = this.tracks.filter(function (t) { 13627 return !r || -1 !== r.indexOf(t.groupId); 13628 }); 13629 if (a.length) 13630 this.selectDefaultTrack && 13631 !a.some(function (t) { 13632 return t.default; 13633 }) && 13634 (this.selectDefaultTrack = !1), 13635 a.forEach(function (t, e) { 13636 t.id = e; 13637 }); 13638 else if (!n && !this.tracksInGroup.length) return; 13639 this.tracksInGroup = a; 13640 var s = this.hls.config.subtitlePreference; 13641 if (!n && s) { 13642 this.selectDefaultTrack = !1; 13643 var o = Hr(s, a); 13644 if (o > -1) n = a[o]; 13645 else { 13646 var l = Hr(s, this.tracks); 13647 n = this.tracks[l]; 13648 } 13649 } 13650 var u = this.findTrackId(n); 13651 -1 === u && n && (u = this.findTrackId(null)); 13652 var h = { subtitleTracks: a }; 13653 this.log( 13654 'Updating subtitle tracks, ' + 13655 a.length + 13656 ' track(s) found in "' + 13657 (null == r ? void 0 : r.join(',')) + 13658 '" group-id' 13659 ), 13660 this.hls.trigger(S.SUBTITLE_TRACKS_UPDATED, h), 13661 -1 !== u && -1 === this.trackId && this.setSubtitleTrack(u); 13662 } else this.shouldReloadPlaylist(n) && this.setSubtitleTrack(this.trackId); 13663 } 13664 }), 13665 (r.findTrackId = function (t) { 13666 for ( 13667 var e = this.tracksInGroup, r = this.selectDefaultTrack, i = 0; 13668 i < e.length; 13669 i++ 13670 ) { 13671 var n = e[i]; 13672 if ((!r || n.default) && (r || t) && (!t || Vr(n, t))) return i; 13673 } 13674 if (t) { 13675 for (var a = 0; a < e.length; a++) { 13676 var s = e[a];
13677 if (zn(t.attrs, s.attrs, ['LANGUAGE', 'ASSOC-LANGUAGE', 'CHARACTERISTICS'])) 13678 return a; 13679 } 13680 for (var o = 0; o < e.length; o++) { 13681 var l = e[o]; 13682 if (zn(t.attrs, l.attrs, ['LANGUAGE'])) return o; 13683 } 13684 } 13685 return -1; 13686 }), 13687 (r.findTrackForTextTrack = function (t) { 13688 if (t) 13689 for (var e = this.tracksInGroup, r = 0; r < e.length; r++) 13690 if (Qn(e[r], t)) return r; 13691 return -1; 13692 }), 13693 (r.onError = function (t, e) { 13694 !e.fatal && 13695 e.context && 13696 (e.context.type !== Pe || 13697 e.context.id !== this.trackId || 13698 (this.groupIds && -1 === this.groupIds.indexOf(e.context.groupId)) || 13699 this.checkRetry(e)); 13700 }), 13701 (r.setSubtitleOption = function (t) { 13702 if (((this.hls.config.subtitlePreference = t), t)) { 13703 var e = this.allSubtitleTracks; 13704 if (((this.selectDefaultTrack = !1), e.length)) { 13705 var r = this.currentTrack; 13706 if (r && Vr(t, r)) return r; 13707 var i = Hr(t, this.tracksInGroup); 13708 if (i > -1) { 13709 var n = this.tracksInGroup[i]; 13710 return this.setSubtitleTrack(i), n; 13711 } 13712 if (r) return null; 13713 var a = Hr(t, e); 13714 if (a > -1) return e[a]; 13715 } 13716 } 13717 return null; 13718 }), 13719 (r.loadPlaylist = function (e) { 13720 t.prototype.loadPlaylist.call(this); 13721 var r = this.currentTrack; 13722 if (this.shouldLoadPlaylist(r) && r) { 13723 var i = r.id, 13724 n = r.groupId, 13725 a = r.url; 13726 if (e) 13727 try { 13728 a = e.addDirectives(a); 13729 } catch (t) { 13730 this.warn('Could not construct new URL with HLS Delivery Directives: ' + t); 13731 } 13732 this.log('Loading subtitle playlist for id ' + i), 13733 this.hls.trigger(S.SUBTITLE_TRACK_LOADING, { 13734 url: a, 13735 id: i, 13736 groupId: n, 13737 deliveryDirectives: e || null, 13738 }); 13739 } 13740 }), 13741 (r.toggleTrackModes = function () { 13742 var t = this.media; 13743 if (t) { 13744 var e, 13745 r = Ye(t.textTracks), 13746 i = this.currentTrack; 13747 if ( 13748 (i && 13749 ((e = r.filter(function (t) { 13750 return Qn(i, t); 13751 })[0]) || 13752 this.warn( 13753 'Unable to find subtitle TextTrack with name "' + 13754 i.name + 13755 '" and language "' + 13756 i.lang + 13757 '"' 13758 )), 13759 [].slice.call(r).forEach(function (t) { 13760 'disabled' !== t.mode && t !== e && (t.mode = 'disabled'); 13761 }), 13762 e) 13763 ) { 13764 var n = this.subtitleDisplay ? 'showing' : 'hidden'; 13765 e.mode !== n && (e.mode = n); 13766 } 13767 } 13768 }), 13769 (r.setSubtitleTrack = function (t) { 13770 var e = this.tracksInGroup; 13771 if (this.media) 13772 if (t < -1 || t >= e.length || !y(t)) this.warn('Invalid subtitle track id: ' + t); 13773 else { 13774 this.clearTimer(), (this.selectDefaultTrack = !1); 13775 var r = this.currentTrack, 13776 i = e[t] || null; 13777 if (((this.trackId = t), (this.currentTrack = i), this.toggleTrackModes(), i)) { 13778 var n = !!i.details && !i.details.live; 13779 if (t !== this.trackId || i !== r || !n) { 13780 this.log( 13781 'Switching to subtitle-track ' + 13782 t + 13783 (i ? ' "' + i.name + '" lang:' + i.lang + ' group:' + i.groupId : '') 13784 ); 13785 var a = i.id, 13786 s = i.groupId, 13787 o = void 0 === s ? '' : s, 13788 l = i.name, 13789 u = i.type, 13790 h = i.url; 13791 this.hls.trigger(S.SUBTITLE_TRACK_SWITCH, { 13792 id: a, 13793 groupId: o, 13794 name: l, 13795 type: u, 13796 url: h, 13797 }); 13798 var d = this.switchParams(i.url, null == r ? void 0 : r.details, i.details); 13799 this.loadPlaylist(d); 13800 } 13801 } else this.hls.trigger(S.SUBTITLE_TRACK_SWITCH, { id: t }); 13802 } 13803 else this.queuedDefaultTrack = t; 13804 }), 13805 s(e, [ 13806 { 13807 key: 'subtitleDisplay', 13808 get: function () { 13809 return this._subtitleDisplay; 13810 }, 13811 set: function (t) { 13812 (this._subtitleDisplay = t), this.trackId > -1 && this.toggleTrackModes(); 13813 }, 13814 }, 13815 { 13816 key: 'allSubtitleTracks', 13817 get: function () { 13818 return this.tracks; 13819 }, 13820 }, 13821 { 13822 key: 'subtitleTracks', 13823 get: function () { 13824 return this.tracksInGroup; 13825 }, 13826 }, 13827 { 13828 key: 'subtitleTrack', 13829 get: function () { 13830 return this.trackId; 13831 }, 13832 set: function (t) { 13833 (this.selectDefaultTrack = !1), this.setSubtitleTrack(t); 13834 }, 13835 }, 13836 ]), 13837 e 13838 ); 13839 })(Fr), 13840 ra = (function () { 13841 function t(t) { 13842 (this.buffers = void 0), 13843 (this.queues = { video: [], audio: [], audiovideo: [] }), 13844 (this.buffers = t); 13845 } 13846 var e = t.prototype; 13847 return ( 13848 (e.append = function (t, e, r) { 13849 var i = this.queues[e]; 13850 i.push(t), 1 !== i.length || r || this.executeNext(e); 13851 }), 13852 (e.insertAbort = function (t, e) { 13853 this.queues[e].unshift(t), this.executeNext(e); 13854 }), 13855 (e.appendBlocker = function (t) { 13856 var e, 13857 r = new Promise(function (t) { 13858 e = t; 13859 }), 13860 i = { 13861 execute: e, 13862 onStart: function () {}, 13863 onComplete: function () {}, 13864 onError: function () {}, 13865 }; 13866 return this.append(i, t), r; 13867 }), 13868 (e.executeNext = function (t) { 13869 var e = this.queues[t]; 13870 if (e.length) { 13871 var r = e[0]; 13872 try { 13873 r.execute(); 13874 } catch (e) { 13875 w.warn( 13876 '[buffer-operation-queue]: Exception executing "' + 13877 t + 13878 '" SourceBuffer operation: ' + 13879 e 13880 ), 13881 r.onError(e); 13882 var i = this.buffers[t]; 13883 (null != i && i.updating) || this.shiftAndExecuteNext(t); 13884 } 13885 } 13886 }), 13887 (e.shiftAndExecuteNext = function (t) { 13888 this.queues[t].shift(), this.executeNext(t); 13889 }), 13890 (e.current = function (t) { 13891 return this.queues[t][0]; 13892 }), 13893 t 13894 ); 13895 })(), 13896 ia = /(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\.[^.,]+)+/, 13897 na = (function () { 13898 function t(t) { 13899 var e = this; 13900 (this.details = null),
13901 (this._objectUrl = null), 13902 (this.operationQueue = void 0), 13903 (this.listeners = void 0), 13904 (this.hls = void 0), 13905 (this.bufferCodecEventsExpected = 0), 13906 (this._bufferCodecEventsTotal = 0), 13907 (this.media = null), 13908 (this.mediaSource = null), 13909 (this.lastMpegAudioChunk = null), 13910 (this.appendSource = void 0), 13911 (this.appendErrors = { audio: 0, video: 0, audiovideo: 0 }), 13912 (this.tracks = {}), 13913 (this.pendingTracks = {}), 13914 (this.sourceBuffer = void 0), 13915 (this.log = void 0), 13916 (this.warn = void 0), 13917 (this.error = void 0), 13918 (this._onEndStreaming = function (t) { 13919 e.hls && e.hls.pauseBuffering(); 13920 }), 13921 (this._onStartStreaming = function (t) { 13922 e.hls && e.hls.resumeBuffering(); 13923 }), 13924 (this._onMediaSourceOpen = function () { 13925 var t = e.media, 13926 r = e.mediaSource; 13927 e.log('Media source opened'), 13928 t && 13929 (t.removeEventListener('emptied', e._onMediaEmptied), 13930 e.updateMediaElementDuration(), 13931 e.hls.trigger(S.MEDIA_ATTACHED, { media: t, mediaSource: r })), 13932 r && r.removeEventListener('sourceopen', e._onMediaSourceOpen), 13933 e.checkPendingTracks(); 13934 }), 13935 (this._onMediaSourceClose = function () { 13936 e.log('Media source closed'); 13937 }), 13938 (this._onMediaSourceEnded = function () { 13939 e.log('Media source ended'); 13940 }), 13941 (this._onMediaEmptied = function () { 13942 var t = e.mediaSrc, 13943 r = e._objectUrl; 13944 t !== r && 13945 w.error( 13946 'Media element src was set while attaching MediaSource (' + r + ' > ' + t + ')' 13947 ); 13948 }), 13949 (this.hls = t); 13950 var r, 13951 i = '[buffer-controller]'; 13952 (this.appendSource = 13953 ((r = se(t.config.preferManagedMediaSource)), 13954 'undefined' != typeof self && r === self.ManagedMediaSource)), 13955 (this.log = w.log.bind(w, i)), 13956 (this.warn = w.warn.bind(w, i)), 13957 (this.error = w.error.bind(w, i)), 13958 this._initSourceBuffer(), 13959 this.registerListeners(); 13960 } 13961 var e = t.prototype; 13962 return ( 13963 (e.hasSourceTypes = function () { 13964 return (
13965 this.getSourceBufferTypes().length > 0 || Object.keys(this.pendingTracks).length > 0 13966 ); 13967 }), 13968 (e.destroy = function () { 13969 this.unregisterListeners(), 13970 (this.details = null), 13971 (this.lastMpegAudioChunk = null), 13972 (this.hls = null); 13973 }), 13974 (e.registerListeners = function () { 13975 var t = this.hls; 13976 t.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 13977 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 13978 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 13979 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 13980 t.on(S.BUFFER_RESET, this.onBufferReset, this), 13981 t.on(S.BUFFER_APPENDING, this.onBufferAppending, this), 13982 t.on(S.BUFFER_CODECS, this.onBufferCodecs, this), 13983 t.on(S.BUFFER_EOS, this.onBufferEos, this), 13984 t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 13985 t.on(S.LEVEL_UPDATED, this.onLevelUpdated, this), 13986 t.on(S.FRAG_PARSED, this.onFragParsed, this), 13987 t.on(S.FRAG_CHANGED, this.onFragChanged, this); 13988 }), 13989 (e.unregisterListeners = function () { 13990 var t = this.hls; 13991 t.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 13992 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 13993 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 13994 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 13995 t.off(S.BUFFER_RESET, this.onBufferReset, this), 13996 t.off(S.BUFFER_APPENDING, this.onBufferAppending, this), 13997 t.off(S.BUFFER_CODECS, this.onBufferCodecs, this), 13998 t.off(S.BUFFER_EOS, this.onBufferEos, this), 13999 t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 14000 t.off(S.LEVEL_UPDATED, this.onLevelUpdated, this), 14001 t.off(S.FRAG_PARSED, this.onFragParsed, this), 14002 t.off(S.FRAG_CHANGED, this.onFragChanged, this); 14003 }), 14004 (e._initSourceBuffer = function () { 14005 (this.sourceBuffer = {}), 14006 (this.operationQueue = new ra(this.sourceBuffer)), 14007 (this.listeners = { audio: [], video: [], audiovideo: [] }), 14008 (this.appendErrors = { audio: 0, video: 0, audiovideo: 0 }), 14009 (this.lastMpegAudioChunk = null); 14010 }), 14011 (e.onManifestLoading = function () { 14012 (this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = 0), 14013 (this.details = null); 14014 }), 14015 (e.onManifestParsed = function (t, e) { 14016 var r = 2; 14017 ((e.audio && !e.video) || !e.altAudio) && (r = 1), 14018 (this.bufferCodecEventsExpected = this._bufferCodecEventsTotal = r), 14019 this.log(this.bufferCodecEventsExpected + ' bufferCodec event(s) expected'); 14020 }), 14021 (e.onMediaAttaching = function (t, e) { 14022 var r = (this.media = e.media), 14023 i = se(this.appendSource); 14024 if (r && i) { 14025 var n, 14026 a = (this.mediaSource = new i()); 14027 this.log( 14028 'created media source: ' + (null == (n = a.constructor) ? void 0 : n.name) 14029 ), 14030 a.addEventListener('sourceopen', this._onMediaSourceOpen), 14031 a.addEventListener('sourceended', this._onMediaSourceEnded), 14032 a.addEventListener('sourceclose', this._onMediaSourceClose), 14033 this.appendSource && 14034 (a.addEventListener('startstreaming', this._onStartStreaming), 14035 a.addEventListener('endstreaming', this._onEndStreaming)); 14036 var s = (this._objectUrl = self.URL.createObjectURL(a)); 14037 if (this.appendSource) 14038 try { 14039 r.removeAttribute('src'); 14040 var o = self.ManagedMediaSource; 14041 (r.disableRemotePlayback = r.disableRemotePlayback || (o && a instanceof o)), 14042 aa(r), 14043 (function (t, e) { 14044 var r = self.document.createElement('source'); 14045 (r.type = 'video/mp4'), (r.src = e), t.appendChild(r); 14046 })(r, s), 14047 r.load(); 14048 } catch (t) { 14049 r.src = s; 14050 } 14051 else r.src = s; 14052 r.addEventListener('emptied', this._onMediaEmptied); 14053 } 14054 }), 14055 (e.onMediaDetaching = function () { 14056 var t = this.media, 14057 e = this.mediaSource, 14058 r = this._objectUrl; 14059 if (e) { 14060 if ((this.log('media source detaching'), 'open' === e.readyState)) 14061 try { 14062 e.endOfStream(); 14063 } catch (t) { 14064 this.warn('onMediaDetaching: ' + t.message + ' while calling endOfStream'); 14065 } 14066 this.onBufferReset(), 14067 e.removeEventListener('sourceopen', this._onMediaSourceOpen), 14068 e.removeEventListener('sourceended', this._onMediaSourceEnded), 14069 e.removeEventListener('sourceclose', this._onMediaSourceClose), 14070 this.appendSource && 14071 (e.removeEventListener('startstreaming', this._onStartStreaming), 14072 e.removeEventListener('endstreaming', this._onEndStreaming)), 14073 t && 14074 (t.removeEventListener('emptied', this._onMediaEmptied), 14075 r && self.URL.revokeObjectURL(r), 14076 this.mediaSrc === r 14077 ? (t.removeAttribute('src'), this.appendSource && aa(t), t.load()) 14078 : this.warn('media|source.src was changed by a third party - skip cleanup')), 14079 (this.mediaSource = null),
14080 (this.media = null), 14081 (this._objectUrl = null), 14082 (this.bufferCodecEventsExpected = this._bufferCodecEventsTotal), 14083 (this.pendingTracks = {}), 14084 (this.tracks = {}); 14085 } 14086 this.hls.trigger(S.MEDIA_DETACHED, void 0); 14087 }), 14088 (e.onBufferReset = function () { 14089 var t = this; 14090 this.getSourceBufferTypes().forEach(function (e) { 14091 t.resetBuffer(e); 14092 }), 14093 this._initSourceBuffer(), 14094 this.hls.resumeBuffering(); 14095 }), 14096 (e.resetBuffer = function (t) { 14097 var e = this.sourceBuffer[t]; 14098 try { 14099 var r; 14100 e && 14101 (this.removeBufferListeners(t), 14102 (this.sourceBuffer[t] = void 0), 14103 null != (r = this.mediaSource) && 14104 r.sourceBuffers.length && 14105 this.mediaSource.removeSourceBuffer(e)); 14106 } catch (e) { 14107 this.warn('onBufferReset ' + t, e); 14108 } 14109 }), 14110 (e.onBufferCodecs = function (t, e) { 14111 var r = this, 14112 i = this.getSourceBufferTypes().length, 14113 n = Object.keys(e); 14114 if ( 14115 (n.forEach(function (t) { 14116 if (i) { 14117 var n = r.tracks[t]; 14118 if (n && 'function' == typeof n.buffer.changeType) { 14119 var a, 14120 s = e[t], 14121 o = s.id, 14122 l = s.codec, 14123 u = s.levelCodec, 14124 h = s.container, 14125 d = s.metadata, 14126 c = me(n.codec, n.levelCodec), 14127 f = null == c ? void 0 : c.replace(ia, '$1'), 14128 g = me(l, u), 14129 v = null == (a = g) ? void 0 : a.replace(ia, '$1'); 14130 if (g && f !== v) { 14131 'audio' === t.slice(0, 5) && (g = ve(g, r.appendSource)); 14132 var m = h + ';codecs=' + g; 14133 r.appendChangeType(t, m), 14134 r.log('switching codec ' + c + ' to ' + g), 14135 (r.tracks[t] = { 14136 buffer: n.buffer, 14137 codec: l, 14138 container: h, 14139 levelCodec: u, 14140 metadata: d, 14141 id: o, 14142 }); 14143 } 14144 } 14145 } else r.pendingTracks[t] = e[t]; 14146 }), 14147 !i) 14148 ) { 14149 var a = Math.max(this.bufferCodecEventsExpected - 1, 0); 14150 this.bufferCodecEventsExpected !== a && 14151 (this.log(a + ' bufferCodec event(s) expected ' + n.join(',')), 14152 (this.bufferCodecEventsExpected = a)), 14153 this.mediaSource && 14154 'open' === this.mediaSource.readyState && 14155 this.checkPendingTracks(); 14156 } 14157 }), 14158 (e.appendChangeType = function (t, e) { 14159 var r = this, 14160 i = this.operationQueue, 14161 n = { 14162 execute: function () { 14163 var n = r.sourceBuffer[t]; 14164 n && (r.log('changing ' + t + ' sourceBuffer type to ' + e), n.changeType(e)), 14165 i.shiftAndExecuteNext(t); 14166 }, 14167 onStart: function () {}, 14168 onComplete: function () {}, 14169 onError: function (e) { 14170 r.warn('Failed to change ' + t + ' SourceBuffer type', e); 14171 }, 14172 }; 14173 i.append(n, t, !!this.pendingTracks[t]); 14174 }), 14175 (e.onBufferAppending = function (t, e) { 14176 var r = this, 14177 i = this.hls, 14178 n = this.operationQueue, 14179 a = this.tracks, 14180 s = e.data, 14181 o = e.type, 14182 l = e.frag, 14183 u = e.part, 14184 h = e.chunkMeta, 14185 d = h.buffering[o], 14186 c = self.performance.now(); 14187 d.start = c; 14188 var f = l.stats.buffering, 14189 g = u ? u.stats.buffering : null; 14190 0 === f.start && (f.start = c), g && 0 === g.start && (g.start = c); 14191 var v = a.audio, 14192 m = !1; 14193 'audio' === o && 14194 'audio/mpeg' === (null == v ? void 0 : v.container) && 14195 ((m = 14196 !this.lastMpegAudioChunk || 1 === h.id || this.lastMpegAudioChunk.sn !== h.sn), 14197 (this.lastMpegAudioChunk = h)); 14198 var p = l.start, 14199 y = { 14200 execute: function () { 14201 if (((d.executeStart = self.performance.now()), m)) { 14202 var t = r.sourceBuffer[o]; 14203 if (t) { 14204 var e = p - t.timestampOffset; 14205 Math.abs(e) >= 0.1 && 14206 (r.log( 14207 'Updating audio SourceBuffer timestampOffset to ' + 14208 p + 14209 ' (delta: ' + 14210 e + 14211 ') sn: ' + 14212 l.sn + 14213 ')' 14214 ), 14215 (t.timestampOffset = p)); 14216 } 14217 } 14218 r.appendExecutor(s, o); 14219 }, 14220 onStart: function () {}, 14221 onComplete: function () { 14222 var t = self.performance.now(); 14223 (d.executeEnd = d.end = t), 14224 0 === f.first && (f.first = t), 14225 g && 0 === g.first && (g.first = t); 14226 var e = r.sourceBuffer, 14227 i = {}; 14228 for (var n in e) i[n] = ri.getBuffered(e[n]); 14229 (r.appendErrors[o] = 0), 14230 'audio' === o || 'video' === o 14231 ? (r.appendErrors.audiovideo = 0) 14232 : ((r.appendErrors.audio = 0), (r.appendErrors.video = 0)), 14233 r.hls.trigger(S.BUFFER_APPENDED, { 14234 type: o, 14235 frag: l, 14236 part: u, 14237 chunkMeta: h, 14238 parent: l.type, 14239 timeRanges: i, 14240 }); 14241 }, 14242 onError: function (t) { 14243 var e = { 14244 type: L.MEDIA_ERROR, 14245 parent: l.type, 14246 details: A.BUFFER_APPEND_ERROR, 14247 sourceBufferName: o, 14248 frag: l, 14249 part: u, 14250 chunkMeta: h, 14251 error: t, 14252 err: t, 14253 fatal: !1, 14254 }; 14255 if (t.code === DOMException.QUOTA_EXCEEDED_ERR) e.details = A.BUFFER_FULL_ERROR; 14256 else { 14257 var n = ++r.appendErrors[o]; 14258 (e.details = A.BUFFER_APPEND_ERROR), 14259 r.warn( 14260 'Failed ' + 14261 n + 14262 '/' + 14263 i.config.appendErrorMaxRetry + 14264 ' times to append segment in "' + 14265 o + 14266 '" sourceBuffer' 14267 ), 14268 n >= i.config.appendErrorMaxRetry && (e.fatal = !0); 14269 } 14270 i.trigger(S.ERROR, e); 14271 }, 14272 }; 14273 n.append(y, o, !!this.pendingTracks[o]); 14274 }), 14275 (e.onBufferFlushing = function (t, e) { 14276 var r = this, 14277 i = this.operationQueue, 14278 n = function (t) { 14279 return { 14280 execute: r.removeExecutor.bind(r, t, e.startOffset, e.endOffset), 14281 onStart: function () {}, 14282 onComplete: function () { 14283 r.hls.trigger(S.BUFFER_FLUSHED, { type: t }); 14284 }, 14285 onError: function (e) { 14286 r.warn('Failed to remove from ' + t + ' SourceBuffer', e); 14287 }, 14288 }; 14289 }; 14290 e.type 14291 ? i.append(n(e.type), e.type)
14292 : this.getSourceBufferTypes().forEach(function (t) { 14293 i.append(n(t), t); 14294 }); 14295 }), 14296 (e.onFragParsed = function (t, e) { 14297 var r = this, 14298 i = e.frag, 14299 n = e.part, 14300 a = [], 14301 s = n ? n.elementaryStreams : i.elementaryStreams; 14302 s[U] ? a.push('audiovideo') : (s[O] && a.push('audio'), s[N] && a.push('video')), 14303 0 === a.length && 14304 this.warn( 14305 'Fragments must have at least one ElementaryStreamType set. type: ' + 14306 i.type + 14307 ' level: ' + 14308 i.level + 14309 ' sn: ' + 14310 i.sn 14311 ), 14312 this.blockBuffers(function () { 14313 var t = self.performance.now(); 14314 (i.stats.buffering.end = t), n && (n.stats.buffering.end = t); 14315 var e = n ? n.stats : i.stats; 14316 r.hls.trigger(S.FRAG_BUFFERED, { frag: i, part: n, stats: e, id: i.type }); 14317 }, a); 14318 }), 14319 (e.onFragChanged = function (t, e) { 14320 this.trimBuffers(); 14321 }), 14322 (e.onBufferEos = function (t, e) { 14323 var r = this;
14324 this.getSourceBufferTypes().reduce(function (t, i) { 14325 var n = r.sourceBuffer[i]; 14326 return ( 14327 !n || 14328 (e.type && e.type !== i) || 14329 ((n.ending = !0), 14330 n.ended || ((n.ended = !0), r.log(i + ' sourceBuffer now EOS'))), 14331 t && !(n && !n.ended) 14332 ); 14333 }, !0) && 14334 (this.log('Queueing mediaSource.endOfStream()'), 14335 this.blockBuffers(function () { 14336 r.getSourceBufferTypes().forEach(function (t) { 14337 var e = r.sourceBuffer[t]; 14338 e && (e.ending = !1); 14339 }); 14340 var t = r.mediaSource; 14341 t && 'open' === t.readyState 14342 ? (r.log('Calling mediaSource.endOfStream()'), t.endOfStream()) 14343 : t && 14344 r.log( 14345 'Could not call mediaSource.endOfStream(). mediaSource.readyState: ' + 14346 t.readyState 14347 ); 14348 })); 14349 }), 14350 (e.onLevelUpdated = function (t, e) { 14351 var r = e.details; 14352 r.fragments.length && 14353 ((this.details = r),
14354 this.getSourceBufferTypes().length 14355 ? this.blockBuffers(this.updateMediaElementDuration.bind(this)) 14356 : this.updateMediaElementDuration()); 14357 }), 14358 (e.trimBuffers = function () { 14359 var t = this.hls, 14360 e = this.details, 14361 r = this.media; 14362 if (r && null !== e && this.getSourceBufferTypes().length) { 14363 var i = t.config, 14364 n = r.currentTime, 14365 a = e.levelTargetDuration, 14366 s = 14367 e.live && null !== i.liveBackBufferLength 14368 ? i.liveBackBufferLength 14369 : i.backBufferLength; 14370 if (y(s) && s > 0) { 14371 var o = Math.max(s, a), 14372 l = Math.floor(n / a) * a - o; 14373 this.flushBackBuffer(n, a, l); 14374 } 14375 if (y(i.frontBufferFlushThreshold) && i.frontBufferFlushThreshold > 0) { 14376 var u = Math.max(i.maxBufferLength, i.frontBufferFlushThreshold), 14377 h = Math.max(u, a), 14378 d = Math.floor(n / a) * a + h; 14379 this.flushFrontBuffer(n, a, d); 14380 } 14381 } 14382 }), 14383 (e.flushBackBuffer = function (t, e, r) { 14384 var i = this, 14385 n = this.details, 14386 a = this.sourceBuffer;
14387 this.getSourceBufferTypes().forEach(function (s) { 14388 var o = a[s]; 14389 if (o) { 14390 var l = ri.getBuffered(o); 14391 if (l.length > 0 && r > l.start(0)) { 14392 if ( 14393 (i.hls.trigger(S.BACK_BUFFER_REACHED, { bufferEnd: r }), null != n && n.live) 14394 ) 14395 i.hls.trigger(S.LIVE_BACK_BUFFER_REACHED, { bufferEnd: r }); 14396 else if (o.ended && l.end(l.length - 1) - t < 2 * e) 14397 return void i.log( 14398 'Cannot flush ' + s + ' back buffer while SourceBuffer is in ended state' 14399 ); 14400 i.hls.trigger(S.BUFFER_FLUSHING, { startOffset: 0, endOffset: r, type: s }); 14401 } 14402 } 14403 }); 14404 }), 14405 (e.flushFrontBuffer = function (t, e, r) { 14406 var i = this, 14407 n = this.sourceBuffer; 14408 this.getSourceBufferTypes().forEach(function (a) { 14409 var s = n[a]; 14410 if (s) { 14411 var o = ri.getBuffered(s), 14412 l = o.length; 14413 if (l < 2) return; 14414 var u = o.start(l - 1), 14415 h = o.end(l - 1); 14416 if (r > u || (t >= u && t <= h)) return; 14417 if (s.ended && t - h < 2 * e) 14418 return void i.log( 14419 'Cannot flush ' + a + ' front buffer while SourceBuffer is in ended state' 14420 ); 14421 i.hls.trigger(S.BUFFER_FLUSHING, { startOffset: u, endOffset: 1 / 0, type: a }); 14422 } 14423 }); 14424 }), 14425 (e.updateMediaElementDuration = function () { 14426 if ( 14427 this.details && 14428 this.media && 14429 this.mediaSource && 14430 'open' === this.mediaSource.readyState 14431 ) { 14432 var t = this.details, 14433 e = this.hls, 14434 r = this.media, 14435 i = this.mediaSource, 14436 n = t.fragments[0].start + t.totalduration, 14437 a = r.duration, 14438 s = y(i.duration) ? i.duration : 0; 14439 t.live && e.config.liveDurationInfinity 14440 ? ((i.duration = 1 / 0), this.updateSeekableRange(t)) 14441 : ((n > s && n > a) || !y(a)) && 14442 (this.log('Updating Media Source duration to ' + n.toFixed(3)), 14443 (i.duration = n)); 14444 } 14445 }), 14446 (e.updateSeekableRange = function (t) { 14447 var e = this.mediaSource, 14448 r = t.fragments; 14449 if (r.length && t.live && null != e && e.setLiveSeekableRange) { 14450 var i = Math.max(0, r[0].start), 14451 n = Math.max(i, i + t.totalduration); 14452 this.log( 14453 'Media Source duration is set to ' + 14454 e.duration + 14455 '. Setting seekable range to ' + 14456 i + 14457 '-' + 14458 n + 14459 '.' 14460 ), 14461 e.setLiveSeekableRange(i, n); 14462 } 14463 }), 14464 (e.checkPendingTracks = function () { 14465 var t = this.bufferCodecEventsExpected, 14466 e = this.operationQueue, 14467 r = this.pendingTracks, 14468 i = Object.keys(r).length; 14469 if (i && (!t || 2 === i || 'audiovideo' in r)) { 14470 this.createSourceBuffers(r), (this.pendingTracks = {}); 14471 var n = this.getSourceBufferTypes(); 14472 if (n.length) 14473 this.hls.trigger(S.BUFFER_CREATED, { tracks: this.tracks }), 14474 n.forEach(function (t) { 14475 e.executeNext(t); 14476 }); 14477 else { 14478 var a = new Error('could not create source buffer for media codec(s)'); 14479 this.hls.trigger(S.ERROR, { 14480 type: L.MEDIA_ERROR, 14481 details: A.BUFFER_INCOMPATIBLE_CODECS_ERROR, 14482 fatal: !0, 14483 error: a, 14484 reason: a.message, 14485 }); 14486 } 14487 } 14488 }), 14489 (e.createSourceBuffers = function (t) { 14490 var e = this, 14491 r = this.sourceBuffer, 14492 i = this.mediaSource; 14493 if (!i) throw Error('createSourceBuffers called when mediaSource was null'); 14494 var n = function (n) { 14495 if (!r[n]) { 14496 var a, 14497 s = t[n]; 14498 if (!s) 14499 throw Error('source buffer exists for track ' + n + ', however track does not'); 14500 var o = 14501 -1 === (null == (a = s.levelCodec) ? void 0 : a.indexOf(',')) 14502 ? s.levelCodec 14503 : s.codec; 14504 o && 'audio' === n.slice(0, 5) && (o = ve(o, e.appendSource)); 14505 var l = s.container + ';codecs=' + o; 14506 e.log('creating sourceBuffer(' + l + ')'); 14507 try { 14508 var u = (r[n] = i.addSourceBuffer(l)), 14509 h = n; 14510 e.addBufferListener(h, 'updatestart', e._onSBUpdateStart), 14511 e.addBufferListener(h, 'updateend', e._onSBUpdateEnd), 14512 e.addBufferListener(h, 'error', e._onSBUpdateError), 14513 e.appendSource && 14514 e.addBufferListener(h, 'bufferedchange', function (t, r) { 14515 var i = r.removedRanges; 14516 null != i && i.length && e.hls.trigger(S.BUFFER_FLUSHED, { type: n }); 14517 }), 14518 (e.tracks[n] = { 14519 buffer: u, 14520 codec: o, 14521 container: s.container, 14522 levelCodec: s.levelCodec, 14523 metadata: s.metadata, 14524 id: s.id, 14525 }); 14526 } catch (t) { 14527 e.error('error while trying to add sourceBuffer: ' + t.message), 14528 e.hls.trigger(S.ERROR, { 14529 type: L.MEDIA_ERROR, 14530 details: A.BUFFER_ADD_CODEC_ERROR, 14531 fatal: !1, 14532 error: t, 14533 sourceBufferName: n, 14534 mimeType: l, 14535 }); 14536 } 14537 } 14538 }; 14539 for (var a in t) n(a); 14540 }), 14541 (e._onSBUpdateStart = function (t) { 14542 this.operationQueue.current(t).onStart(); 14543 }), 14544 (e._onSBUpdateEnd = function (t) { 14545 var e;
14546 if ('closed' !== (null == (e = this.mediaSource) ? void 0 : e.readyState)) { 14547 var r = this.operationQueue; 14548 r.current(t).onComplete(), r.shiftAndExecuteNext(t); 14549 } else this.resetBuffer(t); 14550 }), 14551 (e._onSBUpdateError = function (t, e) { 14552 var r, 14553 i = new Error( 14554 t + 14555 ' SourceBuffer error. MediaSource readyState: ' + 14556 (null == (r = this.mediaSource) ? void 0 : r.readyState) 14557 ); 14558 this.error('' + i, e), 14559 this.hls.trigger(S.ERROR, { 14560 type: L.MEDIA_ERROR, 14561 details: A.BUFFER_APPENDING_ERROR, 14562 sourceBufferName: t, 14563 error: i, 14564 fatal: !1, 14565 }); 14566 var n = this.operationQueue.current(t); 14567 n && n.onError(i); 14568 }), 14569 (e.removeExecutor = function (t, e, r) { 14570 var i = this.media, 14571 n = this.mediaSource, 14572 a = this.operationQueue, 14573 s = this.sourceBuffer[t]; 14574 if (!i || !n || !s) 14575 return ( 14576 this.warn( 14577 'Attempting to remove from the ' + t + ' SourceBuffer, but it does not exist' 14578 ), 14579 void a.shiftAndExecuteNext(t) 14580 ); 14581 var o = y(i.duration) ? i.duration : 1 / 0, 14582 l = y(n.duration) ? n.duration : 1 / 0, 14583 u = Math.max(0, e), 14584 h = Math.min(r, o, l); 14585 h > u && (!s.ending || s.ended) 14586 ? ((s.ended = !1), 14587 this.log('Removing [' + u + ',' + h + '] from the ' + t + ' SourceBuffer'), 14588 s.remove(u, h)) 14589 : a.shiftAndExecuteNext(t); 14590 }), 14591 (e.appendExecutor = function (t, e) { 14592 var r = this.sourceBuffer[e]; 14593 if (r) (r.ended = !1), r.appendBuffer(t); 14594 else if (!this.pendingTracks[e]) 14595 throw new Error( 14596 'Attempting to append to the ' + e + ' SourceBuffer, but it does not exist' 14597 ); 14598 }), 14599 (e.blockBuffers = function (t, e) { 14600 var r = this; 14601 if ((void 0 === e && (e = this.getSourceBufferTypes()), !e.length)) 14602 return ( 14603 this.log('Blocking operation requested, but no SourceBuffers exist'), 14604 void Promise.resolve().then(t) 14605 ); 14606 var i = this.operationQueue, 14607 n = e.map(function (t) { 14608 return i.appendBlocker(t); 14609 }); 14610 Promise.all(n).then(function () { 14611 t(), 14612 e.forEach(function (t) { 14613 var e = r.sourceBuffer[t]; 14614 (null != e && e.updating) || i.shiftAndExecuteNext(t); 14615 }); 14616 }); 14617 }), 14618 (e.getSourceBufferTypes = function () { 14619 return Object.keys(this.sourceBuffer); 14620 }), 14621 (e.addBufferListener = function (t, e, r) { 14622 var i = this.sourceBuffer[t]; 14623 if (i) { 14624 var n = r.bind(this, t); 14625 this.listeners[t].push({ event: e, listener: n }), i.addEventListener(e, n); 14626 } 14627 }), 14628 (e.removeBufferListeners = function (t) { 14629 var e = this.sourceBuffer[t]; 14630 e && 14631 this.listeners[t].forEach(function (t) { 14632 e.removeEventListener(t.event, t.listener); 14633 }); 14634 }), 14635 s(t, [ 14636 { 14637 key: 'mediaSrc', 14638 get: function () { 14639 var t, 14640 e, 14641 r = 14642 (null == (t = this.media) || null == (e = t.querySelector) 14643 ? void 0 14644 : e.call(t, 'source')) || this.media; 14645 return null == r ? void 0 : r.src; 14646 }, 14647 }, 14648 ]), 14649 t 14650 ); 14651 })(); 14652 function aa(t) { 14653 var e = t.querySelectorAll('source'); 14654 [].slice.call(e).forEach(function (e) { 14655 t.removeChild(e); 14656 }); 14657 } 14658 var sa = { 14659 42: 225, 14660 92: 233, 14661 94: 237, 14662 95: 243, 14663 96: 250, 14664 123: 231, 14665 124: 247, 14666 125: 209, 14667 126: 241, 14668 127: 9608, 14669 128: 174, 14670 129: 176, 14671 130: 189, 14672 131: 191, 14673 132: 8482, 14674 133: 162, 14675 134: 163, 14676 135: 9834, 14677 136: 224, 14678 137: 32, 14679 138: 232, 14680 139: 226, 14681 140: 234, 14682 141: 238, 14683 142: 244, 14684 143: 251, 14685 144: 193, 14686 145: 201, 14687 146: 211, 14688 147: 218, 14689 148: 220, 14690 149: 252, 14691 150: 8216, 14692 151: 161, 14693 152: 42, 14694 153: 8217, 14695 154: 9473, 14696 155: 169, 14697 156: 8480, 14698 157: 8226, 14699 158: 8220, 14700 159: 8221, 14701 160: 192, 14702 161: 194, 14703 162: 199, 14704 163: 200, 14705 164: 202, 14706 165: 203, 14707 166: 235, 14708 167: 206, 14709 168: 207, 14710 169: 239, 14711 170: 212, 14712 171: 217, 14713 172: 249, 14714 173: 219, 14715 174: 171, 14716 175: 187, 14717 176: 195, 14718 177: 227, 14719 178: 205, 14720 179: 204, 14721 180: 236, 14722 181: 210, 14723 182: 242, 14724 183: 213, 14725 184: 245, 14726 185: 123, 14727 186: 125, 14728 187: 92, 14729 188: 94, 14730 189: 95, 14731 190: 124, 14732 191: 8764, 14733 192: 196, 14734 193: 228, 14735 194: 214, 14736 195: 246, 14737 196: 223, 14738 197: 165, 14739 198: 164, 14740 199: 9475, 14741 200: 197, 14742 201: 229, 14743 202: 216, 14744 203: 248, 14745 204: 9487, 14746 205: 9491, 14747 206: 9495, 14748 207: 9499, 14749 }, 14750 oa = function (t) { 14751 return String.fromCharCode(sa[t] || t); 14752 }, 14753 la = 15, 14754 ua = 100, 14755 ha = { 17: 1, 18: 3, 21: 5, 22: 7, 23: 9, 16: 11, 19: 12, 20: 14 }, 14756 da = { 17: 2, 18: 4, 21: 6, 22: 8, 23: 10, 19: 13, 20: 15 }, 14757 ca = { 25: 1, 26: 3, 29: 5, 30: 7, 31: 9, 24: 11, 27: 12, 28: 14 }, 14758 fa = { 25: 2, 26: 4, 29: 6, 30: 8, 31: 10, 27: 13, 28: 15 }, 14759 ga = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'black', 'transparent'], 14760 va = (function () { 14761 function t() { 14762 (this.time = null), (this.verboseLevel = 0); 14763 } 14764 return ( 14765 (t.prototype.log = function (t, e) { 14766 if (this.verboseLevel >= t) { 14767 var r = 'function' == typeof e ? e() : e; 14768 w.log(this.time + ' [' + t + '] ' + r); 14769 } 14770 }), 14771 t 14772 ); 14773 })(), 14774 ma = function (t) { 14775 for (var e = [], r = 0; r < t.length; r++) e.push(t[r].toString(16)); 14776 return e; 14777 }, 14778 pa = (function () { 14779 function t() { 14780 (this.foreground = 'white'), 14781 (this.underline = !1), 14782 (this.italics = !1), 14783 (this.background = 'black'), 14784 (this.flash = !1); 14785 } 14786 var e = t.prototype; 14787 return ( 14788 (e.reset = function () { 14789 (this.foreground = 'white'), 14790 (this.underline = !1), 14791 (this.italics = !1), 14792 (this.background = 'black'), 14793 (this.flash = !1); 14794 }), 14795 (e.setStyles = function (t) { 14796 for ( 14797 var e = ['foreground', 'underline', 'italics', 'background', 'flash'], r = 0; 14798 r < e.length; 14799 r++ 14800 ) { 14801 var i = e[r]; 14802 t.hasOwnProperty(i) && (this[i] = t[i]); 14803 } 14804 }), 14805 (e.isDefault = function () { 14806 return ( 14807 'white' === this.foreground && 14808 !this.underline && 14809 !this.italics && 14810 'black' === this.background && 14811 !this.flash 14812 ); 14813 }), 14814 (e.equals = function (t) { 14815 return ( 14816 this.foreground === t.foreground && 14817 this.underline === t.underline && 14818 this.italics === t.italics && 14819 this.background === t.background && 14820 this.flash === t.flash 14821 ); 14822 }), 14823 (e.copy = function (t) { 14824 (this.foreground = t.foreground), 14825 (this.underline = t.underline), 14826 (this.italics = t.italics), 14827 (this.background = t.background), 14828 (this.flash = t.flash); 14829 }), 14830 (e.toString = function () { 14831 return ( 14832 'color=' + 14833 this.foreground + 14834 ', underline=' + 14835 this.underline + 14836 ', italics=' + 14837 this.italics + 14838 ', background=' + 14839 this.background +
14840 ', flash=' + 14841 this.flash 14842 ); 14843 }), 14844 t 14845 ); 14846 })(), 14847 ya = (function () { 14848 function t() { 14849 (this.uchar = ' '), (this.penState = new pa()); 14850 } 14851 var e = t.prototype; 14852 return ( 14853 (e.reset = function () { 14854 (this.uchar = ' '), this.penState.reset(); 14855 }), 14856 (e.setChar = function (t, e) { 14857 (this.uchar = t), this.penState.copy(e); 14858 }), 14859 (e.setPenState = function (t) { 14860 this.penState.copy(t); 14861 }), 14862 (e.equals = function (t) { 14863 return this.uchar === t.uchar && this.penState.equals(t.penState); 14864 }), 14865 (e.copy = function (t) { 14866 (this.uchar = t.uchar), this.penState.copy(t.penState); 14867 }), 14868 (e.isEmpty = function () { 14869 return ' ' === this.uchar && this.penState.isDefault(); 14870 }), 14871 t 14872 ); 14873 })(), 14874 Ea = (function () { 14875 function t(t) { 14876 (this.chars = []), 14877 (this.pos = 0), 14878 (this.currPenState = new pa()), 14879 (this.cueStartTime = null), 14880 (this.logger = void 0); 14881 for (var e = 0; e < ua; e++) this.chars.push(new ya()); 14882 this.logger = t; 14883 } 14884 var e = t.prototype; 14885 return ( 14886 (e.equals = function (t) { 14887 for (var e = 0; e < ua; e++) if (!this.chars[e].equals(t.chars[e])) return !1; 14888 return !0; 14889 }), 14890 (e.copy = function (t) { 14891 for (var e = 0; e < ua; e++) this.chars[e].copy(t.chars[e]); 14892 }), 14893 (e.isEmpty = function () { 14894 for (var t = !0, e = 0; e < ua; e++) 14895 if (!this.chars[e].isEmpty()) { 14896 t = !1; 14897 break; 14898 } 14899 return t; 14900 }), 14901 (e.setCursor = function (t) { 14902 this.pos !== t && (this.pos = t), 14903 this.pos < 0 14904 ? (this.logger.log(3, 'Negative cursor position ' + this.pos), (this.pos = 0)) 14905 : this.pos > ua && 14906 (this.logger.log(3, 'Too large cursor position ' + this.pos), (this.pos = ua)); 14907 }), 14908 (e.moveCursor = function (t) { 14909 var e = this.pos + t; 14910 if (t > 1) 14911 for (var r = this.pos + 1; r < e + 1; r++) 14912 this.chars[r].setPenState(this.currPenState); 14913 this.setCursor(e); 14914 }), 14915 (e.backSpace = function () { 14916 this.moveCursor(-1), this.chars[this.pos].setChar(' ', this.currPenState); 14917 }), 14918 (e.insertChar = function (t) { 14919 var e = this; 14920 t >= 144 && this.backSpace(); 14921 var r = oa(t); 14922 this.pos >= ua 14923 ? this.logger.log(0, function () { 14924 return ( 14925 'Cannot insert ' + 14926 t.toString(16) + 14927 ' (' + 14928 r + 14929 ') at position ' + 14930 e.pos + 14931 '. Skipping it!' 14932 ); 14933 }) 14934 : (this.chars[this.pos].setChar(r, this.currPenState), this.moveCursor(1)); 14935 }), 14936 (e.clearFromPos = function (t) { 14937 var e; 14938 for (e = t; e < ua; e++) this.chars[e].reset(); 14939 }), 14940 (e.clear = function () { 14941 this.clearFromPos(0), (this.pos = 0), this.currPenState.reset(); 14942 }), 14943 (e.clearToEndOfRow = function () { 14944 this.clearFromPos(this.pos); 14945 }), 14946 (e.getTextString = function () { 14947 for (var t = [], e = !0, r = 0; r < ua; r++) { 14948 var i = this.chars[r].uchar; 14949 ' ' !== i && (e = !1), t.push(i); 14950 } 14951 return e ? '' : t.join(''); 14952 }), 14953 (e.setPenStyles = function (t) { 14954 this.currPenState.setStyles(t), this.chars[this.pos].setPenState(this.currPenState); 14955 }), 14956 t 14957 ); 14958 })(), 14959 Ta = (function () { 14960 function t(t) { 14961 (this.rows = []), 14962 (this.currRow = 14), 14963 (this.nrRollUpRows = null),
14964 (this.lastOutputScreen = null), 14965 (this.logger = void 0); 14966 for (var e = 0; e < la; e++) this.rows.push(new Ea(t)); 14967 this.logger = t; 14968 } 14969 var e = t.prototype; 14970 return ( 14971 (e.reset = function () { 14972 for (var t = 0; t < la; t++) this.rows[t].clear(); 14973 this.currRow = 14; 14974 }), 14975 (e.equals = function (t) { 14976 for (var e = !0, r = 0; r < la; r++) 14977 if (!this.rows[r].equals(t.rows[r])) { 14978 e = !1; 14979 break; 14980 } 14981 return e; 14982 }), 14983 (e.copy = function (t) { 14984 for (var e = 0; e < la; e++) this.rows[e].copy(t.rows[e]); 14985 }), 14986 (e.isEmpty = function () { 14987 for (var t = !0, e = 0; e < la; e++) 14988 if (!this.rows[e].isEmpty()) { 14989 t = !1; 14990 break; 14991 } 14992 return t; 14993 }), 14994 (e.backSpace = function () { 14995 this.rows[this.currRow].backSpace(); 14996 }), 14997 (e.clearToEndOfRow = function () { 14998 this.rows[this.currRow].clearToEndOfRow(); 14999 }), 15000 (e.insertChar = function (t) { 15001 this.rows[this.currRow].insertChar(t); 15002 }), 15003 (e.setPen = function (t) { 15004 this.rows[this.currRow].setPenStyles(t); 15005 }), 15006 (e.moveCursor = function (t) { 15007 this.rows[this.currRow].moveCursor(t); 15008 }), 15009 (e.setCursor = function (t) { 15010 this.logger.log(2, 'setCursor: ' + t), this.rows[this.currRow].setCursor(t); 15011 }), 15012 (e.setPAC = function (t) { 15013 this.logger.log(2, function () { 15014 return 'pacData = ' + JSON.stringify(t); 15015 }); 15016 var e = t.row - 1; 15017 if ( 15018 (this.nrRollUpRows && e < this.nrRollUpRows - 1 && (e = this.nrRollUpRows - 1), 15019 this.nrRollUpRows && this.currRow !== e) 15020 ) { 15021 for (var r = 0; r < la; r++) this.rows[r].clear(); 15022 var i = this.currRow + 1 - this.nrRollUpRows, 15023 n = this.lastOutputScreen; 15024 if (n) { 15025 var a = n.rows[i].cueStartTime, 15026 s = this.logger.time; 15027 if (null !== a && null !== s && a < s) 15028 for (var o = 0; o < this.nrRollUpRows; o++) 15029 this.rows[e - this.nrRollUpRows + o + 1].copy(n.rows[i + o]); 15030 } 15031 } 15032 this.currRow = e; 15033 var l = this.rows[this.currRow]; 15034 if (null !== t.indent) { 15035 var u = t.indent, 15036 h = Math.max(u - 1, 0); 15037 l.setCursor(t.indent), (t.color = l.chars[h].penState.foreground); 15038 } 15039 var d = { 15040 foreground: t.color, 15041 underline: t.underline, 15042 italics: t.italics, 15043 background: 'black', 15044 flash: !1, 15045 }; 15046 this.setPen(d); 15047 }), 15048 (e.setBkgData = function (t) { 15049 this.logger.log(2, function () { 15050 return 'bkgData = ' + JSON.stringify(t); 15051 }), 15052 this.backSpace(), 15053 this.setPen(t), 15054 this.insertChar(32); 15055 }), 15056 (e.setRollUpRows = function (t) { 15057 this.nrRollUpRows = t; 15058 }), 15059 (e.rollUp = function () { 15060 var t = this; 15061 if (null !== this.nrRollUpRows) { 15062 this.logger.log(1, function () { 15063 return t.getDisplayText(); 15064 }); 15065 var e = this.currRow + 1 - this.nrRollUpRows, 15066 r = this.rows.splice(e, 1)[0]; 15067 r.clear(), this.rows.splice(this.currRow, 0, r), this.logger.log(2, 'Rolling up'); 15068 } else this.logger.log(3, 'roll_up but nrRollUpRows not set yet'); 15069 }), 15070 (e.getDisplayText = function (t) { 15071 t = t || !1; 15072 for (var e = [], r = '', i = -1, n = 0; n < la; n++) { 15073 var a = this.rows[n].getTextString(); 15074 a && ((i = n + 1), t ? e.push('Row ' + i + ": '" + a + "'") : e.push(a.trim())); 15075 } 15076 return e.length > 0 && (r = t ? '[' + e.join(' | ') + ']' : e.join('\n')), r; 15077 }), 15078 (e.getTextAndFormat = function () { 15079 return this.rows; 15080 }), 15081 t 15082 ); 15083 })(), 15084 Sa = (function () { 15085 function t(t, e, r) { 15086 (this.chNr = void 0), 15087 (this.outputFilter = void 0), 15088 (this.mode = void 0), 15089 (this.verbose = void 0), 15090 (this.displayedMemory = void 0), 15091 (this.nonDisplayedMemory = void 0), 15092 (this.lastOutputScreen = void 0), 15093 (this.currRollUpRow = void 0), 15094 (this.writeScreen = void 0), 15095 (this.cueStartTime = void 0), 15096 (this.logger = void 0), 15097 (this.chNr = t), 15098 (this.outputFilter = e), 15099 (this.mode = null),
15100 (this.verbose = 0), 15101 (this.displayedMemory = new Ta(r)), 15102 (this.nonDisplayedMemory = new Ta(r)), 15103 (this.lastOutputScreen = new Ta(r)), 15104 (this.currRollUpRow = this.displayedMemory.rows[14]), 15105 (this.writeScreen = this.displayedMemory), 15106 (this.mode = null), 15107 (this.cueStartTime = null), 15108 (this.logger = r); 15109 } 15110 var e = t.prototype; 15111 return ( 15112 (e.reset = function () { 15113 (this.mode = null), 15114 this.displayedMemory.reset(), 15115 this.nonDisplayedMemory.reset(), 15116 this.lastOutputScreen.reset(), 15117 this.outputFilter.reset(), 15118 (this.currRollUpRow = this.displayedMemory.rows[14]), 15119 (this.writeScreen = this.displayedMemory), 15120 (this.mode = null), 15121 (this.cueStartTime = null); 15122 }), 15123 (e.getHandler = function () { 15124 return this.outputFilter; 15125 }), 15126 (e.setHandler = function (t) { 15127 this.outputFilter = t; 15128 }), 15129 (e.setPAC = function (t) { 15130 this.writeScreen.setPAC(t); 15131 }), 15132 (e.setBkgData = function (t) { 15133 this.writeScreen.setBkgData(t); 15134 }), 15135 (e.setMode = function (t) { 15136 t !== this.mode && 15137 ((this.mode = t), 15138 this.logger.log(2, function () { 15139 return 'MODE=' + t; 15140 }), 15141 'MODE_POP-ON' === this.mode 15142 ? (this.writeScreen = this.nonDisplayedMemory) 15143 : ((this.writeScreen = this.displayedMemory), this.writeScreen.reset()), 15144 'MODE_ROLL-UP' !== this.mode && 15145 ((this.displayedMemory.nrRollUpRows = null),
15146 (this.nonDisplayedMemory.nrRollUpRows = null)), 15147 (this.mode = t)); 15148 }), 15149 (e.insertChars = function (t) { 15150 for (var e = this, r = 0; r < t.length; r++) this.writeScreen.insertChar(t[r]); 15151 var i = this.writeScreen === this.displayedMemory ? 'DISP' : 'NON_DISP'; 15152 this.logger.log(2, function () { 15153 return i + ': ' + e.writeScreen.getDisplayText(!0); 15154 }), 15155 ('MODE_PAINT-ON' !== this.mode && 'MODE_ROLL-UP' !== this.mode) || 15156 (this.logger.log(1, function () { 15157 return 'DISPLAYED: ' + e.displayedMemory.getDisplayText(!0); 15158 }), 15159 this.outputDataUpdate()); 15160 }), 15161 (e.ccRCL = function () { 15162 this.logger.log(2, 'RCL - Resume Caption Loading'), this.setMode('MODE_POP-ON'); 15163 }), 15164 (e.ccBS = function () { 15165 this.logger.log(2, 'BS - BackSpace'), 15166 'MODE_TEXT' !== this.mode && 15167 (this.writeScreen.backSpace(), 15168 this.writeScreen === this.displayedMemory && this.outputDataUpdate()); 15169 }), 15170 (e.ccAOF = function () {}), 15171 (e.ccAON = function () {}), 15172 (e.ccDER = function () { 15173 this.logger.log(2, 'DER- Delete to End of Row'), 15174 this.writeScreen.clearToEndOfRow(), 15175 this.outputDataUpdate(); 15176 }), 15177 (e.ccRU = function (t) { 15178 this.logger.log(2, 'RU(' + t + ') - Roll Up'), 15179 (this.writeScreen = this.displayedMemory), 15180 this.setMode('MODE_ROLL-UP'), 15181 this.writeScreen.setRollUpRows(t); 15182 }), 15183 (e.ccFON = function () { 15184 this.logger.log(2, 'FON - Flash On'), this.writeScreen.setPen({ flash: !0 }); 15185 }), 15186 (e.ccRDC = function () { 15187 this.logger.log(2, 'RDC - Resume Direct Captioning'), this.setMode('MODE_PAINT-ON'); 15188 }), 15189 (e.ccTR = function () { 15190 this.logger.log(2, 'TR'), this.setMode('MODE_TEXT'); 15191 }), 15192 (e.ccRTD = function () { 15193 this.logger.log(2, 'RTD'), this.setMode('MODE_TEXT'); 15194 }), 15195 (e.ccEDM = function () { 15196 this.logger.log(2, 'EDM - Erase Displayed Memory'), 15197 this.displayedMemory.reset(), 15198 this.outputDataUpdate(!0); 15199 }), 15200 (e.ccCR = function () { 15201 this.logger.log(2, 'CR - Carriage Return'), 15202 this.writeScreen.rollUp(), 15203 this.outputDataUpdate(!0); 15204 }), 15205 (e.ccENM = function () { 15206 this.logger.log(2, 'ENM - Erase Non-displayed Memory'), 15207 this.nonDisplayedMemory.reset(); 15208 }), 15209 (e.ccEOC = function () { 15210 var t = this; 15211 if ((this.logger.log(2, 'EOC - End Of Caption'), 'MODE_POP-ON' === this.mode)) { 15212 var e = this.displayedMemory; 15213 (this.displayedMemory = this.nonDisplayedMemory), 15214 (this.nonDisplayedMemory = e), 15215 (this.writeScreen = this.nonDisplayedMemory), 15216 this.logger.log(1, function () { 15217 return 'DISP: ' + t.displayedMemory.getDisplayText(); 15218 }); 15219 } 15220 this.outputDataUpdate(!0); 15221 }), 15222 (e.ccTO = function (t) { 15223 this.logger.log(2, 'TO(' + t + ') - Tab Offset'), this.writeScreen.moveCursor(t); 15224 }), 15225 (e.ccMIDROW = function (t) { 15226 var e = { flash: !1 }; 15227 if (((e.underline = t % 2 == 1), (e.italics = t >= 46), e.italics)) 15228 e.foreground = 'white'; 15229 else { 15230 var r = Math.floor(t / 2) - 16; 15231 e.foreground = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta'][r]; 15232 } 15233 this.logger.log(2, 'MIDROW: ' + JSON.stringify(e)), this.writeScreen.setPen(e); 15234 }), 15235 (e.outputDataUpdate = function (t) { 15236 void 0 === t && (t = !1); 15237 var e = this.logger.time; 15238 null !== e && 15239 this.outputFilter && 15240 (null !== this.cueStartTime || this.displayedMemory.isEmpty() 15241 ? this.displayedMemory.equals(this.lastOutputScreen) || 15242 (this.outputFilter.newCue(this.cueStartTime, e, this.lastOutputScreen), 15243 t && this.outputFilter.dispatchCue && this.outputFilter.dispatchCue(), 15244 (this.cueStartTime = this.displayedMemory.isEmpty() ? null : e)) 15245 : (this.cueStartTime = e), 15246 this.lastOutputScreen.copy(this.displayedMemory)); 15247 }), 15248 (e.cueSplitAtTime = function (t) { 15249 this.outputFilter && 15250 (this.displayedMemory.isEmpty() || 15251 (this.outputFilter.newCue && 15252 this.outputFilter.newCue(this.cueStartTime, t, this.displayedMemory), 15253 (this.cueStartTime = t))); 15254 }), 15255 t 15256 ); 15257 })(), 15258 La = (function () { 15259 function t(t, e, r) { 15260 (this.channels = void 0), 15261 (this.currentChannel = 0), 15262 (this.cmdHistory = { a: null, b: null }), 15263 (this.logger = void 0); 15264 var i = (this.logger = new va()); 15265 this.channels = [null, new Sa(t, e, i), new Sa(t + 1, r, i)]; 15266 } 15267 var e = t.prototype; 15268 return ( 15269 (e.getHandler = function (t) { 15270 return this.channels[t].getHandler(); 15271 }), 15272 (e.setHandler = function (t, e) { 15273 this.channels[t].setHandler(e); 15274 }), 15275 (e.addData = function (t, e) { 15276 var r = this; 15277 this.logger.time = t; 15278 for ( 15279 var i = function (t) { 15280 var i = 127 & e[t], 15281 n = 127 & e[t + 1], 15282 a = !1, 15283 s = null; 15284 if (0 === i && 0 === n) return 0; 15285 r.logger.log(3, function () { 15286 return '[' + ma([e[t], e[t + 1]]) + '] -> (' + ma([i, n]) + ')'; 15287 }); 15288 var o = r.cmdHistory; 15289 if (i >= 16 && i <= 31) { 15290 if ( 15291 (function (t, e, r) { 15292 return r.a === t && r.b === e; 15293 })(i, n, o) 15294 ) 15295 return ( 15296 Aa(null, null, o), 15297 r.logger.log(3, function () { 15298 return 'Repeated command (' + ma([i, n]) + ') is dropped'; 15299 }), 15300 0 15301 ); 15302 Aa(i, n, r.cmdHistory), 15303 (a = r.parseCmd(i, n)) || (a = r.parseMidrow(i, n)), 15304 a || (a = r.parsePAC(i, n)),
15305 a || (a = r.parseBackgroundAttributes(i, n)); 15306 } else Aa(null, null, o); 15307 if (!a && (s = r.parseChars(i, n))) { 15308 var l = r.currentChannel; 15309 l && l > 0 15310 ? r.channels[l].insertChars(s) 15311 : r.logger.log(2, 'No channel found yet. TEXT-MODE?'); 15312 } 15313 a || 15314 s || 15315 r.logger.log(2, function () { 15316 return ( 15317 "Couldn't parse cleaned data " + 15318 ma([i, n]) + 15319 ' orig: ' + 15320 ma([e[t], e[t + 1]]) 15321 ); 15322 }); 15323 }, 15324 n = 0; 15325 n < e.length; 15326 n += 2 15327 ) 15328 i(n); 15329 }), 15330 (e.parseCmd = function (t, e) { 15331 if ( 15332 !( 15333 ((20 === t || 28 === t || 21 === t || 29 === t) && e >= 32 && e <= 47) || 15334 ((23 === t || 31 === t) && e >= 33 && e <= 35) 15335 ) 15336 ) 15337 return !1; 15338 var r = 20 === t || 21 === t || 23 === t ? 1 : 2, 15339 i = this.channels[r]; 15340 return ( 15341 20 === t || 21 === t || 28 === t || 29 === t 15342 ? 32 === e 15343 ? i.ccRCL() 15344 : 33 === e 15345 ? i.ccBS() 15346 : 34 === e 15347 ? i.ccAOF() 15348 : 35 === e 15349 ? i.ccAON() 15350 : 36 === e 15351 ? i.ccDER() 15352 : 37 === e 15353 ? i.ccRU(2) 15354 : 38 === e 15355 ? i.ccRU(3) 15356 : 39 === e 15357 ? i.ccRU(4) 15358 : 40 === e 15359 ? i.ccFON() 15360 : 41 === e 15361 ? i.ccRDC() 15362 : 42 === e 15363 ? i.ccTR() 15364 : 43 === e 15365 ? i.ccRTD() 15366 : 44 === e 15367 ? i.ccEDM() 15368 : 45 === e 15369 ? i.ccCR() 15370 : 46 === e 15371 ? i.ccENM() 15372 : 47 === e && i.ccEOC() 15373 : i.ccTO(e - 32), 15374 (this.currentChannel = r), 15375 !0 15376 ); 15377 }), 15378 (e.parseMidrow = function (t, e) { 15379 var r = 0; 15380 if ((17 === t || 25 === t) && e >= 32 && e <= 47) { 15381 if ((r = 17 === t ? 1 : 2) !== this.currentChannel) 15382 return this.logger.log(0, 'Mismatch channel in midrow parsing'), !1; 15383 var i = this.channels[r]; 15384 return ( 15385 !!i && 15386 (i.ccMIDROW(e), 15387 this.logger.log(3, function () { 15388 return 'MIDROW (' + ma([t, e]) + ')'; 15389 }), 15390 !0) 15391 ); 15392 } 15393 return !1; 15394 }), 15395 (e.parsePAC = function (t, e) { 15396 var r; 15397 if ( 15398 !( 15399 (((t >= 17 && t <= 23) || (t >= 25 && t <= 31)) && e >= 64 && e <= 127) || 15400 ((16 === t || 24 === t) && e >= 64 && e <= 95) 15401 ) 15402 ) 15403 return !1; 15404 var i = t <= 23 ? 1 : 2; 15405 r = e >= 64 && e <= 95 ? (1 === i ? ha[t] : ca[t]) : 1 === i ? da[t] : fa[t]; 15406 var n = this.channels[i]; 15407 return !!n && (n.setPAC(this.interpretPAC(r, e)), (this.currentChannel = i), !0); 15408 }), 15409 (e.interpretPAC = function (t, e) { 15410 var r, 15411 i = { color: null, italics: !1, indent: null, underline: !1, row: t }; 15412 return ( 15413 (r = e > 95 ? e - 96 : e - 64), 15414 (i.underline = 1 == (1 & r)), 15415 r <= 13 15416 ? (i.color = [ 15417 'white', 15418 'green', 15419 'blue', 15420 'cyan', 15421 'red', 15422 'yellow', 15423 'magenta', 15424 'white', 15425 ][Math.floor(r / 2)]) 15426 : r <= 15 15427 ? ((i.italics = !0), (i.color = 'white')) 15428 : (i.indent = 4 * Math.floor((r - 16) / 2)), 15429 i 15430 ); 15431 }), 15432 (e.parseChars = function (t, e) { 15433 var r, 15434 i, 15435 n = null, 15436 a = null; 15437 return ( 15438 t >= 25 ? ((r = 2), (a = t - 8)) : ((r = 1), (a = t)), 15439 a >= 17 && a <= 19 15440 ? ((i = 17 === a ? e + 80 : 18 === a ? e + 112 : e + 144), 15441 this.logger.log(2, function () { 15442 return "Special char '" + oa(i) + "' in channel " + r; 15443 }), 15444 (n = [i])) 15445 : t >
15445= 32 && t <= 127 && (n = 0 === e ? [t] : [t, e]), 15446 n && 15447 this.logger.log(3, function () { 15448 return 'Char codes = ' + ma(n).join(','); 15449 }), 15450 n 15451 ); 15452 }), 15453 (e.parseBackgroundAttributes = function (t, e) { 15454 var r; 15455 if ( 15456 !( 15457 ((16 === t || 24 === t) && e >= 32 && e <= 47) || 15458 ((23 === t || 31 === t) && e >= 45 && e <= 47) 15459 ) 15460 ) 15461 return !1; 15462 var i = {}; 15463 16 === t || 24 === t 15464 ? ((r = Math.floor((e - 32) / 2)), 15465 (i.background = ga[r]), 15466 e % 2 == 1 && (i.background = i.background + '_semi')) 15467 : 45 === e 15468 ? (i.background = 'transparent') 15469 : ((i.foreground = 'black'), 47 === e && (i.underline = !0)); 15470 var n = t <= 23 ? 1 : 2; 15471 return this.channels[n].setBkgData(i), !0; 15472 }), 15473 (e.reset = function () { 15474 for (var t = 0; t < Object.keys(this.channels).length; t++) { 15475 var e = this.channels[t]; 15476 e && e.reset(); 15477 } 15478 Aa(null, null, this.cmdHistory); 15479 }), 15480 (e.cueSplitAtTime = function (t) { 15481 for (var e = 0; e < this.channels.length; e++) { 15482 var r = this.channels[e]; 15483 r && r.cueSplitAtTime(t); 15484 } 15485 }), 15486 t 15487 ); 15488 })(); 15489 function Aa(t, e, r) { 15490 (r.a = t), (r.b = e); 15491 } 15492 var Ra = (function () { 15493 function t(t, e) { 15494 (this.timelineController = void 0), 15495 (this.cueRanges = []), 15496 (this.trackName = void 0), 15497 (this.startTime = null), 15498 (this.endTime = null), 15499 (this.screen = null), 15500 (this.timelineController = t), 15501 (this.trackName = e); 15502 } 15503 var e = t.prototype; 15504 return ( 15505 (e.dispatchCue = function () { 15506 null !== this.startTime && 15507 (this.timelineController.addCues( 15508 this.trackName, 15509 this.startTime, 15510 this.endTime, 15511 this.screen, 15512 this.cueRanges 15513 ), 15514 (this.startTime = null)); 15515 }), 15516 (e.newCue = function (t, e, r) { 15517 (null === this.startTime || this.startTime > t) && (this.startTime = t), 15518 (this.endTime = e), 15519 (this.screen = r), 15520 this.timelineController.createCaptionsTrack(this.trackName); 15521 }), 15522 (e.reset = function () { 15523 (this.cueRanges = []), (this.startTime = null); 15524 }), 15525 t 15526 ); 15527 })(), 15528 ba = (function () { 15529 if (null != j && j.VTTCue) return self.VTTCue; 15530 var t = ['', 'lr', 'rl'], 15531 e = ['start', 'middle', 'end', 'left', 'right']; 15532 function r(t, e) { 15533 if ('string' != typeof e) return !1; 15534 if (!Array.isArray(t)) return !1; 15535 var r = e.toLowerCase(); 15536 return !!~t.indexOf(r) && r; 15537 } 15538 function i(t) { 15539 return r(e, t); 15540 } 15541 function n(t) { 15542 for (var e = arguments.length, r = new Array(e > 1 ? e - 1 : 0), i = 1; i < e; i++) 15543 r[i - 1] = arguments[i]; 15544 for (var n = 1; n < arguments.length; n++) { 15545 var a = arguments[n]; 15546 for (var s in a) t[s] = a[s]; 15547 } 15548 return t; 15549 } 15550 function a(e, a, s) { 15551 var o = this, 15552 l = { enumerable: !0 }; 15553 o.hasBeenReset = !1; 15554 var u = '', 15555 h = !1, 15556 d = e, 15557 c = a, 15558 f = s, 15559 g = null, 15560 v = '', 15561 m = !0, 15562 p = 'auto', 15563 y = 'start', 15564 E = 50, 15565 T = 'middle', 15566 S = 50, 15567 L = 'middle'; 15568 Object.defineProperty( 15569 o, 15570 'id', 15571 n({}, l, { 15572 get: function () { 15573 return u; 15574 }, 15575 set: function (t) { 15576 u = '' + t; 15577 }, 15578 }) 15579 ), 15580 Object.defineProperty( 15581 o, 15582 'pauseOnExit', 15583 n({}, l, { 15584 get: function () { 15585 return h; 15586 }, 15587 set: function (t) { 15588 h = !!t; 15589 }, 15590 }) 15591 ), 15592 Object.defineProperty( 15593 o, 15594 'startTime', 15595 n({}, l, { 15596 get: function () { 15597 return d; 15598 }, 15599 set: function (t) { 15600 if ('number' != typeof t) 15601 throw new TypeError('Start time must be set to a number.'); 15602 (d = t), (this.hasBeenReset = !0); 15603 }, 15604 }) 15605 ), 15606 Object.defineProperty( 15607 o, 15608 'endTime', 15609 n({}, l, { 15610 get: function () { 15611 return c; 15612 }, 15613 set: function (t) { 15614 if ('number' != typeof t) 15615 throw new TypeError('End time must be set to a number.'); 15616 (c = t), (this.hasBeenReset = !0); 15617 }, 15618 }) 15619 ), 15620 Object.defineProperty( 15621 o, 15622 'text', 15623 n({}, l, { 15624 get: function () { 15625 return f; 15626 }, 15627 set: function (t) { 15628 (f = '' + t), (this.hasBeenReset = !0); 15629 }, 15630 }) 15631 ), 15632 Object.defineProperty( 15633 o, 15634 'region', 15635 n({}, l, { 15636 get: function () { 15637 return g; 15638 }, 15639 set: function (t) { 15640 (g = t), (this.hasBeenReset = !0); 15641 }, 15642 }) 15643 ), 15644 Object.defineProperty( 15645 o, 15646 'vertical', 15647 n({}, l, { 15648 get: function () { 15649 return v; 15650 }, 15651 set: function (e) { 15652 var i = (function (e) { 15653 return r(t, e); 15654 })(e); 15655 if (!1 === i) 15656 throw new SyntaxError('An invalid or illegal string was specified.'); 15657 (v = i), (this.hasBeenReset = !0); 15658 }, 15659 }) 15660 ), 15661 Object.defineProperty( 15662 o, 15663 'snapToLines', 15664 n({}, l, { 15665 get: function () { 15666 return m; 15667 }, 15668 set: function (t) { 15669 (m = !!t), (this.hasBeenReset = !0); 15670 }, 15671 }) 15672 ), 15673 Object.defineProperty( 15674 o, 15675 'line', 15676 n({}, l, { 15677 get: function () { 15678 return p; 15679 }, 15680 set: function (t) { 15681 if ('number' != typeof t && 'auto' !== t) 15682 throw new SyntaxError('An invalid number or illegal string was specified.'); 15683 (p = t), (this.hasBeenReset = !0); 15684 }, 15685 }) 15686 ), 15687 Object.defineProperty( 15688 o, 15689 'lineAlign', 15690 n({}, l, { 15691 get: function () { 15692 return y; 15693 }, 15694 set: function (t) { 15695 var e = i(t); 15696 if (!e) throw new SyntaxError('An invalid or illegal string was specified.'); 15697 (y = e), (this.hasBeenReset = !0); 15698 }, 15699 }) 15700 ), 15701 Object.defineProperty( 15702 o, 15703 'position', 15704 n({}, l, { 15705 get: function () { 15706 return E; 15707 }, 15708 set: function (t) { 15709 if (t < 0 || t > 100) throw new Error('Position must be between 0 and 100.'); 15710 (E = t), (this.hasBeenReset = !0); 15711 }, 15712 }) 15713 ), 15714 Object.defineProperty( 15715 o, 15716 'positionAlign', 15717 n({}, l, { 15718 get: function () { 15719 return T; 15720 }, 15721 set: function (t) { 15722 var e = i(t); 15723 if (!e) throw new SyntaxError('An invalid or illegal string was specified.'); 15724 (T = e), (this.hasBeenReset = !0); 15725 }, 15726 }) 15727 ), 15728 Object.defineProperty( 15729 o, 15730 'size', 15731 n({}, l, { 15732 get: function () { 15733 return S; 15734 }, 15735 set: function (t) { 15736 if (t < 0 || t > 100) throw new Error('Size must be between 0 and 100.'); 15737 (S = t), (this.hasBeenReset = !0); 15738 }, 15739 }) 15740 ), 15741 Object.defineProperty( 15742 o, 15743 'align', 15744 n({}, l, { 15745 get: function () { 15746 return L; 15747 }, 15748 set: function (t) { 15749 var e = i(t); 15750 if (!e) throw new SyntaxError('An invalid or illegal string was specified.'); 15751 (L = e), (this.hasBeenReset = !0); 15752 }, 15753 }) 15754 ), 15755 (o.displayState = void 0); 15756 } 15757 return ( 15758 (a.prototype.getCueAsHTML = function () { 15759 return self.WebVTT.convertCueToDOMTree(self, this.text); 15760 }), 15761 a 15762 ); 15763 })(), 15764 ka = (function () { 15765 function t() {} 15766 return ( 15767 (t.prototype.decode = function (t, e) { 15768 if (!t) return ''; 15769 if ('string' != typeof t) throw new Error('Error - expected string data.'); 15770 return decodeURIComponent(encodeURIComponent(t)); 15771 }), 15772 t 15773 ); 15774 })(); 15775 function Da(t) { 15776 function e(t, e, r, i) { 15777 return 3600 * (0 | t) + 60 * (0 | e) + (0 | r) + parseFloat(i || 0); 15778 } 15779 var r = t.match(/^(?:(\d+):)?(\d{2}):(\d{2})(\.\d+)?/); 15780 return r 15781 ? parseFloat(r[2]) > 59 15782 ? e(r[2], r[3], 0, r[4]) 15783 : e(r[1], r[2], r[3], r[4]) 15784 : null; 15785 } 15786 var Ia = (function () { 15787 function t() { 15788 this.values = Object.create(null); 15789 } 15790 var e = t.prototype; 15791 return ( 15792 (e.set = function (t, e) { 15793 this.get(t) || '' === e || (this.values[t] = e); 15794 }), 15795 (e.get = function (t, e, r) { 15796 return r ? (this.has(t) ? this.values[t] : e[r]) : this.has(t) ? this.values[t] : e; 15797 }), 15798 (e.has = function (t) { 15799 return t in this.values; 15800 }), 15801 (e.alt = function (t, e, r) { 15802 for (var i = 0; i < r.length; ++i) 15803 if (e === r[i]) { 15804 this.set(t, e); 15805 break; 15806 } 15807 }), 15808 (e.integer = function (t, e) { 15809 /^-?\d+$/.test(e) && this.set(t, parseInt(e, 10)); 15810 }), 15811 (e.percent = function (t, e) { 15812 if (/^([\d]{1,3})(\.[\d]*)?%$/.test(e)) { 15813 var r = parseFloat(e); 15814 if (r >= 0 && r <= 100) return this.set(t, r), !0; 15815 } 15816 return !1; 15817 }), 15818 t 15819 ); 15820 })(); 15821 function wa(t, e, r, i) { 15822 var n = i ? t.split(i) : [t]; 15823 for (var a in n) 15824 if ('string' == typeof n[a]) { 15825 var s = n[a].split(r); 15826 2 === s.length && e(s[0], s[1]); 15827 } 15828 } 15829 var Ca = new ba(0, 0, ''), 15830 _a = 'middle' === Ca.align ? 'middle' : 'center'; 15831 function xa(t, e, r) { 15832 var i = t; 15833 function n() { 15834 var e = Da(t); 15835 if (null === e) throw new Error('Malformed timestamp: ' + i); 15836 return (t = t.replace(/^[^\sa-zA-Z-]+/, '')), e; 15837 } 15838 function a() { 15839 t = t.replace(/^\s+/, ''); 15840 } 15841 if ((a(), (e.startTime = n()), a(), '--\x3e' !== t.slice(0, 3))) 15842 throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): " + i); 15843 (t = t.slice(3)), 15844 a(), 15845 (e.endTime = n()), 15846 a(), 15847 (function (t, e) { 15848 var i = new Ia(); 15849 wa( 15850 t, 15851 function (t, e) { 15852 var n; 15853 switch (t) { 15854 case 'region': 15855 for (var a = r.length - 1; a >= 0; a--) 15856 if (r[a].id === e) { 15857 i.set(t, r[a].region); 15858 break; 15859 } 15860 break; 15861 case 'vertical': 15862 i.alt(t, e, ['rl', 'lr']); 15863 break; 15864 case 'line': 15865 (n = e.split(',')), 15866 i.integer(t, n[0]), 15867 i.percent(t, n[0]) && i.set('snapToLines', !1), 15868 i.alt(t, n[0], ['auto']), 15869 2 === n.length && i.alt('lineAlign', n[1], ['start', _a, 'end']); 15870 break; 15871 case 'position': 15872 (n = e.split(',')), 15873 i.percent(t, n[0]), 15874 2 === n.length && 15875 i.alt('positionAlign', n[1], [ 15876 'start', 15877 _a, 15878 'end', 15879 'line-left', 15880 'line-right', 15881 'auto', 15882 ]); 15883 break; 15884 case 'size': 15885 i.percent(t, e); 15886 break; 15887 case 'align': 15888 i.alt(t, e, ['start', _a, 'end', 'left', 'right']); 15889 } 15890 }, 15891 /:/, 15892 /\s/ 15893 ), 15894 (e.region = i.get('region', null)), 15895 (e.vertical = i.get('vertical', '')); 15896 var n = i.get('line', 'auto'); 15897 'auto' === n && -1 === Ca.line && (n = -1), 15898 (e.line = n), 15899 (e.lineAlign = i.get('lineAlign', 'start')), 15900 (e.snapToLines = i.get('snapToLines', !0)), 15901 (e.size = i.get('size', 100)), 15902 (e.align = i.get('align', _a)); 15903 var a = i.get('position', 'auto'); 15904 'auto' === a && 15905 50 === Ca.position && 15906 (a = 15907 'start' === e.align || 'left' === e.align 15908 ? 0 15909 : 'end' === e.align || 'right' === e.align 15910 ? 100 15911 : 50), 15912 (e.position = a); 15913 })(t, e); 15914 } 15915 function Pa(t) { 15916 return t.replace(/<br(?: \/)?>/gi, '\n'); 15917 } 15918 var Fa = (function () { 15919 function t() { 15920 (this.state = 'INITIAL'), 15921 (this.buffer = ''), 15922 (this.decoder = new ka()), 15923 (this.regionList = []), 15924 (this.cue = null),
15925 (this.oncue = void 0), 15926 (this.onparsingerror = void 0), 15927 (this.onflush = void 0); 15928 } 15929 var e = t.prototype; 15930 return ( 15931 (e.parse = function (t) { 15932 var e = this; 15933 function r() { 15934 var t = e.buffer, 15935 r = 0; 15936 for (t = Pa(t); r < t.length && '\r' !== t[r] && '\n' !== t[r]; ) ++r; 15937 var i = t.slice(0, r); 15938 return '\r' === t[r] && ++r, '\n' === t[r] && ++r, (e.buffer = t.slice(r)), i; 15939 } 15940 t && (e.buffer += e.decoder.decode(t, { stream: !0 })); 15941 try { 15942 var i = ''; 15943 if ('INITIAL' === e.state) { 15944 if (!/\r\n|\n/.test(e.buffer)) return this; 15945 var n = (i = r()).match(/^()?WEBVTT([ \t].*)?$/); 15946 if (null == n || !n[0]) throw new Error('Malformed WebVTT signature.'); 15947 e.state = 'HEADER'; 15948 } 15949 for (var a = !1; e.buffer; ) { 15950 if (!/\r\n|\n/.test(e.buffer)) return this; 15951 switch ((a ? (a = !1) : (i = r()), e.state)) { 15952 case 'HEADER': 15953 /:/.test(i) ? wa(i, function (t, e) {}, /:/) : i || (e.state = 'ID'); 15954 continue; 15955 case 'NOTE': 15956 i || (e.state = 'ID'); 15957 continue; 15958 case 'ID': 15959 if (/^NOTE($|[ \t])/.test(i)) { 15960 e.state = 'NOTE'; 15961 break; 15962 } 15963 if (!i) continue; 15964 if ( 15965 ((e.cue = new ba(0, 0, '')), (e.state = 'CUE'), -1 === i.indexOf('--\x3e')) 15966 ) { 15967 e.cue.id = i; 15968 continue; 15969 } 15970 case 'CUE': 15971 if (!e.cue) { 15972 e.state = 'BADCUE'; 15973 continue; 15974 } 15975 try { 15976 xa(i, e.cue, e.regionList); 15977 } catch (t) { 15978 (e.cue = null), (e.state = 'BADCUE'); 15979 continue; 15980 } 15981 e.state = 'CUETEXT'; 15982 continue; 15983 case 'CUETEXT': 15984 var s = -1 !== i.indexOf('--\x3e'); 15985 if (!i || (s && (a = !0))) { 15986 e.oncue && e.cue && e.oncue(e.cue), (e.cue = null), (e.state = 'ID'); 15987 continue; 15988 } 15989 if (null === e.cue) continue; 15990 e.cue.text && (e.cue.text += '\n'), (e.cue.text += i); 15991 continue; 15992 case 'BADCUE': 15993 i || (e.state = 'ID'); 15994 } 15995 } 15996 } catch (t) { 15997 'CUETEXT' === e.state && e.cue && e.oncue && e.oncue(e.cue), 15998 (e.cue = null), 15999 (e.state = 'INITIAL' === e.state ? 'BADWEBVTT' : 'BADCUE'); 16000 } 16001 return this; 16002 }), 16003 (e.flush = function () { 16004 var t = this; 16005 try { 16006 if ( 16007 ((t.cue || 'HEADER' === t.state) && ((t.buffer += '\n\n'), t.parse()), 16008 'INITIAL' === t.state || 'BADWEBVTT' === t.state) 16009 ) 16010 throw new Error('Malformed WebVTT signature.'); 16011 } catch (e) { 16012 t.onparsingerror && t.onparsingerror(e); 16013 } 16014 return t.onflush && t.onflush(), this; 16015 }), 16016 t 16017 ); 16018 })(), 16019 Ma = /\r\n|\n\r|\n|\r/g, 16020 Oa = function (t, e, r) { 16021 return void 0 === r && (r = 0), t.slice(r, r + e.length) === e; 16022 }, 16023 Na = function (t) { 16024 for (var e = 5381, r = t.length; r; ) e = (33 * e) ^ t.charCodeAt(--r); 16025 return (e >>> 0).toString(); 16026 }; 16027 function Ua(t, e, r) { 16028 return Na(t.toString()) + Na(e.toString()) + Na(r); 16029 } 16030 function Ba(t, e, r, i, n, a, s) { 16031 var o, 16032 l, 16033 u, 16034 h = new Fa(), 16035 d = Rt(new Uint8Array(t)).trim().replace(Ma, '\n').split('\n'), 16036 c = [], 16037 f = e ? ((o = e.baseTime), void 0 === (l = e.timescale) && (l = 1), Rn(o, An, 1 / l)) : 0, 16038 g = '00:00.000', 16039 v = 0, 16040 m = 0, 16041 p = !0; 16042 (h.oncue = function (t) { 16043 var a = r[i], 16044 s = r.ccOffset, 16045 o = (v - f) / 9e4; 16046 if ( 16047 (null != a && 16048 a.new && 16049 (void 0 !== m 16050 ? (s = r.ccOffset = a.start) 16051 : (function (t, e, r) { 16052 var i = t[e], 16053 n = t[i.prevCC]; 16054 if (!n || (!n.new && i.new)) 16055 return (t.ccOffset = t.presentationOffset = i.start), void (i.new = !1); 16056 for (; null != (a = n) && a.new; ) { 16057 var a; 16058 (t.ccOffset += i.start - n.start), (i.new = !1), (n = t[(i = n).prevCC]); 16059 } 16060 t.presentationOffset = r; 16061 })(r, i, o)), 16062 o) 16063 ) { 16064 if (!e) return void (u = new Error('Missing initPTS for VTT MPEGTS')); 16065 s = o - r.presentationOffset; 16066 } 16067 var l = t.endTime - t.startTime, 16068 h = wn(9e4 * (t.startTime + s - m), 9e4 * n) / 9e4; 16069 (t.startTime = Math.max(h, 0)), (t.endTime = Math.max(h + l, 0)); 16070 var d = t.text.trim(); 16071 (t.text = decodeURIComponent(encodeURIComponent(d))), 16072 t.id || (t.id = Ua(t.startTime, t.endTime, d)), 16073 t.endTime > 0 && c.push(t); 16074 }), 16075 (h.onparsingerror = function (t) { 16076 u = t; 16077 }), 16078 (h.onflush = function () { 16079 u ? s(u) : a(c); 16080 }), 16081 d.forEach(function (t) { 16082 if (p) { 16083 if (Oa(t, 'X-TIMESTAMP-MAP=')) { 16084 (p = !1), 16085 t 16086 .slice(16) 16087 .split(',') 16088 .forEach(function (t) { 16089 Oa(t, 'LOCAL:') 16090 ? (g = t.slice(6)) 16091 : Oa(t, 'MPEGTS:') && (v = parseInt(t.slice(7))); 16092 }); 16093 try { 16094 m = 16095 (function (t) { 16096 var e = parseInt(t.slice(-3)), 16097 r = parseInt(t.slice(-6, -4)), 16098 i = parseInt(t.slice(-9, -7)), 16099 n = t.length > 9 ? parseInt(t.substring(0, t.indexOf(':'))) : 0; 16100 if (!(y(e) && y(r) && y(i) && y(n))) 16101 throw Error('Malformed X-TIMESTAMP-MAP: Local:' + t); 16102 return (e += 1e3 * r), (e += 6e4 * i) + 36e5 * n; 16103 })(g) / 1e3; 16104 } catch (t) { 16105 u = t; 16106 } 16107 return; 16108 } 16109 '' === t && (p = !1); 16110 } 16111 h.parse(t + '\n'); 16112 }), 16113 h.flush(); 16114 } 16115 var Ga = 'stpp.ttml.im1t', 16116 Ka = /^(\d{2,}):(\d{2}):(\d{2}):(\d{2})\.?(\d+)?$/, 16117 Ha = /^(\d*(?:\.\d*)?)(h|m|s|ms|f|t)$/, 16118 Va = { left: 'start', center: 'center', right: 'end', start: 'start', end: 'end' }; 16119 function Ya(t, e, r, i) { 16120 var n = Ot(new Uint8Array(t), ['mdat']); 16121 if (0 !== n.length) { 16122 var a, 16123 s, 16124 l, 16125 u, 16126 h = n.map(function (t) { 16127 return Rt(t); 16128 }), 16129 d = 16130 ((a = e.baseTime), 16131 (s = 1), 16132 void 0 === (l = e.timescale) && (l = 1), 16133 void 0 === u && (u = !1), 16134 Rn(a, s, 1 / l, u)); 16135 try { 16136 h.forEach(function (t) { 16137 return r( 16138 (function (t, e) { 16139 var r = new DOMParser().parseFromString(t, 'text/xml'), 16140 i = r.getElementsByTagName('tt')[0]; 16141 if (!i) throw new Error('Invalid ttml'); 16142 var n = { frameRate: 30, subFrameRate: 1, frameRateMultiplier: 0, tickRate: 0 }, 16143 a = Object.keys(n).reduce(function (t, e) { 16144 return (t[e] = i.getAttribute('ttp:' + e) || n[e]), t;
16145 }, {}), 16146 s = 'preserve' !== i.getAttribute('xml:space'), 16147 l = ja(Wa(i, 'styling', 'style')), 16148 u = ja(Wa(i, 'layout', 'region')), 16149 h = Wa(i, 'body', '[begin]'); 16150 return [].map 16151 .call(h, function (t) { 16152 var r = qa(t, s); 16153 if (!r || !t.hasAttribute('begin')) return null; 16154 var i = Qa(t.getAttribute('begin'), a), 16155 n = Qa(t.getAttribute('dur'), a), 16156 h = Qa(t.getAttribute('end'), a); 16157 if (null === i) throw za(t); 16158 if (null === h) { 16159 if (null === n) throw za(t); 16160 h = i + n; 16161 } 16162 var d = new ba(i - e, h - e, r); 16163 d.id = Ua(d.startTime, d.endTime, d.text); 16164 var c = (function (t, e, r) { 16165 var i = 'http://www.w3.org/ns/ttml#styling', 16166 n = null, 16167 a = [ 16168 'displayAlign', 16169 'textAlign', 16170 'color', 16171 'backgroundColor', 16172 'fontSize', 16173 'fontFamily', 16174 ], 16175 s = 16176 null != t && t.hasAttribute('style') ? t.getAttribute('style') : null; 16177 return ( 16178 s && r.hasOwnProperty(s) && (n = r[s]), 16179 a.reduce(function (r, a) { 16180 var s = Xa(e, i, a) || Xa(t, i, a) || Xa(n, i, a); 16181 return s && (r[a] = s), r; 16182 }, {}) 16183 ); 16184 })(u[t.getAttribute('region')], l[t.getAttribute('style')], l), 16185 f = c.textAlign; 16186 if (f) { 16187 var g = Va[f]; 16188 g && (d.lineAlign = g), (d.align = f); 16189 } 16190 return o(d, c), d; 16191 }) 16192 .filter(function (t) { 16193 return null !== t; 16194 }); 16195 })(t, d) 16196 ); 16197 }); 16198 } catch (t) { 16199 i(t); 16200 } 16201 } else i(new Error('Could not parse IMSC1 mdat')); 16202 } 16203 function Wa(t, e, r) { 16204 var i = t.getElementsByTagName(e)[0]; 16205 return i ? [].slice.call(i.querySelectorAll(r)) : []; 16206 } 16207 function ja(t) { 16208 return t.reduce(function (t, e) { 16209 var r = e.getAttribute('xml:id'); 16210 return r && (t[r] = e), t; 16211 }, {}); 16212 } 16213 function qa(t, e) { 16214 return [].slice.call(t.childNodes).reduce(function (t, r, i) { 16215 var n; 16216 return 'br' === r.nodeName && i 16217 ? t + '\n' 16218 : null != (n = r.childNodes) && n.length 16219 ? qa(r, e) 16220 : e 16221 ? t + r.textContent.trim().replace(/\s+/g, ' ') 16222 : t + r.textContent; 16223 }, ''); 16224 } 16225 function Xa(t, e, r) { 16226 return t && t.hasAttributeNS(e, r) ? t.getAttributeNS(e, r) : null; 16227 } 16228 function za(t) { 16229 return new Error('Could not parse ttml timestamp ' + t); 16230 } 16231 function Qa(t, e) { 16232 if (!t) return null; 16233 var r = Da(t); 16234 return ( 16235 null === r && 16236 (Ka.test(t) 16237 ? (r = (function (t, e) { 16238 var r = Ka.exec(t), 16239 i = (0 | r[4]) + (0 | r[5]) / e.subFrameRate; 16240 return 3600 * (0 | r[1]) + 60 * (0 | r[2]) + (0 | r[3]) + i / e.frameRate; 16241 })(t, e)) 16242 : Ha.test(t) && 16243 (r = (function (t, e) { 16244 var r = Ha.exec(t), 16245 i = Number(r[1]); 16246 switch (r[2]) { 16247 case 'h': 16248 return 3600 * i; 16249 case 'm': 16250 return 60 * i; 16251 case 'ms': 16252 return 1e3 * i; 16253 case 'f': 16254 return i / e.frameRate; 16255 case 't': 16256 return i / e.tickRate; 16257 } 16258 return i; 16259 })(t, e))), 16260 r 16261 ); 16262 } 16263 var Ja = (function () { 16264 function t(t) { 16265 (this.hls = void 0), 16266 (this.media = null),
16267 (this.config = void 0), 16268 (this.enabled = !0), 16269 (this.Cues = void 0), 16270 (this.textTracks = []), 16271 (this.tracks = []), 16272 (this.initPTS = []), 16273 (this.unparsedVttFrags = []), 16274 (this.captionsTracks = {}), 16275 (this.nonNativeCaptionsTracks = {}), 16276 (this.cea608Parser1 = void 0), 16277 (this.cea608Parser2 = void 0), 16278 (this.lastCc = -1), 16279 (this.lastSn = -1), 16280 (this.lastPartIndex = -1), 16281 (this.prevCC = -1), 16282 (this.vttCCs = { 16283 ccOffset: 0, 16284 presentationOffset: 0, 16285 0: { start: 0, prevCC: -1, new: !0 }, 16286 }), 16287 (this.captionsProperties = void 0), 16288 (this.hls = t), 16289 (this.config = t.config), 16290 (this.Cues = t.config.cueHandler), 16291 (this.captionsProperties = { 16292 textTrack1: { 16293 label: this.config.captionsTextTrack1Label, 16294 languageCode: this.config.captionsTextTrack1LanguageCode, 16295 }, 16296 textTrack2: { 16297 label: this.config.captionsTextTrack2Label, 16298 languageCode: this.config.captionsTextTrack2LanguageCode, 16299 }, 16300 textTrack3: { 16301 label: this.config.captionsTextTrack3Label, 16302 languageCode: this.config.captionsTextTrack3LanguageCode, 16303 }, 16304 textTrack4: { 16305 label: this.config.captionsTextTrack4Label, 16306 languageCode: this.config.captionsTextTrack4LanguageCode, 16307 }, 16308 }), 16309 t.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 16310 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 16311 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 16312 t.on(S.MANIFEST_LOADED, this.onManifestLoaded, this), 16313 t.on(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), 16314 t.on(S.FRAG_LOADING, this.onFragLoading, this), 16315 t.on(S.FRAG_LOADED, this.onFragLoaded, this), 16316 t.on(S.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this), 16317 t.on(S.FRAG_DECRYPTED, this.onFragDecrypted, this), 16318 t.on(S.INIT_PTS_FOUND, this.onInitPtsFound, this), 16319 t.on(S.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this), 16320 t.on(S.BUFFER_FLUSHING, this.onBufferFlushing, this); 16321 } 16322 var e = t.prototype; 16323 return ( 16324 (e.destroy = function () { 16325 var t = this.hls; 16326 t.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 16327 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 16328 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 16329 t.off(S.MANIFEST_LOADED, this.onManifestLoaded, this), 16330 t.off(S.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this), 16331 t.off(S.FRAG_LOADING, this.onFragLoading, this), 16332 t.off(S.FRAG_LOADED, this.onFragLoaded, this), 16333 t.off(S.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this), 16334 t.off(S.FRAG_DECRYPTED, this.onFragDecrypted, this), 16335 t.off(S.INIT_PTS_FOUND, this.onInitPtsFound, this), 16336 t.off(S.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this), 16337 t.off(S.BUFFER_FLUSHING, this.onBufferFlushing, this), 16338 (this.hls = this.config = null), 16339 (this.cea608Parser1 = this.cea608Parser2 = void 0); 16340 }), 16341 (e.initCea608Parsers = function () { 16342 if (this.config.enableCEA708Captions && (!this.cea608Parser1 || !this.cea608Parser2)) { 16343 var t = new Ra(this, 'textTrack1'), 16344 e = new Ra(this, 'textTrack2'), 16345 r = new Ra(this, 'textTrack3'), 16346 i = new Ra(this, 'textTrack4'); 16347 (this.cea608Parser1 = new La(1, t, e)), (this.cea608Parser2 = new La(3, r, i)); 16348 } 16349 }), 16350 (e.addCues = function (t, e, r, i, n) { 16351 for (var a, s, o, l, u = !1, h = n.length; h--; ) { 16352 var d = n[h], 16353 c = ((a = d[0]), (s = d[1]), (o = e), (l = r), Math.min(s, l) - Math.max(a, o)); 16354 if ( 16355 c >= 0 && 16356 ((d[0] = Math.min(d[0], e)), 16357 (d[1] = Math.max(d[1], r)), 16358 (u = !0), 16359 c / (r - e) > 0.5) 16360 ) 16361 return; 16362 } 16363 if ((u || n.push([e, r]), this.config.renderTextTracksNatively)) { 16364 var f = this.captionsTracks[t]; 16365 this.Cues.newCue(f, e, r, i); 16366 } else { 16367 var g = this.Cues.newCue(null, e, r, i); 16368 this.hls.trigger(S.CUES_PARSED, { type: 'captions', cues: g, track: t }); 16369 } 16370 }), 16371 (e.onInitPtsFound = function (t, e) { 16372 var r = this, 16373 i = e.frag, 16374 n = e.id, 16375 a = e.initPTS, 16376 s = e.timescale, 16377 o = this.unparsedVttFrags; 16378 'main' === n && (this.initPTS[i.cc] = { baseTime: a, timescale: s }), 16379 o.length && 16380 ((this.unparsedVttFrags = []), 16381 o.forEach(function (t) { 16382 r.onFragLoaded(S.FRAG_LOADED, t); 16383 })); 16384 }), 16385 (e.getExistingTrack = function (t, e) { 16386 var r = this.media; 16387 if (r) 16388 for (var i = 0; i < r.textTracks.length; i++) { 16389 var n = r.textTracks[i]; 16390 if (Za(n, { name: t, lang: e, attrs: {} })) return n; 16391 } 16392 return null; 16393 }), 16394 (e.createCaptionsTrack = function (t) { 16395 this.config.renderTextTracksNatively 16396 ? this.createNativeTrack(t) 16397 : this.createNonNativeTrack(t); 16398 }), 16399 (e.createNativeTrack = function (t) { 16400 if (!this.captionsTracks[t]) { 16401 var e = this.captionsProperties, 16402 r = this.captionsTracks, 16403 i = this.media, 16404 n = e[t], 16405 a = n.label, 16406 s = n.languageCode, 16407 o = this.getExistingTrack(a, s); 16408 if (o) (r[t] = o), He(r[t]), Ge(r[t], i); 16409 else { 16410 var l = this.createTextTrack('captions', a, s); 16411 l && ((l[t] = !0), (r[t] = l)); 16412 } 16413 } 16414 }), 16415 (e.createNonNativeTrack = function (t) { 16416 if (!this.nonNativeCaptionsTracks[t]) { 16417 var e = this.captionsProperties[t]; 16418 if (e) { 16419 var r = { 16420 _id: t, 16421 label: e.label, 16422 kind: 'captions', 16423 default: !!e.media && !!e.media.default, 16424 closedCaptions: e.media, 16425 }; 16426 (this.nonNativeCaptionsTracks[t] = r), 16427 this.hls.trigger(S.NON_NATIVE_TEXT_TRACKS_FOUND, { tracks: [r] }); 16428 } 16429 } 16430 }), 16431 (e.createTextTrack = function (t, e, r) { 16432 var i = this.media; 16433 if (i) return i.addTextTrack(t, e, r); 16434 }), 16435 (e.onMediaAttaching = function (t, e) { 16436 (this.media = e.media), this._cleanTracks(); 16437 }), 16438 (e.onMediaDetaching = function () { 16439 var t = this.captionsTracks; 16440 Object.keys(t).forEach(function (e) { 16441 He(t[e]), delete t[e]; 16442 }), 16443 (this.nonNativeCaptionsTracks = {}); 16444 }), 16445 (e.onManifestLoading = function () {
16446 (this.lastCc = -1), 16447 (this.lastSn = -1), 16448 (this.lastPartIndex = -1), 16449 (this.prevCC = -1), 16450 (this.vttCCs = { 16451 ccOffset: 0, 16452 presentationOffset: 0, 16453 0: { start: 0, prevCC: -1, new: !0 }, 16454 }), 16455 this._cleanTracks(), 16456 (this.tracks = []), 16457 (this.captionsTracks = {}), 16458 (this.nonNativeCaptionsTracks = {}), 16459 (this.textTracks = []), 16460 (this.unparsedVttFrags = []), 16461 (this.initPTS = []), 16462 this.cea608Parser1 && 16463 this.cea608Parser2 && 16464 (this.cea608Parser1.reset(), this.cea608Parser2.reset()); 16465 }), 16466 (e._cleanTracks = function () { 16467 var t = this.media; 16468 if (t) { 16469 var e = t.textTracks; 16470 if (e) for (var r = 0; r < e.length; r++) He(e[r]); 16471 } 16472 }), 16473 (e.onSubtitleTracksUpdated = function (t, e) { 16474 var r = this, 16475 i = e.subtitleTracks || [], 16476 n = i.some(function (t) { 16477 return t.textCodec === Ga; 16478 }); 16479 if (this.config.enableWebVTT || (n && this.config.enableIMSC1)) { 16480 if (Xn(this.tracks, i)) return void (this.tracks = i); 16481 if ( 16482 ((this.textTracks = []), (this.tracks = i), this.config.renderTextTracksNatively) 16483 ) { 16484 var a = this.media, 16485 s = a ? Ye(a.textTracks) : null; 16486 if ( 16487 (this.tracks.forEach(function (t, e) { 16488 var i; 16489 if (s) { 16490 for (var n = null, a = 0; a < s.length; a++) 16491 if (s[a] && Za(s[a], t)) { 16492 (n = s[a]), (s[a] = null); 16493 break; 16494 } 16495 n && (i = n); 16496 } 16497 if (i) He(i); 16498 else { 16499 var o = $a(t); 16500 (i = r.createTextTrack(o, t.name, t.lang)) && (i.mode = 'disabled'); 16501 } 16502 i && r.textTracks.push(i); 16503 }), 16504 null != s && s.length) 16505 ) { 16506 var o = s 16507 .filter(function (t) { 16508 return null !== t; 16509 }) 16510 .map(function (t) { 16511 return t.label; 16512 }); 16513 o.length && 16514 w.warn( 16515 'Media element contains unused subtitle tracks: ' + 16516 o.join(', ') + 16517 '. Replace media element for each source to clear TextTracks and captions menu.' 16518 ); 16519 } 16520 } else if (this.tracks.length) { 16521 var l = this.tracks.map(function (t) { 16522 return { 16523 label: t.name, 16524 kind: t.type.toLowerCase(), 16525 default: t.default, 16526 subtitleTrack: t, 16527 }; 16528 }); 16529 this.hls.trigger(S.NON_NATIVE_TEXT_TRACKS_FOUND, { tracks: l }); 16530 } 16531 } 16532 }), 16533 (e.onManifestLoaded = function (t, e) { 16534 var r = this; 16535 this.config.enableCEA708Captions && 16536 e.captions && 16537 e.captions.forEach(function (t) { 16538 var e = /(?:CC|SERVICE)([1-4])/.exec(t.instreamId); 16539 if (e) { 16540 var i = 'textTrack' + e[1], 16541 n = r.captionsProperties[i]; 16542 n && ((n.label = t.name), t.lang && (n.languageCode = t.lang), (n.media = t)); 16543 } 16544 }); 16545 }), 16546 (e.closedCaptionsForLevel = function (t) { 16547 var e = this.hls.levels[t.level]; 16548 return null == e ? void 0 : e.attrs['CLOSED-CAPTIONS']; 16549 }), 16550 (e.onFragLoading = function (t, e) { 16551 if (this.enabled && e.frag.type === Fe) { 16552 var r, 16553 i, 16554 n = this.cea608Parser1, 16555 a = this.cea608Parser2, 16556 s = this.lastSn, 16557 o = e.frag, 16558 l = o.cc, 16559 u = o.sn, 16560 h = null != (r = null == (i = e.part) ? void 0 : i.index) ? r : -1; 16561 n && 16562 a && 16563 (u !== s + 1 || (u === s && h !== this.lastPartIndex + 1) || l !== this.lastCc) && 16564 (n.reset(), a.reset()),
16565 (this.lastCc = l), 16566 (this.lastSn = u), 16567 (this.lastPartIndex = h); 16568 } 16569 }), 16570 (e.onFragLoaded = function (t, e) { 16571 var r = e.frag, 16572 i = e.payload; 16573 if (r.type === Oe) 16574 if (i.byteLength) { 16575 var n = r.decryptdata, 16576 a = 'stats' in e; 16577 if (null == n || !n.encrypted || a) { 16578 var s = this.tracks[r.level], 16579 o = this.vttCCs; 16580 o[r.cc] || 16581 ((o[r.cc] = { start: r.start, prevCC: this.prevCC, new: !0 }), 16582 (this.prevCC = r.cc)), 16583 s && s.textCodec === Ga ? this._parseIMSC1(r, i) : this._parseVTTs(e); 16584 } 16585 } else 16586 this.hls.trigger(S.SUBTITLE_FRAG_PROCESSED, { 16587 success: !1, 16588 frag: r, 16589 error: new Error('Empty subtitle payload'), 16590 }); 16591 }), 16592 (e._parseIMSC1 = function (t, e) { 16593 var r = this, 16594 i = this.hls; 16595 Ya( 16596 e, 16597 this.initPTS[t.cc], 16598 function (e) { 16599 r._appendCues(e, t.level), 16600 i.trigger(S.SUBTITLE_FRAG_PROCESSED, { success: !0, frag: t }); 16601 }, 16602 function (e) { 16603 w.log('Failed to parse IMSC1: ' + e), 16604 i.trigger(S.SUBTITLE_FRAG_PROCESSED, { success: !1, frag: t, error: e }); 16605 } 16606 ); 16607 }), 16608 (e._parseVTTs = function (t) { 16609 var e, 16610 r = this, 16611 i = t.frag, 16612 n = t.payload, 16613 a = this.initPTS, 16614 s = this.unparsedVttFrags, 16615 o = a.length - 1; 16616 if (a[i.cc] || -1 !== o) { 16617 var l = this.hls; 16618 Ba( 16619 null != (e = i.initSegment) && e.data 16620 ? Wt(i.initSegment.data, new Uint8Array(n)) 16621 : n, 16622 this.initPTS[i.cc], 16623 this.vttCCs, 16624 i.cc, 16625 i.start, 16626 function (t) { 16627 r._appendCues(t, i.level), 16628 l.trigger(S.SUBTITLE_FRAG_PROCESSED, { success: !0, frag: i }); 16629 }, 16630 function (e) { 16631 var a = 'Missing initPTS for VTT MPEGTS' === e.message; 16632 a ? s.push(t) : r._fallbackToIMSC1(i, n), 16633 w.log('Failed to parse VTT cue: ' + e), 16634 (a && o > i.cc) || 16635 l.trigger(S.SUBTITLE_FRAG_PROCESSED, { success: !1, frag: i, error: e }); 16636 } 16637 ); 16638 } else s.push(t); 16639 }), 16640 (e._fallbackToIMSC1 = function (t, e) { 16641 var r = this, 16642 i = this.tracks[t.level]; 16643 i.textCodec || 16644 Ya( 16645 e, 16646 this.initPTS[t.cc], 16647 function () { 16648 (i.textCodec = Ga), r._parseIMSC1(t, e); 16649 }, 16650 function () { 16651 i.textCodec = 'wvtt'; 16652 } 16653 ); 16654 }), 16655 (e._appendCues = function (t, e) { 16656 var r = this.hls; 16657 if (this.config.renderTextTracksNatively) { 16658 var i = this.textTracks[e]; 16659 if (!i || 'disabled' === i.mode) return; 16660 t.forEach(function (t) { 16661 return Ke(i, t); 16662 }); 16663 } else { 16664 var n = this.tracks[e]; 16665 if (!n) return; 16666 var a = n.default ? 'default' : 'subtitles' + e; 16667 r.trigger(S.CUES_PARSED, { type: 'subtitles', cues: t, track: a }); 16668 } 16669 }), 16670 (e.onFragDecrypted = function (t, e) { 16671 e.frag.type === Oe && this.onFragLoaded(S.FRAG_LOADED, e); 16672 }), 16673 (e.onSubtitleTracksCleared = function () { 16674 (this.tracks = []), (this.captionsTracks = {}); 16675 }), 16676 (e.onFragParsingUserdata = function (t, e) { 16677 this.initCea608Parsers(); 16678 var r = this.cea608Parser1, 16679 i = this.cea608Parser2; 16680 if (this.enabled && r && i) { 16681 var n = e.frag, 16682 a = e.samples; 16683 if (n.type !== Fe || 'NONE' !== this.closedCaptionsForLevel(n)) 16684 for (var s = 0; s < a.length; s++) { 16685 var o = a[s].bytes; 16686 if (o) { 16687 var l = this.extractCea608Data(o); 16688 r.addData(a[s].pts, l[0]), i.addData(a[s].pts, l[1]); 16689 } 16690 } 16691 } 16692 }), 16693 (e.onBufferFlushing = function (t, e) { 16694 var r = e.startOffset, 16695 i = e.endOffset, 16696 n = e.endOffsetSubtitles, 16697 a = e.type, 16698 s = this.media; 16699 if (s && !(s.currentTime < i)) { 16700 if (!a || 'video' === a) { 16701 var o = this.captionsTracks;
16702 Object.keys(o).forEach(function (t) { 16703 return Ve(o[t], r, i); 16704 }); 16705 } 16706 if (this.config.renderTextTracksNatively && 0 === r && void 0 !== n) { 16707 var l = this.textTracks; 16708 Object.keys(l).forEach(function (t) { 16709 return Ve(l[t], r, n); 16710 }); 16711 } 16712 } 16713 }), 16714 (e.extractCea608Data = function (t) { 16715 for (var e = [[], []], r = 31 & t[0], i = 2, n = 0; n < r; n++) { 16716 var a = t[i++], 16717 s = 127 & t[i++], 16718 o = 127 & t[i++]; 16719 if ((0 !== s || 0 !== o) && 0 != (4 & a)) { 16720 var l = 3 & a; 16721 (0 !== l && 1 !== l) || (e[l].push(s), e[l].push(o)); 16722 } 16723 } 16724 return e; 16725 }), 16726 t 16727 ); 16728 })(); 16729 function $a(t) { 16730 return t.characteristics && 16731 /transcribes-spoken-dialog/gi.test(t.characteristics) && 16732 /describes-music-and-sound/gi.test(t.characteristics) 16733 ? 'captions' 16734 : 'subtitles'; 16735 } 16736 function Za(t, e) { 16737 return !!t && t.kind === $a(e) && Qn(e, t); 16738 } 16739 var ts = (function () { 16740 function t(t) { 16741 (this.hls = void 0), 16742 (this.autoLevelCapping = void 0), 16743 (this.firstLevel = void 0), 16744 (this.media = void 0), 16745 (this.restrictedLevels = void 0), 16746 (this.timer = void 0), 16747 (this.clientRect = void 0), 16748 (this.streamController = void 0), 16749 (this.hls = t), 16750 (this.autoLevelCapping = Number.POSITIVE_INFINITY), 16751 (this.firstLevel = -1), 16752 (this.media = null), 16753 (this.restrictedLevels = []), 16754 (this.timer = void 0), 16755 (this.clientRect = null), 16756 this.registerListeners(); 16757 } 16758 var e = t.prototype; 16759 return ( 16760 (e.setStreamController = function (t) { 16761 this.streamController = t; 16762 }), 16763 (e.destroy = function () { 16764 this.hls && this.unregisterListener(), 16765 this.timer && this.stopCapping(), 16766 (this.media = null), 16767 (this.clientRect = null), 16768 (this.hls = this.streamController = null); 16769 }), 16770 (e.registerListeners = function () { 16771 var t = this.hls; 16772 t.on(S.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this), 16773 t.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 16774 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 16775 t.on(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 16776 t.on(S.BUFFER_CODECS, this.onBufferCodecs, this), 16777 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this); 16778 }), 16779 (e.unregisterListener = function () { 16780 var t = this.hls; 16781 t.off(S.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this), 16782 t.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this), 16783 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 16784 t.off(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 16785 t.off(S.BUFFER_CODECS, this.onBufferCodecs, this), 16786 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this); 16787 }), 16788 (e.onFpsDropLevelCapping = function (t, e) { 16789 var r = this.hls.levels[e.droppedLevel]; 16790 this.isLevelAllowed(r) && 16791 this.restrictedLevels.push({ 16792 bitrate: r.bitrate, 16793 height: r.height, 16794 width: r.width, 16795 }); 16796 }), 16797 (e.onMediaAttaching = function (t, e) { 16798 (this.media = e.media instanceof HTMLVideoElement ? e.media : null), 16799 (this.clientRect = null), 16800 this.timer && this.hls.levels.length && this.detectPlayerSize(); 16801 }), 16802 (e.onManifestParsed = function (t, e) { 16803 var r = this.hls; 16804 (this.restrictedLevels = []), 16805 (this.firstLevel = e.firstLevel), 16806 r.config.capLevelToPlayerSize && e.video && this.startCapping(); 16807 }), 16808 (e.onLevelsUpdated = function (t, e) { 16809 this.timer && y(this.autoLevelCapping) && this.detectPlayerSize(); 16810 }), 16811 (e.onBufferCodecs = function (t, e) { 16812 this.hls.config.capLevelToPlayerSize && e.video && this.startCapping(); 16813 }), 16814 (e.onMediaDetaching = function () { 16815 this.stopCapping(); 16816 }), 16817 (e.detectPlayerSize = function () { 16818 if (this.media) { 16819 if (this.mediaHeight <= 0 || this.mediaWidth <= 0) 16820 return void (this.clientRect = null); 16821 var t = this.hls.levels; 16822 if (t.length) { 16823 var e = this.hls, 16824 r = this.getMaxLevel(t.length - 1); 16825 r !== this.autoLevelCapping && 16826 w.log( 16827 'Setting autoLevelCapping to ' + 16828 r + 16829 ': ' + 16830 t[r].height + 16831 'p@' + 16832 t[r].bitrate + 16833 ' for media ' + 16834 this.mediaWidth + 16835 'x' + 16836 this.mediaHeight 16837 ), 16838 (e.autoLevelCapping = r), 16839 e.autoLevelCapping > this.autoLevelCapping && 16840 this.streamController && 16841 this.streamController.nextLevelSwitch(), 16842 (this.autoLevelCapping = e.autoLevelCapping); 16843 } 16844 } 16845 }), 16846 (e.getMaxLevel = function (e) { 16847 var r = this, 16848 i = this.hls.levels; 16849 if (!i.length) return -1; 16850 var n = i.filter(function (t, i) { 16851 return r.isLevelAllowed(t) && i <= e; 16852 }); 16853 return ( 16854 (this.clientRect = null),
16855 t.getMaxLevelByMediaSize(n, this.mediaWidth, this.mediaHeight) 16856 ); 16857 }), 16858 (e.startCapping = function () { 16859 this.timer || 16860 ((this.autoLevelCapping = Number.POSITIVE_INFINITY), 16861 self.clearInterval(this.timer), 16862 (this.timer = self.setInterval(this.detectPlayerSize.bind(this), 1e3)), 16863 this.detectPlayerSize()); 16864 }), 16865 (e.stopCapping = function () { 16866 (this.restrictedLevels = []), 16867 (this.firstLevel = -1), 16868 (this.autoLevelCapping = Number.POSITIVE_INFINITY), 16869 this.timer && (self.clearInterval(this.timer), (this.timer = void 0)); 16870 }), 16871 (e.getDimensions = function () { 16872 if (this.clientRect) return this.clientRect; 16873 var t = this.media, 16874 e = { width: 0, height: 0 }; 16875 if (t) { 16876 var r = t.getBoundingClientRect(); 16877 (e.width = r.width), 16878 (e.height = r.height), 16879 e.width || 16880 e.height || 16881 ((e.width = r.right - r.left || t.width || 0), 16882 (e.height = r.bottom - r.top || t.height || 0)); 16883 } 16884 return (this.clientRect = e), e; 16885 }), 16886 (e.isLevelAllowed = function (t) { 16887 return !this.restrictedLevels.some(function (e) { 16888 return t.bitrate === e.bitrate && t.width === e.width && t.height === e.height; 16889 }); 16890 }), 16891 (t.getMaxLevelByMediaSize = function (t, e, r) { 16892 if (null == t || !t.length) return -1; 16893 for (var i, n, a = t.length - 1, s = Math.max(e, r), o = 0; o < t.length; o += 1) { 16894 var l = t[o]; 16895 if ( 16896 (l.width >= s || l.height >= s) && 16897 ((i = l), !(n = t[o + 1]) || i.width !== n.width || i.height !== n.height) 16898 ) { 16899 a = o; 16900 break; 16901 } 16902 } 16903 return a; 16904 }), 16905 s(t, [ 16906 { 16907 key: 'mediaWidth', 16908 get: function () { 16909 return this.getDimensions().width * this.contentScaleFactor; 16910 }, 16911 }, 16912 { 16913 key: 'mediaHeight', 16914 get: function () { 16915 return this.getDimensions().height * this.contentScaleFactor; 16916 }, 16917 }, 16918 { 16919 key: 'contentScaleFactor', 16920 get: function () { 16921 var t = 1; 16922 if (!this.hls.config.ignoreDevicePixelRatio) 16923 try { 16924 t = self.devicePixelRatio; 16925 } catch (t) {} 16926 return t; 16927 }, 16928 }, 16929 ]), 16930 t 16931 ); 16932 })(), 16933 es = (function () { 16934 function t(t) { 16935 (this.hls = void 0), 16936 (this.isVideoPlaybackQualityAvailable = !1), 16937 (this.timer = void 0), 16938 (this.media = null), 16939 (this.lastTime = void 0), 16940 (this.lastDroppedFrames = 0), 16941 (this.lastDecodedFrames = 0), 16942 (this.streamController = void 0), 16943 (this.hls = t), 16944 this.registerListeners(); 16945 } 16946 var e = t.prototype; 16947 return ( 16948 (e.setStreamController = function (t) { 16949 this.streamController = t; 16950 }), 16951 (e.registerListeners = function () { 16952 this.hls.on(S.MEDIA_ATTACHING, this.onMediaAttaching, this); 16953 }), 16954 (e.unregisterListeners = function () { 16955 this.hls.off(S.MEDIA_ATTACHING, this.onMediaAttaching, this); 16956 }), 16957 (e.destroy = function () { 16958 this.timer && clearInterval(this.timer), 16959 this.unregisterListeners(), 16960 (this.isVideoPlaybackQualityAvailable = !1), 16961 (this.media = null); 16962 }), 16963 (e.onMediaAttaching = function (t, e) { 16964 var r = this.hls.config; 16965 if (r.capLevelOnFPSDrop) { 16966 var i = e.media instanceof self.HTMLVideoElement ? e.media : null; 16967 (this.media = i), 16968 i && 16969 'function' == typeof i.getVideoPlaybackQuality && 16970 (this.isVideoPlaybackQualityAvailable = !0), 16971 self.clearInterval(this.timer), 16972 (this.timer = self.setInterval( 16973 this.checkFPSInterval.bind(this), 16974 r.fpsDroppedMonitoringPeriod 16975 )); 16976 } 16977 }), 16978 (e.checkFPS = function (t, e, r) { 16979 var i = performance.now(); 16980 if (e) { 16981 if (this.lastTime) {
16982 var n = i - this.lastTime, 16983 a = r - this.lastDroppedFrames, 16984 s = e - this.lastDecodedFrames, 16985 o = (1e3 * a) / n, 16986 l = this.hls; 16987 if ( 16988 (l.trigger(S.FPS_DROP, { 16989 currentDropped: a, 16990 currentDecoded: s, 16991 totalDroppedFrames: r, 16992 }), 16993 o > 0 && a > l.config.fpsDroppedMonitoringThreshold * s) 16994 ) { 16995 var u = l.currentLevel; 16996 w.warn('drop FPS ratio greater than max allowed value for currentLevel: ' + u), 16997 u > 0 && 16998 (-1 === l.autoLevelCapping || l.autoLevelCapping >= u) && 16999 ((u -= 1), 17000 l.trigger(S.FPS_DROP_LEVEL_CAPPING, { 17001 level: u, 17002 droppedLevel: l.currentLevel, 17003 }), 17004 (l.autoLevelCapping = u), 17005 this.streamController.nextLevelSwitch()); 17006 } 17007 } 17008 (this.lastTime = i), (this.lastDroppedFrames = r), (this.lastDecodedFrames = e); 17009 } 17010 }), 17011 (e.checkFPSInterval = function () { 17012 var t = this.media; 17013 if (t) 17014 if (this.isVideoPlaybackQualityAvailable) { 17015 var e = t.getVideoPlaybackQuality(); 17016 this.checkFPS(t, e.totalVideoFrames, e.droppedVideoFrames); 17017 } else this.checkFPS(t, t.webkitDecodedFrameCount, t.webkitDroppedFrameCount); 17018 }), 17019 t 17020 ); 17021 })(), 17022 rs = '[eme]', 17023 is = (function () { 17024 function t(e) { 17025 (this.hls = void 0), 17026 (this.config = void 0), 17027 (this.media = null), 17028 (this.keyFormatPromise = null), 17029 (this.keySystemAccessPromises = {}), 17030 (this._requestLicenseFailureCount = 0), 17031 (this.mediaKeySessions = []), 17032 (this.keyIdToKeySessionPromise = {}), 17033 (this.setMediaKeysQueue = t.CDMCleanupPromise ? [t.CDMCleanupPromise] : []), 17034 (this.onMediaEncrypted = this._onMediaEncrypted.bind(this)), 17035 (this.onWaitingForKey = this._onWaitingForKey.bind(this)), 17036 (this.debug = w.debug.bind(w, rs)), 17037 (this.log = w.log.bind(w, rs)), 17038 (this.warn = w.warn.bind(w, rs)), 17039 (this.error = w.error.bind(w, rs)), 17040 (this.hls = e), 17041 (this.config = e.config), 17042 this.registerListeners(); 17043 } 17044 var e = t.prototype; 17045 return ( 17046 (e.destroy = function () { 17047 this.unregisterListeners(), this.onMediaDetached(); 17048 var t = this.config; 17049 (t.requestMediaKeySystemAccessFunc = null), 17050 (t.licenseXhrSetup = t.licenseResponseCallback = void 0), 17051 (t.drmSystems = t.drmSystemOptions = {}), 17052 (this.hls = 17053 this.onMediaEncrypted = 17054 this.onWaitingForKey = 17055 this.keyIdToKeySessionPromise = 17056 null), 17057 (this.config = null); 17058 }), 17059 (e.registerListeners = function () { 17060 this.hls.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 17061 this.hls.on(S.MEDIA_DETACHED, this.onMediaDetached, this), 17062 this.hls.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 17063 this.hls.on(S.MANIFEST_LOADED, this.onManifestLoaded, this); 17064 }), 17065 (e.unregisterListeners = function () { 17066 this.hls.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 17067 this.hls.off(S.MEDIA_DETACHED, this.onMediaDetached, this), 17068 this.hls.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 17069 this.hls.off(S.MANIFEST_LOADED, this.onManifestLoaded, this); 17070 }), 17071 (e.getLicenseServerUrl = function (t) { 17072 var e = this.config, 17073 r = e.drmSystems, 17074 i = e.widevineLicenseUrl, 17075 n = r[t]; 17076 if (n) return n.licenseUrl; 17077 if (t === q.WIDEVINE && i) return i; 17078 throw new Error('no license server URL configured for key-system "' + t + '"'); 17079 }), 17080 (e.getServerCertificateUrl = function (t) { 17081 var e = this.config.drmSystems[t]; 17082 if (e) return e.serverCertificateUrl; 17083 this.log('No Server Certificate in config.drmSystems["' + t + '"]'); 17084 }), 17085 (e.attemptKeySystemAccess = function (t) { 17086 var e = this, 17087 r = this.hls.levels, 17088 i = function (t, e, r) { 17089 return !!t && r.indexOf(t) === e; 17090 }, 17091 n = r 17092 .map(function (t) { 17093 return t.audioCodec; 17094 }) 17095 .filter(i), 17096 a = r 17097 .map(function (t) { 17098 return t.videoCodec; 17099 }) 17100 .filter(i); 17101 return ( 17102 n.length + a.length === 0 && a.push('avc1.42e01e'), 17103 new Promise(function (r, i) { 17104 !(function t(s) { 17105 var o = s.shift(); 17106 e.getMediaKeysPromise(o, n, a) 17107 .then(function (t) { 17108 return r({ keySystem: o, mediaKeys: t }); 17109 }) 17110 .catch(function (e) { 17111 s.length 17112 ? t(s) 17113 : i( 17114 e instanceof ls 17115 ? e 17116 : new ls( 17117 { 17118 type: L.KEY_SYSTEM_ERROR, 17119 details: A.KEY_SYSTEM_NO_ACCESS, 17120 error: e, 17121 fatal: !0, 17122 }, 17123 e.message 17124 ) 17125 ); 17126 }); 17127 })(t); 17128 }) 17129 ); 17130 }), 17131 (e.requestMediaKeySystemAccess = function (t, e) { 17132 var r = this.config.requestMediaKeySystemAccessFunc; 17133 if ('function' != typeof r) { 17134 var i = 'Configured requestMediaKeySystemAccess is not a function ' + r; 17135 return ( 17136 null === ot && 17137 'http:' === self.location.protocol && 17138 (i = 17139 'navigator.requestMediaKeySystemAccess is not available over insecure protocol ' + 17140 location.protocol), 17141 Promise.reject(new Error(i)) 17142 ); 17143 } 17144 return r(t, e); 17145 }), 17146 (e.getMediaKeysPromise = function (t, e, r) { 17147 var i = this, 17148 n = (function (t, e, r, i) { 17149 var n; 17150 switch (t) { 17151 case q.FAIRPLAY: 17152 n = ['cenc', 'sinf']; 17153 break; 17154 case q.WIDEVINE: 17155 case q.PLAYREADY: 17156 n = ['cenc']; 17157 break; 17158 case q.CLEARKEY:
17159 n = ['cenc', 'keyids']; 17160 break; 17161 default: 17162 throw new Error('Unknown key-system: ' + t); 17163 } 17164 return (function (t, e, r, i) { 17165 return [ 17166 { 17167 initDataTypes: t, 17168 persistentState: i.persistentState || 'optional', 17169 distinctiveIdentifier: i.distinctiveIdentifier || 'optional', 17170 sessionTypes: i.sessionTypes || [i.sessionType || 'temporary'], 17171 audioCapabilities: e.map(function (t) { 17172 return { 17173 contentType: 'audio/mp4; codecs="' + t + '"', 17174 robustness: i.audioRobustness || '', 17175 encryptionScheme: i.audioEncryptionScheme || null, 17176 }; 17177 }), 17178 videoCapabilities: r.map(function (t) { 17179 return { 17180 contentType: 'video/mp4; codecs="' + t + '"', 17181 robustness: i.videoRobustness || '', 17182 encryptionScheme: i.videoEncryptionScheme || null, 17183 }; 17184 }), 17185 }, 17186 ]; 17187 })(n, e, r, i); 17188 })(t, e, r, this.config.drmSystemOptions), 17189 a = this.keySystemAccessPromises[t], 17190 s = null == a ? void 0 : a.keySystemAccess; 17191 if (!s) { 17192 this.log( 17193 'Requesting encrypted media "' + 17194 t + 17195 '" key-system access with config: ' + 17196 JSON.stringify(n) 17197 ), 17198 (s = this.requestMediaKeySystemAccess(t, n)); 17199 var o = (this.keySystemAccessPromises[t] = { keySystemAccess: s }); 17200 return ( 17201 s.catch(function (e) { 17202 i.log('Failed to obtain access to key-system "' + t + '": ' + e); 17203 }), 17204 s.then(function (e) { 17205 i.log('Access for key-system "' + e.keySystem + '" obtained'); 17206 var r = i.fetchServerCertificate(t); 17207 return ( 17208 i.log('Create media-keys for "' + t + '"'), 17209 (o.mediaKeys = e.createMediaKeys().then(function (e) { 17210 return ( 17211 i.log('Media-keys created for "' + t + '"'), 17212 r.then(function (r) { 17213 return r ? i.setMediaKeysServerCertificate(e, t, r) : e; 17214 }) 17215 ); 17216 })), 17217 o.mediaKeys.catch(function (e) { 17218 i.error('Failed to create media-keys for "' + t + '"}: ' + e); 17219 }), 17220 o.mediaKeys 17221 ); 17222 }) 17223 ); 17224 } 17225 return s.then(function () { 17226 return a.mediaKeys; 17227 }); 17228 }), 17229 (e.createMediaKeySessionContext = function (t) { 17230 var e = t.decryptdata, 17231 r = t.keySystem, 17232 i = t.mediaKeys; 17233 this.log( 17234 'Creating key-system session "' + r + '" keyId: ' + kt.hexDump(e.keyId || []) 17235 ); 17236 var n = i.createSession(), 17237 a = { 17238 decryptdata: e, 17239 keySystem: r, 17240 mediaKeys: i, 17241 mediaKeysSession: n, 17242 keyStatus: 'status-pending', 17243 }; 17244 return this.mediaKeySessions.push(a), a; 17245 }), 17246 (e.renewKeySession = function (t) { 17247 var e = t.decryptdata; 17248 if (e.pssh) { 17249 var r = this.createMediaKeySessionContext(t), 17250 i = this.getKeyIdString(e); 17251 this.keyIdToKeySessionPromise[i] = this.generateRequestWithPreferredKeySession( 17252 r, 17253 'cenc', 17254 e.pssh, 17255 'expired' 17256 ); 17257 } else this.warn('Could not renew expired session. Missing pssh initData.'); 17258 this.removeSession(t); 17259 }), 17260 (e.getKeyIdString = function (t) { 17261 if (!t) throw new Error('Could not read keyId of undefined decryptdata'); 17262 if (null === t.keyId) throw new Error('keyId is null'); 17263 return kt.hexDump(t.keyId); 17264 }), 17265 (e.updateKeySession = function (t, e) { 17266 var r, 17267 i = t.mediaKeysSession; 17268 return ( 17269 this.log( 17270 'Updating key-session "' + 17271 i.sessionId + 17272 '" for keyID ' + 17273 kt.hexDump((null == (r = t.decryptdata) ? void 0 : r.keyId) || []) + 17274 '\n } (data length: ' + 17275 (e ? e.byteLength : e) + 17276 ')' 17277 ), 17278 i.update(e) 17279 ); 17280 }), 17281 (e.selectKeySystemFormat = function (t) { 17282 var e = Object.keys(t.levelkeys || {}); 17283 return ( 17284 this.keyFormatPromise || 17285 (this.log( 17286 'Selecting key-system from fragment (sn: ' + 17287 t.sn + 17288 ' ' + 17289 t.type + 17290 ': ' + 17291 t.level + 17292 ') key formats ' + 17293 e.join(', ') 17294 ), 17295 (this.keyFormatPromise = this.getKeyFormatPromise(e))), 17296 this.keyFormatPromise 17297 ); 17298 }), 17299 (e.getKeyFormatPromise = function (t) { 17300 var e = this; 17301 return new Promise(function (r, i) { 17302 var n = at(e.config), 17303 a = t.map($).filter(function (t) { 17304 return !!t && -1 !== n.indexOf(t); 17305 }); 17306 return e 17307 .getKeySystemSelectionPromise(a) 17308 .then(function (t) {
17309 var e = t.keySystem, 17310 n = nt(e); 17311 n ? r(n) : i(new Error('Unable to find format for key-system "' + e + '"')); 17312 }) 17313 .catch(i); 17314 }); 17315 }), 17316 (e.loadKey = function (t) { 17317 var e = this, 17318 r = t.keyInfo.decryptdata, 17319 i = this.getKeyIdString(r), 17320 n = 17321 '(keyId: ' + 17322 i + 17323 ' format: "' + 17324 r.keyFormat + 17325 '" method: ' + 17326 r.method + 17327 ' uri: ' + 17328 r.uri + 17329 ')'; 17330 this.log('Starting session for key ' + n); 17331 var a = this.keyIdToKeySessionPromise[i]; 17332 return ( 17333 a || 17334 (a = this.keyIdToKeySessionPromise[i] = 17335 this.getKeySystemForKeyPromise(r).then(function (i) { 17336 var a = i.keySystem, 17337 s = i.mediaKeys; 17338 return ( 17339 e.throwIfDestroyed(), 17340 e.log( 17341 'Handle encrypted media sn: ' + 17342 t.frag.sn + 17343 ' ' + 17344 t.frag.type + 17345 ': ' + 17346 t.frag.level + 17347 ' using key ' + 17348 n 17349 ), 17350 e.attemptSetMediaKeys(a, s).then(function () { 17351 e.throwIfDestroyed(); 17352 var t = e.createMediaKeySessionContext({ 17353 keySystem: a, 17354 mediaKeys: s, 17355 decryptdata: r, 17356 }); 17357 return e.generateRequestWithPreferredKeySession( 17358 t, 17359 'cenc', 17360 r.pssh, 17361 'playlist-key' 17362 ); 17363 }) 17364 ); 17365 })).catch(function (t) { 17366 return e.handleError(t); 17367 }), 17368 a 17369 ); 17370 }), 17371 (e.throwIfDestroyed = function (t) { 17372 if (!this.hls) throw new Error('invalid state'); 17373 }), 17374 (e.handleError = function (t) { 17375 this.hls && 17376 (this.error(t.message), 17377 t instanceof ls 17378 ? this.hls.trigger(S.ERROR, t.data) 17379 : this.hls.trigger(S.ERROR, { 17380 type: L.KEY_SYSTEM_ERROR, 17381 details: A.KEY_SYSTEM_NO_KEYS, 17382 error: t, 17383 fatal: !0, 17384 })); 17385 }), 17386 (e.getKeySystemForKeyPromise = function (t) { 17387 var e = this.getKeyIdString(t), 17388 r = this.keyIdToKeySessionPromise[e]; 17389 if (!r) { 17390 var i = $(t.keyFormat), 17391 n = i ? [i] : at(this.config); 17392 return this.attemptKeySystemAccess(n); 17393 } 17394 return r; 17395 }), 17396 (e.getKeySystemSelectionPromise = function (t) { 17397 if ((t.length || (t = at(this.config)), 0 === t.length)) 17398 throw new ls( 17399 { 17400 type: L.KEY_SYSTEM_ERROR, 17401 details: A.KEY_SYSTEM_NO_CONFIGURED_LICENSE, 17402 fatal: !0, 17403 }, 17404 'Missing key-system license configuration options ' + 17405 JSON.stringify({ drmSystems: this.config.drmSystems }) 17406 ); 17407 return this.attemptKeySystemAccess(t); 17408 }), 17409 (e._onMediaEncrypted = function (t) { 17410 var e = this, 17411 r = t.initDataType, 17412 i = t.initData, 17413 n = '"' + t.type + '" event: init data type: "' + r + '"'; 17414 if ((this.debug(n), null !== i)) { 17415 var a, s; 17416 if ('sinf' === r && this.config.drmSystems[q.FAIRPLAY]) {
17417 var o = Ct(new Uint8Array(i)); 17418 try { 17419 var l = V(JSON.parse(o).sinf), 17420 u = Vt(new Uint8Array(l)); 17421 if (!u) throw new Error("'schm' box missing or not cbcs/cenc with schi > tenc"); 17422 (a = u.subarray(8, 24)), (s = q.FAIRPLAY); 17423 } catch (t) { 17424 return void this.warn(n + ' Failed to parse sinf: ' + t); 17425 } 17426 } else { 17427 var h = (function (t) { 17428 var e = []; 17429 if (t instanceof ArrayBuffer) 17430 for (var r = t.byteLength, i = 0; i + 32 < r; ) { 17431 var n = Jt(new DataView(t, i)); 17432 e.push(n), (i += n.size); 17433 } 17434 return e; 17435 })(i), 17436 d = h.filter(function (t) { 17437 return t.systemId === rt; 17438 })[0]; 17439 if (!d) 17440 return void (0 === h.length || 17441 h.some(function (t) { 17442 return !t.systemId; 17443 }) 17444 ? this.warn(n + ' contains incomplete or invalid pssh data') 17445 : this.log( 17446 'ignoring ' + 17447 n + 17448 ' for ' + 17449 h 17450 .map(function (t) { 17451 return it(t.systemId); 17452 }) 17453 .join(',') + 17454 ' pssh data in favor of playlist keys' 17455 )); 17456 if (((s = it(d.systemId)), 0 === d.version && d.data)) { 17457 var c = d.data.length - 22; 17458 a = d.data.subarray(c, c + 16); 17459 } 17460 } 17461 if (s && a) { 17462 for ( 17463 var f, 17464 g = kt.hexDump(a), 17465 v = this.keyIdToKeySessionPromise, 17466 m = this.mediaKeySessions, 17467 p = v[g], 17468 y = function () { 17469 var t = m[E], 17470 n = t.decryptdata; 17471 if (!n.keyId) return 0; 17472 var s = kt.hexDump(n.keyId); 17473 return g === s || -1 !== n.uri.replace(/-/g, '').indexOf(g) 17474 ? ((p = v[s]), 17475 n.pssh || 17476 (delete v[s], 17477 (n.pssh = new Uint8Array(i)), 17478 (n.keyId = a), 17479 (p = v[g] = 17480 p.then(function () { 17481 return e.generateRequestWithPreferredKeySession( 17482 t, 17483 r, 17484 i, 17485 'encrypted-event-key-match' 17486 ); 17487 }))), 17488 1) 17489 : void 0; 17490 }, 17491 E = 0; 17492 E < m.length && (0 === (f = y()) || 1 !== f); 17493 E++ 17494 ); 17495 p || 17496 (p = v[g] = 17497 this.getKeySystemSelectionPromise([s]).then(function (t) { 17498 var n, 17499 s = t.keySystem, 17500 o = t.mediaKeys; 17501 e.throwIfDestroyed(); 17502 var l = new Zt('ISO-23001-7', g, null != (n = nt(s)) ? n : ''); 17503 return ( 17504 (l.pssh = new Uint8Array(i)), 17505 (l.keyId = a), 17506 e.attemptSetMediaKeys(s, o).then(function () { 17507 e.throwIfDestroyed(); 17508 var t = e.createMediaKeySessionContext({ 17509 decryptdata: l, 17510 keySystem: s, 17511 mediaKeys: o, 17512 }); 17513 return e.generateRequestWithPreferredKeySession( 17514 t, 17515 r, 17516 i, 17517 'encrypted-event-no-match' 17518 ); 17519 }) 17520 ); 17521 })), 17522 p.catch(function (t) { 17523 return e.handleError(t); 17524 }); 17525 } 17526 } 17527 }), 17528 (e._onWaitingForKey = function (t) { 17529 this.log('"' + t.type + '" event'); 17530 }), 17531 (e.attemptSetMediaKeys = function (t, e) { 17532 var r = this, 17533 i = this.setMediaKeysQueue.slice(); 17534 this.log('Setting media-keys for "' + t + '"'); 17535 var n = Promise.all(i).then(function () { 17536 if (!r.media) 17537 throw new Error('Attempted to set mediaKeys without media element attached'); 17538 return r.media.setMediaKeys(e); 17539 }); 17540 return ( 17541 this.setMediaKeysQueue.push(n), 17542 n.then(function () { 17543 r.log('Media-keys set for "' + t + '"'), 17544 i.push(n), 17545 (r.setMediaKeysQueue = r.setMediaKeysQueue.filter(function (t) { 17546 return -1 === i.indexOf(t); 17547 })); 17548 }) 17549 ); 17550 }), 17551 (e.generateRequestWithPreferredKeySession = function (t, e, r, i) { 17552 var n, 17553 a, 17554 s = this, 17555 o = 17556 null == (n = this.config.drmSystems) || null == (a = n[t.keySystem]) 17557 ? void 0 17558 : a.generateRequest; 17559 if (o) 17560 try { 17561 var l = o.call(this.hls, e, r, t); 17562 if (!l) 17563 throw new Error('Invalid response from configured generateRequest filter'); 17564 (e = l.initDataType), 17565 (r = t.decryptdata.pssh = l.initData ? new Uint8Array(l.initData) : null); 17566 } catch (t) { 17567 var u; 17568 if ((this.warn(t.message), null != (u = this.hls) && u.config.debug)) throw t; 17569 } 17570 if (null === r) 17571 return ( 17572 this.log('Skipping key-session request for "' + i + '" (no initData)'), 17573 Promise.resolve(t) 17574 ); 17575 var h = this.getKeyIdString(t.decryptdata); 17576 this.log( 17577 'Generating key-session request for "' + 17578 i + 17579 '": ' + 17580 h + 17581 ' (init data type: ' + 17582 e + 17583 ' length: ' + 17584 (r ? r.byteLength : null) + 17585 ')' 17586 ); 17587 var d = new Vn(), 17588 c = (t._onmessage = function (e) { 17589 var r = t.mediaKeysSession; 17590 if (r) { 17591 var i = e.messageType, 17592 n = e.message; 17593 s.log( 17594 '"' + 17595 i + 17596 '" message event for session "' + 17597 r.sessionId + 17598 '" message size: ' + 17599 n.byteLength 17600 ), 17601 'license-request' === i || 'license-renewal' === i 17602 ? s.renewLicense(t, n).catch(function (t) { 17603 s.handleError(t), d.emit('error', t); 17604 }) 17605 : 'license-release' === i 17606 ? t.keySystem === q.FAIRPLAY && 17607 (s.updateKeySession(t, W('acknowledged')), s.removeSession(t))
17608 : s.warn('unhandled media key message type "' + i + '"'); 17609 } else d.emit('error', new Error('invalid state')); 17610 }), 17611 f = (t._onkeystatuseschange = function (e) { 17612 if (t.mediaKeysSession) { 17613 s.onKeyStatusChange(t); 17614 var r = t.keyStatus; 17615 d.emit('keyStatus', r), 17616 'expired' === r && 17617 (s.warn(t.keySystem + ' expired for key ' + h), s.renewKeySession(t)); 17618 } else d.emit('error', new Error('invalid state')); 17619 }); 17620 t.mediaKeysSession.addEventListener('message', c), 17621 t.mediaKeysSession.addEventListener('keystatuseschange', f); 17622 var g = new Promise(function (t, e) { 17623 d.on('error', e), 17624 d.on('keyStatus', function (r) { 17625 r.startsWith('usable') 17626 ? t() 17627 : 'output-restricted' === r 17628 ? e( 17629 new ls( 17630 { 17631 type: L.KEY_SYSTEM_ERROR, 17632 details: A.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED, 17633 fatal: !1, 17634 }, 17635 'HDCP level output restricted' 17636 ) 17637 ) 17638 : 'internal-error' === r 17639 ? e( 17640 new ls( 17641 { 17642 type: L.KEY_SYSTEM_ERROR, 17643 details: A.KEY_SYSTEM_STATUS_INTERNAL_ERROR, 17644 fatal: !0, 17645 }, 17646 'key status changed to "' + r + '"' 17647 ) 17648 ) 17649 : 'expired' === r 17650 ? e(new Error('key expired while generating request')) 17651 : s.warn('unhandled key status change "' + r + '"'); 17652 }); 17653 }); 17654 return t.mediaKeysSession 17655 .generateRequest(e, r) 17656 .then(function () { 17657 var e; 17658 s.log( 17659 'Request generated for key-session "' + 17660 (null == (e = t.mediaKeysSession) ? void 0 : e.sessionId) + 17661 '" keyId: ' + 17662 h 17663 ); 17664 }) 17665 .catch(function (t) { 17666 throw new ls( 17667 { 17668 type: L.KEY_SYSTEM_ERROR, 17669 details: A.KEY_SYSTEM_NO_SESSION, 17670 error: t, 17671 fatal: !1, 17672 }, 17673 'Error generating key-session request: ' + t 17674 ); 17675 }) 17676 .then(function () { 17677 return g; 17678 }) 17679 .catch(function (e) { 17680 throw (d.removeAllListeners(), s.removeSession(t), e); 17681 }) 17682 .then(function () { 17683 return d.removeAllListeners(), t; 17684 }); 17685 }), 17686 (e.onKeyStatusChange = function (t) { 17687 var e = this; 17688 t.mediaKeysSession.keyStatuses.forEach(function (r, i) { 17689 e.log( 17690 'key status change "' + 17691 r + 17692 '" for keyStatuses keyId: ' + 17693 kt.hexDump( 17694 'buffer' in i 17695 ? new Uint8Array(i.buffer, i.byteOffset, i.byteLength) 17696 : new Uint8Array(i) 17697 ) + 17698 ' session keyId: ' + 17699 kt.hexDump(new Uint8Array(t.decryptdata.keyId || [])) + 17700 ' uri: ' + 17701 t.decryptdata.uri 17702 ), 17703 (t.keyStatus = r); 17704 }); 17705 }), 17706 (e.fetchServerCertificate = function (t) { 17707 var e = this.config, 17708 r = new (0, e.loader)(e),
17709 n = this.getServerCertificateUrl(t); 17710 return n 17711 ? (this.log('Fetching server certificate for "' + t + '"'), 17712 new Promise(function (a, s) { 17713 var o = { responseType: 'arraybuffer', url: n }, 17714 l = e.certLoadPolicy.default, 17715 u = { 17716 loadPolicy: l, 17717 timeout: l.maxLoadTimeMs, 17718 maxRetry: 0, 17719 retryDelay: 0, 17720 maxRetryDelay: 0, 17721 }, 17722 h = { 17723 onSuccess: function (t, e, r, i) { 17724 a(t.data); 17725 }, 17726 onError: function (e, r, a, l) { 17727 s( 17728 new ls( 17729 { 17730 type: L.KEY_SYSTEM_ERROR, 17731 details: A.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED, 17732 fatal: !0, 17733 networkDetails: a, 17734 response: i({ url: o.url, data: void 0 }, e), 17735 }, 17736 '"' + 17737 t + 17738 '" certificate request failed (' + 17739 n + 17740 '). Status: ' + 17741 e.code + 17742 ' (' + 17743 e.text + 17744 ')' 17745 ) 17746 ); 17747 }, 17748 onTimeout: function (e, r, i) { 17749 s( 17750 new ls( 17751 { 17752 type: L.KEY_SYSTEM_ERROR, 17753 details: A.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED, 17754 fatal: !0, 17755 networkDetails: i, 17756 response: { url: o.url, data: void 0 }, 17757 }, 17758 '"' + t + '" certificate request timed out (' + n + ')' 17759 ) 17760 ); 17761 }, 17762 onAbort: function (t, e, r) { 17763 s(new Error('aborted')); 17764 }, 17765 }; 17766 r.load(o, u, h); 17767 })) 17768 : Promise.resolve(); 17769 }), 17770 (e.setMediaKeysServerCertificate = function (t, e, r) { 17771 var i = this; 17772 return new Promise(function (n, a) { 17773 t.setServerCertificate(r) 17774 .then(function (a) { 17775 i.log( 17776 'setServerCertificate ' + 17777 (a ? 'success' : 'not supported by CDM') + 17778 ' (' + 17779 (null == r ? void 0 : r.byteLength) + 17780 ') on "' + 17781 e + 17782 '"' 17783 ), 17784 n(t); 17785 }) 17786 .catch(function (t) { 17787 a( 17788 new ls( 17789 { 17790 type: L.KEY_SYSTEM_ERROR, 17791 details: A.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED, 17792 error: t, 17793 fatal: !0, 17794 }, 17795 t.message 17796 ) 17797 ); 17798 }); 17799 }); 17800 }), 17801 (e.renewLicense = function (t, e) { 17802 var r = this; 17803 return this.requestLicense(t, new Uint8Array(e)).then(function (e) { 17804 return r.updateKeySession(t, new Uint8Array(e)).catch(function (t) { 17805 throw new ls( 17806 { 17807 type: L.KEY_SYSTEM_ERROR, 17808 details: A.KEY_SYSTEM_SESSION_UPDATE_FAILED, 17809 error: t, 17810 fatal: !0, 17811 }, 17812 t.message 17813 ); 17814 }); 17815 }); 17816 }), 17817 (e.unpackPlayReadyKeyMessage = function (t, e) { 17818 var r = String.fromCharCode.apply(null, new Uint16Array(e.buffer)); 17819 if (!r.includes('PlayReadyKeyMessage')) 17820 return t.setRequestHeader('Content-Type', 'text/xml; charset=utf-8'), e; 17821 var i = new DOMParser().parseFromString(r, 'application/xml'), 17822 n = i.querySelectorAll('HttpHeader'); 17823 if (n.length > 0) 17824 for (var a, s = 0, o = n.length; s < o; s++) { 17825 var l, 17826 u, 17827 h = null == (l = (a = n[s]).querySelector('name')) ? void 0 : l.textContent, 17828 d = null == (u = a.querySelector('value')) ? void 0 : u.textContent; 17829 h && d && t.setRequestHeader(h, d); 17830 } 17831 var c = i.querySelector('Challenge'), 17832 f = null == c ? void 0 : c.textContent;
17833 if (!f) throw new Error('Cannot find <Challenge> in key message'); 17834 return W(atob(f)); 17835 }), 17836 (e.setupLicenseXHR = function (t, e, r, i) { 17837 var n = this, 17838 a = this.config.licenseXhrSetup; 17839 return a 17840 ? Promise.resolve() 17841 .then(function () { 17842 if (!r.decryptdata) throw new Error('Key removed'); 17843 return a.call(n.hls, t, e, r, i); 17844 }) 17845 .catch(function (s) { 17846 if (!r.decryptdata) throw s; 17847 return t.open('POST', e, !0), a.call(n.hls, t, e, r, i); 17848 }) 17849 .then(function (r) { 17850 return ( 17851 t.readyState || t.open('POST', e, !0), { xhr: t, licenseChallenge: r || i } 17852 ); 17853 }) 17854 : (t.open('POST', e, !0), Promise.resolve({ xhr: t, licenseChallenge: i })); 17855 }), 17856 (e.requestLicense = function (t, e) { 17857 var r = this, 17858 i = this.config.keyLoadPolicy.default; 17859 return new Promise(function (n, a) { 17860 var s = r.getLicenseServerUrl(t.keySystem); 17861 r.log('Sending license request to URL: ' + s); 17862 var o = new XMLHttpRequest(); 17863 (o.responseType = 'arraybuffer'), 17864 (o.onreadystatechange = function () { 17865 if (!r.hls || !t.mediaKeysSession) return a(new Error('invalid state')); 17866 if (4 === o.readyState) 17867 if (200 === o.status) { 17868 r._requestLicenseFailureCount = 0; 17869 var l = o.response; 17870 r.log('License received ' + (l instanceof ArrayBuffer ? l.byteLength : l)); 17871 var u = r.config.licenseResponseCallback; 17872 if (u) 17873 try { 17874 l = u.call(r.hls, o, s, t); 17875 } catch (t) { 17876 r.error(t); 17877 } 17878 n(l); 17879 } else { 17880 var h = i.errorRetry, 17881 d = h ? h.maxNumRetry : 0; 17882 if ( 17883 (r._requestLicenseFailureCount++, 17884 r._requestLicenseFailureCount > d || (o.status >= 400 && o.status < 500)) 17885 ) 17886 a( 17887 new ls( 17888 { 17889 type: L.KEY_SYSTEM_ERROR, 17890 details: A.KEY_SYSTEM_LICENSE_REQUEST_FAILED, 17891 fatal: !0, 17892 networkDetails: o, 17893 response: { 17894 url: s, 17895 data: void 0, 17896 code: o.status, 17897 text: o.statusText, 17898 }, 17899 }, 17900 'License Request XHR failed (' + 17901 s + 17902 '). Status: ' + 17903 o.status + 17904 ' (' + 17905 o.statusText + 17906 ')' 17907 ) 17908 ); 17909 else { 17910 var c = d - r._requestLicenseFailureCount + 1; 17911 r.warn('Retrying license request, ' + c + ' attempts left'), 17912 r.requestLicense(t, e).then(n, a); 17913 } 17914 } 17915 }), 17916 t.licenseXhr && 17917 t.licenseXhr.readyState !== XMLHttpRequest.DONE && 17918 t.licenseXhr.abort(), 17919 (t.licenseXhr = o), 17920 r.setupLicenseXHR(o, s, t, e).then(function (e) { 17921 var i = e.xhr, 17922 n = e.licenseChallenge; 17923 t.keySystem == q.PLAYREADY && (n = r.unpackPlayReadyKeyMessage(i, n)), 17924 i.send(n); 17925 }); 17926 }); 17927 }), 17928 (e.onMediaAttached = function (t, e) { 17929 if (this.config.emeEnabled) { 17930 var r = e.media; 17931 (this.media = r), 17932 r.addEventListener('encrypted', this.onMediaEncrypted), 17933 r.addEventListener('waitingforkey', this.onWaitingForKey); 17934 } 17935 }), 17936 (e.onMediaDetached = function () { 17937 var e = this, 17938 r = this.media, 17939 i = this.mediaKeySessions; 17940 r && 17941 (r.removeEventListener('encrypted', this.onMediaEncrypted), 17942 r.removeEventListener('waitingforkey', this.onWaitingForKey), 17943 (this.media = null)), 17944 (this._requestLicenseFailureCount = 0), 17945 (this.setMediaKeysQueue = []), 17946 (this.mediaKeySessions = []), 17947 (this.keyIdToKeySessionPromise = {}), 17948 Zt.clearKeyUriToKeyIdMap(); 17949 var n = i.length; 17950 t.CDMCleanupPromise = Promise.all( 17951 i 17952 .map(function (t) { 17953 return e.removeSession(t); 17954 }) 17955 .concat( 17956 null == r 17957 ? void 0
17958 : r.setMediaKeys(null).catch(function (t) { 17959 e.log('Could not clear media keys: ' + t); 17960 }) 17961 ) 17962 ) 17963 .then(function () { 17964 n && 17965 (e.log('finished closing key sessions and clearing media keys'), 17966 (i.length = 0)); 17967 }) 17968 .catch(function (t) { 17969 e.log('Could not close sessions and clear media keys: ' + t); 17970 }); 17971 }), 17972 (e.onManifestLoading = function () { 17973 this.keyFormatPromise = null; 17974 }), 17975 (e.onManifestLoaded = function (t, e) { 17976 var r = e.sessionKeys; 17977 if (r && this.config.emeEnabled && !this.keyFormatPromise) { 17978 var i = r.reduce(function (t, e) { 17979 return -1 === t.indexOf(e.keyFormat) && t.push(e.keyFormat), t; 17980 }, []); 17981 this.log('Selecting key-system from session-keys ' + i.join(', ')), 17982 (this.keyFormatPromise = this.getKeyFormatPromise(i)); 17983 } 17984 }), 17985 (e.removeSession = function (t) { 17986 var e = this, 17987 r = t.mediaKeysSession, 17988 i = t.licenseXhr; 17989 if (r) { 17990 this.log('Remove licenses and keys and close session ' + r.sessionId), 17991 t._onmessage && 17992 (r.removeEventListener('message', t._onmessage), (t._onmessage = void 0)), 17993 t._onkeystatuseschange && 17994 (r.removeEventListener('keystatuseschange', t._onkeystatuseschange), 17995 (t._onkeystatuseschange = void 0)), 17996 i && i.readyState !== XMLHttpRequest.DONE && i.abort(), 17997 (t.mediaKeysSession = t.decryptdata = t.licenseXhr = void 0); 17998 var n = this.mediaKeySessions.indexOf(t); 17999 return ( 18000 n > -1 && this.mediaKeySessions.splice(n, 1), 18001 r 18002 .remove() 18003 .catch(function (t) { 18004 e.log('Could not remove session: ' + t); 18005 }) 18006 .then(function () { 18007 return r.close(); 18008 }) 18009 .catch(function (t) { 18010 e.log('Could not close session: ' + t); 18011 }) 18012 ); 18013 } 18014 }), 18015 t 18016 ); 18017 })(); 18018 is.CDMCleanupPromise = void 0; 18019 var ns, 18020 as, 18021 ss, 18022 os, 18023 ls = (function (t) { 18024 function e(e, r) { 18025 var i; 18026 return ( 18027 ((i = t.call(this, r) || this).data = void 0), 18028 e.error || (e.error = new Error(r)), 18029 (i.data = e), 18030 (e.err = e.error), 18031 i 18032 ); 18033 } 18034 return l(e, t), e; 18035 })(c(Error)); 18036 !(function (t) { 18037 (t.MANIFEST = 'm'), 18038 (t.AUDIO = 'a'), 18039 (t.VIDEO = 'v'), 18040 (t.MUXED = 'av'), 18041 (t.INIT = 'i'), 18042 (t.CAPTION = 'c'), 18043 (t.TIMED_TEXT = 'tt'), 18044 (t.KEY = 'k'), 18045 (t.OTHER = 'o'); 18046 })(ns || (ns = {})), 18047 (function (t) { 18048 (t.DASH = 'd'), (t.HLS = 'h'), (t.SMOOTH = 's'), (t.OTHER = 'o'); 18049 })(as || (as = {})), 18050 (function (t) { 18051 (t.OBJECT = 'CMCD-Object'), 18052 (t.REQUEST = 'CMCD-Request'), 18053 (t.SESSION = 'CMCD-Session'), 18054 (t.STATUS = 'CMCD-Status'); 18055 })(ss || (ss = {})); 18056 var us = 18057 (((os = {})[ss.OBJECT] = ['br', 'd', 'ot', 'tb']), 18058 (os[ss.REQUEST] = ['bl', 'dl', 'mtp', 'nor', 'nrr', 'su']), 18059 (os[ss.SESSION] = ['cid', 'pr', 'sf', 'sid', 'st', 'v']), 18060 (os[ss.STATUS] = ['bs', 'rtp']), 18061 os), 18062 hs = function t(e, r) { 18063 (this.value = void 0), 18064 (this.params = void 0), 18065 Array.isArray(e) && 18066 (e = e.map(function (e) { 18067 return e instanceof t ? e : new t(e); 18068 })), 18069 (this.value = e), 18070 (this.params = r); 18071 }, 18072 ds = function (t) { 18073 (this.description = void 0), (this.description = t); 18074 }, 18075 cs = 'Dict'; 18076 function fs(t, e, r, i) { 18077 return new Error( 18078 'failed to ' + 18079 t + 18080 ' "' + 18081 ((n = e), 18082 (Array.isArray(n) 18083 ? JSON.stringify(n) 18084 : n instanceof Map 18085 ? 'Map{}' 18086 : n instanceof Set 18087 ? 'Set{}' 18088 : 'object' == typeof n 18089 ? JSON.stringify(n) 18090 : String(n)) + '" as ') + 18091 r, 18092 { cause: i } 18093 ); 18094 var n; 18095 } 18096 var gs = 'Bare Item', 18097 vs = 'Boolean', 18098 ms = 'Byte Sequence', 18099 ps = 'Decimal', 18100 ys = 'Integer', 18101 Es = /[\x00-\x1f\x7f]+/, 18102 Ts = 'Token', 18103 Ss = 'Key'; 18104 function Ls(t, e, r) { 18105 return fs('serialize', t, e, r); 18106 } 18107 function As(t) { 18108 if (!1 === ArrayBuffer.isView(t)) throw Ls(t, ms); 18109 return ':' + ((e = t), btoa(String.fromCharCode.apply(String, e)) + ':'); 18110 var e; 18111 } 18112 function Rs(t) { 18113 if ( 18114 (function (t) { 18115 return t < -999999999999999 || 999999999999999 < t; 18116 })(t) 18117 ) 18118 throw Ls(t, ys); 18119 return t.toString(); 18120 } 18121 function bs(t, e) { 18122 if (t < 0) return -bs(-t, e); 18123 var r = Math.pow(10, e);
18124 if (Math.abs(((t * r) % 1) - 0.5) < Number.EPSILON) { 18125 var i = Math.floor(t * r); 18126 return (i % 2 == 0 ? i : i + 1) / r; 18127 } 18128 return Math.round(t * r) / r; 18129 } 18130 function ks(t) { 18131 var e = bs(t, 3); 18132 if (Math.floor(Math.abs(e)).toString().length > 12) throw Ls(t, ps); 18133 var r = e.toString(); 18134 return r.includes('.') ? r : r + '.0'; 18135 } 18136 var Ds = 'String'; 18137 function Is(t) { 18138 var e, 18139 r = (e = t).description || e.toString().slice(7, -1); 18140 if (!1 === /^([a-zA-Z*])([!#$%&'*+\-.^_`|~\w:/]*)$/.test(r)) throw Ls(r, Ts); 18141 return r; 18142 } 18143 function ws(t) { 18144 switch (typeof t) { 18145 case 'number': 18146 if (!y(t)) throw Ls(t, gs); 18147 return Number.isInteger(t) ? Rs(t) : ks(t); 18148 case 'string': 18149 return (function (t) { 18150 if (Es.test(t)) throw Ls(t, Ds); 18151 return '"' + t.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"'; 18152 })(t); 18153 case 'symbol': 18154 return Is(t); 18155 case 'boolean': 18156 return (function (t) { 18157 if ('boolean' != typeof t) throw Ls(t, vs); 18158 return t ? '?1' : '?0'; 18159 })(t); 18160 case 'object': 18161 if (t instanceof Date) 18162 return (function (t) { 18163 return '@' + Rs(t.getTime() / 1e3); 18164 })(t); 18165 if (t instanceof Uint8Array) return As(t); 18166 if (t instanceof ds) return Is(t); 18167 default: 18168 throw Ls(t, gs); 18169 } 18170 } 18171 function Cs(t) { 18172 if (!1 === /^[a-z*][a-z0-9\-_.*]*$/.test(t)) throw Ls(t, Ss); 18173 return t; 18174 } 18175 function _s(t) { 18176 return null == t 18177 ? '' 18178 : Object.entries(t) 18179 .map(function (t) { 18180 var e = t[0], 18181 r = t[1]; 18182 return !0 === r ? ';' + Cs(e) : ';' + Cs(e) + '=' + ws(r); 18183 }) 18184 .join(''); 18185 } 18186 function xs(t) { 18187 return t instanceof hs ? '' + ws(t.value) + _s(t.params) : ws(t); 18188 } 18189 function Ps(t, e) { 18190 var r; 18191 if ((void 0 === e && (e = { whitespace: !0 }), 'object' != typeof t)) throw Ls(t, cs); 18192 var i = t instanceof Map ? t.entries() : Object.entries(t), 18193 n = null != (r = e) && r.whitespace ? ' ' : ''; 18194 return Array.from(i) 18195 .map(function (t) { 18196 var e = t[0], 18197 r = t[1]; 18198 r instanceof hs == 0 && (r = new hs(r)); 18199 var i, 18200 n = Cs(e); 18201 return ( 18202 !0 === r.value 18203 ? (n += _s(r.params)) 18204 : ((n += '='), 18205 Array.isArray(r.value) 18206 ? (n += '(' + (i = r).value.map(xs).join(' ') + ')' + _s(i.params)) 18207 : (n += xs(r))), 18208 n 18209 ); 18210 }) 18211 .join(',' + n); 18212 } 18213 var Fs = function (t) { 18214 return 'ot' === t || 'sf' === t || 'st' === t; 18215 }, 18216 Ms = function (t) { 18217 return 'number' == typeof t ? y(t) : null != t && '' !== t && !1 !== t; 18218 }, 18219 Os = function (t) { 18220 return Math.round(t); 18221 }, 18222 Ns = function (t) { 18223 return 100 * Os(t / 100); 18224 }, 18225 Us = { 18226 br: Os, 18227 d: Os, 18228 bl: Ns, 18229 dl: Ns, 18230 mtp: Ns, 18231 nor: function (t, e) { 18232 return ( 18233 null != e && 18234 e.baseUrl && 18235 (t = (function (t, e) { 18236 var r = new URL(t), 18237 i = new URL(e); 18238 if (r.origin !== i.origin) return t; 18239 for ( 18240 var n = r.pathname.split('/').slice(1), a = i.pathname.split('/').slice(1, -1); 18241 n[0] === a[0]; 18242 18243 ) 18244 n.shift(), a.shift(); 18245 for (; a.length; ) a.shift(), n.unshift('..'); 18246 return n.join('/'); 18247 })(t, e.baseUrl)), 18248 encodeURIComponent(t) 18249 ); 18250 }, 18251 rtp: Ns, 18252 tb: Os, 18253 }; 18254 function Bs(t, e) { 18255 return ( 18256 void 0 === e && (e = {}), 18257 t 18258 ? (function (t, e) { 18259 return Ps(t, e); 18260 })( 18261 (function (t, e) { 18262 var r = {}; 18263 if (null == t || 'object' != typeof t) return r; 18264 var i = Object.keys(t).sort(), 18265 n = o({}, Us, null == e ? void 0 : e.formatters), 18266 a = null == e ? void 0 : e.filter; 18267 return (
18268 i.forEach(function (i) { 18269 if (null == a || !a(i)) { 18270 var s = t[i], 18271 o = n[i]; 18272 o && (s = o(s, e)), 18273 ('v' === i && 1 === s) || 18274 ('pr' == i && 1 === s) || 18275 (Ms(s) && 18276 (Fs(i) && 'string' == typeof s && (s = new ds(s)), (r[i] = s))); 18277 } 18278 }), 18279 r 18280 ); 18281 })(t, e), 18282 o({ whitespace: !1 }, e) 18283 ) 18284 : '' 18285 ); 18286 } 18287 function Gs(t, e, r) { 18288 return o( 18289 t, 18290 (function (t, e) { 18291 var r; 18292 if ((void 0 === e && (e = {}), !t)) return {}; 18293 var i = Object.entries(t), 18294 n = Object.entries(us).concat( 18295 Object.entries((null == (r = e) ? void 0 : r.customHeaderMap) || {}) 18296 ), 18297 a = i.reduce(function (t, e) { 18298 var r, 18299 i = e[0], 18300 a = e[1], 18301 s = 18302 (null == 18303 (r = n.find(function (t) { 18304 return t[1].includes(i); 18305 })) 18306 ? void 0 18307 : r[0]) || ss.REQUEST; 18308 return null != t[s] || (t[s] = {}), (t[s][i] = a), t; 18309 }, {}); 18310 return Object.entries(a).reduce(function (t, r) { 18311 var i = r[0], 18312 n = r[1]; 18313 return (t[i] = Bs(n, e)), t; 18314 }, {}); 18315 })(e, r) 18316 ); 18317 } 18318 var Ks = 'CMCD', 18319 Hs = /CMCD=[^&#]+/; 18320 function Vs(t, e, r) { 18321 var i = (function (t, e) { 18322 if ((void 0 === e && (e = {}), !t)) return ''; 18323 var r = Bs(t, e); 18324 return Ks + '=' + encodeURIComponent(r); 18325 })(e, r); 18326 if (!i) return t; 18327 if (Hs.test(t)) return t.replace(Hs, i); 18328 var n = t.includes('?') ? '&' : '?'; 18329 return '' + t + n + i; 18330 } 18331 var Ys = (function () { 18332 function t(t) { 18333 var e = this; 18334 (this.hls = void 0), 18335 (this.config = void 0), 18336 (this.media = void 0), 18337 (this.sid = void 0), 18338 (this.cid = void 0), 18339 (this.useHeaders = !1), 18340 (this.includeKeys = void 0), 18341 (this.initialized = !1), 18342 (this.starved = !1), 18343 (this.buffering = !0), 18344 (this.audioBuffer = void 0), 18345 (this.videoBuffer = void 0), 18346 (this.onWaiting = function () { 18347 e.initialized && (e.starved = !0), (e.buffering = !0); 18348 }), 18349 (this.onPlaying = function () { 18350 e.initialized || (e.initialized = !0), (e.buffering = !1); 18351 }), 18352 (this.applyPlaylistData = function (t) { 18353 try { 18354 e.apply(t, { ot: ns.MANIFEST, su: !e.initialized }); 18355 } catch (t) { 18356 w.warn('Could not generate manifest CMCD data.', t); 18357 } 18358 }), 18359 (this.applyFragmentData = function (t) { 18360 try { 18361 var r = t.frag, 18362 i = e.hls.levels[r.level], 18363 n = e.getObjectType(r), 18364 a = { d: 1e3 * r.duration, ot: n }; 18365 (n !== ns.VIDEO && n !== ns.AUDIO && n != ns.MUXED) || 18366 ((a.br = i.bitrate / 1e3), 18367 (a.tb = e.getTopBandwidth(n) / 1e3), 18368 (a.bl = e.getBufferLength(n))), 18369 e.apply(t, a); 18370 } catch (t) { 18371 w.warn('Could not generate segment CMCD data.', t); 18372 } 18373 }), 18374 (this.hls = t); 18375 var r = (this.config = t.config), 18376 i = r.cmcd; 18377 null != i && 18378 ((r.pLoader = this.createPlaylistLoader()), 18379 (r.fLoader = this.createFragmentLoader()), 18380 (this.sid = 18381 i.sessionId || 18382 (function () { 18383 try { 18384 return crypto.randomUUID(); 18385 } catch (i) { 18386 try { 18387 var t = URL.createObjectURL(new Blob()), 18388 e = t.toString(); 18389 return URL.revokeObjectURL(t), e.slice(e.lastIndexOf('/') + 1); 18390 } catch (t) { 18391 var r = new Date().getTime(); 18392 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (t) { 18393 var e = (r + 16 * Math.random()) % 16 | 0; 18394 return (r = Math.floor(r / 16)), ('x' == t ? e : (3 & e) | 8).toString(16); 18395 }); 18396 } 18397 } 18398 })()), 18399 (this.cid = i.contentId), 18400 (this.useHeaders = !0 === i.useHeaders), 18401 (this.includeKeys = i.includeKeys), 18402 this.registerListeners()); 18403 } 18404 var e = t.prototype; 18405 return ( 18406 (e.registerListeners = function () { 18407 var t = this.hls;
18408 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 18409 t.on(S.MEDIA_DETACHED, this.onMediaDetached, this), 18410 t.on(S.BUFFER_CREATED, this.onBufferCreated, this); 18411 }), 18412 (e.unregisterListeners = function () { 18413 var t = this.hls; 18414 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 18415 t.off(S.MEDIA_DETACHED, this.onMediaDetached, this), 18416 t.off(S.BUFFER_CREATED, this.onBufferCreated, this); 18417 }), 18418 (e.destroy = function () { 18419 this.unregisterListeners(), 18420 this.onMediaDetached(), 18421 (this.hls = this.config = this.audioBuffer = this.videoBuffer = null), 18422 (this.onWaiting = this.onPlaying = null); 18423 }), 18424 (e.onMediaAttached = function (t, e) { 18425 (this.media = e.media), 18426 this.media.addEventListener('waiting', this.onWaiting), 18427 this.media.addEventListener('playing', this.onPlaying); 18428 }), 18429 (e.onMediaDetached = function () { 18430 this.media && 18431 (this.media.removeEventListener('waiting', this.onWaiting), 18432 this.media.removeEventListener('playing', this.onPlaying), 18433 (this.media = null)); 18434 }), 18435 (e.onBufferCreated = function (t, e) { 18436 var r, i; 18437 (this.audioBuffer = null == (r = e.tracks.audio) ? void 0 : r.buffer), 18438 (this.videoBuffer = null == (i = e.tracks.video) ? void 0 : i.buffer); 18439 }), 18440 (e.createData = function () { 18441 var t; 18442 return { 18443 v: 1, 18444 sf: as.HLS, 18445 sid: this.sid, 18446 cid: this.cid, 18447 pr: null == (t = this.media) ? void 0 : t.playbackRate, 18448 mtp: this.hls.bandwidthEstimate / 1e3, 18449 }; 18450 }), 18451 (e.apply = function (t, e) { 18452 void 0 === e && (e = {}), o(e, this.createData()); 18453 var r = e.ot === ns.INIT || e.ot === ns.VIDEO || e.ot === ns.MUXED; 18454 this.starved && r && ((e.bs = !0), (e.su = !0), (this.starved = !1)), 18455 null == e.su && (e.su = this.buffering); 18456 var i = this.includeKeys; 18457 i && 18458 (e = Object.keys(e).reduce(function (t, r) { 18459 return i.includes(r) && (t[r] = e[r]), t; 18460 }, {})), 18461 this.useHeaders 18462 ? (t.headers || (t.headers = {}), Gs(t.headers, e)) 18463 : (t.url = Vs(t.url, e)); 18464 }), 18465 (e.getObjectType = function (t) { 18466 var e = t.type; 18467 return 'subtitle' === e 18468 ? ns.TIMED_TEXT 18469 : 'initSegment' === t.sn 18470 ? ns.INIT 18471 : 'audio' === e 18472 ? ns.AUDIO 18473 : 'main' === e 18474 ? this.hls.audioTracks.length 18475 ? ns.VIDEO 18476 : ns.MUXED 18477 : void 0; 18478 }), 18479 (e.getTopBandwidth = function (t) { 18480 var e, 18481 r = 0, 18482 i = this.hls; 18483 if (t === ns.AUDIO) e = i.audioTracks; 18484 else { 18485 var n = i.maxAutoLevel, 18486 a = n > -1 ? n + 1 : i.levels.length; 18487 e = i.levels.slice(0, a); 18488 } 18489 for (var s, o = g(e); !(s = o()).done; ) { 18490 var l = s.value; 18491 l.bitrate > r && (r = l.bitrate); 18492 } 18493 return r > 0 ? r : NaN; 18494 }), 18495 (e.getBufferLength = function (t) { 18496 var e = this.hls.media, 18497 r = t === ns.AUDIO ? this.audioBuffer : this.videoBuffer; 18498 return r && e 18499 ? 1e3 * ri.bufferInfo(r, e.currentTime, this.config.maxBufferHole).len 18500 : NaN; 18501 }), 18502 (e.createPlaylistLoader = function () { 18503 var t = this.config.pLoader, 18504 e = this.applyPlaylistData, 18505 r = t || this.config.loader; 18506 return (function () { 18507 function t(t) { 18508 (this.loader = void 0), (this.loader = new r(t)); 18509 } 18510 var i = t.prototype; 18511 return ( 18512 (i.destroy = function () { 18513 this.loader.destroy(); 18514 }), 18515 (i.abort = function () { 18516 this.loader.abort(); 18517 }), 18518 (i.load = function (t, r, i) { 18519 e(t), this.loader.load(t, r, i); 18520 }), 18521 s(t, [ 18522 { 18523 key: 'stats', 18524 get: function () { 18525 return this.loader.stats; 18526 }, 18527 }, 18528 { 18529 key: 'context', 18530 get: function () { 18531 return this.loader.context; 18532 }, 18533 }, 18534 ]), 18535 t 18536 ); 18537 })(); 18538 }), 18539 (e.createFragmentLoader = function () {
18540 var t = this.config.fLoader, 18541 e = this.applyFragmentData, 18542 r = t || this.config.loader; 18543 return (function () { 18544 function t(t) { 18545 (this.loader = void 0), (this.loader = new r(t)); 18546 } 18547 var i = t.prototype; 18548 return ( 18549 (i.destroy = function () { 18550 this.loader.destroy(); 18551 }), 18552 (i.abort = function () { 18553 this.loader.abort(); 18554 }), 18555 (i.load = function (t, r, i) { 18556 e(t), this.loader.load(t, r, i); 18557 }), 18558 s(t, [ 18559 { 18560 key: 'stats', 18561 get: function () { 18562 return this.loader.stats; 18563 }, 18564 }, 18565 { 18566 key: 'context', 18567 get: function () { 18568 return this.loader.context; 18569 }, 18570 }, 18571 ]), 18572 t 18573 ); 18574 })(); 18575 }), 18576 t 18577 ); 18578 })(), 18579 Ws = (function () { 18580 function t(t) { 18581 (this.hls = void 0), 18582 (this.log = void 0), 18583 (this.loader = null), 18584 (this.uri = null), 18585 (this.pathwayId = '.'), 18586 (this.pathwayPriority = null), 18587 (this.timeToLoad = 300), 18588 (this.reloadTimer = -1), 18589 (this.updated = 0), 18590 (this.started = !1), 18591 (this.enabled = !0), 18592 (this.levels = null), 18593 (this.audioTracks = null),
18594 (this.subtitleTracks = null), 18595 (this.penalizedPathways = {}), 18596 (this.hls = t), 18597 (this.log = w.log.bind(w, '[content-steering]:')), 18598 this.registerListeners(); 18599 } 18600 var e = t.prototype; 18601 return ( 18602 (e.registerListeners = function () { 18603 var t = this.hls; 18604 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 18605 t.on(S.MANIFEST_LOADED, this.onManifestLoaded, this), 18606 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 18607 t.on(S.ERROR, this.onError, this); 18608 }), 18609 (e.unregisterListeners = function () { 18610 var t = this.hls; 18611 t && 18612 (t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 18613 t.off(S.MANIFEST_LOADED, this.onManifestLoaded, this), 18614 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 18615 t.off(S.ERROR, this.onError, this)); 18616 }), 18617 (e.startLoad = function () { 18618 if (((this.started = !0), this.clearTimeout(), this.enabled && this.uri)) { 18619 if (this.updated) { 18620 var t = 1e3 * this.timeToLoad - (performance.now() - this.updated); 18621 if (t > 0) return void this.scheduleRefresh(this.uri, t); 18622 } 18623 this.loadSteeringManifest(this.uri); 18624 } 18625 }), 18626 (e.stopLoad = function () { 18627 (this.started = !1), 18628 this.loader && (this.loader.destroy(), (this.loader = null)), 18629 this.clearTimeout(); 18630 }), 18631 (e.clearTimeout = function () { 18632 -1 !== this.reloadTimer && 18633 (self.clearTimeout(this.reloadTimer), (this.reloadTimer = -1)); 18634 }), 18635 (e.destroy = function () { 18636 this.unregisterListeners(), 18637 this.stopLoad(), 18638 (this.hls = null), 18639 (this.levels = this.audioTracks = this.subtitleTracks = null); 18640 }), 18641 (e.removeLevel = function (t) { 18642 var e = this.levels; 18643 e && 18644 (this.levels = e.filter(function (e) { 18645 return e !== t; 18646 })); 18647 }), 18648 (e.onManifestLoading = function () { 18649 this.stopLoad(), 18650 (this.enabled = !0), 18651 (this.timeToLoad = 300), 18652 (this.updated = 0), 18653 (this.uri = null), 18654 (this.pathwayId = '.'), 18655 (this.levels = this.audioTracks = this.subtitleTracks = null); 18656 }), 18657 (e.onManifestLoaded = function (t, e) { 18658 var r = e.contentSteering; 18659 null !== r && 18660 ((this.pathwayId = r.pathwayId), 18661 (this.uri = r.uri), 18662 this.started && this.startLoad()); 18663 }), 18664 (e.onManifestParsed = function (t, e) { 18665 (this.audioTracks = e.audioTracks), (this.subtitleTracks = e.subtitleTracks); 18666 }), 18667 (e.onError = function (t, e) { 18668 var r = e.errorAction; 18669 if ((null == r ? void 0 : r.action) === Dr && r.flags === _r) { 18670 var i = this.levels, 18671 n = this.pathwayPriority, 18672 a = this.pathwayId; 18673 if (e.context) { 18674 var s = e.context, 18675 o = s.groupId, 18676 l = s.pathwayId, 18677 u = s.type; 18678 o && i ? (a = this.getPathwayForGroupId(o, u, a)) : l && (a = l); 18679 } 18680 a in this.penalizedPathways || (this.penalizedPathways[a] = performance.now()), 18681 !n && 18682 i && 18683 (n = i.reduce(function (t, e) { 18684 return -1 === t.indexOf(e.pathwayId) && t.push(e.pathwayId), t; 18685 }, [])), 18686 n && 18687 n.length > 1 && 18688 (this.updatePathwayPriority(n), (r.resolved = this.pathwayId !== a)), 18689 r.resolved || 18690 w.warn( 18691 'Could not resolve ' + 18692 e.details + 18693 ' ("' + 18694 e.error.message + 18695 '") with content-steering for Pathway: ' + 18696 a + 18697 ' levels: ' + 18698 (i ? i.length : i) + 18699 ' priorities: ' + 18700 JSON.stringify(n) + 18701 ' penalized: ' + 18702 JSON.stringify(this.penalizedPathways) 18703 ); 18704 } 18705 }), 18706 (e.filterParsedLevels = function (t) { 18707 this.levels = t; 18708 var e = this.getLevelsForPathway(this.pathwayId); 18709 if (0 === e.length) { 18710 var r = t[0].pathwayId; 18711 this.log(
18712 'No levels found in Pathway ' + 18713 this.pathwayId + 18714 '. Setting initial Pathway to "' + 18715 r + 18716 '"' 18717 ), 18718 (e = this.getLevelsForPathway(r)), 18719 (this.pathwayId = r); 18720 } 18721 return ( 18722 e.length !== t.length && 18723 this.log( 18724 'Found ' + 18725 e.length + 18726 '/' + 18727 t.length + 18728 ' levels in Pathway "' + 18729 this.pathwayId + 18730 '"' 18731 ), 18732 e 18733 ); 18734 }), 18735 (e.getLevelsForPathway = function (t) { 18736 return null === this.levels 18737 ? [] 18738 : this.levels.filter(function (e) { 18739 return t === e.pathwayId; 18740 }); 18741 }), 18742 (e.updatePathwayPriority = function (t) { 18743 var e; 18744 this.pathwayPriority = t; 18745 var r = this.penalizedPathways, 18746 i = performance.now(); 18747 Object.keys(r).forEach(function (t) { 18748 i - r[t] > 3e5 && delete r[t]; 18749 }); 18750 for (var n = 0; n < t.length; n++) { 18751 var a = t[n]; 18752 if (!(a in r)) { 18753 if (a === this.pathwayId) return; 18754 var s = this.hls.nextLoadLevel, 18755 o = this.hls.levels[s]; 18756 if ((e = this.getLevelsForPathway(a)).length > 0) { 18757 this.log('Setting Pathway to "' + a + '"'), 18758 (this.pathwayId = a), 18759 mr(e), 18760 this.hls.trigger(S.LEVELS_UPDATED, { levels: e }); 18761 var l = this.hls.levels[s]; 18762 o && 18763 l && 18764 this.levels && 18765 (l.attrs['STABLE-VARIANT-ID'] !== o.attrs['STABLE-VARIANT-ID'] && 18766 l.bitrate !== o.bitrate && 18767 this.log( 18768 'Unstable Pathways change from bitrate ' + o.bitrate + ' to ' + l.bitrate 18769 ), 18770 (this.hls.nextLoadLevel = s)); 18771 break; 18772 } 18773 } 18774 } 18775 }), 18776 (e.getPathwayForGroupId = function (t, e, r) { 18777 for ( 18778 var i = this.getLevelsForPathway(r).concat(this.levels || []), n = 0; 18779 n < i.length; 18780 n++ 18781 ) 18782 if ((e === xe && i[n].hasAudioGroup(t)) || (e === Pe && i[n].hasSubtitleGroup(t))) 18783 return i[n].pathwayId; 18784 return r; 18785 }), 18786 (e.clonePathways = function (t) { 18787 var e = this, 18788 r = this.levels; 18789 if (r) { 18790 var i = {}, 18791 n = {}; 18792 t.forEach(function (t) { 18793 var a = t.ID, 18794 s = t['BASE-ID'], 18795 o = t['URI-REPLACEMENT']; 18796 if ( 18797 !r.some(function (t) { 18798 return t.pathwayId === a; 18799 }) 18800 ) { 18801 var l = e.getLevelsForPathway(s).map(function (t) { 18802 var e = new x(t.attrs); 18803 e['PATHWAY-ID'] = a; 18804 var r = e.AUDIO && e.AUDIO + '_clone_' + a, 18805 s = e.SUBTITLES && e.SUBTITLES + '_clone_' + a; 18806 r && ((i[e.AUDIO] = r), (e.AUDIO = r)), 18807 s && ((n[e.SUBTITLES] = s), (e.SUBTITLES = s)); 18808 var l = qs(t.uri, e['STABLE-VARIANT-ID'], 'PER-VARIANT-URIS', o), 18809 u = new or({ 18810 attrs: e, 18811 audioCodec: t.audioCodec, 18812 bitrate: t.bitrate, 18813 height: t.height, 18814 name: t.name, 18815 url: l, 18816 videoCodec: t.videoCodec, 18817 width: t.width, 18818 }); 18819 if (t.audioGroups) 18820 for (var h = 1; h < t.audioGroups.length; h++) 18821 u.addGroupId('audio', t.audioGroups[h] + '_clone_' + a); 18822 if (t.subtitleGroups) 18823 for (var d = 1; d < t.subtitleGroups.length; d++) 18824 u.addGroupId('text', t.subtitleGroups[d] + '_clone_' + a); 18825 return u; 18826 }); 18827 r.push.apply(r, l), js(e.audioTracks, i, o, a), js(e.subt
18827itleTracks, n, o, a); 18828 } 18829 }); 18830 } 18831 }), 18832 (e.loadSteeringManifest = function (t) { 18833 var e, 18834 r = this, 18835 i = this.hls.config, 18836 n = i.loader; 18837 this.loader && this.loader.destroy(), (this.loader = new n(i)); 18838 try { 18839 e = new self.URL(t); 18840 } catch (e) { 18841 return ( 18842 (this.enabled = !1), void this.log('Failed to parse Steering Manifest URI: ' + t) 18843 ); 18844 } 18845 if ('data:' !== e.protocol) { 18846 var a = 0 | (this.hls.bandwidthEstimate || i.abrEwmaDefaultEstimate); 18847 e.searchParams.set('_HLS_pathway', this.pathwayId), 18848 e.searchParams.set('_HLS_throughput', '' + a); 18849 } 18850 var s = { responseType: 'json', url: e.href }, 18851 o = i.steeringManifestLoadPolicy.default, 18852 l = o.errorRetry || o.timeoutRetry || {}, 18853 u = { 18854 loadPolicy: o, 18855 timeout: o.maxLoadTimeMs, 18856 maxRetry: l.maxNumRetry || 0, 18857 retryDelay: l.retryDelayMs || 0, 18858 maxRetryDelay: l.maxRetryDelayMs || 0, 18859 }, 18860 h = { 18861 onSuccess: function (t, i, n, a) { 18862 r.log('Loaded steering manifest: "' + e + '"'); 18863 var s = t.data; 18864 if (1 === s.VERSION) { 18865 (r.updated = performance.now()), (r.timeToLoad = s.TTL); 18866 var o = s['RELOAD-URI'], 18867 l = s['PATHWAY-CLONES'], 18868 u = s['PATHWAY-PRIORITY']; 18869 if (o) 18870 try { 18871 r.uri = new self.URL(o, e).href; 18872 } catch (t) { 18873 return ( 18874 (r.enabled = !1), 18875 void r.log('Failed to parse Steering Manifest RELOAD-URI: ' + o) 18876 ); 18877 } 18878 r.scheduleRefresh(r.uri || n.url), l && r.clonePathways(l); 18879 var h = { steeringManifest: s, url: e.toString() }; 18880 r.hls.trigger(S.STEERING_MANIFEST_LOADED, h), u && r.updatePathwayPriority(u); 18881 } else r.log('Steering VERSION ' + s.VERSION + ' not supported!'); 18882 }, 18883 onError: function (t, e, i, n) { 18884 if ( 18885 (r.log( 18886 'Error loading steering manifest: ' + 18887 t.code + 18888 ' ' + 18889 t.text + 18890 ' (' + 18891 e.url + 18892 ')' 18893 ), 18894 r.stopLoad(), 18895 410 === t.code) 18896 ) 18897 return ( 18898 (r.enabled = !1), 18899 void r.log('Steering manifest ' + e.url + ' no longer available') 18900 ); 18901 var a = 1e3 * r.timeToLoad; 18902 if (429 !== t.code) r.scheduleRefresh(r.uri || e.url, a); 18903 else { 18904 var s = r.loader; 18905 if ('function' == typeof (null == s ? void 0 : s.getResponseHeader)) { 18906 var o = s.getResponseHeader('Retry-After'); 18907 o && (a = 1e3 * parseFloat(o)); 18908 } 18909 r.log('Steering manifest ' + e.url + ' rate limited'); 18910 } 18911 }, 18912 onTimeout: function (t, e, i) { 18913 r.log('Timeout loading steering manifest (' + e.url + ')'), 18914 r.scheduleRefresh(r.uri || e.url); 18915 }, 18916 }; 18917 this.log('Requesting steering manifest: ' + e), this.loader.load(s, u, h); 18918 }), 18919 (e.scheduleRefresh = function (t, e) { 18920 var r = this; 18921 void 0 === e && (e = 1e3 * this.timeToLoad), 18922 this.clearTimeout(), 18923 (this.reloadTimer = self.setTimeout(function () { 18924 var e, 18925 i = null == (e = r.hls) ? void 0 : e.media; 18926 !i || i.ended 18927 ? r.scheduleRefresh(t, 1e3 * r.timeToLoad) 18928 : r.loadSteeringManifest(t); 18929 }, e)); 18930 }), 18931 t 18932 ); 18933 })(); 18934 function js(t, e, r, i) { 18935 t && 18936 Object.keys(e).forEach(function (n) { 18937 var a = t 18938 .filter(function (t) { 18939 return t.groupId === n; 18940 }) 18941 .map(function (t) { 18942 var a = o({}, t); 18943 return ( 18944 (a.details = void 0), 18945 (a.attrs = new x(a.attrs)), 18946 (a.url = a.attrs.URI = 18947 qs(t.url, t.attrs['STABLE-RENDITION-ID'], 'PER-RENDITION-URIS', r)), 18948 (a.groupId = a.attrs['GROUP-ID'] = e[n]), 18949 (a.attrs['PATHWAY-ID'] = i), 18950 a 18951 ); 18952 }); 18953 t.push.apply(t, a); 18954 }); 18955 } 18956 function qs(t, e, r, i) { 18957 var n, 18958 a = i.HOST, 18959 s = i.PARAMS, 18960 o = i[r]; 18961 e && (n = null == o ? void 0 : o[e]) && (t = n); 18962 var l = new self.URL(t); 18963 return ( 18964 a && !n && (l.host = a), 18965 s && 18966 Object.keys(s) 18967 .sort() 18968 .forEach(function (t) { 18969 t && l.searchParams.set(t, s[t]); 18970 }), 18971 l.href 18972 ); 18973 } 18974 var Xs = /^age:\s*[\d.]+\s*$/im, 18975 zs = (function () { 18976 function t(t) { 18977 (this.xhrSetup = void 0), 18978 (this.requestTimeout = void 0), 18979 (this.retryTimeout = void 0), 18980 (this.retryDelay = void 0), 18981 (this.config = null),
18982 (this.callbacks = null), 18983 (this.context = null), 18984 (this.loader = null), 18985 (this.stats = void 0), 18986 (this.xhrSetup = (t && t.xhrSetup) || null), 18987 (this.stats = new M()), 18988 (this.retryDelay = 0); 18989 } 18990 var e = t.prototype; 18991 return ( 18992 (e.destroy = function () { 18993 (this.callbacks = null), 18994 this.abortInternal(), 18995 (this.loader = null), 18996 (this.config = null), 18997 (this.context = null), 18998 (this.xhrSetup = null); 18999 }), 19000 (e.abortInternal = function () { 19001 var t = this.loader; 19002 self.clearTimeout(this.requestTimeout), 19003 self.clearTimeout(this.retryTimeout), 19004 t && 19005 ((t.onreadystatechange = null), 19006 (t.onprogress = null), 19007 4 !== t.readyState && ((this.stats.aborted = !0), t.abort())); 19008 }), 19009 (e.abort = function () { 19010 var t; 19011 this.abortInternal(), 19012 null != (t = this.callbacks) && 19013 t.onAbort && 19014 this.callbacks.onAbort(this.stats, this.context, this.loader); 19015 }), 19016 (e.load = function (t, e, r) { 19017 if (this.stats.loading.start) throw new Error('Loader can only be used once.'); 19018 (this.stats.loading.start = self.performance.now()), 19019 (this.context = t), 19020 (this.config = e), 19021 (this.callbacks = r), 19022 this.loadInternal(); 19023 }), 19024 (e.loadInternal = function () { 19025 var t = this, 19026 e = this.config, 19027 r = this.context; 19028 if (e && r) { 19029 var i = (this.loader = new self.XMLHttpRequest()), 19030 n = this.stats; 19031 (n.loading.first = 0), (n.loaded = 0), (n.aborted = !1); 19032 var a = this.xhrSetup; 19033 a 19034 ? Promise.resolve() 19035 .then(function () { 19036 if (t.loader === i && !t.stats.aborted) return a(i, r.url); 19037 }) 19038 .catch(function (e) { 19039 if (t.loader === i && !t.stats.aborted) 19040 return i.open('GET', r.url, !0), a(i, r.url); 19041 }) 19042 .then(function () { 19043 t.loader !== i || t.stats.aborted || t.openAndSendXhr(i, r, e); 19044 }) 19045 .catch(function (e) { 19046 t.callbacks.onError({ code: i.status, text: e.message }, r, i, n); 19047 }) 19048 : this.openAndSendXhr(i, r, e); 19049 } 19050 }), 19051 (e.openAndSendXhr = function (t, e, r) { 19052 t.readyState || t.open('GET', e.url, !0); 19053 var i = e.headers, 19054 n = r.loadPolicy, 19055 a = n.maxTimeToFirstByteMs, 19056 s = n.maxLoadTimeMs; 19057 if (i) for (var o in i) t.setRequestHeader(o, i[o]); 19058 e.rangeEnd && 19059 t.setRequestHeader('Range', 'bytes=' + e.rangeStart + '-' + (e.rangeEnd - 1)), 19060 (t.onreadystatechange = this.readystatechange.bind(this)), 19061 (t.onprogress = this.loadprogress.bind(this)), 19062 (t.responseType = e.responseType), 19063 self.clearTimeout(this.requestTimeout), 19064 (r.timeout = a && y(a) ? a : s), 19065 (this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), r.timeout)), 19066 t.send(); 19067 }), 19068 (e.readystatechange = function () { 19069 var t = this.context, 19070 e = this.loader, 19071 r = this.stats; 19072 if (t && e) { 19073 var i = e.readyState, 19074 n = this.config; 19075 if ( 19076 !r.aborted && 19077 i >= 2 && 19078 (0 === r.loading.first && 19079 ((r.loading.first = Math.max(self.performance.now(), r.loading.start)), 19080 n.timeout !== n.loadPolicy.maxLoadTimeMs && 19081 (self.clearTimeout(this.requestTimeout), 19082 (n.timeout = n.loadPolicy.maxLoadTimeMs), 19083 (this.requestTimeout = self.setTimeout( 19084 this.loadtimeout.bind(this), 19085 n.loadPolicy.maxLoadTimeMs - (r.loading.first - r.loading.start) 19086 )))), 19087 4 === i) 19088 ) { 19089 self.clearTimeout(this.requestTimeout), 19090 (e.onreadystatechange = null),
19091 (e.onprogress = null); 19092 var a = e.status, 19093 s = 'text' === e.responseType ? e.responseText : null; 19094 if (a >= 200 && a < 300) { 19095 var o = null != s ? s : e.response; 19096 if (null != o) { 19097 r.loading.end = Math.max(self.performance.now(), r.loading.first); 19098 var l = 'arraybuffer' === e.responseType ? o.byteLength : o.length; 19099 if ( 19100 ((r.loaded = r.total = l), 19101 (r.bwEstimate = (8e3 * r.total) / (r.loading.end - r.loading.first)), 19102 !this.callbacks) 19103 ) 19104 return; 19105 var u = this.callbacks.onProgress; 19106 if ((u && u(r, t, o, e), !this.callbacks)) return; 19107 var h = { url: e.responseURL, data: o, code: a }; 19108 return void this.callbacks.onSuccess(h, r, t, e); 19109 } 19110 } 19111 var d = n.loadPolicy.errorRetry; 19112 Sr(d, r.retry, !1, { url: t.url, data: void 0, code: a }) 19113 ? this.retry(d) 19114 : (w.error(a + ' while loading ' + t.url), 19115 this.callbacks.onError({ code: a, text: e.statusText }, t, e, r)); 19116 } 19117 } 19118 }), 19119 (e.loadtimeout = function () { 19120 if (this.config) { 19121 var t = this.config.loadPolicy.timeoutRetry; 19122 if (Sr(t, this.stats.retry, !0)) this.retry(t); 19123 else { 19124 var e; 19125 w.warn('timeout while loading ' + (null == (e = this.context) ? void 0 : e.url)); 19126 var r = this.callbacks; 19127 r && (this.abortInternal(), r.onTimeout(this.stats, this.context, this.loader)); 19128 } 19129 } 19130 }), 19131 (e.retry = function (t) { 19132 var e = this.context, 19133 r = this.stats; 19134 (this.retryDelay = Er(t, r.retry)), 19135 r.retry++, 19136 w.warn( 19137 (status ? 'HTTP Status ' + status : 'Timeout') + 19138 ' while loading ' + 19139 (null == e ? void 0 : e.url) + 19140 ', retrying ' + 19141 r.retry + 19142 '/' + 19143 t.maxNumRetry + 19144 ' in ' + 19145 this.retryDelay + 19146 'ms' 19147 ), 19148 this.abortInternal(), 19149 (this.loader = null), 19150 self.clearTimeout(this.retryTimeout), 19151 (this.retryTimeout = self.setTimeout( 19152 this.loadInternal.bind(this), 19153 this.retryDelay 19154 )); 19155 }), 19156 (e.loadprogress = function (t) { 19157 var e = this.stats; 19158 (e.loaded = t.loaded), t.lengthComputable && (e.total = t.total); 19159 }), 19160 (e.getCacheAge = function () { 19161 var t = null; 19162 if (this.loader && Xs.test(this.loader.getAllResponseHeaders())) { 19163 var e = this.loader.getResponseHeader('age'); 19164 t = e ? parseFloat(e) : null; 19165 } 19166 return t; 19167 }), 19168 (e.getResponseHeader = function (t) { 19169 return this.loader && 19170 new RegExp('^' + t + ':\\s*[\\d.]+\\s*$', 'im').test( 19171 this.loader.getAllResponseHeaders() 19172 ) 19173 ? this.loader.getResponseHeader(t) 19174 : null; 19175 }), 19176 t 19177 ); 19178 })(), 19179 Qs = /(\d+)-(\d+)\/(\d+)/, 19180 Js = (function () { 19181 function t(t) { 19182 (this.fetchSetup = void 0), 19183 (this.requestTimeout = void 0), 19184 (this.request = null), 19185 (this.response = null), 19186 (this.controller = void 0), 19187 (this.context = null), 19188 (this.config = null), 19189 (this.callbacks = null),
19190 (this.stats = void 0), 19191 (this.loader = null), 19192 (this.fetchSetup = t.fetchSetup || $s), 19193 (this.controller = new self.AbortController()), 19194 (this.stats = new M()); 19195 } 19196 var e = t.prototype; 19197 return ( 19198 (e.destroy = function () { 19199 (this.loader = this.callbacks = this.context = this.config = this.request = null), 19200 this.abortInternal(), 19201 (this.response = null), 19202 (this.fetchSetup = this.controller = this.stats = null); 19203 }), 19204 (e.abortInternal = function () { 19205 this.controller && 19206 !this.stats.loading.end && 19207 ((this.stats.aborted = !0), this.controller.abort()); 19208 }), 19209 (e.abort = function () { 19210 var t; 19211 this.abortInternal(), 19212 null != (t = this.callbacks) && 19213 t.onAbort && 19214 this.callbacks.onAbort(this.stats, this.context, this.response); 19215 }), 19216 (e.load = function (t, e, r) { 19217 var i = this, 19218 n = this.stats; 19219 if (n.loading.start) throw new Error('Loader can only be used once.'); 19220 n.loading.start = self.performance.now(); 19221 var a = (function (t, e) { 19222 var r = { 19223 method: 'GET', 19224 mode: 'cors', 19225 credentials: 'same-origin', 19226 signal: e, 19227 headers: new self.Headers(o({}, t.headers)), 19228 }; 19229 return ( 19230 t.rangeEnd && 19231 r.headers.set( 19232 'Range', 19233 'bytes=' + t.rangeStart + '-' + String(t.rangeEnd - 1) 19234 ), 19235 r 19236 ); 19237 })(t, this.controller.signal), 19238 s = r.onProgress, 19239 l = 'arraybuffer' === t.responseType, 19240 u = l ? 'byteLength' : 'length', 19241 h = e.loadPolicy, 19242 d = h.maxTimeToFirstByteMs, 19243 c = h.maxLoadTimeMs; 19244 (this.context = t), 19245 (this.config = e), 19246 (this.callbacks = r), 19247 (this.request = this.fetchSetup(t, a)), 19248 self.clearTimeout(this.requestTimeout), 19249 (e.timeout = d && y(d) ? d : c), 19250 (this.requestTimeout = self.setTimeout(function () { 19251 i.abortInternal(), r.onTimeout(n, t, i.response); 19252 }, e.timeout)), 19253 self 19254 .fetch(this.request) 19255 .then(function (a) { 19256 i.response = i.loader = a; 19257 var o = Math.max(self.performance.now(), n.loading.start); 19258 if ( 19259 (self.clearTimeout(i.requestTimeout), 19260 (e.timeout = c), 19261 (i.requestTimeout = self.setTimeout(function () { 19262 i.abortInternal(), r.onTimeout(n, t, i.response); 19263 }, c - (o - n.loading.start))), 19264 !a.ok) 19265 ) { 19266 var u = a.status, 19267 h = a.statusText; 19268 throw new to(h || 'fetch, bad network response', u, a); 19269 } 19270 return ( 19271 (n.loading.first = o), 19272 (n.total = 19273 (function (t) { 19274 var e = t.get('Content-Range'); 19275 if (e) { 19276 var r = (function (t) { 19277 var e = Qs.exec(t); 19278 if (e) return parseInt(e[2]) - parseInt(e[1]) + 1; 19279 })(e); 19280 if (y(r)) return r; 19281 } 19282 var i = t.get('Content-Length'); 19283 if (i) return parseInt(i); 19284 })(a.headers) || n.total), 19285 s && y(e.highWaterMark) 19286 ? i.loadProgressively(a, n, t, e.highWaterMark, s) 19287 : l 19288 ? a.arrayBuffer() 19289 : 'json' === t.responseType 19290 ? a.json() 19291 : a.text() 19292 ); 19293 }) 19294 .then(function (a) { 19295 var o = i.response; 19296 if (!o) throw new Error('loader destroyed'); 19297 self.clearTimeout(i.requestTimeout), 19298 (n.loading.end = Math.max(self.performance.now(), n.loading.first)); 19299 var l = a[u]; 19300 l && (n.loaded = n.total = l); 19301 var h = { url: o.url, data: a, code: o.status }; 19302 s && !y(e.highWaterMark) && s(n, t, a, o), r.onSuccess(h, n, t, o); 19303 }) 19304 .catch(function (e) { 19305 if ((self.clearTimeout(i.requestTimeout), !n.aborted)) { 19306 var a = (e && e.code) || 0, 19307 s = e ? e.message : null; 19308 r.onError({ code: a, text: s }, t, e ? e.details : null, n); 19309 } 19310 }); 19311 }), 19312 (e.getCacheAge = function () { 19313 var t = null; 19314 if (this.response) { 19315 var e = this.response.headers.get('age'); 19316 t = e ? parseFloat(e) : null; 19317 } 19318 return t; 19319 }), 19320 (e.getResponseHeader = function (t) { 19321 return this.response ? this.response.headers.get(t) : null; 19322 }), 19323 (e.loadProgressively = function (t, e, r, i, n) { 19324 void 0 === i && (i = 0); 19325 var a = new xi(), 19326 s = t.body.getReader(); 19327 return (function o() { 19328 return s 19329 .read() 19330 .then(function (s) { 19331 if (s.done) 19332 return ( 19333 a.dataLength && n(e, r, a.flush(), t), Promise.resolve(new ArrayBuffer(0)) 19334 ); 19335 var l = s.value, 19336 u = l.length; 19337 return ( 19338 (e.loaded += u), 19339 u < i || a.dataLength 19340 ? (a.push(l), a.dataLength >= i && n(e, r, a.flush(), t)) 19341 : n(e, r, l, t), 19342 o() 19343 ); 19344 }) 19345 .catch(function () { 19346 return Promise.reject(); 19347 }); 19348 })(); 19349 }), 19350 t 19351 ); 19352 })(); 19353 function $s(t, e) {
19354 return new self.Request(t.url, e); 19355 } 19356 var Zs, 19357 to = (function (t) { 19358 function e(e, r, i) { 19359 var n; 19360 return ( 19361 ((n = t.call(this, e) || this).code = void 0), 19362 (n.details = void 0), 19363 (n.code = r), 19364 (n.details = i), 19365 n 19366 ); 19367 } 19368 return l(e, t), e; 19369 })(c(Error)), 19370 eo = /\s/, 19371 ro = i( 19372 i( 19373 { 19374 autoStartLoad: !0, 19375 startPosition: -1, 19376 defaultAudioCodec: void 0, 19377 debug: !1, 19378 capLevelOnFPSDrop: !1, 19379 capLevelToPlayerSize: !1, 19380 ignoreDevicePixelRatio: !1, 19381 preferManagedMediaSource: !0, 19382 initialLiveManifestSize: 1, 19383 maxBufferLength: 30, 19384 backBufferLength: 1 / 0, 19385 frontBufferFlushThreshold: 1 / 0, 19386 maxBufferSize: 6e7, 19387 maxBufferHole: 0.1, 19388 highBufferWatchdogPeriod: 2, 19389 nudgeOffset: 0.1, 19390 nudgeMaxRetry: 3, 19391 maxFragLookUpTolerance: 0.25, 19392 liveSyncDurationCount: 3, 19393 liveMaxLatencyDurationCount: 1 / 0, 19394 liveSyncDuration: void 0, 19395 liveMaxLatencyDuration: void 0, 19396 maxLiveSyncPlaybackRate: 1, 19397 liveDurationInfinity: !1, 19398 liveBackBufferLength: null, 19399 maxMaxBufferLength: 600, 19400 enableWorker: !0, 19401 workerPath: null, 19402 enableSoftwareAES: !0, 19403 startLevel: void 0, 19404 startFragPrefetch: !1, 19405 fpsDroppedMonitoringPeriod: 5e3, 19406 fpsDroppedMonitoringThreshold: 0.2, 19407 appendErrorMaxRetry: 3, 19408 loader: zs, 19409 fLoader: void 0, 19410 pLoader: void 0, 19411 xhrSetup: void 0, 19412 licenseXhrSetup: void 0, 19413 licenseResponseCallback: void 0, 19414 abrController: jr, 19415 bufferController: na, 19416 capLevelController: ts, 19417 errorController: Pr, 19418 fpsController: es, 19419 stretchShortVideoTrack: !1, 19420 maxAudioFramesDrift: 1, 19421 forceKeyFrameOnDiscontinuity: !0, 19422 abrEwmaFastLive: 3, 19423 abrEwmaSlowLive: 9, 19424 abrEwmaFastVoD: 3, 19425 abrEwmaSlowVoD: 9, 19426 abrEwmaDefaultEstimate: 5e5, 19427 abrEwmaDefaultEstimateMax: 5e6, 19428 abrBandWidthFactor: 0.95, 19429 abrBandWidthUpFactor: 0.7, 19430 abrMaxWithRealBitrate: !1, 19431 maxStarvationDelay: 4, 19432 maxLoadingDelay: 4, 19433 minAutoBitrate: 0, 19434 emeEnabled: !1, 19435 widevineLicenseUrl: void 0, 19436 drmSystems: {}, 19437 drmSystemOptions: {}, 19438 requestMediaKeySystemAccessFunc: ot, 19439 testBandwidth: !0, 19440 progressive: !1, 19441 lowLatencyMode: !0, 19442 cmcd: void 0, 19443 enableDateRangeMetadataCues: !0, 19444 enableEmsgMetadataCues: !0, 19445 enableID3MetadataCues: !0, 19446 useMediaCapabilities: !0, 19447 certLoadPolicy: { 19448 default: { 19449 maxTimeToFirstByteMs: 8e3, 19450 maxLoadTimeMs: 2e4, 19451 timeoutRetry: null, 19452 errorRetry: null, 19453 }, 19454 }, 19455 keyLoadPolicy: { 19456 default: { 19457 maxTimeToFirstByteMs: 8e3, 19458 maxLoadTimeMs: 2e4, 19459 timeoutRetry: { 19460 maxNumRetry: 1, 19461 retryDelayMs: 1e3, 19462 maxRetryDelayMs: 2e4, 19463 backoff: 'linear', 19464 }, 19465 errorRetry: { 19466 maxNumRetry: 8, 19467 retryDelayMs: 1e3, 19468 maxRetryDelayMs: 2e4, 19469 backoff: 'linear', 19470 }, 19471 }, 19472 }, 19473 manifestLoadPolicy: { 19474 default: { 19475 maxTimeToFirstByteMs: 1 / 0, 19476 maxLoadTimeMs: 2e4, 19477 timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, 19478 errorRetry: { maxNumRetry: 1, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 }, 19479 }, 19480 }, 19481 playlistLoadPolicy: { 19482 default: { 19483 maxTimeToFirstByteMs: 1e4, 19484 maxLoadTimeMs: 2e4, 19485 timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, 19486 errorRetry: { maxNumRetry: 2, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 }, 19487 }, 19488 }, 19489 fragLoadPolicy: { 19490 default: { 19491 maxTimeToFirstByteMs: 1e4, 19492 maxLoadTimeMs: 12e4, 19493 timeoutRetry: { maxNumRetry: 4, retryDelayMs: 0, maxRetryDelayMs: 0 }, 19494 errorRetry: { maxNumRetry: 6, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 }, 19495 }, 19496 }, 19497 steeringManifestLoadPolicy: { 19498 default: { 19499 maxTimeToFirstByteMs: 1e4, 19500 maxLoadTimeMs: 2e4, 19501 timeoutRetry: { maxNumRetry: 2, retryDelayMs: 0, maxRetryDelayMs: 0 }, 19502 errorRetry: { maxNumRetry: 1, retryDelayMs: 1e3, maxRetryDelayMs: 8e3 }, 19503 }, 19504 }, 19505 manifestLoadingTimeOut: 1e4, 19506 manifestLoadingMaxRetry: 1, 19507 manifestLoadingRetryDelay: 1e3, 19508 manifestLoadingMaxRetryTimeout: 64e3, 19509 levelLoadingTimeOut: 1e4, 19510 levelLoadingMaxRetry: 4, 19511 levelLoadingRetryDelay: 1e3, 19512 levelLoadingMaxRetryTimeout: 64e3, 19513 fragLoadingTimeOut: 2e4, 19514 fragLoadingMaxRetry: 6, 19515 fragLoadingRetryDelay: 1e3, 19516 fragLoadingMaxRetryTimeout: 64e3, 19517 }, 19518 { 19519 cueHandler: { 19520 newCue: function (t, e, r, i) { 19521 for ( 19522 var n, a, s, o, l, u = [], h = self.VTTCue || self.TextTrackCue, d = 0; 19523 d < i.rows.length; 19524 d++ 19525 ) 19526 if (((s = !0), (o = 0), (l = ''), !(n = i.rows[d]).isEmpty())) { 19527 for (var c, f = 0; f < n.chars.length; f++) 19528 eo.test(n.chars[f].uchar) && s ? o++ : ((l += n.chars[f].uchar), (s = !1)); 19529 (n.cueStartTime = e), e === r && (r += 1e-4), o >= 16 ? o-- : o++; 19530 var g = Pa(l.trim()), 19531 v = Ua(e, r, g); 19532 (null != t && null != (c = t.cues) && c.getCueById(v)) || 19533 (((a = new h(e, r, g)).id = v), 19534 (a.line = d + 1), 19535 (a.align = 'left'), 19536 (a.position = 10 + Math.min(80, 10 * Math.floor((8 * o) / 32))), 19537 u.push(a)); 19538 } 19539 return ( 19540 t && 19541 u.length && 19542 (u.sort(function (t, e) { 19543 return 'auto' === t.line || 'auto' === e.line 19544 ? 0 19545 : t.line > 8 && e.line > 8 19546 ? e.line - t.line 19547 : t.line - e.line; 19548 }), 19549 u.forEach(function (e) { 19550 return Ke(t, e); 19551 })), 19552 u 19553 ); 19554 }, 19555 }, 19556 enableWebVTT: !0, 19557 enableIMSC1: !0, 19558 enableCEA708Captions: !0, 19559 captionsTextTrack1Label: 'English', 19560 captionsTextTrack1LanguageCode: 'en', 19561 captionsTextTrack2Label: 'Spanish', 19562 captionsTextTrack2LanguageCode: 'es', 19563 captionsTextTrack3Label: 'Unknown CC', 19564 captionsTextTrack3LanguageCode: '', 19565 captionsTextTrack4Label: 'Unknown CC', 19566 captionsTextTrack4LanguageCode: '', 19567 renderTextTracksNatively: !0, 19568 } 19569 ), 19570 {}, 19571 { 19572 subtitleStreamController: Zn, 19573 subtitleTrackController: ea, 19574 timelineController: Ja, 19575 audioStreamController: Jn, 19576 audioTrackController: $n, 19577 emeController: is, 19578 cmcdController: Ys, 19579 contentSteeringController: Ws, 19580 } 19581 ); 19582 function io(t) { 19583 return t && 'object' == typeof t 19584 ? Array.isArray(t) 19585 ? t.map(io) 19586 : Object.keys(t).reduce(function (e, r) { 19587 return (e[r] = io(t[r])), e; 19588 }, {}) 19589 : t; 19590 } 19591 function no(t) { 19592 var e = t.loader; 19593 e !== Js && e !== zs 19594 ? (w.log('[config]: Custom loader detected, cannot enable progressive streaming'), 19595 (t.progressive = !1)) 19596 : (function () { 19597 if (self.fetch && self.AbortController && self.ReadableStream && self.Request) 19598 try { 19599 return new self.ReadableStream({}), !0; 19600 } catch (t) {} 19601 return !1; 19602 })() && 19603 ((t.loader = Js), 19604 (t.progressive = !0),
19605 (t.enableSoftwareAES = !0), 19606 w.log('[config]: Progressive streaming enabled, using FetchLoader')); 19607 } 19608 var ao = (function (t) { 19609 function e(e, r) { 19610 var i; 19611 return ( 19612 ((i = t.call(this, e, '[level-controller]') || this)._levels = []), 19613 (i._firstLevel = -1), 19614 (i._maxAutoLevel = -1), 19615 (i._startLevel = void 0), 19616 (i.currentLevel = null), 19617 (i.currentLevelIndex = -1), 19618 (i.manualLevelIndex = -1), 19619 (i.steering = void 0), 19620 (i.onParsedComplete = void 0), 19621 (i.steering = r), 19622 i._registerListeners(), 19623 i 19624 ); 19625 } 19626 l(e, t); 19627 var r = e.prototype; 19628 return ( 19629 (r._registerListeners = function () { 19630 var t = this.hls; 19631 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 19632 t.on(S.MANIFEST_LOADED, this.onManifestLoaded, this), 19633 t.on(S.LEVEL_LOADED, this.onLevelLoaded, this), 19634 t.on(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 19635 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this), 19636 t.on(S.ERROR, this.onError, this); 19637 }), 19638 (r._unregisterListeners = function () { 19639 var t = this.hls; 19640 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 19641 t.off(S.MANIFEST_LOADED, this.onManifestLoaded, this), 19642 t.off(S.LEVEL_LOADED, this.onLevelLoaded, this), 19643 t.off(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 19644 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this), 19645 t.off(S.ERROR, this.onError, this); 19646 }), 19647 (r.destroy = function () { 19648 this._unregisterListeners(), 19649 (this.steering = null), 19650 this.resetLevels(), 19651 t.prototype.destroy.call(this); 19652 }), 19653 (r.stopLoad = function () { 19654 this._levels.forEach(function (t) { 19655 (t.loadError = 0), (t.fragmentError = 0); 19656 }), 19657 t.prototype.stopLoad.call(this); 19658 }), 19659 (r.resetLevels = function () { 19660 (this._startLevel = void 0), 19661 (this.manualLevelIndex = -1), 19662 (this.currentLevelIndex = -1), 19663 (this.currentLevel = null), 19664 (this._levels = []), 19665 (this._maxAutoLevel = -1); 19666 }), 19667 (r.onManifestLoading = function (t, e) { 19668 this.resetLevels(); 19669 }), 19670 (r.onManifestLoaded = function (t, e) { 19671 var r = this.hls.config.preferManagedMediaSource, 19672 i = [], 19673 n = {}, 19674 a = {}, 19675 s = !1, 19676 o = !1, 19677 l = !1; 19678 e.levels.forEach(function (t) { 19679 var e, 19680 u, 19681 h = t.attrs, 19682 d = t.audioCodec, 19683 c = t.videoCodec; 19684 -1 !== (null == (e = d) ? void 0 : e.indexOf('mp4a.40.34')) && 19685 (Zs || (Zs = /chrome|firefox/i.test(navigator.userAgent)), 19686 Zs && (t.audioCodec = d = void 0)), 19687 d && (t.audioCodec = d = ve(d, r)), 19688 0 === (null == (u = c) ? void 0 : u.indexOf('avc1')) && 19689 (c = t.videoCodec = 19690 (function (t) { 19691 for (var e = t.split(','), r = 0; r < e.length; r++) { 19692 var i = e[r].split('.'); 19693 if (i.length > 2) { 19694 var n = i.shift() + '.'; 19695 (n += parseInt(i.shift()).toString(16)), 19696 (n += ('000' + parseInt(i.shift()).toString(16)).slice(-4)), 19697 (e[r] = n); 19698 } 19699 } 19700 return e.join(','); 19701 })(c)); 19702 var f = t.width, 19703 g = t.height, 19704 v = t.unknownCodecs; 19705 if ( 19706 (s || (s = !(!f || !g)), 19707 o || (o = !!c), 19708 l || (l = !!d), 19709 !( 19710 (null != v && v.length) ||
19711 (d && !le(d, 'audio', r)) || 19712 (c && !le(c, 'video', r)) 19713 )) 19714 ) { 19715 var m = h.CODECS, 19716 p = h['FRAME-RATE'], 19717 y = h['HDCP-LEVEL'], 19718 E = h['PATHWAY-ID'], 19719 T = h.RESOLUTION, 19720 S = h['VIDEO-RANGE'], 19721 L = 19722 (E || '.') + '-' + t.bitrate + '-' + T + '-' + p + '-' + m + '-' + S + '-' + y; 19723 if (n[L]) 19724 if (n[L].uri === t.url || t.attrs['PATHWAY-ID']) 19725 n[L].addGroupId('audio', h.AUDIO), n[L].addGroupId('text', h.SUBTITLES); 19726 else { 19727 var A = (a[L] += 1); 19728 t.attrs['PATHWAY-ID'] = new Array(A + 1).join('.'); 19729 var R = new or(t); 19730 (n[L] = R), i.push(R); 19731 } 19732 else { 19733 var b = new or(t); 19734 (n[L] = b), (a[L] = 1), i.push(b); 19735 } 19736 } 19737 }), 19738 this.filterAndSortMediaOptions(i, e, s, o, l); 19739 }), 19740 (r.filterAndSortMediaOptions = function (t, e, r, i, n) { 19741 var a = this, 19742 s = [], 19743 o = [], 19744 l = t; 19745 if ( 19746 ((r || i) && 19747 n && 19748 (l = l.filter(function (t) { 19749 var e, 19750 r = t.videoCodec, 19751 i = t.videoRange, 19752 n = t.width, 19753 a = t.height; 19754 return (!!r || !(!n || !a)) && !!(e = i) && er.indexOf(e) > -1; 19755 })), 19756 0 !== l.length) 19757 ) { 19758 if (e.audioTracks) { 19759 var u = this.hls.config.preferManagedMediaSource; 19760 so( 19761 (s = e.audioTracks.filter(function (t) { 19762 return !t.audioCodec || le(t.audioCodec, 'audio', u); 19763 })) 19764 ); 19765 } 19766 e.subtitles && so((o = e.subtitles)); 19767 var h = l.slice(0); 19768 l.sort(function (t, e) { 19769 if (t.attrs['HDCP-LEVEL'] !== e.attrs['HDCP-LEVEL']) 19770 return (t.attrs['HDCP-LEVEL'] || '') > (e.attrs['HDCP-LEVEL'] || '') ? 1 : -1; 19771 if (r && t.height !== e.height) return t.height - e.height; 19772 if (t.frameRate !== e.frameRate) return t.frameRate - e.frameRate; 19773 if (t.videoRange !== e.videoRange) 19774 return er.indexOf(t.videoRange) - er.indexOf(e.videoRange); 19775 if (t.videoCodec !== e.videoCodec) { 19776 var i = de(t.videoCodec), 19777 n = de(e.videoCodec); 19778 if (i !== n) return n - i; 19779 } 19780 if (t.uri === e.uri && t.codecSet !== e.codecSet) { 19781 var a = ce(t.codecSet), 19782 s = ce(e.codecSet); 19783 if (a !== s) return s - a; 19784 } 19785 return t.averageBitrate !== e.averageBitrate 19786 ? t.averageBitrate - e.averageBitrate 19787 : 0; 19788 }); 19789 var d = h[0]; 19790 if (this.steering && (l = this.steering.filterParsedLevels(l)).length !== h.length) 19791 for (var c = 0; c < h.length; c++) 19792 if (h[c].pathwayId === l[0].pathwayId) { 19793 d = h[c]; 19794 break; 19795 } 19796 this._levels = l; 19797 for (var f = 0; f < l.length; f++) 19798 if (l[f] === d) { 19799 var g; 19800 this._firstLevel = f; 19801 var v = d.bitrate, 19802 m = this.hls.bandwidthEstimate; 19803 if ( 19804 (this.log( 19805 'manifest loaded, ' + l.length + ' level(s) found, first bitrate: ' + v 19806 ), 19807 void 0 === 19808 (null == (g = this.hls.userConfig) ? void 0 : g.abrEwmaDefaultEstimate)) 19809 ) { 19810 var p = Math.min(v, this.hls.config.abrEwmaDefaultEstimateMax); 19811 p > m && m === ro.abrEwmaDefaultEstimate && (this.hls.bandwidthEstimate = p); 19812 } 19813 break; 19814 } 19815 var y = n && !i, 19816 E = { 19817 levels: l, 19818 audioTracks: s, 19819 subtitleTracks: o, 19820 sessionData: e.sessionData, 19821 sessionKeys: e.sessionKeys, 19822 firstLevel: this._firstLevel, 19823 stats: e.stats, 19824 audio: n, 19825 video: i, 19826 altAudio: 19827 !y && 19828 s.some(function (t) { 19829 return !!t.url; 19830 }), 19831 }; 19832 this.hls.trigger(S.MANIFEST_PARSED, E), 19833 (this.hls.config.autoStartLoad || this.hls.forceStartLoad) && 19834 this.hls.startLoad(this.hls.config.startPosition); 19835 } else 19836 Promise.resolve().then(function () { 19837 if (a.hls) { 19838 e.levels.length && 19839 a.warn( 19840 'One or more CODECS in variant not supported: ' + 19841 JSON.stringify(e.levels[0].attrs) 19842 ); 19843 var t = new Error('no level with compatible codecs found in manifest'); 19844 a.hls.trigger(S.ERROR, { 19845 type: L.MEDIA_ERROR, 19846 details: A.MANIFEST_INCOMPATIBLE_CODECS_ERROR, 19847 fatal: !0, 19848 url: e.url, 19849 error: t, 19850 reason: t.message, 19851 }); 19852 } 19853 }); 19854 }), 19855 (r.onError = function (t, e) { 19856 !e.fatal && 19857 e.context && 19858 e.context.type === _e && 19859 e.context.level === this.level && 19860 this.checkRetry(e); 19861 }), 19862 (r.onFragBuffered = function (t, e) { 19863 var r = e.frag; 19864 if (void 0 !== r && r.type === Fe) { 19865 var i = r.elementaryStreams; 19866 if ( 19867 !Object.keys(i).some(function (t) { 19868 return !!i[t]; 19869 }) 19870 ) 19871 return; 19872 var n = this._levels[r.level]; 19873 null != n && 19874 n.loadError && 19875 (this.log('Resetting level error count of ' + n.loadError + ' on frag buffered'), 19876 (n.loadError = 0)); 19877 } 19878 }), 19879 (r.onLevelLoaded = function (t, e) { 19880 var r, 19881 i, 19882 n = e.level, 19883 a = e.details, 19884 s = this._levels[n]; 19885 if (!s) 19886 return ( 19887 this.warn('Invalid level index ' + n), 19888 void (null != (i = e.deliveryDirectives) && i.skip && (a.deltaUpdateFailed = !0)) 19889 ); 19890 n === this.currentLevelIndex 19891 ? (0 === s.fragmentError && (s.loadError = 0), this.playlistLoaded(n, e, s.details)) 19892 : null != (r = e.deliveryDirectives) && r.skip && (a.deltaUpdateFailed = !0); 19893 }), 19894 (r.loadPlaylist = function (e) { 19895 t.prototype.loadPlaylist.call(this); 19896 var r = this.currentLevelIndex, 19897 i = this.currentLevel; 19898 if (i && this.shouldLoadPlaylist(i)) { 19899 var n = i.uri; 19900 if (e) 19901 try { 19902 n = e.addDirectives(n); 19903 } catch (t) { 19904 this.warn('Could not construct new URL with HLS Delivery Directives: ' + t); 19905 } 19906 var a = i.attrs['PATHWAY-ID']; 19907 this.log( 19908 'Loading level index ' + 19909 r + 19910 (void 0 !== (null == e ? void 0 : e.msn) 19911 ? ' at sn ' + e.msn + ' part ' + e.part 19912 : '') + 19913 ' with' + 19914 (a ? ' Pathway ' + a : '') + 19915 ' ' + 19916 n 19917 ), 19918 this.clearTimer(), 19919 this.hls.trigger(S.LEVEL_LOADING, { 19920 url: n, 19921 level: r, 19922 pathwayId: i.attrs['PATHWAY-ID'], 19923 id: 0, 19924 deliveryDirectives: e || null, 19925 }); 19926 } 19927 }), 19928 (r.removeLevel = function (t) { 19929 var e, 19930 r = this, 19931 i = this._levels.filter(function (e, i) { 19932 return ( 19933 i !== t || 19934 (r.steering && r.steering.removeLevel(e), 19935 e === r.currentLevel && 19936 ((r.currentLevel = null),
19937 (r.currentLevelIndex = -1), 19938 e.details && 19939 e.details.fragments.forEach(function (t) { 19940 return (t.level = -1); 19941 })), 19942 !1) 19943 ); 19944 }); 19945 mr(i), 19946 (this._levels = i), 19947 this.currentLevelIndex > -1 && 19948 null != (e = this.currentLevel) && 19949 e.details && 19950 (this.currentLevelIndex = this.currentLevel.details.fragments[0].level), 19951 this.hls.trigger(S.LEVELS_UPDATED, { levels: i }); 19952 }), 19953 (r.onLevelsUpdated = function (t, e) { 19954 var r = e.levels; 19955 this._levels = r; 19956 }), 19957 (r.checkMaxAutoUpdated = function () { 19958 var t = this.hls, 19959 e = t.autoLevelCapping, 19960 r = t.maxAutoLevel, 19961 i = t.maxHdcpLevel; 19962 this._maxAutoLevel !== r && 19963 ((this._maxAutoLevel = r), 19964 this.hls.trigger(S.MAX_AUTO_LEVEL_UPDATED, { 19965 autoLevelCapping: e, 19966 levels: this.levels, 19967 maxAutoLevel: r, 19968 minAutoLevel: this.hls.minAutoLevel, 19969 maxHdcpLevel: i, 19970 })); 19971 }), 19972 s(e, [ 19973 { 19974 key: 'levels', 19975 get: function () { 19976 return 0 === this._levels.length ? null : this._levels; 19977 }, 19978 }, 19979 { 19980 key: 'level', 19981 get: function () { 19982 return this.currentLevelIndex; 19983 }, 19984 set: function (t) { 19985 var e = this._levels; 19986 if (0 !== e.length) { 19987 if (t < 0 || t >= e.length) { 19988 var r = new Error('invalid level idx'), 19989 i = t < 0; 19990 if ( 19991 (this.hls.trigger(S.ERROR, { 19992 type: L.OTHER_ERROR, 19993 details: A.LEVEL_SWITCH_ERROR, 19994 level: t, 19995 fatal: i, 19996 error: r, 19997 reason: r.message, 19998 }), 19999 i) 20000 ) 20001 return; 20002 t = Math.min(t, e.length - 1); 20003 } 20004 var n = this.currentLevelIndex, 20005 a = this.currentLevel, 20006 s = a ? a.attrs['PATHWAY-ID'] : void 0, 20007 o = e[t], 20008 l = o.attrs['PATHWAY-ID']; 20009 if ( 20010 ((this.currentLevelIndex = t), 20011 (this.currentLevel = o), 20012 n !== t || !o.details || !a || s !== l) 20013 ) { 20014 this.log( 20015 'Switching to level ' + 20016 t + 20017 ' (' + 20018 (o.height ? o.height + 'p ' : '') + 20019 (o.videoRange ? o.videoRange + ' ' : '') + 20020 (o.codecSet ? o.codecSet + ' ' : '') + 20021 '@' + 20022 o.bitrate + 20023 ')' + 20024 (l ? ' with Pathway ' + l : '') + 20025 ' from level ' + 20026 n + 20027 (s ? ' with Pathway ' + s : '') 20028 ); 20029 var u = { 20030 level: t, 20031 attrs: o.attrs, 20032 details: o.details, 20033 bitrate: o.bitrate, 20034 averageBitrate: o.averageBitrate, 20035 maxBitrate: o.maxBitrate, 20036 realBitrate: o.realBitrate, 20037 width: o.width, 20038 height: o.height, 20039 codecSet: o.codecSet, 20040 audioCodec: o.audioCodec, 20041 videoCodec: o.videoCodec, 20042 audioGroups: o.audioGroups, 20043 subtitleGroups: o.subtitleGroups, 20044 loaded: o.loaded, 20045 loadError: o.loadError, 20046 fragmentError: o.fragmentError, 20047 name: o.name, 20048 id: o.id, 20049 uri: o.uri, 20050 url: o.url, 20051 urlId: 0, 20052 audioGroupIds: o.audioGroupIds, 20053 textGroupIds: o.textGroupIds, 20054 }; 20055 this.hls.trigger(S.LEVEL_SWITCHING, u); 20056 var h = o.details; 20057 if (!h || h.live) { 20058 var d = this.switchParams(o.uri, null == a ? void 0 : a.details, h); 20059 this.loadPlaylist(d); 20060 } 20061 } 20062 } 20063 }, 20064 }, 20065 { 20066 key: 'manualLevel', 20067 get: function () { 20068 return this.manualLevelIndex; 20069 }, 20070 set: function (t) { 20071 (this.manualLevelIndex = t), 20072 void 0 === this._startLevel && (this._startLevel = t), 20073 -1 !== t && (this.level = t); 20074 }, 20075 }, 20076 { 20077 key: 'firstLevel', 20078 get: function () { 20079 return this._firstLevel; 20080 }, 20081 set: function (t) { 20082 this._firstLevel = t; 20083 }, 20084 }, 20085 { 20086 key: 'startLevel', 20087 get: function () { 20088 if (void 0 === this._startLevel) { 20089 var t = this.hls.config.startLevel; 20090 return void 0 !== t ? t : this.hls.firstAutoLevel; 20091 } 20092 return this._startLevel; 20093 }, 20094 set: function (t) { 20095 this._startLevel = t; 20096 }, 20097 }, 20098 {
20099 key: 'nextLoadLevel', 20100 get: function () { 20101 return -1 !== this.manualLevelIndex 20102 ? this.manualLevelIndex 20103 : this.hls.nextAutoLevel; 20104 }, 20105 set: function (t) { 20106 (this.level = t), -1 === this.manualLevelIndex && (this.hls.nextAutoLevel = t); 20107 }, 20108 }, 20109 ]), 20110 e 20111 ); 20112 })(Fr); 20113 function so(t) { 20114 var e = {}; 20115 t.forEach(function (t) { 20116 var r = t.groupId || ''; 20117 (t.id = e[r] = e[r] || 0), e[r]++; 20118 }); 20119 } 20120 var oo = (function () { 20121 function t(t) { 20122 (this.config = void 0), 20123 (this.keyUriToKeyInfo = {}), 20124 (this.emeController = null), 20125 (this.config = t); 20126 } 20127 var e = t.prototype; 20128 return ( 20129 (e.abort = function (t) { 20130 for (var e in this.keyUriToKeyInfo) { 20131 var r = this.keyUriToKeyInfo[e].loader; 20132 if (r) { 20133 var i; 20134 if (t && t !== (null == (i = r.context) ? void 0 : i.frag.type)) return; 20135 r.abort(); 20136 } 20137 } 20138 }), 20139 (e.detach = function () { 20140 for (var t in this.keyUriToKeyInfo) { 20141 var e = this.keyUriToKeyInfo[t]; 20142 (e.mediaKeySessionContext || e.decryptdata.isCommonEncryption) && 20143 delete this.keyUriToKeyInfo[t]; 20144 } 20145 }), 20146 (e.destroy = function () { 20147 for (var t in (this.detach(), this.keyUriToKeyInfo)) { 20148 var e = this.keyUriToKeyInfo[t].loader; 20149 e && e.destroy(); 20150 } 20151 this.keyUriToKeyInfo = {}; 20152 }), 20153 (e.createKeyLoadError = function (t, e, r, i, n) { 20154 return ( 20155 void 0 === e && (e = A.KEY_LOAD_ERROR), 20156 new fi({ 20157 type: L.NETWORK_ERROR, 20158 details: e, 20159 fatal: !1, 20160 frag: t, 20161 response: n, 20162 error: r, 20163 networkDetails: i, 20164 }) 20165 ); 20166 }), 20167 (e.loadClear = function (t, e) { 20168 var r = this; 20169 if (this.emeController && this.config.emeEnabled) 20170 for ( 20171 var i = t.sn, 20172 n = t.cc, 20173 a = function () { 20174 var t = e[s]; 20175 if (n <= t.cc && ('initSegment' === i || 'initSegment' === t.sn || i < t.sn)) 20176 return ( 20177 r.emeController.selectKeySystemFormat(t).then(function (e) { 20178 t.setKeyFormat(e); 20179 }), 20180 1 20181 ); 20182 }, 20183 s = 0; 20184 s < e.length && !a(); 20185 s++ 20186 ); 20187 }), 20188 (e.load = function (t) { 20189 var e = this; 20190 return !t.decryptdata && t.encrypted && this.emeController 20191 ? this.emeController.selectKeySystemFormat(t).then(function (r) { 20192 return e.loadInternal(t, r); 20193 }) 20194 : this.loadInternal(t); 20195 }), 20196 (e.loadInternal = function (t, e) { 20197 var r, i; 20198 e && t.setKeyFormat(e); 20199 var n = t.decryptdata; 20200 if (!n) { 20201 var a = new Error( 20202 e 20203 ? 'Expected frag.decryptdata to be defined after setting format ' + e 20204 : 'Missing decryption data on fragment in onKeyLoading' 20205 ); 20206 return Promise.reject(this.createKeyLoadError(t, A.KEY_LOAD_ERROR, a)); 20207 } 20208 var s = n.uri; 20209 if (!s) 20210 return Promise.reject( 20211 this.createKeyLoadError( 20212 t, 20213 A.KEY_LOAD_ERROR, 20214 new Error('Invalid key URI: "' + s + '"') 20215 ) 20216 ); 20217 var o, 20218 l = this.keyUriToKeyInfo[s]; 20219 if (null != (r = l) && r.decryptdata.key) 20220 return (n.key = l.decryptdata.key), Promise.resolve({ frag: t, keyInfo: l }); 20221 if (null != (i = l) && i.keyLoadPromise) 20222 switch (null == (o = l.mediaKeySessionContext) ? void 0 : o.keyStatus) { 20223 case void 0: 20224 case 'status-pending': 20225 case 'usable': 20226 case 'usable-in-future': 20227 return l.keyLoadPromise.then(function (e) { 20228 return (n.key = e.keyInfo.decryptdata.key), { frag: t, keyInfo: l }; 20229 }); 20230 } 20231 switch ( 20232 ((l = this.keyUriToKeyInfo[s] = 20233 { 20234 decryptdata: n, 20235 keyLoadPromise: null, 20236 loader: null, 20237 mediaKeySessionContext: null, 20238 }), 20239 n.method) 20240 ) { 20241 case 'ISO-23001-7': 20242 case 'SAMPLE-AES': 20243 case 'SAMPLE-AES-CENC': 20244 case 'SAMPLE-AES-CTR': 20245 return 'identity' === n.keyFormat ? this.loadKeyHTTP(l, t) : this.loadKeyEME(l, t); 20246 case 'AES-128': 20247 return this.loadKeyHTTP(l, t); 20248 default: 20249 return Promise.reject( 20250 this.createKeyLoadError( 20251 t, 20252 A.KEY_LOAD_ERROR, 20253 new Error('Key supplied with unsupported METHOD: "' + n.method + '"') 20254 ) 20255 ); 20256 } 20257 }), 20258 (e.loadKeyEME = function (t, e) { 20259 var r = { frag: e, keyInfo: t }; 20260 if (this.emeController && this.config.emeEnabled) { 20261 var i = this.emeController.loadKey(r); 20262 if (i) 20263 return (t.keyLoadPromise = i.then(function (e) { 20264 return (t.mediaKeySessionContext = e), r; 20265 })).catch(function (e) { 20266 throw ((t.keyLoadPromise = null), e); 20267 }); 20268 } 20269 return Promise.resolve(r); 20270 }), 20271 (e.loadKeyHTTP = function (t, e) { 20272 var r = this, 20273 n = this.config, 20274 a = new (0, n.loader)(n); 20275 return ( 20276 (e.keyLoader = t.loader = a), 20277 (t.keyLoadPromise = new Promise(function (s, o) { 20278 var l = { 20279 keyInfo: t, 20280 frag: e, 20281 responseType: 'arraybuffer', 20282 url: t.decryptdata.uri, 20283 }, 20284 u = n.keyLoadPolicy.default, 20285 h = { 20286 loadPolicy: u, 20287 timeout: u.maxLoadTimeMs, 20288 maxRetry: 0, 20289 retryDelay: 0, 20290 maxRetryDelay: 0, 20291 }, 20292 d = { 20293 onSuccess: function (t, e, i, n) { 20294 var a = i.frag, 20295 l = i.keyInfo, 20296 u = i.url; 20297 if (!a.decryptdata || l !== r.keyUriToKeyInfo[u]) 20298 return o( 20299 r.createKeyLoadError( 20300 a, 20301 A.KEY_LOAD_ERROR, 20302 new Error('after key load, decryptdata unset or changed'), 20303 n 20304 ) 20305 ); 20306 (l.decryptdata.key = a.decryptdata.key = new Uint8Array(t.data)), 20307 (a.keyLoader = null),
20308 (l.loader = null), 20309 s({ frag: a, keyInfo: l }); 20310 }, 20311 onError: function (t, n, a, s) { 20312 r.resetLoader(n), 20313 o( 20314 r.createKeyLoadError( 20315 e, 20316 A.KEY_LOAD_ERROR, 20317 new Error('HTTP Error ' + t.code + ' loading key ' + t.text), 20318 a, 20319 i({ url: l.url, data: void 0 }, t) 20320 ) 20321 ); 20322 }, 20323 onTimeout: function (t, i, n) { 20324 r.resetLoader(i), 20325 o( 20326 r.createKeyLoadError( 20327 e, 20328 A.KEY_LOAD_TIMEOUT, 20329 new Error('key loading timed out'), 20330 n 20331 ) 20332 ); 20333 }, 20334 onAbort: function (t, i, n) { 20335 r.resetLoader(i), 20336 o( 20337 r.createKeyLoadError( 20338 e, 20339 A.INTERNAL_ABORTED, 20340 new Error('key loading aborted'), 20341 n 20342 ) 20343 ); 20344 }, 20345 }; 20346 a.load(l, h, d); 20347 })) 20348 ); 20349 }), 20350 (e.resetLoader = function (t) { 20351 var e = t.frag, 20352 r = t.keyInfo, 20353 i = t.url, 20354 n = r.loader; 20355 e.keyLoader === n && ((e.keyLoader = null), (r.loader = null)), 20356 delete this.keyUriToKeyInfo[i], 20357 n && n.destroy(); 20358 }), 20359 t 20360 ); 20361 })(); 20362 function lo() { 20363 return self.SourceBuffer || self.WebKitSourceBuffer; 20364 } 20365 function uo() { 20366 if (!se()) return !1; 20367 var t = lo(); 20368 return ( 20369 !t || 20370 (t.prototype && 20371 'function' == typeof t.prototype.appendBuffer && 20372 'function' == typeof t.prototype.remove) 20373 ); 20374 } 20375 var ho = (function () { 20376 function t(t, e, r, i) { 20377 (this.config = void 0), 20378 (this.media = null), 20379 (this.fragmentTracker = void 0), 20380 (this.hls = void 0), 20381 (this.nudgeRetry = 0), 20382 (this.stallReported = !1), 20383 (this.stalled = null), 20384 (this.moved = !1), 20385 (this.seeking = !1), 20386 (this.config = t), 20387 (this.media = e), 20388 (this.fragmentTracker = r), 20389 (this.hls = i); 20390 } 20391 var e = t.prototype; 20392 return ( 20393 (e.destroy = function () { 20394 (this.media = null), (this.hls = this.fragmentTracker = null); 20395 }), 20396 (e.poll = function (t, e) { 20397 var r = this.config, 20398 i = this.media, 20399 n = this.stalled; 20400 if (null !== i) { 20401 var a = i.currentTime, 20402 s = i.seeking, 20403 o = this.seeking && !s, 20404 l = !this.seeking && s; 20405 if (((this.seeking = s), a === t)) 20406 if (l || o) this.stalled = null; 20407 else if ( 20408 (i.paused && !s) || 20409 i.ended || 20410 0 === i.playbackRate || 20411 !ri.getBuffered(i).length 20412 ) 20413 this.nudgeRetry = 0; 20414 else { 20415 var u = ri.bufferInfo(i, a, 0), 20416 h = u.nextStart || 0; 20417 if (s) { 20418 var d = u.len > 2, 20419 c = 20420 !h || 20421 (e && e.start <= a) || 20422 (h - a > 2 && !this.fragmentTracker.getPartialFragment(a)); 20423 if (d || c) return; 20424 this.moved = !1; 20425 } 20426 if (!this.moved && null !== this.stalled) { 20427 var f; 20428 if (!(u.len > 0 || h)) return; 20429 var g = Math.max(h, u.start || 0) - a, 20430 v = this.hls.levels ? this.hls.levels[this.hls.currentLevel] : null, 20431 m = (null == v || null == (f = v.details) ? void 0 : f.live) 20432 ? 2 * v.details.targetduration 20433 : 2, 20434 p = this.fragmentTracker.getPartialFragment(a); 20435 if (g > 0 && (g <= m || p)) 20436 return void (i.paused || this._trySkipBufferHole(p)); 20437 } 20438 var y = self.performance.now(); 20439 if (null !== n) { 20440 var E = y - n; 20441 if (s || !(E >= 250) || (this._reportStall(u), this.media)) { 20442 var T = ri.bufferInfo(i, a, r.maxBufferHole); 20443 this._tryFixBufferStall(T, E); 20444 } 20445 } else this.stalled = y; 20446 } 20447 else if (((this.moved = !0), s || (this.nudgeRetry = 0), null !== n)) { 20448 if (this.stallReported) { 20449 var S = self.performance.now() - n; 20450 w.warn('playback not stuck anymore @' + a + ', after ' + Math.round(S) + 'ms'), 20451 (this.stallReported = !1); 20452 } 20453 this.stalled = null; 20454 } 20455 } 20456 }), 20457 (e._tryFixBufferStall = function (t, e) { 20458 var r = this.config, 20459 i = this.fragmentTracker, 20460 n = this.media; 20461 if (null !== n) { 20462 var a = n.currentTime, 20463 s = i.getPartialFragment(a); 20464 if (s && (this._trySkipBufferHole(s) || !this.media)) return; 20465 (t.len >
20465 r.maxBufferHole || (t.nextStart && t.nextStart - a < r.maxBufferHole)) && 20466 e > 1e3 * r.highBufferWatchdogPeriod && 20467 (w.warn('Trying to nudge playhead over buffer-hole'), 20468 (this.stalled = null), 20469 this._tryNudgeBuffer()); 20470 } 20471 }), 20472 (e._reportStall = function (t) { 20473 var e = this.hls, 20474 r = this.media; 20475 if (!this.stallReported && r) { 20476 this.stallReported = !0; 20477 var i = new Error( 20478 'Playback stalling at @' + 20479 r.currentTime + 20480 ' due to low buffer (' + 20481 JSON.stringify(t) + 20482 ')' 20483 ); 20484 w.warn(i.message), 20485 e.trigger(S.ERROR, { 20486 type: L.MEDIA_ERROR, 20487 details: A.BUFFER_STALLED_ERROR, 20488 fatal: !1, 20489 error: i, 20490 buffer: t.len, 20491 }); 20492 } 20493 }), 20494 (e._trySkipBufferHole = function (t) { 20495 var e = this.config, 20496 r = this.hls, 20497 i = this.media; 20498 if (null === i) return 0; 20499 var n = i.currentTime, 20500 a = ri.bufferInfo(i, n, 0), 20501 s = n < a.start ? a.start : a.nextStart; 20502 if (s) { 20503 var o = a.len <= e.maxBufferHole, 20504 l = a.len > 0 && a.len < 1 && i.readyState < 3, 20505 u = s - n; 20506 if (u > 0 && (o || l)) { 20507 if (u > e.maxBufferHole) { 20508 var h = this.fragmentTracker, 20509 d = !1; 20510 if (0 === n) { 20511 var c = h.getAppendedFrag(0, Fe); 20512 c && s < c.end && (d = !0); 20513 } 20514 if (!d) { 20515 var f = t || h.getAppendedFrag(n, Fe); 20516 if (f) { 20517 for (var g = !1, v = f.end; v < s; ) { 20518 var m = h.getPartialFragment(v); 20519 if (!m) { 20520 g = !0; 20521 break; 20522 } 20523 v += m.duration; 20524 } 20525 if (g) return 0; 20526 } 20527 } 20528 } 20529 var p = Math.max(s + 0.05, n + 0.1); 20530 if ( 20531 (w.warn('skipping hole, adjusting currentTime from ' + n + ' to ' + p), 20532 (this.moved = !0), 20533 (this.stalled = null), 20534 (i.currentTime = p), 20535 t && !t.gap) 20536 ) { 20537 var y = new Error( 20538 'fragment loaded with buffer holes, seeking from ' + n + ' to ' + p 20539 ); 20540 r.trigger(S.ERROR, { 20541 type: L.MEDIA_ERROR, 20542 details: A.BUFFER_SEEK_OVER_HOLE, 20543 fatal: !1, 20544 error: y, 20545 reason: y.message, 20546 frag: t, 20547 }); 20548 } 20549 return p; 20550 } 20551 } 20552 return 0; 20553 }), 20554 (e._tryNudgeBuffer = function () { 20555 var t = this.config, 20556 e = this.hls, 20557 r = this.media, 20558 i = this.nudgeRetry; 20559 if (null !== r) { 20560 var n = r.currentTime; 20561 if ((this.nudgeRetry++, i < t.nudgeMaxRetry)) { 20562 var a = n + (i + 1) * t.nudgeOffset, 20563 s = new Error("Nudging 'currentTime' from " + n + ' to ' + a); 20564 w.warn(s.message), 20565 (r.currentTime = a), 20566 e.trigger(S.ERROR, { 20567 type: L.MEDIA_ERROR, 20568 details: A.BUFFER_NUDGE_ON_STALL, 20569 error: s, 20570 fatal: !1, 20571 }); 20572 } else { 20573 var o = new Error( 20574 'Playhead still not moving while enough data buffered @' + 20575 n + 20576 ' after ' + 20577 t.nudgeMaxRetry + 20578 ' nudges' 20579 ); 20580 w.error(o.message), 20581 e.trigger(S.ERROR, { 20582 type: L.MEDIA_ERROR, 20583 details: A.BUFFER_STALLED_ERROR, 20584 error: o, 20585 fatal: !0, 20586 }); 20587 } 20588 } 20589 }), 20590 t 20591 ); 20592 })(), 20593 co = (function (t) { 20594 function e(e, r, i) { 20595 var n; 20596 return ( 20597 ((n = t.call(this, e, r, i, '[stream-controller]', Fe) || this).audioCodecSwap = !1), 20598 (n.gapController = null),
20599 (n.level = -1), 20600 (n._forceStartLoad = !1), 20601 (n.altAudio = !1), 20602 (n.audioOnly = !1), 20603 (n.fragPlaying = null), 20604 (n.onvplaying = null), 20605 (n.onvseeked = null), 20606 (n.fragLastKbps = 0), 20607 (n.couldBacktrack = !1), 20608 (n.backtrackFragment = null), 20609 (n.audioCodecSwitch = !1), 20610 (n.videoBuffer = null), 20611 n._registerListeners(), 20612 n 20613 ); 20614 } 20615 l(e, t); 20616 var r = e.prototype; 20617 return ( 20618 (r._registerListeners = function () { 20619 var t = this.hls; 20620 t.on(S.MEDIA_ATTACHED, this.onMediaAttached, this), 20621 t.on(S.MEDIA_DETACHING, this.onMediaDetaching, this), 20622 t.on(S.MANIFEST_LOADING, this.onManifestLoading, this), 20623 t.on(S.MANIFEST_PARSED, this.onManifestParsed, this), 20624 t.on(S.LEVEL_LOADING, this.onLevelLoading, this), 20625 t.on(S.LEVEL_LOADED, this.onLevelLoaded, this), 20626 t.on(S.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this), 20627 t.on(S.ERROR, this.onError, this), 20628 t.on(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), 20629 t.on(S.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this), 20630 t.on(S.BUFFER_CREATED, this.onBufferCreated, this), 20631 t.on(S.BUFFER_FLUSHED, this.onBufferFlushed, this), 20632 t.on(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 20633 t.on(S.FRAG_BUFFERED, this.onFragBuffered, this); 20634 }), 20635 (r._unregisterListeners = function () { 20636 var t = this.hls; 20637 t.off(S.MEDIA_ATTACHED, this.onMediaAttached, this), 20638 t.off(S.MEDIA_DETACHING, this.onMediaDetaching, this), 20639 t.off(S.MANIFEST_LOADING, this.onManifestLoading, this), 20640 t.off(S.MANIFEST_PARSED, this.onManifestParsed, this), 20641 t.off(S.LEVEL_LOADED, this.onLevelLoaded, this), 20642 t.off(S.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this), 20643 t.off(S.ERROR, this.onError, this), 20644 t.off(S.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this), 20645 t.off(S.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this), 20646 t.off(S.BUFFER_CREATED, this.onBufferCreated, this), 20647 t.off(S.BUFFER_FLUSHED, this.onBufferFlushed, this), 20648 t.off(S.LEVELS_UPDATED, this.onLevelsUpdated, this), 20649 t.off(S.FRAG_BUFFERED, this.onFragBuffered, this); 20650 }), 20651 (r.onHandlerDestroying = function () { 20652 this._unregisterListeners(), t.prototype.onHandlerDestroying.call(this); 20653 }), 20654 (r.startLoad = function (t) { 20655 if (this.levels) { 20656 var e = this.lastCurrentTime, 20657 r = this.hls; 20658 if ( 20659 (this.stopLoad(), 20660 this.setInterval(100), 20661 (this.level = -1), 20662 !this.startFragRequested) 20663 ) { 20664 var i = r.startLevel; 20665 -1 === i && 20666 (r.config.testBandwidth && this.levels.length > 1 20667 ? ((i = 0), (this.bitrateTest = !0)) 20668 : (i = r.firstAutoLevel)), 20669 (r.nextLoadLevel = i), 20670 (this.level = r.loadLevel), 20671 (this.loadedmetadata = !1); 20672 } 20673 e > 0 && 20674 -1 === t && 20675 (this.log('Override startPosition with lastCurrentTime @' + e.toFixed(3)), 20676 (t = e)), 20677 (this.state = Ti), 20678 (this.nextLoadPosition = this.startPosition = this.lastCurrentTime = t), 20679 this.tick(); 20680 } else (this._forceStartLoad = !0), (this.state = Ei); 20681 }), 20682 (r.stopLoad = function () { 20683 (this._forceStartLoad = !1), t.prototype.stopLoad.c
20683all(this); 20684 }), 20685 (r.doTick = function () { 20686 switch (this.state) { 20687 case Ci: 20688 var t = this.levels, 20689 e = this.level, 20690 r = null == t ? void 0 : t[e], 20691 i = null == r ? void 0 : r.details; 20692 if (i && (!i.live || this.levelLastLoaded === r)) { 20693 if (this.waitForCdnTuneIn(i)) break; 20694 this.state = Ti; 20695 break; 20696 } 20697 if (this.hls.nextLoadLevel !== this.level) { 20698 this.state = Ti; 20699 break; 20700 } 20701 break; 20702 case Ai: 20703 var n, 20704 a = self.performance.now(), 20705 s = this.retryDate; 20706 if (!s || a >= s || (null != (n = this.media) && n.seeking)) { 20707 var o = this.levels, 20708 l = this.level, 20709 u = null == o ? void 0 : o[l]; 20710 this.resetStartWhenNotLoaded(u || null), (this.state = Ti); 20711 } 20712 } 20713 this.state === Ti && this.doTickIdle(), this.onTickEnd(); 20714 }), 20715 (r.onTickEnd = function () { 20716 t.prototype.onTickEnd.call(this), this.checkBuffer(), this.checkFragmentChanged(); 20717 }), 20718 (r.doTickIdle = function () { 20719 var t = this.hls, 20720 e = this.levelLastLoaded, 20721 r = this.levels, 20722 i = this.media; 20723 if ( 20724 null !== e && 20725 (i || (!this.startFragRequested && t.config.startFragPrefetch)) && 20726 (!this.altAudio || !this.audioOnly) 20727 ) { 20728 var n = this.buffering ? t.nextLoadLevel : t.loadLevel; 20729 if (null != r && r[n]) { 20730 var a = r[n], 20731 s = this.getMainFwdBufferInfo(); 20732 if (null !== s) { 20733 var o = this.getLevelDetails(); 20734 if (o && this._streamEnded(s, o)) { 20735 var l = {}; 20736 return ( 20737 this.altAudio && (l.type = 'video'), 20738 this.hls.trigger(S.BUFFER_EOS, l), 20739 void (this.state = Di) 20740 ); 20741 } 20742 if (this.buffering) { 20743 t.loadLevel !== n && 20744 -1 === t.manualLevel && 20745 this.log('Adapting to level ' + n + ' from level ' + this.level), 20746 (this.level = t.nextLoadLevel = n); 20747 var u = a.details; 20748 if (!u || this.state === Ci || (u.live && this.levelLastLoaded !== a)) 20749 return (this.level = n), void (this.state = Ci); 20750 var h = s.len, 20751 d = this.getMaxBufferLength(a.maxBitrate); 20752 if (!(h >= d)) { 20753 this.backtrackFragment && 20754 this.backtrackFragment.start > s.end && 20755 (this.backtrackFragment = null); 20756 var c = this.backtrackFragment ? this.backtrackFragment.start : s.end, 20757 f = this.getNextFragment(c, u); 20758 if ( 20759 this.couldBacktrack && 20760 !this.fragPrevious && 20761 f && 20762 'initSegment' !== f.sn && 20763 this.fragmentTracker.getState(f) !== Jr 20764 ) { 20765 var g, 20766 v = (null != (g = this.backtrackFragment) ? g : f).sn - u.startSN, 20767 m = u.fragments[v - 1]; 20768 m && f.cc === m.cc && ((f = m), this.fragmentTracker.removeFragment(m)); 20769 } else this.backtrackFragment && s.len && (this.backtrackFragment = null); 20770 if (f && this.isLoopLoading(f, c)) { 20771 if (!f.gap) { 20772 var p = this.audioOnly && !this.altAudio ? O : N, 20773 y = (p === N ? this.videoBuffer : this.mediaBuffer) || this.media; 20774 y && this.afterBufferFlushed(y, p, Fe); 20775 } 20776 f = this.getNextFragmentLoopLoading(f, u, s, Fe, d); 20777 } 20778 f && 20779 (!f.initSegment || 20780 f.initSegment.data || 20781 this.bitrateTest || 20782 (f = f.initSegment), 20783 this.loadFragment(f, a, c)); 20784 } 20785 } 20786 } 20787 } 20788 } 20789 }), 20790 (r.loadFragment = function (e, r, i) { 20791 var n = this.fragmentTracker.getState(e); 20792 (this.fragCurrent = e), 20793 n === Xr || n === Qr
20794 ? 'initSegment' === e.sn 20795 ? this._loadInitSegment(e, r) 20796 : this.bitrateTest 20797 ? (this.log( 20798 'Fragment ' + 20799 e.sn + 20800 ' of level ' + 20801 e.level + 20802 ' is being downloaded to test bitrate and will not be buffered' 20803 ), 20804 this._loadBitrateTestFrag(e, r)) 20805 : ((this.startFragRequested = !0), t.prototype.loadFragment.call(this, e, r, i)) 20806 : this.clearTrackerIfNeeded(e); 20807 }), 20808 (r.getBufferedFrag = function (t) { 20809 return this.fragmentTracker.getBufferedFrag(t, Fe); 20810 }), 20811 (r.followingBufferedFrag = function (t) { 20812 return t ? this.getBufferedFrag(t.end + 0.5) : null; 20813 }), 20814 (r.immediateLevelSwitch = function () { 20815 this.abortCurrentFrag(), this.flushMainBuffer(0, Number.POSITIVE_INFINITY); 20816 }), 20817 (r.nextLevelSwitch = function () { 20818 var t = this.levels, 20819 e = this.media; 20820 if (null != e && e.readyState) { 20821 var r, 20822 i = this.getAppendedFrag(e.currentTime); 20823 i && i.start > 1 && this.flushMainBuffer(0, i.start - 1); 20824 var n = this.getLevelDetails(); 20825 if (null != n && n.live) { 20826 var a = this.getMainFwdBufferInfo(); 20827 if (!a || a.len < 2 * n.targetduration) return; 20828 } 20829 if (!e.paused && t) { 20830 var s = t[this.hls.nextLoadLevel], 20831 o = this.fragLastKbps; 20832 r = 20833 o && this.fragCurrent 20834 ? (this.fragCurrent.duration * s.maxBitrate) / (1e3 * o) + 1 20835 : 0; 20836 } else r = 0; 20837 var l = this.getBufferedFrag(e.currentTime + r); 20838 if (l) { 20839 var u = this.followingBufferedFrag(l); 20840 if (u) { 20841 this.abortCurrentFrag(); 20842 var h = u.maxStartPTS ? u.maxStartPTS : u.start, 20843 d = u.duration, 20844 c = Math.max( 20845 l.end, 20846 h + 20847 Math.min( 20848 Math.max( 20849 d - this.config.maxFragLookUpTolerance, 20850 d * (this.couldBacktrack ? 0.5 : 0.125) 20851 ), 20852 d * (this.couldBacktrack ? 0.75 : 0.25) 20853 ) 20854 ); 20855 this.flushMainBuffer(c, Number.POSITIVE_INFINITY); 20856 } 20857 } 20858 } 20859 }), 20860 (r.abortCurrentFrag = function () { 20861 var t = this.fragCurrent; 20862 switch ( 20863 ((this.fragCurrent = null), 20864 (this.backtrackFragment = null), 20865 t && (t.abortRequests(), this.fragmentTracker.removeFragment(t)), 20866 this.state) 20867 ) { 20868 case Si: 20869 case Li: 20870 case Ai: 20871 case bi: 20872 case ki: 20873 this.state = Ti; 20874 } 20875 this.nextLoadPosition = this.getLoadPosition(); 20876 }), 20877 (r.flushMainBuffer = function (e, r) { 20878 t.prototype.flushMainBuffer.call(this, e, r, this.altAudio ? 'video' : null); 20879 }), 20880 (r.onMediaAttached = function (e, r) { 20881 t.prototype.onMediaAttached.call(this, e, r); 20882 var i = r.media; 20883 (this.onvplaying = this.onMediaPlaying.bind(this)), 20884 (this.onvseeked = this.onMediaSeeked.bind(this)), 20885 i.addEventListener('playing', this.onvplaying), 20886 i.addEventListener('seeked', this.onvseeked), 20887 (this.gapController = new ho(this.config, i, this.fragmentTracker, this.hls)); 20888 }), 20889 (r.onMediaDetaching = function () { 20890 var e = this.media; 20891 e && 20892 this.onvplaying && 20893 this.onvseeked && 20894 (e.removeEventListener('playing', this.onvplaying), 20895 e.removeEventListener('seeked', this.onvseeked), 20896 (this.onvplaying = this.onvseeked = null),
20897 (this.videoBuffer = null)), 20898 (this.fragPlaying = null), 20899 this.gapController && (this.gapController.destroy(), (this.gapController = null)), 20900 t.prototype.onMediaDetaching.call(this); 20901 }), 20902 (r.onMediaPlaying = function () { 20903 this.tick(); 20904 }), 20905 (r.onMediaSeeked = function () { 20906 var t = this.media, 20907 e = t ? t.currentTime : null; 20908 y(e) && this.log('Media seeked to ' + e.toFixed(3)); 20909 var r = this.getMainFwdBufferInfo(); 20910 null !== r && 0 !== r.len 20911 ? this.tick() 20912 : this.warn( 20913 'Main forward buffer length on "seeked" event ' + (r ? r.len : 'empty') + ')' 20914 ); 20915 }), 20916 (r.onManifestLoading = function () { 20917 this.log('Trigger BUFFER_RESET'), 20918 this.hls.trigger(S.BUFFER_RESET, void 0), 20919 this.fragmentTracker.removeAllFragments(), 20920 (this.couldBacktrack = !1), 20921 (this.startPosition = this.lastCurrentTime = this.fragLastKbps = 0), 20922 (this.levels = 20923 this.fragPlaying = 20924 this.backtrackFragment = 20925 this.levelLastLoaded = 20926 null), 20927 (this.altAudio = this.audioOnly = this.startFragRequested = !1); 20928 }), 20929 (r.onManifestParsed = function (t, e) { 20930 var r, 20931 i, 20932 n = !1, 20933 a = !1; 20934 e.levels.forEach(function (t) { 20935 var e = t.audioCodec; 20936 e && 20937 ((n = n || -1 !== e.indexOf('mp4a.40.2')), 20938 (a = a || -1 !== e.indexOf('mp4a.40.5'))); 20939 }), 20940 (this.audioCodecSwitch = 20941 n && 20942 a && 20943 !( 20944 'function' == 20945 typeof (null == (i = lo()) || null == (r = i.prototype) ? void 0 : r.changeType) 20946 )), 20947 this.audioCodecSwitch && 20948 this.log( 20949 'Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC' 20950 ), 20951 (this.levels = e.levels), 20952 (this.startFragRequested = !1); 20953 }), 20954 (r.onLevelLoading = function (t, e) { 20955 var r = this.levels; 20956 if (r && this.state === Ti) { 20957 var i = r[e.level]; 20958 (!i.details || 20959 (i.details.live && this.levelLastLoaded !== i) || 20960 this.waitForCdnTuneIn(i.details)) && 20961 (this.state = Ci); 20962 } 20963 }), 20964 (r.onLevelLoaded = function (t, e) { 20965 var r, 20966 i = this.levels, 20967 n = e.level, 20968 a = e.details, 20969 s = a.totalduration; 20970 if (i) { 20971 this.log( 20972 'Level ' + 20973 n + 20974 ' loaded [' + 20975 a.startSN + 20976 ',' + 20977 a.endSN + 20978 ']' + 20979 (a.lastPartSn ? '[part-' + a.lastPartSn + '-' + a.lastPartIndex + ']' : '') + 20980 ', cc [' + 20981 a.startCC + 20982 ', ' + 20983 a.endCC + 20984 '] duration:' + 20985 s 20986 ); 20987 var o = i[n], 20988 l = this.fragCurrent; 20989 !l || 20990 (this.state !== Li && this.state !== Ai) || 20991 (l.level !== e.level && l.loader && this.abortCurrentFrag()); 20992 var u = 0; 20993 if (a.live || (null != (r = o.details) && r.live)) { 20994 var h; 20995 if ((this.checkLiveUpdate(a), a.deltaUpdateFailed)) return; 20996 u = this.alignPlaylists( 20997 a, 20998 o.details, 20999 null == (h = this.levelLastLoaded) ? void 0 : h.details 21000 ); 21001 } 21002 if ( 21003 ((o.details = a), 21004 (this.levelLastLoaded = o), 21005 this.hls.trigger(S.LEVEL_UPDATED, { details: a, level: n }), 21006 this.state === Ci) 21007 ) { 21008 if (this.waitForCdnTuneIn(a)) return; 21009 this.state = Ti; 21010 } 21011 this.startFragRequested 21012 ? a.live && this.synchronizeToLiveEdge(a) 21013 : this.setStartPosition(a, u), 21014 this.tick(); 21015 } else this.warn('Levels were reset while loading level ' + n); 21016 }), 21017 (r._handleFragmentLoadProgress = function (t) { 21018 var e, 21019 r = t.frag, 21020 i = t.part, 21021 n = t.payload, 21022 a = this.levels; 21023 if (a) { 21024 var s = a[r.level], 21025 o = s.details; 21026 if (!o) 21027 return ( 21028 this.warn( 21029 'Dropping fragment ' + 21030 r.sn + 21031 ' of level ' + 21032 r.level + 21033 ' after level details were reset' 21034 ), 21035 void this.fragmentTracker.removeFragment(r) 21036 ); 21037 var l = s.videoCodec, 21038 u = o.PTSKnown || !o.live, 21039 h = null == (e = r.initSegment) ? void 0 : e.data, 21040 d = this._getAudioCodec(s), 21041 c = (this.transmuxer = 21042 this.transmuxer || 21043 new qn( 21044 this.hls, 21045 Fe, 21046 this._handleTransmuxComplete.bind(this), 21047 this._handleTransmuxerFlush.bind(this) 21048 )), 21049 f = i ? i.index : -1, 21050 g = -1 !== f, 21051 v = new ii(r.level, r.sn, r.stats.chunkCount, n.byteLength, f, g), 21052 m = this.initPTS[r.cc]; 21053 c.push(n, h, d, l, r, i, o.totalduration, u, v, m); 21054 } else 21055 this.warn( 21056 'Levels were reset while fragment load was in progress. Fragment ' + 21057 r.sn + 21058 ' of level ' + 21059 r.level + 21060 ' will not be buffered' 21061 ); 21062 }), 21063 (r.onAudioTrackSwitching = function (t, e) { 21064 var r = this.altAudio; 21065 if (!e.url) { 21066 if (this.mediaBuffer !== this.media) { 21067 this.log( 21068 'Switching on main audio, use media.buffered to schedule main fragment loading' 21069 ), 21070 (this.mediaBuffer = this.media); 21071 var i = this.fragCurrent; 21072 i && 21073 (this.log('Switching to main audio track, cancel main fragment load'), 21074 i.abortRequests(), 21075 this.fragmentTracker.removeFragment(i)), 21076 this.resetTransmuxer(), 21077 this.resetLoadingState(); 21078 } else this.audioOnly && this.resetTransmuxer(); 21079 var n = this.hls; 21080 r && 21081 (n.trigger(S.BUFFER_FLUSHING, { 21082 startOffset: 0, 21083 endOffset: Number.POSITIVE_INFINITY, 21084 type: null, 21085 }), 21086 this.fragmentTracker.removeAllFragments()), 21087 n.trigger(S.AUDIO_TRACK_SWITCHED, e); 21088 } 21089 }), 21090 (r.onAudioTrackSwitched = function (t, e) { 21091 var r = e.id, 21092 i = !!this.hls.audioTracks[r].url; 21093 if (i) { 21094 var n = this.videoBuffer; 21095 n && 21096 this.mediaBuffer !== n && 21097 (this.log( 21098 'Switching on alternate audio, use video.buffered to schedule main fragment loading' 21099 ), 21100 (this.mediaBuffer = n)); 21101 } 21102 (this.altAudio = i), this.tick(); 21103 }), 21104 (r.onBufferCreated = function (t, e) { 21105 var r, 21106 i, 21107 n = e.tracks, 21108 a = !1; 21109 for (var s in n) { 21110 var o = n[s]; 21111 if ('main' === o.id) { 21112 if (((i = s), (r = o), 'video' === s)) { 21113 var l = n[s]; 21114 l && (this.videoBuffer = l.buffer); 21115 } 21116 } else a = !0; 21117 } 21118 a && r 21119 ? (this.log( 21120 'Alternate track found, use ' + 21121 i + 21122 '.buffered to schedule main fragment loading' 21123 ), 21124 (this.mediaBuffer = r.buffer)) 21125 : (this.mediaBuffer = this.media); 21126 }), 21127 (r.onFragBuffered = function (t, e) { 21128 var r = e.frag, 21129 i = e.part; 21130 if (!r || r.type === Fe) { 21131 if (this.fragContextChanged(r)) 21132 return ( 21133 this.warn( 21134 'Fragment ' + 21135 r.sn + 21136 (i ? ' p: ' + i.index : '') + 21137 ' of level ' + 21138 r.level + 21139 ' finished buffering, but was aborted. state: ' + 21140 this.state 21141 ), 21142 void (this.state === ki && (this.state = Ti)) 21143 ); 21144 var n = i ? i.stats : r.stats;
21145 (this.fragLastKbps = Math.round( 21146 (8 * n.total) / (n.buffering.end - n.loading.first) 21147 )), 21148 'initSegment' !== r.sn && (this.fragPrevious = r), 21149 this.fragBufferedComplete(r, i); 21150 } 21151 }), 21152 (r.onError = function (t, e) { 21153 var r; 21154 if (e.fatal) this.state = Ii; 21155 else 21156 switch (e.details) { 21157 case A.FRAG_GAP: 21158 case A.FRAG_PARSING_ERROR: 21159 case A.FRAG_DECRYPT_ERROR: 21160 case A.FRAG_LOAD_ERROR: 21161 case A.FRAG_LOAD_TIMEOUT: 21162 case A.KEY_LOAD_ERROR: 21163 case A.KEY_LOAD_TIMEOUT: 21164 this.onFragmentOrKeyLoadError(Fe, e); 21165 break; 21166 case A.LEVEL_LOAD_ERROR: 21167 case A.LEVEL_LOAD_TIMEOUT: 21168 case A.LEVEL_PARSING_ERROR: 21169 e.levelRetry || 21170 this.state !== Ci || 21171 (null == (r = e.context) ? void 0 : r.type) !== _e || 21172 (this.state = Ti); 21173 break; 21174 case A.BUFFER_APPEND_ERROR: 21175 case A.BUFFER_FULL_ERROR: 21176 if (!e.parent || 'main' !== e.parent) return; 21177 if (e.details === A.BUFFER_APPEND_ERROR) return void this.resetLoadingState(); 21178 this.reduceLengthAndFlushBuffer(e) && 21179 this.flushMainBuffer(0, Number.POSITIVE_INFINITY); 21180 break; 21181 case A.INTERNAL_EXCEPTION: 21182 this.recoverWorkerError(e); 21183 } 21184 }), 21185 (r.checkBuffer = function () { 21186 var t = this.media, 21187 e = this.gapController; 21188 if (t && e && t.readyState) { 21189 if (this.loadedmetadata || !ri.getBuffered(t).length) { 21190 var r = this.state !== Ti ? this.fragCurrent : null; 21191 e.poll(this.lastCurrentTime, r); 21192 } 21193 this.lastCurrentTime = t.currentTime; 21194 } 21195 }), 21196 (r.onFragLoadEmergencyAborted = function () { 21197 (this.state = Ti), 21198 this.loadedmetadata || 21199 ((this.startFragRequested = !1), (this.nextLoadPosition = this.startPosition)), 21200 this.tickImmediate(); 21201 }), 21202 (r.onBufferFlushed = function (t, e) { 21203 var r = e.type; 21204 if (r !== O || (this.audioOnly && !this.altAudio)) { 21205 var i = (r === N ? this.videoBuffer : this.mediaBuffer) || this.media; 21206 this.afterBufferFlushed(i, r, Fe), this.tick(); 21207 } 21208 }), 21209 (r.onLevelsUpdated = function (t, e) { 21210 this.level > -1 && this.fragCurrent && (this.level = this.fragCurrent.level), 21211 (this.levels = e.levels); 21212 }), 21213 (r.swapAudioCodec = function () { 21214 this.audioCodecSwap = !this.audioCodecSwap; 21215 }), 21216 (r.seekToStartPos = function () { 21217 var t = this.media; 21218 if (t) { 21219 var e = t.currentTime, 21220 r = this.startPosition; 21221 if (r >= 0 && e < r) { 21222 if (t.seeking) 21223 return void this.log('could not seek to ' + r + ', already seeking at ' + e); 21224 var i = ri.getBuffered(t), 21225 n = (i.length ? i.start(0) : 0) - r; 21226 n > 0 && 21227 (n < this.config.maxBufferHole || n < this.config.maxFragLookUpTolerance) && 21228 (this.log('adjusting start position by ' + n + ' to match buffer start'), 21229 (r += n), 21230 (this.startPosition = r)), 21231 this.log('seek to target start position ' + r + ' from current time ' + e), 21232 (t.currentTime = r); 21233 } 21234 } 21235 }), 21236 (r._getAudioCodec = function (t) { 21237 var e = this.config.defaultAudioCodec || t.audioCodec; 21238 return ( 21239 this.audioCodecSwap && 21240 e && 21241 (this.log('Swapping audio codec'), 21242 (e = -1 !== e.indexOf('mp4a.40.5') ? 'mp4a.40.2' : 'mp4a.40.5')), 21243 e 21244 ); 21245 }), 21246 (r._loadBitrateTestFrag = function (t, e) { 21247 var r = this; 21248 (t.bitrateTest = !0), 21249 this._doFragLoad(t, e).then(function (i) { 21250 var n = r.hls; 21251 if (i && !r.fragContextChanged(t)) { 21252 (e.fragmentError = 0), 21253 (r.state = Ti), 21254 (r.startFragRequested = !1), 21255 (r.bitrateTest = !1); 21256 var a = t.stats; 21257 (a.parsing.start = 21258 a.parsing.end = 21259 a.buffering.start = 21260 a.buffering.end = 21261 self.performance.now()), 21262 n.trigger(S.FRAG_LOADED, i), 21263 (t.bitrateTest = !1); 21264 } 21265 }); 21266 }), 21267 (r._handleTransmuxComplete = function (t) { 21268 var e, 21269 r = 'main', 21270 i = this.hls, 21271 n = t.remuxResult, 21272 a = t.chunkMeta, 21273 s = this.getCurrentContext(a); 21274 if (s) { 21275 var o = s.frag, 21276 l = s.part, 21277 u = s.level, 21278 h = n.video, 21279 d = n.text, 21280 c = n.id3, 21281 f = n.initSegment, 21282 g = u.details, 21283 v = this.altAudio ? void 0 : n.audio; 21284 if (this.fragContextChanged(o)) this.fragmentTracker.removeFragment(o); 21285 else { 21286 if (((this.state = bi), f)) { 21287 if (null != f && f.tracks) { 21288 var m = o.initSegment || o; 21289 this._bufferInitSegment(u, f.tracks, m, a), 21290 i.trigger(S.FRAG_PARSING_INIT_SEGMENT, { 21291 frag: m, 21292 id: r, 21293 tracks: f.tracks, 21294 }); 21295 } 21296 var p = f.initPTS, 21297 E = f.timescale; 21298 y(p) && 21299 ((this.initPTS[o.cc] = { baseTime: p, timescale: E }), 21300 i.trigger(S.INIT_PTS_FOUND, { frag: o, id: r, initPTS: p, timescale: E })); 21301 } 21302 if (h && g && 'initSegment' !== o.sn) { 21303 var T = g.fragments[o.sn - 1 - g.startSN], 21304 L = o.sn === g.startSN, 21305 A = !T || o.cc > T.cc; 21306 if (!1 !== n.independent) { 21307 var R = h.startPTS, 21308 b = h.endPTS, 21309 k = h.startDTS, 21310 D = h.endDTS; 21311 if (l) 21312 l.elementaryStreams[h.type] = { 21313 startPTS: R, 21314 endPTS: b, 21315 startDTS: k, 21316 endDTS: D, 21317 }; 21318 else if ( 21319 (h.firstKeyFrame && 21320 h.independent && 21321 1 === a.id && 21322 !A && 21323 (this.couldBacktrack = !0), 21324 h.dropped && h.independent) 21325 ) { 21326 var I = this.getMainFwdBufferInfo(), 21327 w = (I ? I.end : this.getLoadPosition()) + this.config.maxBufferHole, 21328 C = h.firstKeyFramePTS ? h.firstKeyFramePTS : R; 21329 if (!L && w < C - this.config.maxBufferHole && !A) 21330 return void this.backtrack(o); 21331 A && (o.gap = !0), 21332 o.setElementaryStreamInfo(h.type, o.start, b, o.start, D, !0); 21333 } else L && R > 2 && (o.gap = !0); 21334 o.setElementaryStreamInfo(h.type, R, b, k, D), 21335 this.backtrackFragment && (this.backtrackFragment = o), 21336 this.bufferFragmentData(h, o, l, a, L || A); 21337 } else { 21338 if (!L && !A) return void this.backtrack(o); 21339 o.gap = !0; 21340 } 21341 } 21342 if (v) { 21343 var _ = v.startPTS, 21344 x = v.endPTS, 21345 P = v.startDTS, 21346 F = v.endDTS; 21347 l && 21348 (l.elementaryStreams[O] = { startPTS: _, endPTS: x, startDTS: P, endDTS: F }), 21349 o.setElementaryStreamInfo(O, _, x, P, F), 21350 this.bufferFragmentData(v, o, l, a); 21351 } 21352 if (g && null != c && null != (e = c.samples) && e.length) { 21353 var M = { id: r, frag: o, details: g, samples: c.samples }; 21354 i.trigger(S.FRAG_PARSING_METADATA, M); 21355 } 21356 if (g && d) { 21357 var N = { id: r, frag: o, details: g, samples: d.samples }; 21358 i.trigger(S.FRAG_PARSING_USERDATA, N); 21359 } 21360 } 21361 } else this.resetWhenMissingContext(a); 21362 }), 21363 (r._bufferInitSegment = function (t, e, r, i) { 21364 var n = this; 21365 if (this.state === bi) { 21366 (this.audioOnly = !!e.audio && !e.video), 21367 this.altAudio && !this.audioOnly && delete e.audio; 21368 var a = e.audio, 21369 s = e.video, 21370 o = e.audiovideo; 21371 if (a) { 21372 var l = t.audioCodec, 21373 u = navigator.userAgent.toLowerCase(); 21374 if (this.audioCodecSwitch) { 21375 l && (l = -1 !== l.indexOf('mp4a.40.5') ? 'mp4a.40.2' : 'mp4a.40.5'); 21376 var h = a.metadata; 21377 h && 21378 'channelCount' in h && 21379 1 !== (h.channelCount || 1) && 21380 -1 === u.indexOf('firefox') && 21381 (l = 'mp4a.40.5'); 21382 } 21383 l && 21384 -1 !== l.indexOf('mp4a.40.5') && 21385 -1 !== u.indexOf('android') && 21386 'audio/mpeg' !== a.container && 21387 ((l = 'mp4a.40.2'), this.log('Android: force audio codec to ' + l)), 21388 t.audioCodec && 21389 t.audioCodec !== l && 21390 this.log( 21391 'Swapping manifest audio codec "' + t.audioCodec + '" for "' + l + '"' 21392 ), 21393 (a.levelCodec = l), 21394 (a.id = 'main'), 21395 this.log( 21396 'Init audio buffer, container:' + 21397 a.container + 21398 ', codecs[selected/level/parsed]=[' + 21399 (l || '') + 21400 '/' + 21401 (t.audioCodec || '') + 21402 '/' + 21403 a.codec + 21404 ']' 21405 ); 21406 } 21407 s && 21408 ((s.levelCodec = t.videoCodec), 21409 (s.id = 'main'), 21410 this.log( 21411 'Init video buffer, container:' + 21412 s.container + 21413 ', codecs[level/parsed]=[' + 21414 (t.videoCodec || '') + 21415 '/' + 21416 s.codec + 21417 ']' 21418 )), 21419 o && 21420 this.log( 21421 'Init audiovideo buffer, container:' + 21422 o.container + 21423 ', codecs[level/parsed]=[' + 21424 t.codecs + 21425 '/' + 21426 o.codec + 21427 ']' 21428 ), 21429 this.hls.trigger(S.BUFFER_CODECS, e), 21430 Object.keys(e).forEach(function (t) { 21431 var a = e[t].initSegment; 21432 null != a && 21433 a.byteLength && 21434 n.hls.trigger(S.BUFFER_APPENDING, { 21435 type: t, 21436 data: a, 21437 frag: r, 21438 part: null, 21439 chunkMeta: i, 21440 parent: r.type, 21441 }); 21442 }), 21443 this.tickImmediate(); 21444 } 21445 }), 21446 (r.getMainFwdBufferInfo = function () { 21447 return this.getFwdBufferInfo(this.mediaBuffer ? this.mediaBuffer : this.media, Fe); 21448 }), 21449 (r.backtrack = function (t) { 21450 (this.couldBacktrack = !0), 21451 (this.backtrackFragment = t), 21452 this.resetTransmuxer(), 21453 this.flushBufferGap(t), 21454 this.fragmentTracker.removeFragment(t), 21455 (this.fragPrevious = null),
21456 (this.nextLoadPosition = t.start), 21457 (this.state = Ti); 21458 }), 21459 (r.checkFragmentChanged = function () { 21460 var t = this.media, 21461 e = null; 21462 if (t && t.readyState > 1 && !1 === t.seeking) { 21463 var r = t.currentTime; 21464 if ( 21465 (ri.isBuffered(t, r) 21466 ? (e = this.getAppendedFrag(r)) 21467 : ri.isBuffered(t, r + 0.1) && (e = this.getAppendedFrag(r + 0.1)), 21468 e) 21469 ) { 21470 this.backtrackFragment = null; 21471 var i = this.fragPlaying, 21472 n = e.level; 21473 (i && e.sn === i.sn && i.level === n) || 21474 ((this.fragPlaying = e), 21475 this.hls.trigger(S.FRAG_CHANGED, { frag: e }), 21476 (i && i.level === n) || this.hls.trigger(S.LEVEL_SWITCHED, { level: n })); 21477 } 21478 } 21479 }), 21480 s(e, [ 21481 { 21482 key: 'nextLevel', 21483 get: function () { 21484 var t = this.nextBufferedFrag; 21485 return t ? t.level : -1; 21486 }, 21487 }, 21488 { 21489 key: 'currentFrag', 21490 get: function () { 21491 var t = this.media; 21492 return t ? this.fragPlaying || this.getAppendedFrag(t.currentTime) : null; 21493 }, 21494 }, 21495 { 21496 key: 'currentProgramDateTime', 21497 get: function () { 21498 var t = this.media; 21499 if (t) { 21500 var e = t.currentTime, 21501 r = this.currentFrag; 21502 if (r && y(e) && y(r.programDateTime)) { 21503 var i = r.programDateTime + 1e3 * (e - r.start); 21504 return new Date(i); 21505 } 21506 } 21507 return null; 21508 }, 21509 }, 21510 { 21511 key: 'currentLevel', 21512 get: function () { 21513 var t = this.currentFrag; 21514 return t ? t.level : -1; 21515 }, 21516 }, 21517 { 21518 key: 'nextBufferedFrag', 21519 get: function () { 21520 var t = this.currentFrag; 21521 return t ? this.followingBufferedFrag(t) : null; 21522 }, 21523 }, 21524 { 21525 key: 'forceStartLoad', 21526 get: function () { 21527 return this._forceStartLoad; 21528 }, 21529 }, 21530 ]), 21531 e 21532 ); 21533 })(_i), 21534 fo = (function () { 21535 function t(e) { 21536 void 0 === e && (e = {}), 21537 (this.config = void 0), 21538 (this.userConfig = void 0), 21539 (this.coreComponents = void 0), 21540 (this.networkControllers = void 0), 21541 (this.started = !1), 21542 (this._emitter = new Vn()), 21543 (this._autoLevelCapping = -1), 21544 (this._maxHdcpLevel = null), 21545 (this.abrController = void 0), 21546 (this.bufferController = void 0), 21547 (this.capLevelController = void 0), 21548 (this.latencyController = void 0), 21549 (this.levelController = void 0), 21550 (this.streamController = void 0), 21551 (this.audioTrackController = void 0), 21552 (this.subtitleTrackController = void 0), 21553 (this.emeController = void 0), 21554 (this.cmcdController = void 0), 21555 (this._media = null), 21556 (this.url = null), 21557 (this.triggeringException = void 0), 21558 I(e.debug || !1, 'Hls instance'); 21559 var r = (this.config = (function (t, e) { 21560 if ( 21561 (e.liveSyncDurationCount || e.liveMaxLatencyDurationCount) && 21562 (e.liveSyncDuration || e.liveMaxLatencyDuration) 21563 ) 21564 throw new Error( 21565 "Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration" 21566 ); 21567 if ( 21568 void 0 !== e.liveMaxLatencyDurationCount && 21569 (void 0 === e.liveSyncDurationCount || 21570 e.liveMaxLatencyDurationCount <= e.liveSyncDurationCount) 21571 ) 21572 throw new Error( 21573 'Illegal hls.js config: "liveMaxLatencyDurationCount" must be greater than "liveSyncDurationCount"' 21574 ); 21575 if ( 21576 void 0 !== e.liveMaxLatencyDuration && 21577 (void 0 === e.liveSyncDuration || e.liveMaxLatencyDuration <= e.liveSyncDuration) 21578 ) 21579 throw new Error( 21580 'Illegal hls.js config: "liveMaxLatencyDuration" must be greater than "liveSyncDuration"' 21581 ); 21582 var r = io(t), 21583 n = ['TimeOut', 'MaxRetry', 'RetryDelay', 'MaxRetryTimeout']; 21584 return ( 21585 ['manifest', 'level', 'frag'].forEach(function (t) { 21586 var i = ('level' === t ? 'playlist' : t) + 'LoadPolicy', 21587 a = void 0 === e[i], 21588 s = [];
21589 n.forEach(function (n) { 21590 var o = t + 'Loading' + n, 21591 l = e[o]; 21592 if (void 0 !== l && a) { 21593 s.push(o); 21594 var u = r[i].default; 21595 switch (((e[i] = { default: u }), n)) { 21596 case 'TimeOut': 21597 (u.maxLoadTimeMs = l), (u.maxTimeToFirstByteMs = l); 21598 break; 21599 case 'MaxRetry': 21600 (u.errorRetry.maxNumRetry = l), (u.timeoutRetry.maxNumRetry = l); 21601 break; 21602 case 'RetryDelay': 21603 (u.errorRetry.retryDelayMs = l), (u.timeoutRetry.retryDelayMs = l); 21604 break; 21605 case 'MaxRetryTimeout': 21606 (u.errorRetry.maxRetryDelayMs = l), (u.timeoutRetry.maxRetryDelayMs = l); 21607 } 21608 } 21609 }), 21610 s.length && 21611 w.warn( 21612 'hls.js config: "' + 21613 s.join('", "') + 21614 '" setting(s) are deprecated, use "' + 21615 i + 21616 '": ' + 21617 JSON.stringify(e[i]) 21618 ); 21619 }), 21620 i(i({}, r), e) 21621 ); 21622 })(t.DefaultConfig, e)); 21623 (this.userConfig = e), r.progressive && no(r); 21624 var n = r.abrController, 21625 a = r.bufferController, 21626 s = r.capLevelController, 21627 o = r.errorController, 21628 l = r.fpsController, 21629 u = new o(this), 21630 h = (this.abrController = new n(this)), 21631 d = (this.bufferController = new a(this)), 21632 c = (this.capLevelController = new s(this)), 21633 f = new l(this), 21634 g = new Be(this), 21635 v = new $e(this), 21636 m = r.contentSteeringController, 21637 p = m ? new m(this) : null, 21638 y = (this.levelController = new ao(this, p)), 21639 E = new $r(this), 21640 T = new oo(this.config), 21641 L = (this.streamController = new co(this, E, T)); 21642 c.setStreamController(L), f.setStreamController(L); 21643 var A = [g, y, L]; 21644 p && A.splice(1, 0, p), (this.networkControllers = A); 21645 var R = [h, d, c, f, v, E]; 21646 this.audioTrackController = this.createController(r.audioTrackController, A); 21647 var b = r.audioStreamController; 21648 b && A.push(new b(this, E, T)), 21649 (this.subtitleTrackController = this.createController(r.subtitleTrackController, A)); 21650 var k = r.subtitleStreamController; 21651 k && A.push(new k(this, E, T)), 21652 this.createController(r.timelineController, R), 21653 (T.emeController = this.emeController = this.createController(r.emeController, R)), 21654 (this.cmcdController = this.createController(r.cmcdController, R)), 21655 (this.latencyController = this.createController(Ze, R)), 21656 (this.coreComponents = R), 21657 A.push(u); 21658 var D = u.onErrorOut; 21659 'function' == typeof D && this.on(S.ERROR, D, u); 21660 } 21661 (t.isMSESupported = function () { 21662 return uo(); 21663 }), 21664 (t.isSupported = function () { 21665 return (function () { 21666 if (!uo()) return !1; 21667 var t = se(); 21668 return ( 21669 'function' == typeof (null == t ? void 0 : t.isTypeSupported) && 21670 (['avc1.42E01E,mp4a.40.2', 'av01.0.01M.08', 'vp09.00.50.08'].some(function (e) { 21671 return t.isTypeSupported(he(e, 'video')); 21672 }) || 21673 ['mp4a.40.2', 'fLaC'].some(function (e) { 21674 return t.isTypeSupported(he(e, 'audio')); 21675 })) 21676 ); 21677 })(); 21678 }), 21679 (t.getMediaSource = function () { 21680 return se(); 21681 }); 21682 var e = t.prototype; 21683 return ( 21684 (e.createController = function (t, e) { 21685 if (t) { 21686 var r = new t(this); 21687 return e && e.push(r), r; 21688 } 21689 return null; 21690 }), 21691 (e.on = function (t, e, r) { 21692 void 0 === r && (r = this), this._emitter.on(t, e, r); 21693 }), 21694 (e.once = function (t, e, r) { 21695 void 0 === r && (r = this), this._emitter.once(t, e, r); 21696 }), 21697 (e.removeAllListeners = function (t) { 21698 this._emitter.removeAllListeners(t); 21699 }), 21700 (e.off = function (t, e, r, i) { 21701 void 0 === r && (r = this), this._emitter.off(t, e, r, i); 21702 }), 21703 (e.listeners = function (t) { 21704 return this._emitter.listeners(t); 21705 }), 21706 (e.emit = function (t, e, r) { 21707 return this._emitter.emit(t, e, r); 21708 }), 21709 (e.trigger = function (t, e) {
21710 if (this.config.debug) return this.emit(t, t, e); 21711 try { 21712 return this.emit(t, t, e); 21713 } catch (e) { 21714 if ( 21715 (w.error( 21716 'An internal error happened while handling event ' + 21717 t + 21718 '. Error message: "' + 21719 e.message + 21720 '". Here is a stacktrace:', 21721 e 21722 ), 21723 !this.triggeringException) 21724 ) { 21725 this.triggeringException = !0; 21726 var r = t === S.ERROR; 21727 this.trigger(S.ERROR, { 21728 type: L.OTHER_ERROR, 21729 details: A.INTERNAL_EXCEPTION, 21730 fatal: r, 21731 event: t, 21732 error: e, 21733 }), 21734 (this.triggeringException = !1); 21735 } 21736 } 21737 return !1; 21738 }), 21739 (e.listenerCount = function (t) { 21740 return this._emitter.listenerCount(t); 21741 }), 21742 (e.destroy = function () { 21743 w.log('destroy'), 21744 this.trigger(S.DESTROYING, void 0), 21745 this.detachMedia(), 21746 this.removeAllListeners(), 21747 (this._autoLevelCapping = -1), 21748 (this.url = null), 21749 this.networkControllers.forEach(function (t) { 21750 return t.destroy(); 21751 }), 21752 (this.networkControllers.length = 0), 21753 this.coreComponents.forEach(function (t) { 21754 return t.destroy(); 21755 }), 21756 (this.coreComponents.length = 0); 21757 var t = this.config; 21758 (t.xhrSetup = t.fetchSetup = void 0), (this.userConfig = null); 21759 }), 21760 (e.attachMedia = function (t) { 21761 w.log('attachMedia'), 21762 (this._media = t), 21763 this.trigger(S.MEDIA_ATTACHING, { media: t }); 21764 }), 21765 (e.detachMedia = function () { 21766 w.log('detachMedia'), this.trigger(S.MEDIA_DETACHING, void 0), (this._media = null); 21767 }), 21768 (e.loadSource = function (t) { 21769 this.stopLoad(); 21770 var e = this.media, 21771 r = this.url, 21772 i = (this.url = p.buildAbsoluteURL(self.location.href, t, { alwaysNormalize: !0 })); 21773 (this._autoLevelCapping = -1), 21774 (this._maxHdcpLevel = null), 21775 w.log('loadSource:' + i), 21776 e && 21777 r && 21778 (r !== i || this.bufferController.hasSourceTypes()) && 21779 (this.detachMedia(), this.attachMedia(e)), 21780 this.trigger(S.MANIFEST_LOADING, { url: t }); 21781 }), 21782 (e.startLoad = function (t) { 21783 void 0 === t && (t = -1), 21784 w.log('startLoad(' + t + ')'), 21785 (this.started = !0), 21786 this.resumeBuffering(); 21787 for ( 21788 var e = 0; 21789 e < this.networkControllers.length && 21790 (this.networkControllers[e].startLoad(t), this.started && this.networkControllers); 21791 e++ 21792 ); 21793 }), 21794 (e.stopLoad = function () { 21795 w.log('stopLoad'), (this.started = !1); 21796 for ( 21797 var t = 0; 21798 t < this.networkControllers.length && 21799 (this.networkControllers[t].stopLoad(), !this.started && this.networkControllers); 21800 t++ 21801 ); 21802 }), 21803 (e.resumeBuffering = function () { 21804 w.log('resume buffering'), 21805 this.networkControllers.forEach(function (t) { 21806 t.resumeBuffering && t.resumeBuffering(); 21807 }); 21808 }), 21809 (e.pauseBuffering = function () { 21810 w.log('pause buffering'), 21811 this.networkControllers.forEach(function (t) {
21812 t.pauseBuffering && t.pauseBuffering(); 21813 }); 21814 }), 21815 (e.swapAudioCodec = function () { 21816 w.log('swapAudioCodec'), this.streamController.swapAudioCodec(); 21817 }), 21818 (e.recoverMediaError = function () { 21819 w.log('recoverMediaError'); 21820 var t = this._media; 21821 this.detachMedia(), t && this.attachMedia(t); 21822 }), 21823 (e.removeLevel = function (t) { 21824 this.levelController.removeLevel(t); 21825 }), 21826 (e.setAudioOption = function (t) { 21827 var e; 21828 return null == (e = this.audioTrackController) ? void 0 : e.setAudioOption(t); 21829 }), 21830 (e.setSubtitleOption = function (t) { 21831 var e; 21832 return null == (e = this.subtitleTrackController) || e.setSubtitleOption(t), null; 21833 }), 21834 s( 21835 t, 21836 [ 21837 { 21838 key: 'levels', 21839 get: function () { 21840 var t = this.levelController.levels; 21841 return t || []; 21842 }, 21843 }, 21844 { 21845 key: 'currentLevel', 21846 get: function () { 21847 return this.streamController.currentLevel; 21848 }, 21849 set: function (t) { 21850 w.log('set currentLevel:' + t), 21851 (this.levelController.manualLevel = t), 21852 this.streamController.immediateLevelSwitch(); 21853 }, 21854 }, 21855 { 21856 key: 'nextLevel', 21857 get: function () { 21858 return this.streamController.nextLevel; 21859 }, 21860 set: function (t) { 21861 w.log('set nextLevel:' + t), 21862 (this.levelController.manualLevel = t), 21863 this.streamController.nextLevelSwitch(); 21864 }, 21865 }, 21866 { 21867 key: 'loadLevel', 21868 get: function () { 21869 return this.levelController.level; 21870 }, 21871 set: function (t) { 21872 w.log('set loadLevel:' + t), (this.levelController.manualLevel = t); 21873 }, 21874 }, 21875 { 21876 key: 'nextLoadLevel', 21877 get: function () { 21878 return this.levelController.nextLoadLevel; 21879 }, 21880 set: function (t) { 21881 this.levelController.nextLoadLevel = t; 21882 }, 21883 }, 21884 { 21885 key: 'firstLevel', 21886 get: function () { 21887 return Math.max(this.levelController.firstLevel, this.minAutoLevel); 21888 }, 21889 set: function (t) { 21890 w.log('set firstLevel:' + t), (this.levelController.firstLevel = t); 21891 }, 21892 }, 21893 { 21894 key: 'startLevel', 21895 get: function () { 21896 var t = this.levelController.startLevel; 21897 return -1 === t && this.abrController.forcedAutoLevel > -1 21898 ? this.abrController.forcedAutoLevel 21899 : t; 21900 }, 21901 set: function (t) { 21902 w.log('set startLevel:' + t), 21903 -1 !== t && (t = Math.max(t, this.minAutoLevel)), 21904 (this.levelController.startLevel = t); 21905 }, 21906 }, 21907 { 21908 key: 'capLevelToPlayerSize', 21909 get: function () { 21910 return this.config.capLevelToPlayerSize; 21911 }, 21912 set: function (t) { 21913 var e = !!t; 21914 e !== this.config.capLevelToPlayerSize && 21915 (e 21916 ? this.capLevelController.startCapping() 21917 : (this.capLevelController.stopCapping(), 21918 (this.autoLevelCapping = -1), 21919 this.streamController.nextLevelSwitch()), 21920 (this.config.capLevelToPlayerSize = e)); 21921 }, 21922 }, 21923 { 21924 key: 'autoLevelCapping', 21925 get: function () { 21926 return this._autoLevelCapping; 21927 }, 21928 set: function (t) { 21929 this._autoLevelCapping !== t && 21930 (w.log('set autoLevelCapping:' + t), 21931 (this._autoLevelCapping = t), 21932 this.levelController.checkMaxAutoUpdated()); 21933 }, 21934 }, 21935 { 21936 key: 'bandwidthEstimate', 21937 get: function () { 21938 var t = this.abrController.bwEstimator; 21939 return t ? t.getEstimate() : NaN; 21940 }, 21941 set: function (t) { 21942 this.abrController.resetEstimator(t); 21943 }, 21944 }, 21945 { 21946 key: 'ttfbEstimate', 21947 get: function () { 21948 var t = this.abrController.bwEstimator;
21949 return t ? t.getEstimateTTFB() : NaN; 21950 }, 21951 }, 21952 { 21953 key: 'maxHdcpLevel', 21954 get: function () { 21955 return this._maxHdcpLevel; 21956 }, 21957 set: function (t) { 21958 (function (t) { 21959 return tr.indexOf(t) > -1; 21960 })(t) && 21961 this._maxHdcpLevel !== t && 21962 ((this._maxHdcpLevel = t), this.levelController.checkMaxAutoUpdated()); 21963 }, 21964 }, 21965 { 21966 key: 'autoLevelEnabled', 21967 get: function () { 21968 return -1 === this.levelController.manualLevel; 21969 }, 21970 }, 21971 { 21972 key: 'manualLevel', 21973 get: function () { 21974 return this.levelController.manualLevel; 21975 }, 21976 }, 21977 { 21978 key: 'minAutoLevel', 21979 get: function () { 21980 var t = this.levels, 21981 e = this.config.minAutoBitrate; 21982 if (!t) return 0; 21983 for (var r = t.length, i = 0; i < r; i++) if (t[i].maxBitrate >= e) return i; 21984 return 0; 21985 }, 21986 }, 21987 { 21988 key: 'maxAutoLevel', 21989 get: function () { 21990 var t, 21991 e = this.levels, 21992 r = this.autoLevelCapping, 21993 i = this.maxHdcpLevel; 21994 if (((t = -1 === r && null != e && e.length ? e.length - 1 : r), i)) 21995 for (var n = t; n--; ) { 21996 var a = e[n].attrs['HDCP-LEVEL']; 21997 if (a && a <= i) return n; 21998 } 21999 return t; 22000 }, 22001 }, 22002 { 22003 key: 'firstAutoLevel', 22004 get: function () { 22005 return this.abrController.firstAutoLevel; 22006 }, 22007 }, 22008 { 22009 key: 'nextAutoLevel', 22010 get: function () { 22011 return this.abrController.nextAutoLevel; 22012 }, 22013 set: function (t) { 22014 this.abrController.nextAutoLevel = t; 22015 }, 22016 }, 22017 { 22018 key: 'playingDate', 22019 get: function () { 22020 return this.streamController.currentProgramDateTime; 22021 }, 22022 }, 22023 { 22024 key: 'mainForwardBufferInfo', 22025 get: function () { 22026 return this.streamController.getMainFwdBufferInfo(); 22027 }, 22028 }, 22029 { 22030 key: 'allAudioTracks', 22031 get: function () { 22032 var t = this.audioTrackController; 22033 return t ? t.allAudioTracks : []; 22034 }, 22035 }, 22036 { 22037 key: 'audioTracks', 22038 get: function () { 22039 var t = this.audioTrackController; 22040 return t ? t.audioTracks : []; 22041 }, 22042 }, 22043 { 22044 key: 'audioTrack', 22045 get: function () { 22046 var t = this.audioTrackController; 22047 return t ? t.audioTrack : -1; 22048 }, 22049 set: function (t) { 22050 var e = this.audioTrackController; 22051 e && (e.audioTrack = t); 22052 }, 22053 }, 22054 { 22055 key: 'allSubtitleTracks', 22056 get: function () { 22057 var t = this.subtitleTrackController; 22058 return t ? t.allSubtitleTracks : []; 22059 }, 22060 }, 22061 { 22062 key: 'subtitleTracks', 22063 get: function () { 22064 var t = this.subtitleTrackController; 22065 return t ? t.subtitleTracks : []; 22066 }, 22067 }, 22068 { 22069 key: 'subtitleTrack', 22070 get: function () { 22071 var t = this.subtitleTrackController; 22072 return t ? t.subtitleTrack : -1; 22073 }, 22074 set: function (t) { 22075 var e = this.subtitleTrackController; 22076 e && (e.subtitleTrack = t); 22077 }, 22078 }, 22079 { 22080 key: 'media', 22081 get: function () { 22082 return this._media; 22083 }, 22084 }, 22085 { 22086 key: 'subtitleDisplay', 22087 get: function () { 22088 var t = this.subtitleTrackController; 22089 return !!t && t.subtitleDisplay; 22090 }, 22091 set: function (t) { 22092 var e = this.subtitleTrackController; 22093 e && (e.subtitleDisplay = t); 22094 }, 22095 }, 22096 { 22097 key: 'lowLatencyMode', 22098 get: function () { 22099 return this.config.lowLatencyMode; 22100 }, 22101 set: function (t) { 22102 this.config.lowLatencyMode = t; 22103 }, 22104 }, 22105 { 22106 key: 'liveSyncPosition', 22107 get: function () { 22108 return this.latencyController.liveSyncPosition; 22109 }, 22110 }, 22111 { 22112 key: 'latency', 22113 get: function () { 22114 return this.latencyController.latency; 22115 }, 22116 }, 22117 { 22118 key: 'maxLatency', 22119 get: function () { 22120 return this.latencyController.maxLatency; 22121 }, 22122 }, 22123 { 22124 key: 'targetLatency', 22125 get: function () { 22126 return this.latencyController.targetLatency; 22127 }, 22128 }, 22129 { 22130 key: 'drift', 22131 get: function () { 22132 return this.latencyController.drift; 22133 }, 22134 }, 22135 { 22136 key: 'forceStartLoad', 22137 get: function () { 22138 return this.streamController.forceStartLoad; 22139 }, 22140 }, 22141 ], 22142 [ 22143 { 22144 key: 'version', 22145 get: function () { 22146 return '1.5.18'; 22147 }, 22148 }, 22149 { 22150 key: 'Events', 22151 get: function () { 22152 return S; 22153 }, 22154 }, 22155 { 22156 key: 'ErrorTypes', 22157 get: function () { 22158 return L; 22159 }, 22160 }, 22161 { 22162 key: 'ErrorDetails', 22163 get: function () { 22164 return A; 22165 }, 22166 }, 22167 { 22168 key: 'DefaultConfig', 22169 get: function () { 22170 return t.defaultConfig ? t.defaultConfig : ro; 22171 }, 22172 set: function (e) { 22173 t.defaultConfig = e; 22174 }, 22175 }, 22176 ] 22177 ), 22178 t 22179 ); 22180 })(); 22181 return (fo.defaultConfig = void 0), fo; 22182 }), 22183 'object' == typeof exports && 'undefined' != typeof module 22184 ? (module.exports = i()) 22185 : 'function' == typeof define && define.amd 22186 ? define(i) 22187 : ((r = 'undefined' != typeof globalThis ? globalThis : r || self).Hls = i()); 22188})(!1); 22189//# 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.