flv.js 165 KB

12345678910111213141516171819202122232425262728293031323334
  1. !(function (e, t) { typeof exports === 'object' && typeof module === 'object' ? module.exports = t() : typeof define === 'function' && define.amd ? define([], t) : typeof exports === 'object' ? exports.flvjs = t() : e.flvjs = t() }(self, function () {
  2. return (function () {
  3. const e = {
  4. 264: function (e, t, i) {
  5. /*!
  6. * @overview es6-promise - a tiny implementation of Promises/A+.
  7. * @copyright Copyright (c) 2014 Yehuda Katz, Tom Dale, Stefan Penner and contributors (Conversion to ES6 API by Jake Archibald)
  8. * @license Licensed under MIT license
  9. * See https://raw.githubusercontent.com/stefanpenner/es6-promise/master/LICENSE
  10. * @version v4.2.8+1e68dce6
  11. */
  12. e.exports = (function () { 'use strict'; function e (e) { const t = typeof e; return e !== null && (t === 'object' || t === 'function') } function t (e) { return typeof e === 'function' } const n = Array.isArray ? Array.isArray : function (e) { return Object.prototype.toString.call(e) === '[object Array]' }; let r = 0; let s = void 0; let o = void 0; let a = function (e, t) { b[r] = e, b[r + 1] = t, (r += 2) === 2 && (o ? o(E) : A()) }; function h (e) { o = e } function u (e) { a = e } const l = typeof window !== 'undefined' ? window : void 0; const d = l || {}; const c = d.MutationObserver || d.WebKitMutationObserver; const f = typeof self==='undefined' && typeof process!=='undefined' && {}.toString.call(process) === '[object process]'; const _ = typeof Uint8ClampedArray !== 'undefined' && typeof importScripts !== 'undefined' && typeof MessageChannel !== 'undefined'; function p () { return function () { return process.nextTick(E) } } function m () { return void 0 !== s ? function () { s(E) } : y() } function g () { let e = 0; const t = new c(E); const i = document.createTextNode(''); return t.observe(i, { characterData: !0 }), function () { i.data = e = ++e % 2 } } function v () { const e = new MessageChannel(); return e.port1.onmessage = E, function () { return e.port2.postMessage(0) } } function y () { const e = setTimeout; return function () { return e(E, 1) } } var b = new Array(1e3); function E () { for (let e = 0; e < r; e += 2)(0, b[e])(b[e + 1]), b[e] = void 0, b[e + 1] = void 0; r = 0 } function S () { try { const e = Function('return this')().require('vertx'); return s = e.runOnLoop || e.runOnContext, m() } catch (e) { return y() } } var A = void 0; function L (e, t) { const i = this; const n = new this.constructor(O); void 0 === n[w] && W(n); const r = i._state; if (r) { const s = arguments[r - 1]; a(function () { return V(r, n, s, i._result) }) } else G(i, n, e, t); return n } function R (e) { const t = this; if (e && typeof e === 'object' && e.constructor === t) return e; const i = new t(O); return U(i, e), i }A = f ? p() : c ? g() : _ ? v() : void 0 === l ? S() : y(); var w = Math.random().toString(36).substring(2); function O () {} const T = void 0; const C = 1; const k = 2; function D () { return new TypeError('You cannot resolve a promise with itself') } function I () { return new TypeError('A promises callback cannot return that same promise.') } function M (e, t, i, n) { try { e.call(t, i, n) } catch (e) { return e } } function B (e, t, i) { a(function (e) { let n = !1; const r = M(i, t, function (i) { n || (n = !0, t !== i ? U(e, i) : Z(e, i)) }, function (t) { n || (n = !0, F(e, t)) }, 'Settle: ' + (e._label || ' unknown promise')); !n && r && (n = !0, F(e, r)) }, e) } function x (e, t) { t._state === C ? Z(e, t._result) : t._state === k ? F(e, t._result) : G(t, void 0, function (t) { return U(e, t) }, function (t) { return F(e, t) }) } function P (e, i, n) { i.constructor === e.constructor && n === L && i.constructor.resolve === R ? x(e, i) : void 0 === n ? Z(e, i) : t(n) ? B(e, i, n) : Z(e, i) } function U (t, i) { if (t === i)F(t, D()); else if (e(i)) { let n = void 0; try { n = i.then } catch (e) { return void F(t, e) }P(t, i, n) } else Z(t, i) } function N (e) { e._onerror && e._onerror(e._result), j(e) } function Z (e, t) { e._state === T && (e._result = t, e._state = C, e._subscribers.length !== 0 && a(j, e)) } function F (e, t) { e._state === T && (e._state = k, e._result = t, a(N, e)) } function G (e, t, i, n) { const r = e._subscribers; const s = r.length; e._onerror = null, r[s] = t, r[s + C] = i, r[s + k] = n, s === 0 && e._state && a(j, e) } function j (e) { const t = e._subscribers; const i = e._state; if (t.length !== 0) { for (let n = void 0, r = void 0, s = e._result, o = 0; o < t.length; o += 3)n = t[o], r = t[o + i], n ? V(i, n, r, s) : r(s); e._subscribers.length = 0 } } function V (e, i, n, r) { const s = t(n); let o = void 0; let a = void 0; let h = !0; if (s) { try { o = n(r) } catch (e) { h = !1, a = e } if (i === o) return void F(i, I()) } else o = r; i._state !== T || (s && h ? U(i, o) : !1 === h ? F(i, a) : e === C ? Z(i, o) : e === k && F(i, o)) } function z (e, t) { try { t(function (t) { U(e, t) }, function (t) { F(e, t) }) } catch (t) { F(e, t) } } let K = 0; function H () { return K++ } function W (e) { e[w] = K++, e._state = void 0, e._result = void 0, e._subscribers = [] } function q () { return new Error('Array Methods must be provided an Array') } const Y = (function () { function e (e, t) { this._instanceConstructor = e, this.promise = new e(O), this.promise[w] || W(this.promise), n(t) ? (this.length = t.length, this._remaining = t.length, this._result = new Array(this.length), this.length === 0 ? Z(this.promise, this._result) : (this.length = this.length || 0, this._enumerate(t), this._remaining === 0 && Z(this.promise, this._result))) : F(this.promise, q()) } return e.prototype._enumerate = function (e) { for (let t = 0; this._state === T && t < e.length; t++) this._eachEntry(e[t], t) }, e.prototype._eachEntry = function (e, t) { const i = this._instanceConstructor; const n = i.resolve; if (n === R) { let r = void 0; let s = void 0; let o = !1; try { r = e.then } catch (e) { o = !0, s = e } if (r === L && e._state !== T) this._settledAt(e._state, t, e._result); else if (typeof r!=='function') this._remaining--, this._result[t] = e; else if (i === te) { const a = new i(O); o ? F(a, s) : P(a, e, r), this._willSettleAt(a, t) } else this._willSettleAt(new i(function (t) { return t(e) }), t) } else this._willSettleAt(n(e), t) }, e.prototype._settledAt = function (e, t, i) { const n = this.promise; n._state === T && (this._remaining--, e === k ? F(n, i) : this._result[t] = i), this._remaining === 0 && Z(n, this._result) }, e.prototype._willSettleAt = function (e, t) { const i = this; G(e, void 0, function (e) { return i._settledAt(C, t, e) }, function (e) { return i._settledAt(k, t, e) }) }, e }()); function X (e) { return new Y(this, e).promise } function J (e) { const t = this; return n(e) ? new t(function (i, n) { for (let r = e.length, s = 0; s < r; s++)t.resolve(e[s]).then(i, n) }) : new t(function (e, t) { return t(new TypeError('You must pass an array to race.')) }) } function Q (e) { const t = new this(O); return F(t, e), t } function $ () { throw new TypeError('You must pass a resolver function as the first argument to the promise constructor') } function ee () { throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.") } var te = (function () { function e (t) { this[w] = H(), this._result = this._state = void 0, this._subscribers = [], O !== t && (typeof t !== 'function' && $(), this instanceof e ? z(this, t) : ee()) } return e.prototype.catch = function (e) { return this.then(null, e) }, e.prototype.finally = function (e) { const i = this; const n = i.constructor; return t(e) ? i.then(function (t) { return n.resolve(e()).then(function () { return t }) }, function (t) { return n.resolve(e()).then(function () { throw t }) }) : i.then(e, e) }, e }()); function ie () { let e = void 0; if (void 0 !== i.g)e = i.g; else if (typeof self !== 'undefined')e = self; else try { e = Function('return this')() } catch (e) { throw new Error('polyfill failed because global object is unavailable in this environment') } const t = e.Promise; if (t) { let n = null; try { n = Object.prototype.toString.call(t.resolve()) } catch (e) {} if (n === '[object Promise]' && !t.cast) return }e.Promise = te } return te.prototype.then = L, te.all = X, te.race = J, te.resolve = R, te.reject = Q, te._setScheduler = h, te._setAsap = u, te._asap = a, te.polyfill = ie, te.Promise = te, te }())
  13. },
  14. 716: function (e) { 'use strict'; let t; const i = typeof Reflect === 'object' ? Reflect : null; const n = i && typeof i.apply === 'function' ? i.apply : function (e, t, i) { return Function.prototype.apply.call(e, t, i) }; t = i && typeof i.ownKeys === 'function' ? i.ownKeys : Object.getOwnPropertySymbols ? function (e) { return Object.getOwnPropertyNames(e).concat(Object.getOwnPropertySymbols(e)) } : function (e) { return Object.getOwnPropertyNames(e) }; const r = Number.isNaN || function (e) { return e != e }; function s () { s.init.call(this) }e.exports = s, e.exports.once = function (e, t) { return new Promise(function (i, n) { function r (i) { e.removeListener(t, s), n(i) } function s () { typeof e.removeListener === 'function' && e.removeListener('error', r), i([].slice.call(arguments)) }p(e, t, s, { once: !0 }), t !== 'error' && (function (e, t, i) { typeof e.on === 'function' && p(e, 'error', t, i) }(e, r, { once: !0 })) }) }, s.EventEmitter = s, s.prototype._events = void 0, s.prototype._eventsCount = 0, s.prototype._maxListeners = void 0; let o = 10; function a (e) { if (typeof e !== 'function') throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof e) } function h (e) { return void 0 === e._maxListeners ? s.defaultMaxListeners : e._maxListeners } function u (e, t, i, n) { let r, s, o, u; if (a(i), void 0 === (s = e._events) ? (s = e._events = Object.create(null), e._eventsCount = 0) : (void 0 !== s.newListener && (e.emit('newListener', t, i.listener ? i.listener : i), s = e._events), o = s[t]), void 0 === o)o = s[t] = i, ++e._eventsCount; else if (typeof o === 'function' ? o = s[t] = n ? [i, o] : [o, i] : n ? o.unshift(i) : o.push(i), (r = h(e)) > 0 && o.length > r && !o.warned) { o.warned = !0; const l = new Error('Possible EventEmitter memory leak detected. ' + o.length + ' ' + String(t) + ' listeners added. Use emitter.setMaxListeners() to increase limit'); l.name = 'MaxListenersExceededWarning', l.emitter = e, l.type = t, l.count = o.length, u = l, console && console.warn && console.warn(u) } return e } function l () { if (!this.fired) return this.target.removeListener(this.type, this.wrapFn), this.fired = !0, arguments.length === 0 ? this.listener.call(this.target) : this.listener.apply(this.target, arguments) } function d (e, t, i) { const n = { fired: !1, wrapFn: void 0, target: e, type: t, listener: i }; const r = l.bind(n); return r.listener = i, n.wrapFn = r, r } function c (e, t, i) { const n = e._events; if (void 0 === n) return []; const r = n[t]; return void 0 === r ? [] : typeof r === 'function' ? i ? [r.listener || r] : [r] : i ? (function (e) { for (var t = new Array(e.length), i = 0; i < t.length; ++i)t[i] = e[i].listener || e[i]; return t }(r)) : _(r, r.length) } function f (e) { const t = this._events; if (void 0 !== t) { const i = t[e]; if (typeof i === 'function') return 1; if (void 0 !== i) return i.length } return 0 } function _ (e, t) { for (var i = new Array(t), n = 0; n < t; ++n)i[n] = e[n]; return i } function p (e, t, i, n) { if (typeof e.on === 'function')n.once ? e.once(t, i) : e.on(t, i); else { if (typeof e.addEventListener !== 'function') throw new TypeError('The "emitter" argument must be of type EventEmitter. Received type ' + typeof e); e.addEventListener(t, function r (s) { n.once && e.removeEventListener(t, r), i(s) }) } }Object.defineProperty(s, 'defaultMaxListeners', { enumerable: !0, get: function () { return o }, set: function (e) { if (typeof e !== 'number' || e < 0 || r(e)) throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + e + '.'); o = e } }), s.init = function () { void 0 !== this._events && this._events !== Object.getPrototypeOf(this)._events || (this._events = Object.create(null), this._eventsCount = 0), this._maxListeners = this._maxListeners || void 0 }, s.prototype.setMaxListeners = function (e) { if (typeof e !== 'number' || e < 0 || r(e)) throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + e + '.'); return this._maxListeners = e, this }, s.prototype.getMaxListeners = function () { return h(this) }, s.prototype.emit = function (e) { for (var t = [], i = 1; i < arguments.length; i++)t.push(arguments[i]); let r = e === 'error'; const s = this._events; if (void 0 !== s)r = r && void 0 === s.error; else if (!r) return !1; if (r) { let o; if (t.length > 0 && (o = t[0]), o instanceof Error) throw o; const a = new Error('Unhandled error.' + (o ? ' (' + o.message + ')' : '')); throw a.context = o, a } const h = s[e]; if (void 0 === h) return !1; if (typeof h === 'function')n(h, this, t); else { const u = h.length; const l = _(h, u); for (i = 0; i < u; ++i)n(l[i], this, t) } return !0 }, s.prototype.addListener = function (e, t) { return u(this, e, t, !1) }, s.prototype.on = s.prototype.addListener, s.prototype.prependListener = function (e, t) { return u(this, e, t, !0) }, s.prototype.once = function (e, t) { return a(t), this.on(e, d(this, e, t)), this }, s.prototype.prependOnceListener = function (e, t) { return a(t), this.prependListener(e, d(this, e, t)), this }, s.prototype.removeListener = function (e, t) { let i, n, r, s, o; if (a(t), void 0 === (n = this._events)) return this; if (void 0 === (i = n[e])) return this; if (i === t || i.listener === t)--this._eventsCount == 0 ? this._events = Object.create(null) : (delete n[e], n.removeListener && this.emit('removeListener', e, i.listener || t)); else if (typeof i !== 'function') { for (r = -1, s = i.length - 1; s >= 0; s--) if (i[s] === t || i[s].listener === t) { o = i[s].listener, r = s; break } if (r < 0) return this; r === 0 ? i.shift() : (function (e, t) { for (;t + 1 < e.length; t++)e[t] = e[t + 1]; e.pop() }(i, r)), i.length === 1 && (n[e] = i[0]), void 0 !== n.removeListener && this.emit('removeListener', e, o || t) } return this }, s.prototype.off = s.prototype.removeListener, s.prototype.removeAllListeners = function (e) { let t, i, n; if (void 0 === (i = this._events)) return this; if (void 0 === i.removeListener) return arguments.length === 0 ? (this._events = Object.create(null), this._eventsCount = 0) : void 0 !== i[e] && (--this._eventsCount == 0 ? this._events = Object.create(null) : delete i[e]), this; if (arguments.length === 0) { let r; const s = Object.keys(i); for (n = 0; n < s.length; ++n)(r = s[n]) !== 'removeListener' && this.removeAllListeners(r); return this.removeAllListeners('removeListener'), this._events = Object.create(null), this._eventsCount = 0, this } if (typeof (t = i[e]) === 'function') this.removeListener(e, t); else if (void 0 !== t) for (n = t.length - 1; n >= 0; n--) this.removeListener(e, t[n]); return this }, s.prototype.listeners = function (e) { return c(this, e, !0) }, s.prototype.rawListeners = function (e) { return c(this, e, !1) }, s.listenerCount = function (e, t) { return typeof e.listenerCount === 'function' ? e.listenerCount(t) : f.call(e, t) }, s.prototype.listenerCount = f, s.prototype.eventNames = function () { return this._eventsCount > 0 ? t(this._events) : [] } },
  15. 397: function (e, t, i) { function n (e) { const t = {}; function i (n) { if (t[n]) return t[n].exports; const r = t[n] = { i: n, l: !1, exports: {} }; return e[n].call(r.exports, r, r.exports, i), r.l = !0, r.exports }i.m = e, i.c = t, i.i = function (e) { return e }, i.d = function (e, t, n) { i.o(e, t) || Object.defineProperty(e, t, { configurable: !1, enumerable: !0, get: n }) }, i.r = function (e) { Object.defineProperty(e, '__esModule', { value: !0 }) }, i.n = function (e) { const t = e && e.__esModule ? function () { return e.default } : function () { return e }; return i.d(t, 'a', t), t }, i.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t) }, i.p = '/', i.oe = function (e) { throw console.error(e), e }; const n = i(i.s = ENTRY_MODULE); return n.default || n } const r = '[\\.|\\-|\\+|\\w|/|@]+'; const s = '\\(\\s*(/\\*.*?\\*/)?\\s*.*?([\\.|\\-|\\+|\\w|/|@]+).*?\\)'; function o (e) { return (e + '').replace(/[.?*+^$[\]\\(){}|-]/g, '\\$&') } function a (e, t, n) { const a = {}; a[n] = []; const h = t.toString(); const u = h.match(/^function\s?\w*\(\w+,\s*\w+,\s*(\w+)\)/); if (!u) return a; for (var l, d = u[1], c = new RegExp('(\\\\n|\\W)' + o(d) + s, 'g'); l = c.exec(h);)l[3] !== 'dll-reference' && a[n].push(l[3]); for (c = new RegExp('\\(' + o(d) + '\\("(dll-reference\\s(' + r + '))"\\)\\)' + s, 'g'); l = c.exec(h);)e[l[2]] || (a[n].push(l[1]), e[l[2]] = i(l[1]).m), a[l[2]] = a[l[2]] || [], a[l[2]].push(l[4]); for (var f, _ = Object.keys(a), p = 0; p < _.length; p++) for (let m = 0; m < a[_[p]].length; m++)f = a[_[p]][m], isNaN(1 * f) || (a[_[p]][m] = 1 * a[_[p]][m]); return a } function h (e) { return Object.keys(e).reduce(function (t, i) { return t || e[i].length > 0 }, !1) }e.exports = function (e, t) { t = t || {}; const r = { main: i.m }; const s = t.all ? { main: Object.keys(r.main) } : (function (e, t) { for (var i = { main: [t] }, n = { main: [] }, r = { main: {} }; h(i);) for (let s = Object.keys(i), o = 0; o < s.length; o++) { const u = s[o]; const l = i[u].pop(); if (r[u] = r[u] || {}, !r[u][l] && e[u][l]) { r[u][l] = !0, n[u] = n[u] || [], n[u].push(l); for (let d = a(e, e[u][l], u), c = Object.keys(d), f = 0; f < c.length; f++)i[c[f]] = i[c[f]] || [], i[c[f]] = i[c[f]].concat(d[c[f]]) } } return n }(r, e)); let o = ''; Object.keys(s).filter(function (e) { return e !== 'main' }).forEach(function (e) { for (var t = 0; s[e][t];)t++; s[e].push(t), r[e][t] = '(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })', o = o + 'var ' + e + ' = (' + n.toString().replace('ENTRY_MODULE', JSON.stringify(t)) + ')({' + s[e].map(function (t) { return JSON.stringify(t) + ': ' + r[e][t].toString() }).join(',') + '});\n' }), o = o + 'new ((' + n.toString().replace('ENTRY_MODULE', JSON.stringify(e)) + ')({' + s.main.map(function (e) { return JSON.stringify(e) + ': ' + r.main[e].toString() }).join(',') + '}))(self);'; const u = new window.Blob([o], { type: 'text/javascript' }); if (t.bare) return u; const l = (window.URL || window.webkitURL || window.mozURL || window.msURL).createObjectURL(u); const d = new window.Worker(l); return d.objectURL = l, d } },
  16. 118: function (e, t) { 'use strict'; const i = (function () { function e () { this.mimeType = null, this.duration = null, this.hasAudio = null, this.hasVideo = null, this.audioCodec = null, this.videoCodec = null, this.audioDataRate = null, this.videoDataRate = null, this.audioSampleRate = null, this.audioChannelCount = null, this.width = null, this.height = null, this.fps = null, this.profile = null, this.level = null, this.refFrames = null, this.chromaFormat = null, this.sarNum = null, this.sarDen = null, this.metadata = null, this.segments = null, this.segmentCount = null, this.hasKeyframesIndex = null, this.keyframesIndex = null } return e.prototype.isComplete = function () { const e = !1 === this.hasAudio || !0 === this.hasAudio && this.audioCodec != null && this.audioSampleRate != null && this.audioChannelCount != null; const t = !1 === this.hasVideo || !0 === this.hasVideo && this.videoCodec != null && this.width != null && this.height != null && this.fps != null && this.profile != null && this.level != null && this.refFrames != null && this.chromaFormat != null && this.sarNum != null && this.sarDen != null; return this.mimeType != null && this.duration != null && this.metadata != null && this.hasKeyframesIndex != null && e && t }, e.prototype.isSeekable = function () { return !0 === this.hasKeyframesIndex }, e.prototype.getNearestKeyframe = function (e) { if (this.keyframesIndex == null) return null; const t = this.keyframesIndex; const i = this._search(t.times, e); return { index: i, milliseconds: t.times[i], fileposition: t.filepositions[i] } }, e.prototype._search = function (e, t) { let i = 0; const n = e.length - 1; let r = 0; let s = 0; let o = n; for (t < e[0] && (i = 0, s = o + 1); s <= o;) { if ((r = s + Math.floor((o - s) / 2)) === n || t >= e[r] && t < e[r + 1]) { i = r; break }e[r] < t ? s = r + 1 : o = r - 1 } return i }, e }()); t.Z = i },
  17. 51: function (e, t, i) { 'use strict'; i.d(t, { Wk: function () { return n }, Yy: function () { return r }, Vn: function () { return s }, J1: function () { return o } }); var n = function (e, t, i, n, r) { this.dts = e, this.pts = t, this.duration = i, this.originalDts = n, this.isSyncPoint = r, this.fileposition = null }; var r = (function () { function e () { this.beginDts = 0, this.endDts = 0, this.beginPts = 0, this.endPts = 0, this.originalBeginDts = 0, this.originalEndDts = 0, this.syncPoints = [], this.firstSample = null, this.lastSample = null } return e.prototype.appendSyncPoint = function (e) { e.isSyncPoint = !0, this.syncPoints.push(e) }, e }()); var s = (function () { function e () { this._list = [] } return e.prototype.clear = function () { this._list = [] }, e.prototype.appendArray = function (e) { const t = this._list; e.length !== 0 && (t.length > 0 && e[0].originalDts < t[t.length - 1].originalDts && this.clear(), Array.prototype.push.apply(t, e)) }, e.prototype.getLastSyncPointBeforeDts = function (e) { if (this._list.length == 0) return null; const t = this._list; let i = 0; const n = t.length - 1; let r = 0; let s = 0; let o = n; for (e < t[0].dts && (i = 0, s = o + 1); s <= o;) { if ((r = s + Math.floor((o - s) / 2)) === n || e >= t[r].dts && e < t[r + 1].dts) { i = r; break }t[r].dts < e ? s = r + 1 : o = r - 1 } return this._list[i] }, e }()); var o = (function () { function e (e) { this._type = e, this._list = [], this._lastAppendLocation = -1 } return Object.defineProperty(e.prototype, 'type', { get: function () { return this._type }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'length', { get: function () { return this._list.length }, enumerable: !1, configurable: !0 }), e.prototype.isEmpty = function () { return this._list.length === 0 }, e.prototype.clear = function () { this._list = [], this._lastAppendLocation = -1 }, e.prototype._searchNearestSegmentBefore = function (e) { const t = this._list; if (t.length === 0) return -2; const i = t.length - 1; let n = 0; let r = 0; let s = i; let o = 0; if (e < t[0].originalBeginDts) return o = -1; for (;r <= s;) { if ((n = r + Math.floor((s - r) / 2)) === i || e > t[n].lastSample.originalDts && e < t[n + 1].originalBeginDts) { o = n; break }t[n].originalBeginDts < e ? r = n + 1 : s = n - 1 } return o }, e.prototype._searchNearestSegmentAfter = function (e) { return this._searchNearestSegmentBefore(e) + 1 }, e.prototype.append = function (e) { const t = this._list; const i = e; const n = this._lastAppendLocation; let r = 0; n !== -1 && n < t.length && i.originalBeginDts >= t[n].lastSample.originalDts && (n === t.length - 1 || n < t.length - 1 && i.originalBeginDts < t[n + 1].originalBeginDts) ? r = n + 1 : t.length > 0 && (r = this._searchNearestSegmentBefore(i.originalBeginDts) + 1), this._lastAppendLocation = r, this._list.splice(r, 0, i) }, e.prototype.getLastSegmentBefore = function (e) { const t = this._searchNearestSegmentBefore(e); return t >= 0 ? this._list[t] : null }, e.prototype.getLastSampleBefore = function (e) { const t = this.getLastSegmentBefore(e); return t != null ? t.lastSample : null }, e.prototype.getLastSyncPointBefore = function (e) { for (var t = this._searchNearestSegmentBefore(e), i = this._list[t].syncPoints; i.length === 0 && t > 0;)t--, i = this._list[t].syncPoints; return i.length > 0 ? i[i.length - 1] : null }, e }()) },
  18. 949: function (e, t, i) { 'use strict'; i.d(t, { Z: function () { return R } }); const n = i(716); const r = i.n(n); const s = i(300); const o = i(538); const a = i(118); function h (e, t, i) { const n = e; if (t + i < n.length) { for (;i--;) if ((192 & n[++t]) != 128) return !1; return !0 } return !1 } let u; const l = function (e) { for (var t = [], i = e, n = 0, r = e.length; n < r;) if (i[n] < 128)t.push(String.fromCharCode(i[n])), ++n; else { if (i[n] < 192);else if (i[n] < 224) { if (h(i, n, 1)) if ((s = (31 & i[n]) << 6 | 63 & i[n + 1]) >= 128) { t.push(String.fromCharCode(65535 & s)), n += 2; continue } } else if (i[n] < 240) { if (h(i, n, 2)) if ((s = (15 & i[n]) << 12 | (63 & i[n + 1]) << 6 | 63 & i[n + 2]) >= 2048 && (63488 & s) != 55296) { t.push(String.fromCharCode(65535 & s)), n += 3; continue } } else if (i[n] < 248) { var s; if (h(i, n, 3)) if ((s = (7 & i[n]) << 18 | (63 & i[n + 1]) << 12 | (63 & i[n + 2]) << 6 | 63 & i[n + 3]) > 65536 && s < 1114112) { s -= 65536, t.push(String.fromCharCode(s >>> 10 | 55296)), t.push(String.fromCharCode(1023 & s | 56320)), n += 4; continue } }t.push(String.fromCharCode(65533)), ++n } return t.join('') }; const d = i(29); const c = (u = new ArrayBuffer(2), new DataView(u).setInt16(0, 256, !0), new Int16Array(u)[0] === 256); const f = (function () { function e () {} return e.parseScriptData = function (t, i, n) { const r = {}; try { const o = e.parseValue(t, i, n); const a = e.parseValue(t, i + o.size, n - o.size); r[o.data] = a.data } catch (e) { s.Z.e('AMF', e.toString()) } return r }, e.parseObject = function (t, i, n) { if (n < 3) throw new d.rT('Data not enough when parse ScriptDataObject'); const r = e.parseString(t, i, n); const s = e.parseValue(t, i + r.size, n - r.size); const o = s.objectEnd; return { data: { name: r.data, value: s.data }, size: r.size + s.size, objectEnd: o } }, e.parseVariable = function (t, i, n) { return e.parseObject(t, i, n) }, e.parseString = function (e, t, i) { if (i < 2) throw new d.rT('Data not enough when parse String'); const n = new DataView(e, t, i).getUint16(0, !c); return { data: n > 0 ? l(new Uint8Array(e, t + 2, n)) : '', size: 2 + n } }, e.parseLongString = function (e, t, i) { if (i < 4) throw new d.rT('Data not enough when parse LongString'); const n = new DataView(e, t, i).getUint32(0, !c); return { data: n > 0 ? l(new Uint8Array(e, t + 4, n)) : '', size: 4 + n } }, e.parseDate = function (e, t, i) { if (i < 10) throw new d.rT('Data size invalid when parse Date'); const n = new DataView(e, t, i); let r = n.getFloat64(0, !c); const s = n.getInt16(8, !c); return { data: new Date(r += 60 * s * 1e3), size: 10 } }, e.parseValue = function (t, i, n) { if (n < 1) throw new d.rT('Data not enough when parse Value'); let r; const o = new DataView(t, i, n); let a = 1; const h = o.getUint8(0); let u = !1; try { switch (h) { case 0:r = o.getFloat64(1, !c), a += 8; break; case 1:r = !!o.getUint8(1), a += 1; break; case 2:var l = e.parseString(t, i + 1, n - 1); r = l.data, a += l.size; break; case 3:r = {}; var f = 0; for ((16777215 & o.getUint32(n - 4, !c)) == 9 && (f = 3); a < n - 4;) { const _ = e.parseObject(t, i + a, n - a - f); if (_.objectEnd) break; r[_.data.name] = _.data.value, a += _.size } if (a <= n - 3)(16777215 & o.getUint32(a - 1, !c)) === 9 && (a += 3); break; case 8:r = {}, a += 4; f = 0; for ((16777215 & o.getUint32(n - 4, !c)) == 9 && (f = 3); a < n - 8;) { const p = e.parseVariable(t, i + a, n - a - f); if (p.objectEnd) break; r[p.data.name] = p.data.value, a += p.size } if (a <= n - 3)(16777215 & o.getUint32(a - 1, !c)) === 9 && (a += 3); break; case 9:r = void 0, a = 1, u = !0; break; case 10:r = []; var m = o.getUint32(1, !c); a += 4; for (let g = 0; g < m; g++) { const v = e.parseValue(t, i + a, n - a); r.push(v.data), a += v.size } break; case 11:var y = e.parseDate(t, i + 1, n - 1); r = y.data, a += y.size; break; case 12:var b = e.parseString(t, i + 1, n - 1); r = b.data, a += b.size; break; default:a = n, s.Z.w('AMF', 'Unsupported AMF value type ' + h) } } catch (e) { s.Z.e('AMF', e.toString()) } return { data: r, size: a, objectEnd: u } }, e }()); const _ = (function () { function e (e) { this.TAG = 'ExpGolomb', this._buffer = e, this._buffer_index = 0, this._total_bytes = e.byteLength, this._total_bits = 8 * e.byteLength, this._current_word = 0, this._current_word_bits_left = 0 } return e.prototype.destroy = function () { this._buffer = null }, e.prototype._fillCurrentWord = function () { const e = this._total_bytes - this._buffer_index; if (e <= 0) throw new d.rT('ExpGolomb: _fillCurrentWord() but no bytes available'); const t = Math.min(4, e); const i = new Uint8Array(4); i.set(this._buffer.subarray(this._buffer_index, this._buffer_index + t)), this._current_word = new DataView(i.buffer).getUint32(0, !1), this._buffer_index += t, this._current_word_bits_left = 8 * t }, e.prototype.readBits = function (e) { if (e > 32) throw new d.OC('ExpGolomb: readBits() bits exceeded max 32bits!'); if (e <= this._current_word_bits_left) { const t = this._current_word >>> 32 - e; return this._current_word <<= e, this._current_word_bits_left -= e, t } let i = this._current_word_bits_left ? this._current_word : 0; i >>>= 32 - this._current_word_bits_left; const n = e - this._current_word_bits_left; this._fillCurrentWord(); const r = Math.min(n, this._current_word_bits_left); const s = this._current_word >>> 32 - r; return this._current_word <<= r, this._current_word_bits_left -= r, i = i << r | s }, e.prototype.readBool = function () { return this.readBits(1) === 1 }, e.prototype.readByte = function () { return this.readBits(8) }, e.prototype._skipLeadingZero = function () { let e; for (e = 0; e < this._current_word_bits_left; e++) if ((this._current_word & 2147483648 >>> e) != 0) return this._current_word <<= e, this._current_word_bits_left -= e, e; return this._fillCurrentWord(), e + this._skipLeadingZero() }, e.prototype.readUEG = function () { const e = this._skipLeadingZero(); return this.readBits(e + 1) - 1 }, e.prototype.readSEG = function () { const e = this.readUEG(); return 1 & e ? e + 1 >>> 1 : -1 * (e >>> 1) }, e }()); const p = (function () { function e () {} return e._ebsp2rbsp = function (e) { for (var t = e, i = t.byteLength, n = new Uint8Array(i), r = 0, s = 0; s < i; s++)s >= 2 && t[s] === 3 && t[s - 1] === 0 && t[s - 2] === 0 || (n[r] = t[s], r++); return new Uint8Array(n.buffer, 0, r) }, e.parseSPS = function (t) { const i = e._ebsp2rbsp(t); let n = new _(i); n.readByte(); const r = n.readByte(); n.readByte(); const s = n.readByte(); n.readUEG(); const o = e.getProfileString(r); const a = e.getLevelString(s); let h = 1; let u = 420; let l = 8; if ((r === 100 || r === 110 || r === 122 || r === 244 || r === 44 || r === 83 || r === 86 || r === 118 || r === 128 || r === 138 || r === 144) && ((h = n.readUEG()) === 3 && n.readBits(1), h <= 3 && (u = [0, 420, 422, 444][h]), l = n.readUEG() + 8, n.readUEG(), n.readBits(1), n.readBool())) for (var d = h !== 3 ? 8 : 12, c = 0; c < d; c++)n.readBool() && (c < 6 ? e._skipScalingList(n, 16) : e._skipScalingList(n, 64)); n.readUEG(); const f = n.readUEG(); if (f === 0)n.readUEG(); else if (f === 1) { n.readBits(1), n.readSEG(), n.readSEG(); const p = n.readUEG(); for (c = 0; c < p; c++)n.readSEG() } const m = n.readUEG(); n.readBits(1); const g = n.readUEG(); const v = n.readUEG(); const y = n.readBits(1); y === 0 && n.readBits(1), n.readBits(1); let b = 0; let E = 0; let S = 0; let A = 0; n.readBool() && (b = n.readUEG(), E = n.readUEG(), S = n.readUEG(), A = n.readUEG()); let L = 1; let R = 1; let w = 0; let O = !0; let T = 0; let C = 0; if (n.readBool()) { if (n.readBool()) { const k = n.readByte(); k > 0 && k < 16 ? (L = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2][k - 1], R = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1][k - 1]) : k === 255 && (L = n.readByte() << 8 | n.readByte(), R = n.readByte() << 8 | n.readByte()) } if (n.readBool() && n.readBool(), n.readBool() && (n.readBits(4), n.readBool() && n.readBits(24)), n.readBool() && (n.readUEG(), n.readUEG()), n.readBool()) { const D = n.readBits(32); const I = n.readBits(32); O = n.readBool(), w = (T = I) / (C = 2 * D) } } let M = 1; L === 1 && R === 1 || (M = L / R); let B = 0; let x = 0; h === 0 ? (B = 1, x = 2 - y) : (B = h === 3 ? 1 : 2, x = (h === 1 ? 2 : 1) * (2 - y)); let P = 16 * (g + 1); let U = 16 * (v + 1) * (2 - y); P -= (b + E) * B, U -= (S + A) * x; const N = Math.ceil(P * M); return n.destroy(), n = null, { profile_string: o, level_string: a, bit_depth: l, ref_frames: m, chroma_format: u, chroma_format_string: e.getChromaFormatString(u), frame_rate: { fixed: O, fps: w, fps_den: C, fps_num: T }, sar_ratio: { width: L, height: R }, codec_size: { width: P, height: U }, present_size: { width: N, height: U } } }, e._skipScalingList = function (e, t) { for (let i = 8, n = 8, r = 0; r < t; r++)n !== 0 && (n = (i + e.readSEG() + 256) % 256), i = n === 0 ? i : n }, e.getProfileString = function (e) { switch (e) { case 66:return 'Baseline'; case 77:return 'Main'; case 88:return 'Extended'; case 100:return 'High'; case 110:return 'High10'; case 122:return 'High422'; case 244:return 'High444'; default:return 'Unknown' } }, e.getLevelString = function (e) { return (e / 10).toFixed(1) }, e.getChromaFormatString = function (e) { switch (e) { case 420:return '4:2:0'; case 422:return '4:2:2'; case 444:return '4:4:4'; default:return 'Unknown' } }, e }()); const m = i(600); const g = (function () { function e (e, t) { this.TAG = 'FLVDemuxer', this._config = t, this._onError = null, this._onMediaInfo = null, this._onMetaDataArrived = null, this._onScriptDataArrived = null, this._onTrackMetadata = null, this._onDataAvailable = null, this._dataOffset = e.dataOffset, this._firstParse = !0, this._dispatch = !1, this._hasAudio = e.hasAudioTrack, this._hasVideo = e.hasVideoTrack, this._hasAudioFlagOverrided = !1, this._hasVideoFlagOverrided = !1, this._audioInitialMetadataDispatched = !1, this._videoInitialMetadataDispatched = !1, this._mediaInfo = new a.Z(), this._mediaInfo.hasAudio = this._hasAudio, this._mediaInfo.hasVideo = this._hasVideo, this._metadata = null, this._audioMetadata = null, this._videoMetadata = null, this._naluLengthSize = 4, this._timestampBase = 0, this._timescale = 1e3, this._duration = 0, this._durationOverrided = !1, this._referenceFrameRate = { fixed: !0, fps: 23.976, fps_num: 23976, fps_den: 1e3 }, this._flvSoundRateTable = [5500, 11025, 22050, 44100, 48e3], this._mpegSamplingRates = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350], this._mpegAudioV10SampleRateTable = [44100, 48e3, 32e3, 0], this._mpegAudioV20SampleRateTable = [22050, 24e3, 16e3, 0], this._mpegAudioV25SampleRateTable = [11025, 12e3, 8e3, 0], this._mpegAudioL1BitRateTable = [0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, -1], this._mpegAudioL2BitRateTable = [0, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, -1], this._mpegAudioL3BitRateTable = [0, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, -1], this._videoTrack = { type: 'video', id: 1, sequenceNumber: 0, samples: [], length: 0 }, this._audioTrack = { type: 'audio', id: 2, sequenceNumber: 0, samples: [], length: 0 }, this._littleEndian = (function () { const e = new ArrayBuffer(2); return new DataView(e).setInt16(0, 256, !0), new Int16Array(e)[0] === 256 }()) } return e.prototype.destroy = function () { this._mediaInfo = null, this._metadata = null, this._audioMetadata = null, this._videoMetadata = null, this._videoTrack = null, this._audioTrack = null, this._onError = null, this._onMediaInfo = null, this._onMetaDataArrived = null, this._onScriptDataArrived = null, this._onTrackMetadata = null, this._onDataAvailable = null }, e.probe = function (e) { const t = new Uint8Array(e); const i = { match: !1 }; if (t[0] !== 70 || t[1] !== 76 || t[2] !== 86 || t[3] !== 1) return i; let n; let r; const s = (4 & t[4]) >>> 2 != 0; const o = (1 & t[4]) != 0; const a = (n = t)[r = 5] << 24 | n[r + 1] << 16 | n[r + 2] << 8 | n[r + 3]; return a < 9 ? i : { match: !0, consumed: a, dataOffset: a, hasAudioTrack: s, hasVideoTrack: o } }, e.prototype.bindDataSource = function (e) { return e.onDataArrival = this.parseChunks.bind(this), this }, Object.defineProperty(e.prototype, 'onTrackMetadata', { get: function () { return this._onTrackMetadata }, set: function (e) { this._onTrackMetadata = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onMediaInfo', { get: function () { return this._onMediaInfo }, set: function (e) { this._onMediaInfo = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onMetaDataArrived', { get: function () { return this._onMetaDataArrived }, set: function (e) { this._onMetaDataArrived = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onScriptDataArrived', { get: function () { return this._onScriptDataArrived }, set: function (e) { this._onScriptDataArrived = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onError', { get: function () { return this._onError }, set: function (e) { this._onError = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onDataAvailable', { get: function () { return this._onDataAvailable }, set: function (e) { this._onDataAvailable = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'timestampBase', { get: function () { return this._timestampBase }, set: function (e) { this._timestampBase = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'overridedDuration', { get: function () { return this._duration }, set: function (e) { this._durationOverrided = !0, this._duration = e, this._mediaInfo.duration = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'overridedHasAudio', { set: function (e) { this._hasAudioFlagOverrided = !0, this._hasAudio = e, this._mediaInfo.hasAudio = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'overridedHasVideo', { set: function (e) { this._hasVideoFlagOverrided = !0, this._hasVideo = e, this._mediaInfo.hasVideo = e }, enumerable: !1, configurable: !0 }), e.prototype.resetMediaInfo = function () { this._mediaInfo = new a.Z() }, e.prototype._isInitialMetadataDispatched = function () { return this._hasAudio && this._hasVideo ? this._audioInitialMetadataDispatched && this._videoInitialMetadataDispatched : this._hasAudio && !this._hasVideo ? this._audioInitialMetadataDispatched : !(this._hasAudio || !this._hasVideo) && this._videoInitialMetadataDispatched }, e.prototype.parseChunks = function (t, i) { if (!(this._onError && this._onMediaInfo && this._onTrackMetadata && this._onDataAvailable)) throw new d.rT('Flv: onError & onMediaInfo & onTrackMetadata & onDataAvailable callback must be specified'); let n = 0; const r = this._littleEndian; if (i === 0) { if (!(t.byteLength > 13)) return 0; n = e.probe(t).dataOffset } this._firstParse && (this._firstParse = !1, i + n !== this._dataOffset && s.Z.w(this.TAG, 'First time parsing but chunk byteStart invalid!'), (o = new DataView(t, n)).getUint32(0, !r) !== 0 && s.Z.w(this.TAG, 'PrevTagSize0 !== 0 !!!'), n += 4); for (;n < t.byteLength;) { this._dispatch = !0; var o = new DataView(t, n); if (n + 11 + 4 > t.byteLength) break; const a = o.getUint8(0); const h = 16777215 & o.getUint32(0, !r); if (n + 11 + h + 4 > t.byteLength) break; if (a === 8 || a === 9 || a === 18) { const u = o.getUint8(4); const l = o.getUint8(5); const c = o.getUint8(6) | l << 8 | u << 16 | o.getUint8(7) << 24; (16777215 & o.getUint32(7, !r)) !== 0 && s.Z.w(this.TAG, 'Meet tag which has StreamID != 0!'); const f = n + 11; switch (a) { case 8:this._parseAudioData(t, f, h, c); break; case 9:this._parseVideoData(t, f, h, c, i + n); break; case 18:this._parseScriptData(t, f, h) } const _ = o.getUint32(11 + h, !r); _ !== 11 + h && s.Z.w(this.TAG, 'Invalid PrevTagSize ' + _), n += 11 + h + 4 } else s.Z.w(this.TAG, 'Unsupported tag type ' + a + ', skipped'), n += 11 + h + 4 } return this._isInitialMetadataDispatched() && this._dispatch && (this._audioTrack.length || this._videoTrack.length) && this._onDataAvailable(this._audioTrack, this._videoTrack), n }, e.prototype._parseScriptData = function (e, t, i) { const n = f.parseScriptData(e, t, i); if (n.hasOwnProperty('onMetaData')) { if (n.onMetaData == null || typeof n.onMetaData !== 'object') return void s.Z.w(this.TAG, 'Invalid onMetaData structure!'); this._metadata && s.Z.w(this.TAG, 'Found another onMetaData tag!'), this._metadata = n; const r = this._metadata.onMetaData; if (this._onMetaDataArrived && this._onMetaDataArrived(Object.assign({}, r)), typeof r.hasAudio === 'boolean' && !1 === this._hasAudioFlagOverrided && (this._hasAudio = r.hasAudio, this._mediaInfo.hasAudio = this._hasAudio), typeof r.hasVideo === 'boolean' && !1 === this._hasVideoFlagOverrided && (this._hasVideo = r.hasVideo, this._mediaInfo.hasVideo = this._hasVideo), typeof r.audiodatarate === 'number' && (this._mediaInfo.audioDataRate = r.audiodatarate), typeof r.videodatarate === 'number' && (this._mediaInfo.videoDataRate = r.videodatarate), typeof r.width === 'number' && (this._mediaInfo.width = r.width), typeof r.height === 'number' && (this._mediaInfo.height = r.height), typeof r.duration === 'number') { if (!this._durationOverrided) { const o = Math.floor(r.duration * this._timescale); this._duration = o, this._mediaInfo.duration = o } } else this._mediaInfo.duration = 0; if (typeof r.framerate === 'number') { const a = Math.floor(1e3 * r.framerate); if (a > 0) { const h = a / 1e3; this._referenceFrameRate.fixed = !0, this._referenceFrameRate.fps = h, this._referenceFrameRate.fps_num = a, this._referenceFrameRate.fps_den = 1e3, this._mediaInfo.fps = h } } if (typeof r.keyframes === 'object') { this._mediaInfo.hasKeyframesIndex = !0; const u = r.keyframes; this._mediaInfo.keyframesIndex = this._parseKeyframesIndex(u), r.keyframes = null } else this._mediaInfo.hasKeyframesIndex = !1; this._dispatch = !1, this._mediaInfo.metadata = r, s.Z.v(this.TAG, 'Parsed onMetaData'), this._mediaInfo.isComplete() && this._onMediaInfo(this._mediaInfo) }Object.keys(n).length > 0 && this._onScriptDataArrived && this._onScriptDataArrived(Object.assign({}, n)) }, e.prototype._parseKeyframesIndex = function (e) { for (var t = [], i = [], n = 1; n < e.times.length; n++) { const r = this._timestampBase + Math.floor(1e3 * e.times[n]); t.push(r), i.push(e.filepositions[n]) } return { times: t, filepositions: i } }, e.prototype._parseAudioData = function (e, t, i, n) { if (i <= 1)s.Z.w(this.TAG, 'Flv: Invalid audio packet, missing SoundData payload!'); else if (!0 !== this._hasAudioFlagOverrided || !1 !== this._hasAudio) { this._littleEndian; const r = new DataView(e, t, i).getUint8(0); const o = r >>> 4; if (o === 2 || o === 10) { let a = 0; const h = (12 & r) >>> 2; if (h >= 0 && h <= 4) { a = this._flvSoundRateTable[h]; const u = 1 & r; let l = this._audioMetadata; const d = this._audioTrack; if (l || (!1 === this._hasAudio && !1 === this._hasAudioFlagOverrided && (this._hasAudio = !0, this._mediaInfo.hasAudio = !0), (l = this._audioMetadata = {}).type = 'audio', l.id = d.id, l.timescale = this._timescale, l.duration = this._duration, l.audioSampleRate = a, l.channelCount = u === 0 ? 1 : 2), o === 10) { const c = this._parseAACAudioData(e, t + 1, i - 1); if (c == null) return; if (c.packetType === 0) { l.config && s.Z.w(this.TAG, 'Found another AudioSpecificConfig!'); var f = c.data; l.audioSampleRate = f.samplingRate, l.channelCount = f.channelCount, l.codec = f.codec, l.originalCodec = f.originalCodec, l.config = f.config, l.refSampleDuration = 1024 / l.audioSampleRate * l.timescale, s.Z.v(this.TAG, 'Parsed AudioSpecificConfig'), this._isInitialMetadataDispatched() ? this._dispatch && (this._audioTrack.length || this._videoTrack.length) && this._onDataAvailable(this._audioTrack, this._videoTrack) : this._audioInitialMetadataDispatched = !0, this._dispatch = !1, this._onTrackMetadata('audio', l), (g = this._mediaInfo).audioCodec = l.originalCodec, g.audioSampleRate = l.audioSampleRate, g.audioChannelCount = l.channelCount, g.hasVideo ? g.videoCodec != null && (g.mimeType = 'video/x-flv; codecs="' + g.videoCodec + ',' + g.audioCodec + '"') : g.mimeType = 'video/x-flv; codecs="' + g.audioCodec + '"', g.isComplete() && this._onMediaInfo(g) } else if (c.packetType === 1) { var _ = this._timestampBase + n; const p = { unit: c.data, length: c.data.byteLength, dts: _, pts: _ }; d.samples.push(p), d.length += c.data.length } else s.Z.e(this.TAG, 'Flv: Unsupported AAC data type ' + c.packetType) } else if (o === 2) { if (!l.codec) { var g; if ((f = this._parseMP3AudioData(e, t + 1, i - 1, !0)) == null) return; l.audioSampleRate = f.samplingRate, l.channelCount = f.channelCount, l.codec = f.codec, l.originalCodec = f.originalCodec, l.refSampleDuration = 1152 / l.audioSampleRate * l.timescale, s.Z.v(this.TAG, 'Parsed MPEG Audio Frame Header'), this._audioInitialMetadataDispatched = !0, this._onTrackMetadata('audio', l), (g = this._mediaInfo).audioCodec = l.codec, g.audioSampleRate = l.audioSampleRate, g.audioChannelCount = l.channelCount, g.audioDataRate = f.bitRate, g.hasVideo ? g.videoCodec != null && (g.mimeType = 'video/x-flv; codecs="' + g.videoCodec + ',' + g.audioCodec + '"') : g.mimeType = 'video/x-flv; codecs="' + g.audioCodec + '"', g.isComplete() && this._onMediaInfo(g) } const v = this._parseMP3AudioData(e, t + 1, i - 1, !1); if (v == null) return; _ = this._timestampBase + n; const y = { unit: v, length: v.byteLength, dts: _, pts: _ }; d.samples.push(y), d.length += v.length } } else this._onError(m.Z.FORMAT_ERROR, 'Flv: Invalid audio sample rate idx: ' + h) } else this._onError(m.Z.CODEC_UNSUPPORTED, 'Flv: Unsupported audio codec idx: ' + o) } }, e.prototype._parseAACAudioData = function (e, t, i) { if (!(i <= 1)) { const n = {}; const r = new Uint8Array(e, t, i); return n.packetType = r[0], r[0] === 0 ? n.data = this._parseAACAudioSpecificConfig(e, t + 1, i - 1) : n.data = r.subarray(1), n }s.Z.w(this.TAG, 'Flv: Invalid AAC packet, missing AACPacketType or/and Data!') }, e.prototype._parseAACAudioSpecificConfig = function (e, t, i) { let n; let r; const s = new Uint8Array(e, t, i); let o = null; let a = 0; let h = null; if (a = n = s[0] >>> 3, (r = (7 & s[0]) << 1 | s[1] >>> 7) < 0 || r >= this._mpegSamplingRates.length) this._onError(m.Z.FORMAT_ERROR, 'Flv: AAC invalid sampling frequency index!'); else { const u = this._mpegSamplingRates[r]; const l = (120 & s[1]) >>> 3; if (!(l < 0 || l >= 8)) { a === 5 && (h = (7 & s[1]) << 1 | s[2] >>> 7, (124 & s[2]) >>> 2); const d = self.navigator.userAgent.toLowerCase(); return d.indexOf('firefox') !== -1 ? r >= 6 ? (a = 5, o = new Array(4), h = r - 3) : (a = 2, o = new Array(2), h = r) : d.indexOf('android') !== -1 ? (a = 2, o = new Array(2), h = r) : (a = 5, h = r, o = new Array(4), r >= 6 ? h = r - 3 : l === 1 && (a = 2, o = new Array(2), h = r)), o[0] = a << 3, o[0] |= (15 & r) >>> 1, o[1] = (15 & r) << 7, o[1] |= (15 & l) << 3, a === 5 && (o[1] |= (15 & h) >>> 1, o[2] = (1 & h) << 7, o[2] |= 8, o[3] = 0), { config: o, samplingRate: u, channelCount: l, codec: 'mp4a.40.' + a, originalCodec: 'mp4a.40.' + n } } this._onError(m.Z.FORMAT_ERROR, 'Flv: AAC invalid channel configuration') } }, e.prototype._parseMP3AudioData = function (e, t, i, n) { if (!(i < 4)) { this._littleEndian; const r = new Uint8Array(e, t, i); let o = null; if (n) { if (r[0] !== 255) return; const a = r[1] >>> 3 & 3; const h = (6 & r[1]) >> 1; const u = (240 & r[2]) >>> 4; const l = (12 & r[2]) >>> 2; const d = (r[3] >>> 6 & 3) !== 3 ? 2 : 1; let c = 0; let f = 0; switch (a) { case 0:c = this._mpegAudioV25SampleRateTable[l]; break; case 2:c = this._mpegAudioV20SampleRateTable[l]; break; case 3:c = this._mpegAudioV10SampleRateTable[l] } switch (h) { case 1:34, u < this._mpegAudioL3BitRateTable.length && (f = this._mpegAudioL3BitRateTable[u]); break; case 2:33, u < this._mpegAudioL2BitRateTable.length && (f = this._mpegAudioL2BitRateTable[u]); break; case 3:32, u < this._mpegAudioL1BitRateTable.length && (f = this._mpegAudioL1BitRateTable[u]) }o = { bitRate: f, samplingRate: c, channelCount: d, codec: 'mp3', originalCodec: 'mp3' } } else o = r; return o }s.Z.w(this.TAG, 'Flv: Invalid MP3 packet, header missing!') }, e.prototype._parseVideoData = function (e, t, i, n, r) { if (i <= 1)s.Z.w(this.TAG, 'Flv: Invalid video packet, missing VideoData payload!'); else if (!0 !== this._hasVideoFlagOverrided || !1 !== this._hasVideo) { const o = new Uint8Array(e, t, i)[0]; const a = (240 & o) >>> 4; const h = 15 & o; h === 7 ? this._parseAVCVideoPacket(e, t + 1, i - 1, n, r, a) : this._onError(m.Z.CODEC_UNSUPPORTED, 'Flv: Unsupported codec in video frame: ' + h) } }, e.prototype._parseAVCVideoPacket = function (e, t, i, n, r, o) { if (i < 4)s.Z.w(this.TAG, 'Flv: Invalid AVC packet, missing AVCPacketType or/and CompositionTime'); else { const a = this._littleEndian; const h = new DataView(e, t, i); const u = h.getUint8(0); const l = (16777215 & h.getUint32(0, !a)) << 8 >> 8; if (u === 0) this._parseAVCDecoderConfigurationRecord(e, t + 4, i - 4); else if (u === 1) this._parseAVCVideoData(e, t + 4, i - 4, n, r, o, l); else if (u !== 2) return void this._onError(m.Z.FORMAT_ERROR, 'Flv: Invalid video packet type ' + u) } }, e.prototype._parseAVCDecoderConfigurationRecord = function (e, t, i) { if (i < 7)s.Z.w(this.TAG, 'Flv: Invalid AVCDecoderConfigurationRecord, lack of data!'); else { let n = this._videoMetadata; const r = this._videoTrack; const o = this._littleEndian; const a = new DataView(e, t, i); n ? void 0 !== n.avcc && s.Z.w(this.TAG, 'Found another AVCDecoderConfigurationRecord!') : (!1 === this._hasVideo && !1 === this._hasVideoFlagOverrided && (this._hasVideo = !0, this._mediaInfo.hasVideo = !0), (n = this._videoMetadata = {}).type = 'video', n.id = r.id, n.timescale = this._timescale, n.duration = this._duration); const h = a.getUint8(0); const u = a.getUint8(1); a.getUint8(2), a.getUint8(3); if (h === 1 && u !== 0) if (this._naluLengthSize = 1 + (3 & a.getUint8(4)), this._naluLengthSize === 3 || this._naluLengthSize === 4) { const l = 31 & a.getUint8(5); if (l !== 0) { l > 1 && s.Z.w(this.TAG, 'Flv: Strange AVCDecoderConfigurationRecord: SPS Count = ' + l); for (var d = 6, c = 0; c < l; c++) { var f = a.getUint16(d, !o); if (d += 2, f !== 0) { const _ = new Uint8Array(e, t + d, f); d += f; const g = p.parseSPS(_); if (c === 0) { n.codecWidth = g.codec_size.width, n.codecHeight = g.codec_size.height, n.presentWidth = g.present_size.width, n.presentHeight = g.present_size.height, n.profile = g.profile_string, n.level = g.level_string, n.bitDepth = g.bit_depth, n.chromaFormat = g.chroma_format, n.sarRatio = g.sar_ratio, n.frameRate = g.frame_rate, !1 !== g.frame_rate.fixed && g.frame_rate.fps_num !== 0 && g.frame_rate.fps_den !== 0 || (n.frameRate = this._referenceFrameRate); const v = n.frameRate.fps_den; const y = n.frameRate.fps_num; n.refSampleDuration = n.timescale * (v / y); for (var b = _.subarray(1, 4), E = 'avc1.', S = 0; S < 3; S++) { let A = b[S].toString(16); A.length < 2 && (A = '0' + A), E += A }n.codec = E; const L = this._mediaInfo; L.width = n.codecWidth, L.height = n.codecHeight, L.fps = n.frameRate.fps, L.profile = n.profile, L.level = n.level, L.refFrames = g.ref_frames, L.chromaFormat = g.chroma_format_string, L.sarNum = n.sarRatio.width, L.sarDen = n.sarRatio.height, L.videoCodec = E, L.hasAudio ? L.audioCodec != null && (L.mimeType = 'video/x-flv; codecs="' + L.videoCodec + ',' + L.audioCodec + '"') : L.mimeType = 'video/x-flv; codecs="' + L.videoCodec + '"', L.isComplete() && this._onMediaInfo(L) } } } const R = a.getUint8(d); if (R !== 0) { R > 1 && s.Z.w(this.TAG, 'Flv: Strange AVCDecoderConfigurationRecord: PPS Count = ' + R), d++; for (c = 0; c < R; c++) { f = a.getUint16(d, !o); d += 2, f !== 0 && (d += f) }n.avcc = new Uint8Array(i), n.avcc.set(new Uint8Array(e, t, i), 0), s.Z.v(this.TAG, 'Parsed AVCDecoderConfigurationRecord'), this._isInitialMetadataDispatched() ? this._dispatch && (this._audioTrack.length || this._videoTrack.length) && this._onDataAvailable(this._audioTrack, this._videoTrack) : this._videoInitialMetadataDispatched = !0, this._dispatch = !1, this._onTrackMetadata('video', n) } else this._onError(m.Z.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord: No PPS') } else this._onError(m.Z.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord: No SPS') } else this._onError(m.Z.FORMAT_ERROR, 'Flv: Strange NaluLengthSizeMinusOne: ' + (this._naluLengthSize - 1)); else this._onError(m.Z.FORMAT_ERROR, 'Flv: Invalid AVCDecoderConfigurationRecord') } }, e.prototype._parseAVCVideoData = function (e, t, i, n, r, o, a) { for (var h = this._littleEndian, u = new DataView(e, t, i), l = [], d = 0, c = 0, f = this._naluLengthSize, _ = this._timestampBase + n, p = o === 1; c < i;) { if (c + 4 >= i) { s.Z.w(this.TAG, 'Malformed Nalu near timestamp ' + _ + ', offset = ' + c + ', dataSize = ' + i); break } let m = u.getUint32(c, !h); if (f === 3 && (m >>>= 8), m > i - f) return void s.Z.w(this.TAG, 'Malformed Nalus near timestamp ' + _ + ', NaluSize > DataSize!'); const g = 31 & u.getUint8(c + f); g === 5 && (p = !0); const v = new Uint8Array(e, t + c, f + m); const y = { type: g, data: v }; l.push(y), d += v.byteLength, c += f + m } if (l.length) { const b = this._videoTrack; const E = { units: l, length: d, isKeyframe: p, dts: _, cts: a, pts: _ + a }; p && (E.fileposition = r), b.samples.push(E), b.length += d } }, e }()); const v = (function () { function e () {} return e.init = function () { for (const t in e.types = { avc1: [], avcC: [], btrt: [], dinf: [], dref: [], esds: [], ftyp: [], hdlr: [], mdat: [], mdhd: [], mdia: [], mfhd: [], minf: [], moof: [], moov: [], mp4a: [], mvex: [], mvhd: [], sdtp: [], stbl: [], stco: [], stsc: [], stsd: [], stsz: [], stts: [], tfdt: [], tfhd: [], traf: [], trak: [], trun: [], trex: [], tkhd: [], vmhd: [], smhd: [], '.mp3': [] }, e.types)e.types.hasOwnProperty(t) && (e.types[t] = [t.charCodeAt(0), t.charCodeAt(1), t.charCodeAt(2), t.charCodeAt(3)]); const i = e.constants = {}; i.FTYP = new Uint8Array([105, 115, 111, 109, 0, 0, 0, 1, 105, 115, 111, 109, 97, 118, 99, 49]), i.STSD_PREFIX = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]), i.STTS = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), i.STSC = i.STCO = i.STTS, i.STSZ = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), i.HDLR_VIDEO = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0]), i.HDLR_AUDIO = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 115, 111, 117, 110, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 83, 111, 117, 110, 100, 72, 97, 110, 100, 108, 101, 114, 0]), i.DREF = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1]), i.SMHD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), i.VMHD = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]) }, e.box = function (e) { for (var t = 8, i = null, n = Array.prototype.slice.call(arguments, 1), r = n.length, s = 0; s < r; s++)t += n[s].byteLength; (i = new Uint8Array(t))[0] = t >>> 24 & 255, i[1] = t >>> 16 & 255, i[2] = t >>> 8 & 255, i[3] = 255 & t, i.set(e, 4); let o = 8; for (s = 0; s < r; s++)i.set(n[s], o), o += n[s].byteLength; return i }, e.generateInitSegment = function (t) { const i = e.box(e.types.ftyp, e.constants.FTYP); const n = e.moov(t); const r = new Uint8Array(i.byteLength + n.byteLength); return r.set(i, 0), r.set(n, i.byteLength), r }, e.moov = function (t) { const i = e.mvhd(t.timescale, t.duration); const n = e.trak(t); const r = e.mvex(t); return e.box(e.types.moov, i, n, r) }, e.mvhd = function (t, i) { return e.box(e.types.mvhd, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, t >>> 24 & 255, t >>> 16 & 255, t >>> 8 & 255, 255 & t, i >>> 24 & 255, i >>> 16 & 255, i >>> 8 & 255, 255 & i, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255])) }, e.trak = function (t) { return e.box(e.types.trak, e.tkhd(t), e.mdia(t)) }, e.tkhd = function (t) { const i = t.id; const n = t.duration; const r = t.presentWidth; const s = t.presentHeight; return e.box(e.types.tkhd, new Uint8Array([0, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 0, i >>> 24 & 255, i >>> 16 & 255, i >>> 8 & 255, 255 & i, 0, 0, 0, 0, n >>> 24 & 255, n >>> 16 & 255, n >>> 8 & 255, 255 & n, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, r >>> 8 & 255, 255 & r, 0, 0, s >>> 8 & 255, 255 & s, 0, 0])) }, e.mdia = function (t) { return e.box(e.types.mdia, e.mdhd(t), e.hdlr(t), e.minf(t)) }, e.mdhd = function (t) { const i = t.timescale; const n = t.duration; return e.box(e.types.mdhd, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, i >>> 24 & 255, i >>> 16 & 255, i >>> 8 & 255, 255 & i, n >>> 24 & 255, n >>> 16 & 255, n >>> 8 & 255, 255 & n, 85, 196, 0, 0])) }, e.hdlr = function (t) { let i = null; return i = t.type === 'audio' ? e.constants.HDLR_AUDIO : e.constants.HDLR_VIDEO, e.box(e.types.hdlr, i) }, e.minf = function (t) { let i = null; return i = t.type === 'audio' ? e.box(e.types.smhd, e.constants.SMHD) : e.box(e.types.vmhd, e.constants.VMHD), e.box(e.types.minf, i, e.dinf(), e.stbl(t)) }, e.dinf = function () { return e.box(e.types.dinf, e.box(e.types.dref, e.constants.DREF)) }, e.stbl = function (t) { return e.box(e.types.stbl, e.stsd(t), e.box(e.types.stts, e.constants.STTS), e.box(e.types.stsc, e.constants.STSC), e.box(e.types.stsz, e.constants.STSZ), e.box(e.types.stco, e.constants.STCO)) }, e.stsd = function (t) { return t.type === 'audio' ? t.codec === 'mp3' ? e.box(e.types.stsd, e.constants.STSD_PREFIX, e.mp3(t)) : e.box(e.types.stsd, e.constants.STSD_PREFIX, e.mp4a(t)) : e.box(e.types.stsd, e.constants.STSD_PREFIX, e.avc1(t)) }, e.mp3 = function (t) { const i = t.channelCount; const n = t.audioSampleRate; const r = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 16, 0, 0, 0, 0, n >>> 8 & 255, 255 & n, 0, 0]); return e.box(e.types['.mp3'], r) }, e.mp4a = function (t) { const i = t.channelCount; const n = t.audioSampleRate; const r = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, i, 0, 16, 0, 0, 0, 0, n >>> 8 & 255, 255 & n, 0, 0]); return e.box(e.types.mp4a, r, e.esds(t)) }, e.esds = function (t) { const i = t.config || []; const n = i.length; const r = new Uint8Array([0, 0, 0, 0, 3, 23 + n, 0, 1, 0, 4, 15 + n, 64, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5].concat([n]).concat(i).concat([6, 1, 2])); return e.box(e.types.esds, r) }, e.avc1 = function (t) { const i = t.avcc; const n = t.codecWidth; const r = t.codecHeight; const s = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, n >>> 8 & 255, 255 & n, r >>> 8 & 255, 255 & r, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 10, 120, 113, 113, 47, 102, 108, 118, 46, 106, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 255, 255]); return e.box(e.types.avc1, s, e.box(e.types.avcC, i)) }, e.mvex = function (t) { return e.box(e.types.mvex, e.trex(t)) }, e.trex = function (t) { const i = t.id; const n = new Uint8Array([0, 0, 0, 0, i >>> 24 & 255, i >>> 16 & 255, i >>> 8 & 255, 255 & i, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1]); return e.box(e.types.trex, n) }, e.moof = function (t, i) { return e.box(e.types.moof, e.mfhd(t.sequenceNumber), e.traf(t, i)) }, e.mfhd = function (t) { const i = new Uint8Array([0, 0, 0, 0, t >>> 24 & 255, t >>> 16 & 255, t >>> 8 & 255, 255 & t]); return e.box(e.types.mfhd, i) }, e.traf = function (t, i) { const n = t.id; const r = e.box(e.types.tfhd, new Uint8Array([0, 0, 0, 0, n >>> 24 & 255, n >>> 16 & 255, n >>> 8 & 255, 255 & n])); const s = e.box(e.types.tfdt, new Uint8Array([0, 0, 0, 0, i >>> 24 & 255, i >>> 16 & 255, i >>> 8 & 255, 255 & i])); const o = e.sdtp(t); const a = e.trun(t, o.byteLength + 16 + 16 + 8 + 16 + 8 + 8); return e.box(e.types.traf, r, s, a, o) }, e.sdtp = function (t) { for (var i = t.samples || [], n = i.length, r = new Uint8Array(4 + n), s = 0; s < n; s++) { const o = i[s].flags; r[s + 4] = o.isLeading << 6 | o.dependsOn << 4 | o.isDependedOn << 2 | o.hasRedundancy } return e.box(e.types.sdtp, r) }, e.trun = function (t, i) { const n = t.samples || []; const r = n.length; const s = 12 + 16 * r; const o = new Uint8Array(s); i += 8 + s, o.set([0, 0, 15, 1, r >>> 24 & 255, r >>> 16 & 255, r >>> 8 & 255, 255 & r, i >>> 24 & 255, i >>> 16 & 255, i >>> 8 & 255, 255 & i], 0); for (let a = 0; a < r; a++) { const h = n[a].duration; const u = n[a].size; const l = n[a].flags; const d = n[a].cts; o.set([h >>> 24 & 255, h >>> 16 & 255, h >>> 8 & 255, 255 & h, u >>> 24 & 255, u >>> 16 & 255, u >>> 8 & 255, 255 & u, l.isLeading << 2 | l.dependsOn, l.isDependedOn << 6 | l.hasRedundancy << 4 | l.isNonSync, 0, 0, d >>> 24 & 255, d >>> 16 & 255, d >>> 8 & 255, 255 & d], 12 + 16 * a) } return e.box(e.types.trun, o) }, e.mdat = function (t) { return e.box(e.types.mdat, t) }, e }()); v.init(); const y = v; const b = (function () { function e () {} return e.getSilentFrame = function (e, t) { if (e === 'mp4a.40.2') { if (t === 1) return new Uint8Array([0, 200, 0, 128, 35, 128]); if (t === 2) return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]); if (t === 3) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]); if (t === 4) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]); if (t === 5) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56]); if (t === 6) return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 224]) } else { if (t === 1) return new Uint8Array([1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); if (t === 2) return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]); if (t === 3) return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]) } return null }, e }()); const E = i(51); const S = (function () { function e (e) { this.TAG = 'MP4Remuxer', this._config = e, this._isLive = !0 === e.isLive, this._dtsBase = -1, this._dtsBaseInited = !1, this._audioDtsBase = 1 / 0, this._videoDtsBase = 1 / 0, this._audioNextDts = void 0, this._videoNextDts = void 0, this._audioStashedLastSample = null, this._videoStashedLastSample = null, this._audioMeta = null, this._videoMeta = null, this._audioSegmentInfoList = new E.J1('audio'), this._videoSegmentInfoList = new E.J1('video'), this._onInitSegment = null, this._onMediaSegment = null, this._forceFirstIDR = !(!o.Z.chrome || !(o.Z.version.major < 50 || o.Z.version.major === 50 && o.Z.version.build < 2661)), this._fillSilentAfterSeek = o.Z.msedge || o.Z.msie, this._mp3UseMpegAudio = !o.Z.firefox, this._fillAudioTimestampGap = this._config.fixAudioTimestampGap } return e.prototype.destroy = function () { this._dtsBase = -1, this._dtsBaseInited = !1, this._audioMeta = null, this._videoMeta = null, this._audioSegmentInfoList.clear(), this._audioSegmentInfoList = null, this._videoSegmentInfoList.clear(), this._videoSegmentInfoList = null, this._onInitSegment = null, this._onMediaSegment = null }, e.prototype.bindDataSource = function (e) { return e.onDataAvailable = this.remux.bind(this), e.onTrackMetadata = this._onTrackMetadataReceived.bind(this), this }, Object.defineProperty(e.prototype, 'onInitSegment', { get: function () { return this._onInitSegment }, set: function (e) { this._onInitSegment = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onMediaSegment', { get: function () { return this._onMediaSegment }, set: function (e) { this._onMediaSegment = e }, enumerable: !1, configurable: !0 }), e.prototype.insertDiscontinuity = function () { this._audioNextDts = this._videoNextDts = void 0 }, e.prototype.seek = function (e) { this._audioStashedLastSample = null, this._videoStashedLastSample = null, this._videoSegmentInfoList.clear(), this._audioSegmentInfoList.clear() }, e.prototype.remux = function (e, t) { if (!this._onMediaSegment) throw new d.rT('MP4Remuxer: onMediaSegment callback must be specificed!'); this._dtsBaseInited || this._calculateDtsBase(e, t), this._remuxVideo(t), this._remuxAudio(e) }, e.prototype._onTrackMetadataReceived = function (e, t) { let i = null; let n = 'mp4'; let r = t.codec; if (e === 'audio') this._audioMeta = t, t.codec === 'mp3' && this._mp3UseMpegAudio ? (n = 'mpeg', r = '', i = new Uint8Array()) : i = y.generateInitSegment(t); else { if (e !== 'video') return; this._videoMeta = t, i = y.generateInitSegment(t) } if (!this._onInitSegment) throw new d.rT('MP4Remuxer: onInitSegment callback must be specified!'); this._onInitSegment(e, { type: e, data: i.buffer, codec: r, container: e + '/' + n, mediaDuration: t.duration }) }, e.prototype._calculateDtsBase = function (e, t) { this._dtsBaseInited || (e.samples && e.samples.length && (this._audioDtsBase = e.samples[0].dts), t.samples && t.samples.length && (this._videoDtsBase = t.samples[0].dts), this._dtsBase = Math.min(this._audioDtsBase, this._videoDtsBase), this._dtsBaseInited = !0) }, e.prototype.flushStashedSamples = function () { const e = this._videoStashedLastSample; const t = this._audioStashedLastSample; const i = { type: 'video', id: 1, sequenceNumber: 0, samples: [], length: 0 }; e != null && (i.samples.push(e), i.length = e.length); const n = { type: 'audio', id: 2, sequenceNumber: 0, samples: [], length: 0 }; t != null && (n.samples.push(t), n.length = t.length), this._videoStashedLastSample = null, this._audioStashedLastSample = null, this._remuxVideo(i, !0), this._remuxAudio(n, !0) }, e.prototype._remuxAudio = function (e, t) { if (this._audioMeta != null) { let i; const n = e; const r = n.samples; let a = void 0; let h = -1; const u = this._audioMeta.refSampleDuration; const l = "mp3" === this._audioMeta.codec && this._mp3UseMpegAudio; const d = this._dtsBaseInited && void 0 === this._audioNextDts; let c = !1; if (r && r.length !== 0 && (r.length !== 1 || t)) { let f = 0; let _ = null; let p = 0; l ? (f = 0, p = n.length) : (f = 8, p = 8 + n.length); let m = null; if (r.length > 1 && (p -= (m = r.pop()).length), this._audioStashedLastSample != null) { var g = this._audioStashedLastSample; this._audioStashedLastSample = null, r.unshift(g), p += g.length }m != null && (this._audioStashedLastSample = m); const v = r[0].dts - this._dtsBase; if (this._audioNextDts)a = v - this._audioNextDts; else if (this._audioSegmentInfoList.isEmpty())a = 0, this._fillSilentAfterSeek && !this._videoSegmentInfoList.isEmpty() && this._audioMeta.originalCodec !== 'mp3' && (c = !0); else { const S = this._audioSegmentInfoList.getLastSampleBefore(v); if (S != null) { let A = v - (S.originalDts + S.duration); A <= 3 && (A = 0), a = v - (S.dts + S.duration + A) } else a = 0 } if (c) { const L = v - a; const R = this._videoSegmentInfoList.getLastSegmentBefore(v); if (R != null && R.beginDts < L) { if (P = b.getSilentFrame(this._audioMeta.originalCodec, this._audioMeta.channelCount)) { var w = R.beginDts; const O = L - R.beginDts; s.Z.v(this.TAG, 'InsertPrefixSilentAudio: dts: ' + w + ', duration: ' + O), r.unshift({ unit: P, dts: w, pts: w }), p += P.byteLength } } else c = !1 } for (var T = [], C = 0; C < r.length; C++) { var k = (g = r[C]).unit; const D = g.dts - this._dtsBase; let I = (w = D, !1); let M = null; let B = 0; if (!(D < -0.001)) { if (this._audioMeta.codec !== 'mp3') { let x = D; if (this._audioNextDts && (x = this._audioNextDts), (a = D - x) <= -3 * u) { s.Z.w(this.TAG, 'Dropping 1 audio frame (originalDts: ' + D + ' ms ,curRefDts: ' + x + ' ms) due to dtsCorrection: ' + a + ' ms overlap.'); continue } if (a >= 3 * u && this._fillAudioTimestampGap && !o.Z.safari) { I = !0; var P; const U = Math.floor(a / u); s.Z.w(this.TAG, 'Large audio timestamp gap detected, may cause AV sync to drift. Silent frames will be generated to avoid unsync.\noriginalDts: ' + D + ' ms, curRefDts: ' + x + ' ms, dtsCorrection: ' + Math.round(a) + ' ms, generate: ' + U + ' frames'), w = Math.floor(x), B = Math.floor(x + u) - w, (P = b.getSilentFrame(this._audioMeta.originalCodec, this._audioMeta.channelCount)) == null && (s.Z.w(this.TAG, 'Unable to generate silent frame for ' + this._audioMeta.originalCodec + ' with ' + this._audioMeta.channelCount + ' channels, repeat last frame'), P = k), M = []; for (let N = 0; N < U; N++) { x += u; const Z = Math.floor(x); const F = Math.floor(x + u) - Z; const G = { dts: Z, pts: Z, cts: 0, unit: P, size: P.byteLength, duration: F, originalDts: D, flags: { isLeading: 0, dependsOn: 1, isDependedOn: 0, hasRedundancy: 0 } }; M.push(G), p += G.size } this._audioNextDts = x + u } else w = Math.floor(x), B = Math.floor(x + u) - w, this._audioNextDts = x + u } else { if (w = D - a, C !== r.length - 1)B = r[C + 1].dts - this._dtsBase - a - w; else if (m != null)B = m.dts - this._dtsBase - a - w; else B = T.length >= 1 ? T[T.length - 1].duration : Math.floor(u); this._audioNextDts = w + B }h === -1 && (h = w), T.push({ dts: w, pts: w, cts: 0, unit: g.unit, size: g.unit.byteLength, duration: B, originalDts: D, flags: { isLeading: 0, dependsOn: 1, isDependedOn: 0, hasRedundancy: 0 } }), I && T.push.apply(T, M) } } if (T.length === 0) return n.samples = [], void (n.length = 0); l ? _ = new Uint8Array(p) : ((_ = new Uint8Array(p))[0] = p >>> 24 & 255, _[1] = p >>> 16 & 255, _[2] = p >>> 8 & 255, _[3] = 255 & p, _.set(y.types.mdat, 4)); for (C = 0; C < T.length; C++) { k = T[C].unit; _.set(k, f), f += k.byteLength } const j = T[T.length - 1]; i = j.dts + j.duration; const V = new E.Yy(); V.beginDts = h, V.endDts = i, V.beginPts = h, V.endPts = i, V.originalBeginDts = T[0].originalDts, V.originalEndDts = j.originalDts + j.duration, V.firstSample = new E.Wk(T[0].dts, T[0].pts, T[0].duration, T[0].originalDts, !1), V.lastSample = new E.Wk(j.dts, j.pts, j.duration, j.originalDts, !1), this._isLive || this._audioSegmentInfoList.append(V), n.samples = T, n.sequenceNumber++; let z = null; z = l ? new Uint8Array() : y.moof(n, h), n.samples = [], n.length = 0; const K = { type: 'audio', data: this._mergeBoxes(z, _).buffer, sampleCount: T.length, info: V }; l && d && (K.timestampOffset = h), this._onMediaSegment('audio', K) } } }, e.prototype._remuxVideo = function (e, t) { if (this._videoMeta != null) { let i; let n; const r = e; const s = r.samples; let o = void 0; let a = -1; let h = -1; if (s && s.length !== 0 && (s.length !== 1 || t)) { let u = 8; let l = null; let d = 8 + e.length; let c = null; if (s.length > 1 && (d -= (c = s.pop()).length), this._videoStashedLastSample != null) { var f = this._videoStashedLastSample; this._videoStashedLastSample = null, s.unshift(f), d += f.length }c != null && (this._videoStashedLastSample = c); const _ = s[0].dts - this._dtsBase; if (this._videoNextDts)o = _ - this._videoNextDts; else if (this._videoSegmentInfoList.isEmpty())o = 0; else { const p = this._videoSegmentInfoList.getLastSampleBefore(_); if (p != null) { let m = _ - (p.originalDts + p.duration); m <= 3 && (m = 0), o = _ - (p.dts + p.duration + m) } else o = 0 } for (var g = new E.Yy(), v = [], b = 0; b < s.length; b++) { const S = (f = s[b]).dts - this._dtsBase; const A = f.isKeyframe; const L = S - o; const R = f.cts; const w = L + R; a === -1 && (a = L, h = w); let O = 0; if (b !== s.length - 1)O = s[b + 1].dts - this._dtsBase - o - L; else if (c != null)O = c.dts - this._dtsBase - o - L; else O = v.length >= 1 ? v[v.length - 1].duration : Math.floor(this._videoMeta.refSampleDuration); if (A) { const T = new E.Wk(L, w, O, f.dts, !0); T.fileposition = f.fileposition, g.appendSyncPoint(T) }v.push({ dts: L, pts: w, cts: R, units: f.units, size: f.length, isKeyframe: A, duration: O, originalDts: S, flags: { isLeading: 0, dependsOn: A ? 2 : 1, isDependedOn: A ? 1 : 0, hasRedundancy: 0, isNonSync: A ? 0 : 1 } }) }(l = new Uint8Array(d))[0] = d >>> 24 & 255, l[1] = d >>> 16 & 255, l[2] = d >>> 8 & 255, l[3] = 255 & d, l.set(y.types.mdat, 4); for (b = 0; b < v.length; b++) for (let C = v[b].units; C.length;) { const k = C.shift().data; l.set(k, u), u += k.byteLength } const D = v[v.length - 1]; if (i = D.dts + D.duration, n = D.pts + D.duration, this._videoNextDts = i, g.beginDts = a, g.endDts = i, g.beginPts = h, g.endPts = n, g.originalBeginDts = v[0].originalDts, g.originalEndDts = D.originalDts + D.duration, g.firstSample = new E.Wk(v[0].dts, v[0].pts, v[0].duration, v[0].originalDts, v[0].isKeyframe), g.lastSample = new E.Wk(D.dts, D.pts, D.duration, D.originalDts, D.isKeyframe), this._isLive || this._videoSegmentInfoList.append(g), r.samples = v, r.sequenceNumber++, this._forceFirstIDR) { const I = v[0].flags; I.dependsOn = 2, I.isNonSync = 0 } const M = y.moof(r, a); r.samples = [], r.length = 0, this._onMediaSegment('video', { type: 'video', data: this._mergeBoxes(M, l).buffer, sampleCount: v.length, info: g }) } } }, e.prototype._mergeBoxes = function (e, t) { const i = new Uint8Array(e.byteLength + t.byteLength); return i.set(e, 0), i.set(t, e.byteLength), i }, e }()); const A = i(191); const L = i(257); var R = (function () { function e (e, t) { this.TAG = 'TransmuxingController', this._emitter = new (r())(), this._config = t, e.segments || (e.segments = [{ duration: e.duration, filesize: e.filesize, url: e.url }]), typeof e.cors !== 'boolean' && (e.cors = !0), typeof e.withCredentials !== 'boolean' && (e.withCredentials = !1), this._mediaDataSource = e, this._currentSegmentIndex = 0; let i = 0; this._mediaDataSource.segments.forEach(function (n) { n.timestampBase = i, i += n.duration, n.cors = e.cors, n.withCredentials = e.withCredentials, t.referrerPolicy && (n.referrerPolicy = t.referrerPolicy) }), isNaN(i) || this._mediaDataSource.duration === i || (this._mediaDataSource.duration = i), this._mediaInfo = null, this._demuxer = null, this._remuxer = null, this._ioctl = null, this._pendingSeekTime = null, this._pendingResolveSeekPoint = null, this._statisticsReporter = null } return e.prototype.destroy = function () { this._mediaInfo = null, this._mediaDataSource = null, this._statisticsReporter && this._disableStatisticsReporter(), this._ioctl && (this._ioctl.destroy(), this._ioctl = null), this._demuxer && (this._demuxer.destroy(), this._demuxer = null), this._remuxer && (this._remuxer.destroy(), this._remuxer = null), this._emitter.removeAllListeners(), this._emitter = null }, e.prototype.on = function (e, t) { this._emitter.addListener(e, t) }, e.prototype.off = function (e, t) { this._emitter.removeListener(e, t) }, e.prototype.start = function () { this._loadSegment(0), this._enableStatisticsReporter() }, e.prototype._loadSegment = function (e, t) { this._currentSegmentIndex = e; const i = this._mediaDataSource.segments[e]; const n = this._ioctl = new A.Z(i, this._config, e); n.onError = this._onIOException.bind(this), n.onSeeked = this._onIOSeeked.bind(this), n.onComplete = this._onIOComplete.bind(this), n.onRedirect = this._onIORedirect.bind(this), n.onRecoveredEarlyEof = this._onIORecoveredEarlyEof.bind(this), t ? this._demuxer.bindDataSource(this._ioctl) : n.onDataArrival = this._onInitChunkArrival.bind(this), n.open(t) }, e.prototype.stop = function () { this._internalAbort(), this._disableStatisticsReporter() }, e.prototype._internalAbort = function () { this._ioctl && (this._ioctl.destroy(), this._ioctl = null) }, e.prototype.pause = function () { this._ioctl && this._ioctl.isWorking() && (this._ioctl.pause(), this._disableStatisticsReporter()) }, e.prototype.resume = function () { this._ioctl && this._ioctl.isPaused() && (this._ioctl.resume(), this._enableStatisticsReporter()) }, e.prototype.seek = function (e) { if (this._mediaInfo != null && this._mediaInfo.isSeekable()) { const t = this._searchSegmentIndexContains(e); if (t === this._currentSegmentIndex) { const i = this._mediaInfo.segments[t]; if (i == null) this._pendingSeekTime = e; else { var n = i.getNearestKeyframe(e); this._remuxer.seek(n.milliseconds), this._ioctl.seek(n.fileposition), this._pendingResolveSeekPoint = n.milliseconds } } else { const r = this._mediaInfo.segments[t]; if (r == null) this._pendingSeekTime = e, this._internalAbort(), this._remuxer.seek(), this._remuxer.insertDiscontinuity(), this._loadSegment(t); else { n = r.getNearestKeyframe(e); this._internalAbort(), this._remuxer.seek(e), this._remuxer.insertDiscontinuity(), this._demuxer.resetMediaInfo(), this._demuxer.timestampBase = this._mediaDataSource.segments[t].timestampBase, this._loadSegment(t, n.fileposition), this._pendingResolveSeekPoint = n.milliseconds, this._reportSegmentMediaInfo(t) } } this._enableStatisticsReporter() } }, e.prototype._searchSegmentIndexContains = function (e) { for (var t = this._mediaDataSource.segments, i = t.length - 1, n = 0; n < t.length; n++) if (e < t[n].timestampBase) { i = n - 1; break } return i }, e.prototype._onInitChunkArrival = function (e, t) { const i = this; let n = null; let r = 0; if (t > 0) this._demuxer.bindDataSource(this._ioctl), this._demuxer.timestampBase = this._mediaDataSource.segments[this._currentSegmentIndex].timestampBase, r = this._demuxer.parseChunks(e, t); else if ((n = g.probe(e)).match) { this._demuxer = new g(n, this._config), this._remuxer || (this._remuxer = new S(this._config)); const o = this._mediaDataSource; o.duration == null || isNaN(o.duration) || (this._demuxer.overridedDuration = o.duration), typeof o.hasAudio === 'boolean' && (this._demuxer.overridedHasAudio = o.hasAudio), typeof o.hasVideo === 'boolean' && (this._demuxer.overridedHasVideo = o.hasVideo), this._demuxer.timestampBase = o.segments[this._currentSegmentIndex].timestampBase, this._demuxer.onError = this._onDemuxException.bind(this), this._demuxer.onMediaInfo = this._onMediaInfo.bind(this), this._demuxer.onMetaDataArrived = this._onMetaDataArrived.bind(this), this._demuxer.onScriptDataArrived = this._onScriptDataArrived.bind(this), this._remuxer.bindDataSource(this._demuxer.bindDataSource(this._ioctl)), this._remuxer.onInitSegment = this._onRemuxerInitSegmentArrival.bind(this), this._remuxer.onMediaSegment = this._onRemuxerMediaSegmentArrival.bind(this), r = this._demuxer.parseChunks(e, t) } else n = null, s.Z.e(this.TAG, 'Non-FLV, Unsupported media type!'), Promise.resolve().then(function () { i._internalAbort() }), this._emitter.emit(L.Z.DEMUX_ERROR, m.Z.FORMAT_UNSUPPORTED, 'Non-FLV, Unsupported media type'), r = 0; return r }, e.prototype._onMediaInfo = function (e) { const t = this; this._mediaInfo == null && (this._mediaInfo = Object.assign({}, e), this._mediaInfo.keyframesIndex = null, this._mediaInfo.segments = [], this._mediaInfo.segmentCount = this._mediaDataSource.segments.length, Object.setPrototypeOf(this._mediaInfo, a.Z.prototype)); const i = Object.assign({}, e); Object.setPrototypeOf(i, a.Z.prototype), this._mediaInfo.segments[this._currentSegmentIndex] = i, this._reportSegmentMediaInfo(this._currentSegmentIndex), this._pendingSeekTime != null && Promise.resolve().then(function () { const e = t._pendingSeekTime; t._pendingSeekTime = null, t.seek(e) }) }, e.prototype._onMetaDataArrived = function (e) { this._emitter.emit(L.Z.METADATA_ARRIVED, e) }, e.prototype._onScriptDataArrived = function (e) { this._emitter.emit(L.Z.SCRIPTDATA_ARRIVED, e) }, e.prototype._onIOSeeked = function () { this._remuxer.insertDiscontinuity() }, e.prototype._onIOComplete = function (e) { const t = e + 1; t < this._mediaDataSource.segments.length ? (this._internalAbort(), this._remuxer.flushStashedSamples(), this._loadSegment(t)) : (this._remuxer.flushStashedSamples(), this._emitter.emit(L.Z.LOADING_COMPLETE), this._disableStatisticsReporter()) }, e.prototype._onIORedirect = function (e) { const t = this._ioctl.extraData; this._mediaDataSource.segments[t].redirectedURL = e }, e.prototype._onIORecoveredEarlyEof = function () { this._emitter.emit(L.Z.RECOVERED_EARLY_EOF) }, e.prototype._onIOException = function (e, t) { s.Z.e(this.TAG, 'IOException: type = ' + e + ', code = ' + t.code + ', msg = ' + t.msg), this._emitter.emit(L.Z.IO_ERROR, e, t), this._disableStatisticsReporter() }, e.prototype._onDemuxException = function (e, t) { s.Z.e(this.TAG, 'DemuxException: type = ' + e + ', info = ' + t), this._emitter.emit(L.Z.DEMUX_ERROR, e, t) }, e.prototype._onRemuxerInitSegmentArrival = function (e, t) { this._emitter.emit(L.Z.INIT_SEGMENT, e, t) }, e.prototype._onRemuxerMediaSegmentArrival = function (e, t) { if (this._pendingSeekTime == null && (this._emitter.emit(L.Z.MEDIA_SEGMENT, e, t), this._pendingResolveSeekPoint != null && e === 'video')) { const i = t.info.syncPoints; let n = this._pendingResolveSeekPoint; this._pendingResolveSeekPoint = null, o.Z.safari && i.length > 0 && i[0].originalDts === n && (n = i[0].pts), this._emitter.emit(L.Z.RECOMMEND_SEEKPOINT, n) } }, e.prototype._enableStatisticsReporter = function () { this._statisticsReporter == null && (this._statisticsReporter = self.setInterval(this._reportStatisticsInfo.bind(this), this._config.statisticsInfoReportInterval)) }, e.prototype._disableStatisticsReporter = function () { this._statisticsReporter && (self.clearInterval(this._statisticsReporter), this._statisticsReporter = null) }, e.prototype._reportSegmentMediaInfo = function (e) { const t = this._mediaInfo.segments[e]; const i = Object.assign({}, t); i.duration = this._mediaInfo.duration, i.segmentCount = this._mediaInfo.segmentCount, delete i.segments, delete i.keyframesIndex, this._emitter.emit(L.Z.MEDIA_INFO, i) }, e.prototype._reportStatisticsInfo = function () { const e = {}; e.url = this._ioctl.currentURL, e.hasRedirect = this._ioctl.hasRedirect, e.hasRedirect && (e.redirectedURL = this._ioctl.currentRedirectedURL), e.speed = this._ioctl.currentSpeed, e.loaderType = this._ioctl.loaderType, e.currentSegmentIndex = this._currentSegmentIndex, e.totalSegmentCount = this._mediaDataSource.segments.length, this._emitter.emit(L.Z.STATISTICS_INFO, e) }, e }()) },
  19. 257: function (e, t) { 'use strict'; t.Z = { IO_ERROR: 'io_error', DEMUX_ERROR: 'demux_error', INIT_SEGMENT: 'init_segment', MEDIA_SEGMENT: 'media_segment', LOADING_COMPLETE: 'loading_complete', RECOVERED_EARLY_EOF: 'recovered_early_eof', MEDIA_INFO: 'media_info', METADATA_ARRIVED: 'metadata_arrived', SCRIPTDATA_ARRIVED: 'scriptdata_arrived', STATISTICS_INFO: 'statistics_info', RECOMMEND_SEEKPOINT: 'recommend_seekpoint' } },
  20. 82: function (e, t, i) { 'use strict'; i(846), i(219), i(949), i(257) },
  21. 600: function (e, t) { 'use strict'; t.Z = { OK: 'OK', FORMAT_ERROR: 'FormatError', FORMAT_UNSUPPORTED: 'FormatUnsupported', CODEC_UNSUPPORTED: 'CodecUnsupported' } },
  22. 60: function (e, t, i) { 'use strict'; i.d(t, { default: function () { return D } }); const n = i(219); const r = i(191); const s = { enableWorker: !1, enableStashBuffer: !0, stashInitialSize: void 0, isLive: !1, lazyLoad: !0, lazyLoadMaxDuration: 180, lazyLoadRecoverDuration: 30, deferLoadAfterSourceOpen: !0, autoCleanupMaxBackwardDuration: 180, autoCleanupMinBackwardDuration: 120, statisticsInfoReportInterval: 600, fixAudioTimestampGap: !0, accurateSeek: !1, seekType: 'range', seekParamStart: 'bstart', seekParamEnd: 'bend', rangeLoadZeroStart: !1, customSeekHandler: void 0, reuseRedirectedURL: !1, headers: void 0, customLoader: void 0 }; function o () { return Object.assign({}, s) } const a = (function () { function e () {} return e.supportMSEH264Playback = function () { return window.MediaSource && window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"') }, e.supportNetworkStreamIO = function () { const e = new r.Z({}, o()); const t = e.loaderType; return e.destroy(), t == 'fetch-stream-loader' || t == 'xhr-moz-chunked-loader' }, e.getNetworkLoaderTypeName = function () { const e = new r.Z({}, o()); const t = e.loaderType; return e.destroy(), t }, e.supportNativeMediaPlayback = function (t) { e.videoElement == null && (e.videoElement = window.document.createElement('video')); const i = e.videoElement.canPlayType(t); return i === 'probably' || i == 'maybe' }, e.getFeatureList = function () { const t = { mseFlvPlayback: !1, mseLiveFlvPlayback: !1, networkStreamIO: !1, networkLoaderName: '', nativeMP4H264Playback: !1, nativeWebmVP8Playback: !1, nativeWebmVP9Playback: !1 }; return t.mseFlvPlayback = e.supportMSEH264Playback(), t.networkStreamIO = e.supportNetworkStreamIO(), t.networkLoaderName = e.getNetworkLoaderTypeName(), t.mseLiveFlvPlayback = t.mseFlvPlayback && t.networkStreamIO, t.nativeMP4H264Playback = e.supportNativeMediaPlayback('video/mp4; codecs="avc1.42001E, mp4a.40.2"'), t.nativeWebmVP8Playback = e.supportNativeMediaPlayback('video/webm; codecs="vp8.0, vorbis"'), t.nativeWebmVP9Playback = e.supportNativeMediaPlayback('video/webm; codecs="vp9"'), t }, e }()); const h = i(939); const u = i(716); const l = i.n(u); const d = i(300); const c = i(538); const f = { ERROR: 'error', LOADING_COMPLETE: 'loading_complete', RECOVERED_EARLY_EOF: 'recovered_early_eof', MEDIA_INFO: 'media_info', METADATA_ARRIVED: 'metadata_arrived', SCRIPTDATA_ARRIVED: 'scriptdata_arrived', STATISTICS_INFO: 'statistics_info' }; const _ = i(397); const p = i.n(_); const m = i(846); const g = i(949); const v = i(257); const y = i(118); const b = (function () { function e (e, t) { if (this.TAG = 'Transmuxer', this._emitter = new (l())(), t.enableWorker && typeof Worker!=='undefined') try { this._worker = p()(82), this._workerDestroying = !1, this._worker.addEventListener('message', this._onWorkerMessage.bind(this)), this._worker.postMessage({ cmd: 'init', param: [e, t] }), this.e = { onLoggingConfigChanged: this._onLoggingConfigChanged.bind(this) }, m.Z.registerListener(this.e.onLoggingConfigChanged), this._worker.postMessage({ cmd: 'logging_config', param: m.Z.getConfig() }) } catch (i) { d.Z.e(this.TAG, 'Error while initialize transmuxing worker, fallback to inline transmuxing'), this._worker = null, this._controller = new g.Z(e, t) } else this._controller = new g.Z(e, t); if (this._controller) { const i = this._controller; i.on(v.Z.IO_ERROR, this._onIOError.bind(this)), i.on(v.Z.DEMUX_ERROR, this._onDemuxError.bind(this)), i.on(v.Z.INIT_SEGMENT, this._onInitSegment.bind(this)), i.on(v.Z.MEDIA_SEGMENT, this._onMediaSegment.bind(this)), i.on(v.Z.LOADING_COMPLETE, this._onLoadingComplete.bind(this)), i.on(v.Z.RECOVERED_EARLY_EOF, this._onRecoveredEarlyEof.bind(this)), i.on(v.Z.MEDIA_INFO, this._onMediaInfo.bind(this)), i.on(v.Z.METADATA_ARRIVED, this._onMetaDataArrived.bind(this)), i.on(v.Z.SCRIPTDATA_ARRIVED, this._onScriptDataArrived.bind(this)), i.on(v.Z.STATISTICS_INFO, this._onStatisticsInfo.bind(this)), i.on(v.Z.RECOMMEND_SEEKPOINT, this._onRecommendSeekpoint.bind(this)) } } return e.prototype.destroy = function () { this._worker ? this._workerDestroying || (this._workerDestroying = !0, this._worker.postMessage({ cmd: 'destroy' }), m.Z.removeListener(this.e.onLoggingConfigChanged), this.e = null) : (this._controller.destroy(), this._controller = null), this._emitter.removeAllListeners(), this._emitter = null }, e.prototype.on = function (e, t) { this._emitter.addListener(e, t) }, e.prototype.off = function (e, t) { this._emitter.removeListener(e, t) }, e.prototype.hasWorker = function () { return this._worker != null }, e.prototype.open = function () { this._worker ? this._worker.postMessage({ cmd: 'start' }) : this._controller.start() }, e.prototype.close = function () { this._worker ? this._worker.postMessage({ cmd: 'stop' }) : this._controller.stop() }, e.prototype.seek = function (e) { this._worker ? this._worker.postMessage({ cmd: 'seek', param: e }) : this._controller.seek(e) }, e.prototype.pause = function () { this._worker ? this._worker.postMessage({ cmd: 'pause' }) : this._controller.pause() }, e.prototype.resume = function () { this._worker ? this._worker.postMessage({ cmd: 'resume' }) : this._controller.resume() }, e.prototype._onInitSegment = function (e, t) { const i = this; Promise.resolve().then(function () { i._emitter.emit(v.Z.INIT_SEGMENT, e, t) }) }, e.prototype._onMediaSegment = function (e, t) { const i = this; Promise.resolve().then(function () { i._emitter.emit(v.Z.MEDIA_SEGMENT, e, t) }) }, e.prototype._onLoadingComplete = function () { const e = this; Promise.resolve().then(function () { e._emitter.emit(v.Z.LOADING_COMPLETE) }) }, e.prototype._onRecoveredEarlyEof = function () { const e = this; Promise.resolve().then(function () { e._emitter.emit(v.Z.RECOVERED_EARLY_EOF) }) }, e.prototype._onMediaInfo = function (e) { const t = this; Promise.resolve().then(function () { t._emitter.emit(v.Z.MEDIA_INFO, e) }) }, e.prototype._onMetaDataArrived = function (e) { const t = this; Promise.resolve().then(function () { t._emitter.emit(v.Z.METADATA_ARRIVED, e) }) }, e.prototype._onScriptDataArrived = function (e) { const t = this; Promise.resolve().then(function () { t._emitter.emit(v.Z.SCRIPTDATA_ARRIVED, e) }) }, e.prototype._onStatisticsInfo = function (e) { const t = this; Promise.resolve().then(function () { t._emitter.emit(v.Z.STATISTICS_INFO, e) }) }, e.prototype._onIOError = function (e, t) { const i = this; Promise.resolve().then(function () { i._emitter.emit(v.Z.IO_ERROR, e, t) }) }, e.prototype._onDemuxError = function (e, t) { const i = this; Promise.resolve().then(function () { i._emitter.emit(v.Z.DEMUX_ERROR, e, t) }) }, e.prototype._onRecommendSeekpoint = function (e) { const t = this; Promise.resolve().then(function () { t._emitter.emit(v.Z.RECOMMEND_SEEKPOINT, e) }) }, e.prototype._onLoggingConfigChanged = function (e) { this._worker && this._worker.postMessage({ cmd: 'logging_config', param: e }) }, e.prototype._onWorkerMessage = function (e) { const t = e.data; const i = t.data; if (t.msg === 'destroyed' || this._workerDestroying) return this._workerDestroying = !1, this._worker.terminate(), void (this._worker = null); switch (t.msg) { case v.Z.INIT_SEGMENT:case v.Z.MEDIA_SEGMENT:this._emitter.emit(t.msg, i.type, i.data); break; case v.Z.LOADING_COMPLETE:case v.Z.RECOVERED_EARLY_EOF:this._emitter.emit(t.msg); break; case v.Z.MEDIA_INFO:Object.setPrototypeOf(i, y.Z.prototype), this._emitter.emit(t.msg, i); break; case v.Z.METADATA_ARRIVED:case v.Z.SCRIPTDATA_ARRIVED:case v.Z.STATISTICS_INFO:this._emitter.emit(t.msg, i); break; case v.Z.IO_ERROR:case v.Z.DEMUX_ERROR:this._emitter.emit(t.msg, i.type, i.info); break; case v.Z.RECOMMEND_SEEKPOINT:this._emitter.emit(t.msg, i); break; case 'logcat_callback':d.Z.emitter.emit('log', i.type, i.logcat) } }, e }()); const E = { ERROR: 'error', SOURCE_OPEN: 'source_open', UPDATE_END: 'update_end', BUFFER_FULL: 'buffer_full' }; const S = i(51); const A = i(29); const L = (function () { function e (e) { this.TAG = 'MSEController', this._config = e, this._emitter = new (l())(), this._config.isLive && this._config.autoCleanupSourceBuffer == null && (this._config.autoCleanupSourceBuffer = !0), this.e = { onSourceOpen: this._onSourceOpen.bind(this), onSourceEnded: this._onSourceEnded.bind(this), onSourceClose: this._onSourceClose.bind(this), onSourceBufferError: this._onSourceBufferError.bind(this), onSourceBufferUpdateEnd: this._onSourceBufferUpdateEnd.bind(this) }, this._mediaSource = null, this._mediaSourceObjectURL = null, this._mediaElement = null, this._isBufferFull = !1, this._hasPendingEos = !1, this._requireSetMediaDuration = !1, this._pendingMediaDuration = 0, this._pendingSourceBufferInit = [], this._mimeTypes = { video: null, audio: null }, this._sourceBuffers = { video: null, audio: null }, this._lastInitSegments = { video: null, audio: null }, this._pendingSegments = { video: [], audio: [] }, this._pendingRemoveRanges = { video: [], audio: [] }, this._idrList = new S.Vn() } return e.prototype.destroy = function () { (this._mediaElement || this._mediaSource) && this.detachMediaElement(), this.e = null, this._emitter.removeAllListeners(), this._emitter = null }, e.prototype.on = function (e, t) { this._emitter.addListener(e, t) }, e.prototype.off = function (e, t) { this._emitter.removeListener(e, t) }, e.prototype.attachMediaElement = function (e) { if (this._mediaSource) throw new A.rT('MediaSource has been attached to an HTMLMediaElement!'); const t = this._mediaSource = new window.MediaSource(); t.addEventListener('sourceopen', this.e.onSourceOpen), t.addEventListener('sourceended', this.e.onSourceEnded), t.addEventListener('sourceclose', this.e.onSourceClose), this._mediaElement = e, this._mediaSourceObjectURL = window.URL.createObjectURL(this._mediaSource), e.src = this._mediaSourceObjectURL }, e.prototype.detachMediaElement = function () { if (this._mediaSource) { const e = this._mediaSource; for (const t in this._sourceBuffers) { const i = this._pendingSegments[t]; i.splice(0, i.length), this._pendingSegments[t] = null, this._pendingRemoveRanges[t] = null, this._lastInitSegments[t] = null; const n = this._sourceBuffers[t]; if (n) { if (e.readyState !== 'closed') { try { e.removeSourceBuffer(n) } catch (e) { d.Z.e(this.TAG, e.message) }n.removeEventListener('error', this.e.onSourceBufferError), n.removeEventListener('updateend', this.e.onSourceBufferUpdateEnd) } this._mimeTypes[t] = null, this._sourceBuffers[t] = null } } if (e.readyState === 'open') try { e.endOfStream() } catch (e) { d.Z.e(this.TAG, e.message) }e.removeEventListener('sourceopen', this.e.onSourceOpen), e.removeEventListener('sourceended', this.e.onSourceEnded), e.removeEventListener('sourceclose', this.e.onSourceClose), this._pendingSourceBufferInit = [], this._isBufferFull = !1, this._idrList.clear(), this._mediaSource = null } this._mediaElement && (this._mediaElement.src = '', this._mediaElement.removeAttribute('src'), this._mediaElement = null), this._mediaSourceObjectURL && (window.URL.revokeObjectURL(this._mediaSourceObjectURL), this._mediaSourceObjectURL = null) }, e.prototype.appendInitSegment = function (e, t) { if (!this._mediaSource || this._mediaSource.readyState !== 'open') return this._pendingSourceBufferInit.push(e), void this._pendingSegments[e.type].push(e); const i = e; let n = '' + i.container; i.codec && i.codec.length > 0 && (n += ';codecs=' + i.codec); let r = !1; if (d.Z.v(this.TAG, 'Received Initialization Segment, mimeType: ' + n), this._lastInitSegments[i.type] = i, n !== this._mimeTypes[i.type]) { if (this._mimeTypes[i.type])d.Z.v(this.TAG, 'Notice: ' + i.type + ' mimeType changed, origin: ' + this._mimeTypes[i.type] + ', target: ' + n); else { r = !0; try { const s = this._sourceBuffers[i.type] = this._mediaSource.addSourceBuffer(n); s.addEventListener('error', this.e.onSourceBufferError), s.addEventListener('updateend', this.e.onSourceBufferUpdateEnd) } catch (e) { return d.Z.e(this.TAG, e.message), void this._emitter.emit(E.ERROR, { code: e.code, msg: e.message }) } } this._mimeTypes[i.type] = n }t || this._pendingSegments[i.type].push(i), r || this._sourceBuffers[i.type] && !this._sourceBuffers[i.type].updating && this._doAppendSegments(), c.Z.safari && i.container === 'audio/mpeg' && i.mediaDuration > 0 && (this._requireSetMediaDuration = !0, this._pendingMediaDuration = i.mediaDuration / 1e3, this._updateMediaSourceDuration()) }, e.prototype.appendMediaSegment = function (e) { const t = e; this._pendingSegments[t.type].push(t), this._config.autoCleanupSourceBuffer && this._needCleanupSourceBuffer() && this._doCleanupSourceBuffer(); const i = this._sourceBuffers[t.type]; !i || i.updating || this._hasPendingRemoveRanges() || this._doAppendSegments() }, e.prototype.seek = function (e) { for (const t in this._sourceBuffers) if (this._sourceBuffers[t]) { const i = this._sourceBuffers[t]; if (this._mediaSource.readyState === 'open') try { i.abort() } catch (e) { d.Z.e(this.TAG, e.message) } this._idrList.clear(); const n = this._pendingSegments[t]; if (n.splice(0, n.length), this._mediaSource.readyState !== 'closed') { for (let r = 0; r < i.buffered.length; r++) { const s = i.buffered.start(r); const o = i.buffered.end(r); this._pendingRemoveRanges[t].push({ start: s, end: o }) } if (i.updating || this._doRemoveRanges(), c.Z.safari) { const a = this._lastInitSegments[t]; a && (this._pendingSegments[t].push(a), i.updating || this._doAppendSegments()) } } } }, e.prototype.endOfStream = function () { const e = this._mediaSource; const t = this._sourceBuffers; e && e.readyState === 'open' ? t.video && t.video.updating || t.audio && t.audio.updating ? this._hasPendingEos = !0 : (this._hasPendingEos = !1, e.endOfStream()) : e && e.readyState === 'closed' && this._hasPendingSegments() && (this._hasPendingEos = !0) }, e.prototype.getNearestKeyframe = function (e) { return this._idrList.getLastSyncPointBeforeDts(e) }, e.prototype._needCleanupSourceBuffer = function () { if (!this._config.autoCleanupSourceBuffer) return !1; const e = this._mediaElement.currentTime; for (const t in this._sourceBuffers) { const i = this._sourceBuffers[t]; if (i) { const n = i.buffered; if (n.length >= 1 && e - n.start(0) >= this._config.autoCleanupMaxBackwardDuration) return !0 } } return !1 }, e.prototype._doCleanupSourceBuffer = function () { const e = this._mediaElement.currentTime; for (const t in this._sourceBuffers) { const i = this._sourceBuffers[t]; if (i) { for (var n = i.buffered, r = !1, s = 0; s < n.length; s++) { const o = n.start(s); const a = n.end(s); if (o <= e && e < a + 3) { if (e - o >= this._config.autoCleanupMaxBackwardDuration) { r = !0; const h = e - this._config.autoCleanupMinBackwardDuration; this._pendingRemoveRanges[t].push({ start: o, end: h }) } } else a < e && (r = !0, this._pendingRemoveRanges[t].push({ start: o, end: a })) }r && !i.updating && this._doRemoveRanges() } } }, e.prototype._updateMediaSourceDuration = function () { const e = this._sourceBuffers; if (this._mediaElement.readyState !== 0 && this._mediaSource.readyState === 'open' && !(e.video && e.video.updating || e.audio && e.audio.updating)) { const t = this._mediaSource.duration; const i = this._pendingMediaDuration; i > 0 && (isNaN(t) || i > t) && (d.Z.v(this.TAG, 'Update MediaSource duration from ' + t + ' to ' + i), this._mediaSource.duration = i), this._requireSetMediaDuration = !1, this._pendingMediaDuration = 0 } }, e.prototype._doRemoveRanges = function () { for (const e in this._pendingRemoveRanges) if (this._sourceBuffers[e] && !this._sourceBuffers[e].updating) for (let t = this._sourceBuffers[e], i = this._pendingRemoveRanges[e]; i.length && !t.updating;) { const n = i.shift(); t.remove(n.start, n.end) } }, e.prototype._doAppendSegments = function () { const e = this._pendingSegments; for (const t in e) if (this._sourceBuffers[t] && !this._sourceBuffers[t].updating && e[t].length > 0) { const i = e[t].shift(); if (i.timestampOffset) { const n = this._sourceBuffers[t].timestampOffset; const r = i.timestampOffset / 1e3; Math.abs(n - r) > 0.1 && (d.Z.v(this.TAG, 'Update MPEG audio timestampOffset from ' + n + ' to ' + r), this._sourceBuffers[t].timestampOffset = r), delete i.timestampOffset } if (!i.data || i.data.byteLength === 0) continue; try { this._sourceBuffers[t].appendBuffer(i.data), this._isBufferFull = !1, t === 'video' && i.hasOwnProperty('info') && this._idrList.appendArray(i.info.syncPoints) } catch (e) { this._pendingSegments[t].unshift(i), e.code === 22 ? (this._isBufferFull || this._emitter.emit(E.BUFFER_FULL), this._isBufferFull = !0) : (d.Z.e(this.TAG, e.message), this._emitter.emit(E.ERROR, { code: e.code, msg: e.message })) } } }, e.prototype._onSourceOpen = function () { if (d.Z.v(this.TAG, 'MediaSource onSourceOpen'), this._mediaSource.removeEventListener('sourceopen', this.e.onSourceOpen), this._pendingSourceBufferInit.length > 0) for (let e = this._pendingSourceBufferInit; e.length;) { const t = e.shift(); this.appendInitSegment(t, !0) } this._hasPendingSegments() && this._doAppendSegments(), this._emitter.emit(E.SOURCE_OPEN) }, e.prototype._onSourceEnded = function () { d.Z.v(this.TAG, 'MediaSource onSourceEnded') }, e.prototype._onSourceClose = function () { d.Z.v(this.TAG, 'MediaSource onSourceClose'), this._mediaSource && this.e != null && (this._mediaSource.removeEventListener('sourceopen', this.e.onSourceOpen), this._mediaSource.removeEventListener('sourceended', this.e.onSourceEnded), this._mediaSource.removeEventListener('sourceclose', this.e.onSourceClose)) }, e.prototype._hasPendingSegments = function () { const e = this._pendingSegments; return e.video.length > 0 || e.audio.length > 0 }, e.prototype._hasPendingRemoveRanges = function () { const e = this._pendingRemoveRanges; return e.video.length > 0 || e.audio.length > 0 }, e.prototype._onSourceBufferUpdateEnd = function () { this._requireSetMediaDuration ? this._updateMediaSourceDuration() : this._hasPendingRemoveRanges() ? this._doRemoveRanges() : this._hasPendingSegments() ? this._doAppendSegments() : this._hasPendingEos && this.endOfStream(), this._emitter.emit(E.UPDATE_END) }, e.prototype._onSourceBufferError = function (e) { d.Z.e(this.TAG, 'SourceBuffer Error: ' + e) }, e }()); const R = i(600); const w = { NETWORK_ERROR: 'NetworkError', MEDIA_ERROR: 'MediaError', OTHER_ERROR: 'OtherError' }; const O = { NETWORK_EXCEPTION: h.nm.EXCEPTION, NETWORK_STATUS_CODE_INVALID: h.nm.HTTP_STATUS_CODE_INVALID, NETWORK_TIMEOUT: h.nm.CONNECTING_TIMEOUT, NETWORK_UNRECOVERABLE_EARLY_EOF: h.nm.UNRECOVERABLE_EARLY_EOF, MEDIA_MSE_ERROR: 'MediaMSEError', MEDIA_FORMAT_ERROR: R.Z.FORMAT_ERROR, MEDIA_FORMAT_UNSUPPORTED: R.Z.FORMAT_UNSUPPORTED, MEDIA_CODEC_UNSUPPORTED: R.Z.CODEC_UNSUPPORTED }; const T = (function () { function e (e, t) { if (this.TAG = 'FlvPlayer', this._type = 'FlvPlayer', this._emitter = new (l())(), this._config = o(), typeof t==='object' && Object.assign(this._config, t), e.type.toLowerCase() !== 'flv') throw new A.OC('FlvPlayer requires an flv MediaDataSource input!'); !0 === e.isLive && (this._config.isLive = !0), this.e = { onvLoadedMetadata: this._onvLoadedMetadata.bind(this), onvSeeking: this._onvSeeking.bind(this), onvCanPlay: this._onvCanPlay.bind(this), onvStalled: this._onvStalled.bind(this), onvProgress: this._onvProgress.bind(this) }, self.performance && self.performance.now ? this._now = self.performance.now.bind(self.performance) : this._now = Date.now, this._pendingSeekTime = null, this._requestSetTime = !1, this._seekpointRecord = null, this._progressChecker = null, this._mediaDataSource = e, this._mediaElement = null, this._msectl = null, this._transmuxer = null, this._mseSourceOpened = !1, this._hasPendingLoad = !1, this._receivedCanPlay = !1, this._mediaInfo = null, this._statisticsInfo = null; const i = c.Z.chrome && (c.Z.version.major < 50 || c.Z.version.major === 50 && c.Z.version.build < 2661); this._alwaysSeekKeyframe = !!(i || c.Z.msedge || c.Z.msie), this._alwaysSeekKeyframe && (this._config.accurateSeek = !1) } return e.prototype.destroy = function () { this._progressChecker != null && (window.clearInterval(this._progressChecker), this._progressChecker = null), this._transmuxer && this.unload(), this._mediaElement && this.detachMediaElement(), this.e = null, this._mediaDataSource = null, this._emitter.removeAllListeners(), this._emitter = null }, e.prototype.on = function (e, t) { const i = this; e === f.MEDIA_INFO ? this._mediaInfo != null && Promise.resolve().then(function () { i._emitter.emit(f.MEDIA_INFO, i.mediaInfo) }) : e === f.STATISTICS_INFO && this._statisticsInfo != null && Promise.resolve().then(function () { i._emitter.emit(f.STATISTICS_INFO, i.statisticsInfo) }), this._emitter.addListener(e, t) }, e.prototype.off = function (e, t) { this._emitter.removeListener(e, t) }, e.prototype.attachMediaElement = function (e) { const t = this; if (this._mediaElement = e, e.addEventListener('loadedmetadata', this.e.onvLoadedMetadata), e.addEventListener('seeking', this.e.onvSeeking), e.addEventListener('canplay', this.e.onvCanPlay), e.addEventListener('stalled', this.e.onvStalled), e.addEventListener('progress', this.e.onvProgress), this._msectl = new L(this._config), this._msectl.on(E.UPDATE_END, this._onmseUpdateEnd.bind(this)), this._msectl.on(E.BUFFER_FULL, this._onmseBufferFull.bind(this)), this._msectl.on(E.SOURCE_OPEN, function () { t._mseSourceOpened = !0, t._hasPendingLoad && (t._hasPendingLoad = !1, t.load()) }), this._msectl.on(E.ERROR, function (e) { t._emitter.emit(f.ERROR, w.MEDIA_ERROR, O.MEDIA_MSE_ERROR, e) }), this._msectl.attachMediaElement(e), this._pendingSeekTime != null) try { e.currentTime = this._pendingSeekTime, this._pendingSeekTime = null } catch (e) {} }, e.prototype.detachMediaElement = function () { this._mediaElement && (this._msectl.detachMediaElement(), this._mediaElement.removeEventListener('loadedmetadata', this.e.onvLoadedMetadata), this._mediaElement.removeEventListener('seeking', this.e.onvSeeking), this._mediaElement.removeEventListener('canplay', this.e.onvCanPlay), this._mediaElement.removeEventListener('stalled', this.e.onvStalled), this._mediaElement.removeEventListener('progress', this.e.onvProgress), this._mediaElement = null), this._msectl && (this._msectl.destroy(), this._msectl = null) }, e.prototype.load = function () { const e = this; if (!this._mediaElement) throw new A.rT('HTMLMediaElement must be attached before load()!'); if (this._transmuxer) throw new A.rT('FlvPlayer.load() has been called, please call unload() first!'); this._hasPendingLoad || (this._config.deferLoadAfterSourceOpen && !1 === this._mseSourceOpened ? this._hasPendingLoad = !0 : (this._mediaElement.readyState > 0 && (this._requestSetTime = !0, this._mediaElement.currentTime = 0), this._transmuxer = new b(this._mediaDataSource, this._config), this._transmuxer.on(v.Z.INIT_SEGMENT, function (t, i) { e._msectl.appendInitSegment(i) }), this._transmuxer.on(v.Z.MEDIA_SEGMENT, function (t, i) { if (e._msectl.appendMediaSegment(i), e._config.lazyLoad && !e._config.isLive) { let n = e._mediaElement.currentTime; i.info.endDts >= 1e3 * (n + e._config.lazyLoadMaxDuration) && e._progressChecker == null && (d.Z.v(e.TAG, 'Maximum buffering duration exceeded, suspend transmuxing task'), e._suspendTransmuxer()) } }), this._transmuxer.on(v.Z.LOADING_COMPLETE, function () { e._msectl.endOfStream(), e._emitter.emit(f.LOADING_COMPLETE) }), this._transmuxer.on(v.Z.RECOVERED_EARLY_EOF, function () { e._emitter.emit(f.RECOVERED_EARLY_EOF) }), this._transmuxer.on(v.Z.IO_ERROR, function (t, i) { e._emitter.emit(f.ERROR, w.NETWORK_ERROR, t, i) }), this._transmuxer.on(v.Z.DEMUX_ERROR, function (t, i) { e._emitter.emit(f.ERROR, w.MEDIA_ERROR, t, { code: -1, msg: i }) }), this._transmuxer.on(v.Z.MEDIA_INFO, function (t) { e._mediaInfo = t, e._emitter.emit(f.MEDIA_INFO, Object.assign({}, t)) }), this._transmuxer.on(v.Z.METADATA_ARRIVED, function (t) { e._emitter.emit(f.METADATA_ARRIVED, t) }), this._transmuxer.on(v.Z.SCRIPTDATA_ARRIVED, function (t) { e._emitter.emit(f.SCRIPTDATA_ARRIVED, t) }), this._transmuxer.on(v.Z.STATISTICS_INFO, function (t) { e._statisticsInfo = e._fillStatisticsInfo(t), e._emitter.emit(f.STATISTICS_INFO, Object.assign({}, e._statisticsInfo)) }), this._transmuxer.on(v.Z.RECOMMEND_SEEKPOINT, function (t) { e._mediaElement && !e._config.accurateSeek && (e._requestSetTime = !0, e._mediaElement.currentTime = t / 1e3) }), this._transmuxer.open())) }, e.prototype.unload = function () { this._mediaElement && this._mediaElement.pause(), this._msectl && this._msectl.seek(0), this._transmuxer && (this._transmuxer.close(), this._transmuxer.destroy(), this._transmuxer = null) }, e.prototype.play = function () { return this._mediaElement.play() }, e.prototype.pause = function () { this._mediaElement.pause() }, Object.defineProperty(e.prototype, 'type', { get: function () { return this._type }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'buffered', { get: function () { return this._mediaElement.buffered }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'duration', { get: function () { return this._mediaElement.duration }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'volume', { get: function () { return this._mediaElement.volume }, set: function (e) { this._mediaElement.volume = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'muted', { get: function () { return this._mediaElement.muted }, set: function (e) { this._mediaElement.muted = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'currentTime', { get: function () { return this._mediaElement ? this._mediaElement.currentTime : 0 }, set: function (e) { this._mediaElement ? this._internalSeek(e) : this._pendingSeekTime = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'mediaInfo', { get: function () { return Object.assign({}, this._mediaInfo) }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'statisticsInfo', { get: function () { return this._statisticsInfo == null && (this._statisticsInfo = {}), this._statisticsInfo = this._fillStatisticsInfo(this._statisticsInfo), Object.assign({}, this._statisticsInfo) }, enumerable: !1, configurable: !0 }), e.prototype._fillStatisticsInfo = function (e) { if (e.playerType = this._type, !(this._mediaElement instanceof HTMLVideoElement)) return e; let t = !0; let i = 0; let n = 0; if (this._mediaElement.getVideoPlaybackQuality) { const r = this._mediaElement.getVideoPlaybackQuality(); i = r.totalVideoFrames, n = r.droppedVideoFrames } else this._mediaElement.webkitDecodedFrameCount != null ? (i = this._mediaElement.webkitDecodedFrameCount, n = this._mediaElement.webkitDroppedFrameCount) : t = !1; return t && (e.decodedFrames = i, e.droppedFrames = n), e }, e.prototype._onmseUpdateEnd = function () { if (this._config.lazyLoad && !this._config.isLive) { for (var e = this._mediaElement.buffered, t = this._mediaElement.currentTime, i = 0, n = 0; n < e.length; n++) { const r = e.start(n); const s = e.end(n); if (r <= t && t < s) { r, i = s; break } }i >= t + this._config.lazyLoadMaxDuration && this._progressChecker == null && (d.Z.v(this.TAG, 'Maximum buffering duration exceeded, suspend transmuxing task'), this._suspendTransmuxer()) } }, e.prototype._onmseBufferFull = function () { d.Z.v(this.TAG, 'MSE SourceBuffer is full, suspend transmuxing task'), this._progressChecker == null && this._suspendTransmuxer() }, e.prototype._suspendTransmuxer = function () { this._transmuxer && (this._transmuxer.pause(), this._progressChecker == null && (this._progressChecker = window.setInterval(this._checkProgressAndResume.bind(this), 1e3))) }, e.prototype._checkProgressAndResume = function () { for (var e = this._mediaElement.currentTime, t = this._mediaElement.buffered, i = !1, n = 0; n < t.length; n++) { const r = t.start(n); const s = t.end(n); if (e >= r && e < s) { e >= s - this._config.lazyLoadRecoverDuration && (i = !0); break } }i && (window.clearInterval(this._progressChecker), this._progressChecker = null, i && (d.Z.v(this.TAG, 'Continue loading from paused position'), this._transmuxer.resume())) }, e.prototype._isTimepointBuffered = function (e) { for (let t = this._mediaElement.buffered, i = 0; i < t.length; i++) { const n = t.start(i); const r = t.end(i); if (e >= n && e < r) return !0 } return !1 }, e.prototype._internalSeek = function (e) { const t = this._isTimepointBuffered(e); let i = !1; let n = 0; if (e < 1 && this._mediaElement.buffered.length > 0) { const r = this._mediaElement.buffered.start(0); (r < 1 && e < r || c.Z.safari) && (i = !0, n = c.Z.safari ? 0.1 : r) } if (i) this._requestSetTime = !0, this._mediaElement.currentTime = n; else if (t) { if (this._alwaysSeekKeyframe) { const s = this._msectl.getNearestKeyframe(Math.floor(1e3 * e)); this._requestSetTime = !0, this._mediaElement.currentTime = s != null ? s.dts / 1e3 : e } else this._requestSetTime = !0, this._mediaElement.currentTime = e; this._progressChecker != null && this._checkProgressAndResume() } else this._progressChecker != null && (window.clearInterval(this._progressChecker), this._progressChecker = null), this._msectl.seek(e), this._transmuxer.seek(Math.floor(1e3 * e)), this._config.accurateSeek && (this._requestSetTime = !0, this._mediaElement.currentTime = e) }, e.prototype._checkAndApplyUnbufferedSeekpoint = function () { if (this._seekpointRecord) if (this._seekpointRecord.recordTime <= this._now() - 100) { const e = this._mediaElement.currentTime; this._seekpointRecord = null, this._isTimepointBuffered(e) || (this._progressChecker != null && (window.clearTimeout(this._progressChecker), this._progressChecker = null), this._msectl.seek(e), this._transmuxer.seek(Math.floor(1e3 * e)), this._config.accurateSeek && (this._requestSetTime = !0, this._mediaElement.currentTime = e)) } else window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this), 50) }, e.prototype._checkAndResumeStuckPlayback = function (e) { const t = this._mediaElement; if (e || !this._receivedCanPlay || t.readyState < 2) { const i = t.buffered; i.length > 0 && t.currentTime < i.start(0) && (d.Z.w(this.TAG, 'Playback seems stuck at ' + t.currentTime + ', seek to ' + i.start(0)), this._requestSetTime = !0, this._mediaElement.currentTime = i.start(0), this._mediaElement.removeEventListener('progress', this.e.onvProgress)) } else this._mediaElement.removeEventListener('progress', this.e.onvProgress) }, e.prototype._onvLoadedMetadata = function (e) { this._pendingSeekTime != null && (this._mediaElement.currentTime = this._pendingSeekTime, this._pendingSeekTime = null) }, e.prototype._onvSeeking = function (e) { const t = this._mediaElement.currentTime; const i = this._mediaElement.buffered; if (this._requestSetTime) this._requestSetTime = !1; else { if (t < 1 && i.length > 0) { const n = i.start(0); if (n < 1 && t < n || c.Z.safari) return this._requestSetTime = !0, void (this._mediaElement.currentTime = c.Z.safari ? 0.1 : n) } if (this._isTimepointBuffered(t)) { if (this._alwaysSeekKeyframe) { const r = this._msectl.getNearestKeyframe(Math.floor(1e3 * t)); r != null && (this._requestSetTime = !0, this._mediaElement.currentTime = r.dts / 1e3) } this._progressChecker != null && this._checkProgressAndResume() } else this._seekpointRecord = { seekPoint: t, recordTime: this._now() }, window.setTimeout(this._checkAndApplyUnbufferedSeekpoint.bind(this), 50) } }, e.prototype._onvCanPlay = function (e) { this._receivedCanPlay = !0, this._mediaElement.removeEventListener('canplay', this.e.onvCanPlay) }, e.prototype._onvStalled = function (e) { this._checkAndResumeStuckPlayback(!0) }, e.prototype._onvProgress = function (e) { this._checkAndResumeStuckPlayback() }, e }()); const C = (function () { function e (e, t) { if (this.TAG = 'NativePlayer', this._type = 'NativePlayer', this._emitter = new (l())(), this._config = o(), typeof t === 'object' && Object.assign(this._config, t), e.type.toLowerCase() === 'flv') throw new A.OC("NativePlayer does't support flv MediaDataSource input!"); if (e.hasOwnProperty('segments')) throw new A.OC('NativePlayer(' + e.type + ") doesn't support multipart playback!"); this.e = { onvLoadedMetadata: this._onvLoadedMetadata.bind(this) }, this._pendingSeekTime = null, this._statisticsReporter = null, this._mediaDataSource = e, this._mediaElement = null } return e.prototype.destroy = function () { this._mediaElement && (this.unload(), this.detachMediaElement()), this.e = null, this._mediaDataSource = null, this._emitter.removeAllListeners(), this._emitter = null }, e.prototype.on = function (e, t) { const i = this; e === f.MEDIA_INFO ? this._mediaElement != null && this._mediaElement.readyState !== 0 && Promise.resolve().then(function () { i._emitter.emit(f.MEDIA_INFO, i.mediaInfo) }) : e === f.STATISTICS_INFO && this._mediaElement != null && this._mediaElement.readyState !== 0 && Promise.resolve().then(function () { i._emitter.emit(f.STATISTICS_INFO, i.statisticsInfo) }), this._emitter.addListener(e, t) }, e.prototype.off = function (e, t) { this._emitter.removeListener(e, t) }, e.prototype.attachMediaElement = function (e) { if (this._mediaElement = e, e.addEventListener('loadedmetadata', this.e.onvLoadedMetadata), this._pendingSeekTime != null) try { e.currentTime = this._pendingSeekTime, this._pendingSeekTime = null } catch (e) {} }, e.prototype.detachMediaElement = function () { this._mediaElement && (this._mediaElement.src = '', this._mediaElement.removeAttribute('src'), this._mediaElement.removeEventListener('loadedmetadata', this.e.onvLoadedMetadata), this._mediaElement = null), this._statisticsReporter != null && (window.clearInterval(this._statisticsReporter), this._statisticsReporter = null) }, e.prototype.load = function () { if (!this._mediaElement) throw new A.rT('HTMLMediaElement must be attached before load()!'); this._mediaElement.src = this._mediaDataSource.url, this._mediaElement.readyState > 0 && (this._mediaElement.currentTime = 0), this._mediaElement.preload = 'auto', this._mediaElement.load(), this._statisticsReporter = window.setInterval(this._reportStatisticsInfo.bind(this), this._config.statisticsInfoReportInterval) }, e.prototype.unload = function () { this._mediaElement && (this._mediaElement.src = '', this._mediaElement.removeAttribute('src')), this._statisticsReporter != null && (window.clearInterval(this._statisticsReporter), this._statisticsReporter = null) }, e.prototype.play = function () { return this._mediaElement.play() }, e.prototype.pause = function () { this._mediaElement.pause() }, Object.defineProperty(e.prototype, 'type', { get: function () { return this._type }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'buffered', { get: function () { return this._mediaElement.buffered }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'duration', { get: function () { return this._mediaElement.duration }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'volume', { get: function () { return this._mediaElement.volume }, set: function (e) { this._mediaElement.volume = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'muted', { get: function () { return this._mediaElement.muted }, set: function (e) { this._mediaElement.muted = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'currentTime', { get: function () { return this._mediaElement ? this._mediaElement.currentTime : 0 }, set: function (e) { this._mediaElement ? this._mediaElement.currentTime = e : this._pendingSeekTime = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'mediaInfo', { get: function () { const e = { mimeType: (this._mediaElement instanceof HTMLAudioElement ? 'audio/' : 'video/') + this._mediaDataSource.type }; return this._mediaElement && (e.duration = Math.floor(1e3 * this._mediaElement.duration), this._mediaElement instanceof HTMLVideoElement && (e.width = this._mediaElement.videoWidth, e.height = this._mediaElement.videoHeight)), e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'statisticsInfo', { get: function () { const e = { playerType: this._type, url: this._mediaDataSource.url }; if (!(this._mediaElement instanceof HTMLVideoElement)) return e; let t = !0; let i = 0; let n = 0; if (this._mediaElement.getVideoPlaybackQuality) { const r = this._mediaElement.getVideoPlaybackQuality(); i = r.totalVideoFrames, n = r.droppedVideoFrames } else this._mediaElement.webkitDecodedFrameCount != null ? (i = this._mediaElement.webkitDecodedFrameCount, n = this._mediaElement.webkitDroppedFrameCount) : t = !1; return t && (e.decodedFrames = i, e.droppedFrames = n), e }, enumerable: !1, configurable: !0 }), e.prototype._onvLoadedMetadata = function (e) { this._pendingSeekTime != null && (this._mediaElement.currentTime = this._pendingSeekTime, this._pendingSeekTime = null), this._emitter.emit(f.MEDIA_INFO, this.mediaInfo) }, e.prototype._reportStatisticsInfo = function () { this._emitter.emit(f.STATISTICS_INFO, this.statisticsInfo) }, e }()); n.Z.install(); const k = { createPlayer: function (e, t) { const i = e; if (i == null || typeof i !== 'object') throw new A.OC('MediaDataSource must be an javascript object!'); if (!i.hasOwnProperty('type')) throw new A.OC('MediaDataSource must has type field to indicate video file type!'); switch (i.type) { case 'flv':return new T(i, t); default:return new C(i, t) } }, isSupported: function () { return a.supportMSEH264Playback() }, getFeatureList: function () { return a.getFeatureList() } }; k.BaseLoader = h.fp, k.LoaderStatus = h.GM, k.LoaderErrors = h.nm, k.Events = f, k.ErrorTypes = w, k.ErrorDetails = O, k.FlvPlayer = T, k.NativePlayer = C, k.LoggingControl = m.Z, Object.defineProperty(k, 'version', { enumerable: !0, get: function () { return '1.6.2' } }); var D = k },
  23. 324: function (e, t, i) { e.exports = i(60).default },
  24. 191: function (e, t, i) { 'use strict'; i.d(t, { Z: function () { return y } }); let n; const r = i(300); const s = (function () { function e () { this._firstCheckpoint = 0, this._lastCheckpoint = 0, this._intervalBytes = 0, this._totalBytes = 0, this._lastSecondBytes = 0, self.performance && self.performance.now ? this._now = self.performance.now.bind(self.performance) : this._now = Date.now } return e.prototype.reset = function () { this._firstCheckpoint = this._lastCheckpoint = 0, this._totalBytes = this._intervalBytes = 0, this._lastSecondBytes = 0 }, e.prototype.addBytes = function (e) { this._firstCheckpoint === 0 ? (this._firstCheckpoint = this._now(), this._lastCheckpoint = this._firstCheckpoint, this._intervalBytes += e, this._totalBytes += e) : this._now() - this._lastCheckpoint < 1e3 ? (this._intervalBytes += e, this._totalBytes += e) : (this._lastSecondBytes = this._intervalBytes, this._intervalBytes = e, this._totalBytes += e, this._lastCheckpoint = this._now()) }, Object.defineProperty(e.prototype, 'currentKBps', { get: function () { this.addBytes(0); let e = (this._now() - this._lastCheckpoint) / 1e3; return e == 0 && (e = 1), this._intervalBytes / e / 1024 }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'lastSecondKBps', { get: function () { return this.addBytes(0), this._lastSecondBytes !== 0 ? this._lastSecondBytes / 1024 : this._now() - this._lastCheckpoint >= 500 ? this.currentKBps : 0 }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'averageKBps', { get: function () { const e = (this._now() - this._firstCheckpoint) / 1e3; return this._totalBytes / e / 1024 }, enumerable: !1, configurable: !0 }), e }()); const o = i(939); const a = i(538); const h = i(29); const u = (n = function (e, t) { return (n = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (e, t) { e.__proto__ = t } || function (e, t) { for (const i in t)Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]) })(e, t) }, function (e, t) { if (typeof t !== 'function' && t !== null) throw new TypeError('Class extends value ' + String(t) + ' is not a constructor or null'); function i () { this.constructor = e }n(e, t), e.prototype = t === null ? Object.create(t) : (i.prototype = t.prototype, new i()) }); const l = (function (e) { function t (t, i) { const n = e.call(this, 'fetch-stream-loader') || this; return n.TAG = 'FetchStreamLoader', n._seekHandler = t, n._config = i, n._needStash = !0, n._requestAbort = !1, n._contentLength = null, n._receivedLength = 0, n } return u(t, e), t.isSupported = function () { try { const e = a.Z.msedge && a.Z.version.minor >= 15048; const t = !a.Z.msedge || e; return self.fetch && self.ReadableStream && t } catch (e) { return !1 } }, t.prototype.destroy = function () { this.isWorking() && this.abort(), e.prototype.destroy.call(this) }, t.prototype.open = function (e, t) { const i = this; this._dataSource = e, this._range = t; let n = e.url; this._config.reuseRedirectedURL && e.redirectedURL != null && (n = e.redirectedURL); const r = this._seekHandler.getConfig(n, t); const s = new self.Headers(); if (typeof r.headers==='object') { const a = r.headers; for (var u in a)a.hasOwnProperty(u) && s.append(u, a[u]) } const l = { method: 'GET', headers: s, mode: 'cors', cache: 'default', referrerPolicy: 'no-referrer-when-downgrade' }; if (typeof this._config.headers==='object') for (var u in this._config.headers)s.append(u, this._config.headers[u]); !1 === e.cors && (l.mode = 'same-origin'), e.withCredentials && (l.credentials = 'include'), e.referrerPolicy && (l.referrerPolicy = e.referrerPolicy), self.AbortController && (this._abortController = new self.AbortController(), l.signal = this._abortController.signal), this._status = o.GM.kConnecting, self.fetch(r.url, l).then(function (e) { if (i._requestAbort) return i._status = o.GM.kIdle, void e.body.cancel(); if (e.ok && e.status >= 200 && e.status <= 299) { if (e.url !== r.url && i._onURLRedirect) { let t = i._seekHandler.removeURLParameters(e.url); i._onURLRedirect(t) } let n = e.headers.get('Content-Length'); return n != null && (i._contentLength = parseInt(n), i._contentLength !== 0 && i._onContentLengthKnown && i._onContentLengthKnown(i._contentLength)), i._pump.call(i, e.body.getReader()) } if (i._status = o.GM.kError, !i._onError) throw new h.OZ('FetchStreamLoader: Http code invalid, ' + e.status + ' ' + e.statusText); i._onError(o.nm.HTTP_STATUS_CODE_INVALID, { code: e.status, msg: e.statusText }) }).catch(function (e) { if (!i._abortController || !i._abortController.signal.aborted) { if (i._status = o.GM.kError, !i._onError) throw e; i._onError(o.nm.EXCEPTION, { code: -1, msg: e.message }) } }) }, t.prototype.abort = function () { if (this._requestAbort = !0, (this._status !== o.GM.kBuffering || !a.Z.chrome) && this._abortController) try { this._abortController.abort() } catch (e) {} }, t.prototype._pump = function (e) { const t = this; return e.read().then(function (i) { if (i.done) if (t._contentLength !== null && t._receivedLength < t._contentLength) { t._status = o.GM.kError; let n = o.nm.EARLY_EOF; let r = { code: -1, msg: 'Fetch stream meet Early-EOF' }; if (!t._onError) throw new h.OZ(r.msg); t._onError(n, r) } else t._status = o.GM.kComplete, t._onComplete && t._onComplete(t._range.from, t._range.from + t._receivedLength - 1); else { if (t._abortController && t._abortController.signal.aborted) return void (t._status = o.GM.kComplete); if (!0 === t._requestAbort) return t._status = o.GM.kComplete, e.cancel(); t._status = o.GM.kBuffering; let s = i.value.buffer; let a = t._range.from + t._receivedLength; t._receivedLength += s.byteLength, t._onDataArrival && t._onDataArrival(s, a, t._receivedLength), t._pump(e) } }).catch(function (e) { if (t._abortController && t._abortController.signal.aborted)t._status = o.GM.kComplete; else if (e.code !== 11 || !a.Z.msedge) { t._status = o.GM.kError; let i = 0; let n = null; if (e.code !== 19 && 'network error' !== e.message || !(t._contentLength === null || t._contentLength !== null && t._receivedLength < t._contentLength) ? (i = o.nm.EXCEPTION, n = { code: e.code, msg: e.message }) : (i = o.nm.EARLY_EOF, n = { code: e.code, msg: 'Fetch stream meet Early-EOF' }), !t._onError) throw new h.OZ(n.msg); t._onError(i, n) } }) }, t }(o.fp)); const d = (function () { var e = function (t, i) { return (e = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (e, t) { e.__proto__ = t } || function (e, t) { for (const i in t)Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]) })(t, i) }; return function (t, i) { if (typeof i!=='function' && i !== null) throw new TypeError('Class extends value ' + String(i) + ' is not a constructor or null'); function n () { this.constructor = t }e(t, i), t.prototype = i === null ? Object.create(i) : (n.prototype = i.prototype, new n()) } }()); const c = (function (e) { function t (t, i) { const n = e.call(this, 'xhr-moz-chunked-loader') || this; return n.TAG = 'MozChunkedLoader', n._seekHandler = t, n._config = i, n._needStash = !0, n._xhr = null, n._requestAbort = !1, n._contentLength = null, n._receivedLength = 0, n } return d(t, e), t.isSupported = function () { try { const e = new XMLHttpRequest(); return e.open('GET', 'https://example.com', !0), e.responseType = 'moz-chunked-arraybuffer', e.responseType === 'moz-chunked-arraybuffer' } catch (e) { return r.Z.w('MozChunkedLoader', e.message), !1 } }, t.prototype.destroy = function () { this.isWorking() && this.abort(), this._xhr && (this._xhr.onreadystatechange = null, this._xhr.onprogress = null, this._xhr.onloadend = null, this._xhr.onerror = null, this._xhr = null), e.prototype.destroy.call(this) }, t.prototype.open = function (e, t) { this._dataSource = e, this._range = t; let i = e.url; this._config.reuseRedirectedURL && e.redirectedURL != null && (i = e.redirectedURL); const n = this._seekHandler.getConfig(i, t); this._requestURL = n.url; const r = this._xhr = new XMLHttpRequest(); if (r.open('GET', n.url, !0), r.responseType = 'moz-chunked-arraybuffer', r.onreadystatechange = this._onReadyStateChange.bind(this), r.onprogress = this._onProgress.bind(this), r.onloadend = this._onLoadEnd.bind(this), r.onerror = this._onXhrError.bind(this), e.withCredentials && (r.withCredentials = !0), typeof n.headers==='object') { var s = n.headers; for (var a in s)s.hasOwnProperty(a) && r.setRequestHeader(a, s[a]) } if (typeof this._config.headers==='object') { s = this._config.headers; for (var a in s)s.hasOwnProperty(a) && r.setRequestHeader(a, s[a]) } this._status = o.GM.kConnecting, r.send() }, t.prototype.abort = function () { this._requestAbort = !0, this._xhr && this._xhr.abort(), this._status = o.GM.kComplete }, t.prototype._onReadyStateChange = function (e) { const t = e.target; if (t.readyState === 2) { if (t.responseURL != null && t.responseURL !== this._requestURL && this._onURLRedirect) { const i = this._seekHandler.removeURLParameters(t.responseURL); this._onURLRedirect(i) } if (t.status !== 0 && (t.status < 200 || t.status > 299)) { if (this._status = o.GM.kError, !this._onError) throw new h.OZ('MozChunkedLoader: Http code invalid, ' + t.status + ' ' + t.statusText); this._onError(o.nm.HTTP_STATUS_CODE_INVALID, { code: t.status, msg: t.statusText }) } else this._status = o.GM.kBuffering } }, t.prototype._onProgress = function (e) { if (this._status !== o.GM.kError) { this._contentLength === null && e.total !== null && e.total !== 0 && (this._contentLength = e.total, this._onContentLengthKnown && this._onContentLengthKnown(this._contentLength)); const t = e.target.response; const i = this._range.from + this._receivedLength; this._receivedLength += t.byteLength, this._onDataArrival && this._onDataArrival(t, i, this._receivedLength) } }, t.prototype._onLoadEnd = function (e) { !0 !== this._requestAbort ? this._status !== o.GM.kError && (this._status = o.GM.kComplete, this._onComplete && this._onComplete(this._range.from, this._range.from + this._receivedLength - 1)) : this._requestAbort = !1 }, t.prototype._onXhrError = function (e) { this._status = o.GM.kError; let t = 0; let i = null; if (this._contentLength && e.loaded < this._contentLength ? (t = o.nm.EARLY_EOF, i = { code: -1, msg: 'Moz-Chunked stream meet Early-Eof' }) : (t = o.nm.EXCEPTION, i = { code: -1, msg: e.constructor.name + ' ' + e.type }), !this._onError) throw new h.OZ(i.msg); this._onError(t, i) }, t }(o.fp)); const f = (function () { var e = function (t, i) { return (e = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (e, t) { e.__proto__ = t } || function (e, t) { for (const i in t)Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]) })(t, i) }; return function (t, i) { if (typeof i!=='function' && i !== null) throw new TypeError('Class extends value ' + String(i) + ' is not a constructor or null'); function n () { this.constructor = t }e(t, i), t.prototype = i === null ? Object.create(i) : (n.prototype = i.prototype, new n()) } }()); const _ = (function (e) { function t (t, i) { const n = e.call(this, 'xhr-range-loader') || this; return n.TAG = 'RangeLoader', n._seekHandler = t, n._config = i, n._needStash = !1, n._chunkSizeKBList = [128, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096, 5120, 6144, 7168, 8192], n._currentChunkSizeKB = 384, n._currentSpeedNormalized = 0, n._zeroSpeedChunkCount = 0, n._xhr = null, n._speedSampler = new s(), n._requestAbort = !1, n._waitForTotalLength = !1, n._totalLengthReceived = !1, n._currentRequestURL = null, n._currentRedirectedURL = null, n._currentRequestRange = null, n._totalLength = null, n._contentLength = null, n._receivedLength = 0, n._lastTimeLoaded = 0, n } return f(t, e), t.isSupported = function () { try { const e = new XMLHttpRequest(); return e.open('GET', 'https://example.com', !0), e.responseType = 'arraybuffer', e.responseType === 'arraybuffer' } catch (e) { return r.Z.w('RangeLoader', e.message), !1 } }, t.prototype.destroy = function () { this.isWorking() && this.abort(), this._xhr && (this._xhr.onreadystatechange = null, this._xhr.onprogress = null, this._xhr.onload = null, this._xhr.onerror = null, this._xhr = null), e.prototype.destroy.call(this) }, Object.defineProperty(t.prototype, 'currentSpeed', { get: function () { return this._speedSampler.lastSecondKBps }, enumerable: !1, configurable: !0 }), t.prototype.open = function (e, t) { this._dataSource = e, this._range = t, this._status = o.GM.kConnecting; let i = !1; this._dataSource.filesize != null && this._dataSource.filesize !== 0 && (i = !0, this._totalLength = this._dataSource.filesize), this._totalLengthReceived || i ? this._openSubRange() : (this._waitForTotalLength = !0, this._internalOpen(this._dataSource, { from: 0, to: -1 })) }, t.prototype._openSubRange = function () { const e = 1024 * this._currentChunkSizeKB; const t = this._range.from + this._receivedLength; let i = t + e; this._contentLength != null && i - this._range.from >= this._contentLength && (i = this._range.from + this._contentLength - 1), this._currentRequestRange = { from: t, to: i }, this._internalOpen(this._dataSource, this._currentRequestRange) }, t.prototype._internalOpen = function (e, t) { this._lastTimeLoaded = 0; let i = e.url; this._config.reuseRedirectedURL && (this._currentRedirectedURL != null ? i = this._currentRedirectedURL : e.redirectedURL != null && (i = e.redirectedURL)); const n = this._seekHandler.getConfig(i, t); this._currentRequestURL = n.url; const r = this._xhr = new XMLHttpRequest(); if (r.open('GET', n.url, !0), r.responseType = 'arraybuffer', r.onreadystatechange = this._onReadyStateChange.bind(this), r.onprogress = this._onProgress.bind(this), r.onload = this._onLoad.bind(this), r.onerror = this._onXhrError.bind(this), e.withCredentials && (r.withCredentials = !0), typeof n.headers==='object') { var s = n.headers; for (var o in s)s.hasOwnProperty(o) && r.setRequestHeader(o, s[o]) } if (typeof this._config.headers==='object') { s = this._config.headers; for (var o in s)s.hasOwnProperty(o) && r.setRequestHeader(o, s[o]) }r.send() }, t.prototype.abort = function () { this._requestAbort = !0, this._internalAbort(), this._status = o.GM.kComplete }, t.prototype._internalAbort = function () { this._xhr && (this._xhr.onreadystatechange = null, this._xhr.onprogress = null, this._xhr.onload = null, this._xhr.onerror = null, this._xhr.abort(), this._xhr = null) }, t.prototype._onReadyStateChange = function (e) { const t = e.target; if (t.readyState === 2) { if (t.responseURL != null) { const i = this._seekHandler.removeURLParameters(t.responseURL); t.responseURL !== this._currentRequestURL && i !== this._currentRedirectedURL && (this._currentRedirectedURL = i, this._onURLRedirect && this._onURLRedirect(i)) } if (t.status >= 200 && t.status <= 299) { if (this._waitForTotalLength) return; this._status = o.GM.kBuffering } else { if (this._status = o.GM.kError, !this._onError) throw new h.OZ('RangeLoader: Http code invalid, ' + t.status + ' ' + t.statusText); this._onError(o.nm.HTTP_STATUS_CODE_INVALID, { code: t.status, msg: t.statusText }) } } }, t.prototype._onProgress = function (e) { if (this._status !== o.GM.kError) { if (this._contentLength === null) { let t = !1; if (this._waitForTotalLength) { this._waitForTotalLength = !1, this._totalLengthReceived = !0, t = !0; const i = e.total; this._internalAbort(), i != null & i !== 0 && (this._totalLength = i) } if (this._range.to === -1 ? this._contentLength = this._totalLength - this._range.from : this._contentLength = this._range.to - this._range.from + 1, t) return void this._openSubRange(); this._onContentLengthKnown && this._onContentLengthKnown(this._contentLength) } const n = e.loaded - this._lastTimeLoaded; this._lastTimeLoaded = e.loaded, this._speedSampler.addBytes(n) } }, t.prototype._normalizeSpeed = function (e) { const t = this._chunkSizeKBList; const i = t.length - 1; let n = 0; let r = 0; let s = i; if (e < t[0]) return t[0]; for (;r <= s;) { if ((n = r + Math.floor((s - r) / 2)) === i || e >= t[n] && e < t[n + 1]) return t[n]; t[n] < e ? r = n + 1 : s = n - 1 } }, t.prototype._onLoad = function (e) { if (this._status !== o.GM.kError) if (this._waitForTotalLength) this._waitForTotalLength = !1; else { this._lastTimeLoaded = 0; let t = this._speedSampler.lastSecondKBps; if (t === 0 && (this._zeroSpeedChunkCount++, this._zeroSpeedChunkCount >= 3 && (t = this._speedSampler.currentKBps)), t !== 0) { const i = this._normalizeSpeed(t); this._currentSpeedNormalized !== i && (this._currentSpeedNormalized = i, this._currentChunkSizeKB = i) } const n = e.target.response; const r = this._range.from + this._receivedLength; this._receivedLength += n.byteLength; let s = !1; this._contentLength != null && this._receivedLength < this._contentLength ? this._openSubRange() : s = !0, this._onDataArrival && this._onDataArrival(n, r, this._receivedLength), s && (this._status = o.GM.kComplete, this._onComplete && this._onComplete(this._range.from, this._range.from + this._receivedLength - 1)) } }, t.prototype._onXhrError = function (e) { this._status = o.GM.kError; let t = 0; let i = null; if (this._contentLength && this._receivedLength > 0 && this._receivedLength < this._contentLength ? (t = o.nm.EARLY_EOF, i = { code: -1, msg: 'RangeLoader meet Early-Eof' }) : (t = o.nm.EXCEPTION, i = { code: -1, msg: e.constructor.name + ' ' + e.type }), !this._onError) throw new h.OZ(i.msg); this._onError(t, i) }, t }(o.fp)); const p = (function () { var e = function (t, i) { return (e = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (e, t) { e.__proto__ = t } || function (e, t) { for (const i in t)Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]) })(t, i) }; return function (t, i) { if (typeof i!=='function' && i !== null) throw new TypeError('Class extends value ' + String(i) + ' is not a constructor or null'); function n () { this.constructor = t }e(t, i), t.prototype = i === null ? Object.create(i) : (n.prototype = i.prototype, new n()) } }()); const m = (function (e) { function t () { const t = e.call(this, 'websocket-loader') || this; return t.TAG = 'WebSocketLoader', t._needStash = !0, t._ws = null, t._requestAbort = !1, t._receivedLength = 0, t } return p(t, e), t.isSupported = function () { try { return void 0 !== self.WebSocket } catch (e) { return !1 } }, t.prototype.destroy = function () { this._ws && this.abort(), e.prototype.destroy.call(this) }, t.prototype.open = function (e) { try { const t = this._ws = new self.WebSocket(e.url); t.binaryType = 'arraybuffer', t.onopen = this._onWebSocketOpen.bind(this), t.onclose = this._onWebSocketClose.bind(this), t.onmessage = this._onWebSocketMessage.bind(this), t.onerror = this._onWebSocketError.bind(this), this._status = o.GM.kConnecting } catch (e) { this._status = o.GM.kError; const i = { code: e.code, msg: e.message }; if (!this._onError) throw new h.OZ(i.msg); this._onError(o.nm.EXCEPTION, i) } }, t.prototype.abort = function () { const e = this._ws; !e || e.readyState !== 0 && e.readyState !== 1 || (this._requestAbort = !0, e.close()), this._ws = null, this._status = o.GM.kComplete }, t.prototype._onWebSocketOpen = function (e) { this._status = o.GM.kBuffering }, t.prototype._onWebSocketClose = function (e) { !0 !== this._requestAbort ? (this._status = o.GM.kComplete, this._onComplete && this._onComplete(0, this._receivedLength - 1)) : this._requestAbort = !1 }, t.prototype._onWebSocketMessage = function (e) { const t = this; if (e.data instanceof ArrayBuffer) this._dispatchArrayBuffer(e.data); else if (e.data instanceof Blob) { const i = new FileReader(); i.onload = function () { t._dispatchArrayBuffer(i.result) }, i.readAsArrayBuffer(e.data) } else { this._status = o.GM.kError; const n = { code: -1, msg: 'Unsupported WebSocket message type: ' + e.data.constructor.name }; if (!this._onError) throw new h.OZ(n.msg); this._onError(o.nm.EXCEPTION, n) } }, t.prototype._dispatchArrayBuffer = function (e) { const t = e; const i = this._receivedLength; this._receivedLength += t.byteLength, this._onDataArrival && this._onDataArrival(t, i, this._receivedLength) }, t.prototype._onWebSocketError = function (e) { this._status = o.GM.kError; const t = { code: e.code, msg: e.message }; if (!this._onError) throw new h.OZ(t.msg); this._onError(o.nm.EXCEPTION, t) }, t }(o.fp)); const g = (function () { function e (e) { this._zeroStart = e || !1 } return e.prototype.getConfig = function (e, t) { const i = {}; if (t.from !== 0 || t.to !== -1) { let n = void 0; n = t.to !== -1 ? 'bytes=' + t.from.toString() + '-' + t.to.toString() : 'bytes=' + t.from.toString() + '-', i.Range = n } else this._zeroStart && (i.Range = 'bytes=0-'); return { url: e, headers: i } }, e.prototype.removeURLParameters = function (e) { return e }, e }()); const v = (function () { function e (e, t) { this._startName = e, this._endName = t } return e.prototype.getConfig = function (e, t) { let i = e; if (t.from !== 0 || t.to !== -1) { let n = !0; i.indexOf('?') === -1 && (i += '?', n = !1), n && (i += '&'), i += this._startName + '=' + t.from.toString(), t.to !== -1 && (i += '&' + this._endName + '=' + t.to.toString()) } return { url: i, headers: {} } }, e.prototype.removeURLParameters = function (e) { const t = e.split('?')[0]; let i = void 0; const n = e.indexOf('?'); n !== -1 && (i = e.substring(n + 1)); let r = ''; if (i != null && i.length > 0) for (let s = i.split('&'), o = 0; o < s.length; o++) { const a = s[o].split('='); const h = o > 0; a[0] !== this._startName && a[0] !== this._endName && (h && (r += '&'), r += s[o]) } return r.length === 0 ? t : t + '?' + r }, e }()); var y = (function () { function e (e, t, i) { this.TAG = 'IOController', this._config = t, this._extraData = i, this._stashInitialSize = 393216, t.stashInitialSize != null && t.stashInitialSize > 0 && (this._stashInitialSize = t.stashInitialSize), this._stashUsed = 0, this._stashSize = this._stashInitialSize, this._bufferSize = 3145728, this._stashBuffer = new ArrayBuffer(this._bufferSize), this._stashByteStart = 0, this._enableStash = !0, !1 === t.enableStashBuffer && (this._enableStash = !1), this._loader = null, this._loaderClass = null, this._seekHandler = null, this._dataSource = e, this._isWebSocketURL = /wss?:\/\/(.+?)/.test(e.url), this._refTotalLength = e.filesize ? e.filesize : null, this._totalLength = this._refTotalLength, this._fullRequestFlag = !1, this._currentRange = null, this._redirectedURL = null, this._speedNormalized = 0, this._speedSampler = new s(), this._speedNormalizeList = [64, 128, 256, 384, 512, 768, 1024, 1536, 2048, 3072, 4096], this._isEarlyEofReconnecting = !1, this._paused = !1, this._resumeFrom = 0, this._onDataArrival = null, this._onSeeked = null, this._onError = null, this._onComplete = null, this._onRedirect = null, this._onRecoveredEarlyEof = null, this._selectSeekHandler(), this._selectLoader(), this._createLoader() } return e.prototype.destroy = function () { this._loader.isWorking() && this._loader.abort(), this._loader.destroy(), this._loader = null, this._loaderClass = null, this._dataSource = null, this._stashBuffer = null, this._stashUsed = this._stashSize = this._bufferSize = this._stashByteStart = 0, this._currentRange = null, this._speedSampler = null, this._isEarlyEofReconnecting = !1, this._onDataArrival = null, this._onSeeked = null, this._onError = null, this._onComplete = null, this._onRedirect = null, this._onRecoveredEarlyEof = null, this._extraData = null }, e.prototype.isWorking = function () { return this._loader && this._loader.isWorking() && !this._paused }, e.prototype.isPaused = function () { return this._paused }, Object.defineProperty(e.prototype, 'status', { get: function () { return this._loader.status }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'extraData', { get: function () { return this._extraData }, set: function (e) { this._extraData = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onDataArrival', { get: function () { return this._onDataArrival }, set: function (e) { this._onDataArrival = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onSeeked', { get: function () { return this._onSeeked }, set: function (e) { this._onSeeked = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onError', { get: function () { return this._onError }, set: function (e) { this._onError = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onComplete', { get: function () { return this._onComplete }, set: function (e) { this._onComplete = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onRedirect', { get: function () { return this._onRedirect }, set: function (e) { this._onRedirect = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onRecoveredEarlyEof', { get: function () { return this._onRecoveredEarlyEof }, set: function (e) { this._onRecoveredEarlyEof = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'currentURL', { get: function () { return this._dataSource.url }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'hasRedirect', { get: function () { return this._redirectedURL != null || this._dataSource.redirectedURL != null }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'currentRedirectedURL', { get: function () { return this._redirectedURL || this._dataSource.redirectedURL }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'currentSpeed', { get: function () { return this._loaderClass === _ ? this._loader.currentSpeed : this._speedSampler.lastSecondKBps }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'loaderType', { get: function () { return this._loader.type }, enumerable: !1, configurable: !0 }), e.prototype._selectSeekHandler = function () { const e = this._config; if (e.seekType === 'range') this._seekHandler = new g(this._config.rangeLoadZeroStart); else if (e.seekType === 'param') { const t = e.seekParamStart || 'bstart'; const i = e.seekParamEnd || 'bend'; this._seekHandler = new v(t, i) } else { if (e.seekType !== 'custom') throw new h.OC('Invalid seekType in config: ' + e.seekType); if (typeof e.customSeekHandler !== 'function') throw new h.OC('Custom seekType specified in config but invalid customSeekHandler!'); this._seekHandler = new e.customSeekHandler() } }, e.prototype._selectLoader = function () { if (this._config.customLoader != null) this._loaderClass = this._config.customLoader; else if (this._isWebSocketURL) this._loaderClass = m; else if (l.isSupported()) this._loaderClass = l; else if (c.isSupported()) this._loaderClass = c; else { if (!_.isSupported()) throw new h.OZ("Your browser doesn't support xhr with arraybuffer responseType!"); this._loaderClass = _ } }, e.prototype._createLoader = function () { this._loader = new this._loaderClass(this._seekHandler, this._config), !1 === this._loader.needStashBuffer && (this._enableStash = !1), this._loader.onContentLengthKnown = this._onContentLengthKnown.bind(this), this._loader.onURLRedirect = this._onURLRedirect.bind(this), this._loader.onDataArrival = this._onLoaderChunkArrival.bind(this), this._loader.onComplete = this._onLoaderComplete.bind(this), this._loader.onError = this._onLoaderError.bind(this) }, e.prototype.open = function (e) { this._currentRange = { from: 0, to: -1 }, e && (this._currentRange.from = e), this._speedSampler.reset(), e || (this._fullRequestFlag = !0), this._loader.open(this._dataSource, Object.assign({}, this._currentRange)) }, e.prototype.abort = function () { this._loader.abort(), this._paused && (this._paused = !1, this._resumeFrom = 0) }, e.prototype.pause = function () { this.isWorking() && (this._loader.abort(), this._stashUsed !== 0 ? (this._resumeFrom = this._stashByteStart, this._currentRange.to = this._stashByteStart - 1) : this._resumeFrom = this._currentRange.to + 1, this._stashUsed = 0, this._stashByteStart = 0, this._paused = !0) }, e.prototype.resume = function () { if (this._paused) { this._paused = !1; const e = this._resumeFrom; this._resumeFrom = 0, this._internalSeek(e, !0) } }, e.prototype.seek = function (e) { this._paused = !1, this._stashUsed = 0, this._stashByteStart = 0, this._internalSeek(e, !0) }, e.prototype._internalSeek = function (e, t) { this._loader.isWorking() && this._loader.abort(), this._flushStashBuffer(t), this._loader.destroy(), this._loader = null; const i = { from: e, to: -1 }; this._currentRange = { from: i.from, to: -1 }, this._speedSampler.reset(), this._stashSize = this._stashInitialSize, this._createLoader(), this._loader.open(this._dataSource, i), this._onSeeked && this._onSeeked() }, e.prototype.updateUrl = function (e) { if (!e || typeof e !== 'string' || e.length === 0) throw new h.OC('Url must be a non-empty string!'); this._dataSource.url = e }, e.prototype._expandBuffer = function (e) { for (var t = this._stashSize; t + 1048576 < e;)t *= 2; if ((t += 1048576) !== this._bufferSize) { const i = new ArrayBuffer(t); if (this._stashUsed > 0) { const n = new Uint8Array(this._stashBuffer, 0, this._stashUsed); new Uint8Array(i, 0, t).set(n, 0) } this._stashBuffer = i, this._bufferSize = t } }, e.prototype._normalizeSpeed = function (e) { const t = this._speedNormalizeList; const i = t.length - 1; let n = 0; let r = 0; let s = i; if (e < t[0]) return t[0]; for (;r <= s;) { if ((n = r + Math.floor((s - r) / 2)) === i || e >= t[n] && e < t[n + 1]) return t[n]; t[n] < e ? r = n + 1 : s = n - 1 } }, e.prototype._adjustStashSize = function (e) { let t = 0; (t = this._config.isLive || e < 512 ? e : e >= 512 && e <= 1024 ? Math.floor(1.5 * e) : 2 * e) > 8192 && (t = 8192); const i = 1024 * t + 1048576; this._bufferSize < i && this._expandBuffer(i), this._stashSize = 1024 * t }, e.prototype._dispatchChunks = function (e, t) { return this._currentRange.to = t + e.byteLength - 1, this._onDataArrival(e, t) }, e.prototype._onURLRedirect = function (e) { this._redirectedURL = e, this._onRedirect && this._onRedirect(e) }, e.prototype._onContentLengthKnown = function (e) { e && this._fullRequestFlag && (this._totalLength = e, this._fullRequestFlag = !1) }, e.prototype._onLoaderChunkArrival = function (e, t, i) { if (!this._onDataArrival) throw new h.rT('IOController: No existing consumer (onDataArrival) callback!'); if (!this._paused) { this._isEarlyEofReconnecting && (this._isEarlyEofReconnecting = !1, this._onRecoveredEarlyEof && this._onRecoveredEarlyEof()), this._speedSampler.addBytes(e.byteLength); const n = this._speedSampler.lastSecondKBps; if (n !== 0) { const r = this._normalizeSpeed(n); this._speedNormalized !== r && (this._speedNormalized = r, this._adjustStashSize(r)) } if (this._enableStash) if (this._stashUsed === 0 && this._stashByteStart === 0 && (this._stashByteStart = t), this._stashUsed + e.byteLength <= this._stashSize) { (a = new Uint8Array(this._stashBuffer, 0, this._stashSize)).set(new Uint8Array(e), this._stashUsed), this._stashUsed += e.byteLength } else { a = new Uint8Array(this._stashBuffer, 0, this._bufferSize); if (this._stashUsed > 0) { const s = this._stashBuffer.slice(0, this._stashUsed); if ((u = this._dispatchChunks(s, this._stashByteStart)) < s.byteLength) { if (u > 0) { l = new Uint8Array(s, u); a.set(l, 0), this._stashUsed = l.byteLength, this._stashByteStart += u } } else this._stashUsed = 0, this._stashByteStart += u; this._stashUsed + e.byteLength > this._bufferSize && (this._expandBuffer(this._stashUsed + e.byteLength), a = new Uint8Array(this._stashBuffer, 0, this._bufferSize)), a.set(new Uint8Array(e), this._stashUsed), this._stashUsed += e.byteLength } else { if ((u = this._dispatchChunks(e, t)) < e.byteLength)(o = e.byteLength - u) > this._bufferSize && (this._expandBuffer(o), a = new Uint8Array(this._stashBuffer, 0, this._bufferSize)), a.set(new Uint8Array(e, u), 0), this._stashUsed += o, this._stashByteStart = t + u } } else if (this._stashUsed === 0) { var o; if ((u = this._dispatchChunks(e, t)) < e.byteLength)(o = e.byteLength - u) > this._bufferSize && this._expandBuffer(o), (a = new Uint8Array(this._stashBuffer, 0, this._bufferSize)).set(new Uint8Array(e, u), 0), this._stashUsed += o, this._stashByteStart = t + u } else { var a, u; if (this._stashUsed + e.byteLength > this._bufferSize && this._expandBuffer(this._stashUsed + e.byteLength), (a = new Uint8Array(this._stashBuffer, 0, this._bufferSize)).set(new Uint8Array(e), this._stashUsed), this._stashUsed += e.byteLength, (u = this._dispatchChunks(this._stashBuffer.slice(0, this._stashUsed), this._stashByteStart)) < this._stashUsed && u > 0) { var l = new Uint8Array(this._stashBuffer, u); a.set(l, 0) } this._stashUsed -= u, this._stashByteStart += u } } }, e.prototype._flushStashBuffer = function (e) { if (this._stashUsed > 0) { const t = this._stashBuffer.slice(0, this._stashUsed); const i = this._dispatchChunks(t, this._stashByteStart); const n = t.byteLength - i; if (i < t.byteLength) { if (!e) { if (i > 0) { const s = new Uint8Array(this._stashBuffer, 0, this._bufferSize); const o = new Uint8Array(t, i); s.set(o, 0), this._stashUsed = o.byteLength, this._stashByteStart += i } return 0 }r.Z.w(this.TAG, n + ' bytes unconsumed data remain when flush buffer, dropped') } return this._stashUsed = 0, this._stashByteStart = 0, n } return 0 }, e.prototype._onLoaderComplete = function (e, t) { this._flushStashBuffer(!0), this._onComplete && this._onComplete(this._extraData) }, e.prototype._onLoaderError = function (e, t) { switch (r.Z.e(this.TAG, 'Loader error, code = ' + t.code + ', msg = ' + t.msg), this._flushStashBuffer(!1), this._isEarlyEofReconnecting && (this._isEarlyEofReconnecting = !1, e = o.nm.UNRECOVERABLE_EARLY_EOF), e) { case o.nm.EARLY_EOF:if (!this._config.isLive && this._totalLength) { const i = this._currentRange.to + 1; return void (i < this._totalLength && (r.Z.w(this.TAG, 'Connection lost, trying reconnect...'), this._isEarlyEofReconnecting = !0, this._internalSeek(i, !1))) }e = o.nm.UNRECOVERABLE_EARLY_EOF; break; case o.nm.UNRECOVERABLE_EARLY_EOF:case o.nm.CONNECTING_TIMEOUT:case o.nm.HTTP_STATUS_CODE_INVALID:case o.nm.EXCEPTION: } if (!this._onError) throw new h.OZ('IOException: ' + t.msg); this._onError(e, t) }, e }()) },
  25. 939: function (e, t, i) { 'use strict'; i.d(t, { GM: function () { return r }, nm: function () { return s }, fp: function () { return o } }); const n = i(29); var r = { kIdle: 0, kConnecting: 1, kBuffering: 2, kError: 3, kComplete: 4 }; var s = { OK: 'OK', EXCEPTION: 'Exception', HTTP_STATUS_CODE_INVALID: 'HttpStatusCodeInvalid', CONNECTING_TIMEOUT: 'ConnectingTimeout', EARLY_EOF: 'EarlyEof', UNRECOVERABLE_EARLY_EOF: 'UnrecoverableEarlyEof' }; var o = (function () { function e (e) { this._type = e || 'undefined', this._status = r.kIdle, this._needStash = !1, this._onContentLengthKnown = null, this._onURLRedirect = null, this._onDataArrival = null, this._onError = null, this._onComplete = null } return e.prototype.destroy = function () { this._status = r.kIdle, this._onContentLengthKnown = null, this._onURLRedirect = null, this._onDataArrival = null, this._onError = null, this._onComplete = null }, e.prototype.isWorking = function () { return this._status === r.kConnecting || this._status === r.kBuffering }, Object.defineProperty(e.prototype, 'type', { get: function () { return this._type }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'status', { get: function () { return this._status }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'needStashBuffer', { get: function () { return this._needStash }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onContentLengthKnown', { get: function () { return this._onContentLengthKnown }, set: function (e) { this._onContentLengthKnown = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onURLRedirect', { get: function () { return this._onURLRedirect }, set: function (e) { this._onURLRedirect = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onDataArrival', { get: function () { return this._onDataArrival }, set: function (e) { this._onDataArrival = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onError', { get: function () { return this._onError }, set: function (e) { this._onError = e }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'onComplete', { get: function () { return this._onComplete }, set: function (e) { this._onComplete = e }, enumerable: !1, configurable: !0 }), e.prototype.open = function (e, t) { throw new n.do('Unimplemented abstract function!') }, e.prototype.abort = function () { throw new n.do('Unimplemented abstract function!') }, e }()) },
  26. 538: function (e, t) { 'use strict'; const i = {}; !(function () { const e = self.navigator.userAgent.toLowerCase(); const t = /(edge)\/([\w.]+)/.exec(e) || /(opr)[\/]([\w.]+)/.exec(e) || /(chrome)[ \/]([\w.]+)/.exec(e) || /(iemobile)[\/]([\w.]+)/.exec(e) || /(version)(applewebkit)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(e) || /(webkit)[ \/]([\w.]+).*(version)[ \/]([\w.]+).*(safari)[ \/]([\w.]+)/.exec(e) || /(webkit)[ \/]([\w.]+)/.exec(e) || /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(e) || /(msie) ([\w.]+)/.exec(e) || e.indexOf('trident') >= 0 && /(rv)(?::| )([\w.]+)/.exec(e) || e.indexOf('compatible') < 0 && /(firefox)[ \/]([\w.]+)/.exec(e) || []; const n = /(ipad)/.exec(e) || /(ipod)/.exec(e) || /(windows phone)/.exec(e) || /(iphone)/.exec(e) || /(kindle)/.exec(e) || /(android)/.exec(e) || /(windows)/.exec(e) || /(mac)/.exec(e) || /(linux)/.exec(e) || /(cros)/.exec(e) || []; const r = { browser: t[5] || t[3] || t[1] || '', version: t[2] || t[4] || '0', majorVersion: t[4] || t[2] || '0', platform: n[0] || '' }; const s = {}; if (r.browser) { s[r.browser] = !0; const o = r.majorVersion.split('.'); s.version = { major: parseInt(r.majorVersion, 10), string: r.version }, o.length > 1 && (s.version.minor = parseInt(o[1], 10)), o.length > 2 && (s.version.build = parseInt(o[2], 10)) } if (r.platform && (s[r.platform] = !0), (s.chrome || s.opr || s.safari) && (s.webkit = !0), s.rv || s.iemobile) { s.rv && delete s.rv; const a = 'msie'; r.browser = a, s.msie = !0 } if (s.edge) { delete s.edge; const h = 'msedge'; r.browser = h, s.msedge = !0 } if (s.opr) { const u = 'opera'; r.browser = u, s.opera = !0 } if (s.safari && s.android) { const l = 'android'; r.browser = l, s.android = !0 } for (const d in s.name = r.browser, s.platform = r.platform, i)i.hasOwnProperty(d) && delete i[d]; Object.assign(i, s) }()), t.Z = i },
  27. 29: function (e, t, i) { 'use strict'; i.d(t, { OZ: function () { return s }, rT: function () { return o }, OC: function () { return a }, do: function () { return h } }); let n; const r = (n = function (e, t) { return (n = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function (e, t) { e.__proto__ = t } || function (e, t) { for (const i in t)Object.prototype.hasOwnProperty.call(t, i) && (e[i] = t[i]) })(e, t) }, function (e, t) { if (typeof t !== 'function' && t !== null) throw new TypeError('Class extends value ' + String(t) + ' is not a constructor or null'); function i () { this.constructor = e }n(e, t), e.prototype = t === null ? Object.create(t) : (i.prototype = t.prototype, new i()) }); var s = (function () { function e (e) { this._message = e } return Object.defineProperty(e.prototype, 'name', { get: function () { return 'RuntimeException' }, enumerable: !1, configurable: !0 }), Object.defineProperty(e.prototype, 'message', { get: function () { return this._message }, enumerable: !1, configurable: !0 }), e.prototype.toString = function () { return this.name + ': ' + this.message }, e }()); var o = (function (e) { function t (t) { return e.call(this, t) || this } return r(t, e), Object.defineProperty(t.prototype, 'name', { get: function () { return 'IllegalStateException' }, enumerable: !1, configurable: !0 }), t }(s)); var a = (function (e) { function t (t) { return e.call(this, t) || this } return r(t, e), Object.defineProperty(t.prototype, 'name', { get: function () { return 'InvalidArgumentException' }, enumerable: !1, configurable: !0 }), t }(s)); var h = (function (e) { function t (t) { return e.call(this, t) || this } return r(t, e), Object.defineProperty(t.prototype, 'name', { get: function () { return 'NotImplementedException' }, enumerable: !1, configurable: !0 }), t }(s)) },
  28. 300: function (e, t, i) { 'use strict'; const n = i(716); const r = i.n(n); const s = (function () { function e () {} return e.e = function (t, i) { t && !e.FORCE_GLOBAL_TAG || (t = e.GLOBAL_TAG); const n = '[' + t + '] > ' + i; e.ENABLE_CALLBACK && e.emitter.emit('log', 'error', n), e.ENABLE_ERROR && (console.error ? console.error(n) : console.warn ? console.warn(n) : console.log(n)) }, e.i = function (t, i) { t && !e.FORCE_GLOBAL_TAG || (t = e.GLOBAL_TAG); const n = '[' + t + '] > ' + i; e.ENABLE_CALLBACK && e.emitter.emit('log', 'info', n), e.ENABLE_INFO && (console.info ? console.info(n) : console.log(n)) }, e.w = function (t, i) { t && !e.FORCE_GLOBAL_TAG || (t = e.GLOBAL_TAG); const n = '[' + t + '] > ' + i; e.ENABLE_CALLBACK && e.emitter.emit('log', 'warn', n), e.ENABLE_WARN && (console.warn ? console.warn(n) : console.log(n)) }, e.d = function (t, i) { t && !e.FORCE_GLOBAL_TAG || (t = e.GLOBAL_TAG); const n = '[' + t + '] > ' + i; e.ENABLE_CALLBACK && e.emitter.emit('log', 'debug', n), e.ENABLE_DEBUG && (console.debug ? console.debug(n) : console.log(n)) }, e.v = function (t, i) { t && !e.FORCE_GLOBAL_TAG || (t = e.GLOBAL_TAG); const n = '[' + t + '] > ' + i; e.ENABLE_CALLBACK && e.emitter.emit('log', 'verbose', n), e.ENABLE_VERBOSE && console.log(n) }, e }()); s.GLOBAL_TAG = 'flv.js', s.FORCE_GLOBAL_TAG = !1, s.ENABLE_ERROR = !0, s.ENABLE_INFO = !0, s.ENABLE_WARN = !0, s.ENABLE_DEBUG = !0, s.ENABLE_VERBOSE = !0, s.ENABLE_CALLBACK = !1, s.emitter = new (r())(), t.Z = s },
  29. 846: function (e, t, i) { 'use strict'; const n = i(716); const r = i.n(n); const s = i(300); const o = (function () { function e () {} return Object.defineProperty(e, 'forceGlobalTag', { get: function () { return s.Z.FORCE_GLOBAL_TAG }, set: function (t) { s.Z.FORCE_GLOBAL_TAG = t, e._notifyChange() }, enumerable: !1, configurable: !0 }), Object.defineProperty(e, 'globalTag', { get: function () { return s.Z.GLOBAL_TAG }, set: function (t) { s.Z.GLOBAL_TAG = t, e._notifyChange() }, enumerable: !1, configurable: !0 }), Object.defineProperty(e, 'enableAll', { get: function () { return s.Z.ENABLE_VERBOSE && s.Z.ENABLE_DEBUG && s.Z.ENABLE_INFO && s.Z.ENABLE_WARN && s.Z.ENABLE_ERROR }, set: function (t) { s.Z.ENABLE_VERBOSE = t, s.Z.ENABLE_DEBUG = t, s.Z.ENABLE_INFO = t, s.Z.ENABLE_WARN = t, s.Z.ENABLE_ERROR = t, e._notifyChange() }, enumerable: !1, configurable: !0 }), Object.defineProperty(e, 'enableDebug', { get: function () { return s.Z.ENABLE_DEBUG }, set: function (t) { s.Z.ENABLE_DEBUG = t, e._notifyChange() }, enumerable: !1, configurable: !0 }), Object.defineProperty(e, 'enableVerbose', { get: function () { return s.Z.ENABLE_VERBOSE }, set: function (t) { s.Z.ENABLE_VERBOSE = t, e._notifyChange() }, enumerable: !1, configurable: !0 }), Object.defineProperty(e, 'enableInfo', { get: function () { return s.Z.ENABLE_INFO }, set: function (t) { s.Z.ENABLE_INFO = t, e._notifyChange() }, enumerable: !1, configurable: !0 }), Object.defineProperty(e, 'enableWarn', { get: function () { return s.Z.ENABLE_WARN }, set: function (t) { s.Z.ENABLE_WARN = t, e._notifyChange() }, enumerable: !1, configurable: !0 }), Object.defineProperty(e, 'enableError', { get: function () { return s.Z.ENABLE_ERROR }, set: function (t) { s.Z.ENABLE_ERROR = t, e._notifyChange() }, enumerable: !1, configurable: !0 }), e.getConfig = function () { return { globalTag: s.Z.GLOBAL_TAG, forceGlobalTag: s.Z.FORCE_GLOBAL_TAG, enableVerbose: s.Z.ENABLE_VERBOSE, enableDebug: s.Z.ENABLE_DEBUG, enableInfo: s.Z.ENABLE_INFO, enableWarn: s.Z.ENABLE_WARN, enableError: s.Z.ENABLE_ERROR, enableCallback: s.Z.ENABLE_CALLBACK } }, e.applyConfig = function (e) { s.Z.GLOBAL_TAG = e.globalTag, s.Z.FORCE_GLOBAL_TAG = e.forceGlobalTag, s.Z.ENABLE_VERBOSE = e.enableVerbose, s.Z.ENABLE_DEBUG = e.enableDebug, s.Z.ENABLE_INFO = e.enableInfo, s.Z.ENABLE_WARN = e.enableWarn, s.Z.ENABLE_ERROR = e.enableError, s.Z.ENABLE_CALLBACK = e.enableCallback }, e._notifyChange = function () { const t = e.emitter; if (t.listenerCount('change') > 0) { const i = e.getConfig(); t.emit('change', i) } }, e.registerListener = function (t) { e.emitter.addListener('change', t) }, e.removeListener = function (t) { e.emitter.removeListener('change', t) }, e.addLogListener = function (t) { s.Z.emitter.addListener('log', t), s.Z.emitter.listenerCount('log') > 0 && (s.Z.ENABLE_CALLBACK = !0, e._notifyChange()) }, e.removeLogListener = function (t) { s.Z.emitter.removeListener('log', t), s.Z.emitter.listenerCount('log') === 0 && (s.Z.ENABLE_CALLBACK = !1, e._notifyChange()) }, e }()); o.emitter = new (r())(), t.Z = o },
  30. 219: function (e, t, i) { 'use strict'; const n = (function () { function e () {} return e.install = function () { Object.setPrototypeOf = Object.setPrototypeOf || function (e, t) { return e.__proto__ = t, e }, Object.assign = Object.assign || function (e) { if (e == null) throw new TypeError('Cannot convert undefined or null to object'); for (var t = Object(e), i = 1; i < arguments.length; i++) { const n = arguments[i]; if (n != null) for (const r in n)n.hasOwnProperty(r) && (t[r] = n[r]) } return t }, typeof self.Promise !== 'function' && i(264).polyfill() }, e }()); n.install(), t.Z = n }
  31. }; const t = {}; function i (n) { const r = t[n]; if (void 0 !== r) return r.exports; const s = t[n] = { exports: {} }; return e[n].call(s.exports, s, s.exports, i), s.exports } return i.m = e, i.n = function (e) { const t = e && e.__esModule ? function () { return e.default } : function () { return e }; return i.d(t, { a: t }), t }, i.d = function (e, t) { for (const n in t)i.o(t, n) && !i.o(e, n) && Object.defineProperty(e, n, { enumerable: !0, get: t[n] }) }, i.g = (function () { if (typeof globalThis === 'object') return globalThis; try { return this || new Function('return this')() } catch (e) { if (typeof window === 'object') return window } }()), i.o = function (e, t) { return Object.prototype.hasOwnProperty.call(e, t) }, i(324)
  32. }())
  33. }))
  34. // # sourceMappingURL=flv.min.js.map