/**
* @license
* Video.js 7.20.2
* Copyright Brightcove, Inc.
* Available under Apache License Version 2.0
*
*
* Includes vtt.js
* Available under Apache License Version 2.0
*
*/
!(function (e, t) {
'object' == typeof exports && 'undefined' != typeof module
? (module.exports = t())
: 'function' == typeof define && define.amd
? define(t)
: ((e = 'undefined' != typeof globalThis ? globalThis : e || self).videojs = t())
})(this, function () {
'use strict'
for (
var e,
u = '7.20.2',
i = {},
a = function (e, t) {
return (i[e] = i[e] || []), t && (i[e] = i[e].concat(t)), i[e]
},
n = function (e, t) {
t = a(e).indexOf(t)
return !(t <= -1) && ((i[e] = i[e].slice()), i[e].splice(t, 1), !0)
},
l = { prefixed: !0 },
t = [
['requestFullscreen', 'exitFullscreen', 'fullscreenElement', 'fullscreenEnabled', 'fullscreenchange', 'fullscreenerror', 'fullscreen'],
['webkitRequestFullscreen', 'webkitExitFullscreen', 'webkitFullscreenElement', 'webkitFullscreenEnabled', 'webkitfullscreenchange', 'webkitfullscreenerror', '-webkit-full-screen'],
['mozRequestFullScreen', 'mozCancelFullScreen', 'mozFullScreenElement', 'mozFullScreenEnabled', 'mozfullscreenchange', 'mozfullscreenerror', '-moz-full-screen'],
['msRequestFullscreen', 'msExitFullscreen', 'msFullscreenElement', 'msFullscreenEnabled', 'MSFullscreenChange', 'MSFullscreenError', '-ms-fullscreen'],
],
r = t[0],
s = 0;
s < t.length;
s++
)
if (t[s][1] in document) {
e = t[s]
break
}
if (e) {
for (var o = 0; o < e.length; o++) l[r[o]] = e[o]
l.prefixed = e[0] !== r[0]
}
var c = [],
d = function (a, s) {
return function (e, t, i) {
var n,
r = s.levels[t],
t = new RegExp('^(' + r + ')$')
'log' !== e && i.unshift(e.toUpperCase() + ':'),
i.unshift(a + ':'),
c && (c.push([].concat(i)), (n = c.length - 1e3), c.splice(0, 0 < n ? n : 0)),
!window.console ||
((n = !(n = window.console[e]) && 'debug' === e ? window.console.info || window.console.log : n) && r && t.test(e) && n[Array.isArray(i) ? 'apply' : 'call'](window.console, i))
}
}
var h = (function t(i) {
function n() {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
a('log', r, t)
}
var r = 'info',
a = d(i, n)
return (
(n.createLogger = function (e) {
return t(i + ': ' + e)
}),
(n.levels = { all: 'debug|log|warn|error', off: '', debug: 'debug|log|warn|error', info: 'log|warn|error', warn: 'warn|error', error: 'error', DEFAULT: r }),
(n.level = function (e) {
if ('string' == typeof e) {
if (!n.levels.hasOwnProperty(e)) throw new Error('"' + e + '" in not a valid log level')
r = e
}
return r
}),
((n.history = function () {
return c ? [].concat(c) : []
}).filter = function (t) {
return (c || []).filter(function (e) {
return new RegExp('.*' + t + '.*').test(e[0])
})
}),
(n.history.clear = function () {
c && (c.length = 0)
}),
(n.history.disable = function () {
null !== c && ((c.length = 0), (c = null))
}),
(n.history.enable = function () {
null === c && (c = [])
}),
(n.error = function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
return a('error', r, t)
}),
(n.warn = function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
return a('warn', r, t)
}),
(n.debug = function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
return a('debug', r, t)
}),
n
)
})('VIDEOJS'),
p = h.createLogger,
f = 'undefined' != typeof globalThis ? globalThis : 'undefined' != typeof window ? window : 'undefined' != typeof global ? global : 'undefined' != typeof self ? self : {}
function m(e, t) {
return e((t = { exports: {} }), t.exports), t.exports
}
var g = m(function (e) {
function t() {
return (
(e.exports = t =
Object.assign ||
function (e) {
for (var t = 1; t < arguments.length; t++) {
var i,
n = arguments[t]
for (i in n) Object.prototype.hasOwnProperty.call(n, i) && (e[i] = n[i])
}
return e
}),
t.apply(this, arguments)
)
}
e.exports = t
}),
y = Object.prototype.toString,
v = function (e) {
return T(e) ? Object.keys(e) : []
}
function _(t, i) {
v(t).forEach(function (e) {
return i(t[e], e)
})
}
function b(i) {
for (var e = arguments.length, t = new Array(1 < e ? e - 1 : 0), n = 1; n < e; n++) t[n - 1] = arguments[n]
return Object.assign
? g.apply(void 0, [i].concat(t))
: (t.forEach(function (e) {
e &&
_(e, function (e, t) {
i[t] = e
})
}),
i)
}
function T(e) {
return !!e && 'object' == typeof e
}
function S(e) {
return T(e) && '[object Object]' === y.call(e) && e.constructor === Object
}
function w(e, t) {
if (!e || !t) return ''
if ('function' != typeof window.getComputedStyle) return ''
var i
try {
i = window.getComputedStyle(e)
} catch (e) {
return ''
}
return i ? i.getPropertyValue(t) || i[t] : ''
}
var E = (window.navigator && window.navigator.userAgent) || '',
k = /AppleWebKit\/([\d.]+)/i.exec(E),
C = k ? parseFloat(k.pop()) : null,
I = /iPod/i.test(E),
x = (jt = E.match(/OS (\d+)_/i)) && jt[1] ? jt[1] : null,
A = /Android/i.test(E),
P = (function () {
var e = E.match(/Android (\d+)(?:\.(\d+))?(?:\.(\d+))*/i)
if (!e) return null
var t = e[1] && parseFloat(e[1]),
i = e[2] && parseFloat(e[2])
return t && i ? parseFloat(e[1] + '.' + e[2]) : t || null
})(),
L = A && P < 5 && C < 537,
D = /Firefox/i.test(E),
O = /Edg/i.test(E),
M = !O && (/Chrome/i.test(E) || /CriOS/i.test(E)),
R = (zt = E.match(/(Chrome|CriOS)\/(\d+)/)) && zt[2] ? parseFloat(zt[2]) : null,
N = (Xt = !(Xt = (Xt = /MSIE\s(\d+)\.\d/.exec(E)) && parseFloat(Xt[1])) && /Trident\/7.0/i.test(E) && /rv:11.0/.test(E) ? 11 : Xt),
U = /Safari/i.test(E) && !M && !A && !O,
B = /Windows/i.test(E),
F = Boolean(X() && ('ontouchstart' in window || window.navigator.maxTouchPoints || (window.DocumentTouch && window.document instanceof window.DocumentTouch))),
j = /iPad/i.test(E) || (U && F && !/iPhone/i.test(E)),
H = /iPhone/i.test(E) && !j,
q = H || j || I,
V = (U || q) && !M,
W = Object.freeze({
__proto__: null,
IS_IPOD: I,
IOS_VERSION: x,
IS_ANDROID: A,
ANDROID_VERSION: P,
IS_NATIVE_ANDROID: L,
IS_FIREFOX: D,
IS_EDGE: O,
IS_CHROME: M,
CHROME_VERSION: R,
IE_VERSION: N,
IS_SAFARI: U,
IS_WINDOWS: B,
TOUCH_ENABLED: F,
IS_IPAD: j,
IS_IPHONE: H,
IS_IOS: q,
IS_ANY_SAFARI: V,
})
function G(e) {
return 'string' == typeof e && Boolean(e.trim())
}
function z(e) {
if (0 <= e.indexOf(' ')) throw new Error('class has illegal whitespace characters')
}
function X() {
return document === window.document
}
function K(e) {
return T(e) && 1 === e.nodeType
}
function Y() {
try {
return window.parent !== window.self
} catch (e) {
return !0
}
}
function Q(i) {
return function (e, t) {
if (!G(e)) return document[i](null)
t = K((t = G(t) ? document.querySelector(t) : t)) ? t : document
return t[i] && t[i](e)
}
}
function $(e, i, t, n) {
void 0 === e && (e = 'div'), void 0 === i && (i = {}), void 0 === t && (t = {})
var r = document.createElement(e)
return (
Object.getOwnPropertyNames(i).forEach(function (e) {
var t = i[e]
;-1 !== e.indexOf('aria-') || 'role' === e || 'type' === e
? (h.warn(
'Setting attributes in the second argument of createEl()\nhas been deprecated. Use the third argument instead.\ncreateEl(type, properties, attributes). Attempting to set ' +
e +
' to ' +
t +
'.'
),
r.setAttribute(e, t))
: 'textContent' === e
? J(r, t)
: (r[e] === t && 'tabIndex' !== e) || (r[e] = t)
}),
Object.getOwnPropertyNames(t).forEach(function (e) {
r.setAttribute(e, t[e])
}),
n && ye(r, n),
r
)
}
function J(e, t) {
return 'undefined' == typeof e.textContent ? (e.innerText = t) : (e.textContent = t), e
}
function Z(e, t) {
t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e)
}
function ee(e, t) {
return z(t), e.classList ? e.classList.contains(t) : new RegExp('(^|\\s)' + t + '($|\\s)').test(e.className)
}
function te(e, t) {
return e.classList ? e.classList.add(t) : ee(e, t) || (e.className = (e.className + ' ' + t).trim()), e
}
function ie(e, t) {
return e
? (e.classList
? e.classList.remove(t)
: (z(t),
(e.className = e.className
.split(/\s+/)
.filter(function (e) {
return e !== t
})
.join(' '))),
e)
: (h.warn("removeClass was called with an element that doesn't exist"), null)
}
function ne(e, t, i) {
var n = ee(e, t)
if ((i = 'boolean' != typeof (i = 'function' == typeof i ? i(e, t) : i) ? !n : i) !== n) return (i ? te : ie)(e, t), e
}
function re(i, n) {
Object.getOwnPropertyNames(n).forEach(function (e) {
var t = n[e]
null === t || 'undefined' == typeof t || !1 === t ? i.removeAttribute(e) : i.setAttribute(e, !0 === t ? '' : t)
})
}
function ae(e) {
var t = {},
i = ',autoplay,controls,playsinline,loop,muted,default,defaultMuted,'
if (e && e.attributes && 0 < e.attributes.length)
for (var n = e.attributes, r = n.length - 1; 0 <= r; r--) {
var a = n[r].name,
s = n[r].value
;('boolean' != typeof e[a] && -1 === i.indexOf(',' + a + ',')) || (s = null !== s), (t[a] = s)
}
return t
}
function se(e, t) {
return e.getAttribute(t)
}
function oe(e, t, i) {
e.setAttribute(t, i)
}
function ue(e, t) {
e.removeAttribute(t)
}
function le() {
document.body.focus(),
(document.onselectstart = function () {
return !1
})
}
function ce() {
document.onselectstart = function () {
return !0
}
}
function de(e) {
if (e && e.getBoundingClientRect && e.parentNode) {
var t = e.getBoundingClientRect(),
i = {}
return (
['bottom', 'height', 'left', 'right', 'top', 'width'].forEach(function (e) {
void 0 !== t[e] && (i[e] = t[e])
}),
i.height || (i.height = parseFloat(w(e, 'height'))),
i.width || (i.width = parseFloat(w(e, 'width'))),
i
)
}
}
function he(e) {
if (!e || (e && !e.offsetParent)) return { left: 0, top: 0, width: 0, height: 0 }
for (var t = e.offsetWidth, i = e.offsetHeight, n = 0, r = 0; e.offsetParent && e !== document[l.fullscreenElement]; ) (n += e.offsetLeft), (r += e.offsetTop), (e = e.offsetParent)
return { left: n, top: r, width: t, height: i }
}
function pe(e, t) {
var i = { x: 0, y: 0 }
if (q)
for (var n = e; n && 'html' !== n.nodeName.toLowerCase(); ) {
var r,
a = w(n, 'transform')
;/^matrix/.test(a)
? ((r = a.slice(7, -1).split(/,\s/).map(Number)), (i.x += r[4]), (i.y += r[5]))
: /^matrix3d/.test(a) && ((a = a.slice(9, -1).split(/,\s/).map(Number)), (i.x += a[12]), (i.y += a[13])),
(n = n.parentNode)
}
var s = {},
o = he(t.target),
u = he(e),
l = u.width,
c = u.height,
e = t.offsetY - (u.top - o.top),
o = t.offsetX - (u.left - o.left)
return (
t.changedTouches && ((o = t.changedTouches[0].pageX - u.left), (e = t.changedTouches[0].pageY + u.top), q && ((o -= i.x), (e -= i.y))),
(s.y = 1 - Math.max(0, Math.min(1, e / c))),
(s.x = Math.max(0, Math.min(1, o / l))),
s
)
}
function fe(e) {
return T(e) && 3 === e.nodeType
}
function me(e) {
for (; e.firstChild; ) e.removeChild(e.firstChild)
return e
}
function ge(e) {
return (
'function' == typeof e && (e = e()),
(Array.isArray(e) ? e : [e])
.map(function (e) {
return K((e = 'function' == typeof e ? e() : e)) || fe(e) ? e : 'string' == typeof e && /\S/.test(e) ? document.createTextNode(e) : void 0
})
.filter(function (e) {
return e
})
)
}
function ye(t, e) {
return (
ge(e).forEach(function (e) {
return t.appendChild(e)
}),
t
)
}
function ve(e, t) {
return ye(me(e), t)
}
function _e(e) {
return (
(void 0 === e.button && void 0 === e.buttons) ||
(0 === e.button && void 0 === e.buttons) ||
('mouseup' === e.type && 0 === e.button && 0 === e.buttons) ||
(0 === e.button && 1 === e.buttons)
)
}
var be,
Te = Q('querySelector'),
Se = Q('querySelectorAll'),
we = Object.freeze({
__proto__: null,
isReal: X,
isEl: K,
isInFrame: Y,
createEl: $,
textContent: J,
prependTo: Z,
hasClass: ee,
addClass: te,
removeClass: ie,
toggleClass: ne,
setAttributes: re,
getAttributes: ae,
getAttribute: se,
setAttribute: oe,
removeAttribute: ue,
blockTextSelection: le,
unblockTextSelection: ce,
getBoundingClientRect: de,
findPosition: he,
getPointerPosition: pe,
isTextNode: fe,
emptyEl: me,
normalizeContent: ge,
appendContent: ye,
insertContent: ve,
isSingleLeftClick: _e,
$: Te,
$$: Se,
}),
Ee = !1,
ke = function () {
if (!1 !== be.options.autoSetup) {
var e = Array.prototype.slice.call(document.getElementsByTagName('video')),
t = Array.prototype.slice.call(document.getElementsByTagName('audio')),
i = Array.prototype.slice.call(document.getElementsByTagName('video-js')),
n = e.concat(t, i)
if (n && 0 < n.length)
for (var r = 0, a = n.length; r < a; r++) {
var s = n[r]
if (!s || !s.getAttribute) {
Ce(1)
break
}
void 0 === s.player && null !== s.getAttribute('data-setup') && be(s)
}
else Ee || Ce(1)
}
}
function Ce(e, t) {
X() && (t && (be = t), window.setTimeout(ke, e))
}
function Ie() {
;(Ee = !0), window.removeEventListener('load', Ie)
}
X() && ('complete' === document.readyState ? Ie() : window.addEventListener('load', Ie))
function xe(e) {
var t = document.createElement('style')
return (t.className = e), t
}
function Ae(e, t) {
e.styleSheet ? (e.styleSheet.cssText = t) : (e.textContent = t)
}
var Pe = 3
window.WeakMap ||
(ui = (function () {
function e() {
;(this.vdata = 'vdata' + Math.floor((window.performance && window.performance.now()) || Date.now())), (this.data = {})
}
var t = e.prototype
return (
(t.set = function (e, t) {
var i = e[this.vdata] || Pe++
return e[this.vdata] || (e[this.vdata] = i), (this.data[i] = t), this
}),
(t.get = function (e) {
var t = e[this.vdata]
if (t) return this.data[t]
h('We have no data for this element', e)
}),
(t.has = function (e) {
return e[this.vdata] in this.data
}),
(t.delete = function (e) {
var t = e[this.vdata]
t && (delete this.data[t], delete e[this.vdata])
}),
e
)
})())
var Le,
De = new (window.WeakMap ? WeakMap : ui)()
function Oe(e, t) {
var i
De.has(e) &&
(0 === (i = De.get(e)).handlers[t].length &&
(delete i.handlers[t], e.removeEventListener ? e.removeEventListener(t, i.dispatcher, !1) : e.detachEvent && e.detachEvent('on' + t, i.dispatcher)),
Object.getOwnPropertyNames(i.handlers).length <= 0 && (delete i.handlers, delete i.dispatcher, delete i.disabled),
0 === Object.getOwnPropertyNames(i).length && De.delete(e))
}
function Me(t, i, e, n) {
e.forEach(function (e) {
t(i, e, n)
})
}
function Re(e) {
if (e.fixed_) return e
function t() {
return !0
}
function i() {
return !1
}
if (!e || !e.isPropagationStopped || !e.isImmediatePropagationStopped) {
var n,
r,
a,
s = e || window.event
for (n in ((e = {}), s))
'layerX' !== n &&
'layerY' !== n &&
'keyLocation' !== n &&
'webkitMovementX' !== n &&
'webkitMovementY' !== n &&
'path' !== n &&
(('returnValue' === n && s.preventDefault) || (e[n] = s[n]))
e.target || (e.target = e.srcElement || document),
e.relatedTarget || (e.relatedTarget = e.fromElement === e.target ? e.toElement : e.fromElement),
(e.preventDefault = function () {
s.preventDefault && s.preventDefault(), (e.returnValue = !1), (s.returnValue = !1), (e.defaultPrevented = !0)
}),
(e.defaultPrevented = !1),
(e.stopPropagation = function () {
s.stopPropagation && s.stopPropagation(), (e.cancelBubble = !0), (s.cancelBubble = !0), (e.isPropagationStopped = t)
}),
(e.isPropagationStopped = i),
(e.stopImmediatePropagation = function () {
s.stopImmediatePropagation && s.stopImmediatePropagation(), (e.isImmediatePropagationStopped = t), e.stopPropagation()
}),
(e.isImmediatePropagationStopped = i),
null !== e.clientX &&
void 0 !== e.clientX &&
((r = document.documentElement),
(a = document.body),
(e.pageX = e.clientX + ((r && r.scrollLeft) || (a && a.scrollLeft) || 0) - ((r && r.clientLeft) || (a && a.clientLeft) || 0)),
(e.pageY = e.clientY + ((r && r.scrollTop) || (a && a.scrollTop) || 0) - ((r && r.clientTop) || (a && a.clientTop) || 0))),
(e.which = e.charCode || e.keyCode),
null !== e.button && void 0 !== e.button && (e.button = 1 & e.button ? 0 : 4 & e.button ? 1 : 2 & e.button ? 2 : 0)
}
return (e.fixed_ = !0), e
}
var Ne = function () {
if ('boolean' != typeof Le) {
Le = !1
try {
var e = Object.defineProperty({}, 'passive', {
get: function () {
Le = !0
},
})
window.addEventListener('test', null, e), window.removeEventListener('test', null, e)
} catch (e) {}
}
return Le
},
Ue = ['touchstart', 'touchmove']
function Be(s, e, t) {
if (Array.isArray(e)) return Me(Be, s, e, t)
De.has(s) || De.set(s, {})
var o = De.get(s)
o.handlers || (o.handlers = {}),
o.handlers[e] || (o.handlers[e] = []),
t.guid || (t.guid = Pe++),
o.handlers[e].push(t),
o.dispatcher ||
((o.disabled = !1),
(o.dispatcher = function (e, t) {
if (!o.disabled) {
e = Re(e)
var i = o.handlers[e.type]
if (i)
for (var n = i.slice(0), r = 0, a = n.length; r < a && !e.isImmediatePropagationStopped(); r++)
try {
n[r].call(s, e, t)
} catch (e) {
h.error(e)
}
}
})),
1 === o.handlers[e].length &&
(s.addEventListener ? ((t = !1), Ne() && -1 < Ue.indexOf(e) && (t = { passive: !0 }), s.addEventListener(e, o.dispatcher, t)) : s.attachEvent && s.attachEvent('on' + e, o.dispatcher))
}
function Fe(e, t, i) {
if (De.has(e)) {
var n = De.get(e)
if (n.handlers) {
if (Array.isArray(t)) return Me(Fe, e, t, i)
var r = function (e, t) {
;(n.handlers[t] = []), Oe(e, t)
}
if (void 0 !== t) {
var a = n.handlers[t]
if (a)
if (i) {
if (i.guid) for (var s = 0; s < a.length; s++) a[s].guid === i.guid && a.splice(s--, 1)
Oe(e, t)
} else r(e, t)
} else for (var o in n.handlers) Object.prototype.hasOwnProperty.call(n.handlers || {}, o) && r(e, o)
}
}
}
function je(e, t, i) {
var n = De.has(e) ? De.get(e) : {},
r = e.parentNode || e.ownerDocument
return (
'string' == typeof t ? (t = { type: t, target: e }) : t.target || (t.target = e),
(t = Re(t)),
n.dispatcher && n.dispatcher.call(e, t, i),
r && !t.isPropagationStopped() && !0 === t.bubbles
? je.call(null, r, t, i)
: !r &&
!t.defaultPrevented &&
t.target &&
t.target[t.type] &&
(De.has(t.target) || De.set(t.target, {}),
(r = De.get(t.target)),
t.target[t.type] && ((r.disabled = !0), 'function' == typeof t.target[t.type] && t.target[t.type](), (r.disabled = !1))),
!t.defaultPrevented
)
}
function He(e, t, i) {
if (Array.isArray(t)) return Me(He, e, t, i)
function n() {
Fe(e, t, n), i.apply(this, arguments)
}
;(n.guid = i.guid = i.guid || Pe++), Be(e, t, n)
}
function qe(e, t, i) {
function n() {
Fe(e, t, n), i.apply(this, arguments)
}
;(n.guid = i.guid = i.guid || Pe++), Be(e, t, n)
}
function Ve(e, t, i) {
return t.guid || (t.guid = Pe++), ((e = t.bind(e)).guid = i ? i + '_' + t.guid : t.guid), e
}
function We(t, i) {
var n = window.performance.now()
return function () {
var e = window.performance.now()
i <= e - n && (t.apply(void 0, arguments), (n = e))
}
}
function Ge(n, r, a, s) {
var o
function e() {
var e = this,
t = arguments,
i = function () {
;(i = o = null), a || n.apply(e, t)
}
!o && a && n.apply(e, t), s.clearTimeout(o), (o = s.setTimeout(i, r))
}
return (
void 0 === s && (s = window),
(e.cancel = function () {
s.clearTimeout(o), (o = null)
}),
e
)
}
function ze() {}
var Xe,
Ke = Object.freeze({ __proto__: null, fixEvent: Re, on: Be, off: Fe, trigger: je, one: He, any: qe })
;(ze.prototype.allowedEvents_ = {}),
(ze.prototype.addEventListener = ze.prototype.on =
function (e, t) {
var i = this.addEventListener
;(this.addEventListener = function () {}), Be(this, e, t), (this.addEventListener = i)
}),
(ze.prototype.removeEventListener = ze.prototype.off =
function (e, t) {
Fe(this, e, t)
}),
(ze.prototype.one = function (e, t) {
var i = this.addEventListener
;(this.addEventListener = function () {}), He(this, e, t), (this.addEventListener = i)
}),
(ze.prototype.any = function (e, t) {
var i = this.addEventListener
;(this.addEventListener = function () {}), qe(this, e, t), (this.addEventListener = i)
}),
(ze.prototype.dispatchEvent = ze.prototype.trigger =
function (e) {
var t = e.type || e
;(e = Re((e = 'string' == typeof e ? { type: t } : e))), this.allowedEvents_[t] && this['on' + t] && this['on' + t](e), je(this, e)
}),
(ze.prototype.queueTrigger = function (e) {
var t = this
Xe = Xe || new Map()
var i = e.type || e,
n = Xe.get(this)
n || ((n = new Map()), Xe.set(this, n))
var r = n.get(i)
n.delete(i), window.clearTimeout(r)
r = window.setTimeout(function () {
0 === n.size && ((n = null), Xe.delete(t)), t.trigger(e)
}, 0)
n.set(i, r)
})
function Ye(e) {
return 'function' == typeof e.name ? e.name() : 'string' == typeof e.name ? e.name : e.name_ || (e.constructor && e.constructor.name ? e.constructor.name : typeof e)
}
function Qe(e) {
return ('string' == typeof e && /\S/.test(e)) || (Array.isArray(e) && !!e.length)
}
function $e(e, t, i) {
if (!e || (!e.nodeName && !it(e))) throw new Error('Invalid target for ' + Ye(t) + '#' + i + '; must be a DOM node or evented object.')
}
function Je(e, t, i) {
if (!Qe(e)) throw new Error('Invalid event type for ' + Ye(t) + '#' + i + '; must be a non-empty string or array.')
}
function Ze(e, t, i) {
if ('function' != typeof e) throw new Error('Invalid listener for ' + Ye(t) + '#' + i + '; must be a function.')
}
function et(e, t, i) {
var n,
r,
a = t.length < 3 || t[0] === e || t[0] === e.eventBusEl_,
t = a ? ((n = e.eventBusEl_), 3 <= t.length && t.shift(), (r = t[0]), t[1]) : ((n = t[0]), (r = t[1]), t[2])
return $e(n, e, i), Je(r, e, i), Ze(t, e, i), { isTargetingSelf: a, target: n, type: r, listener: (t = Ve(e, t)) }
}
function tt(e, t, i, n) {
$e(e, e, t), e.nodeName ? Ke[t](e, i, n) : e[t](i, n)
}
var it = function (t) {
return (
t instanceof ze ||
(!!t.eventBusEl_ &&
['on', 'one', 'off', 'trigger'].every(function (e) {
return 'function' == typeof t[e]
}))
)
},
nt = {
on: function () {
for (var e = this, t = arguments.length, i = new Array(t), n = 0; n < t; n++) i[n] = arguments[n]
var r,
a = et(this, i, 'on'),
s = a.isTargetingSelf,
o = a.target,
u = a.type,
l = a.listener
tt(o, 'on', u, l),
s ||
(((r = function () {
return e.off(o, u, l)
}).guid = l.guid),
((s = function () {
return e.off('dispose', r)
}).guid = l.guid),
tt(this, 'on', 'dispose', r),
tt(o, 'on', 'dispose', s))
},
one: function () {
for (var r = this, e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
var n = et(this, t, 'one'),
a = n.isTargetingSelf,
s = n.target,
o = n.type,
u = n.listener
a
? tt(s, 'one', o, u)
: (((a = function e() {
r.off(s, o, e)
for (var t = arguments.length, i = new Array(t), n = 0; n < t; n++) i[n] = arguments[n]
u.apply(null, i)
}).guid = u.guid),
tt(s, 'one', o, a))
},
any: function () {
for (var r = this, e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
var n = et(this, t, 'any'),
a = n.isTargetingSelf,
s = n.target,
o = n.type,
u = n.listener
a
? tt(s, 'any', o, u)
: (((a = function e() {
r.off(s, o, e)
for (var t = arguments.length, i = new Array(t), n = 0; n < t; n++) i[n] = arguments[n]
u.apply(null, i)
}).guid = u.guid),
tt(s, 'any', o, a))
},
off: function (e, t, i) {
!e || Qe(e)
? Fe(this.eventBusEl_, e, t)
: ((t = t),
$e((e = e), this, 'off'),
Je(t, this, 'off'),
Ze(i, this, 'off'),
(i = Ve(this, i)),
this.off('dispose', i),
e.nodeName ? (Fe(e, t, i), Fe(e, 'dispose', i)) : it(e) && (e.off(t, i), e.off('dispose', i)))
},
trigger: function (e, t) {
$e(this.eventBusEl_, this, 'trigger')
var i = e && 'string' != typeof e ? e.type : e
if (!Qe(i)) {
i = 'Invalid event type for ' + Ye(this) + '#trigger; must be a non-empty string or object with a type key that has a non-empty value.'
if (!e) throw new Error(i)
;(this.log || h).error(i)
}
return je(this.eventBusEl_, e, t)
},
}
function rt(e, t) {
t = (t = void 0 === t ? {} : t).eventBusKey
if (t) {
if (!e[t].nodeName) throw new Error('The eventBusKey "' + t + '" does not refer to an element.')
e.eventBusEl_ = e[t]
} else e.eventBusEl_ = $('span', { className: 'vjs-event-bus' })
return (
b(e, nt),
e.eventedCallbacks &&
e.eventedCallbacks.forEach(function (e) {
e()
}),
e.on('dispose', function () {
e.off(),
[e, e.el_, e.eventBusEl_].forEach(function (e) {
e && De.has(e) && De.delete(e)
}),
window.setTimeout(function () {
e.eventBusEl_ = null
}, 0)
}),
e
)
}
var at = {
state: {},
setState: function (e) {
var i,
n = this
return (
_((e = 'function' == typeof e ? e() : e), function (e, t) {
n.state[t] !== e && ((i = i || {})[t] = { from: n.state[t], to: e }), (n.state[t] = e)
}),
i && it(this) && this.trigger({ changes: i, type: 'statechanged' }),
i
)
},
}
function st(e, t) {
return b(e, at), (e.state = b({}, e.state, t)), 'function' == typeof e.handleStateChanged && it(e) && e.on('statechanged', e.handleStateChanged), e
}
function ot(e) {
return 'string' != typeof e
? e
: e.replace(/./, function (e) {
return e.toLowerCase()
})
}
function ut(e) {
return 'string' != typeof e
? e
: e.replace(/./, function (e) {
return e.toUpperCase()
})
}
function lt() {
for (var i = {}, e = arguments.length, t = new Array(e), n = 0; n < e; n++) t[n] = arguments[n]
return (
t.forEach(function (e) {
e &&
_(e, function (e, t) {
S(e) ? (S(i[t]) || (i[t] = {}), (i[t] = lt(i[t], e))) : (i[t] = e)
})
}),
i
)
}
var ct =
window.Map ||
(function () {
function e() {
this.map_ = {}
}
var t = e.prototype
return (
(t.has = function (e) {
return e in this.map_
}),
(t.delete = function (e) {
var t = this.has(e)
return delete this.map_[e], t
}),
(t.set = function (e, t) {
return (this.map_[e] = t), this
}),
(t.forEach = function (e, t) {
for (var i in this.map_) e.call(t, this.map_[i], i, this)
}),
e
)
})(),
dt =
window.Set ||
(function () {
function e() {
this.set_ = {}
}
var t = e.prototype
return (
(t.has = function (e) {
return e in this.set_
}),
(t.delete = function (e) {
var t = this.has(e)
return delete this.set_[e], t
}),
(t.add = function (e) {
return (this.set_[e] = 1), this
}),
(t.forEach = function (e, t) {
for (var i in this.set_) e.call(t, i, i, this)
}),
e
)
})(),
ht = m(function (e, t) {
function i(e) {
if ((!e || 'object' != typeof e || ((t = e.which || e.keyCode || e.charCode) && (e = t)), 'number' == typeof e)) return o[e]
var t = String(e),
e = n[t.toLowerCase()]
return e || ((e = r[t.toLowerCase()]) ? e : 1 === t.length ? t.charCodeAt(0) : void 0)
}
i.isEventKey = function (e, t) {
if (e && 'object' == typeof e) {
var i = e.which || e.keyCode || e.charCode
if (null == i) return !1
if ('string' == typeof t) {
e = n[t.toLowerCase()]
if (e) return e === i
if ((e = r[t.toLowerCase()])) return e === i
} else if ('number' == typeof t) return t === i
return !1
}
}
for (
var n =
((t = e.exports = i).code =
t.codes =
{
backspace: 8,
tab: 9,
enter: 13,
shift: 16,
ctrl: 17,
alt: 18,
'pause/break': 19,
'caps lock': 20,
esc: 27,
space: 32,
'page up': 33,
'page down': 34,
end: 35,
home: 36,
left: 37,
up: 38,
right: 39,
down: 40,
insert: 45,
delete: 46,
command: 91,
'left command': 91,
'right command': 93,
'numpad *': 106,
'numpad +': 107,
'numpad -': 109,
'numpad .': 110,
'numpad /': 111,
'num lock': 144,
'scroll lock': 145,
'my computer': 182,
'my calculator': 183,
';': 186,
'=': 187,
',': 188,
'-': 189,
'.': 190,
'/': 191,
'`': 192,
'[': 219,
'\\': 220,
']': 221,
"'": 222,
}),
r = (t.aliases = {
windows: 91,
'⇧': 16,
'⌥': 18,
'⌃': 17,
'⌘': 91,
ctl: 17,
control: 17,
option: 18,
pause: 19,
break: 19,
caps: 20,
return: 13,
escape: 27,
spc: 32,
spacebar: 32,
pgup: 33,
pgdn: 34,
ins: 45,
del: 46,
cmd: 91,
}),
a = 97;
a < 123;
a++
)
n[String.fromCharCode(a)] = a - 32
for (var a = 48; a < 58; a++) n[a - 48] = a
for (a = 1; a < 13; a++) n['f' + a] = a + 111
for (a = 0; a < 10; a++) n['numpad ' + a] = a + 96
var s,
o = (t.names = t.title = {})
for (a in n) o[n[a]] = a
for (s in r) n[s] = r[s]
})
ht.code, ht.codes, ht.aliases, ht.names, ht.title
var pt = (function () {
function s(e, t, i) {
var n = this
!e && this.play ? (this.player_ = e = this) : (this.player_ = e),
(this.isDisposed_ = !1),
(this.parentComponent_ = null),
(this.options_ = lt({}, this.options_)),
(t = this.options_ = lt(this.options_, t)),
(this.id_ = t.id || (t.el && t.el.id)),
this.id_ || ((e = (e && e.id && e.id()) || 'no_player'), (this.id_ = e + '_component_' + Pe++)),
(this.name_ = t.name || null),
t.el ? (this.el_ = t.el) : !1 !== t.createEl && (this.el_ = this.createEl()),
t.className &&
this.el_ &&
t.className.split(' ').forEach(function (e) {
return n.addClass(e)
}),
!1 !== t.evented &&
(rt(this, { eventBusKey: this.el_ ? 'el_' : null }),
(this.handleLanguagechange = this.handleLanguagechange.bind(this)),
this.on(this.player_, 'languagechange', this.handleLanguagechange)),
st(this, this.constructor.defaultState),
(this.children_ = []),
(this.childIndex_ = {}),
(this.childNameIndex_ = {}),
(this.setTimeoutIds_ = new dt()),
(this.setIntervalIds_ = new dt()),
(this.rafIds_ = new dt()),
(this.namedRafs_ = new ct()),
(this.clearingTimersOnDispose_ = !1) !== t.initChildren && this.initChildren(),
this.ready(i),
!1 !== t.reportTouchActivity && this.enableTouchActivity()
}
var e = s.prototype
return (
(e.dispose = function (e) {
if ((void 0 === e && (e = {}), !this.isDisposed_)) {
if ((this.readyQueue_ && (this.readyQueue_.length = 0), this.trigger({ type: 'dispose', bubbles: !1 }), (this.isDisposed_ = !0), this.children_))
for (var t = this.children_.length - 1; 0 <= t; t--) this.children_[t].dispose && this.children_[t].dispose()
;(this.children_ = null),
(this.childIndex_ = null),
(this.childNameIndex_ = null),
(this.parentComponent_ = null),
this.el_ && (this.el_.parentNode && (e.restoreEl ? this.el_.parentNode.replaceChild(e.restoreEl, this.el_) : this.el_.parentNode.removeChild(this.el_)), (this.el_ = null)),
(this.player_ = null)
}
}),
(e.isDisposed = function () {
return Boolean(this.isDisposed_)
}),
(e.player = function () {
return this.player_
}),
(e.options = function (e) {
return e && (this.options_ = lt(this.options_, e)), this.options_
}),
(e.el = function () {
return this.el_
}),
(e.createEl = function (e, t, i) {
return $(e, t, i)
}),
(e.localize = function (e, i, t) {
void 0 === t && (t = e)
var n = this.player_.language && this.player_.language(),
r = this.player_.languages && this.player_.languages(),
a = r && r[n],
n = n && n.split('-')[0],
n = r && r[n],
t = t
return (
a && a[e] ? (t = a[e]) : n && n[e] && (t = n[e]),
(t = i
? t.replace(/\{(\d+)\}/g, function (e, t) {
t = i[t - 1]
return 'undefined' == typeof t ? e : t
})
: t)
)
}),
(e.handleLanguagechange = function () {}),
(e.contentEl = function () {
return this.contentEl_ || this.el_
}),
(e.id = function () {
return this.id_
}),
(e.name = function () {
return this.name_
}),
(e.children = function () {
return this.children_
}),
(e.getChildById = function (e) {
return this.childIndex_[e]
}),
(e.getChild = function (e) {
if (e) return this.childNameIndex_[e]
}),
(e.getDescendant = function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
for (
var t = t.reduce(function (e, t) {
return e.concat(t)
}, []),
n = this,
r = 0;
r < t.length;
r++
)
if (!(n = n.getChild(t[r])) || !n.getChild) return
return n
}),
(e.addChild = function (e, t, i) {
if ((void 0 === t && (t = {}), void 0 === i && (i = this.children_.length), 'string' == typeof e)) {
var n = ut(e),
r = t.componentClass || n
t.name = n
var a = s.getComponent(r)
if (!a) throw new Error('Component ' + r + ' does not exist')
if ('function' != typeof a) return null
a = new a(this.player_ || this, t)
} else a = e
return (
a.parentComponent_ && a.parentComponent_.removeChild(a),
this.children_.splice(i, 0, a),
(a.parentComponent_ = this),
'function' == typeof a.id && (this.childIndex_[a.id()] = a),
(n = n || (a.name && ut(a.name()))) && ((this.childNameIndex_[n] = a), (this.childNameIndex_[ot(n)] = a)),
'function' == typeof a.el &&
a.el() &&
((n = null),
this.children_[i + 1] && (this.children_[i + 1].el_ ? (n = this.children_[i + 1].el_) : K(this.children_[i + 1]) && (n = this.children_[i + 1])),
this.contentEl().insertBefore(a.el(), n)),
a
)
}),
(e.removeChild = function (e) {
if ((e = 'string' == typeof e ? this.getChild(e) : e) && this.children_) {
for (var t, i = !1, n = this.children_.length - 1; 0 <= n; n--)
if (this.children_[n] === e) {
;(i = !0), this.children_.splice(n, 1)
break
}
i &&
((e.parentComponent_ = null),
(this.childIndex_[e.id()] = null),
(this.childNameIndex_[ut(e.name())] = null),
(this.childNameIndex_[ot(e.name())] = null),
(t = e.el()) && t.parentNode === this.contentEl() && this.contentEl().removeChild(e.el()))
}
}),
(e.initChildren = function () {
var i,
t,
e,
n = this,
r = this.options_.children
r &&
((i = this.options_),
(t = s.getComponent('Tech')),
(e = Array.isArray(r) ? r : Object.keys(r))
.concat(
Object.keys(this.options_).filter(function (t) {
return !e.some(function (e) {
return 'string' == typeof e ? t === e : t === e.name
})
})
)
.map(function (e) {
var t,
e = 'string' == typeof e ? r[(t = e)] || n.options_[t] || {} : ((t = e.name), e)
return { name: t, opts: e }
})
.filter(function (e) {
e = s.getComponent(e.opts.componentClass || ut(e.name))
return e && !t.isTech(e)
})
.forEach(function (e) {
var t = e.name,
e = e.opts
!1 !== (e = void 0 !== i[t] ? i[t] : e) && (((e = !0 === e ? {} : e).playerOptions = n.options_.playerOptions), (e = n.addChild(t, e)) && (n[t] = e))
}))
}),
(e.buildCSSClass = function () {
return ''
}),
(e.ready = function (e, t) {
if ((void 0 === t && (t = !1), e)) return this.isReady_ ? void (t ? e.call(this) : this.setTimeout(e, 1)) : ((this.readyQueue_ = this.readyQueue_ || []), void this.readyQueue_.push(e))
}),
(e.triggerReady = function () {
;(this.isReady_ = !0),
this.setTimeout(function () {
var e = this.readyQueue_
;(this.readyQueue_ = []),
e &&
0 < e.length &&
e.forEach(function (e) {
e.call(this)
}, this),
this.trigger('ready')
}, 1)
}),
(e.$ = function (e, t) {
return Te(e, t || this.contentEl())
}),
(e.$$ = function (e, t) {
return Se(e, t || this.contentEl())
}),
(e.hasClass = function (e) {
return ee(this.el_, e)
}),
(e.addClass = function (e) {
te(this.el_, e)
}),
(e.removeClass = function (e) {
ie(this.el_, e)
}),
(e.toggleClass = function (e, t) {
ne(this.el_, e, t)
}),
(e.show = function () {
this.removeClass('vjs-hidden')
}),
(e.hide = function () {
this.addClass('vjs-hidden')
}),
(e.lockShowing = function () {
this.addClass('vjs-lock-showing')
}),
(e.unlockShowing = function () {
this.removeClass('vjs-lock-showing')
}),
(e.getAttribute = function (e) {
return se(this.el_, e)
}),
(e.setAttribute = function (e, t) {
oe(this.el_, e, t)
}),
(e.removeAttribute = function (e) {
ue(this.el_, e)
}),
(e.width = function (e, t) {
return this.dimension('width', e, t)
}),
(e.height = function (e, t) {
return this.dimension('height', e, t)
}),
(e.dimensions = function (e, t) {
this.width(e, !0), this.height(t)
}),
(e.dimension = function (e, t, i) {
if (void 0 !== t)
return (
-1 !== ('' + (t = null === t || t != t ? 0 : t)).indexOf('%') || -1 !== ('' + t).indexOf('px') ? (this.el_.style[e] = t) : (this.el_.style[e] = 'auto' === t ? '' : t + 'px'),
void (i || this.trigger('componentresize'))
)
if (!this.el_) return 0
;(t = this.el_.style[e]), (i = t.indexOf('px'))
return -1 !== i ? parseInt(t.slice(0, i), 10) : parseInt(this.el_['offset' + ut(e)], 10)
}),
(e.currentDimension = function (e) {
var t = 0
if ('width' !== e && 'height' !== e) throw new Error('currentDimension only accepts width or height value')
return (t = w(this.el_, e)), (0 !== (t = parseFloat(t)) && !isNaN(t)) || ((e = 'offset' + ut(e)), (t = this.el_[e])), t
}),
(e.currentDimensions = function () {
return { width: this.currentDimension('width'), height: this.currentDimension('height') }
}),
(e.currentWidth = function () {
return this.currentDimension('width')
}),
(e.currentHeight = function () {
return this.currentDimension('height')
}),
(e.focus = function () {
this.el_.focus()
}),
(e.blur = function () {
this.el_.blur()
}),
(e.handleKeyDown = function (e) {
this.player_ && (ht.isEventKey(e, 'Tab') || e.stopPropagation(), this.player_.handleKeyDown(e))
}),
(e.handleKeyPress = function (e) {
this.handleKeyDown(e)
}),
(e.emitTapEvents = function () {
var i,
t = 0,
n = null
this.on('touchstart', function (e) {
1 === e.touches.length && ((n = { pageX: e.touches[0].pageX, pageY: e.touches[0].pageY }), (t = window.performance.now()), (i = !0))
}),
this.on('touchmove', function (e) {
var t
1 < e.touches.length ? (i = !1) : n && ((t = e.touches[0].pageX - n.pageX), (e = e.touches[0].pageY - n.pageY), 10 < Math.sqrt(t * t + e * e) && (i = !1))
})
function e() {
i = !1
}
this.on('touchleave', e),
this.on('touchcancel', e),
this.on('touchend', function (e) {
!(n = null) === i && window.performance.now() - t < 200 && (e.preventDefault(), this.trigger('tap'))
})
}),
(e.enableTouchActivity = function () {
var t, i, e
this.player() &&
this.player().reportUserActivity &&
((t = Ve(this.player(), this.player().reportUserActivity)),
this.on('touchstart', function () {
t(), this.clearInterval(i), (i = this.setInterval(t, 250))
}),
(e = function (e) {
t(), this.clearInterval(i)
}),
this.on('touchmove', t),
this.on('touchend', e),
this.on('touchcancel', e))
}),
(e.setTimeout = function (e, t) {
var i,
n = this
return (
(e = Ve(this, e)),
this.clearTimersOnDispose_(),
(i = window.setTimeout(function () {
n.setTimeoutIds_.has(i) && n.setTimeoutIds_.delete(i), e()
}, t)),
this.setTimeoutIds_.add(i),
i
)
}),
(e.clearTimeout = function (e) {
return this.setTimeoutIds_.has(e) && (this.setTimeoutIds_.delete(e), window.clearTimeout(e)), e
}),
(e.setInterval = function (e, t) {
;(e = Ve(this, e)), this.clearTimersOnDispose_()
t = window.setInterval(e, t)
return this.setIntervalIds_.add(t), t
}),
(e.clearInterval = function (e) {
return this.setIntervalIds_.has(e) && (this.setIntervalIds_.delete(e), window.clearInterval(e)), e
}),
(e.requestAnimationFrame = function (e) {
var t,
i = this
return this.supportsRaf_
? (this.clearTimersOnDispose_(),
(e = Ve(this, e)),
(t = window.requestAnimationFrame(function () {
i.rafIds_.has(t) && i.rafIds_.delete(t), e()
})),
this.rafIds_.add(t),
t)
: this.setTimeout(e, 1e3 / 60)
}),
(e.requestNamedAnimationFrame = function (e, t) {
var i = this
if (!this.namedRafs_.has(e)) {
this.clearTimersOnDispose_(), (t = Ve(this, t))
var n = this.requestAnimationFrame(function () {
t(), i.namedRafs_.has(e) && i.namedRafs_.delete(e)
})
return this.namedRafs_.set(e, n), e
}
}),
(e.cancelNamedAnimationFrame = function (e) {
this.namedRafs_.has(e) && (this.cancelAnimationFrame(this.namedRafs_.get(e)), this.namedRafs_.delete(e))
}),
(e.cancelAnimationFrame = function (e) {
return this.supportsRaf_ ? (this.rafIds_.has(e) && (this.rafIds_.delete(e), window.cancelAnimationFrame(e)), e) : this.clearTimeout(e)
}),
(e.clearTimersOnDispose_ = function () {
var n = this
this.clearingTimersOnDispose_ ||
((this.clearingTimersOnDispose_ = !0),
this.one('dispose', function () {
;[
['namedRafs_', 'cancelNamedAnimationFrame'],
['rafIds_', 'cancelAnimationFrame'],
['setTimeoutIds_', 'clearTimeout'],
['setIntervalIds_', 'clearInterval'],
].forEach(function (e) {
var t = e[0],
i = e[1]
n[t].forEach(function (e, t) {
return n[i](t)
})
}),
(n.clearingTimersOnDispose_ = !1)
}))
}),
(s.registerComponent = function (e, t) {
if ('string' != typeof e || !e) throw new Error('Illegal component name, "' + e + '"; must be a non-empty string.')
var i = s.getComponent('Tech'),
n = i && i.isTech(t),
i = s === t || s.prototype.isPrototypeOf(t.prototype)
if (n || !i) {
var r = n ? 'techs must be registered using Tech.registerTech()' : 'must be a Component subclass'
throw new Error('Illegal component, "' + e + '"; ' + r + '.')
}
;(e = ut(e)), s.components_ || (s.components_ = {})
r = s.getComponent('Player')
if ('Player' === e && r && r.players) {
var a = r.players,
r = Object.keys(a)
if (
a &&
0 < r.length &&
r
.map(function (e) {
return a[e]
})
.every(Boolean)
)
throw new Error('Can not register Player component after player has been created.')
}
return (s.components_[e] = t), (s.components_[ot(e)] = t)
}),
(s.getComponent = function (e) {
if (e && s.components_) return s.components_[e]
}),
s
)
})()
;(pt.prototype.supportsRaf_ = 'function' == typeof window.requestAnimationFrame && 'function' == typeof window.cancelAnimationFrame), pt.registerComponent('Component', pt)
var ft = function (e) {
if (void 0 === e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called")
return e
}
var mt = function (e, t) {
;(e.prototype = Object.create(t.prototype)), ((e.prototype.constructor = e).__proto__ = t)
}
function gt(e, t, i, n) {
return (
(function (e, t, i) {
if ('number' != typeof t || t < 0 || i < t)
throw new Error("Failed to execute '" + e + "' on 'TimeRanges': The index provided (" + t + ') is non-numeric or out of bounds (0-' + i + ').')
})(e, n, i.length - 1),
i[n][t]
)
}
function yt(e) {
var t =
void 0 === e || 0 === e.length
? {
length: 0,
start: function () {
throw new Error('This TimeRanges object is empty')
},
end: function () {
throw new Error('This TimeRanges object is empty')
},
}
: { length: e.length, start: gt.bind(null, 'start', 0, e), end: gt.bind(null, 'end', 1, e) }
return (
window.Symbol &&
window.Symbol.iterator &&
(t[window.Symbol.iterator] = function () {
return (e || []).values()
}),
t
)
}
function vt(e, t) {
return Array.isArray(e) ? yt(e) : void 0 === e || void 0 === t ? yt() : yt([[e, t]])
}
function _t(e, t) {
var i,
n,
r = 0
if (!t) return 0
;(e && e.length) || (e = vt(0, 0))
for (var a = 0; a < e.length; a++) (i = e.start(a)), (r += (n = t < (n = e.end(a)) ? t : n) - i)
return r / t
}
function bt(e) {
if (e instanceof bt) return e
'number' == typeof e ? (this.code = e) : 'string' == typeof e ? (this.message = e) : T(e) && ('number' == typeof e.code && (this.code = e.code), b(this, e)),
this.message || (this.message = bt.defaultMessages[this.code] || '')
}
;(bt.prototype.code = 0),
(bt.prototype.message = ''),
(bt.prototype.status = null),
(bt.errorTypes = ['MEDIA_ERR_CUSTOM', 'MEDIA_ERR_ABORTED', 'MEDIA_ERR_NETWORK', 'MEDIA_ERR_DECODE', 'MEDIA_ERR_SRC_NOT_SUPPORTED', 'MEDIA_ERR_ENCRYPTED']),
(bt.defaultMessages = {
1: 'You aborted the media playback',
2: 'A network error caused the media download to fail part-way.',
3: 'The media playback was aborted due to a corruption problem or because the media used features your browser did not support.',
4: 'The media could not be loaded, either because the server or network failed or because the format is not supported.',
5: 'The media is encrypted and we do not have the keys to decrypt it.',
})
for (var Tt = 0; Tt < bt.errorTypes.length; Tt++) (bt[bt.errorTypes[Tt]] = Tt), (bt.prototype[bt.errorTypes[Tt]] = Tt)
var St = function (e, t) {
var i,
n = null
try {
i = JSON.parse(e, t)
} catch (e) {
n = e
}
return [n, i]
}
function wt(e) {
return null != e && 'function' == typeof e.then
}
function Et(e) {
wt(e) && e.then(null, function (e) {})
}
function kt(n) {
return ['kind', 'label', 'language', 'id', 'inBandMetadataTrackDispatchType', 'mode', 'src'].reduce(
function (e, t, i) {
return n[t] && (e[t] = n[t]), e
},
{
cues:
n.cues &&
Array.prototype.map.call(n.cues, function (e) {
return { startTime: e.startTime, endTime: e.endTime, text: e.text, id: e.id }
}),
}
)
}
var Ct = function (e) {
var t = e.$$('track'),
i = Array.prototype.map.call(t, function (e) {
return e.track
})
return Array.prototype.map
.call(t, function (e) {
var t = kt(e.track)
return e.src && (t.src = e.src), t
})
.concat(
Array.prototype.filter
.call(e.textTracks(), function (e) {
return -1 === i.indexOf(e)
})
.map(kt)
)
},
It = function (e, i) {
return (
e.forEach(function (e) {
var t = i.addRemoteTextTrack(e).track
!e.src &&
e.cues &&
e.cues.forEach(function (e) {
return t.addCue(e)
})
}),
i.textTracks()
)
},
xt = 'vjs-modal-dialog',
At = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
(i.handleKeyDown_ = function (e) {
return i.handleKeyDown(e)
}),
(i.close_ = function (e) {
return i.close(e)
}),
(i.opened_ = i.hasBeenOpened_ = i.hasBeenFilled_ = !1),
i.closeable(!i.options_.uncloseable),
i.content(i.options_.content),
(i.contentEl_ = $('div', { className: xt + '-content' }, { role: 'document' })),
(i.descEl_ = $('p', { className: xt + '-description vjs-control-text', id: i.el().getAttribute('aria-describedby') })),
J(i.descEl_, i.description()),
i.el_.appendChild(i.descEl_),
i.el_.appendChild(i.contentEl_),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.createEl = function () {
return n.prototype.createEl.call(
this,
'div',
{ className: this.buildCSSClass(), tabIndex: -1 },
{ 'aria-describedby': this.id() + '_description', 'aria-hidden': 'true', 'aria-label': this.label(), role: 'dialog' }
)
}),
(t.dispose = function () {
;(this.contentEl_ = null), (this.descEl_ = null), (this.previouslyActiveEl_ = null), n.prototype.dispose.call(this)
}),
(t.buildCSSClass = function () {
return xt + ' vjs-hidden ' + n.prototype.buildCSSClass.call(this)
}),
(t.label = function () {
return this.localize(this.options_.label || 'Modal Window')
}),
(t.description = function () {
var e = this.options_.description || this.localize('This is a modal window.')
return this.closeable() && (e += ' ' + this.localize('This modal can be closed by pressing the Escape key or activating the close button.')), e
}),
(t.open = function () {
var e
this.opened_ ||
((e = this.player()),
this.trigger('beforemodalopen'),
(this.opened_ = !0),
(!this.options_.fillAlways && (this.hasBeenOpened_ || this.hasBeenFilled_)) || this.fill(),
(this.wasPlaying_ = !e.paused()),
this.options_.pauseOnOpen && this.wasPlaying_ && e.pause(),
this.on('keydown', this.handleKeyDown_),
(this.hadControls_ = e.controls()),
e.controls(!1),
this.show(),
this.conditionalFocus_(),
this.el().setAttribute('aria-hidden', 'false'),
this.trigger('modalopen'),
(this.hasBeenOpened_ = !0))
}),
(t.opened = function (e) {
return 'boolean' == typeof e && this[e ? 'open' : 'close'](), this.opened_
}),
(t.close = function () {
var e
this.opened_ &&
((e = this.player()),
this.trigger('beforemodalclose'),
(this.opened_ = !1),
this.wasPlaying_ && this.options_.pauseOnOpen && e.play(),
this.off('keydown', this.handleKeyDown_),
this.hadControls_ && e.controls(!0),
this.hide(),
this.el().setAttribute('aria-hidden', 'true'),
this.trigger('modalclose'),
this.conditionalBlur_(),
this.options_.temporary && this.dispose())
}),
(t.closeable = function (e) {
var t, i
return (
'boolean' == typeof e &&
((t = this.closeable_ = !!e),
(i = this.getChild('closeButton')),
t &&
!i &&
((e = this.contentEl_),
(this.contentEl_ = this.el_),
(i = this.addChild('closeButton', { controlText: 'Close Modal Dialog' })),
(this.contentEl_ = e),
this.on(i, 'close', this.close_)),
!t && i && (this.off(i, 'close', this.close_), this.removeChild(i), i.dispose())),
this.closeable_
)
}),
(t.fill = function () {
this.fillWith(this.content())
}),
(t.fillWith = function (e) {
var t = this.contentEl(),
i = t.parentNode,
n = t.nextSibling
this.trigger('beforemodalfill'), (this.hasBeenFilled_ = !0), i.removeChild(t), this.empty(), ve(t, e), this.trigger('modalfill'), n ? i.insertBefore(t, n) : i.appendChild(t)
t = this.getChild('closeButton')
t && i.appendChild(t.el_)
}),
(t.empty = function () {
this.trigger('beforemodalempty'), me(this.contentEl()), this.trigger('modalempty')
}),
(t.content = function (e) {
return 'undefined' != typeof e && (this.content_ = e), this.content_
}),
(t.conditionalFocus_ = function () {
var e = document.activeElement,
t = this.player_.el_
;(this.previouslyActiveEl_ = null), (!t.contains(e) && t !== e) || ((this.previouslyActiveEl_ = e), this.focus())
}),
(t.conditionalBlur_ = function () {
this.previouslyActiveEl_ && (this.previouslyActiveEl_.focus(), (this.previouslyActiveEl_ = null))
}),
(t.handleKeyDown = function (e) {
if ((e.stopPropagation(), ht.isEventKey(e, 'Escape') && this.closeable())) return e.preventDefault(), void this.close()
if (ht.isEventKey(e, 'Tab')) {
for (var t, i = this.focusableEls_(), n = this.el_.querySelector(':focus'), r = 0; r < i.length; r++)
if (n === i[r]) {
t = r
break
}
document.activeElement === this.el_ && (t = 0),
e.shiftKey && 0 === t ? (i[i.length - 1].focus(), e.preventDefault()) : e.shiftKey || t !== i.length - 1 || (i[0].focus(), e.preventDefault())
}
}),
(t.focusableEls_ = function () {
var e = this.el_.querySelectorAll('*')
return Array.prototype.filter.call(e, function (e) {
return (
((e instanceof window.HTMLAnchorElement || e instanceof window.HTMLAreaElement) && e.hasAttribute('href')) ||
((e instanceof window.HTMLInputElement || e instanceof window.HTMLSelectElement || e instanceof window.HTMLTextAreaElement || e instanceof window.HTMLButtonElement) &&
!e.hasAttribute('disabled')) ||
e instanceof window.HTMLIFrameElement ||
e instanceof window.HTMLObjectElement ||
e instanceof window.HTMLEmbedElement ||
(e.hasAttribute('tabindex') && -1 !== e.getAttribute('tabindex')) ||
e.hasAttribute('contenteditable')
)
})
}),
e
)
})(pt)
;(At.prototype.options_ = { pauseOnOpen: !0, temporary: !0 }), pt.registerComponent('ModalDialog', At)
var Pt,
Lt = (function (n) {
function e(e) {
var t
void 0 === e && (e = []),
((t = n.call(this) || this).tracks_ = []),
Object.defineProperty(ft(t), 'length', {
get: function () {
return this.tracks_.length
},
})
for (var i = 0; i < e.length; i++) t.addTrack(e[i])
return t
}
mt(e, n)
var t = e.prototype
return (
(t.addTrack = function (e) {
var t = this,
i = this.tracks_.length
'' + i in this ||
Object.defineProperty(this, i, {
get: function () {
return this.tracks_[i]
},
}),
-1 === this.tracks_.indexOf(e) && (this.tracks_.push(e), this.trigger({ track: e, type: 'addtrack', target: this })),
(e.labelchange_ = function () {
t.trigger({ track: e, type: 'labelchange', target: t })
}),
it(e) && e.addEventListener('labelchange', e.labelchange_)
}),
(t.removeTrack = function (e) {
for (var t, i = 0, n = this.length; i < n; i++)
if (this[i] === e) {
;(t = this[i]).off && t.off(), this.tracks_.splice(i, 1)
break
}
t && this.trigger({ track: t, type: 'removetrack', target: this })
}),
(t.getTrackById = function (e) {
for (var t = null, i = 0, n = this.length; i < n; i++) {
var r = this[i]
if (r.id === e) {
t = r
break
}
}
return t
}),
e
)
})(ze)
for (Pt in ((Lt.prototype.allowedEvents_ = { change: 'change', addtrack: 'addtrack', removetrack: 'removetrack', labelchange: 'labelchange' }), Lt.prototype.allowedEvents_))
Lt.prototype['on' + Pt] = null
function Dt(e, t) {
for (var i = 0; i < e.length; i++) Object.keys(e[i]).length && t.id !== e[i].id && (e[i].enabled = !1)
}
function Ot(e, t) {
for (var i = 0; i < e.length; i++) Object.keys(e[i]).length && t.id !== e[i].id && (e[i].selected = !1)
}
function Mt(e) {
var t = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'],
i = document.createElement('a')
i.href = e
for (var n = {}, r = 0; r < t.length; r++) n[t[r]] = i[t[r]]
return (
'http:' === n.protocol && (n.host = n.host.replace(/:80$/, '')),
'https:' === n.protocol && (n.host = n.host.replace(/:443$/, '')),
n.protocol || (n.protocol = window.location.protocol),
n.host || (n.host = window.location.host),
n
)
}
function Rt(e) {
var t
return e.match(/^https?:\/\//) || (((t = document.createElement('a')).href = e), (e = t.href)), e
}
function Nt(e) {
if ('string' == typeof e) {
e = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/.exec(e)
if (e) return e.pop().toLowerCase()
}
return ''
}
function Ut(e, t) {
return void 0 === t && (t = window.location), (':' === (e = Mt(e)).protocol ? t : e).protocol + e.host !== t.protocol + t.host
}
var Bt = (function (n) {
function e(e) {
for (var t, i = (e = void 0 === e ? [] : e).length - 1; 0 <= i; i--)
if (e[i].enabled) {
Dt(e, e[i])
break
}
return ((t = n.call(this, e) || this).changing_ = !1), t
}
mt(e, n)
var t = e.prototype
return (
(t.addTrack = function (e) {
var t = this
e.enabled && Dt(this, e),
n.prototype.addTrack.call(this, e),
e.addEventListener &&
((e.enabledChange_ = function () {
t.changing_ || ((t.changing_ = !0), Dt(t, e), (t.changing_ = !1), t.trigger('change'))
}),
e.addEventListener('enabledchange', e.enabledChange_))
}),
(t.removeTrack = function (e) {
n.prototype.removeTrack.call(this, e), e.removeEventListener && e.enabledChange_ && (e.removeEventListener('enabledchange', e.enabledChange_), (e.enabledChange_ = null))
}),
e
)
})(Lt),
Ft = (function (n) {
function e(e) {
for (var t, i = (e = void 0 === e ? [] : e).length - 1; 0 <= i; i--)
if (e[i].selected) {
Ot(e, e[i])
break
}
return (
((t = n.call(this, e) || this).changing_ = !1),
Object.defineProperty(ft(t), 'selectedIndex', {
get: function () {
for (var e = 0; e < this.length; e++) if (this[e].selected) return e
return -1
},
set: function () {},
}),
t
)
}
mt(e, n)
var t = e.prototype
return (
(t.addTrack = function (e) {
var t = this
e.selected && Ot(this, e),
n.prototype.addTrack.call(this, e),
e.addEventListener &&
((e.selectedChange_ = function () {
t.changing_ || ((t.changing_ = !0), Ot(t, e), (t.changing_ = !1), t.trigger('change'))
}),
e.addEventListener('selectedchange', e.selectedChange_))
}),
(t.removeTrack = function (e) {
n.prototype.removeTrack.call(this, e), e.removeEventListener && e.selectedChange_ && (e.removeEventListener('selectedchange', e.selectedChange_), (e.selectedChange_ = null))
}),
e
)
})(Lt),
k = (function (i) {
function e() {
return i.apply(this, arguments) || this
}
mt(e, i)
var t = e.prototype
return (
(t.addTrack = function (e) {
var t = this
i.prototype.addTrack.call(this, e),
this.queueChange_ ||
(this.queueChange_ = function () {
return t.queueTrigger('change')
}),
this.triggerSelectedlanguagechange ||
(this.triggerSelectedlanguagechange_ = function () {
return t.trigger('selectedlanguagechange')
}),
e.addEventListener('modechange', this.queueChange_)
;-1 === ['metadata', 'chapters'].indexOf(e.kind) && e.addEventListener('modechange', this.triggerSelectedlanguagechange_)
}),
(t.removeTrack = function (e) {
i.prototype.removeTrack.call(this, e),
e.removeEventListener &&
(this.queueChange_ && e.removeEventListener('modechange', this.queueChange_),
this.selectedlanguagechange_ && e.removeEventListener('modechange', this.triggerSelectedlanguagechange_))
}),
e
)
})(Lt),
jt = (function () {
function e(e) {
void 0 === e && (e = []),
(this.trackElements_ = []),
Object.defineProperty(this, 'length', {
get: function () {
return this.trackElements_.length
},
})
for (var t = 0, i = e.length; t < i; t++) this.addTrackElement_(e[t])
}
var t = e.prototype
return (
(t.addTrackElement_ = function (e) {
var t = this.trackElements_.length
'' + t in this ||
Object.defineProperty(this, t, {
get: function () {
return this.trackElements_[t]
},
}),
-1 === this.trackElements_.indexOf(e) && this.trackElements_.push(e)
}),
(t.getTrackElementByTrack_ = function (e) {
for (var t, i = 0, n = this.trackElements_.length; i < n; i++)
if (e === this.trackElements_[i].track) {
t = this.trackElements_[i]
break
}
return t
}),
(t.removeTrackElement_ = function (e) {
for (var t = 0, i = this.trackElements_.length; t < i; t++)
if (e === this.trackElements_[t]) {
this.trackElements_[t].track && 'function' == typeof this.trackElements_[t].track.off && this.trackElements_[t].track.off(),
'function' == typeof this.trackElements_[t].off && this.trackElements_[t].off(),
this.trackElements_.splice(t, 1)
break
}
}),
e
)
})(),
Ht = (function () {
function t(e) {
t.prototype.setCues_.call(this, e),
Object.defineProperty(this, 'length', {
get: function () {
return this.length_
},
})
}
var e = t.prototype
return (
(e.setCues_ = function (e) {
var t = this.length || 0,
i = 0,
n = e.length
;(this.cues_ = e), (this.length_ = e.length)
function r(e) {
'' + e in this ||
Object.defineProperty(this, '' + e, {
get: function () {
return this.cues_[e]
},
})
}
if (t < n) for (i = t; i < n; i++) r.call(this, i)
}),
(e.getCueById = function (e) {
for (var t = null, i = 0, n = this.length; i < n; i++) {
var r = this[i]
if (r.id === e) {
t = r
break
}
}
return t
}),
t
)
})(),
qt = { alternative: 'alternative', captions: 'captions', main: 'main', sign: 'sign', subtitles: 'subtitles', commentary: 'commentary' },
Vt = { alternative: 'alternative', descriptions: 'descriptions', main: 'main', 'main-desc': 'main-desc', translation: 'translation', commentary: 'commentary' },
Wt = { subtitles: 'subtitles', captions: 'captions', descriptions: 'descriptions', chapters: 'chapters', metadata: 'metadata' },
Gt = { disabled: 'disabled', hidden: 'hidden', showing: 'showing' },
C = (function (a) {
function e(e) {
void 0 === e && (e = {})
var t,
i = a.call(this) || this,
n = { id: e.id || 'vjs_track_' + Pe++, kind: e.kind || '', language: e.language || '' },
r = e.label || ''
for (t in n)
!(function (e) {
Object.defineProperty(ft(i), e, {
get: function () {
return n[e]
},
set: function () {},
})
})(t)
return (
Object.defineProperty(ft(i), 'label', {
get: function () {
return r
},
set: function (e) {
e !== r && ((r = e), this.trigger('labelchange'))
},
}),
i
)
}
return mt(e, a), e
})(ze),
zt = Object.freeze({ __proto__: null, parseUrl: Mt, getAbsoluteURL: Rt, getFileExtension: Nt, isCrossOrigin: Ut }),
Xt = 'undefined' != typeof window ? window : 'undefined' != typeof f ? f : 'undefined' != typeof self ? self : {},
Kt = Xt,
Yt = function (e) {
if (!e) return !1
var t = Qt.call(e)
return (
'[object Function]' === t ||
('function' == typeof e && '[object RegExp]' !== t) ||
('undefined' != typeof window && (e === window.setTimeout || e === window.alert || e === window.confirm || e === window.prompt))
)
},
Qt = Object.prototype.toString
ei.httpHandler = function (n, r) {
return (
void 0 === r && (r = !1),
function (e, t, i) {
if (e) n(e)
else if (400 <= t.statusCode && t.statusCode <= 599) {
e = i
if (r)
if (Kt.TextDecoder) {
t = (function (e) {
void 0 === e && (e = '')
return e
.toLowerCase()
.split(';')
.reduce(function (e, t) {
var i = t.split('='),
t = i[0],
i = i[1]
return 'charset' === t.trim() ? i.trim() : e
}, 'utf-8')
})(t.headers && t.headers['content-type'])
try {
e = new TextDecoder(t).decode(i)
} catch (e) {}
} else e = String.fromCharCode.apply(null, new Uint8Array(i))
n({ cause: e })
} else n(null, i)
}
)
}
/**
* @license
* slighly modified parse-headers 2.0.2
* Copyright (c) 2014 David Björklund
* Available under the MIT license
*
*/
var $t = function (e) {
var n = {}
return (
e &&
e
.trim()
.split('\n')
.forEach(function (e) {
var t = e.indexOf(':'),
i = e.slice(0, t).trim().toLowerCase(),
t = e.slice(t + 1).trim()
'undefined' == typeof n[i] ? (n[i] = t) : Array.isArray(n[i]) ? n[i].push(t) : (n[i] = [n[i], t])
}),
n
)
},
Jt = ei,
I = ei
function Zt(e, t, i) {
var n = e
return Yt(t) ? ((i = t), 'string' == typeof e && (n = { uri: e })) : (n = g({}, t, { uri: e })), (n.callback = i), n
}
function ei(e, t, i) {
return ti((t = Zt(e, t, i)))
}
function ti(n) {
if ('undefined' == typeof n.callback) throw new Error('callback argument missing')
var r = !1,
a = function (e, t, i) {
r || ((r = !0), n.callback(e, t, i))
}
function s() {
var e = void 0,
e =
l.response ||
l.responseText ||
(function (e) {
try {
if ('document' === e.responseType) return e.responseXML
var t = e.responseXML && 'parsererror' === e.responseXML.documentElement.nodeName
if ('' === e.responseType && !t) return e.responseXML
} catch (e) {}
return null
})(l)
if (m)
try {
e = JSON.parse(e)
} catch (e) {}
return e
}
function t(e) {
return clearTimeout(u), ((e = !(e instanceof Error) ? new Error('' + (e || 'Unknown XMLHttpRequest Error')) : e).statusCode = 0), a(e, g)
}
function e() {
if (!o) {
clearTimeout(u)
var e = n.useXDR && void 0 === l.status ? 200 : 1223 === l.status ? 204 : l.status,
t = g,
i = null
return (
0 !== e
? ((t = { body: s(), statusCode: e, method: d, headers: {}, url: c, rawRequest: l }), l.getAllResponseHeaders && (t.headers = $t(l.getAllResponseHeaders())))
: (i = new Error('Internal XMLHttpRequest Error')),
a(i, t, t.body)
)
}
}
var i,
o,
u,
l = n.xhr || null,
c = ((l = l || new (n.cors || n.useXDR ? ei.XDomainRequest : ei.XMLHttpRequest)()).url = n.uri || n.url),
d = (l.method = n.method || 'GET'),
h = n.body || n.data,
p = (l.headers = n.headers || {}),
f = !!n.sync,
m = !1,
g = { body: void 0, headers: {}, statusCode: 0, method: d, url: c, rawRequest: l }
if (
('json' in n &&
!1 !== n.json &&
((m = !0),
p.accept || p.Accept || (p.Accept = 'application/json'),
'GET' !== d && 'HEAD' !== d && (p['content-type'] || p['Content-Type'] || (p['Content-Type'] = 'application/json'), (h = JSON.stringify(!0 === n.json ? h : n.json)))),
(l.onreadystatechange = function () {
4 === l.readyState && setTimeout(e, 0)
}),
(l.onload = e),
(l.onerror = t),
(l.onprogress = function () {}),
(l.onabort = function () {
o = !0
}),
(l.ontimeout = t),
l.open(d, c, !f, n.username, n.password),
f || (l.withCredentials = !!n.withCredentials),
!f &&
0 < n.timeout &&
(u = setTimeout(function () {
var e
o || ((o = !0), l.abort('timeout'), ((e = new Error('XMLHttpRequest timeout')).code = 'ETIMEDOUT'), t(e))
}, n.timeout)),
l.setRequestHeader)
)
for (i in p) p.hasOwnProperty(i) && l.setRequestHeader(i, p[i])
else if (
n.headers &&
!(function (e) {
for (var t in e) if (e.hasOwnProperty(t)) return
return 1
})(n.headers)
)
throw new Error('Headers cannot be set on an XDomainRequest object')
return 'responseType' in n && (l.responseType = n.responseType), 'beforeSend' in n && 'function' == typeof n.beforeSend && n.beforeSend(l), l.send(h || null), l
}
;(ei.XMLHttpRequest = Kt.XMLHttpRequest || function () {}),
(ei.XDomainRequest = 'withCredentials' in new ei.XMLHttpRequest() ? ei.XMLHttpRequest : Kt.XDomainRequest),
(function (e, t) {
for (var i = 0; i < e.length; i++) t(e[i])
})(['get', 'put', 'post', 'patch', 'head', 'delete'], function (n) {
ei['delete' === n ? 'del' : n] = function (e, t, i) {
return ((t = Zt(e, t, i)).method = n.toUpperCase()), ti(t)
}
}),
(Jt.default = I)
function ii(e, t) {
var i = new window.WebVTT.Parser(window, window.vttjs, window.WebVTT.StringDecoder()),
n = []
;(i.oncue = function (e) {
t.addCue(e)
}),
(i.onparsingerror = function (e) {
n.push(e)
}),
(i.onflush = function () {
t.trigger({ type: 'loadeddata', target: t })
}),
i.parse(e),
0 < n.length &&
(window.console && window.console.groupCollapsed && window.console.groupCollapsed('Text Track parsing errors for ' + t.src),
n.forEach(function (e) {
return h.error(e)
}),
window.console && window.console.groupEnd && window.console.groupEnd()),
i.flush()
}
function ni(e, n) {
var t = { uri: e }
;(e = Ut(e)) && (t.cors = e),
(e = 'use-credentials' === n.tech_.crossOrigin()) && (t.withCredentials = e),
Jt(
t,
Ve(this, function (e, t, i) {
return e
? h.error(e, t)
: ((n.loaded_ = !0),
void ('function' != typeof window.WebVTT
? n.tech_ &&
n.tech_.any(['vttjsloaded', 'vttjserror'], function (e) {
return 'vttjserror' !== e.type ? ii(i, n) : void h.error('vttjs failed to load, stopping trying to process ' + n.src)
})
: ii(i, n)))
})
)
}
var ri = (function (a) {
function e(e) {
var t
if (!(e = void 0 === e ? {} : e).tech) throw new Error('A tech was not provided.')
var e = lt(e, { kind: Wt[e.kind] || 'subtitles', language: e.language || e.srclang || '' }),
i = Gt[e.mode] || 'disabled',
n = e.default
;('metadata' !== e.kind && 'chapters' !== e.kind) || (i = 'hidden'),
((t = a.call(this, e) || this).tech_ = e.tech),
(t.cues_ = []),
(t.activeCues_ = []),
(t.preload_ = !1 !== t.tech_.preloadTextTracks)
var r = new Ht(t.cues_),
s = new Ht(t.activeCues_),
o = !1
t.timeupdateHandler = Ve(ft(t), function () {
this.tech_.isDisposed() ||
(this.tech_.isReady_ && ((this.activeCues = this.activeCues), o && (this.trigger('cuechange'), (o = !1))),
(this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler)))
})
return (
t.tech_.one('dispose', function () {
t.stopTracking()
}),
'disabled' !== i && t.startTracking(),
Object.defineProperties(ft(t), {
default: {
get: function () {
return n
},
set: function () {},
},
mode: {
get: function () {
return i
},
set: function (e) {
Gt[e] &&
i !== e &&
((i = e),
this.preload_ || 'disabled' === i || 0 !== this.cues.length || ni(this.src, this),
this.stopTracking(),
'disabled' !== i && this.startTracking(),
this.trigger('modechange'))
},
},
cues: {
get: function () {
return this.loaded_ ? r : null
},
set: function () {},
},
activeCues: {
get: function () {
if (!this.loaded_) return null
if (0 === this.cues.length) return s
for (var e = this.tech_.currentTime(), t = [], i = 0, n = this.cues.length; i < n; i++) {
var r = this.cues[i]
;((r.startTime <= e && r.endTime >= e) || (r.startTime === r.endTime && r.startTime <= e && r.startTime + 0.5 >= e)) && t.push(r)
}
if (((o = !1), t.length !== this.activeCues_.length)) o = !0
else for (var a = 0; a < t.length; a++) -1 === this.activeCues_.indexOf(t[a]) && (o = !0)
return (this.activeCues_ = t), s.setCues_(this.activeCues_), s
},
set: function () {},
},
}),
e.src ? ((t.src = e.src), t.preload_ || (t.loaded_ = !0), (t.preload_ || ('subtitles' !== e.kind && 'captions' !== e.kind)) && ni(t.src, ft(t))) : (t.loaded_ = !0),
t
)
}
mt(e, a)
var t = e.prototype
return (
(t.startTracking = function () {
this.rvf_ = this.tech_.requestVideoFrameCallback(this.timeupdateHandler)
}),
(t.stopTracking = function () {
this.rvf_ && (this.tech_.cancelVideoFrameCallback(this.rvf_), (this.rvf_ = void 0))
}),
(t.addCue = function (e) {
var t = e
if (window.vttjs && !(e instanceof window.vttjs.VTTCue)) {
for (var i in ((t = new window.vttjs.VTTCue(e.startTime, e.endTime, e.text)), e)) i in t || (t[i] = e[i])
;(t.id = e.id), (t.originalCue_ = e)
}
for (var n = this.tech_.textTracks(), r = 0; r < n.length; r++) n[r] !== this && n[r].removeCue(t)
this.cues_.push(t), this.cues.setCues_(this.cues_)
}),
(t.removeCue = function (e) {
for (var t = this.cues_.length; t--; ) {
var i = this.cues_[t]
if (i === e || (i.originalCue_ && i.originalCue_ === e)) {
this.cues_.splice(t, 1), this.cues.setCues_(this.cues_)
break
}
}
}),
e
)
})(C)
ri.prototype.allowedEvents_ = { cuechange: 'cuechange' }
;(x = (function (n) {
function e(e) {
var t = lt((e = void 0 === e ? {} : e), { kind: Vt[e.kind] || '' }),
e = n.call(this, t) || this,
i = !1
return (
Object.defineProperty(ft(e), 'enabled', {
get: function () {
return i
},
set: function (e) {
'boolean' == typeof e && e !== i && ((i = e), this.trigger('enabledchange'))
},
}),
t.enabled && (e.enabled = t.enabled),
(e.loaded_ = !0),
e
)
}
return mt(e, n), e
})(C)),
(U = (function (n) {
function e(e) {
var t = lt((e = void 0 === e ? {} : e), { kind: qt[e.kind] || '' }),
e = n.call(this, t) || this,
i = !1
return (
Object.defineProperty(ft(e), 'selected', {
get: function () {
return i
},
set: function (e) {
'boolean' == typeof e && e !== i && ((i = e), this.trigger('selectedchange'))
},
}),
t.selected && (e.selected = t.selected),
e
)
}
return mt(e, n), e
})(C)),
(j = (function (r) {
function e(e) {
var t
void 0 === e && (e = {})
var i = r.call(this) || this,
n = new ri(e)
return (
(i.kind = n.kind),
(i.src = n.src),
(i.srclang = n.language),
(i.label = n.label),
(i.default = n.default),
Object.defineProperties(ft(i), {
readyState: {
get: function () {
return t
},
},
track: {
get: function () {
return n
},
},
}),
(t = 0),
n.addEventListener('loadeddata', function () {
;(t = 2), i.trigger({ type: 'load', target: ft(i) })
}),
i
)
}
return mt(e, r), e
})(ze))
;(j.prototype.allowedEvents_ = { load: 'load' }), (j.NONE = 0), (j.LOADING = 1), (j.LOADED = 2), (j.ERROR = 3)
var ai = {
audio: { ListClass: Bt, TrackClass: x, capitalName: 'Audio' },
video: { ListClass: Ft, TrackClass: U, capitalName: 'Video' },
text: { ListClass: k, TrackClass: ri, capitalName: 'Text' },
}
Object.keys(ai).forEach(function (e) {
;(ai[e].getterName = e + 'Tracks'), (ai[e].privateName = e + 'Tracks_')
})
var si = {
remoteText: { ListClass: k, TrackClass: ri, capitalName: 'RemoteText', getterName: 'remoteTextTracks', privateName: 'remoteTextTracks_' },
remoteTextEl: { ListClass: jt, TrackClass: j, capitalName: 'RemoteTextTrackEls', getterName: 'remoteTextTrackEls', privateName: 'remoteTextTrackEls_' },
},
oi = g({}, ai, si)
;(si.names = Object.keys(si)), (ai.names = Object.keys(ai)), (oi.names = [].concat(si.names).concat(ai.names))
var ui = 'undefined' != typeof f ? f : 'undefined' != typeof window ? window : {},
li = 'undefined' != typeof document ? document : (li = ui['__GLOBAL_DOCUMENT_CACHE@4']) || (ui['__GLOBAL_DOCUMENT_CACHE@4'] = {}),
Xt = li,
ci =
Object.create ||
function (e) {
if (1 !== arguments.length) throw new Error('Object.create shim only accepts one parameter.')
return (di.prototype = e), new di()
}
function di() {}
function hi(e, t) {
;(this.name = 'ParsingError'), (this.code = e.code), (this.message = t || e.message)
}
function pi(e) {
function t(e, t, i, n) {
return 3600 * (0 | e) + 60 * (0 | t) + (0 | i) + (0 | n) / 1e3
}
e = e.match(/^(\d+):(\d{1,2})(:\d{1,2})?\.(\d{3})/)
return e ? (e[3] ? t(e[1], e[2], e[3].replace(':', ''), e[4]) : 59 < e[1] ? t(e[1], e[2], 0, e[4]) : t(0, e[1], e[2], e[4])) : null
}
function fi() {
this.values = ci(null)
}
function mi(e, t, i, n) {
var r,
a,
s = n ? e.split(n) : [e]
for (r in s) 'string' == typeof s[r] && 2 === (a = s[r].split(i)).length && t(a[0], a[1])
}
function gi(t, e, s) {
var i = t
function n() {
var e = pi(t)
if (null === e) throw new hi(hi.Errors.BadTimeStamp, 'Malformed timestamp: ' + i)
return (t = t.replace(/^[^\sa-zA-Z-]+/, '')), e
}
function r() {
t = t.replace(/^\s+/, '')
}
if ((r(), (e.startTime = n()), r(), '--\x3e' !== t.substr(0, 3))) throw new hi(hi.Errors.BadTimeStamp, "Malformed time stamp (time stamps must be separated by '--\x3e'): " + i)
;(t = t.substr(3)),
r(),
(e.endTime = n()),
r(),
(function (e, t) {
var a = new fi()
mi(
e,
function (e, t) {
switch (e) {
case 'region':
for (var i = s.length - 1; 0 <= i; i--)
if (s[i].id === t) {
a.set(e, s[i].region)
break
}
break
case 'vertical':
a.alt(e, t, ['rl', 'lr'])
break
case 'line':
var n = t.split(','),
r = n[0]
a.integer(e, r), a.percent(e, r) && a.set('snapToLines', !1), a.alt(e, r, ['auto']), 2 === n.length && a.alt('lineAlign', n[1], ['start', 'center', 'end'])
break
case 'position':
;(n = t.split(',')), a.percent(e, n[0]), 2 === n.length && a.alt('positionAlign', n[1], ['start', 'center', 'end'])
break
case 'size':
a.percent(e, t)
break
case 'align':
a.alt(e, t, ['start', 'center', 'end', 'left', 'right'])
}
},
/:/,
/\s/
),
(t.region = a.get('region', null)),
(t.vertical = a.get('vertical', ''))
try {
t.line = a.get('line', 'auto')
} catch (e) {}
;(t.lineAlign = a.get('lineAlign', 'start')), (t.snapToLines = a.get('snapToLines', !0)), (t.size = a.get('size', 100))
try {
t.align = a.get('align', 'center')
} catch (e) {
t.align = a.get('align', 'middle')
}
try {
t.position = a.get('position', 'auto')
} catch (e) {
t.position = a.get('position', { start: 0, left: 0, center: 50, middle: 50, end: 100, right: 100 }, t.align)
}
t.positionAlign = a.get('positionAlign', { start: 'start', left: 'start', center: 'center', middle: 'center', end: 'end', right: 'end' }, t.align)
})(t, e)
}
;(((hi.prototype = ci(Error.prototype)).constructor = hi).Errors = {
BadSignature: { code: 0, message: 'Malformed WebVTT signature.' },
BadTimeStamp: { code: 1, message: 'Malformed time stamp.' },
}),
(fi.prototype = {
set: function (e, t) {
this.get(e) || '' === t || (this.values[e] = t)
},
get: function (e, t, i) {
return i ? (this.has(e) ? this.values[e] : t[i]) : this.has(e) ? this.values[e] : t
},
has: function (e) {
return e in this.values
},
alt: function (e, t, i) {
for (var n = 0; n < i.length; ++n)
if (t === i[n]) {
this.set(e, t)
break
}
},
integer: function (e, t) {
;/^-?\d+$/.test(t) && this.set(e, parseInt(t, 10))
},
percent: function (e, t) {
return !!(t.match(/^([\d]{1,3})(\.[\d]*)?%$/) && 0 <= (t = parseFloat(t)) && t <= 100) && (this.set(e, t), !0)
},
})
var yi = Xt.createElement && Xt.createElement('textarea'),
vi = { c: 'span', i: 'i', b: 'b', u: 'u', ruby: 'ruby', rt: 'rt', v: 'span', lang: 'span' },
_i = {
white: 'rgba(255,255,255,1)',
lime: 'rgba(0,255,0,1)',
cyan: 'rgba(0,255,255,1)',
red: 'rgba(255,0,0,1)',
yellow: 'rgba(255,255,0,1)',
magenta: 'rgba(255,0,255,1)',
blue: 'rgba(0,0,255,1)',
black: 'rgba(0,0,0,1)',
},
bi = { v: 'title', lang: 'lang' },
Ti = { rt: 'ruby' }
function Si(e, t) {
for (
var i, n, r, a, s, o, u, l, c, d, h = e.document.createElement('div'), p = h, f = [];
null !==
(i = (function () {
if (!t) return null
var e = t.match(/^([^<]*)(<[^>]*>?)?/)
return (e = e[1] || e[2]), (t = t.substr(e.length)), e
})());
)
'<' !== i[0]
? p.appendChild(e.document.createTextNode(((s = i), (yi.innerHTML = s), (s = yi.textContent), (yi.textContent = ''), s)))
: '/' !== i[1]
? (a = pi(i.substr(1, i.length - 2)))
? ((n = e.document.createProcessingInstruction('timestamp', a)), p.appendChild(n))
: (r = i.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/)) &&
((l = r[1]),
(c = r[3]),
(d = void 0),
(d = vi[l]),
(n = d ? ((d = e.document.createElement(d)), (l = bi[l]) && c && (d[l] = c.trim()), d) : null) &&
((o = p),
(Ti[(u = n).localName] && Ti[u.localName] !== o.localName) ||
(r[2] &&
((a = r[2].split('.')).forEach(function (e) {
var t = /^bg_/.test(e),
e = t ? e.slice(3) : e
_i.hasOwnProperty(e) && ((e = _i[e]), (n.style[t ? 'background-color' : 'color'] = e))
}),
(n.className = a.join(' '))),
f.push(r[1]),
p.appendChild(n),
(p = n))))
: f.length && f[f.length - 1] === i.substr(2).replace('>', '') && (f.pop(), (p = p.parentNode))
return h
}
var wi = [
[1470, 1470],
[1472, 1472],
[1475, 1475],
[1478, 1478],
[1488, 1514],
[1520, 1524],
[1544, 1544],
[1547, 1547],
[1549, 1549],
[1563, 1563],
[1566, 1610],
[1645, 1647],
[1649, 1749],
[1765, 1766],
[1774, 1775],
[1786, 1805],
[1807, 1808],
[1810, 1839],
[1869, 1957],
[1969, 1969],
[1984, 2026],
[2036, 2037],
[2042, 2042],
[2048, 2069],
[2074, 2074],
[2084, 2084],
[2088, 2088],
[2096, 2110],
[2112, 2136],
[2142, 2142],
[2208, 2208],
[2210, 2220],
[8207, 8207],
[64285, 64285],
[64287, 64296],
[64298, 64310],
[64312, 64316],
[64318, 64318],
[64320, 64321],
[64323, 64324],
[64326, 64449],
[64467, 64829],
[64848, 64911],
[64914, 64967],
[65008, 65020],
[65136, 65140],
[65142, 65276],
[67584, 67589],
[67592, 67592],
[67594, 67637],
[67639, 67640],
[67644, 67644],
[67647, 67669],
[67671, 67679],
[67840, 67867],
[67872, 67897],
[67903, 67903],
[67968, 68023],
[68030, 68031],
[68096, 68096],
[68112, 68115],
[68117, 68119],
[68121, 68147],
[68160, 68167],
[68176, 68184],
[68192, 68223],
[68352, 68405],
[68416, 68437],
[68440, 68466],
[68472, 68479],
[68608, 68680],
[126464, 126467],
[126469, 126495],
[126497, 126498],
[126500, 126500],
[126503, 126503],
[126505, 126514],
[126516, 126519],
[126521, 126521],
[126523, 126523],
[126530, 126530],
[126535, 126535],
[126537, 126537],
[126539, 126539],
[126541, 126543],
[126545, 126546],
[126548, 126548],
[126551, 126551],
[126553, 126553],
[126555, 126555],
[126557, 126557],
[126559, 126559],
[126561, 126562],
[126564, 126564],
[126567, 126570],
[126572, 126578],
[126580, 126583],
[126585, 126588],
[126590, 126590],
[126592, 126601],
[126603, 126619],
[126625, 126627],
[126629, 126633],
[126635, 126651],
[1114109, 1114109],
]
function Ei(e) {
var t = [],
i = ''
if (!e || !e.childNodes) return 'ltr'
function a(e, t) {
for (var i = t.childNodes.length - 1; 0 <= i; i--) e.push(t.childNodes[i])
}
for (
a(t, e);
(i = (function e(t) {
if (!t || !t.length) return null
var i = t.pop(),
n = i.textContent || i.innerText
if (n) {
var r = n.match(/^.*(\n|\r)/)
return r ? r[(t.length = 0)] : n
}
return 'ruby' === i.tagName ? e(t) : i.childNodes ? (a(t, i), e(t)) : void 0
})(t));
)
for (var n = 0; n < i.length; n++)
if (
(function (e) {
for (var t = 0; t < wi.length; t++) {
var i = wi[t]
if (e >= i[0] && e <= i[1]) return 1
}
})(i.charCodeAt(n))
)
return 'rtl'
return 'ltr'
}
function ki() {}
function Ci(e, t, i) {
ki.call(this), (this.cue = t), (this.cueDiv = Si(e, t.text))
var n = {
color: 'rgba(255, 255, 255, 1)',
backgroundColor: 'rgba(0, 0, 0, 0.8)',
position: 'relative',
left: 0,
right: 0,
top: 0,
bottom: 0,
display: 'inline',
writingMode: '' === t.vertical ? 'horizontal-tb' : 'lr' === t.vertical ? 'vertical-lr' : 'vertical-rl',
unicodeBidi: 'plaintext',
}
this.applyStyles(n, this.cueDiv),
(this.div = e.document.createElement('div')),
(n = {
direction: Ei(this.cueDiv),
writingMode: '' === t.vertical ? 'horizontal-tb' : 'lr' === t.vertical ? 'vertical-lr' : 'vertical-rl',
unicodeBidi: 'plaintext',
textAlign: 'middle' === t.align ? 'center' : t.align,
font: i.font,
whiteSpace: 'pre-line',
position: 'absolute',
}),
this.applyStyles(n),
this.div.appendChild(this.cueDiv)
var r = 0
switch (t.positionAlign) {
case 'start':
r = t.position
break
case 'center':
r = t.position - t.size / 2
break
case 'end':
r = t.position - t.size
}
'' === t.vertical
? this.applyStyles({ left: this.formatStyle(r, '%'), width: this.formatStyle(t.size, '%') })
: this.applyStyles({ top: this.formatStyle(r, '%'), height: this.formatStyle(t.size, '%') }),
(this.move = function (e) {
this.applyStyles({
top: this.formatStyle(e.top, 'px'),
bottom: this.formatStyle(e.bottom, 'px'),
left: this.formatStyle(e.left, 'px'),
right: this.formatStyle(e.right, 'px'),
height: this.formatStyle(e.height, 'px'),
width: this.formatStyle(e.width, 'px'),
})
})
}
function Ii(e) {
var t, i, n, r
e.div &&
((t = e.div.offsetHeight),
(i = e.div.offsetWidth),
(n = e.div.offsetTop),
(r = (r = e.div.childNodes) && (r = r[0]) && r.getClientRects && r.getClientRects()),
(e = e.div.getBoundingClientRect()),
(r = r ? Math.max((r[0] && r[0].height) || 0, e.height / r.length) : 0)),
(this.left = e.left),
(this.right = e.right),
(this.top = e.top || n),
(this.height = e.height || t),
(this.bottom = e.bottom || n + (e.height || t)),
(this.width = e.width || i),
(this.lineHeight = void 0 !== r ? r : e.lineHeight)
}
function xi(e, t, o, u) {
var i,
n = new Ii(t),
r = t.cue,
a = (function (e) {
if ('number' == typeof e.line && (e.snapToLines || (0 <= e.line && e.line <= 100))) return e.line
if (!e.track || !e.track.textTrackList || !e.track.textTrackList.mediaElement) return -1
for (var t = e.track, i = t.textTrackList, n = 0, r = 0; r < i.length && i[r] !== t; r++) 'showing' === i[r].mode && n++
return -1 * ++n
})(r),
s = []
if (r.snapToLines) {
switch (r.vertical) {
case '':
;(s = ['+y', '-y']), (i = 'height')
break
case 'rl':
;(s = ['+x', '-x']), (i = 'width')
break
case 'lr':
;(s = ['-x', '+x']), (i = 'width')
}
var l = n.lineHeight,
c = l * Math.round(a),
d = o[i] + l,
h = s[0]
Math.abs(c) > d && ((c = c < 0 ? -1 : 1), (c *= Math.ceil(d / l) * l)), a < 0 && ((c += '' === r.vertical ? o.height : o.width), (s = s.reverse())), n.move(h, c)
} else {
var p = (n.lineHeight / o.height) * 100
switch (r.lineAlign) {
case 'center':
a -= p / 2
break
case 'end':
a -= p
}
switch (r.vertical) {
case '':
t.applyStyles({ top: t.formatStyle(a, '%') })
break
case 'rl':
t.applyStyles({ left: t.formatStyle(a, '%') })
break
case 'lr':
t.applyStyles({ right: t.formatStyle(a, '%') })
}
;(s = ['+y', '-x', '+x', '-y']), (n = new Ii(t))
}
n = (function (e, t) {
for (var i, n = new Ii(e), r = 1, a = 0; a < t.length; a++) {
for (; e.overlapsOppositeAxis(o, t[a]) || (e.within(o) && e.overlapsAny(u)); ) e.move(t[a])
if (e.within(o)) return e
var s = e.intersectPercentage(o)
s < r && ((i = new Ii(e)), (r = s)), (e = new Ii(n))
}
return i || n
})(n, s)
t.move(n.toCSSCompatValues(o))
}
function Ai() {}
;(ki.prototype.applyStyles = function (e, t) {
for (var i in ((t = t || this.div), e)) e.hasOwnProperty(i) && (t.style[i] = e[i])
}),
(ki.prototype.formatStyle = function (e, t) {
return 0 === e ? 0 : e + t
}),
((Ci.prototype = ci(ki.prototype)).constructor = Ci),
(Ii.prototype.move = function (e, t) {
switch (((t = void 0 !== t ? t : this.lineHeight), e)) {
case '+x':
;(this.left += t), (this.right += t)
break
case '-x':
;(this.left -= t), (this.right -= t)
break
case '+y':
;(this.top += t), (this.bottom += t)
break
case '-y':
;(this.top -= t), (this.bottom -= t)
}
}),
(Ii.prototype.overlaps = function (e) {
return this.left < e.right && this.right > e.left && this.top < e.bottom && this.bottom > e.top
}),
(Ii.prototype.overlapsAny = function (e) {
for (var t = 0; t < e.length; t++) if (this.overlaps(e[t])) return !0
return !1
}),
(Ii.prototype.within = function (e) {
return this.top >= e.top && this.bottom <= e.bottom && this.left >= e.left && this.right <= e.right
}),
(Ii.prototype.overlapsOppositeAxis = function (e, t) {
switch (t) {
case '+x':
return this.left < e.left
case '-x':
return this.right > e.right
case '+y':
return this.top < e.top
case '-y':
return this.bottom > e.bottom
}
}),
(Ii.prototype.intersectPercentage = function (e) {
return (Math.max(0, Math.min(this.right, e.right) - Math.max(this.left, e.left)) * Math.max(0, Math.min(this.bottom, e.bottom) - Math.max(this.top, e.top))) / (this.height * this.width)
}),
(Ii.prototype.toCSSCompatValues = function (e) {
return { top: this.top - e.top, bottom: e.bottom - this.bottom, left: this.left - e.left, right: e.right - this.right, height: this.height, width: this.width }
}),
(Ii.getSimpleBoxPosition = function (e) {
var t = e.div ? e.div.offsetHeight : e.tagName ? e.offsetHeight : 0,
i = e.div ? e.div.offsetWidth : e.tagName ? e.offsetWidth : 0,
n = e.div ? e.div.offsetTop : e.tagName ? e.offsetTop : 0
return {
left: (e = e.div ? e.div.getBoundingClientRect() : e.tagName ? e.getBoundingClientRect() : e).left,
right: e.right,
top: e.top || n,
height: e.height || t,
bottom: e.bottom || n + (e.height || t),
width: e.width || i,
}
}),
(Ai.StringDecoder = function () {
return {
decode: function (e) {
if (!e) return ''
if ('string' != typeof e) throw new Error('Error - expected string data.')
return decodeURIComponent(encodeURIComponent(e))
},
}
}),
(Ai.convertCueToDOMTree = function (e, t) {
return e && t ? Si(e, t) : null
})
;(Ai.processCues = function (n, r, e) {
if (!n || !r || !e) return null
for (; e.firstChild; ) e.removeChild(e.firstChild)
var a = n.document.createElement('div')
if (
((a.style.position = 'absolute'),
(a.style.left = '0'),
(a.style.right = '0'),
(a.style.top = '0'),
(a.style.bottom = '0'),
(a.style.margin = '1.5%'),
e.appendChild(a),
(function (e) {
for (var t = 0; t < e.length; t++) if (e[t].hasBeenReset || !e[t].displayState) return 1
})(r))
) {
var s = [],
o = Ii.getSimpleBoxPosition(a),
u = { font: Math.round(0.05 * o.height * 100) / 100 + 'px sans-serif' }
!(function () {
for (var e, t, i = 0; i < r.length; i++) (t = r[i]), (e = new Ci(n, t, u)), a.appendChild(e.div), xi(0, e, o, s), (t.displayState = e.div), s.push(Ii.getSimpleBoxPosition(e))
})()
} else for (var t = 0; t < r.length; t++) a.appendChild(r[t].displayState)
}),
((Ai.Parser = function (e, t, i) {
i || ((i = t), (t = {})),
(t = t || {}),
(this.window = e),
(this.vttjs = t),
(this.state = 'INITIAL'),
(this.buffer = ''),
(this.decoder = i || new TextDecoder('utf8')),
(this.regionList = [])
}).prototype = {
reportOrThrowError: function (e) {
if (!(e instanceof hi)) throw e
this.onparsingerror && this.onparsingerror(e)
},
parse: function (e) {
var n = this
function t() {
for (var e = n.buffer, t = 0; t < e.length && '\r' !== e[t] && '\n' !== e[t]; ) ++t
var i = e.substr(0, t)
return '\r' === e[t] && ++t, '\n' === e[t] && ++t, (n.buffer = e.substr(t)), i
}
function i(e) {
e.match(/X-TIMESTAMP-MAP/)
? mi(
e,
function (e, t) {
var i
'X-TIMESTAMP-MAP' === e &&
((t = t),
(i = new fi()),
mi(
t,
function (e, t) {
switch (e) {
case 'MPEGT':
i.integer(e + 'S', t)
break
case 'LOCA':
i.set(e + 'L', pi(t))
}
},
/[^\d]:/,
/,/
),
n.ontimestampmap && n.ontimestampmap({ MPEGTS: i.get('MPEGTS'), LOCAL: i.get('LOCAL') }))
},
/=/
)
: mi(
e,
function (e, t) {
var r
'Region' === e &&
((t = t),
(r = new fi()),
mi(
t,
function (e, t) {
switch (e) {
case 'id':
r.set(e, t)
break
case 'width':
r.percent(e, t)
break
case 'lines':
r.integer(e, t)
break
case 'regionanchor':
case 'viewportanchor':
var i = t.split(',')
if (2 !== i.length) break
var n = new fi()
if ((n.percent('x', i[0]), n.percent('y', i[1]), !n.has('x') || !n.has('y'))) break
r.set(e + 'X', n.get('x')), r.set(e + 'Y', n.get('y'))
break
case 'scroll':
r.alt(e, t, ['up'])
}
},
/=/,
/\s/
),
r.has('id') &&
(((t = new (n.vttjs.VTTRegion || n.window.VTTRegion)()).width = r.get('width', 100)),
(t.lines = r.get('lines', 3)),
(t.regionAnchorX = r.get('regionanchorX', 0)),
(t.regionAnchorY = r.get('regionanchorY', 100)),
(t.viewportAnchorX = r.get('viewportanchorX', 0)),
(t.viewportAnchorY = r.get('viewportanchorY', 100)),
(t.scroll = r.get('scroll', '')),
n.onregion && n.onregion(t),
n.regionList.push({ id: r.get('id'), region: t })))
},
/:/
)
}
e && (n.buffer += n.decoder.decode(e, { stream: !0 }))
try {
if ('INITIAL' === n.state) {
if (!/\r\n|\n/.test(n.buffer)) return this
var r,
a = (r = t()).match(/^WEBVTT([ \t].*)?$/)
if (!a || !a[0]) throw new hi(hi.Errors.BadSignature)
n.state = 'HEADER'
}
for (var s = !1; n.buffer; ) {
if (!/\r\n|\n/.test(n.buffer)) return this
switch ((s ? (s = !1) : (r = t()), n.state)) {
case 'HEADER':
;/:/.test(r) ? i(r) : r || (n.state = 'ID')
continue
case 'NOTE':
r || (n.state = 'ID')
continue
case 'ID':
if (/^NOTE($|[ \t])/.test(r)) {
n.state = 'NOTE'
break
}
if (!r) continue
n.cue = new (n.vttjs.VTTCue || n.window.VTTCue)(0, 0, '')
try {
n.cue.align = 'center'
} catch (e) {
n.cue.align = 'middle'
}
if (((n.state = 'CUE'), -1 === r.indexOf('--\x3e'))) {
n.cue.id = r
continue
}
case 'CUE':
try {
gi(r, n.cue, n.regionList)
} catch (e) {
n.reportOrThrowError(e), (n.cue = null), (n.state = 'BADCUE')
continue
}
n.state = 'CUETEXT'
continue
case 'CUETEXT':
var o = -1 !== r.indexOf('--\x3e')
if (!r || (o && (s = !0))) {
n.oncue && n.oncue(n.cue), (n.cue = null), (n.state = 'ID')
continue
}
n.cue.text && (n.cue.text += '\n'), (n.cue.text += r.replace(/\u2028/g, '\n').replace(/u2029/g, '\n'))
continue
case 'BADCUE':
r || (n.state = 'ID')
continue
}
}
} catch (e) {
n.reportOrThrowError(e), 'CUETEXT' === n.state && n.cue && n.oncue && n.oncue(n.cue), (n.cue = null), (n.state = 'INITIAL' === n.state ? 'BADWEBVTT' : 'BADCUE')
}
return this
},
flush: function () {
var t = this
try {
if (((t.buffer += t.decoder.decode()), (!t.cue && 'HEADER' !== t.state) || ((t.buffer += '\n\n'), t.parse()), 'INITIAL' === t.state)) throw new hi(hi.Errors.BadSignature)
} catch (e) {
t.reportOrThrowError(e)
}
return t.onflush && t.onflush(), this
},
})
var Pi = Ai,
Li = { '': 1, lr: 1, rl: 1 },
Di = { start: 1, center: 1, end: 1, left: 1, right: 1, auto: 1, 'line-left': 1, 'line-right': 1 }
function Oi(e) {
return 'string' == typeof e && !!Di[e.toLowerCase()] && e.toLowerCase()
}
function Mi(e, t, i) {
this.hasBeenReset = !1
var n = '',
r = !1,
a = e,
s = t,
o = i,
u = null,
l = '',
c = !0,
d = 'auto',
h = 'start',
p = 'auto',
f = 'auto',
m = 100,
g = 'center'
Object.defineProperties(this, {
id: {
enumerable: !0,
get: function () {
return n
},
set: function (e) {
n = '' + e
},
},
pauseOnExit: {
enumerable: !0,
get: function () {
return r
},
set: function (e) {
r = !!e
},
},
startTime: {
enumerable: !0,
get: function () {
return a
},
set: function (e) {
if ('number' != typeof e) throw new TypeError('Start time must be set to a number.')
;(a = e), (this.hasBeenReset = !0)
},
},
endTime: {
enumerable: !0,
get: function () {
return s
},
set: function (e) {
if ('number' != typeof e) throw new TypeError('End time must be set to a number.')
;(s = e), (this.hasBeenReset = !0)
},
},
text: {
enumerable: !0,
get: function () {
return o
},
set: function (e) {
;(o = '' + e), (this.hasBeenReset = !0)
},
},
region: {
enumerable: !0,
get: function () {
return u
},
set: function (e) {
;(u = e), (this.hasBeenReset = !0)
},
},
vertical: {
enumerable: !0,
get: function () {
return l
},
set: function (e) {
e = 'string' == typeof (e = e) && !!Li[e.toLowerCase()] && e.toLowerCase()
if (!1 === e) throw new SyntaxError('Vertical: an invalid or illegal direction string was specified.')
;(l = e), (this.hasBeenReset = !0)
},
},
snapToLines: {
enumerable: !0,
get: function () {
return c
},
set: function (e) {
;(c = !!e), (this.hasBeenReset = !0)
},
},
line: {
enumerable: !0,
get: function () {
return d
},
set: function (e) {
if ('number' != typeof e && 'auto' !== e) throw new SyntaxError('Line: an invalid number or illegal string was specified.')
;(d = e), (this.hasBeenReset = !0)
},
},
lineAlign: {
enumerable: !0,
get: function () {
return h
},
set: function (e) {
e = Oi(e)
e && ((h = e), (this.hasBeenReset = !0))
},
},
position: {
enumerable: !0,
get: function () {
return p
},
set: function (e) {
if (e < 0 || 100 < e) throw new Error('Position must be between 0 and 100.')
;(p = e), (this.hasBeenReset = !0)
},
},
positionAlign: {
enumerable: !0,
get: function () {
return f
},
set: function (e) {
e = Oi(e)
e && ((f = e), (this.hasBeenReset = !0))
},
},
size: {
enumerable: !0,
get: function () {
return m
},
set: function (e) {
if (e < 0 || 100 < e) throw new Error('Size must be between 0 and 100.')
;(m = e), (this.hasBeenReset = !0)
},
},
align: {
enumerable: !0,
get: function () {
return g
},
set: function (e) {
e = Oi(e)
if (!e) throw new SyntaxError('align: an invalid or illegal alignment string was specified.')
;(g = e), (this.hasBeenReset = !0)
},
},
}),
(this.displayState = void 0)
}
Mi.prototype.getCueAsHTML = function () {
return WebVTT.convertCueToDOMTree(window, this.text)
}
var Ri = Mi,
Ni = { '': !0, up: !0 }
function Ui(e) {
return 'number' == typeof e && 0 <= e && e <= 100
}
function Bi() {
var t = 100,
i = 3,
n = 0,
r = 100,
a = 0,
s = 100,
o = ''
Object.defineProperties(this, {
width: {
enumerable: !0,
get: function () {
return t
},
set: function (e) {
if (!Ui(e)) throw new Error('Width must be between 0 and 100.')
t = e
},
},
lines: {
enumerable: !0,
get: function () {
return i
},
set: function (e) {
if ('number' != typeof e) throw new TypeError('Lines must be set to a number.')
i = e
},
},
regionAnchorY: {
enumerable: !0,
get: function () {
return r
},
set: function (e) {
if (!Ui(e)) throw new Error('RegionAnchorX must be between 0 and 100.')
r = e
},
},
regionAnchorX: {
enumerable: !0,
get: function () {
return n
},
set: function (e) {
if (!Ui(e)) throw new Error('RegionAnchorY must be between 0 and 100.')
n = e
},
},
viewportAnchorY: {
enumerable: !0,
get: function () {
return s
},
set: function (e) {
if (!Ui(e)) throw new Error('ViewportAnchorY must be between 0 and 100.')
s = e
},
},
viewportAnchorX: {
enumerable: !0,
get: function () {
return a
},
set: function (e) {
if (!Ui(e)) throw new Error('ViewportAnchorX must be between 0 and 100.')
a = e
},
},
scroll: {
enumerable: !0,
get: function () {
return o
},
set: function (e) {
e = 'string' == typeof (e = e) && !!Ni[e.toLowerCase()] && e.toLowerCase()
!1 === e || (o = e)
},
},
})
}
var Fi = m(function (e) {
e = e.exports = { WebVTT: Pi, VTTCue: Ri, VTTRegion: Bi }
;(Kt.vttjs = e), (Kt.WebVTT = e.WebVTT)
var t = e.VTTCue,
i = e.VTTRegion,
n = Kt.VTTCue,
r = Kt.VTTRegion
;(e.shim = function () {
;(Kt.VTTCue = t), (Kt.VTTRegion = i)
}),
(e.restore = function () {
;(Kt.VTTCue = n), (Kt.VTTRegion = r)
}),
Kt.VTTCue || e.shim()
})
Fi.WebVTT, Fi.VTTCue, Fi.VTTRegion
var ji = (function (n) {
function i(t, e) {
var i
return (
void 0 === e && (e = function () {}),
((t = void 0 === t ? {} : t).reportTouchActivity = !1),
((i = n.call(this, null, t, e) || this).onDurationChange_ = function (e) {
return i.onDurationChange(e)
}),
(i.trackProgress_ = function (e) {
return i.trackProgress(e)
}),
(i.trackCurrentTime_ = function (e) {
return i.trackCurrentTime(e)
}),
(i.stopTrackingCurrentTime_ = function (e) {
return i.stopTrackingCurrentTime(e)
}),
(i.disposeSourceHandler_ = function (e) {
return i.disposeSourceHandler(e)
}),
(i.queuedHanders_ = new Set()),
(i.hasStarted_ = !1),
i.on('playing', function () {
this.hasStarted_ = !0
}),
i.on('loadstart', function () {
this.hasStarted_ = !1
}),
oi.names.forEach(function (e) {
e = oi[e]
t && t[e.getterName] && (i[e.privateName] = t[e.getterName])
}),
i.featuresProgressEvents || i.manualProgressOn(),
i.featuresTimeupdateEvents || i.manualTimeUpdatesOn(),
['Text', 'Audio', 'Video'].forEach(function (e) {
!1 === t['native' + e + 'Tracks'] && (i['featuresNative' + e + 'Tracks'] = !1)
}),
!1 === t.nativeCaptions || !1 === t.nativeTextTracks ? (i.featuresNativeTextTracks = !1) : (!0 !== t.nativeCaptions && !0 !== t.nativeTextTracks) || (i.featuresNativeTextTracks = !0),
i.featuresNativeTextTracks || i.emulateTextTracks(),
(i.preloadTextTracks = !1 !== t.preloadTextTracks),
(i.autoRemoteTextTracks_ = new oi.text.ListClass()),
i.initTrackListeners(),
t.nativeControlsForTouch || i.emitTapEvents(),
i.constructor && (i.name_ = i.constructor.name || 'Unknown Tech'),
i
)
}
mt(i, n)
var e = i.prototype
return (
(e.triggerSourceset = function (e) {
var t = this
this.isReady_ ||
this.one('ready', function () {
return t.setTimeout(function () {
return t.triggerSourceset(e)
}, 1)
}),
this.trigger({ src: e, type: 'sourceset' })
}),
(e.manualProgressOn = function () {
this.on('durationchange', this.onDurationChange_), (this.manualProgress = !0), this.one('ready', this.trackProgress_)
}),
(e.manualProgressOff = function () {
;(this.manualProgress = !1), this.stopTrackingProgress(), this.off('durationchange', this.onDurationChange_)
}),
(e.trackProgress = function (e) {
this.stopTrackingProgress(),
(this.progressInterval = this.setInterval(
Ve(this, function () {
var e = this.bufferedPercent()
this.bufferedPercent_ !== e && this.trigger('progress'), 1 === (this.bufferedPercent_ = e) && this.stopTrackingProgress()
}),
500
))
}),
(e.onDurationChange = function (e) {
this.duration_ = this.duration()
}),
(e.buffered = function () {
return vt(0, 0)
}),
(e.bufferedPercent = function () {
return _t(this.buffered(), this.duration_)
}),
(e.stopTrackingProgress = function () {
this.clearInterval(this.progressInterval)
}),
(e.manualTimeUpdatesOn = function () {
;(this.manualTimeUpdates = !0), this.on('play', this.trackCurrentTime_), this.on('pause', this.stopTrackingCurrentTime_)
}),
(e.manualTimeUpdatesOff = function () {
;(this.manualTimeUpdates = !1), this.stopTrackingCurrentTime(), this.off('play', this.trackCurrentTime_), this.off('pause', this.stopTrackingCurrentTime_)
}),
(e.trackCurrentTime = function () {
this.currentTimeInterval && this.stopTrackingCurrentTime(),
(this.currentTimeInterval = this.setInterval(function () {
this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: !0 })
}, 250))
}),
(e.stopTrackingCurrentTime = function () {
this.clearInterval(this.currentTimeInterval), this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: !0 })
}),
(e.dispose = function () {
this.clearTracks(ai.names), this.manualProgress && this.manualProgressOff(), this.manualTimeUpdates && this.manualTimeUpdatesOff(), n.prototype.dispose.call(this)
}),
(e.clearTracks = function (e) {
var r = this
;(e = [].concat(e)).forEach(function (e) {
for (var t = r[e + 'Tracks']() || [], i = t.length; i--; ) {
var n = t[i]
'text' === e && r.removeRemoteTextTrack(n), t.removeTrack(n)
}
})
}),
(e.cleanupAutoTextTracks = function () {
for (var e = this.autoRemoteTextTracks_ || [], t = e.length; t--; ) {
var i = e[t]
this.removeRemoteTextTrack(i)
}
}),
(e.reset = function () {}),
(e.crossOrigin = function () {}),
(e.setCrossOrigin = function () {}),
(e.error = function (e) {
return void 0 !== e && ((this.error_ = new bt(e)), this.trigger('error')), this.error_
}),
(e.played = function () {
return this.hasStarted_ ? vt(0, 0) : vt()
}),
(e.play = function () {}),
(e.setScrubbing = function () {}),
(e.scrubbing = function () {}),
(e.setCurrentTime = function () {
this.manualTimeUpdates && this.trigger({ type: 'timeupdate', target: this, manuallyTriggered: !0 })
}),
(e.initTrackListeners = function () {
var r = this
ai.names.forEach(function (e) {
function t() {
r.trigger(e + 'trackchange')
}
var i = ai[e],
n = r[i.getterName]()
n.addEventListener('removetrack', t),
n.addEventListener('addtrack', t),
r.on('dispose', function () {
n.removeEventListener('removetrack', t), n.removeEventListener('addtrack', t)
})
})
}),
(e.addWebVttScript_ = function () {
var e,
t = this
window.WebVTT ||
(document.body.contains(this.el())
? !this.options_['vtt.js'] && S(Fi) && 0 < Object.keys(Fi).length
? this.trigger('vttjsloaded')
: (((e = document.createElement('script')).src = this.options_['vtt.js'] || 'https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js'),
(e.onload = function () {
t.trigger('vttjsloaded')
}),
(e.onerror = function () {
t.trigger('vttjserror')
}),
this.on('dispose', function () {
;(e.onload = null), (e.onerror = null)
}),
(window.WebVTT = !0),
this.el().parentNode.appendChild(e))
: this.ready(this.addWebVttScript_))
}),
(e.emulateTextTracks = function () {
function t(e) {
return n.addTrack(e.track)
}
function i(e) {
return n.removeTrack(e.track)
}
var e = this,
n = this.textTracks(),
r = this.remoteTextTracks()
r.on('addtrack', t), r.on('removetrack', i), this.addWebVttScript_()
function a() {
return e.trigger('texttrackchange')
}
function s() {
a()
for (var e = 0; e < n.length; e++) {
var t = n[e]
t.removeEventListener('cuechange', a), 'showing' === t.mode && t.addEventListener('cuechange', a)
}
}
s(),
n.addEventListener('change', s),
n.addEventListener('addtrack', s),
n.addEventListener('removetrack', s),
this.on('dispose', function () {
r.off('addtrack', t), r.off('removetrack', i), n.removeEventListener('change', s), n.removeEventListener('addtrack', s), n.removeEventListener('removetrack', s)
for (var e = 0; e < n.length; e++) n[e].removeEventListener('cuechange', a)
})
}),
(e.addTextTrack = function (e, t, i) {
if (!e) throw new Error('TextTrack kind is required but was not provided')
return (function (e, t, i, n, r) {
void 0 === r && (r = {})
var a = e.textTracks()
return (r.kind = t), i && (r.label = i), n && (r.language = n), (r.tech = e), (r = new oi.text.TrackClass(r)), a.addTrack(r), r
})(this, e, t, i)
}),
(e.createRemoteTextTrack = function (e) {
e = lt(e, { tech: this })
return new si.remoteTextEl.TrackClass(e)
}),
(e.addRemoteTextTrack = function (e, t) {
var i = this,
n = this.createRemoteTextTrack((e = void 0 === e ? {} : e))
return (
!0 !== t &&
!1 !== t &&
(h.warn('Calling addRemoteTextTrack without explicitly setting the "manualCleanup" parameter to `true` is deprecated and default to `false` in future version of video.js'),
(t = !0)),
this.remoteTextTrackEls().addTrackElement_(n),
this.remoteTextTracks().addTrack(n.track),
!0 !== t &&
this.ready(function () {
return i.autoRemoteTextTracks_.addTrack(n.track)
}),
n
)
}),
(e.removeRemoteTextTrack = function (e) {
var t = this.remoteTextTrackEls().getTrackElementByTrack_(e)
this.remoteTextTrackEls().removeTrackElement_(t), this.remoteTextTracks().removeTrack(e), this.autoRemoteTextTracks_.removeTrack(e)
}),
(e.getVideoPlaybackQuality = function () {
return {}
}),
(e.requestPictureInPicture = function () {
var e = this.options_.Promise || window.Promise
if (e) return e.reject()
}),
(e.disablePictureInPicture = function () {
return !0
}),
(e.setDisablePictureInPicture = function () {}),
(e.requestVideoFrameCallback = function (e) {
var t = this,
i = Pe++
return (
this.paused()
? (this.queuedHanders_.add(i),
this.one('playing', function () {
t.queuedHanders_.has(i) && (t.queuedHanders_.delete(i), e())
}))
: this.requestNamedAnimationFrame(i, e),
i
)
}),
(e.cancelVideoFrameCallback = function (e) {
this.queuedHanders_.has(e) ? this.queuedHanders_.delete(e) : this.cancelNamedAnimationFrame(e)
}),
(e.setPoster = function () {}),
(e.playsinline = function () {}),
(e.setPlaysinline = function () {}),
(e.overrideNativeAudioTracks = function () {}),
(e.overrideNativeVideoTracks = function () {}),
(e.canPlayType = function () {
return ''
}),
(i.canPlayType = function () {
return ''
}),
(i.canPlaySource = function (e, t) {
return i.canPlayType(e.type)
}),
(i.isTech = function (e) {
return e.prototype instanceof i || e instanceof i || e === i
}),
(i.registerTech = function (e, t) {
if ((i.techs_ || (i.techs_ = {}), !i.isTech(t))) throw new Error('Tech ' + e + ' must be a Tech')
if (!i.canPlayType) throw new Error('Techs must have a static canPlayType method on them')
if (!i.canPlaySource) throw new Error('Techs must have a static canPlaySource method on them')
return (e = ut(e)), (i.techs_[e] = t), (i.techs_[ot(e)] = t), 'Tech' !== e && i.defaultTechOrder_.push(e), t
}),
(i.getTech = function (e) {
if (e)
return i.techs_ && i.techs_[e]
? i.techs_[e]
: ((e = ut(e)),
window && window.videojs && window.videojs[e]
? (h.warn('The ' + e + ' tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)'), window.videojs[e])
: void 0)
}),
i
)
})(pt)
oi.names.forEach(function (e) {
var t = oi[e]
ji.prototype[t.getterName] = function () {
return (this[t.privateName] = this[t.privateName] || new t.ListClass()), this[t.privateName]
}
}),
(ji.prototype.featuresVolumeControl = !0),
(ji.prototype.featuresMuteControl = !0),
(ji.prototype.featuresFullscreenResize = !1),
(ji.prototype.featuresPlaybackRate = !1),
(ji.prototype.featuresProgressEvents = !1),
(ji.prototype.featuresSourceset = !1),
(ji.prototype.featuresTimeupdateEvents = !1),
(ji.prototype.featuresNativeTextTracks = !1),
(ji.prototype.featuresVideoFrameCallback = !1),
(ji.withSourceHandlers = function (r) {
;(r.registerSourceHandler = function (e, t) {
var i = (i = r.sourceHandlers) || (r.sourceHandlers = [])
void 0 === t && (t = i.length), i.splice(t, 0, e)
}),
(r.canPlayType = function (e) {
for (var t, i = r.sourceHandlers || [], n = 0; n < i.length; n++) if ((t = i[n].canPlayType(e))) return t
return ''
}),
(r.selectSourceHandler = function (e, t) {
for (var i = r.sourceHandlers || [], n = 0; n < i.length; n++) if (i[n].canHandleSource(e, t)) return i[n]
return null
}),
(r.canPlaySource = function (e, t) {
var i = r.selectSourceHandler(e, t)
return i ? i.canHandleSource(e, t) : ''
})
;['seekable', 'seeking', 'duration'].forEach(function (e) {
var t = this[e]
'function' == typeof t &&
(this[e] = function () {
return this.sourceHandler_ && this.sourceHandler_[e] ? this.sourceHandler_[e].apply(this.sourceHandler_, arguments) : t.apply(this, arguments)
})
}, r.prototype),
(r.prototype.setSource = function (e) {
var t = r.selectSourceHandler(e, this.options_)
t || (r.nativeSourceHandler ? (t = r.nativeSourceHandler) : h.error('No source handler found for the current source.')),
this.disposeSourceHandler(),
this.off('dispose', this.disposeSourceHandler_),
t !== r.nativeSourceHandler && (this.currentSource_ = e),
(this.sourceHandler_ = t.handleSource(e, this, this.options_)),
this.one('dispose', this.disposeSourceHandler_)
}),
(r.prototype.disposeSourceHandler = function () {
this.currentSource_ && (this.clearTracks(['audio', 'video']), (this.currentSource_ = null)),
this.cleanupAutoTextTracks(),
this.sourceHandler_ && (this.sourceHandler_.dispose && this.sourceHandler_.dispose(), (this.sourceHandler_ = null))
})
}),
pt.registerComponent('Tech', ji),
ji.registerTech('Tech', ji),
(ji.defaultTechOrder_ = [])
var Hi = {},
qi = {},
Vi = {}
function Wi(e, t, i) {
e.setTimeout(function () {
return (function i(n, e, r, a, s, o) {
void 0 === n && (n = {})
void 0 === e && (e = [])
void 0 === s && (s = [])
void 0 === o && (o = !1)
var t = e,
e = t[0],
u = t.slice(1)
if ('string' == typeof e) i(n, Hi[e], r, a, s, o)
else if (e) {
var l = Qi(a, e)
if (!l.setSource) return s.push(l), i(n, u, r, a, s, o)
l.setSource(b({}, n), function (e, t) {
return e ? i(n, u, r, a, s, o) : (s.push(l), void i(t, n.type === t.type ? u : Hi[t.type], r, a, s, o))
})
} else u.length ? i(n, u, r, a, s, o) : o ? r(n, s) : i(n, Hi['*'], r, a, s, !0)
})(t, Hi[t.type], i, e)
}, 1)
}
function Gi(e, t, i, n) {
void 0 === n && (n = null)
var r = 'call' + ut(i),
r = e.reduce(Yi(r), n),
n = r === Vi,
r = n ? null : t[i](r)
return (
(function (e, t, i, n) {
for (var r = e.length - 1; 0 <= r; r--) {
var a = e[r]
a[t] && a[t](n, i)
}
})(e, i, r, n),
r
)
}
var zi = { buffered: 1, currentTime: 1, duration: 1, muted: 1, played: 1, paused: 1, seekable: 1, volume: 1, ended: 1 },
Xi = { setCurrentTime: 1, setMuted: 1, setVolume: 1 },
Ki = { play: 1, pause: 1 }
function Yi(i) {
return function (e, t) {
return e === Vi ? Vi : t[i] ? t[i](e) : e
}
}
function Qi(e, t) {
var i = qi[e.id()],
n = null
if (null == i) return (n = t(e)), (qi[e.id()] = [[t, n]]), n
for (var r = 0; r < i.length; r++) {
var a = i[r],
s = a[0],
a = a[1]
s === t && (n = a)
}
return null === n && ((n = t(e)), i.push([t, n])), n
}
function $i(e) {
return (e = Nt((e = void 0 === e ? '' : e))), Zi[e.toLowerCase()] || ''
}
function Ji(e) {
var t
return (e = Array.isArray(e)
? ((t = []),
e.forEach(function (e) {
;(e = Ji(e)), Array.isArray(e) ? (t = t.concat(e)) : T(e) && t.push(e)
}),
t)
: 'string' == typeof e && e.trim()
? [en({ src: e })]
: T(e) && 'string' == typeof e.src && e.src && e.src.trim()
? [en(e)]
: [])
}
var Zi = {
opus: 'video/ogg',
ogv: 'video/ogg',
mp4: 'video/mp4',
mov: 'video/mp4',
m4v: 'video/mp4',
mkv: 'video/x-matroska',
m4a: 'audio/mp4',
mp3: 'audio/mpeg',
aac: 'audio/aac',
caf: 'audio/x-caf',
flac: 'audio/flac',
oga: 'audio/ogg',
wav: 'audio/wav',
m3u8: 'application/x-mpegURL',
mpd: 'application/dash+xml',
jpg: 'image/jpeg',
jpeg: 'image/jpeg',
gif: 'image/gif',
png: 'image/png',
svg: 'image/svg+xml',
webp: 'image/webp',
}
function en(e) {
var t
return e.type || ((t = $i(e.src)) && (e.type = t)), e
}
I = (function (u) {
function e(e, t, i) {
var n = lt({ createEl: !1 }, t),
i = u.call(this, e, n, i) || this
if (t.playerOptions.sources && 0 !== t.playerOptions.sources.length) e.src(t.playerOptions.sources)
else
for (var r = 0, a = t.playerOptions.techOrder; r < a.length; r++) {
var s = ut(a[r]),
o = ji.getTech(s)
if ((o = !s ? pt.getComponent(s) : o) && o.isSupported()) {
e.loadTech_(s)
break
}
}
return i
}
return mt(e, u), e
})(pt)
pt.registerComponent('MediaLoader', I)
C = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.options_.controlText && i.controlText(i.options_.controlText),
(i.handleMouseOver_ = function (e) {
return i.handleMouseOver(e)
}),
(i.handleMouseOut_ = function (e) {
return i.handleMouseOut(e)
}),
(i.handleClick_ = function (e) {
return i.handleClick(e)
}),
(i.handleKeyDown_ = function (e) {
return i.handleKeyDown(e)
}),
i.emitTapEvents(),
i.enable(),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.createEl = function (e, t, i) {
void 0 === e && (e = 'div'),
void 0 === t && (t = {}),
void 0 === i && (i = {}),
(t = b({ className: this.buildCSSClass(), tabIndex: 0 }, t)),
'button' === e && h.error('Creating a ClickableComponent with an HTML element of ' + e + ' is not supported; use a Button instead.'),
(i = b({ role: 'button' }, i)),
(this.tabIndex_ = t.tabIndex)
i = $(e, t, i)
return i.appendChild($('span', { className: 'vjs-icon-placeholder' }, { 'aria-hidden': !0 })), this.createControlTextEl(i), i
}),
(t.dispose = function () {
;(this.controlTextEl_ = null), n.prototype.dispose.call(this)
}),
(t.createControlTextEl = function (e) {
return (
(this.controlTextEl_ = $('span', { className: 'vjs-control-text' }, { 'aria-live': 'polite' })),
e && e.appendChild(this.controlTextEl_),
this.controlText(this.controlText_, e),
this.controlTextEl_
)
}),
(t.controlText = function (e, t) {
if ((void 0 === t && (t = this.el()), void 0 === e)) return this.controlText_ || 'Need Text'
var i = this.localize(e)
;(this.controlText_ = e), J(this.controlTextEl_, i), this.nonIconControl || this.player_.options_.noUITitleAttributes || t.setAttribute('title', i)
}),
(t.buildCSSClass = function () {
return 'vjs-control vjs-button ' + n.prototype.buildCSSClass.call(this)
}),
(t.enable = function () {
this.enabled_ ||
((this.enabled_ = !0),
this.removeClass('vjs-disabled'),
this.el_.setAttribute('aria-disabled', 'false'),
'undefined' != typeof this.tabIndex_ && this.el_.setAttribute('tabIndex', this.tabIndex_),
this.on(['tap', 'click'], this.handleClick_),
this.on('keydown', this.handleKeyDown_))
}),
(t.disable = function () {
;(this.enabled_ = !1),
this.addClass('vjs-disabled'),
this.el_.setAttribute('aria-disabled', 'true'),
'undefined' != typeof this.tabIndex_ && this.el_.removeAttribute('tabIndex'),
this.off('mouseover', this.handleMouseOver_),
this.off('mouseout', this.handleMouseOut_),
this.off(['tap', 'click'], this.handleClick_),
this.off('keydown', this.handleKeyDown_)
}),
(t.handleLanguagechange = function () {
this.controlText(this.controlText_)
}),
(t.handleClick = function (e) {
this.options_.clickHandler && this.options_.clickHandler.call(this, arguments)
}),
(t.handleKeyDown = function (e) {
ht.isEventKey(e, 'Space') || ht.isEventKey(e, 'Enter') ? (e.preventDefault(), e.stopPropagation(), this.trigger('click')) : n.prototype.handleKeyDown.call(this, e)
}),
e
)
})(pt)
pt.registerComponent('ClickableComponent', C),
pt.registerComponent(
'PosterImage',
(function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.update(),
(i.update_ = function (e) {
return i.update(e)
}),
e.on('posterchange', i.update_),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.dispose = function () {
this.player().off('posterchange', this.update_), n.prototype.dispose.call(this)
}),
(t.createEl = function () {
return $('div', { className: 'vjs-poster', tabIndex: -1 })
}),
(t.update = function (e) {
var t = this.player().poster()
this.setSrc(t), t ? this.show() : this.hide()
}),
(t.setSrc = function (e) {
this.el_.style.backgroundImage = e ? 'url("' + e + '")' : ''
}),
(t.handleClick = function (e) {
var t
this.player_.controls() &&
((t = this.player_.usingPlugin('eme') && this.player_.eme.sessions && 0 < this.player_.eme.sessions.length),
!this.player_.tech(!0) || ((N || O) && t) || this.player_.tech(!0).focus(),
this.player_.paused() ? Et(this.player_.play()) : this.player_.pause())
}),
e
)
})(C)
)
var tn = '#222',
nn = {
monospace: 'monospace',
sansSerif: 'sans-serif',
serif: 'serif',
monospaceSansSerif: '"Andale Mono", "Lucida Console", monospace',
monospaceSerif: '"Courier New", monospace',
proportionalSansSerif: 'sans-serif',
proportionalSerif: 'serif',
casual: '"Comic Sans MS", Impact, fantasy',
script: '"Monotype Corsiva", cursive',
smallcaps: '"Andale Mono", "Lucida Console", monospace, sans-serif',
}
function rn(e, t) {
var i
if (4 === e.length) i = e[1] + e[1] + e[2] + e[2] + e[3] + e[3]
else {
if (7 !== e.length) throw new Error('Invalid color code provided, ' + e + '; must be formatted as e.g. #f0e or #f604e2.')
i = e.slice(1)
}
return 'rgba(' + parseInt(i.slice(0, 2), 16) + ',' + parseInt(i.slice(2, 4), 16) + ',' + parseInt(i.slice(4, 6), 16) + ',' + t + ')'
}
function an(e, t, i) {
try {
e.style[t] = i
} catch (e) {
return
}
}
pt.registerComponent(
'TextTrackDisplay',
(function (a) {
function e(i, e, t) {
function n(e) {
return r.updateDisplay(e)
}
var r = a.call(this, i, e, t) || this
return (
i.on('loadstart', function (e) {
return r.toggleDisplay(e)
}),
i.on('texttrackchange', n),
i.on('loadedmetadata', function (e) {
return r.preselectTrack(e)
}),
i.ready(
Ve(ft(r), function () {
if (i.tech_ && i.tech_.featuresNativeTextTracks) this.hide()
else {
i.on('fullscreenchange', n),
i.on('playerresize', n),
window.addEventListener('orientationchange', n),
i.on('dispose', function () {
return window.removeEventListener('orientationchange', n)
})
for (var e = this.options_.playerOptions.tracks || [], t = 0; t < e.length; t++) this.player_.addRemoteTextTrack(e[t], !0)
this.preselectTrack()
}
})
),
r
)
}
mt(e, a)
var t = e.prototype
return (
(t.preselectTrack = function () {
for (var e, t, i, n = { captions: 1, subtitles: 1 }, r = this.player_.textTracks(), a = this.player_.cache_.selectedLanguage, s = 0; s < r.length; s++) {
var o = r[s]
a && a.enabled && a.language && a.language === o.language && o.kind in n
? (i = (o.kind !== a.kind && i) || o)
: a && !a.enabled
? (t = e = i = null)
: o.default && ('descriptions' !== o.kind || e ? o.kind in n && !t && (t = o) : (e = o))
}
i ? (i.mode = 'showing') : t ? (t.mode = 'showing') : e && (e.mode = 'showing')
}),
(t.toggleDisplay = function () {
this.player_.tech_ && this.player_.tech_.featuresNativeTextTracks ? this.hide() : this.show()
}),
(t.createEl = function () {
return a.prototype.createEl.call(this, 'div', { className: 'vjs-text-track-display' }, { translate: 'yes', 'aria-live': 'off', 'aria-atomic': 'true' })
}),
(t.clearDisplay = function () {
'function' == typeof window.WebVTT && window.WebVTT.processCues(window, [], this.el_)
}),
(t.updateDisplay = function () {
var e = this.player_.textTracks(),
t = this.options_.allowMultipleShowingTracks
if ((this.clearDisplay(), t)) {
for (var i = [], n = 0; n < e.length; ++n) {
var r = e[n]
'showing' === r.mode && i.push(r)
}
this.updateForTrack(i)
} else {
for (var a = null, s = null, o = e.length; o--; ) {
var u = e[o]
'showing' === u.mode && ('descriptions' === u.kind ? (a = u) : (s = u))
}
s
? ('off' !== this.getAttribute('aria-live') && this.setAttribute('aria-live', 'off'), this.updateForTrack(s))
: a && ('assertive' !== this.getAttribute('aria-live') && this.setAttribute('aria-live', 'assertive'), this.updateForTrack(a))
}
}),
(t.updateDisplayState = function (e) {
for (var t = this.player_.textTrackSettings.getValues(), i = e.activeCues, n = i.length; n--; ) {
var r,
a = i[n]
a &&
((r = a.displayState),
t.color && (r.firstChild.style.color = t.color),
t.textOpacity && an(r.firstChild, 'color', rn(t.color || '#fff', t.textOpacity)),
t.backgroundColor && (r.firstChild.style.backgroundColor = t.backgroundColor),
t.backgroundOpacity && an(r.firstChild, 'backgroundColor', rn(t.backgroundColor || '#000', t.backgroundOpacity)),
t.windowColor && (t.windowOpacity ? an(r, 'backgroundColor', rn(t.windowColor, t.windowOpacity)) : (r.style.backgroundColor = t.windowColor)),
t.edgeStyle &&
('dropshadow' === t.edgeStyle
? (r.firstChild.style.textShadow = '2px 2px 3px #222, 2px 2px 4px #222, 2px 2px 5px ' + tn)
: 'raised' === t.edgeStyle
? (r.firstChild.style.textShadow = '1px 1px #222, 2px 2px #222, 3px 3px ' + tn)
: 'depressed' === t.edgeStyle
? (r.firstChild.style.textShadow = '1px 1px #ccc, 0 1px #ccc, -1px -1px #222, 0 -1px ' + tn)
: 'uniform' === t.edgeStyle && (r.firstChild.style.textShadow = '0 0 4px #222, 0 0 4px #222, 0 0 4px #222, 0 0 4px ' + tn)),
t.fontPercent &&
1 !== t.fontPercent &&
((a = window.parseFloat(r.style.fontSize)), (r.style.fontSize = a * t.fontPercent + 'px'), (r.style.height = 'auto'), (r.style.top = 'auto')),
t.fontFamily &&
'default' !== t.fontFamily &&
('small-caps' === t.fontFamily ? (r.firstChild.style.fontVariant = 'small-caps') : (r.firstChild.style.fontFamily = nn[t.fontFamily])))
}
}),
(t.updateForTrack = function (e) {
if (
(Array.isArray(e) || (e = [e]),
'function' == typeof window.WebVTT &&
!e.every(function (e) {
return !e.activeCues
}))
) {
for (var t = [], i = 0; i < e.length; ++i) for (var n = e[i], r = 0; r < n.activeCues.length; ++r) t.push(n.activeCues[r])
window.WebVTT.processCues(window, t, this.el_)
for (var a = 0; a < e.length; ++a) {
for (var s = e[a], o = 0; o < s.activeCues.length; ++o) {
var u = s.activeCues[o].displayState
te(u, 'vjs-text-track-cue'), te(u, 'vjs-text-track-cue-' + (s.language || a)), s.language && oe(u, 'lang', s.language)
}
this.player_.textTrackSettings && this.updateDisplayState(s)
}
}
}),
e
)
})(pt)
),
pt.registerComponent(
'LoadingSpinner',
(function (i) {
function e() {
return i.apply(this, arguments) || this
}
return (
mt(e, i),
(e.prototype.createEl = function () {
var e = this.player_.isAudio(),
t = this.localize(e ? 'Audio Player' : 'Video Player'),
e = $('span', { className: 'vjs-control-text', textContent: this.localize('{1} is loading.', [t]) }),
t = i.prototype.createEl.call(this, 'div', { className: 'vjs-loading-spinner', dir: 'ltr' })
return t.appendChild(e), t
}),
e
)
})(pt)
)
var sn = (function (t) {
function e() {
return t.apply(this, arguments) || this
}
mt(e, t)
var i = e.prototype
return (
(i.createEl = function (e, t, i) {
void 0 === t && (t = {}), void 0 === i && (i = {})
i = $('button', (t = b({ className: this.buildCSSClass() }, t)), (i = b({ type: 'button' }, i)))
return i.appendChild($('span', { className: 'vjs-icon-placeholder' }, { 'aria-hidden': !0 })), this.createControlTextEl(i), i
}),
(i.addChild = function (e, t) {
void 0 === t && (t = {})
var i = this.constructor.name
return h.warn('Adding an actionable (user controllable) child to a Button (' + i + ') is not supported; use a ClickableComponent instead.'), pt.prototype.addChild.call(this, e, t)
}),
(i.enable = function () {
t.prototype.enable.call(this), this.el_.removeAttribute('disabled')
}),
(i.disable = function () {
t.prototype.disable.call(this), this.el_.setAttribute('disabled', 'disabled')
}),
(i.handleKeyDown = function (e) {
ht.isEventKey(e, 'Space') || ht.isEventKey(e, 'Enter') ? e.stopPropagation() : t.prototype.handleKeyDown.call(this, e)
}),
e
)
})(C)
pt.registerComponent('Button', sn)
Bt = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
(i.mouseused_ = !1),
i.on('mousedown', function (e) {
return i.handleMouseDown(e)
}),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-big-play-button'
}),
(t.handleClick = function (e) {
var t = this.player_.play()
if (this.mouseused_ && e.clientX && e.clientY) {
var i = this.player_.usingPlugin('eme') && this.player_.eme.sessions && 0 < this.player_.eme.sessions.length
return Et(t), void (!this.player_.tech(!0) || ((N || O) && i) || this.player_.tech(!0).focus())
}
var i = this.player_.getChild('controlBar'),
n = i && i.getChild('playToggle')
n
? ((i = function () {
return n.focus()
}),
wt(t) ? t.then(i, function () {}) : this.setTimeout(i, 1))
: this.player_.tech(!0).focus()
}),
(t.handleKeyDown = function (e) {
;(this.mouseused_ = !1), n.prototype.handleKeyDown.call(this, e)
}),
(t.handleMouseDown = function (e) {
this.mouseused_ = !0
}),
e
)
})(sn)
;(Bt.prototype.controlText_ = 'Play Video'),
pt.registerComponent('BigPlayButton', Bt),
pt.registerComponent(
'CloseButton',
(function (i) {
function e(e, t) {
e = i.call(this, e, t) || this
return e.controlText((t && t.controlText) || e.localize('Close')), e
}
mt(e, i)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-close-button ' + i.prototype.buildCSSClass.call(this)
}),
(t.handleClick = function (e) {
this.trigger({ type: 'close', bubbles: !1 })
}),
(t.handleKeyDown = function (e) {
ht.isEventKey(e, 'Esc') ? (e.preventDefault(), e.stopPropagation(), this.trigger('click')) : i.prototype.handleKeyDown.call(this, e)
}),
e
)
})(sn)
)
Ft = (function (n) {
function e(e, t) {
var i = n.call(this, e, (t = void 0 === t ? {} : t)) || this
return (
(t.replay = void 0 === t.replay || t.replay),
i.on(e, 'play', function (e) {
return i.handlePlay(e)
}),
i.on(e, 'pause', function (e) {
return i.handlePause(e)
}),
t.replay &&
i.on(e, 'ended', function (e) {
return i.handleEnded(e)
}),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-play-control ' + n.prototype.buildCSSClass.call(this)
}),
(t.handleClick = function (e) {
this.player_.paused() ? Et(this.player_.play()) : this.player_.pause()
}),
(t.handleSeeked = function (e) {
this.removeClass('vjs-ended'), this.player_.paused() ? this.handlePause(e) : this.handlePlay(e)
}),
(t.handlePlay = function (e) {
this.removeClass('vjs-ended'), this.removeClass('vjs-paused'), this.addClass('vjs-playing'), this.controlText('Pause')
}),
(t.handlePause = function (e) {
this.removeClass('vjs-playing'), this.addClass('vjs-paused'), this.controlText('Play')
}),
(t.handleEnded = function (e) {
var t = this
this.removeClass('vjs-playing'),
this.addClass('vjs-ended'),
this.controlText('Replay'),
this.one(this.player_, 'seeked', function (e) {
return t.handleSeeked(e)
})
}),
e
)
})(sn)
;(Ft.prototype.controlText_ = 'Play'), pt.registerComponent('PlayToggle', Ft)
function on(e, t) {
e = e < 0 ? 0 : e
var i = Math.floor(e % 60),
n = Math.floor((e / 60) % 60),
r = Math.floor(e / 3600),
a = Math.floor((t / 60) % 60),
t = Math.floor(t / 3600)
return (r = 0 < (r = isNaN(e) || e === 1 / 0 ? (n = i = '-') : r) || 0 < t ? r + ':' : '') + (n = ((r || 10 <= a) && n < 10 ? '0' + n : n) + ':') + (i = i < 10 ? '0' + i : i)
}
var un = on
function ln(e, t) {
return un(e, (t = void 0 === t ? e : t))
}
k = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.on(e, ['timeupdate', 'ended'], function (e) {
return i.updateContent(e)
}),
i.updateTextNode_(),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.createEl = function () {
var e = this.buildCSSClass(),
t = n.prototype.createEl.call(this, 'div', { className: e + ' vjs-time-control vjs-control' }),
i = $('span', { className: 'vjs-control-text', textContent: this.localize(this.labelText_) + ' ' }, { role: 'presentation' })
return t.appendChild(i), (this.contentEl_ = $('span', { className: e + '-display' }, { 'aria-live': 'off', role: 'presentation' })), t.appendChild(this.contentEl_), t
}),
(t.dispose = function () {
;(this.contentEl_ = null), (this.textNode_ = null), n.prototype.dispose.call(this)
}),
(t.updateTextNode_ = function (e) {
var t = this
;(e = ln((e = void 0 === e ? 0 : e))),
this.formattedTime_ !== e &&
((this.formattedTime_ = e),
this.requestNamedAnimationFrame('TimeDisplay#updateTextNode_', function () {
var e
t.contentEl_ &&
((e = t.textNode_) &&
t.contentEl_.firstChild !== e &&
((e = null),
h.warn('TimeDisplay#updateTextnode_: Prevented replacement of text node element since it was no longer a child of this node. Appending a new node instead.')),
(t.textNode_ = document.createTextNode(t.formattedTime_)),
t.textNode_ && (e ? t.contentEl_.replaceChild(t.textNode_, e) : t.contentEl_.appendChild(t.textNode_)))
}))
}),
(t.updateContent = function (e) {}),
e
)
})(pt)
;(k.prototype.labelText_ = 'Time'), (k.prototype.controlText_ = 'Time'), pt.registerComponent('TimeDisplay', k)
jt = (function (e) {
function t() {
return e.apply(this, arguments) || this
}
mt(t, e)
var i = t.prototype
return (
(i.buildCSSClass = function () {
return 'vjs-current-time'
}),
(i.updateContent = function (e) {
var t = this.player_.ended() ? this.player_.duration() : this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime()
this.updateTextNode_(t)
}),
t
)
})(k)
;(jt.prototype.labelText_ = 'Current Time'), (jt.prototype.controlText_ = 'Current Time'), pt.registerComponent('CurrentTimeDisplay', jt)
j = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this,
t = function (e) {
return i.updateContent(e)
}
return i.on(e, 'durationchange', t), i.on(e, 'loadstart', t), i.on(e, 'loadedmetadata', t), i
}
mt(e, n)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-duration'
}),
(t.updateContent = function (e) {
var t = this.player_.duration()
this.updateTextNode_(t)
}),
e
)
})(k)
;(j.prototype.labelText_ = 'Duration'),
(j.prototype.controlText_ = 'Duration'),
pt.registerComponent('DurationDisplay', j),
pt.registerComponent(
'TimeDivider',
(function (n) {
function e() {
return n.apply(this, arguments) || this
}
return (
mt(e, n),
(e.prototype.createEl = function () {
var e = n.prototype.createEl.call(this, 'div', { className: 'vjs-time-control vjs-time-divider' }, { 'aria-hidden': !0 }),
t = n.prototype.createEl.call(this, 'div'),
i = n.prototype.createEl.call(this, 'span', { textContent: '/' })
return t.appendChild(i), e.appendChild(t), e
}),
e
)
})(pt)
)
f = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.on(e, 'durationchange', function (e) {
return i.updateContent(e)
}),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-remaining-time'
}),
(t.createEl = function () {
var e = n.prototype.createEl.call(this)
return !1 !== this.options_.displayNegative && e.insertBefore($('span', {}, { 'aria-hidden': !0 }, '-'), this.contentEl_), e
}),
(t.updateContent = function (e) {
var t
'number' == typeof this.player_.duration() &&
((t = this.player_.ended() ? 0 : this.player_.remainingTimeDisplay ? this.player_.remainingTimeDisplay() : this.player_.remainingTime()), this.updateTextNode_(t))
}),
e
)
})(k)
;(f.prototype.labelText_ = 'Remaining Time'),
(f.prototype.controlText_ = 'Remaining Time'),
pt.registerComponent('RemainingTimeDisplay', f),
pt.registerComponent(
'LiveDisplay',
(function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.updateShowing(),
i.on(i.player(), 'durationchange', function (e) {
return i.updateShowing(e)
}),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.createEl = function () {
var e = n.prototype.createEl.call(this, 'div', { className: 'vjs-live-control vjs-control' })
return (
(this.contentEl_ = $('div', { className: 'vjs-live-display' }, { 'aria-live': 'off' })),
this.contentEl_.appendChild($('span', { className: 'vjs-control-text', textContent: this.localize('Stream Type') + ' ' })),
this.contentEl_.appendChild(document.createTextNode(this.localize('LIVE'))),
e.appendChild(this.contentEl_),
e
)
}),
(t.dispose = function () {
;(this.contentEl_ = null), n.prototype.dispose.call(this)
}),
(t.updateShowing = function (e) {
this.player().duration() === 1 / 0 ? this.show() : this.hide()
}),
e
)
})(pt)
)
ui = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.updateLiveEdgeStatus(),
i.player_.liveTracker &&
((i.updateLiveEdgeStatusHandler_ = function (e) {
return i.updateLiveEdgeStatus(e)
}),
i.on(i.player_.liveTracker, 'liveedgechange', i.updateLiveEdgeStatusHandler_)),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.createEl = function () {
var e = n.prototype.createEl.call(this, 'button', { className: 'vjs-seek-to-live-control vjs-control' })
return (this.textEl_ = $('span', { className: 'vjs-seek-to-live-text', textContent: this.localize('LIVE') }, { 'aria-hidden': 'true' })), e.appendChild(this.textEl_), e
}),
(t.updateLiveEdgeStatus = function () {
!this.player_.liveTracker || this.player_.liveTracker.atLiveEdge()
? (this.setAttribute('aria-disabled', !0), this.addClass('vjs-at-live-edge'), this.controlText('Seek to live, currently playing live'))
: (this.setAttribute('aria-disabled', !1), this.removeClass('vjs-at-live-edge'), this.controlText('Seek to live, currently behind live'))
}),
(t.handleClick = function () {
this.player_.liveTracker.seekToLiveEdge()
}),
(t.dispose = function () {
this.player_.liveTracker && this.off(this.player_.liveTracker, 'liveedgechange', this.updateLiveEdgeStatusHandler_), (this.textEl_ = null), n.prototype.dispose.call(this)
}),
e
)
})(sn)
;(ui.prototype.controlText_ = 'Seek to live, currently playing live'), pt.registerComponent('SeekToLive', ui)
function cn(e, t, i) {
return (e = Number(e)), Math.min(i, Math.max(t, isNaN(e) ? t : e))
}
li = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
(i.handleMouseDown_ = function (e) {
return i.handleMouseDown(e)
}),
(i.handleMouseUp_ = function (e) {
return i.handleMouseUp(e)
}),
(i.handleKeyDown_ = function (e) {
return i.handleKeyDown(e)
}),
(i.handleClick_ = function (e) {
return i.handleClick(e)
}),
(i.handleMouseMove_ = function (e) {
return i.handleMouseMove(e)
}),
(i.update_ = function (e) {
return i.update(e)
}),
(i.bar = i.getChild(i.options_.barName)),
i.vertical(!!i.options_.vertical),
i.enable(),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.enabled = function () {
return this.enabled_
}),
(t.enable = function () {
this.enabled() ||
(this.on('mousedown', this.handleMouseDown_),
this.on('touchstart', this.handleMouseDown_),
this.on('keydown', this.handleKeyDown_),
this.on('click', this.handleClick_),
this.on(this.player_, 'controlsvisible', this.update),
this.playerEvent && this.on(this.player_, this.playerEvent, this.update),
this.removeClass('disabled'),
this.setAttribute('tabindex', 0),
(this.enabled_ = !0))
}),
(t.disable = function () {
var e
this.enabled() &&
((e = this.bar.el_.ownerDocument),
this.off('mousedown', this.handleMouseDown_),
this.off('touchstart', this.handleMouseDown_),
this.off('keydown', this.handleKeyDown_),
this.off('click', this.handleClick_),
this.off(this.player_, 'controlsvisible', this.update_),
this.off(e, 'mousemove', this.handleMouseMove_),
this.off(e, 'mouseup', this.handleMouseUp_),
this.off(e, 'touchmove', this.handleMouseMove_),
this.off(e, 'touchend', this.handleMouseUp_),
this.removeAttribute('tabindex'),
this.addClass('disabled'),
this.playerEvent && this.off(this.player_, this.playerEvent, this.update),
(this.enabled_ = !1))
}),
(t.createEl = function (e, t, i) {
return (
void 0 === i && (i = {}),
((t = void 0 === t ? {} : t).className = t.className + ' vjs-slider'),
(t = b({ tabIndex: 0 }, t)),
(i = b({ role: 'slider', 'aria-valuenow': 0, 'aria-valuemin': 0, 'aria-valuemax': 100, tabIndex: 0 }, i)),
n.prototype.createEl.call(this, e, t, i)
)
}),
(t.handleMouseDown = function (e) {
var t = this.bar.el_.ownerDocument
'mousedown' === e.type && e.preventDefault(),
'touchstart' !== e.type || M || e.preventDefault(),
le(),
this.addClass('vjs-sliding'),
this.trigger('slideractive'),
this.on(t, 'mousemove', this.handleMouseMove_),
this.on(t, 'mouseup', this.handleMouseUp_),
this.on(t, 'touchmove', this.handleMouseMove_),
this.on(t, 'touchend', this.handleMouseUp_),
this.handleMouseMove(e, !0)
}),
(t.handleMouseMove = function (e) {}),
(t.handleMouseUp = function () {
var e = this.bar.el_.ownerDocument
ce(),
this.removeClass('vjs-sliding'),
this.trigger('sliderinactive'),
this.off(e, 'mousemove', this.handleMouseMove_),
this.off(e, 'mouseup', this.handleMouseUp_),
this.off(e, 'touchmove', this.handleMouseMove_),
this.off(e, 'touchend', this.handleMouseUp_),
this.update()
}),
(t.update = function () {
var t = this
if (this.el_ && this.bar) {
var i = this.getProgress()
return i === this.progress_
? i
: ((this.progress_ = i),
this.requestNamedAnimationFrame('Slider#update', function () {
var e = t.vertical() ? 'height' : 'width'
t.bar.el().style[e] = (100 * i).toFixed(2) + '%'
}),
i)
}
}),
(t.getProgress = function () {
return Number(cn(this.getPercent(), 0, 1).toFixed(4))
}),
(t.calculateDistance = function (e) {
e = pe(this.el_, e)
return this.vertical() ? e.y : e.x
}),
(t.handleKeyDown = function (e) {
ht.isEventKey(e, 'Left') || ht.isEventKey(e, 'Down')
? (e.preventDefault(), e.stopPropagation(), this.stepBack())
: ht.isEventKey(e, 'Right') || ht.isEventKey(e, 'Up')
? (e.preventDefault(), e.stopPropagation(), this.stepForward())
: n.prototype.handleKeyDown.call(this, e)
}),
(t.handleClick = function (e) {
e.stopPropagation(), e.preventDefault()
}),
(t.vertical = function (e) {
if (void 0 === e) return this.vertical_ || !1
;(this.vertical_ = !!e), this.vertical_ ? this.addClass('vjs-slider-vertical') : this.addClass('vjs-slider-horizontal')
}),
e
)
})(pt)
pt.registerComponent('Slider', li)
function dn(e, t) {
return cn((e / t) * 100, 0, 100).toFixed(2) + '%'
}
pt.registerComponent(
'LoadProgressBar',
(function (r) {
function e(e, t) {
var i = r.call(this, e, t) || this
return (
(i.partEls_ = []),
i.on(e, 'progress', function (e) {
return i.update(e)
}),
i
)
}
mt(e, r)
var t = e.prototype
return (
(t.createEl = function () {
var e = r.prototype.createEl.call(this, 'div', { className: 'vjs-load-progress' }),
t = $('span', { className: 'vjs-control-text' }),
i = $('span', { textContent: this.localize('Loaded') }),
n = document.createTextNode(': ')
return (
(this.percentageEl_ = $('span', { className: 'vjs-control-text-loaded-percentage', textContent: '0%' })),
e.appendChild(t),
t.appendChild(i),
t.appendChild(n),
t.appendChild(this.percentageEl_),
e
)
}),
(t.dispose = function () {
;(this.partEls_ = null), (this.percentageEl_ = null), r.prototype.dispose.call(this)
}),
(t.update = function (e) {
var l = this
this.requestNamedAnimationFrame('LoadProgressBar#update', function () {
var e = l.player_.liveTracker,
t = l.player_.buffered(),
e = e && e.isLive() ? e.seekableEnd() : l.player_.duration(),
i = l.player_.bufferedEnd(),
n = l.partEls_,
e = dn(i, e)
l.percent_ !== e && ((l.el_.style.width = e), J(l.percentageEl_, e), (l.percent_ = e))
for (var r = 0; r < t.length; r++) {
var a = t.start(r),
s = t.end(r),
o = n[r]
o || ((o = l.el_.appendChild($())), (n[r] = o)),
(o.dataset.start === a && o.dataset.end === s) || ((o.dataset.start = a), (o.dataset.end = s), (o.style.left = dn(a, i)), (o.style.width = dn(s - a, i)))
}
for (var u = n.length; u > t.length; u--) l.el_.removeChild(n[u - 1])
n.length = t.length
})
}),
e
)
})(pt)
),
pt.registerComponent(
'TimeTooltip',
(function (i) {
function e(e, t) {
t = i.call(this, e, t) || this
return (t.update = We(Ve(ft(t), t.update), 30)), t
}
mt(e, i)
var t = e.prototype
return (
(t.createEl = function () {
return i.prototype.createEl.call(this, 'div', { className: 'vjs-time-tooltip' }, { 'aria-hidden': 'true' })
}),
(t.update = function (e, t, i) {
var n = he(this.el_),
r = de(this.player_.el()),
a = e.width * t
r &&
n &&
((t = e.left - r.left + a),
(r = e.width - a + (r.right - e.right)),
t < (e = n.width / 2) ? (e += e - t) : r < e && (e = r),
e < 0 ? (e = 0) : e > n.width && (e = n.width),
(e = Math.round(e)),
(this.el_.style.right = '-' + e + 'px'),
this.write(i))
}),
(t.write = function (e) {
J(this.el_, e)
}),
(t.updateTime = function (n, r, a, s) {
var o = this
this.requestNamedAnimationFrame('TimeTooltip#updateTime', function () {
var e,
t,
i = o.player_.duration()
;(i = o.player_.liveTracker && o.player_.liveTracker.isLive() ? ((t = (e = o.player_.liveTracker.liveWindow()) - r * e) < 1 ? '' : '-') + ln(t, e) : ln(a, i)),
o.update(n, r, i),
s && s()
})
}),
e
)
})(pt)
)
Xt = (function (i) {
function e(e, t) {
t = i.call(this, e, t) || this
return (t.update = We(Ve(ft(t), t.update), 30)), t
}
mt(e, i)
var t = e.prototype
return (
(t.createEl = function () {
return i.prototype.createEl.call(this, 'div', { className: 'vjs-play-progress vjs-slider-bar' }, { 'aria-hidden': 'true' })
}),
(t.update = function (e, t) {
var i,
n = this.getChild('timeTooltip')
n && ((i = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime()), n.updateTime(e, t, i))
}),
e
)
})(pt)
;(Xt.prototype.options_ = { children: [] }), q || A || Xt.prototype.options_.children.push('timeTooltip'), pt.registerComponent('PlayProgressBar', Xt)
I = (function (i) {
function e(e, t) {
t = i.call(this, e, t) || this
return (t.update = We(Ve(ft(t), t.update), 30)), t
}
mt(e, i)
var t = e.prototype
return (
(t.createEl = function () {
return i.prototype.createEl.call(this, 'div', { className: 'vjs-mouse-display' })
}),
(t.update = function (e, t) {
var i = this,
n = t * this.player_.duration()
this.getChild('timeTooltip').updateTime(e, t, n, function () {
i.el_.style.left = e.width * t + 'px'
})
}),
e
)
})(pt)
;(I.prototype.options_ = { children: ['timeTooltip'] }), pt.registerComponent('MouseTimeDisplay', I)
Bt = (function (a) {
function e(e, t) {
t = a.call(this, e, t) || this
return t.setEventHandlers_(), t
}
mt(e, a)
var t = e.prototype
return (
(t.setEventHandlers_ = function () {
var t = this
;(this.update_ = Ve(this, this.update)),
(this.update = We(this.update_, 30)),
this.on(this.player_, ['ended', 'durationchange', 'timeupdate'], this.update),
this.player_.liveTracker && this.on(this.player_.liveTracker, 'liveedgechange', this.update),
(this.updateInterval = null),
(this.enableIntervalHandler_ = function (e) {
return t.enableInterval_(e)
}),
(this.disableIntervalHandler_ = function (e) {
return t.disableInterval_(e)
}),
this.on(this.player_, ['playing'], this.enableIntervalHandler_),
this.on(this.player_, ['ended', 'pause', 'waiting'], this.disableIntervalHandler_),
'hidden' in document && 'visibilityState' in document && this.on(document, 'visibilitychange', this.toggleVisibility_)
}),
(t.toggleVisibility_ = function (e) {
'hidden' === document.visibilityState
? (this.cancelNamedAnimationFrame('SeekBar#update'), this.cancelNamedAnimationFrame('Slider#update'), this.disableInterval_(e))
: (this.player_.ended() || this.player_.paused() || this.enableInterval_(), this.update())
}),
(t.enableInterval_ = function () {
this.updateInterval || (this.updateInterval = this.setInterval(this.update, 30))
}),
(t.disableInterval_ = function (e) {
;(this.player_.liveTracker && this.player_.liveTracker.isLive() && e && 'ended' !== e.type) ||
(this.updateInterval && (this.clearInterval(this.updateInterval), (this.updateInterval = null)))
}),
(t.createEl = function () {
return a.prototype.createEl.call(this, 'div', { className: 'vjs-progress-holder' }, { 'aria-label': this.localize('Progress Bar') })
}),
(t.update = function (e) {
var n = this
if ('hidden' !== document.visibilityState) {
var r = a.prototype.update.call(this)
return (
this.requestNamedAnimationFrame('SeekBar#update', function () {
var e = n.player_.ended() ? n.player_.duration() : n.getCurrentTime_(),
t = n.player_.liveTracker,
i = n.player_.duration()
t && t.isLive() && (i = n.player_.liveTracker.liveCurrentTime()),
n.percent_ !== r && (n.el_.setAttribute('aria-valuenow', (100 * r).toFixed(2)), (n.percent_ = r)),
(n.currentTime_ === e && n.duration_ === i) ||
(n.el_.setAttribute('aria-valuetext', n.localize('progress bar timing: currentTime={1} duration={2}', [ln(e, i), ln(i, i)], '{1} of {2}')),
(n.currentTime_ = e),
(n.duration_ = i)),
n.bar && n.bar.update(de(n.el()), n.getProgress())
}),
r
)
}
}),
(t.userSeek_ = function (e) {
this.player_.liveTracker && this.player_.liveTracker.isLive() && this.player_.liveTracker.nextSeekedFromUser(), this.player_.currentTime(e)
}),
(t.getCurrentTime_ = function () {
return this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime()
}),
(t.getPercent = function () {
var e,
t = this.getCurrentTime_(),
i = this.player_.liveTracker
return i && i.isLive() ? ((e = (t - i.seekableStart()) / i.liveWindow()), i.atLiveEdge() && (e = 1)) : (e = t / this.player_.duration()), e
}),
(t.handleMouseDown = function (e) {
_e(e) && (e.stopPropagation(), (this.videoWasPlaying = !this.player_.paused()), this.player_.pause(), a.prototype.handleMouseDown.call(this, e))
}),
(t.handleMouseMove = function (e, t) {
if ((void 0 === t && (t = !1), _e(e))) {
t || this.player_.scrubbing() || this.player_.scrubbing(!0)
var i = this.calculateDistance(e),
n = this.player_.liveTracker
if (n && n.isLive()) {
if (0.99 <= i) return void n.seekToLiveEdge()
var r,
t = n.seekableStart(),
e = n.liveCurrentTime()
if ((r = (r = e <= (r = t + i * n.liveWindow()) ? e : r) <= t ? t + 0.1 : r) === 1 / 0) return
} else (r = i * this.player_.duration()) === this.player_.duration() && (r -= 0.1)
this.userSeek_(r)
}
}),
(t.enable = function () {
a.prototype.enable.call(this)
var e = this.getChild('mouseTimeDisplay')
e && e.show()
}),
(t.disable = function () {
a.prototype.disable.call(this)
var e = this.getChild('mouseTimeDisplay')
e && e.hide()
}),
(t.handleMouseUp = function (e) {
a.prototype.handleMouseUp.call(this, e),
e && e.stopPropagation(),
this.player_.scrubbing(!1),
this.player_.trigger({ type: 'timeupdate', target: this, manuallyTriggered: !0 }),
this.videoWasPlaying ? Et(this.player_.play()) : this.update_()
}),
(t.stepForward = function () {
this.userSeek_(this.player_.currentTime() + 5)
}),
(t.stepBack = function () {
this.userSeek_(this.player_.currentTime() - 5)
}),
(t.handleAction = function (e) {
this.player_.paused() ? this.player_.play() : this.player_.pause()
}),
(t.handleKeyDown = function (e) {
var t,
i = this.player_.liveTracker
ht.isEventKey(e, 'Space') || ht.isEventKey(e, 'Enter')
? (e.preventDefault(), e.stopPropagation(), this.handleAction(e))
: ht.isEventKey(e, 'Home')
? (e.preventDefault(), e.stopPropagation(), this.userSeek_(0))
: ht.isEventKey(e, 'End')
? (e.preventDefault(), e.stopPropagation(), i && i.isLive() ? this.userSeek_(i.liveCurrentTime()) : this.userSeek_(this.player_.duration()))
: /^[0-9]$/.test(ht(e))
? (e.preventDefault(),
e.stopPropagation(),
(t = (10 * (ht.codes[ht(e)] - ht.codes[0])) / 100),
i && i.isLive() ? this.userSeek_(i.seekableStart() + i.liveWindow() * t) : this.userSeek_(this.player_.duration() * t))
: ht.isEventKey(e, 'PgDn')
? (e.preventDefault(), e.stopPropagation(), this.userSeek_(this.player_.currentTime() - 60))
: ht.isEventKey(e, 'PgUp')
? (e.preventDefault(), e.stopPropagation(), this.userSeek_(this.player_.currentTime() + 60))
: a.prototype.handleKeyDown.call(this, e)
}),
(t.dispose = function () {
this.disableInterval_(),
this.off(this.player_, ['ended', 'durationchange', 'timeupdate'], this.update),
this.player_.liveTracker && this.off(this.player_.liveTracker, 'liveedgechange', this.update),
this.off(this.player_, ['playing'], this.enableIntervalHandler_),
this.off(this.player_, ['ended', 'pause', 'waiting'], this.disableIntervalHandler_),
'hidden' in document && 'visibilityState' in document && this.off(document, 'visibilitychange', this.toggleVisibility_),
a.prototype.dispose.call(this)
}),
e
)
})(li)
;(Bt.prototype.options_ = { children: ['loadProgressBar', 'playProgressBar'], barName: 'playProgressBar' }),
q || A || Bt.prototype.options_.children.splice(1, 0, 'mouseTimeDisplay'),
pt.registerComponent('SeekBar', Bt)
Ft = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
(i.handleMouseMove = We(Ve(ft(i), i.handleMouseMove), 30)),
(i.throttledHandleMouseSeek = We(Ve(ft(i), i.handleMouseSeek), 30)),
(i.handleMouseUpHandler_ = function (e) {
return i.handleMouseUp(e)
}),
(i.handleMouseDownHandler_ = function (e) {
return i.handleMouseDown(e)
}),
i.enable(),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.createEl = function () {
return n.prototype.createEl.call(this, 'div', { className: 'vjs-progress-control vjs-control' })
}),
(t.handleMouseMove = function (e) {
var t,
i,
n,
r,
a = this.getChild('seekBar')
a &&
((t = a.getChild('playProgressBar')),
(i = a.getChild('mouseTimeDisplay')),
(t || i) && ((r = he((n = a.el()))), (e = pe(n, e).x), (e = cn(e, 0, 1)), i && i.update(r, e), t && t.update(r, a.getProgress())))
}),
(t.handleMouseSeek = function (e) {
var t = this.getChild('seekBar')
t && t.handleMouseMove(e)
}),
(t.enabled = function () {
return this.enabled_
}),
(t.disable = function () {
var e
this.children().forEach(function (e) {
return e.disable && e.disable()
}),
this.enabled() &&
(this.off(['mousedown', 'touchstart'], this.handleMouseDownHandler_),
this.off(this.el_, 'mousemove', this.handleMouseMove),
this.removeListenersAddedOnMousedownAndTouchstart(),
this.addClass('disabled'),
(this.enabled_ = !1),
this.player_.scrubbing() && ((e = this.getChild('seekBar')), this.player_.scrubbing(!1), e.videoWasPlaying && Et(this.player_.play())))
}),
(t.enable = function () {
this.children().forEach(function (e) {
return e.enable && e.enable()
}),
this.enabled() ||
(this.on(['mousedown', 'touchstart'], this.handleMouseDownHandler_), this.on(this.el_, 'mousemove', this.handleMouseMove), this.removeClass('disabled'), (this.enabled_ = !0))
}),
(t.removeListenersAddedOnMousedownAndTouchstart = function () {
var e = this.el_.ownerDocument
this.off(e, 'mousemove', this.throttledHandleMouseSeek),
this.off(e, 'touchmove', this.throttledHandleMouseSeek),
this.off(e, 'mouseup', this.handleMouseUpHandler_),
this.off(e, 'touchend', this.handleMouseUpHandler_)
}),
(t.handleMouseDown = function (e) {
var t = this.el_.ownerDocument,
i = this.getChild('seekBar')
i && i.handleMouseDown(e),
this.on(t, 'mousemove', this.throttledHandleMouseSeek),
this.on(t, 'touchmove', this.throttledHandleMouseSeek),
this.on(t, 'mouseup', this.handleMouseUpHandler_),
this.on(t, 'touchend', this.handleMouseUpHandler_)
}),
(t.handleMouseUp = function (e) {
var t = this.getChild('seekBar')
t && t.handleMouseUp(e), this.removeListenersAddedOnMousedownAndTouchstart()
}),
e
)
})(pt)
;(Ft.prototype.options_ = { children: ['seekBar'] }), pt.registerComponent('ProgressControl', Ft)
jt = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.on(e, ['enterpictureinpicture', 'leavepictureinpicture'], function (e) {
return i.handlePictureInPictureChange(e)
}),
i.on(e, ['disablepictureinpicturechanged', 'loadedmetadata'], function (e) {
return i.handlePictureInPictureEnabledChange(e)
}),
i.on(e, ['loadedmetadata', 'audioonlymodechange', 'audiopostermodechange'], function () {
'audio' === e.currentType().substring(0, 5) || e.audioPosterMode() || e.audioOnlyMode() ? (e.isInPictureInPicture() && e.exitPictureInPicture(), i.hide()) : i.show()
}),
i.disable(),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-picture-in-picture-control ' + n.prototype.buildCSSClass.call(this)
}),
(t.handlePictureInPictureEnabledChange = function () {
document.pictureInPictureEnabled && !1 === this.player_.disablePictureInPicture() ? this.enable() : this.disable()
}),
(t.handlePictureInPictureChange = function (e) {
this.player_.isInPictureInPicture() ? this.controlText('Exit Picture-in-Picture') : this.controlText('Picture-in-Picture'), this.handlePictureInPictureEnabledChange()
}),
(t.handleClick = function (e) {
this.player_.isInPictureInPicture() ? this.player_.exitPictureInPicture() : this.player_.requestPictureInPicture()
}),
e
)
})(sn)
;(jt.prototype.controlText_ = 'Picture-in-Picture'), pt.registerComponent('PictureInPictureToggle', jt)
j = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.on(e, 'fullscreenchange', function (e) {
return i.handleFullscreenChange(e)
}),
!1 === document[e.fsApi_.fullscreenEnabled] && i.disable(),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-fullscreen-control ' + n.prototype.buildCSSClass.call(this)
}),
(t.handleFullscreenChange = function (e) {
this.player_.isFullscreen() ? this.controlText('Non-Fullscreen') : this.controlText('Fullscreen')
}),
(t.handleClick = function (e) {
this.player_.isFullscreen() ? this.player_.exitFullscreen() : this.player_.requestFullscreen()
}),
e
)
})(sn)
;(j.prototype.controlText_ = 'Fullscreen'), pt.registerComponent('FullscreenToggle', j)
pt.registerComponent(
'VolumeLevel',
(function (t) {
function e() {
return t.apply(this, arguments) || this
}
return (
mt(e, t),
(e.prototype.createEl = function () {
var e = t.prototype.createEl.call(this, 'div', { className: 'vjs-volume-level' })
return e.appendChild(t.prototype.createEl.call(this, 'span', { className: 'vjs-control-text' })), e
}),
e
)
})(pt)
),
pt.registerComponent(
'VolumeLevelTooltip',
(function (i) {
function e(e, t) {
t = i.call(this, e, t) || this
return (t.update = We(Ve(ft(t), t.update), 30)), t
}
mt(e, i)
var t = e.prototype
return (
(t.createEl = function () {
return i.prototype.createEl.call(this, 'div', { className: 'vjs-volume-tooltip' }, { 'aria-hidden': 'true' })
}),
(t.update = function (e, t, i, n) {
if (!i) {
var r = de(this.el_),
a = de(this.player_.el()),
i = e.width * t
if (!a || !r) return
;(t = e.left - a.left + i), (a = e.width - i + (a.right - e.right)), (e = r.width / 2)
t < e ? (e += e - t) : a < e && (e = a), e < 0 ? (e = 0) : e > r.width && (e = r.width), (this.el_.style.right = '-' + e + 'px')
}
this.write(n + '%')
}),
(t.write = function (e) {
J(this.el_, e)
}),
(t.updateVolume = function (e, t, i, n, r) {
var a = this
this.requestNamedAnimationFrame('VolumeLevelTooltip#updateVolume', function () {
a.update(e, t, i, n.toFixed(0)), r && r()
})
}),
e
)
})(pt)
)
k = (function (i) {
function e(e, t) {
t = i.call(this, e, t) || this
return (t.update = We(Ve(ft(t), t.update), 30)), t
}
mt(e, i)
var t = e.prototype
return (
(t.createEl = function () {
return i.prototype.createEl.call(this, 'div', { className: 'vjs-mouse-display' })
}),
(t.update = function (e, t, i) {
var n = this,
r = 100 * t
this.getChild('volumeLevelTooltip').updateVolume(e, t, i, r, function () {
i ? (n.el_.style.bottom = e.height * t + 'px') : (n.el_.style.left = e.width * t + 'px')
})
}),
e
)
})(pt)
;(k.prototype.options_ = { children: ['volumeLevelTooltip'] }), pt.registerComponent('MouseVolumeLevelDisplay', k)
f = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.on('slideractive', function (e) {
return i.updateLastVolume_(e)
}),
i.on(e, 'volumechange', function (e) {
return i.updateARIAAttributes(e)
}),
e.ready(function () {
return i.updateARIAAttributes()
}),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.createEl = function () {
return n.prototype.createEl.call(this, 'div', { className: 'vjs-volume-bar vjs-slider-bar' }, { 'aria-label': this.localize('Volume Level'), 'aria-live': 'polite' })
}),
(t.handleMouseDown = function (e) {
_e(e) && n.prototype.handleMouseDown.call(this, e)
}),
(t.handleMouseMove = function (e) {
var t,
i,
n,
r = this.getChild('mouseVolumeLevelDisplay')
r && ((t = de((n = this.el()))), (i = this.vertical()), (n = pe(n, e)), (n = i ? n.y : n.x), (n = cn(n, 0, 1)), r.update(t, n, i)),
_e(e) && (this.checkMuted(), this.player_.volume(this.calculateDistance(e)))
}),
(t.checkMuted = function () {
this.player_.muted() && this.player_.muted(!1)
}),
(t.getPercent = function () {
return this.player_.muted() ? 0 : this.player_.volume()
}),
(t.stepForward = function () {
this.checkMuted(), this.player_.volume(this.player_.volume() + 0.1)
}),
(t.stepBack = function () {
this.checkMuted(), this.player_.volume(this.player_.volume() - 0.1)
}),
(t.updateARIAAttributes = function (e) {
var t = this.player_.muted() ? 0 : this.volumeAsPercentage_()
this.el_.setAttribute('aria-valuenow', t), this.el_.setAttribute('aria-valuetext', t + '%')
}),
(t.volumeAsPercentage_ = function () {
return Math.round(100 * this.player_.volume())
}),
(t.updateLastVolume_ = function () {
var e = this,
t = this.player_.volume()
this.one('sliderinactive', function () {
0 === e.player_.volume() && e.player_.lastVolume_(t)
})
}),
e
)
})(li)
;(f.prototype.options_ = { children: ['volumeLevel'], barName: 'volumeLevel' }),
q || A || f.prototype.options_.children.splice(0, 0, 'mouseVolumeLevelDisplay'),
(f.prototype.playerEvent = 'volumechange'),
pt.registerComponent('VolumeBar', f)
ui = (function (a) {
function e(e, t) {
var i, n, r
return (
((t = void 0 === t ? {} : t).vertical = t.vertical || !1),
('undefined' != typeof t.volumeBar && !S(t.volumeBar)) || ((t.volumeBar = t.volumeBar || {}), (t.volumeBar.vertical = t.vertical)),
(i = a.call(this, e, t) || this),
(n = ft(i)),
(r = e).tech_ && !r.tech_.featuresVolumeControl && n.addClass('vjs-hidden'),
n.on(r, 'loadstart', function () {
r.tech_.featuresVolumeControl ? n.removeClass('vjs-hidden') : n.addClass('vjs-hidden')
}),
(i.throttledHandleMouseMove = We(Ve(ft(i), i.handleMouseMove), 30)),
(i.handleMouseUpHandler_ = function (e) {
return i.handleMouseUp(e)
}),
i.on('mousedown', function (e) {
return i.handleMouseDown(e)
}),
i.on('touchstart', function (e) {
return i.handleMouseDown(e)
}),
i.on('mousemove', function (e) {
return i.handleMouseMove(e)
}),
i.on(i.volumeBar, ['focus', 'slideractive'], function () {
i.volumeBar.addClass('vjs-slider-active'), i.addClass('vjs-slider-active'), i.trigger('slideractive')
}),
i.on(i.volumeBar, ['blur', 'sliderinactive'], function () {
i.volumeBar.removeClass('vjs-slider-active'), i.removeClass('vjs-slider-active'), i.trigger('sliderinactive')
}),
i
)
}
mt(e, a)
var t = e.prototype
return (
(t.createEl = function () {
var e = 'vjs-volume-horizontal'
return this.options_.vertical && (e = 'vjs-volume-vertical'), a.prototype.createEl.call(this, 'div', { className: 'vjs-volume-control vjs-control ' + e })
}),
(t.handleMouseDown = function (e) {
var t = this.el_.ownerDocument
this.on(t, 'mousemove', this.throttledHandleMouseMove),
this.on(t, 'touchmove', this.throttledHandleMouseMove),
this.on(t, 'mouseup', this.handleMouseUpHandler_),
this.on(t, 'touchend', this.handleMouseUpHandler_)
}),
(t.handleMouseUp = function (e) {
var t = this.el_.ownerDocument
this.off(t, 'mousemove', this.throttledHandleMouseMove),
this.off(t, 'touchmove', this.throttledHandleMouseMove),
this.off(t, 'mouseup', this.handleMouseUpHandler_),
this.off(t, 'touchend', this.handleMouseUpHandler_)
}),
(t.handleMouseMove = function (e) {
this.volumeBar.handleMouseMove(e)
}),
e
)
})(pt)
;(ui.prototype.options_ = { children: ['volumeBar'] }), pt.registerComponent('VolumeControl', ui)
Xt = (function (a) {
function e(e, t) {
var i,
n,
r = a.call(this, e, t) || this
return (
(i = ft(r)),
(n = e).tech_ && !n.tech_.featuresMuteControl && i.addClass('vjs-hidden'),
i.on(n, 'loadstart', function () {
n.tech_.featuresMuteControl ? i.removeClass('vjs-hidden') : i.addClass('vjs-hidden')
}),
r.on(e, ['loadstart', 'volumechange'], function (e) {
return r.update(e)
}),
r
)
}
mt(e, a)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-mute-control ' + a.prototype.buildCSSClass.call(this)
}),
(t.handleClick = function (e) {
var t = this.player_.volume(),
i = this.player_.lastVolume_()
0 === t ? (this.player_.volume(i < 0.1 ? 0.1 : i), this.player_.muted(!1)) : this.player_.muted(!this.player_.muted())
}),
(t.update = function (e) {
this.updateIcon_(), this.updateControlText_()
}),
(t.updateIcon_ = function () {
var e = this.player_.volume(),
t = 3
q && this.player_.tech_ && this.player_.tech_.el_ && this.player_.muted(this.player_.tech_.el_.muted),
0 === e || this.player_.muted() ? (t = 0) : e < 0.33 ? (t = 1) : e < 0.67 && (t = 2)
for (var i = 0; i < 4; i++) ie(this.el_, 'vjs-vol-' + i)
te(this.el_, 'vjs-vol-' + t)
}),
(t.updateControlText_ = function () {
var e = this.player_.muted() || 0 === this.player_.volume() ? 'Unmute' : 'Mute'
this.controlText() !== e && this.controlText(e)
}),
e
)
})(sn)
;(Xt.prototype.controlText_ = 'Mute'), pt.registerComponent('MuteToggle', Xt)
I = (function (n) {
function e(e, t) {
var i
return (
'undefined' != typeof (t = void 0 === t ? {} : t).inline ? (t.inline = t.inline) : (t.inline = !0),
('undefined' != typeof t.volumeControl && !S(t.volumeControl)) || ((t.volumeControl = t.volumeControl || {}), (t.volumeControl.vertical = !t.inline)),
((i = n.call(this, e, t) || this).handleKeyPressHandler_ = function (e) {
return i.handleKeyPress(e)
}),
i.on(e, ['loadstart'], function (e) {
return i.volumePanelState_(e)
}),
i.on(i.muteToggle, 'keyup', function (e) {
return i.handleKeyPress(e)
}),
i.on(i.volumeControl, 'keyup', function (e) {
return i.handleVolumeControlKeyUp(e)
}),
i.on('keydown', function (e) {
return i.handleKeyPress(e)
}),
i.on('mouseover', function (e) {
return i.handleMouseOver(e)
}),
i.on('mouseout', function (e) {
return i.handleMouseOut(e)
}),
i.on(i.volumeControl, ['slideractive'], i.sliderActive_),
i.on(i.volumeControl, ['sliderinactive'], i.sliderInactive_),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.sliderActive_ = function () {
this.addClass('vjs-slider-active')
}),
(t.sliderInactive_ = function () {
this.removeClass('vjs-slider-active')
}),
(t.volumePanelState_ = function () {
this.volumeControl.hasClass('vjs-hidden') && this.muteToggle.hasClass('vjs-hidden') && this.addClass('vjs-hidden'),
this.volumeControl.hasClass('vjs-hidden') && !this.muteToggle.hasClass('vjs-hidden') && this.addClass('vjs-mute-toggle-only')
}),
(t.createEl = function () {
var e = 'vjs-volume-panel-horizontal'
return this.options_.inline || (e = 'vjs-volume-panel-vertical'), n.prototype.createEl.call(this, 'div', { className: 'vjs-volume-panel vjs-control ' + e })
}),
(t.dispose = function () {
this.handleMouseOut(), n.prototype.dispose.call(this)
}),
(t.handleVolumeControlKeyUp = function (e) {
ht.isEventKey(e, 'Esc') && this.muteToggle.focus()
}),
(t.handleMouseOver = function (e) {
this.addClass('vjs-hover'), Be(document, 'keyup', this.handleKeyPressHandler_)
}),
(t.handleMouseOut = function (e) {
this.removeClass('vjs-hover'), Fe(document, 'keyup', this.handleKeyPressHandler_)
}),
(t.handleKeyPress = function (e) {
ht.isEventKey(e, 'Esc') && this.handleMouseOut()
}),
e
)
})(pt)
;(I.prototype.options_ = { children: ['muteToggle', 'volumeControl'] }), pt.registerComponent('VolumePanel', I)
var hn = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
t && (i.menuButton_ = t.menuButton),
(i.focusedChild_ = -1),
i.on('keydown', function (e) {
return i.handleKeyDown(e)
}),
(i.boundHandleBlur_ = function (e) {
return i.handleBlur(e)
}),
(i.boundHandleTapClick_ = function (e) {
return i.handleTapClick(e)
}),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.addEventListenerForItem = function (e) {
e instanceof pt && (this.on(e, 'blur', this.boundHandleBlur_), this.on(e, ['tap', 'click'], this.boundHandleTapClick_))
}),
(t.removeEventListenerForItem = function (e) {
e instanceof pt && (this.off(e, 'blur', this.boundHandleBlur_), this.off(e, ['tap', 'click'], this.boundHandleTapClick_))
}),
(t.removeChild = function (e) {
'string' == typeof e && (e = this.getChild(e)), this.removeEventListenerForItem(e), n.prototype.removeChild.call(this, e)
}),
(t.addItem = function (e) {
e = this.addChild(e)
e && this.addEventListenerForItem(e)
}),
(t.createEl = function () {
var e = this.options_.contentElType || 'ul'
;(this.contentEl_ = $(e, { className: 'vjs-menu-content' })), this.contentEl_.setAttribute('role', 'menu')
e = n.prototype.createEl.call(this, 'div', { append: this.contentEl_, className: 'vjs-menu' })
return (
e.appendChild(this.contentEl_),
Be(e, 'click', function (e) {
e.preventDefault(), e.stopImmediatePropagation()
}),
e
)
}),
(t.dispose = function () {
;(this.contentEl_ = null), (this.boundHandleBlur_ = null), (this.boundHandleTapClick_ = null), n.prototype.dispose.call(this)
}),
(t.handleBlur = function (e) {
var t = e.relatedTarget || document.activeElement
this.children().some(function (e) {
return e.el() === t
}) ||
((e = this.menuButton_) && e.buttonPressed_ && t !== e.el().firstChild && e.unpressButton())
}),
(t.handleTapClick = function (t) {
var e
this.menuButton_ &&
(this.menuButton_.unpressButton(),
(e = this.children()),
!Array.isArray(e) ||
((e = e.filter(function (e) {
return e.el() === t.target
})[0]) &&
'CaptionSettingsMenuItem' !== e.name() &&
this.menuButton_.focus()))
}),
(t.handleKeyDown = function (e) {
ht.isEventKey(e, 'Left') || ht.isEventKey(e, 'Down')
? (e.preventDefault(), e.stopPropagation(), this.stepForward())
: (ht.isEventKey(e, 'Right') || ht.isEventKey(e, 'Up')) && (e.preventDefault(), e.stopPropagation(), this.stepBack())
}),
(t.stepForward = function () {
var e = 0
void 0 !== this.focusedChild_ && (e = this.focusedChild_ + 1), this.focus(e)
}),
(t.stepBack = function () {
var e = 0
void 0 !== this.focusedChild_ && (e = this.focusedChild_ - 1), this.focus(e)
}),
(t.focus = function (e) {
void 0 === e && (e = 0)
var t = this.children().slice()
t.length && t[0].hasClass('vjs-menu-title') && t.shift(), 0 < t.length && (e < 0 ? (e = 0) : e >= t.length && (e = t.length - 1), t[(this.focusedChild_ = e)].el_.focus())
}),
e
)
})(pt)
pt.registerComponent('Menu', hn)
Bt = (function (n) {
function e(e, t) {
var i
;((i = n.call(this, e, (t = void 0 === t ? {} : t)) || this).menuButton_ = new sn(e, t)), i.menuButton_.controlText(i.controlText_), i.menuButton_.el_.setAttribute('aria-haspopup', 'true')
t = sn.prototype.buildCSSClass()
;(i.menuButton_.el_.className = i.buildCSSClass() + ' ' + t), i.menuButton_.removeClass('vjs-control'), i.addChild(i.menuButton_), i.update(), (i.enabled_ = !0)
t = function (e) {
return i.handleClick(e)
}
return (
(i.handleMenuKeyUp_ = function (e) {
return i.handleMenuKeyUp(e)
}),
i.on(i.menuButton_, 'tap', t),
i.on(i.menuButton_, 'click', t),
i.on(i.menuButton_, 'keydown', function (e) {
return i.handleKeyDown(e)
}),
i.on(i.menuButton_, 'mouseenter', function () {
i.addClass('vjs-hover'), i.menu.show(), Be(document, 'keyup', i.handleMenuKeyUp_)
}),
i.on('mouseleave', function (e) {
return i.handleMouseLeave(e)
}),
i.on('keydown', function (e) {
return i.handleSubmenuKeyDown(e)
}),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.update = function () {
var e = this.createMenu()
this.menu && (this.menu.dispose(), this.removeChild(this.menu)),
(this.menu = e),
this.addChild(e),
(this.buttonPressed_ = !1),
this.menuButton_.el_.setAttribute('aria-expanded', 'false'),
this.items && this.items.length <= this.hideThreshold_
? (this.hide(), this.menu.contentEl_.removeAttribute('role'))
: (this.show(), this.menu.contentEl_.setAttribute('role', 'menu'))
}),
(t.createMenu = function () {
var e,
t = new hn(this.player_, { menuButton: this })
if (
((this.hideThreshold_ = 0),
this.options_.title && ((e = $('li', { className: 'vjs-menu-title', textContent: ut(this.options_.title), tabIndex: -1 })), (e = new pt(this.player_, { el: e })), t.addItem(e)),
(this.items = this.createItems()),
this.items)
)
for (var i = 0; i < this.items.length; i++) t.addItem(this.items[i])
return t
}),
(t.createItems = function () {}),
(t.createEl = function () {
return n.prototype.createEl.call(this, 'div', { className: this.buildWrapperCSSClass() }, {})
}),
(t.buildWrapperCSSClass = function () {
var e = 'vjs-menu-button'
return !0 === this.options_.inline ? (e += '-inline') : (e += '-popup'), 'vjs-menu-button ' + e + ' ' + sn.prototype.buildCSSClass() + ' ' + n.prototype.buildCSSClass.call(this)
}),
(t.buildCSSClass = function () {
var e = 'vjs-menu-button'
return !0 === this.options_.inline ? (e += '-inline') : (e += '-popup'), 'vjs-menu-button ' + e + ' ' + n.prototype.buildCSSClass.call(this)
}),
(t.controlText = function (e, t) {
return void 0 === t && (t = this.menuButton_.el()), this.menuButton_.controlText(e, t)
}),
(t.dispose = function () {
this.handleMouseLeave(), n.prototype.dispose.call(this)
}),
(t.handleClick = function (e) {
this.buttonPressed_ ? this.unpressButton() : this.pressButton()
}),
(t.handleMouseLeave = function (e) {
this.removeClass('vjs-hover'), Fe(document, 'keyup', this.handleMenuKeyUp_)
}),
(t.focus = function () {
this.menuButton_.focus()
}),
(t.blur = function () {
this.menuButton_.blur()
}),
(t.handleKeyDown = function (e) {
ht.isEventKey(e, 'Esc') || ht.isEventKey(e, 'Tab')
? (this.buttonPressed_ && this.unpressButton(), ht.isEventKey(e, 'Tab') || (e.preventDefault(), this.menuButton_.focus()))
: (ht.isEventKey(e, 'Up') || ht.isEventKey(e, 'Down')) && (this.buttonPressed_ || (e.preventDefault(), this.pressButton()))
}),
(t.handleMenuKeyUp = function (e) {
;(ht.isEventKey(e, 'Esc') || ht.isEventKey(e, 'Tab')) && this.removeClass('vjs-hover')
}),
(t.handleSubmenuKeyPress = function (e) {
this.handleSubmenuKeyDown(e)
}),
(t.handleSubmenuKeyDown = function (e) {
;(ht.isEventKey(e, 'Esc') || ht.isEventKey(e, 'Tab')) && (this.buttonPressed_ && this.unpressButton(), ht.isEventKey(e, 'Tab') || (e.preventDefault(), this.menuButton_.focus()))
}),
(t.pressButton = function () {
this.enabled_ && ((this.buttonPressed_ = !0), this.menu.show(), this.menu.lockShowing(), this.menuButton_.el_.setAttribute('aria-expanded', 'true'), (q && Y()) || this.menu.focus())
}),
(t.unpressButton = function () {
this.enabled_ && ((this.buttonPressed_ = !1), this.menu.unlockShowing(), this.menu.hide(), this.menuButton_.el_.setAttribute('aria-expanded', 'false'))
}),
(t.disable = function () {
this.unpressButton(), (this.enabled_ = !1), this.addClass('vjs-disabled'), this.menuButton_.disable()
}),
(t.enable = function () {
;(this.enabled_ = !0), this.removeClass('vjs-disabled'), this.menuButton_.enable()
}),
e
)
})(pt)
pt.registerComponent('MenuButton', Bt)
Ft = (function (r) {
function e(e, t) {
var i = t.tracks,
t = r.call(this, e, t) || this
if ((t.items.length <= 1 && t.hide(), !i)) return ft(t)
var n = Ve(ft(t), t.update)
return (
i.addEventListener('removetrack', n),
i.addEventListener('addtrack', n),
i.addEventListener('labelchange', n),
t.player_.on('ready', n),
t.player_.on('dispose', function () {
i.removeEventListener('removetrack', n), i.removeEventListener('addtrack', n), i.removeEventListener('labelchange', n)
}),
t
)
}
return mt(e, r), e
})(Bt)
pt.registerComponent('TrackButton', Ft)
var pn = ['Tab', 'Esc', 'Up', 'Down', 'Right', 'Left'],
jt = (function (n) {
function e(e, t) {
e = n.call(this, e, t) || this
return (
(e.selectable = t.selectable),
(e.isSelected_ = t.selected || !1),
(e.multiSelectable = t.multiSelectable),
e.selected(e.isSelected_),
e.selectable ? (e.multiSelectable ? e.el_.setAttribute('role', 'menuitemcheckbox') : e.el_.setAttribute('role', 'menuitemradio')) : e.el_.setAttribute('role', 'menuitem'),
e
)
}
mt(e, n)
var t = e.prototype
return (
(t.createEl = function (e, t, i) {
this.nonIconControl = !0
i = n.prototype.createEl.call(this, 'li', b({ className: 'vjs-menu-item', tabIndex: -1 }, t), i)
return i.replaceChild($('span', { className: 'vjs-menu-item-text', textContent: this.localize(this.options_.label) }), i.querySelector('.vjs-icon-placeholder')), i
}),
(t.handleKeyDown = function (t) {
pn.some(function (e) {
return ht.isEventKey(t, e)
}) || n.prototype.handleKeyDown.call(this, t)
}),
(t.handleClick = function (e) {
this.selected(!0)
}),
(t.selected = function (e) {
this.selectable &&
(e
? (this.addClass('vjs-selected'), this.el_.setAttribute('aria-checked', 'true'), this.controlText(', selected'), (this.isSelected_ = !0))
: (this.removeClass('vjs-selected'), this.el_.setAttribute('aria-checked', 'false'), this.controlText(''), (this.isSelected_ = !1)))
}),
e
)
})(C)
pt.registerComponent('MenuItem', jt)
var fn = (function (u) {
function e(e, t) {
var n,
i = t.track,
r = e.textTracks()
;(t.label = i.label || i.language || 'Unknown'),
(t.selected = 'showing' === i.mode),
((n = u.call(this, e, t) || this).track = i),
(n.kinds = (t.kinds || [t.kind || n.track.kind]).filter(Boolean))
function a() {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
n.handleTracksChange.apply(ft(n), t)
}
function s() {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
n.handleSelectedLanguageChange.apply(ft(n), t)
}
var o
return (
e.on(['loadstart', 'texttrackchange'], a),
r.addEventListener('change', a),
r.addEventListener('selectedlanguagechange', s),
n.on('dispose', function () {
e.off(['loadstart', 'texttrackchange'], a), r.removeEventListener('change', a), r.removeEventListener('selectedlanguagechange', s)
}),
void 0 === r.onchange &&
n.on(['tap', 'click'], function () {
if ('object' != typeof window.Event)
try {
o = new window.Event('change')
} catch (e) {}
o || (o = document.createEvent('Event')).initEvent('change', !0, !0), r.dispatchEvent(o)
}),
n.handleTracksChange(),
n
)
}
mt(e, u)
var t = e.prototype
return (
(t.handleClick = function (e) {
var t = this.track,
i = this.player_.textTracks()
if ((u.prototype.handleClick.call(this, e), i))
for (var n = 0; n < i.length; n++) {
var r = i[n]
;-1 !== this.kinds.indexOf(r.kind) && (r === t ? 'showing' !== r.mode && (r.mode = 'showing') : 'disabled' !== r.mode && (r.mode = 'disabled'))
}
}),
(t.handleTracksChange = function (e) {
var t = 'showing' === this.track.mode
t !== this.isSelected_ && this.selected(t)
}),
(t.handleSelectedLanguageChange = function (e) {
var t
'showing' === this.track.mode &&
(((t = this.player_.cache_.selectedLanguage) && t.enabled && t.language === this.track.language && t.kind !== this.track.kind) ||
(this.player_.cache_.selectedLanguage = { enabled: !0, language: this.track.language, kind: this.track.kind }))
}),
(t.dispose = function () {
;(this.track = null), u.prototype.dispose.call(this)
}),
e
)
})(jt)
pt.registerComponent('TextTrackMenuItem', fn)
var mn = (function (i) {
function e(e, t) {
return (
(t.track = { player: e, kind: t.kind, kinds: t.kinds, default: !1, mode: 'disabled' }),
t.kinds || (t.kinds = [t.kind]),
t.label ? (t.track.label = t.label) : (t.track.label = t.kinds.join(' and ') + ' off'),
(t.selectable = !0),
(t.multiSelectable = !1),
i.call(this, e, t) || this
)
}
mt(e, i)
var t = e.prototype
return (
(t.handleTracksChange = function (e) {
for (var t = this.player().textTracks(), i = !0, n = 0, r = t.length; n < r; n++) {
var a = t[n]
if (-1 < this.options_.kinds.indexOf(a.kind) && 'showing' === a.mode) {
i = !1
break
}
}
i !== this.isSelected_ && this.selected(i)
}),
(t.handleSelectedLanguageChange = function (e) {
for (var t = this.player().textTracks(), i = !0, n = 0, r = t.length; n < r; n++) {
var a = t[n]
if (-1 < ['captions', 'descriptions', 'subtitles'].indexOf(a.kind) && 'showing' === a.mode) {
i = !1
break
}
}
i && (this.player_.cache_.selectedLanguage = { enabled: !1 })
}),
e
)
})(fn)
pt.registerComponent('OffTextTrackMenuItem', mn)
j = (function (i) {
function e(e, t) {
return ((t = void 0 === t ? {} : t).tracks = e.textTracks()), i.call(this, e, t) || this
}
return (
mt(e, i),
(e.prototype.createItems = function (e, t) {
var i
void 0 === t && (t = fn),
this.label_ && (i = this.label_ + ' off'),
(e = void 0 === e ? [] : e).push(new mn(this.player_, { kinds: this.kinds_, kind: this.kind_, label: i })),
(this.hideThreshold_ += 1)
var n = this.player_.textTracks()
Array.isArray(this.kinds_) || (this.kinds_ = [this.kind_])
for (var r = 0; r < n.length; r++) {
var a,
s = n[r]
;-1 < this.kinds_.indexOf(s.kind) &&
((a = new t(this.player_, { track: s, kinds: this.kinds_, kind: this.kind_, selectable: !0, multiSelectable: !1 })).addClass('vjs-' + s.kind + '-menu-item'), e.push(a))
}
return e
}),
e
)
})(Ft)
pt.registerComponent('TextTrackButton', j)
var gn = (function (a) {
function e(e, t) {
var i = t.track,
n = t.cue,
r = e.currentTime()
return (t.selectable = !0), (t.multiSelectable = !1), (t.label = n.text), (t.selected = n.startTime <= r && r < n.endTime), ((t = a.call(this, e, t) || this).track = i), (t.cue = n), t
}
return (
mt(e, a),
(e.prototype.handleClick = function (e) {
a.prototype.handleClick.call(this), this.player_.currentTime(this.cue.startTime)
}),
e
)
})(jt)
pt.registerComponent('ChaptersTrackMenuItem', gn)
k = (function (r) {
function e(e, t, i) {
var n = r.call(this, e, t, i) || this
return (
(n.selectCurrentItem_ = function () {
n.items.forEach(function (e) {
e.selected(n.track_.activeCues[0] === e.cue)
})
}),
n
)
}
mt(e, r)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-chapters-button ' + r.prototype.buildCSSClass.call(this)
}),
(t.buildWrapperCSSClass = function () {
return 'vjs-chapters-button ' + r.prototype.buildWrapperCSSClass.call(this)
}),
(t.update = function (e) {
;(e && e.track && 'chapters' !== e.track.kind) ||
((e = this.findChaptersTrack()) !== this.track_
? (this.setTrack(e), r.prototype.update.call(this))
: (!this.items || (e && e.cues && e.cues.length !== this.items.length)) && r.prototype.update.call(this))
}),
(t.setTrack = function (e) {
var t
this.track_ !== e &&
(this.updateHandler_ || (this.updateHandler_ = this.update.bind(this)),
this.track_ &&
((t = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_)) && t.removeEventListener('load', this.updateHandler_),
this.track_.removeEventListener('cuechange', this.selectCurrentItem_),
(this.track_ = null)),
(this.track_ = e),
this.track_ &&
((this.track_.mode = 'hidden'),
(e = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_)) && e.addEventListener('load', this.updateHandler_),
this.track_.addEventListener('cuechange', this.selectCurrentItem_)))
}),
(t.findChaptersTrack = function () {
for (var e = this.player_.textTracks() || [], t = e.length - 1; 0 <= t; t--) {
var i = e[t]
if (i.kind === this.kind_) return i
}
}),
(t.getMenuCaption = function () {
return this.track_ && this.track_.label ? this.track_.label : this.localize(ut(this.kind_))
}),
(t.createMenu = function () {
return (this.options_.title = this.getMenuCaption()), r.prototype.createMenu.call(this)
}),
(t.createItems = function () {
var e = []
if (!this.track_) return e
var t = this.track_.cues
if (!t) return e
for (var i = 0, n = t.length; i < n; i++) {
var r = t[i],
r = new gn(this.player_, { track: this.track_, cue: r })
e.push(r)
}
return e
}),
e
)
})(j)
;(k.prototype.kind_ = 'chapters'), (k.prototype.controlText_ = 'Chapters'), pt.registerComponent('ChaptersButton', k)
li = (function (a) {
function e(e, t, i) {
var i = a.call(this, e, t, i) || this,
n = e.textTracks(),
r = Ve(ft(i), i.handleTracksChange)
return (
n.addEventListener('change', r),
i.on('dispose', function () {
n.removeEventListener('change', r)
}),
i
)
}
mt(e, a)
var t = e.prototype
return (
(t.handleTracksChange = function (e) {
for (var t = this.player().textTracks(), i = !1, n = 0, r = t.length; n < r; n++) {
var a = t[n]
if (a.kind !== this.kind_ && 'showing' === a.mode) {
i = !0
break
}
}
i ? this.disable() : this.enable()
}),
(t.buildCSSClass = function () {
return 'vjs-descriptions-button ' + a.prototype.buildCSSClass.call(this)
}),
(t.buildWrapperCSSClass = function () {
return 'vjs-descriptions-button ' + a.prototype.buildWrapperCSSClass.call(this)
}),
e
)
})(j)
;(li.prototype.kind_ = 'descriptions'), (li.prototype.controlText_ = 'Descriptions'), pt.registerComponent('DescriptionsButton', li)
f = (function (n) {
function e(e, t, i) {
return n.call(this, e, t, i) || this
}
mt(e, n)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-subtitles-button ' + n.prototype.buildCSSClass.call(this)
}),
(t.buildWrapperCSSClass = function () {
return 'vjs-subtitles-button ' + n.prototype.buildWrapperCSSClass.call(this)
}),
e
)
})(j)
;(f.prototype.kind_ = 'subtitles'), (f.prototype.controlText_ = 'Subtitles'), pt.registerComponent('SubtitlesButton', f)
var yn = (function (i) {
function e(e, t) {
return (
(t.track = { player: e, kind: t.kind, label: t.kind + ' settings', selectable: !1, default: !1, mode: 'disabled' }),
(t.selectable = !1),
(t.name = 'CaptionSettingsMenuItem'),
(e = i.call(this, e, t) || this).addClass('vjs-texttrack-settings'),
e.controlText(', opens ' + t.kind + ' settings dialog'),
e
)
}
return (
mt(e, i),
(e.prototype.handleClick = function (e) {
this.player().getChild('textTrackSettings').open()
}),
e
)
})(fn)
pt.registerComponent('CaptionSettingsMenuItem', yn)
ui = (function (n) {
function e(e, t, i) {
return n.call(this, e, t, i) || this
}
mt(e, n)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-captions-button ' + n.prototype.buildCSSClass.call(this)
}),
(t.buildWrapperCSSClass = function () {
return 'vjs-captions-button ' + n.prototype.buildWrapperCSSClass.call(this)
}),
(t.createItems = function () {
var e = []
return (
(this.player().tech_ && this.player().tech_.featuresNativeTextTracks) ||
!this.player().getChild('textTrackSettings') ||
(e.push(new yn(this.player_, { kind: this.kind_ })), (this.hideThreshold_ += 1)),
n.prototype.createItems.call(this, e)
)
}),
e
)
})(j)
;(ui.prototype.kind_ = 'captions'), (ui.prototype.controlText_ = 'Captions'), pt.registerComponent('CaptionsButton', ui)
var vn = (function (n) {
function e() {
return n.apply(this, arguments) || this
}
return (
mt(e, n),
(e.prototype.createEl = function (e, t, i) {
;(t = n.prototype.createEl.call(this, e, t, i)), (i = t.querySelector('.vjs-menu-item-text'))
return (
'captions' === this.options_.track.kind &&
(i.appendChild($('span', { className: 'vjs-icon-placeholder' }, { 'aria-hidden': !0 })),
i.appendChild($('span', { className: 'vjs-control-text', textContent: ' ' + this.localize('Captions') }))),
t
)
}),
e
)
})(fn)
pt.registerComponent('SubsCapsMenuItem', vn)
Xt = (function (i) {
function e(e, t) {
return (
((t = i.call(this, e, (t = void 0 === t ? {} : t)) || this).label_ = 'subtitles'),
-1 < ['en', 'en-us', 'en-ca', 'fr-ca'].indexOf(t.player_.language_) && (t.label_ = 'captions'),
t.menuButton_.controlText(ut(t.label_)),
t
)
}
mt(e, i)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-subs-caps-button ' + i.prototype.buildCSSClass.call(this)
}),
(t.buildWrapperCSSClass = function () {
return 'vjs-subs-caps-button ' + i.prototype.buildWrapperCSSClass.call(this)
}),
(t.createItems = function () {
var e = []
return (
(this.player().tech_ && this.player().tech_.featuresNativeTextTracks) ||
!this.player().getChild('textTrackSettings') ||
(e.push(new yn(this.player_, { kind: this.label_ })), (this.hideThreshold_ += 1)),
(e = i.prototype.createItems.call(this, e, vn))
)
}),
e
)
})(j)
;(Xt.prototype.kinds_ = ['captions', 'subtitles']), (Xt.prototype.controlText_ = 'Subtitles'), pt.registerComponent('SubsCapsButton', Xt)
var _n = (function (s) {
function e(e, t) {
var n,
i = t.track,
r = e.audioTracks()
;(t.label = i.label || i.language || 'Unknown'), (t.selected = i.enabled), ((n = s.call(this, e, t) || this).track = i), n.addClass('vjs-' + i.kind + '-menu-item')
function a() {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
n.handleTracksChange.apply(ft(n), t)
}
return (
r.addEventListener('change', a),
n.on('dispose', function () {
r.removeEventListener('change', a)
}),
n
)
}
mt(e, s)
var t = e.prototype
return (
(t.createEl = function (e, t, i) {
;(t = s.prototype.createEl.call(this, e, t, i)), (i = t.querySelector('.vjs-menu-item-text'))
return (
'main-desc' === this.options_.track.kind &&
(i.appendChild($('span', { className: 'vjs-icon-placeholder' }, { 'aria-hidden': !0 })),
i.appendChild($('span', { className: 'vjs-control-text', textContent: ' ' + this.localize('Descriptions') }))),
t
)
}),
(t.handleClick = function (e) {
if ((s.prototype.handleClick.call(this, e), (this.track.enabled = !0), this.player_.tech_.featuresNativeAudioTracks))
for (var t = this.player_.audioTracks(), i = 0; i < t.length; i++) {
var n = t[i]
n !== this.track && (n.enabled = n === this.track)
}
}),
(t.handleTracksChange = function (e) {
this.selected(this.track.enabled)
}),
e
)
})(jt)
pt.registerComponent('AudioTrackMenuItem', _n)
I = (function (i) {
function e(e, t) {
return ((t = void 0 === t ? {} : t).tracks = e.audioTracks()), i.call(this, e, t) || this
}
mt(e, i)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-audio-button ' + i.prototype.buildCSSClass.call(this)
}),
(t.buildWrapperCSSClass = function () {
return 'vjs-audio-button ' + i.prototype.buildWrapperCSSClass.call(this)
}),
(t.createItems = function (e) {
void 0 === e && (e = []), (this.hideThreshold_ = 1)
for (var t = this.player_.audioTracks(), i = 0; i < t.length; i++) {
var n = t[i]
e.push(new _n(this.player_, { track: n, selectable: !0, multiSelectable: !1 }))
}
return e
}),
e
)
})(Ft)
;(I.prototype.controlText_ = 'Audio Track'), pt.registerComponent('AudioTrackButton', I)
var bn = (function (a) {
function e(e, t) {
var i,
n = t.rate,
r = parseFloat(n, 10)
return (
(t.label = n),
(t.selected = r === e.playbackRate()),
(t.selectable = !0),
(t.multiSelectable = !1),
((i = a.call(this, e, t) || this).label = n),
(i.rate = r),
i.on(e, 'ratechange', function (e) {
return i.update(e)
}),
i
)
}
mt(e, a)
var t = e.prototype
return (
(t.handleClick = function (e) {
a.prototype.handleClick.call(this), this.player().playbackRate(this.rate)
}),
(t.update = function (e) {
this.selected(this.player().playbackRate() === this.rate)
}),
e
)
})(jt)
;(bn.prototype.contentElType = 'button'), pt.registerComponent('PlaybackRateMenuItem', bn)
C = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.menuButton_.el_.setAttribute('aria-describedby', i.labelElId_),
i.updateVisibility(),
i.updateLabel(),
i.on(e, 'loadstart', function (e) {
return i.updateVisibility(e)
}),
i.on(e, 'ratechange', function (e) {
return i.updateLabel(e)
}),
i.on(e, 'playbackrateschange', function (e) {
return i.handlePlaybackRateschange(e)
}),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.createEl = function () {
var e = n.prototype.createEl.call(this)
return (
(this.labelElId_ = 'vjs-playback-rate-value-label-' + this.id_),
(this.labelEl_ = $('div', { className: 'vjs-playback-rate-value', id: this.labelElId_, textContent: '1x' })),
e.appendChild(this.labelEl_),
e
)
}),
(t.dispose = function () {
;(this.labelEl_ = null), n.prototype.dispose.call(this)
}),
(t.buildCSSClass = function () {
return 'vjs-playback-rate ' + n.prototype.buildCSSClass.call(this)
}),
(t.buildWrapperCSSClass = function () {
return 'vjs-playback-rate ' + n.prototype.buildWrapperCSSClass.call(this)
}),
(t.createItems = function () {
for (var e = this.playbackRates(), t = [], i = e.length - 1; 0 <= i; i--) t.push(new bn(this.player(), { rate: e[i] + 'x' }))
return t
}),
(t.updateARIAAttributes = function () {
this.el().setAttribute('aria-valuenow', this.player().playbackRate())
}),
(t.handleClick = function (e) {
var t = this.player().playbackRate(),
i = this.playbackRates(),
t = (i.indexOf(t) + 1) % i.length
this.player().playbackRate(i[t])
}),
(t.handlePlaybackRateschange = function (e) {
this.update()
}),
(t.playbackRates = function () {
var e = this.player()
return (e.playbackRates && e.playbackRates()) || []
}),
(t.playbackRateSupported = function () {
return this.player().tech_ && this.player().tech_.featuresPlaybackRate && this.playbackRates() && 0 < this.playbackRates().length
}),
(t.updateVisibility = function (e) {
this.playbackRateSupported() ? this.removeClass('vjs-hidden') : this.addClass('vjs-hidden')
}),
(t.updateLabel = function (e) {
this.playbackRateSupported() && (this.labelEl_.textContent = this.player().playbackRate() + 'x')
}),
e
)
})(Bt)
;(C.prototype.controlText_ = 'Playback Rate'), pt.registerComponent('PlaybackRateMenuButton', C)
k = (function (n) {
function e() {
return n.apply(this, arguments) || this
}
mt(e, n)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-spacer ' + n.prototype.buildCSSClass.call(this)
}),
(t.createEl = function (e, t, i) {
return void 0 === e && (e = 'div'), void 0 === i && (i = {}), (t = void 0 === t ? {} : t).className || (t.className = this.buildCSSClass()), n.prototype.createEl.call(this, e, t, i)
}),
e
)
})(pt)
pt.registerComponent('Spacer', k),
pt.registerComponent(
'CustomControlSpacer',
(function (e) {
function t() {
return e.apply(this, arguments) || this
}
mt(t, e)
var i = t.prototype
return (
(i.buildCSSClass = function () {
return 'vjs-custom-control-spacer ' + e.prototype.buildCSSClass.call(this)
}),
(i.createEl = function () {
return e.prototype.createEl.call(this, 'div', { className: this.buildCSSClass(), textContent: ' ' })
}),
t
)
})(k)
)
li = (function (e) {
function t() {
return e.apply(this, arguments) || this
}
return (
mt(t, e),
(t.prototype.createEl = function () {
return e.prototype.createEl.call(this, 'div', { className: 'vjs-control-bar', dir: 'ltr' })
}),
t
)
})(pt)
;(li.prototype.options_ = {
children: [
'playToggle',
'volumePanel',
'currentTimeDisplay',
'timeDivider',
'durationDisplay',
'progressControl',
'liveDisplay',
'seekToLive',
'remainingTimeDisplay',
'customControlSpacer',
'playbackRateMenuButton',
'chaptersButton',
'descriptionsButton',
'subsCapsButton',
'audioTrackButton',
'fullscreenToggle',
],
}),
'exitPictureInPicture' in document && li.prototype.options_.children.splice(li.prototype.options_.children.length - 1, 0, 'pictureInPictureToggle'),
pt.registerComponent('ControlBar', li)
f = (function (n) {
function e(e, t) {
var i = n.call(this, e, t) || this
return (
i.on(e, 'error', function (e) {
return i.open(e)
}),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.buildCSSClass = function () {
return 'vjs-error-display ' + n.prototype.buildCSSClass.call(this)
}),
(t.content = function () {
var e = this.player().error()
return e ? this.localize(e.message) : ''
}),
e
)
})(At)
;(f.prototype.options_ = g({}, At.prototype.options_, { pauseOnOpen: !1, fillAlways: !0, temporary: !1, uncloseable: !0 })), pt.registerComponent('ErrorDisplay', f)
var Tn = 'vjs-text-track-settings',
ui = ['#000', 'Black'],
j = ['#00F', 'Blue'],
Xt = ['#0FF', 'Cyan'],
Ft = ['#0F0', 'Green'],
I = ['#F0F', 'Magenta'],
jt = ['#F00', 'Red'],
Bt = ['#FFF', 'White'],
C = ['#FF0', 'Yellow'],
k = ['1', 'Opaque'],
li = ['0.5', 'Semi-Transparent'],
f = ['0', 'Transparent'],
Sn = {
backgroundColor: { selector: '.vjs-bg-color > select', id: 'captions-background-color-%s', label: 'Color', options: [ui, Bt, jt, Ft, j, C, I, Xt] },
backgroundOpacity: { selector: '.vjs-bg-opacity > select', id: 'captions-background-opacity-%s', label: 'Transparency', options: [k, li, f] },
color: { selector: '.vjs-fg-color > select', id: 'captions-foreground-color-%s', label: 'Color', options: [Bt, ui, jt, Ft, j, C, I, Xt] },
edgeStyle: {
selector: '.vjs-edge-style > select',
id: '%s',
label: 'Text Edge Style',
options: [
['none', 'None'],
['raised', 'Raised'],
['depressed', 'Depressed'],
['uniform', 'Uniform'],
['dropshadow', 'Dropshadow'],
],
},
fontFamily: {
selector: '.vjs-font-family > select',
id: 'captions-font-family-%s',
label: 'Font Family',
options: [
['proportionalSansSerif', 'Proportional Sans-Serif'],
['monospaceSansSerif', 'Monospace Sans-Serif'],
['proportionalSerif', 'Proportional Serif'],
['monospaceSerif', 'Monospace Serif'],
['casual', 'Casual'],
['script', 'Script'],
['small-caps', 'Small Caps'],
],
},
fontPercent: {
selector: '.vjs-font-percent > select',
id: 'captions-font-size-%s',
label: 'Font Size',
options: [
['0.50', '50%'],
['0.75', '75%'],
['1.00', '100%'],
['1.25', '125%'],
['1.50', '150%'],
['1.75', '175%'],
['2.00', '200%'],
['3.00', '300%'],
['4.00', '400%'],
],
default: 2,
parser: function (e) {
return '1.00' === e ? null : Number(e)
},
},
textOpacity: { selector: '.vjs-text-opacity > select', id: 'captions-foreground-opacity-%s', label: 'Transparency', options: [k, li] },
windowColor: { selector: '.vjs-window-color > select', id: 'captions-window-color-%s', label: 'Color' },
windowOpacity: { selector: '.vjs-window-opacity > select', id: 'captions-window-opacity-%s', label: 'Transparency', options: [f, li, k] },
}
function wn(e, t) {
if ((e = t ? t(e) : e) && 'none' !== e) return e
}
;(Sn.windowColor.options = Sn.backgroundColor.options),
pt.registerComponent(
'TextTrackSettings',
(function (n) {
function e(e, t) {
var i
return (
(t.temporary = !1),
((i = n.call(this, e, t) || this).updateDisplay = i.updateDisplay.bind(ft(i))),
i.fill(),
(i.hasBeenOpened_ = i.hasBeenFilled_ = !0),
(i.endDialog = $('p', { className: 'vjs-control-text', textContent: i.localize('End of dialog window.') })),
i.el().appendChild(i.endDialog),
i.setDefaults(),
void 0 === t.persistTextTrackSettings && (i.options_.persistTextTrackSettings = i.options_.playerOptions.persistTextTrackSettings),
i.on(i.$('.vjs-done-button'), 'click', function () {
i.saveSettings(), i.close()
}),
i.on(i.$('.vjs-default-button'), 'click', function () {
i.setDefaults(), i.updateDisplay()
}),
_(Sn, function (e) {
i.on(i.$(e.selector), 'change', i.updateDisplay)
}),
i.options_.persistTextTrackSettings && i.restoreSettings(),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.dispose = function () {
;(this.endDialog = null), n.prototype.dispose.call(this)
}),
(t.createElSelect_ = function (e, t, i) {
var n = this
void 0 === t && (t = ''), void 0 === i && (i = 'label')
var e = Sn[e],
r = e.id.replace('%s', this.id_),
a = [t, r].join(' ').trim()
return ['<' + i + ' id="' + r + '" class="' + ('label' === i ? 'vjs-label' : '') + '">', this.localize(e.label), '' + i + '>', '')
.join('')
}),
(t.createElFgColor_ = function () {
var e = 'captions-text-legend-' + this.id_
return [
'',
].join('')
}),
(t.createElBgColor_ = function () {
var e = 'captions-background-' + this.id_
return [
'',
].join('')
}),
(t.createElWinColor_ = function () {
var e = 'captions-window-' + this.id_
return [
'',
].join('')
}),
(t.createElColors_ = function () {
return $('div', { className: 'vjs-track-settings-colors', innerHTML: [this.createElFgColor_(), this.createElBgColor_(), this.createElWinColor_()].join('') })
}),
(t.createElFont_ = function () {
return $('div', {
className: 'vjs-track-settings-font',
innerHTML: [
'',
'',
'',
].join(''),
})
}),
(t.createElControls_ = function () {
var e = this.localize('restore all settings to the default values')
return $('div', {
className: 'vjs-track-settings-controls',
innerHTML: [
'',
'',
].join(''),
})
}),
(t.content = function () {
return [this.createElColors_(), this.createElFont_(), this.createElControls_()]
}),
(t.label = function () {
return this.localize('Caption Settings Dialog')
}),
(t.description = function () {
return this.localize('Beginning of dialog window. Escape will cancel and close the window.')
}),
(t.buildCSSClass = function () {
return n.prototype.buildCSSClass.call(this) + ' vjs-text-track-settings'
}),
(t.getValues = function () {
var i,
n,
e,
r = this
return (
(n = function (e, t, i) {
var n,
t = ((n = r.$(t.selector)), (t = t.parser), wn(n.options[n.options.selectedIndex].value, t))
return void 0 !== t && (e[i] = t), e
}),
void 0 === (e = {}) && (e = 0),
v((i = Sn)).reduce(function (e, t) {
return n(e, i[t], t)
}, e)
)
}),
(t.setValues = function (i) {
var n = this
_(Sn, function (e, t) {
!(function (e, t, i) {
if (t)
for (var n = 0; n < e.options.length; n++)
if (wn(e.options[n].value, i) === t) {
e.selectedIndex = n
break
}
})(n.$(e.selector), i[t], e.parser)
})
}),
(t.setDefaults = function () {
var i = this
_(Sn, function (e) {
var t = e.hasOwnProperty('default') ? e.default : 0
i.$(e.selector).selectedIndex = t
})
}),
(t.restoreSettings = function () {
var e
try {
e = JSON.parse(window.localStorage.getItem(Tn))
} catch (e) {
h.warn(e)
}
e && this.setValues(e)
}),
(t.saveSettings = function () {
if (this.options_.persistTextTrackSettings) {
var e = this.getValues()
try {
Object.keys(e).length ? window.localStorage.setItem(Tn, JSON.stringify(e)) : window.localStorage.removeItem(Tn)
} catch (e) {
h.warn(e)
}
}
}),
(t.updateDisplay = function () {
var e = this.player_.getChild('textTrackDisplay')
e && e.updateDisplay()
}),
(t.conditionalBlur_ = function () {
this.previouslyActiveEl_ = null
var e = this.player_.controlBar,
t = e && e.subsCapsButton,
e = e && e.captionsButton
t ? t.focus() : e && e.focus()
}),
e
)
})(At)
),
pt.registerComponent(
'ResizeManager',
(function (a) {
function e(e, t) {
var i,
n = t.ResizeObserver || window.ResizeObserver,
r = lt({ createEl: !(n = null === t.ResizeObserver ? !1 : n), reportTouchActivity: !1 }, t)
return (
((i = a.call(this, e, r) || this).ResizeObserver = t.ResizeObserver || window.ResizeObserver),
(i.loadListener_ = null),
(i.resizeObserver_ = null),
(i.debouncedHandler_ = Ge(
function () {
i.resizeHandler()
},
100,
!1,
ft(i)
)),
n
? ((i.resizeObserver_ = new i.ResizeObserver(i.debouncedHandler_)), i.resizeObserver_.observe(e.el()))
: ((i.loadListener_ = function () {
var e, t
i.el_ &&
i.el_.contentWindow &&
((e = i.debouncedHandler_),
(t = i.unloadListener_ =
function () {
Fe(this, 'resize', e), Fe(this, 'unload', t), (t = null)
}),
Be(i.el_.contentWindow, 'unload', t),
Be(i.el_.contentWindow, 'resize', e))
}),
i.one('load', i.loadListener_)),
i
)
}
mt(e, a)
var t = e.prototype
return (
(t.createEl = function () {
return a.prototype.createEl.call(this, 'iframe', { className: 'vjs-resize-manager', tabIndex: -1, title: this.localize('No content') }, { 'aria-hidden': 'true' })
}),
(t.resizeHandler = function () {
this.player_ && this.player_.trigger && this.player_.trigger('playerresize')
}),
(t.dispose = function () {
this.debouncedHandler_ && this.debouncedHandler_.cancel(),
this.resizeObserver_ && (this.player_.el() && this.resizeObserver_.unobserve(this.player_.el()), this.resizeObserver_.disconnect()),
this.loadListener_ && this.off('load', this.loadListener_),
this.el_ && this.el_.contentWindow && this.unloadListener_ && this.unloadListener_.call(this.el_.contentWindow),
(this.ResizeObserver = null),
(this.resizeObserver = null),
(this.debouncedHandler_ = null),
(this.loadListener_ = null),
a.prototype.dispose.call(this)
}),
e
)
})(pt)
)
var En = { trackingThreshold: 20, liveTolerance: 15 }
pt.registerComponent(
'LiveTracker',
(function (n) {
function e(e, t) {
var t = lt(En, t, { createEl: !1 }),
i = n.call(this, e, t) || this
return (
(i.handleVisibilityChange_ = function (e) {
return i.handleVisibilityChange(e)
}),
(i.trackLiveHandler_ = function () {
return i.trackLive_()
}),
(i.handlePlay_ = function (e) {
return i.handlePlay(e)
}),
(i.handleFirstTimeupdate_ = function (e) {
return i.handleFirstTimeupdate(e)
}),
(i.handleSeeked_ = function (e) {
return i.handleSeeked(e)
}),
(i.seekToLiveEdge_ = function (e) {
return i.seekToLiveEdge(e)
}),
i.reset_(),
i.on(i.player_, 'durationchange', function (e) {
return i.handleDurationchange(e)
}),
i.on(i.player_, 'canplay', function () {
return i.toggleTracking()
}),
N && 'hidden' in document && 'visibilityState' in document && i.on(document, 'visibilitychange', i.handleVisibilityChange_),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.handleVisibilityChange = function () {
this.player_.duration() === 1 / 0 && (document.hidden ? this.stopTracking() : this.startTracking())
}),
(t.trackLive_ = function () {
var e,
t = this.player_.seekable()
t &&
t.length &&
((e = Number(window.performance.now().toFixed(4))),
(t = -1 === this.lastTime_ ? 0 : (e - this.lastTime_) / 1e3),
(this.lastTime_ = e),
(this.pastSeekEnd_ = this.pastSeekEnd() + t),
(e = this.liveCurrentTime()),
(t = this.player_.currentTime()),
(t = this.player_.paused() || this.seekedBehindLive_ || Math.abs(e - t) > this.options_.liveTolerance),
(t = !this.timeupdateSeen_ || e === 1 / 0 ? !1 : t) !== this.behindLiveEdge_ && ((this.behindLiveEdge_ = t), this.trigger('liveedgechange')))
}),
(t.handleDurationchange = function () {
this.toggleTracking()
}),
(t.toggleTracking = function () {
this.player_.duration() === 1 / 0 && this.liveWindow() >= this.options_.trackingThreshold
? (this.player_.options_.liveui && this.player_.addClass('vjs-liveui'), this.startTracking())
: (this.player_.removeClass('vjs-liveui'), this.stopTracking())
}),
(t.startTracking = function () {
this.isTracking() ||
(this.timeupdateSeen_ || (this.timeupdateSeen_ = this.player_.hasStarted()),
(this.trackingInterval_ = this.setInterval(this.trackLiveHandler_, 30)),
this.trackLive_(),
this.on(this.player_, ['play', 'pause'], this.trackLiveHandler_),
this.timeupdateSeen_
? this.on(this.player_, 'seeked', this.handleSeeked_)
: (this.one(this.player_, 'play', this.handlePlay_), this.one(this.player_, 'timeupdate', this.handleFirstTimeupdate_)))
}),
(t.handleFirstTimeupdate = function () {
;(this.timeupdateSeen_ = !0), this.on(this.player_, 'seeked', this.handleSeeked_)
}),
(t.handleSeeked = function () {
var e = Math.abs(this.liveCurrentTime() - this.player_.currentTime())
;(this.seekedBehindLive_ = this.nextSeekedFromUser_ && 2 < e), (this.nextSeekedFromUser_ = !1), this.trackLive_()
}),
(t.handlePlay = function () {
this.one(this.player_, 'timeupdate', this.seekToLiveEdge_)
}),
(t.reset_ = function () {
;(this.lastTime_ = -1),
(this.pastSeekEnd_ = 0),
(this.lastSeekEnd_ = -1),
(this.behindLiveEdge_ = !0),
(this.timeupdateSeen_ = !1),
(this.seekedBehindLive_ = !1),
(this.nextSeekedFromUser_ = !1),
this.clearInterval(this.trackingInterval_),
(this.trackingInterval_ = null),
this.off(this.player_, ['play', 'pause'], this.trackLiveHandler_),
this.off(this.player_, 'seeked', this.handleSeeked_),
this.off(this.player_, 'play', this.handlePlay_),
this.off(this.player_, 'timeupdate', this.handleFirstTimeupdate_),
this.off(this.player_, 'timeupdate', this.seekToLiveEdge_)
}),
(t.nextSeekedFromUser = function () {
this.nextSeekedFromUser_ = !0
}),
(t.stopTracking = function () {
this.isTracking() && (this.reset_(), this.trigger('liveedgechange'))
}),
(t.seekableEnd = function () {
for (var e = this.player_.seekable(), t = [], i = e ? e.length : 0; i--; ) t.push(e.end(i))
return t.length ? t.sort()[t.length - 1] : 1 / 0
}),
(t.seekableStart = function () {
for (var e = this.player_.seekable(), t = [], i = e ? e.length : 0; i--; ) t.push(e.start(i))
return t.length ? t.sort()[0] : 0
}),
(t.liveWindow = function () {
var e = this.liveCurrentTime()
return e === 1 / 0 ? 0 : e - this.seekableStart()
}),
(t.isLive = function () {
return this.isTracking()
}),
(t.atLiveEdge = function () {
return !this.behindLiveEdge()
}),
(t.liveCurrentTime = function () {
return this.pastSeekEnd() + this.seekableEnd()
}),
(t.pastSeekEnd = function () {
var e = this.seekableEnd()
return -1 !== this.lastSeekEnd_ && e !== this.lastSeekEnd_ && (this.pastSeekEnd_ = 0), (this.lastSeekEnd_ = e), this.pastSeekEnd_
}),
(t.behindLiveEdge = function () {
return this.behindLiveEdge_
}),
(t.isTracking = function () {
return 'number' == typeof this.trackingInterval_
}),
(t.seekToLiveEdge = function () {
;(this.seekedBehindLive_ = !1), this.atLiveEdge() || ((this.nextSeekedFromUser_ = !1), this.player_.currentTime(this.liveCurrentTime()))
}),
(t.dispose = function () {
this.off(document, 'visibilitychange', this.handleVisibilityChange_), this.stopTracking(), n.prototype.dispose.call(this)
}),
e
)
})(pt)
)
function kn(e) {
if ((n = e.el()).hasAttribute('src')) return e.triggerSourceset(n.src), 1
var t = e.$$('source'),
i = [],
n = ''
if (t.length) {
for (var r = 0; r < t.length; r++) {
var a = t[r].src
a && -1 === i.indexOf(a) && i.push(a)
}
return !!i.length && (1 === i.length && (n = i[0]), e.triggerSourceset(n), !0)
}
}
function Cn(e, t) {
for (var i = {}, n = 0; n < e.length && !((i = Object.getOwnPropertyDescriptor(e[n], t)) && i.set && i.get); n++);
return (i.enumerable = !0), (i.configurable = !0), i
}
function In(a) {
var t,
e,
i,
s = a.el()
s.resetSourceWatch_ ||
((t = {}),
(e = Cn([a.el(), window.HTMLMediaElement.prototype, window.Element.prototype, Ln], 'innerHTML')),
(i = function (r) {
return function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
var n = r.apply(s, t)
return kn(a), n
}
}),
['append', 'appendChild', 'insertAdjacentHTML'].forEach(function (e) {
s[e] && ((t[e] = s[e]), (s[e] = i(t[e])))
}),
Object.defineProperty(s, 'innerHTML', lt(e, { set: i(e.set) })),
(s.resetSourceWatch_ = function () {
;(s.resetSourceWatch_ = null),
Object.keys(t).forEach(function (e) {
s[e] = t[e]
}),
Object.defineProperty(s, 'innerHTML', e)
}),
a.one('sourceset', s.resetSourceWatch_))
}
function xn(i) {
var n, t, r, a
i.featuresSourceset &&
((n = i.el()).resetSourceset_ ||
((t = Cn([i.el(), window.HTMLMediaElement.prototype, Dn], 'src')),
(r = n.setAttribute),
(a = n.load),
Object.defineProperty(
n,
'src',
lt(t, {
set: function (e) {
e = t.set.call(n, e)
return i.triggerSourceset(n.src), e
},
})
),
(n.setAttribute = function (e, t) {
t = r.call(n, e, t)
return /src/i.test(e) && i.triggerSourceset(n.src), t
}),
(n.load = function () {
var e = a.call(n)
return kn(i) || (i.triggerSourceset(''), In(i)), e
}),
n.currentSrc ? i.triggerSourceset(n.currentSrc) : kn(i) || In(i),
(n.resetSourceset_ = function () {
;(n.resetSourceset_ = null), (n.load = a), (n.setAttribute = r), Object.defineProperty(n, 'src', t), n.resetSourceWatch_ && n.resetSourceWatch_()
})))
}
function An(t, i, n, e) {
function r(e) {
return Object.defineProperty(t, i, { value: e, enumerable: !0, writable: !0 })
}
var a = {
configurable: !0,
enumerable: !0,
get: function () {
var e = n()
return r(e), e
},
}
return (e = void 0 === e ? !0 : e) && (a.set = r), Object.defineProperty(t, i, a)
}
var Pn,
Ln = Object.defineProperty({}, 'innerHTML', {
get: function () {
return this.cloneNode(!0).innerHTML
},
set: function (e) {
var t = document.createElement(this.nodeName.toLowerCase())
t.innerHTML = e
for (var i = document.createDocumentFragment(); t.childNodes.length; ) i.appendChild(t.childNodes[0])
return (this.innerText = ''), window.Element.prototype.appendChild.call(this, i), this.innerHTML
},
}),
Dn = Object.defineProperty({}, 'src', {
get: function () {
return this.hasAttribute('src') ? Rt(window.Element.prototype.getAttribute.call(this, 'src')) : ''
},
set: function (e) {
return window.Element.prototype.setAttribute.call(this, 'src', e), e
},
}),
On = (function (l) {
function s(e, t) {
var i = l.call(this, e, t) || this,
t = e.source,
n = !1
if (
((i.featuresVideoFrameCallback = i.featuresVideoFrameCallback && 'VIDEO' === i.el_.tagName),
t && (i.el_.currentSrc !== t.src || (e.tag && 3 === e.tag.initNetworkState_)) ? i.setSource(t) : i.handleLateInit_(i.el_),
e.enableSourceset && i.setupSourcesetHandling_(),
(i.isScrubbing_ = !1),
i.el_.hasChildNodes())
) {
for (var r = i.el_.childNodes, a = r.length, s = []; a--; ) {
var o = r[a]
'track' === o.nodeName.toLowerCase() &&
(i.featuresNativeTextTracks
? (i.remoteTextTrackEls().addTrackElement_(o),
i.remoteTextTracks().addTrack(o.track),
i.textTracks().addTrack(o.track),
n || i.el_.hasAttribute('crossorigin') || !Ut(o.src) || (n = !0))
: s.push(o))
}
for (var u = 0; u < s.length; u++) i.el_.removeChild(s[u])
}
return (
i.proxyNativeTracks_(),
i.featuresNativeTextTracks && n && h.warn("Text Tracks are being loaded from another origin but the crossorigin attribute isn't used.\nThis may prevent text tracks from loading."),
i.restoreMetadataTracksInIOSNativePlayer_(),
(F || H || L) && !0 === e.nativeControlsForTouch && i.setControls(!0),
i.proxyWebkitFullscreen_(),
i.triggerReady(),
i
)
}
mt(s, l)
var e = s.prototype
return (
(e.dispose = function () {
this.el_ && this.el_.resetSourceset_ && this.el_.resetSourceset_(), s.disposeMediaElement(this.el_), (this.options_ = null), l.prototype.dispose.call(this)
}),
(e.setupSourcesetHandling_ = function () {
xn(this)
}),
(e.restoreMetadataTracksInIOSNativePlayer_ = function () {
function e() {
i = []
for (var e = 0; e < n.length; e++) {
var t = n[e]
'metadata' === t.kind && i.push({ track: t, storedMode: t.mode })
}
}
var i,
n = this.textTracks()
e(),
n.addEventListener('change', e),
this.on('dispose', function () {
return n.removeEventListener('change', e)
})
function r() {
for (var e = 0; e < i.length; e++) {
var t = i[e]
'disabled' === t.track.mode && t.track.mode !== t.storedMode && (t.track.mode = t.storedMode)
}
n.removeEventListener('change', r)
}
this.on('webkitbeginfullscreen', function () {
n.removeEventListener('change', e), n.removeEventListener('change', r), n.addEventListener('change', r)
}),
this.on('webkitendfullscreen', function () {
n.removeEventListener('change', e), n.addEventListener('change', e), n.removeEventListener('change', r)
})
}),
(e.overrideNative_ = function (e, t) {
var i,
n = this
t === this['featuresNative' + e + 'Tracks'] &&
(this[(i = e.toLowerCase()) + 'TracksListeners_'] &&
Object.keys(this[i + 'TracksListeners_']).forEach(function (e) {
n.el()[i + 'Tracks'].removeEventListener(e, n[i + 'TracksListeners_'][e])
}),
(this['featuresNative' + e + 'Tracks'] = !t),
(this[i + 'TracksListeners_'] = null),
this.proxyNativeTracksForType_(i))
}),
(e.overrideNativeAudioTracks = function (e) {
this.overrideNative_('Audio', e)
}),
(e.overrideNativeVideoTracks = function (e) {
this.overrideNative_('Video', e)
}),
(e.proxyNativeTracksForType_ = function (i) {
var e,
t,
n = this,
r = ai[i],
a = this.el()[r.getterName],
s = this[r.getterName]()
this['featuresNative' + r.capitalName + 'Tracks'] &&
a &&
a.addEventListener &&
((t = function () {
for (var e = [], t = 0; t < s.length; t++) {
for (var i = !1, n = 0; n < a.length; n++)
if (a[n] === s[t]) {
i = !0
break
}
i || e.push(s[t])
}
for (; e.length; ) s.removeTrack(e.shift())
}),
(this[r.getterName + 'Listeners_'] = e =
{
change: function (e) {
var t = { type: 'change', target: s, currentTarget: s, srcElement: s }
s.trigger(t), 'text' === i && n[si.remoteText.getterName]().trigger(t)
},
addtrack: function (e) {
s.addTrack(e.track)
},
removetrack: function (e) {
s.removeTrack(e.track)
},
}),
Object.keys(e).forEach(function (t) {
var i = e[t]
a.addEventListener(t, i),
n.on('dispose', function (e) {
return a.removeEventListener(t, i)
})
}),
this.on('loadstart', t),
this.on('dispose', function (e) {
return n.off('loadstart', t)
}))
}),
(e.proxyNativeTracks_ = function () {
var t = this
ai.names.forEach(function (e) {
t.proxyNativeTracksForType_(e)
})
}),
(e.createEl = function () {
var e,
t = this.options_.tag
;(t && (this.options_.playerElIngest || this.movingMediaElementInDOM)) ||
(t
? ((e = t.cloneNode(!0)), t.parentNode && t.parentNode.insertBefore(e, t), s.disposeMediaElement(t), (t = e))
: ((t = document.createElement('video')),
(e = lt({}, this.options_.tag && ae(this.options_.tag))),
(F && !0 === this.options_.nativeControlsForTouch) || delete e.controls,
re(t, b(e, { id: this.options_.techId, class: 'vjs-tech' }))),
(t.playerId = this.options_.playerId)),
'undefined' != typeof this.options_.preload && oe(t, 'preload', this.options_.preload),
void 0 !== this.options_.disablePictureInPicture && (t.disablePictureInPicture = this.options_.disablePictureInPicture)
for (var i = ['loop', 'muted', 'playsinline', 'autoplay'], n = 0; n < i.length; n++) {
var r = i[n],
a = this.options_[r]
'undefined' != typeof a && (a ? oe(t, r, r) : ue(t, r), (t[r] = a))
}
return t
}),
(e.handleLateInit_ = function (e) {
if (0 !== e.networkState && 3 !== e.networkState) {
if (0 === e.readyState) {
var t = !1,
i = function () {
t = !0
}
this.on('loadstart', i)
var n = function () {
t || this.trigger('loadstart')
}
return (
this.on('loadedmetadata', n),
void this.ready(function () {
this.off('loadstart', i), this.off('loadedmetadata', n), t || this.trigger('loadstart')
})
)
}
var r = ['loadstart']
r.push('loadedmetadata'),
2 <= e.readyState && r.push('loadeddata'),
3 <= e.readyState && r.push('canplay'),
4 <= e.readyState && r.push('canplaythrough'),
this.ready(function () {
r.forEach(function (e) {
this.trigger(e)
}, this)
})
}
}),
(e.setScrubbing = function (e) {
this.isScrubbing_ = e
}),
(e.scrubbing = function () {
return this.isScrubbing_
}),
(e.setCurrentTime = function (e) {
try {
this.isScrubbing_ && this.el_.fastSeek && V ? this.el_.fastSeek(e) : (this.el_.currentTime = e)
} catch (e) {
h(e, 'Video is not ready. (Video.js)')
}
}),
(e.duration = function () {
var t = this
return this.el_.duration === 1 / 0 && A && M && 0 === this.el_.currentTime
? (this.on('timeupdate', function e() {
0 < t.el_.currentTime && (t.el_.duration === 1 / 0 && t.trigger('durationchange'), t.off('timeupdate', e))
}),
NaN)
: this.el_.duration || NaN
}),
(e.width = function () {
return this.el_.offsetWidth
}),
(e.height = function () {
return this.el_.offsetHeight
}),
(e.proxyWebkitFullscreen_ = function () {
var e,
t,
i = this
'webkitDisplayingFullscreen' in this.el_ &&
((e = function () {
this.trigger('fullscreenchange', { isFullscreen: !1 }), this.el_.controls && !this.options_.nativeControlsForTouch && this.controls() && (this.el_.controls = !1)
}),
(t = function () {
'webkitPresentationMode' in this.el_ &&
'picture-in-picture' !== this.el_.webkitPresentationMode &&
(this.one('webkitendfullscreen', e), this.trigger('fullscreenchange', { isFullscreen: !0, nativeIOSFullscreen: !0 }))
}),
this.on('webkitbeginfullscreen', t),
this.on('dispose', function () {
i.off('webkitbeginfullscreen', t), i.off('webkitendfullscreen', e)
}))
}),
(e.supportsFullScreen = function () {
if ('function' == typeof this.el_.webkitEnterFullScreen) {
var e = (window.navigator && window.navigator.userAgent) || ''
if (/Android/.test(e) || !/Chrome|Mac OS X 10.5/.test(e)) return !0
}
return !1
}),
(e.enterFullScreen = function () {
var e = this.el_
if (e.paused && e.networkState <= e.HAVE_METADATA)
Et(this.el_.play()),
this.setTimeout(function () {
e.pause()
try {
e.webkitEnterFullScreen()
} catch (e) {
this.trigger('fullscreenerror', e)
}
}, 0)
else
try {
e.webkitEnterFullScreen()
} catch (e) {
this.trigger('fullscreenerror', e)
}
}),
(e.exitFullScreen = function () {
this.el_.webkitDisplayingFullscreen ? this.el_.webkitExitFullScreen() : this.trigger('fullscreenerror', new Error('The video is not fullscreen'))
}),
(e.requestPictureInPicture = function () {
return this.el_.requestPictureInPicture()
}),
(e.requestVideoFrameCallback = function (e) {
return this.featuresVideoFrameCallback && !this.el_.webkitKeys ? this.el_.requestVideoFrameCallback(e) : l.prototype.requestVideoFrameCallback.call(this, e)
}),
(e.cancelVideoFrameCallback = function (e) {
this.featuresVideoFrameCallback && !this.el_.webkitKeys ? this.el_.cancelVideoFrameCallback(e) : l.prototype.cancelVideoFrameCallback.call(this, e)
}),
(e.src = function (e) {
if (void 0 === e) return this.el_.src
this.setSrc(e)
}),
(e.reset = function () {
s.resetMediaElement(this.el_)
}),
(e.currentSrc = function () {
return this.currentSource_ ? this.currentSource_.src : this.el_.currentSrc
}),
(e.setControls = function (e) {
this.el_.controls = !!e
}),
(e.addTextTrack = function (e, t, i) {
return this.featuresNativeTextTracks ? this.el_.addTextTrack(e, t, i) : l.prototype.addTextTrack.call(this, e, t, i)
}),
(e.createRemoteTextTrack = function (e) {
if (!this.featuresNativeTextTracks) return l.prototype.createRemoteTextTrack.call(this, e)
var t = document.createElement('track')
return (
e.kind && (t.kind = e.kind),
e.label && (t.label = e.label),
(e.language || e.srclang) && (t.srclang = e.language || e.srclang),
e.default && (t.default = e.default),
e.id && (t.id = e.id),
e.src && (t.src = e.src),
t
)
}),
(e.addRemoteTextTrack = function (e, t) {
t = l.prototype.addRemoteTextTrack.call(this, e, t)
return this.featuresNativeTextTracks && this.el().appendChild(t), t
}),
(e.removeRemoteTextTrack = function (e) {
if ((l.prototype.removeRemoteTextTrack.call(this, e), this.featuresNativeTextTracks))
for (var t = this.$$('track'), i = t.length; i--; ) (e !== t[i] && e !== t[i].track) || this.el().removeChild(t[i])
}),
(e.getVideoPlaybackQuality = function () {
if ('function' == typeof this.el().getVideoPlaybackQuality) return this.el().getVideoPlaybackQuality()
var e = {}
return (
'undefined' != typeof this.el().webkitDroppedFrameCount &&
'undefined' != typeof this.el().webkitDecodedFrameCount &&
((e.droppedVideoFrames = this.el().webkitDroppedFrameCount), (e.totalVideoFrames = this.el().webkitDecodedFrameCount)),
window.performance && 'function' == typeof window.performance.now
? (e.creationTime = window.performance.now())
: window.performance &&
window.performance.timing &&
'number' == typeof window.performance.timing.navigationStart &&
(e.creationTime = window.Date.now() - window.performance.timing.navigationStart),
e
)
}),
s
)
})(ji)
An(On, 'TEST_VID', function () {
if (X()) {
var e = document.createElement('video'),
t = document.createElement('track')
return (t.kind = 'captions'), (t.srclang = 'en'), (t.label = 'English'), e.appendChild(t), e
}
}),
(On.isSupported = function () {
try {
On.TEST_VID.volume = 0.5
} catch (e) {
return !1
}
return !(!On.TEST_VID || !On.TEST_VID.canPlayType)
}),
(On.canPlayType = function (e) {
return On.TEST_VID.canPlayType(e)
}),
(On.canPlaySource = function (e, t) {
return On.canPlayType(e.type)
}),
(On.canControlVolume = function () {
try {
var e = On.TEST_VID.volume
On.TEST_VID.volume = e / 2 + 0.1
var t = e !== On.TEST_VID.volume
return t && q
? (window.setTimeout(function () {
On && On.prototype && (On.prototype.featuresVolumeControl = e !== On.TEST_VID.volume)
}),
!1)
: t
} catch (e) {
return !1
}
}),
(On.canMuteVolume = function () {
try {
var e = On.TEST_VID.muted
return (On.TEST_VID.muted = !e), On.TEST_VID.muted ? oe(On.TEST_VID, 'muted', 'muted') : ue(On.TEST_VID, 'muted'), e !== On.TEST_VID.muted
} catch (e) {
return !1
}
}),
(On.canControlPlaybackRate = function () {
if (A && M && R < 58) return !1
try {
var e = On.TEST_VID.playbackRate
return (On.TEST_VID.playbackRate = e / 2 + 0.1), e !== On.TEST_VID.playbackRate
} catch (e) {
return !1
}
}),
(On.canOverrideAttributes = function () {
try {
var e = function () {}
Object.defineProperty(document.createElement('video'), 'src', { get: e, set: e }),
Object.defineProperty(document.createElement('audio'), 'src', { get: e, set: e }),
Object.defineProperty(document.createElement('video'), 'innerHTML', { get: e, set: e }),
Object.defineProperty(document.createElement('audio'), 'innerHTML', { get: e, set: e })
} catch (e) {
return !1
}
return !0
}),
(On.supportsNativeTextTracks = function () {
return V || (q && M)
}),
(On.supportsNativeVideoTracks = function () {
return !(!On.TEST_VID || !On.TEST_VID.videoTracks)
}),
(On.supportsNativeAudioTracks = function () {
return !(!On.TEST_VID || !On.TEST_VID.audioTracks)
}),
(On.Events = [
'loadstart',
'suspend',
'abort',
'error',
'emptied',
'stalled',
'loadedmetadata',
'loadeddata',
'canplay',
'canplaythrough',
'playing',
'waiting',
'seeking',
'seeked',
'ended',
'durationchange',
'timeupdate',
'progress',
'play',
'pause',
'ratechange',
'resize',
'volumechange',
]),
[
['featuresMuteControl', 'canMuteVolume'],
['featuresPlaybackRate', 'canControlPlaybackRate'],
['featuresSourceset', 'canOverrideAttributes'],
['featuresNativeTextTracks', 'supportsNativeTextTracks'],
['featuresNativeVideoTracks', 'supportsNativeVideoTracks'],
['featuresNativeAudioTracks', 'supportsNativeAudioTracks'],
].forEach(function (e) {
var t = e[0],
i = e[1]
An(
On.prototype,
t,
function () {
return On[i]()
},
!0
)
}),
(On.prototype.featuresVolumeControl = On.canControlVolume()),
(On.prototype.movingMediaElementInDOM = !q),
(On.prototype.featuresFullscreenResize = !0),
(On.prototype.featuresProgressEvents = !0),
(On.prototype.featuresTimeupdateEvents = !0),
(On.prototype.featuresVideoFrameCallback = !(!On.TEST_VID || !On.TEST_VID.requestVideoFrameCallback)),
(On.patchCanPlayType = function () {
4 <= P &&
!D &&
!M &&
((Pn = On.TEST_VID && On.TEST_VID.constructor.prototype.canPlayType),
(On.TEST_VID.constructor.prototype.canPlayType = function (e) {
return e && /^application\/(?:x-|vnd\.apple\.)mpegurl/i.test(e) ? 'maybe' : Pn.call(this, e)
}))
}),
(On.unpatchCanPlayType = function () {
var e = On.TEST_VID.constructor.prototype.canPlayType
return Pn && (On.TEST_VID.constructor.prototype.canPlayType = Pn), e
}),
On.patchCanPlayType(),
(On.disposeMediaElement = function (e) {
if (e) {
for (e.parentNode && e.parentNode.removeChild(e); e.hasChildNodes(); ) e.removeChild(e.firstChild)
e.removeAttribute('src'),
'function' == typeof e.load &&
(function () {
try {
e.load()
} catch (e) {}
})()
}
}),
(On.resetMediaElement = function (e) {
if (e) {
for (var t = e.querySelectorAll('source'), i = t.length; i--; ) e.removeChild(t[i])
e.removeAttribute('src'),
'function' == typeof e.load &&
(function () {
try {
e.load()
} catch (e) {}
})()
}
}),
['muted', 'defaultMuted', 'autoplay', 'controls', 'loop', 'playsinline'].forEach(function (e) {
On.prototype[e] = function () {
return this.el_[e] || this.el_.hasAttribute(e)
}
}),
['muted', 'defaultMuted', 'autoplay', 'loop', 'playsinline'].forEach(function (t) {
On.prototype['set' + ut(t)] = function (e) {
;(this.el_[t] = e) ? this.el_.setAttribute(t, t) : this.el_.removeAttribute(t)
}
}),
[
'paused',
'currentTime',
'buffered',
'volume',
'poster',
'preload',
'error',
'seeking',
'seekable',
'ended',
'playbackRate',
'defaultPlaybackRate',
'disablePictureInPicture',
'played',
'networkState',
'readyState',
'videoWidth',
'videoHeight',
'crossOrigin',
].forEach(function (e) {
On.prototype[e] = function () {
return this.el_[e]
}
}),
['volume', 'src', 'poster', 'preload', 'playbackRate', 'defaultPlaybackRate', 'disablePictureInPicture', 'crossOrigin'].forEach(function (t) {
On.prototype['set' + ut(t)] = function (e) {
this.el_[t] = e
}
}),
['pause', 'load', 'play'].forEach(function (e) {
On.prototype[e] = function () {
return this.el_[e]()
}
}),
ji.withSourceHandlers(On),
(On.nativeSourceHandler = {}),
(On.nativeSourceHandler.canPlayType = function (e) {
try {
return On.TEST_VID.canPlayType(e)
} catch (e) {
return ''
}
}),
(On.nativeSourceHandler.canHandleSource = function (e, t) {
if (e.type) return On.nativeSourceHandler.canPlayType(e.type)
if (e.src) {
e = Nt(e.src)
return On.nativeSourceHandler.canPlayType('video/' + e)
}
return ''
}),
(On.nativeSourceHandler.handleSource = function (e, t, i) {
t.setSrc(e.src)
}),
(On.nativeSourceHandler.dispose = function () {}),
On.registerSourceHandler(On.nativeSourceHandler),
ji.registerTech('Html5', On)
var Mn = ['progress', 'abort', 'suspend', 'emptied', 'stalled', 'loadedmetadata', 'loadeddata', 'timeupdate', 'resize', 'volumechange', 'texttrackchange'],
Rn = { canplay: 'CanPlay', canplaythrough: 'CanPlayThrough', playing: 'Playing', seeked: 'Seeked' },
Nn = ['tiny', 'xsmall', 'small', 'medium', 'large', 'xlarge', 'huge'],
Un = {}
Nn.forEach(function (e) {
var t = 'x' === e.charAt(0) ? 'x-' + e.substring(1) : e
Un[e] = 'vjs-layout-' + t
})
var Bn = { tiny: 210, xsmall: 320, small: 425, medium: 768, large: 1440, xlarge: 2560, huge: 1 / 0 },
Fn = (function (c) {
function o(e, t, i) {
var n, r
if (((e.id = e.id || t.id || 'vjs_video_' + Pe++), ((t = b(o.getTagSettings(e), t)).initChildren = !1), (t.createEl = !1), (t.evented = !1), (t.reportTouchActivity = !1), !t.language))
if ('function' == typeof e.closest) {
var a = e.closest('[lang]')
a && a.getAttribute && (t.language = a.getAttribute('lang'))
} else
for (var s = e; s && 1 === s.nodeType; ) {
if (ae(s).hasOwnProperty('lang')) {
t.language = s.getAttribute('lang')
break
}
s = s.parentNode
}
if (
(((n = c.call(this, null, t, i) || this).boundDocumentFullscreenChange_ = function (e) {
return n.documentFullscreenChange_(e)
}),
(n.boundFullWindowOnEscKey_ = function (e) {
return n.fullWindowOnEscKey(e)
}),
(n.boundUpdateStyleEl_ = function (e) {
return n.updateStyleEl_(e)
}),
(n.boundApplyInitTime_ = function (e) {
return n.applyInitTime_(e)
}),
(n.boundUpdateCurrentBreakpoint_ = function (e) {
return n.updateCurrentBreakpoint_(e)
}),
(n.boundHandleTechClick_ = function (e) {
return n.handleTechClick_(e)
}),
(n.boundHandleTechDoubleClick_ = function (e) {
return n.handleTechDoubleClick_(e)
}),
(n.boundHandleTechTouchStart_ = function (e) {
return n.handleTechTouchStart_(e)
}),
(n.boundHandleTechTouchMove_ = function (e) {
return n.handleTechTouchMove_(e)
}),
(n.boundHandleTechTouchEnd_ = function (e) {
return n.handleTechTouchEnd_(e)
}),
(n.boundHandleTechTap_ = function (e) {
return n.handleTechTap_(e)
}),
(n.isFullscreen_ = !1),
(n.log = p(n.id_)),
(n.fsApi_ = l),
(n.isPosterFromTech_ = !1),
(n.queuedCallbacks_ = []),
(n.isReady_ = !1),
(n.hasStarted_ = !1),
(n.userActive_ = !1),
(n.debugEnabled_ = !1),
(n.audioOnlyMode_ = !1),
(n.audioPosterMode_ = !1),
(n.audioOnlyCache_ = { playerHeight: null, hiddenChildren: [] }),
!n.options_ || !n.options_.techOrder || !n.options_.techOrder.length)
)
throw new Error('No techOrder specified. Did you overwrite videojs.options instead of just changing the properties you want to override?')
;(n.tag = e),
(n.tagAttributes = e && ae(e)),
n.language(n.options_.language),
t.languages
? ((r = {}),
Object.getOwnPropertyNames(t.languages).forEach(function (e) {
r[e.toLowerCase()] = t.languages[e]
}),
(n.languages_ = r))
: (n.languages_ = o.prototype.options_.languages),
n.resetCache_(),
(n.poster_ = t.poster || ''),
(n.controls_ = !!t.controls),
(e.controls = !1),
e.removeAttribute('controls'),
(n.changingSrc_ = !1),
(n.playCallbacks_ = []),
(n.playTerminatedQueue_ = []),
e.hasAttribute('autoplay') ? n.autoplay(!0) : n.autoplay(n.options_.autoplay),
t.plugins &&
Object.keys(t.plugins).forEach(function (e) {
if ('function' != typeof n[e]) throw new Error('plugin "' + e + '" does not exist')
}),
(n.scrubbing_ = !1),
(n.el_ = n.createEl()),
rt(ft(n), { eventBusKey: 'el_' }),
n.fsApi_.requestFullscreen && (Be(document, n.fsApi_.fullscreenchange, n.boundDocumentFullscreenChange_), n.on(n.fsApi_.fullscreenchange, n.boundDocumentFullscreenChange_)),
n.fluid_ && n.on(['playerreset', 'resize'], n.boundUpdateStyleEl_)
i = lt(n.options_)
t.plugins &&
Object.keys(t.plugins).forEach(function (e) {
n[e](t.plugins[e])
}),
t.debug && n.debug(!0),
(n.options_.playerOptions = i),
(n.middleware_ = []),
n.playbackRates(t.playbackRates),
n.initChildren(),
n.isAudio('audio' === e.nodeName.toLowerCase()),
n.controls() ? n.addClass('vjs-controls-enabled') : n.addClass('vjs-controls-disabled'),
n.el_.setAttribute('role', 'region'),
n.isAudio() ? n.el_.setAttribute('aria-label', n.localize('Audio Player')) : n.el_.setAttribute('aria-label', n.localize('Video Player')),
n.isAudio() && n.addClass('vjs-audio'),
n.flexNotSupported_() && n.addClass('vjs-no-flex'),
F && n.addClass('vjs-touch-enabled'),
q || n.addClass('vjs-workinghover'),
(o.players[n.id_] = ft(n))
e = u.split('.')[0]
return (
n.addClass('vjs-v' + e),
n.userActive(!0),
n.reportUserActivity(),
n.one('play', function (e) {
return n.listenForUserActivity_(e)
}),
n.on('stageclick', function (e) {
return n.handleStageClick_(e)
}),
n.on('keydown', function (e) {
return n.handleKeyDown(e)
}),
n.on('languagechange', function (e) {
return n.handleLanguagechange(e)
}),
n.breakpoints(n.options_.breakpoints),
n.responsive(n.options_.responsive),
n.on('ready', function () {
n.audioPosterMode(n.options_.audioPosterMode), n.audioOnlyMode(n.options_.audioOnlyMode)
}),
n
)
}
mt(o, c)
var e = o.prototype
return (
(e.dispose = function () {
var t = this
this.trigger('dispose'),
this.off('dispose'),
Fe(document, this.fsApi_.fullscreenchange, this.boundDocumentFullscreenChange_),
Fe(document, 'keydown', this.boundFullWindowOnEscKey_),
this.styleEl_ && this.styleEl_.parentNode && (this.styleEl_.parentNode.removeChild(this.styleEl_), (this.styleEl_ = null)),
(o.players[this.id_] = null),
this.tag && this.tag.player && (this.tag.player = null),
this.el_ && this.el_.player && (this.el_.player = null),
this.tech_ && (this.tech_.dispose(), (this.isPosterFromTech_ = !1), (this.poster_ = '')),
this.playerElIngest_ && (this.playerElIngest_ = null),
this.tag && (this.tag = null),
(qi[this.id()] = null),
oi.names.forEach(function (e) {
;(e = oi[e]), (e = t[e.getterName]())
e && e.off && e.off()
}),
c.prototype.dispose.call(this, { restoreEl: this.options_.restoreEl })
}),
(e.createEl = function () {
var t,
i = this.tag,
e = (this.playerElIngest_ = i.parentNode && i.parentNode.hasAttribute && i.parentNode.hasAttribute('data-vjs-player')),
n = 'video-js' === this.tag.tagName.toLowerCase()
e ? (t = this.el_ = i.parentNode) : n || (t = this.el_ = c.prototype.createEl.call(this, 'div'))
var r,
a,
s = ae(i)
if (n) {
for (t = this.el_ = i, i = this.tag = document.createElement('video'); t.children.length; ) i.appendChild(t.firstChild)
ee(t, 'video-js') || te(t, 'video-js'),
t.appendChild(i),
(e = this.playerElIngest_ = t),
Object.keys(t).forEach(function (e) {
try {
i[e] = t[e]
} catch (e) {}
})
}
i.setAttribute('tabindex', '-1'),
(s.tabindex = '-1'),
(N || (M && B)) && (i.setAttribute('role', 'application'), (s.role = 'application')),
i.removeAttribute('width'),
i.removeAttribute('height'),
'width' in s && delete s.width,
'height' in s && delete s.height,
Object.getOwnPropertyNames(s).forEach(function (e) {
;(n && 'class' === e) || t.setAttribute(e, s[e]), n && i.setAttribute(e, s[e])
}),
(i.playerId = i.id),
(i.id += '_html5_api'),
(i.className = 'vjs-tech'),
(i.player = t.player = this).addClass('vjs-paused'),
!0 !== window.VIDEOJS_NO_DYNAMIC_STYLE &&
((this.styleEl_ = xe('vjs-styles-dimensions')), (r = Te('.vjs-styles-defaults')), (a = Te('head')).insertBefore(this.styleEl_, r ? r.nextSibling : a.firstChild)),
(this.fill_ = !1),
(this.fluid_ = !1),
this.width(this.options_.width),
this.height(this.options_.height),
this.fill(this.options_.fill),
this.fluid(this.options_.fluid),
this.aspectRatio(this.options_.aspectRatio),
this.crossOrigin(this.options_.crossOrigin || this.options_.crossorigin)
for (var o = i.getElementsByTagName('a'), u = 0; u < o.length; u++) {
var l = o.item(u)
te(l, 'vjs-hidden'), l.setAttribute('hidden', 'hidden')
}
return (
(i.initNetworkState_ = i.networkState),
i.parentNode && !e && i.parentNode.insertBefore(t, i),
Z(i, t),
this.children_.unshift(i),
this.el_.setAttribute('lang', this.language_),
this.el_.setAttribute('translate', 'no'),
(this.el_ = t)
)
}),
(e.crossOrigin = function (e) {
if (!e) return this.techGet_('crossOrigin')
'anonymous' === e || 'use-credentials' === e ? this.techCall_('setCrossOrigin', e) : h.warn('crossOrigin must be "anonymous" or "use-credentials", given "' + e + '"')
}),
(e.width = function (e) {
return this.dimension('width', e)
}),
(e.height = function (e) {
return this.dimension('height', e)
}),
(e.dimension = function (e, t) {
var i = e + '_'
if (void 0 === t) return this[i] || 0
if ('' === t || 'auto' === t) return (this[i] = void 0), void this.updateStyleEl_()
var n = parseFloat(t)
isNaN(n) ? h.error('Improper value "' + t + '" supplied for for ' + e) : ((this[i] = n), this.updateStyleEl_())
}),
(e.fluid = function (e) {
var t,
i = this
if (void 0 === e) return !!this.fluid_
;(this.fluid_ = !!e),
it(this) && this.off(['playerreset', 'resize'], this.boundUpdateStyleEl_),
e
? (this.addClass('vjs-fluid'),
this.fill(!1),
(t = function () {
i.on(['playerreset', 'resize'], i.boundUpdateStyleEl_)
}),
it((e = this)) ? t() : (e.eventedCallbacks || (e.eventedCallbacks = []), e.eventedCallbacks.push(t)))
: this.removeClass('vjs-fluid'),
this.updateStyleEl_()
}),
(e.fill = function (e) {
if (void 0 === e) return !!this.fill_
;(this.fill_ = !!e), e ? (this.addClass('vjs-fill'), this.fluid(!1)) : this.removeClass('vjs-fill')
}),
(e.aspectRatio = function (e) {
if (void 0 === e) return this.aspectRatio_
if (!/^\d+\:\d+$/.test(e)) throw new Error('Improper value supplied for aspect ratio. The format should be width:height, for example 16:9.')
;(this.aspectRatio_ = e), this.fluid(!0), this.updateStyleEl_()
}),
(e.updateStyleEl_ = function () {
var e, t, i, n
!0 !== window.VIDEOJS_NO_DYNAMIC_STYLE
? ((n =
(i = (
void 0 !== this.aspectRatio_ && 'auto' !== this.aspectRatio_ ? this.aspectRatio_ : 0 < this.videoWidth() ? this.videoWidth() + ':' + this.videoHeight() : '16:9'
).split(':'))[1] / i[0]),
(e = void 0 !== this.width_ ? this.width_ : void 0 !== this.height_ ? this.height_ / n : this.videoWidth() || 300),
(t = void 0 !== this.height_ ? this.height_ : e * n),
(i = /^[^a-zA-Z]/.test(this.id()) ? 'dimensions-' + this.id() : this.id() + '-dimensions'),
this.addClass(i),
Ae(
this.styleEl_,
'\n .' +
i +
' {\n width: ' +
e +
'px;\n height: ' +
t +
'px;\n }\n\n .' +
i +
'.vjs-fluid:not(.vjs-audio-only-mode) {\n padding-top: ' +
100 * n +
'%;\n }\n '
))
: ((t = 'number' == typeof this.width_ ? this.width_ : this.options_.width),
(i = 'number' == typeof this.height_ ? this.height_ : this.options_.height),
(n = this.tech_ && this.tech_.el()) && (0 <= t && (n.width = t), 0 <= i && (n.height = i)))
}),
(e.loadTech_ = function (e, t) {
var i = this
this.tech_ && this.unloadTech_()
var n = ut(e),
r = e.charAt(0).toLowerCase() + e.slice(1)
'Html5' !== n && this.tag && (ji.getTech('Html5').disposeMediaElement(this.tag), (this.tag.player = null), (this.tag = null)), (this.techName_ = n), (this.isReady_ = !1)
var a = this.autoplay(),
s = {
source: t,
autoplay: (a = 'string' == typeof this.autoplay() || (!0 === this.autoplay() && this.options_.normalizeAutoplay) ? !1 : a),
nativeControlsForTouch: this.options_.nativeControlsForTouch,
playerId: this.id(),
techId: this.id() + '_' + r + '_api',
playsinline: this.options_.playsinline,
preload: this.options_.preload,
loop: this.options_.loop,
disablePictureInPicture: this.options_.disablePictureInPicture,
muted: this.options_.muted,
poster: this.poster(),
language: this.language(),
playerElIngest: this.playerElIngest_ || !1,
'vtt.js': this.options_['vtt.js'],
canOverridePoster: !!this.options_.techCanOverridePoster,
enableSourceset: this.options_.enableSourceset,
Promise: this.options_.Promise,
}
oi.names.forEach(function (e) {
e = oi[e]
s[e.getterName] = i[e.privateName]
}),
b(s, this.options_[n]),
b(s, this.options_[r]),
b(s, this.options_[e.toLowerCase()]),
this.tag && (s.tag = this.tag),
t && t.src === this.cache_.src && 0 < this.cache_.currentTime && (s.startTime = this.cache_.currentTime)
e = ji.getTech(e)
if (!e) throw new Error("No Tech named '" + n + "' exists! '" + n + "' should be registered using videojs.registerTech()'")
;(this.tech_ = new e(s)),
this.tech_.ready(Ve(this, this.handleTechReady_), !0),
It(this.textTracksJson_ || [], this.tech_),
Mn.forEach(function (t) {
i.on(i.tech_, t, function (e) {
return i['handleTech' + ut(t) + '_'](e)
})
}),
Object.keys(Rn).forEach(function (t) {
i.on(i.tech_, t, function (e) {
0 === i.tech_.playbackRate() && i.tech_.seeking()
? i.queuedCallbacks_.push({ callback: i['handleTech' + Rn[t] + '_'].bind(i), event: e })
: i['handleTech' + Rn[t] + '_'](e)
})
}),
this.on(this.tech_, 'loadstart', function (e) {
return i.handleTechLoadStart_(e)
}),
this.on(this.tech_, 'sourceset', function (e) {
return i.handleTechSourceset_(e)
}),
this.on(this.tech_, 'waiting', function (e) {
return i.handleTechWaiting_(e)
}),
this.on(this.tech_, 'ended', function (e) {
return i.handleTechEnded_(e)
}),
this.on(this.tech_, 'seeking', function (e) {
return i.handleTechSeeking_(e)
}),
this.on(this.tech_, 'play', function (e) {
return i.handleTechPlay_(e)
}),
this.on(this.tech_, 'firstplay', function (e) {
return i.handleTechFirstPlay_(e)
}),
this.on(this.tech_, 'pause', function (e) {
return i.handleTechPause_(e)
}),
this.on(this.tech_, 'durationchange', function (e) {
return i.handleTechDurationChange_(e)
}),
this.on(this.tech_, 'fullscreenchange', function (e, t) {
return i.handleTechFullscreenChange_(e, t)
}),
this.on(this.tech_, 'fullscreenerror', function (e, t) {
return i.handleTechFullscreenError_(e, t)
}),
this.on(this.tech_, 'enterpictureinpicture', function (e) {
return i.handleTechEnterPictureInPicture_(e)
}),
this.on(this.tech_, 'leavepictureinpicture', function (e) {
return i.handleTechLeavePictureInPicture_(e)
}),
this.on(this.tech_, 'error', function (e) {
return i.handleTechError_(e)
}),
this.on(this.tech_, 'posterchange', function (e) {
return i.handleTechPosterChange_(e)
}),
this.on(this.tech_, 'textdata', function (e) {
return i.handleTechTextData_(e)
}),
this.on(this.tech_, 'ratechange', function (e) {
return i.handleTechRateChange_(e)
}),
this.on(this.tech_, 'loadedmetadata', this.boundUpdateStyleEl_),
this.usingNativeControls(this.techGet_('controls')),
this.controls() && !this.usingNativeControls() && this.addTechControlsListeners_(),
this.tech_.el().parentNode === this.el() || ('Html5' === n && this.tag) || Z(this.tech_.el(), this.el()),
this.tag && ((this.tag.player = null), (this.tag = null))
}),
(e.unloadTech_ = function () {
var t = this
oi.names.forEach(function (e) {
e = oi[e]
t[e.privateName] = t[e.getterName]()
}),
(this.textTracksJson_ = Ct(this.tech_)),
(this.isReady_ = !1),
this.tech_.dispose(),
(this.tech_ = !1),
this.isPosterFromTech_ && ((this.poster_ = ''), this.trigger('posterchange')),
(this.isPosterFromTech_ = !1)
}),
(e.tech = function (e) {
return (
void 0 === e && h.warn("Using the tech directly can be dangerous. I hope you know what you're doing.\nSee https://github.com/videojs/video.js/issues/2617 for more info.\n"),
this.tech_
)
}),
(e.addTechControlsListeners_ = function () {
this.removeTechControlsListeners_(),
this.on(this.tech_, 'click', this.boundHandleTechClick_),
this.on(this.tech_, 'dblclick', this.boundHandleTechDoubleClick_),
this.on(this.tech_, 'touchstart', this.boundHandleTechTouchStart_),
this.on(this.tech_, 'touchmove', this.boundHandleTechTouchMove_),
this.on(this.tech_, 'touchend', this.boundHandleTechTouchEnd_),
this.on(this.tech_, 'tap', this.boundHandleTechTap_)
}),
(e.removeTechControlsListeners_ = function () {
this.off(this.tech_, 'tap', this.boundHandleTechTap_),
this.off(this.tech_, 'touchstart', this.boundHandleTechTouchStart_),
this.off(this.tech_, 'touchmove', this.boundHandleTechTouchMove_),
this.off(this.tech_, 'touchend', this.boundHandleTechTouchEnd_),
this.off(this.tech_, 'click', this.boundHandleTechClick_),
this.off(this.tech_, 'dblclick', this.boundHandleTechDoubleClick_)
}),
(e.handleTechReady_ = function () {
this.triggerReady(), this.cache_.volume && this.techCall_('setVolume', this.cache_.volume), this.handleTechPosterChange_(), this.handleTechDurationChange_()
}),
(e.handleTechLoadStart_ = function () {
this.removeClass('vjs-ended'),
this.removeClass('vjs-seeking'),
this.error(null),
this.handleTechDurationChange_(),
this.paused() ? (this.hasStarted(!1), this.trigger('loadstart')) : (this.trigger('loadstart'), this.trigger('firstplay')),
this.manualAutoplay_(!0 === this.autoplay() && this.options_.normalizeAutoplay ? 'play' : this.autoplay())
}),
(e.manualAutoplay_ = function (e) {
var n = this
if (this.tech_ && 'string' == typeof e) {
var t,
i = function () {
var e = n.muted()
n.muted(!0)
function t() {
n.muted(e)
}
n.playTerminatedQueue_.push(t)
var i = n.play()
if (wt(i))
return i.catch(function (e) {
throw (t(), new Error('Rejection at manualAutoplay. Restoring muted value. ' + (e || '')))
})
}
if (('any' !== e || this.muted() ? (t = 'muted' !== e || this.muted() ? this.play() : i()) : wt((t = this.play())) && (t = t.catch(i)), wt(t)))
return t
.then(function () {
n.trigger({ type: 'autoplay-success', autoplay: e })
})
.catch(function () {
n.trigger({ type: 'autoplay-failure', autoplay: e })
})
}
}),
(e.updateSourceCaches_ = function (e) {
var t = (e = void 0 === e ? '' : e),
i = ''
'string' != typeof t && ((t = e.src), (i = e.type)),
(this.cache_.source = this.cache_.source || {}),
(this.cache_.sources = this.cache_.sources || []),
t &&
!i &&
(i = (function (e, t) {
if (!t) return ''
if (e.cache_.source.src === t && e.cache_.source.type) return e.cache_.source.type
var i = e.cache_.sources.filter(function (e) {
return e.src === t
})
if (i.length) return i[0].type
for (var n = e.$$('source'), r = 0; r < n.length; r++) {
var a = n[r]
if (a.type && a.src && a.src === t) return a.type
}
return $i(t)
})(this, t)),
(this.cache_.source = lt({}, e, { src: t, type: i }))
for (
var i = this.cache_.sources.filter(function (e) {
return e.src && e.src === t
}),
n = [],
r = this.$$('source'),
a = [],
s = 0;
s < r.length;
s++
) {
var o = ae(r[s])
n.push(o), o.src && o.src === t && a.push(o.src)
}
a.length && !i.length ? (this.cache_.sources = n) : i.length || (this.cache_.sources = [this.cache_.source]), (this.cache_.src = t)
}),
(e.handleTechSourceset_ = function (e) {
var t,
i,
n,
r = this
this.changingSrc_ ||
((t = function (e) {
return r.updateSourceCaches_(e)
}),
(i = this.currentSource().src),
(n = e.src),
i && !/^blob:/.test(i) && /^blob:/.test(n) && ((this.lastSource_ && (this.lastSource_.tech === n || this.lastSource_.player === i)) || (t = function () {})),
t(n),
e.src ||
this.tech_.any(['sourceset', 'loadstart'], function (e) {
'sourceset' !== e.type && ((e = r.techGet('currentSrc')), (r.lastSource_.tech = e), r.updateSourceCaches_(e))
})),
(this.lastSource_ = { player: this.currentSource().src, tech: e.src }),
this.trigger({ src: e.src, type: 'sourceset' })
}),
(e.hasStarted = function (e) {
if (void 0 === e) return this.hasStarted_
e !== this.hasStarted_ && ((this.hasStarted_ = e), this.hasStarted_ ? (this.addClass('vjs-has-started'), this.trigger('firstplay')) : this.removeClass('vjs-has-started'))
}),
(e.handleTechPlay_ = function () {
this.removeClass('vjs-ended'), this.removeClass('vjs-paused'), this.addClass('vjs-playing'), this.hasStarted(!0), this.trigger('play')
}),
(e.handleTechRateChange_ = function () {
0 < this.tech_.playbackRate() &&
0 === this.cache_.lastPlaybackRate &&
(this.queuedCallbacks_.forEach(function (e) {
return e.callback(e.event)
}),
(this.queuedCallbacks_ = [])),
(this.cache_.lastPlaybackRate = this.tech_.playbackRate()),
this.trigger('ratechange')
}),
(e.handleTechWaiting_ = function () {
var t = this
this.addClass('vjs-waiting'), this.trigger('waiting')
var i = this.currentTime()
this.on('timeupdate', function e() {
i !== t.currentTime() && (t.removeClass('vjs-waiting'), t.off('timeupdate', e))
})
}),
(e.handleTechCanPlay_ = function () {
this.removeClass('vjs-waiting'), this.trigger('canplay')
}),
(e.handleTechCanPlayThrough_ = function () {
this.removeClass('vjs-waiting'), this.trigger('canplaythrough')
}),
(e.handleTechPlaying_ = function () {
this.removeClass('vjs-waiting'), this.trigger('playing')
}),
(e.handleTechSeeking_ = function () {
this.addClass('vjs-seeking'), this.trigger('seeking')
}),
(e.handleTechSeeked_ = function () {
this.removeClass('vjs-seeking'), this.removeClass('vjs-ended'), this.trigger('seeked')
}),
(e.handleTechFirstPlay_ = function () {
this.options_.starttime && (h.warn('Passing the `starttime` option to the player will be deprecated in 6.0'), this.currentTime(this.options_.starttime)),
this.addClass('vjs-has-started'),
this.trigger('firstplay')
}),
(e.handleTechPause_ = function () {
this.removeClass('vjs-playing'), this.addClass('vjs-paused'), this.trigger('pause')
}),
(e.handleTechEnded_ = function () {
this.addClass('vjs-ended'), this.removeClass('vjs-waiting'), this.options_.loop ? (this.currentTime(0), this.play()) : this.paused() || this.pause(), this.trigger('ended')
}),
(e.handleTechDurationChange_ = function () {
this.duration(this.techGet_('duration'))
}),
(e.handleTechClick_ = function (e) {
this.controls_ &&
((void 0 !== this.options_ && void 0 !== this.options_.userActions && void 0 !== this.options_.userActions.click && !1 === this.options_.userActions.click) ||
(void 0 !== this.options_ && void 0 !== this.options_.userActions && 'function' == typeof this.options_.userActions.click
? this.options_.userActions.click.call(this, e)
: this.paused()
? Et(this.play())
: this.pause()))
}),
(e.handleTechDoubleClick_ = function (t) {
this.controls_ &&
(Array.prototype.some.call(this.$$('.vjs-control-bar, .vjs-modal-dialog'), function (e) {
return e.contains(t.target)
}) ||
(void 0 !== this.options_ && void 0 !== this.options_.userActions && void 0 !== this.options_.userActions.doubleClick && !1 === this.options_.userActions.doubleClick) ||
(void 0 !== this.options_ && void 0 !== this.options_.userActions && 'function' == typeof this.options_.userActions.doubleClick
? this.options_.userActions.doubleClick.call(this, t)
: this.isFullscreen()
? this.exitFullscreen()
: this.requestFullscreen()))
}),
(e.handleTechTap_ = function () {
this.userActive(!this.userActive())
}),
(e.handleTechTouchStart_ = function () {
this.userWasActive = this.userActive()
}),
(e.handleTechTouchMove_ = function () {
this.userWasActive && this.reportUserActivity()
}),
(e.handleTechTouchEnd_ = function (e) {
e.cancelable && e.preventDefault()
}),
(e.handleStageClick_ = function () {
this.reportUserActivity()
}),
(e.toggleFullscreenClass_ = function () {
this.isFullscreen() ? this.addClass('vjs-fullscreen') : this.removeClass('vjs-fullscreen')
}),
(e.documentFullscreenChange_ = function (e) {
var t = e.target.player
;(t && t !== this) ||
((e = this.el()),
!(t = document[this.fsApi_.fullscreenElement] === e) && e.matches
? (t = e.matches(':' + this.fsApi_.fullscreen))
: !t && e.msMatchesSelector && (t = e.msMatchesSelector(':' + this.fsApi_.fullscreen)),
this.isFullscreen(t))
}),
(e.handleTechFullscreenChange_ = function (e, t) {
var i = this
t &&
(t.nativeIOSFullscreen &&
(this.addClass('vjs-ios-native-fs'),
this.tech_.one('webkitendfullscreen', function () {
i.removeClass('vjs-ios-native-fs')
})),
this.isFullscreen(t.isFullscreen))
}),
(e.handleTechFullscreenError_ = function (e, t) {
this.trigger('fullscreenerror', t)
}),
(e.togglePictureInPictureClass_ = function () {
this.isInPictureInPicture() ? this.addClass('vjs-picture-in-picture') : this.removeClass('vjs-picture-in-picture')
}),
(e.handleTechEnterPictureInPicture_ = function (e) {
this.isInPictureInPicture(!0)
}),
(e.handleTechLeavePictureInPicture_ = function (e) {
this.isInPictureInPicture(!1)
}),
(e.handleTechError_ = function () {
var e = this.tech_.error()
this.error(e)
}),
(e.handleTechTextData_ = function () {
this.trigger('textdata', 1 < arguments.length ? arguments[1] : null)
}),
(e.getCache = function () {
return this.cache_
}),
(e.resetCache_ = function () {
this.cache_ = {
currentTime: 0,
initTime: 0,
inactivityTimeout: this.options_.inactivityTimeout,
duration: NaN,
lastVolume: 1,
lastPlaybackRate: this.defaultPlaybackRate(),
media: null,
src: '',
source: {},
sources: [],
playbackRates: [],
volume: 1,
}
}),
(e.techCall_ = function (n, r) {
this.ready(function () {
if (n in Xi) return (e = this.middleware_), (t = this.tech_), (i = r), t[(t = n)](e.reduce(Yi(t), i))
if (n in Ki) return Gi(this.middleware_, this.tech_, n, r)
var e, t, i
try {
this.tech_ && this.tech_[n](r)
} catch (e) {
throw (h(e), e)
}
}, !0)
}),
(e.techGet_ = function (t) {
if (this.tech_ && this.tech_.isReady_) {
if (t in zi) return (e = this.middleware_), (i = this.tech_), (n = t), e.reduceRight(Yi(n), i[n]())
if (t in Ki) return Gi(this.middleware_, this.tech_, t)
var e, i, n
try {
return this.tech_[t]()
} catch (e) {
if (void 0 === this.tech_[t]) throw (h('Video.js: ' + t + ' method not defined for ' + this.techName_ + ' playback technology.', e), e)
if ('TypeError' === e.name) throw (h('Video.js: ' + t + ' unavailable on ' + this.techName_ + ' playback technology element.', e), (this.tech_.isReady_ = !1), e)
throw (h(e), e)
}
}
}),
(e.play = function () {
var t = this,
e = this.options_.Promise || window.Promise
return e
? new e(function (e) {
t.play_(e)
})
: this.play_()
}),
(e.play_ = function (e) {
var t = this
this.playCallbacks_.push((e = void 0 === e ? Et : e))
e = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()))
if ((this.waitToPlay_ && (this.off(['ready', 'loadstart'], this.waitToPlay_), (this.waitToPlay_ = null)), !this.isReady_ || !e))
return (
(this.waitToPlay_ = function (e) {
t.play_()
}),
this.one(['ready', 'loadstart'], this.waitToPlay_),
void (e || (!V && !q) || this.load())
)
e = this.techGet_('play')
null === e ? this.runPlayTerminatedQueue_() : this.runPlayCallbacks_(e)
}),
(e.runPlayTerminatedQueue_ = function () {
var e = this.playTerminatedQueue_.slice(0)
;(this.playTerminatedQueue_ = []),
e.forEach(function (e) {
e()
})
}),
(e.runPlayCallbacks_ = function (t) {
var e = this.playCallbacks_.slice(0)
;(this.playCallbacks_ = []),
(this.playTerminatedQueue_ = []),
e.forEach(function (e) {
e(t)
})
}),
(e.pause = function () {
this.techCall_('pause')
}),
(e.paused = function () {
return !1 !== this.techGet_('paused')
}),
(e.played = function () {
return this.techGet_('played') || vt(0, 0)
}),
(e.scrubbing = function (e) {
if ('undefined' == typeof e) return this.scrubbing_
;(this.scrubbing_ = !!e), this.techCall_('setScrubbing', this.scrubbing_), e ? this.addClass('vjs-scrubbing') : this.removeClass('vjs-scrubbing')
}),
(e.currentTime = function (e) {
return 'undefined' != typeof e
? (e < 0 && (e = 0),
this.isReady_ && !this.changingSrc_ && this.tech_ && this.tech_.isReady_
? (this.techCall_('setCurrentTime', e), void (this.cache_.initTime = 0))
: ((this.cache_.initTime = e), this.off('canplay', this.boundApplyInitTime_), void this.one('canplay', this.boundApplyInitTime_)))
: ((this.cache_.currentTime = this.techGet_('currentTime') || 0), this.cache_.currentTime)
}),
(e.applyInitTime_ = function () {
this.currentTime(this.cache_.initTime)
}),
(e.duration = function (e) {
if (void 0 === e) return void 0 !== this.cache_.duration ? this.cache_.duration : NaN
;(e = (e = parseFloat(e)) < 0 ? 1 / 0 : e) !== this.cache_.duration &&
((this.cache_.duration = e) === 1 / 0 ? this.addClass('vjs-live') : this.removeClass('vjs-live'), isNaN(e) || this.trigger('durationchange'))
}),
(e.remainingTime = function () {
return this.duration() - this.currentTime()
}),
(e.remainingTimeDisplay = function () {
return Math.floor(this.duration()) - Math.floor(this.currentTime())
}),
(e.buffered = function () {
var e
return (e = !(e = this.techGet_('buffered')) || !e.length ? vt(0, 0) : e)
}),
(e.bufferedPercent = function () {
return _t(this.buffered(), this.duration())
}),
(e.bufferedEnd = function () {
var e = this.buffered(),
t = this.duration(),
e = e.end(e.length - 1)
return (e = t < e ? t : e)
}),
(e.volume = function (e) {
var t
return void 0 !== e
? ((t = Math.max(0, Math.min(1, parseFloat(e)))), (this.cache_.volume = t), this.techCall_('setVolume', t), void (0 < t && this.lastVolume_(t)))
: ((t = parseFloat(this.techGet_('volume'))), isNaN(t) ? 1 : t)
}),
(e.muted = function (e) {
if (void 0 === e) return this.techGet_('muted') || !1
this.techCall_('setMuted', e)
}),
(e.defaultMuted = function (e) {
return void 0 !== e ? this.techCall_('setDefaultMuted', e) : this.techGet_('defaultMuted') || !1
}),
(e.lastVolume_ = function (e) {
if (void 0 === e || 0 === e) return this.cache_.lastVolume
this.cache_.lastVolume = e
}),
(e.supportsFullScreen = function () {
return this.techGet_('supportsFullScreen') || !1
}),
(e.isFullscreen = function (e) {
if (void 0 === e) return this.isFullscreen_
var t = this.isFullscreen_
;(this.isFullscreen_ = Boolean(e)), this.isFullscreen_ !== t && this.fsApi_.prefixed && this.trigger('fullscreenchange'), this.toggleFullscreenClass_()
}),
(e.requestFullscreen = function (s) {
var e = this.options_.Promise || window.Promise
if (e) {
var o = this
return new e(function (e, i) {
function n() {
o.off('fullscreenerror', r), o.off('fullscreenchange', t)
}
function t() {
n(), e()
}
function r(e, t) {
n(), i(t)
}
o.one('fullscreenchange', t), o.one('fullscreenerror', r)
var a = o.requestFullscreenHelper_(s)
a && (a.then(n, n), a.then(e, i))
})
}
return this.requestFullscreenHelper_()
}),
(e.requestFullscreenHelper_ = function (e) {
var t = this
if ((this.fsApi_.prefixed || ((i = (this.options_.fullscreen && this.options_.fullscreen.options) || {}), void 0 !== e && (i = e)), this.fsApi_.requestFullscreen)) {
var i = this.el_[this.fsApi_.requestFullscreen](i)
return (
i &&
i.then(
function () {
return t.isFullscreen(!0)
},
function () {
return t.isFullscreen(!1)
}
),
i
)
}
this.tech_.supportsFullScreen() && !0 == !this.options_.preferFullWindow ? this.techCall_('enterFullScreen') : this.enterFullWindow()
}),
(e.exitFullscreen = function () {
var e = this.options_.Promise || window.Promise
if (e) {
var s = this
return new e(function (e, i) {
function n() {
s.off('fullscreenerror', r), s.off('fullscreenchange', t)
}
function t() {
n(), e()
}
function r(e, t) {
n(), i(t)
}
s.one('fullscreenchange', t), s.one('fullscreenerror', r)
var a = s.exitFullscreenHelper_()
a && (a.then(n, n), a.then(e, i))
})
}
return this.exitFullscreenHelper_()
}),
(e.exitFullscreenHelper_ = function () {
var e = this
if (this.fsApi_.requestFullscreen) {
var t = document[this.fsApi_.exitFullscreen]()
return (
t &&
Et(
t.then(function () {
return e.isFullscreen(!1)
})
),
t
)
}
this.tech_.supportsFullScreen() && !0 == !this.options_.preferFullWindow ? this.techCall_('exitFullScreen') : this.exitFullWindow()
}),
(e.enterFullWindow = function () {
this.isFullscreen(!0),
(this.isFullWindow = !0),
(this.docOrigOverflow = document.documentElement.style.overflow),
Be(document, 'keydown', this.boundFullWindowOnEscKey_),
(document.documentElement.style.overflow = 'hidden'),
te(document.body, 'vjs-full-window'),
this.trigger('enterFullWindow')
}),
(e.fullWindowOnEscKey = function (e) {
ht.isEventKey(e, 'Esc') && !0 === this.isFullscreen() && (this.isFullWindow ? this.exitFullWindow() : this.exitFullscreen())
}),
(e.exitFullWindow = function () {
this.isFullscreen(!1),
(this.isFullWindow = !1),
Fe(document, 'keydown', this.boundFullWindowOnEscKey_),
(document.documentElement.style.overflow = this.docOrigOverflow),
ie(document.body, 'vjs-full-window'),
this.trigger('exitFullWindow')
}),
(e.disablePictureInPicture = function (e) {
if (void 0 === e) return this.techGet_('disablePictureInPicture')
this.techCall_('setDisablePictureInPicture', e), (this.options_.disablePictureInPicture = e), this.trigger('disablepictureinpicturechanged')
}),
(e.isInPictureInPicture = function (e) {
return void 0 !== e ? ((this.isInPictureInPicture_ = !!e), void this.togglePictureInPictureClass_()) : !!this.isInPictureInPicture_
}),
(e.requestPictureInPicture = function () {
if ('pictureInPictureEnabled' in document && !1 === this.disablePictureInPicture()) return this.techGet_('requestPictureInPicture')
}),
(e.exitPictureInPicture = function () {
if ('pictureInPictureEnabled' in document) return document.exitPictureInPicture()
}),
(e.handleKeyDown = function (e) {
var t = this.options_.userActions
t &&
t.hotkeys &&
((function (e) {
var t = e.tagName.toLowerCase()
if (e.isContentEditable) return !0
if ('input' === t) return -1 === ['button', 'checkbox', 'hidden', 'radio', 'reset', 'submit'].indexOf(e.type)
return -1 !== ['textarea'].indexOf(t)
})(this.el_.ownerDocument.activeElement) ||
('function' == typeof t.hotkeys ? t.hotkeys.call(this, e) : this.handleHotkeys(e)))
}),
(e.handleHotkeys = function (e) {
var t = this.options_.userActions ? this.options_.userActions.hotkeys : {},
i = t.fullscreenKey,
n = t.muteKey,
n =
void 0 === n
? function (e) {
return ht.isEventKey(e, 'm')
}
: n,
t = t.playPauseKey,
t =
void 0 === t
? function (e) {
return ht.isEventKey(e, 'k') || ht.isEventKey(e, 'Space')
}
: t
;(void 0 === i
? function (e) {
return ht.isEventKey(e, 'f')
}
: i
).call(this, e)
? (e.preventDefault(), e.stopPropagation(), (i = pt.getComponent('FullscreenToggle')), !1 !== document[this.fsApi_.fullscreenEnabled] && i.prototype.handleClick.call(this, e))
: n.call(this, e)
? (e.preventDefault(), e.stopPropagation(), pt.getComponent('MuteToggle').prototype.handleClick.call(this, e))
: t.call(this, e) && (e.preventDefault(), e.stopPropagation(), pt.getComponent('PlayToggle').prototype.handleClick.call(this, e))
}),
(e.canPlayType = function (e) {
for (var t, i = 0, n = this.options_.techOrder; i < n.length; i++) {
var r = n[i],
a = ji.getTech(r)
if ((a = a || pt.getComponent(r))) {
if (a.isSupported() && (t = a.canPlayType(e))) return t
} else h.error('The "' + r + '" tech is undefined. Skipped browser support check for that tech.')
}
return ''
}),
(e.selectSource = function (e) {
function t(e, i, n) {
var r
return (
e.some(function (t) {
return i.some(function (e) {
if ((r = n(t, e))) return !0
})
}),
r
)
}
var i,
n = this,
r = this.options_.techOrder
.map(function (e) {
return [e, ji.getTech(e)]
})
.filter(function (e) {
var t = e[0],
e = e[1]
return e ? e.isSupported() : (h.error('The "' + t + '" tech is undefined. Skipped browser support check for that tech.'), !1)
}),
a = function (e, t) {
var i = e[0]
if (e[1].canPlaySource(t, n.options_[i.toLowerCase()])) return { source: t, tech: i }
},
a = this.options_.sourceOrder
? t(
e,
r,
((i = a),
function (e, t) {
return i(t, e)
})
)
: t(r, e, a)
return a || !1
}),
(e.handleSrc_ = function (e, n) {
var r = this
if ('undefined' == typeof e) return this.cache_.src || ''
this.resetRetryOnError_ && this.resetRetryOnError_()
var t,
i,
a = Ji(e)
a.length
? ((this.changingSrc_ = !0),
n || (this.cache_.sources = a),
this.updateSourceCaches_(a[0]),
Wi(this, a[0], function (e, t) {
var i
return (
(r.middleware_ = t),
n || (r.cache_.sources = a),
r.updateSourceCaches_(e),
r.src_(e)
? 1 < a.length
? r.handleSrc_(a.slice(1))
: ((r.changingSrc_ = !1),
r.setTimeout(function () {
this.error({ code: 4, message: this.options_.notSupportedMessage })
}, 0),
void r.triggerReady())
: ((t = t),
(i = r.tech_),
void t.forEach(function (e) {
return e.setTech && e.setTech(i)
}))
)
}),
this.options_.retryOnError &&
1 < a.length &&
((i = function () {
r.off('error', t)
}),
this.one(
'error',
(t = function () {
r.error(null), r.handleSrc_(a.slice(1), !0)
})
),
this.one('playing', i),
(this.resetRetryOnError_ = function () {
r.off('error', t), r.off('playing', i)
})))
: this.setTimeout(function () {
this.error({ code: 4, message: this.options_.notSupportedMessage })
}, 0)
}),
(e.src = function (e) {
return this.handleSrc_(e, !1)
}),
(e.src_ = function (e) {
var t,
i,
n = this,
r = this.selectSource([e])
return (
!r ||
((t = r.tech),
(i = this.techName_),
ut(t) !== ut(i)
? ((this.changingSrc_ = !0),
this.loadTech_(r.tech, r.source),
this.tech_.ready(function () {
n.changingSrc_ = !1
}))
: this.ready(function () {
this.tech_.constructor.prototype.hasOwnProperty('setSource') ? this.techCall_('setSource', e) : this.techCall_('src', e.src), (this.changingSrc_ = !1)
}, !0),
!1)
)
}),
(e.load = function () {
this.techCall_('load')
}),
(e.reset = function () {
var e = this,
t = this.options_.Promise || window.Promise
this.paused() || !t
? this.doReset_()
: Et(
this.play().then(function () {
return e.doReset_()
})
)
}),
(e.doReset_ = function () {
this.tech_ && this.tech_.clearTracks('text'),
this.resetCache_(),
this.poster(''),
this.loadTech_(this.options_.techOrder[0], null),
this.techCall_('reset'),
this.resetControlBarUI_(),
it(this) && this.trigger('playerreset')
}),
(e.resetControlBarUI_ = function () {
this.resetProgressBar_(), this.resetPlaybackRate_(), this.resetVolumeBar_()
}),
(e.resetProgressBar_ = function () {
this.currentTime(0)
var e = this.controlBar || {},
t = e.durationDisplay,
e = e.remainingTimeDisplay
t && t.updateContent(), e && e.updateContent()
}),
(e.resetPlaybackRate_ = function () {
this.playbackRate(this.defaultPlaybackRate()), this.handleTechRateChange_()
}),
(e.resetVolumeBar_ = function () {
this.volume(1), this.trigger('volumechange')
}),
(e.currentSources = function () {
var e = this.currentSource(),
t = []
return 0 !== Object.keys(e).length && t.push(e), this.cache_.sources || t
}),
(e.currentSource = function () {
return this.cache_.source || {}
}),
(e.currentSrc = function () {
return (this.currentSource() && this.currentSource().src) || ''
}),
(e.currentType = function () {
return (this.currentSource() && this.currentSource().type) || ''
}),
(e.preload = function (e) {
return void 0 !== e ? (this.techCall_('setPreload', e), void (this.options_.preload = e)) : this.techGet_('preload')
}),
(e.autoplay = function (e) {
if (void 0 === e) return this.options_.autoplay || !1
var t
;('string' == typeof e && /(any|play|muted)/.test(e)) || (!0 === e && this.options_.normalizeAutoplay)
? ((this.options_.autoplay = e), this.manualAutoplay_('string' == typeof e ? e : 'play'), (t = !1))
: (this.options_.autoplay = !!e),
(t = 'undefined' == typeof t ? this.options_.autoplay : t),
this.tech_ && this.techCall_('setAutoplay', t)
}),
(e.playsinline = function (e) {
return void 0 !== e ? (this.techCall_('setPlaysinline', e), (this.options_.playsinline = e), this) : this.techGet_('playsinline')
}),
(e.loop = function (e) {
return void 0 !== e ? (this.techCall_('setLoop', e), void (this.options_.loop = e)) : this.techGet_('loop')
}),
(e.poster = function (e) {
if (void 0 === e) return this.poster_
;(e = e || '') !== this.poster_ && ((this.poster_ = e), this.techCall_('setPoster', e), (this.isPosterFromTech_ = !1), this.trigger('posterchange'))
}),
(e.handleTechPosterChange_ = function () {
var e
;(this.poster_ && !this.options_.techCanOverridePoster) ||
!this.tech_ ||
!this.tech_.poster ||
((e = this.tech_.poster() || '') !== this.poster_ && ((this.poster_ = e), (this.isPosterFromTech_ = !0), this.trigger('posterchange')))
}),
(e.controls = function (e) {
if (void 0 === e) return !!this.controls_
this.controls_ !== (e = !!e) &&
((this.controls_ = e),
this.usingNativeControls() && this.techCall_('setControls', e),
this.controls_
? (this.removeClass('vjs-controls-disabled'),
this.addClass('vjs-controls-enabled'),
this.trigger('controlsenabled'),
this.usingNativeControls() || this.addTechControlsListeners_())
: (this.removeClass('vjs-controls-enabled'),
this.addClass('vjs-controls-disabled'),
this.trigger('controlsdisabled'),
this.usingNativeControls() || this.removeTechControlsListeners_()))
}),
(e.usingNativeControls = function (e) {
if (void 0 === e) return !!this.usingNativeControls_
this.usingNativeControls_ !== (e = !!e) &&
((this.usingNativeControls_ = e),
this.usingNativeControls_
? (this.addClass('vjs-using-native-controls'), this.trigger('usingnativecontrols'))
: (this.removeClass('vjs-using-native-controls'), this.trigger('usingcustomcontrols')))
}),
(e.error = function (t) {
var i = this
if (void 0 === t) return this.error_ || null
if (
(a('beforeerror').forEach(function (e) {
e = e(i, t)
;(T(e) && !Array.isArray(e)) || 'string' == typeof e || 'number' == typeof e || null === e
? (t = e)
: i.log.error('please return a value that MediaError expects in beforeerror hooks')
}),
this.options_.suppressNotSupportedError && t && 4 === t.code)
) {
var e = function () {
this.error(t)
}
return (
(this.options_.suppressNotSupportedError = !1),
this.any(['click', 'touchstart'], e),
void this.one('loadstart', function () {
this.off(['click', 'touchstart'], e)
})
)
}
if (null === t) return (this.error_ = t), this.removeClass('vjs-error'), void (this.errorDisplay && this.errorDisplay.close())
;(this.error_ = new bt(t)),
this.addClass('vjs-error'),
h.error('(CODE:' + this.error_.code + ' ' + bt.errorTypes[this.error_.code] + ')', this.error_.message, this.error_),
this.trigger('error'),
a('error').forEach(function (e) {
return e(i, i.error_)
})
}),
(e.reportUserActivity = function (e) {
this.userActivity_ = !0
}),
(e.userActive = function (e) {
if (void 0 === e) return this.userActive_
if ((e = !!e) !== this.userActive_) {
if (((this.userActive_ = e), this.userActive_))
return (this.userActivity_ = !0), this.removeClass('vjs-user-inactive'), this.addClass('vjs-user-active'), void this.trigger('useractive')
this.tech_ &&
this.tech_.one('mousemove', function (e) {
e.stopPropagation(), e.preventDefault()
}),
(this.userActivity_ = !1),
this.removeClass('vjs-user-active'),
this.addClass('vjs-user-inactive'),
this.trigger('userinactive')
}
}),
(e.listenForUserActivity_ = function () {
var t,
i,
n,
r = Ve(this, this.reportUserActivity),
e = function (e) {
r(), this.clearInterval(t)
}
this.on('mousedown', function () {
r(), this.clearInterval(t), (t = this.setInterval(r, 250))
}),
this.on('mousemove', function (e) {
;(e.screenX === i && e.screenY === n) || ((i = e.screenX), (n = e.screenY), r())
}),
this.on('mouseup', e),
this.on('mouseleave', e)
var a,
e = this.getChild('controlBar')
!e ||
q ||
A ||
(e.on('mouseenter', function (e) {
0 !== this.player().options_.inactivityTimeout && (this.player().cache_.inactivityTimeout = this.player().options_.inactivityTimeout),
(this.player().options_.inactivityTimeout = 0)
}),
e.on('mouseleave', function (e) {
this.player().options_.inactivityTimeout = this.player().cache_.inactivityTimeout
})),
this.on('keydown', r),
this.on('keyup', r),
this.setInterval(function () {
var e
this.userActivity_ &&
((this.userActivity_ = !1),
this.userActive(!0),
this.clearTimeout(a),
(e = this.options_.inactivityTimeout) <= 0 ||
(a = this.setTimeout(function () {
this.userActivity_ || this.userActive(!1)
}, e)))
}, 250)
}),
(e.playbackRate = function (e) {
if (void 0 === e) return this.tech_ && this.tech_.featuresPlaybackRate ? this.cache_.lastPlaybackRate || this.techGet_('playbackRate') : 1
this.techCall_('setPlaybackRate', e)
}),
(e.defaultPlaybackRate = function (e) {
return void 0 !== e ? this.techCall_('setDefaultPlaybackRate', e) : this.tech_ && this.tech_.featuresPlaybackRate ? this.techGet_('defaultPlaybackRate') : 1
}),
(e.isAudio = function (e) {
if (void 0 === e) return !!this.isAudio_
this.isAudio_ = !!e
}),
(e.enableAudioOnlyUI_ = function () {
var t = this
this.addClass('vjs-audio-only-mode')
var e = this.children(),
i = this.getChild('ControlBar'),
n = i && i.currentHeight()
e.forEach(function (e) {
e !== i && e.el_ && !e.hasClass('vjs-hidden') && (e.hide(), t.audioOnlyCache_.hiddenChildren.push(e))
}),
(this.audioOnlyCache_.playerHeight = this.currentHeight()),
this.height(n),
this.trigger('audioonlymodechange')
}),
(e.disableAudioOnlyUI_ = function () {
this.removeClass('vjs-audio-only-mode'),
this.audioOnlyCache_.hiddenChildren.forEach(function (e) {
return e.show()
}),
this.height(this.audioOnlyCache_.playerHeight),
this.trigger('audioonlymodechange')
}),
(e.audioOnlyMode = function (e) {
var t = this
if ('boolean' != typeof e || e === this.audioOnlyMode_) return this.audioOnlyMode_
this.audioOnlyMode_ = e
var i = this.options_.Promise || window.Promise
if (i) {
if (e) {
var n = []
return (
this.isInPictureInPicture() && n.push(this.exitPictureInPicture()),
this.isFullscreen() && n.push(this.exitFullscreen()),
this.audioPosterMode() && n.push(this.audioPosterMode(!1)),
i.all(n).then(function () {
return t.enableAudioOnlyUI_()
})
)
}
return i.resolve().then(function () {
return t.disableAudioOnlyUI_()
})
}
e ? (this.isInPictureInPicture() && this.exitPictureInPicture(), this.isFullscreen() && this.exitFullscreen(), this.enableAudioOnlyUI_()) : this.disableAudioOnlyUI_()
}),
(e.enablePosterModeUI_ = function () {
;(this.tech_ && this.tech_).hide(), this.addClass('vjs-audio-poster-mode'), this.trigger('audiopostermodechange')
}),
(e.disablePosterModeUI_ = function () {
;(this.tech_ && this.tech_).show(), this.removeClass('vjs-audio-poster-mode'), this.trigger('audiopostermodechange')
}),
(e.audioPosterMode = function (e) {
var t = this
if ('boolean' != typeof e || e === this.audioPosterMode_) return this.audioPosterMode_
this.audioPosterMode_ = e
var i = this.options_.Promise || window.Promise
return i
? e
? (this.audioOnlyMode() ? this.audioOnlyMode(!1) : i.resolve()).then(function () {
t.enablePosterModeUI_()
})
: i.resolve().then(function () {
t.disablePosterModeUI_()
})
: e
? (this.audioOnlyMode() && this.audioOnlyMode(!1), void this.enablePosterModeUI_())
: void this.disablePosterModeUI_()
}),
(e.addTextTrack = function (e, t, i) {
if (this.tech_) return this.tech_.addTextTrack(e, t, i)
}),
(e.addRemoteTextTrack = function (e, t) {
if (this.tech_) return this.tech_.addRemoteTextTrack(e, t)
}),
(e.removeRemoteTextTrack = function (e) {
var t = (t = (e = void 0 === e ? {} : e).track) || e
if (this.tech_) return this.tech_.removeRemoteTextTrack(t)
}),
(e.getVideoPlaybackQuality = function () {
return this.techGet_('getVideoPlaybackQuality')
}),
(e.videoWidth = function () {
return (this.tech_ && this.tech_.videoWidth && this.tech_.videoWidth()) || 0
}),
(e.videoHeight = function () {
return (this.tech_ && this.tech_.videoHeight && this.tech_.videoHeight()) || 0
}),
(e.language = function (e) {
if (void 0 === e) return this.language_
this.language_ !== String(e).toLowerCase() && ((this.language_ = String(e).toLowerCase()), it(this) && this.trigger('languagechange'))
}),
(e.languages = function () {
return lt(o.prototype.options_.languages, this.languages_)
}),
(e.toJSON = function () {
var e = lt(this.options_),
t = e.tracks
e.tracks = []
for (var i = 0; i < t.length; i++) {
var n = t[i]
;((n = lt(n)).player = void 0), (e.tracks[i] = n)
}
return e
}),
(e.createModal = function (e, t) {
var i = this
;(t = t || {}).content = e || ''
var n = new At(this, t)
return (
this.addChild(n),
n.on('dispose', function () {
i.removeChild(n)
}),
n.open(),
n
)
}),
(e.updateCurrentBreakpoint_ = function () {
if (this.responsive())
for (var e = this.currentBreakpoint(), t = this.currentWidth(), i = 0; i < Nn.length; i++) {
var n = Nn[i]
if (t <= this.breakpoints_[n]) {
if (e === n) return
e && this.removeClass(Un[e]), this.addClass(Un[n]), (this.breakpoint_ = n)
break
}
}
}),
(e.removeCurrentBreakpoint_ = function () {
var e = this.currentBreakpointClass()
;(this.breakpoint_ = ''), e && this.removeClass(e)
}),
(e.breakpoints = function (e) {
return void 0 === e || ((this.breakpoint_ = ''), (this.breakpoints_ = b({}, Bn, e)), this.updateCurrentBreakpoint_()), b(this.breakpoints_)
}),
(e.responsive = function (e) {
return void 0 === e
? this.responsive_
: (e = Boolean(e)) !== this.responsive_
? ((this.responsive_ = e)
? (this.on('playerresize', this.boundUpdateCurrentBreakpoint_), this.updateCurrentBreakpoint_())
: (this.off('playerresize', this.boundUpdateCurrentBreakpoint_), this.removeCurrentBreakpoint_()),
e)
: void 0
}),
(e.currentBreakpoint = function () {
return this.breakpoint_
}),
(e.currentBreakpointClass = function () {
return Un[this.breakpoint_] || ''
}),
(e.loadMedia = function (e, t) {
var i,
n,
r,
a = this
e &&
'object' == typeof e &&
(this.reset(),
(this.cache_.media = lt(e)),
(i = (r = this.cache_.media).artwork),
(n = r.poster),
(e = r.src),
(r = r.textTracks),
!i && n && (this.cache_.media.artwork = [{ src: n, type: $i(n) }]),
e && this.src(e),
n && this.poster(n),
Array.isArray(r) &&
r.forEach(function (e) {
return a.addRemoteTextTrack(e, !1)
}),
this.ready(t))
}),
(e.getMedia = function () {
if (this.cache_.media) return lt(this.cache_.media)
var e = this.poster(),
t = {
src: this.currentSources(),
textTracks: Array.prototype.map.call(this.remoteTextTracks(), function (e) {
return { kind: e.kind, label: e.label, language: e.language, src: e.src }
}),
}
return e && ((t.poster = e), (t.artwork = [{ src: t.poster, type: $i(t.poster) }])), t
}),
(o.getTagSettings = function (e) {
var t,
i = { sources: [], tracks: [] },
n = ae(e),
r = n['data-setup']
if (
(ee(e, 'vjs-fill') && (n.fill = !0),
ee(e, 'vjs-fluid') && (n.fluid = !0),
null !== r && ((r = (t = St(r || '{}'))[0]), (t = t[1]), r && h.error(r), b(n, t)),
b(i, n),
e.hasChildNodes())
)
for (var a = e.childNodes, s = 0, o = a.length; s < o; s++) {
var u = a[s],
l = u.nodeName.toLowerCase()
'source' === l ? i.sources.push(ae(u)) : 'track' === l && i.tracks.push(ae(u))
}
return i
}),
(e.flexNotSupported_ = function () {
var e = document.createElement('i')
return !('flexBasis' in e.style || 'webkitFlexBasis' in e.style || 'mozFlexBasis' in e.style || 'msFlexBasis' in e.style || 'msFlexOrder' in e.style)
}),
(e.debug = function (e) {
if (void 0 === e) return this.debugEnabled_
e
? (this.trigger('debugon'), (this.previousLogLevel_ = this.log.level), this.log.level('debug'), (this.debugEnabled_ = !0))
: (this.trigger('debugoff'), this.log.level(this.previousLogLevel_), (this.previousLogLevel_ = void 0), (this.debugEnabled_ = !1))
}),
(e.playbackRates = function (e) {
if (void 0 === e) return this.cache_.playbackRates
Array.isArray(e) &&
e.every(function (e) {
return 'number' == typeof e
}) &&
((this.cache_.playbackRates = e), this.trigger('playbackrateschange'))
}),
o
)
})(pt)
oi.names.forEach(function (e) {
var t = oi[e]
Fn.prototype[t.getterName] = function () {
return this.tech_ ? this.tech_[t.getterName]() : ((this[t.privateName] = this[t.privateName] || new t.ListClass()), this[t.privateName])
}
}),
(Fn.prototype.crossorigin = Fn.prototype.crossOrigin),
(Fn.players = {})
k = window.navigator
;(Fn.prototype.options_ = {
techOrder: ji.defaultTechOrder_,
html5: {},
inactivityTimeout: 2e3,
playbackRates: [],
liveui: !1,
children: ['mediaLoader', 'posterImage', 'textTrackDisplay', 'loadingSpinner', 'bigPlayButton', 'liveTracker', 'controlBar', 'errorDisplay', 'textTrackSettings', 'resizeManager'],
language: (k && ((k.languages && k.languages[0]) || k.userLanguage || k.language)) || 'en',
languages: {},
notSupportedMessage: 'No compatible source was found for this media.',
normalizeAutoplay: !1,
fullscreen: { options: { navigationUI: 'hide' } },
breakpoints: {},
responsive: !1,
audioOnlyMode: !1,
audioPosterMode: !1,
}),
['ended', 'seeking', 'seekable', 'networkState', 'readyState'].forEach(function (e) {
Fn.prototype[e] = function () {
return this.techGet_(e)
}
}),
Mn.forEach(function (e) {
Fn.prototype['handleTech' + ut(e) + '_'] = function () {
return this.trigger(e)
}
}),
pt.registerComponent('Player', Fn)
var jn = m(function (i) {
function n(e, t) {
return (
(i.exports = n =
Object.setPrototypeOf ||
function (e, t) {
return (e.__proto__ = t), e
}),
n(e, t)
)
}
i.exports = n
})
function Hn(e) {
return Qn.hasOwnProperty(e)
}
function qn(e) {
return Hn(e) ? Qn[e] : void 0
}
function Vn(e, t, i) {
;(i = (i ? 'before' : '') + 'pluginsetup'), e.trigger(i, t), e.trigger(i + ':' + t.name, t)
}
function Wn(t, i) {
function n() {
Vn(this, { name: t, plugin: i, instance: null }, !0)
var e = i.apply(this, arguments)
return $n(this, t), Vn(this, { name: t, plugin: i, instance: e }), e
}
return (
Object.keys(i).forEach(function (e) {
n[e] = i[e]
}),
n
)
}
function Gn(r, a) {
return (
(a.prototype.name = r),
function () {
Vn(this, { name: r, plugin: a, instance: null }, !0)
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
var n = Xn(a, [this].concat(t))
return (
(this[r] = function () {
return n
}),
Vn(this, n.getEventHash()),
n
)
}
)
}
var zn = function () {
if ('undefined' == typeof Reflect || !Reflect.construct) return !1
if (Reflect.construct.sham) return !1
if ('function' == typeof Proxy) return !0
try {
return Date.prototype.toString.call(Reflect.construct(Date, [], function () {})), !0
} catch (e) {
return !1
}
},
Xn = m(function (n) {
function r(e, t, i) {
return (
zn()
? (n.exports = r = Reflect.construct)
: (n.exports = r =
function (e, t, i) {
var n = [null]
n.push.apply(n, t)
n = new (Function.bind.apply(e, n))()
return i && jn(n, i.prototype), n
}),
r.apply(null, arguments)
)
}
n.exports = r
}),
Kn = 'plugin',
Yn = 'activePlugins_',
Qn = {},
$n = function (e, t) {
;(e[Yn] = e[Yn] || {}), (e[Yn][t] = !0)
},
Jn = (function () {
function i(e) {
if (this.constructor === i) throw new Error('Plugin must be sub-classed; not directly instantiated.')
;(this.player = e),
this.log || (this.log = this.player.log.createLogger(this.name)),
rt(this),
delete this.trigger,
st(this, this.constructor.defaultState),
$n(e, this.name),
(this.dispose = this.dispose.bind(this)),
e.on('dispose', this.dispose)
}
var e = i.prototype
return (
(e.version = function () {
return this.constructor.VERSION
}),
(e.getEventHash = function (e) {
return ((e = void 0 === e ? {} : e).name = this.name), (e.plugin = this.constructor), (e.instance = this), e
}),
(e.trigger = function (e, t) {
return je(this.eventBusEl_, e, this.getEventHash((t = void 0 === t ? {} : t)))
}),
(e.handleStateChanged = function (e) {}),
(e.dispose = function () {
var e = this.name,
t = this.player
this.trigger('dispose'), this.off(), t.off('dispose', this.dispose), (t[Yn][e] = !1), (this.player = this.state = null), (t[e] = Gn(e, Qn[e]))
}),
(i.isBasic = function (e) {
e = 'string' == typeof e ? qn(e) : e
return 'function' == typeof e && !i.prototype.isPrototypeOf(e.prototype)
}),
(i.registerPlugin = function (e, t) {
if ('string' != typeof e) throw new Error('Illegal plugin name, "' + e + '", must be a string, was ' + typeof e + '.')
if (Hn(e)) h.warn('A plugin named "' + e + '" already exists. You may want to avoid re-registering plugins!')
else if (Fn.prototype.hasOwnProperty(e)) throw new Error('Illegal plugin name, "' + e + '", cannot share a name with an existing player method!')
if ('function' != typeof t) throw new Error('Illegal plugin for "' + e + '", must be a function, was ' + typeof t + '.')
return (Qn[e] = t), e !== Kn && (i.isBasic(t) ? (Fn.prototype[e] = Wn(e, t)) : (Fn.prototype[e] = Gn(e, t))), t
}),
(i.deregisterPlugin = function (e) {
if (e === Kn) throw new Error('Cannot de-register base plugin.')
Hn(e) && (delete Qn[e], delete Fn.prototype[e])
}),
(i.getPlugins = function (e) {
var i
return (
(e = void 0 === e ? Object.keys(Qn) : e).forEach(function (e) {
var t = qn(e)
t && ((i = i || {})[e] = t)
}),
i
)
}),
(i.getPluginVersion = function (e) {
e = qn(e)
return (e && e.VERSION) || ''
}),
i
)
})()
;(Jn.getPlugin = qn),
(Jn.BASE_PLUGIN_NAME = Kn),
Jn.registerPlugin(Kn, Jn),
(Fn.prototype.usingPlugin = function (e) {
return !!this[Yn] && !0 === this[Yn][e]
}),
(Fn.prototype.hasPlugin = function (e) {
return !!Hn(e)
})
var Zn = function (e, t) {
if ('function' != typeof t && null !== t) throw new TypeError('Super expression must either be null or a function')
;(e.prototype = Object.create(t && t.prototype, { constructor: { value: e, writable: !0, configurable: !0 } })), t && jn(e, t)
},
er = function (e) {
return 0 === e.indexOf('#') ? e.slice(1) : e
}
function tr(e, t, i) {
if ((r = tr.getPlayer(e))) return t && h.warn('Player "' + e + '" is already initialised. Options will not be applied.'), i && r.ready(i), r
var n = 'string' == typeof e ? Te('#' + er(e)) : e
if (!K(n)) throw new TypeError('The element or ID supplied is not valid. (videojs)')
;(n.ownerDocument.defaultView && n.ownerDocument.body.contains(n)) || h.warn('The element supplied is not included in the DOM'),
!0 === (t = t || {}).restoreEl && (t.restoreEl = (n.parentNode && n.parentNode.hasAttribute('data-vjs-player') ? n.parentNode : n).cloneNode(!0)),
a('beforesetup').forEach(function (e) {
e = e(n, lt(t))
T(e) && !Array.isArray(e) ? (t = lt(t, e)) : h.error('please return an object in beforesetup hooks')
})
var r = new (pt.getComponent('Player'))(n, t, i)
return (
a('setup').forEach(function (e) {
return e(r)
}),
r
)
}
;(tr.hooks_ = i),
(tr.hooks = a),
(tr.hook = function (e, t) {
a(e, t)
}),
(tr.hookOnce = function (i, e) {
a(
i,
[].concat(e).map(function (t) {
return function e() {
return n(i, e), t.apply(void 0, arguments)
}
})
)
}),
(tr.removeHook = n),
!0 !== window.VIDEOJS_NO_DYNAMIC_STYLE &&
X() &&
((ar = Te('.vjs-styles-defaults')) ||
((ar = xe('vjs-styles-defaults')),
(k = Te('head')) && k.insertBefore(ar, k.firstChild),
Ae(ar, '\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid:not(.vjs-audio-only-mode) {\n padding-top: 56.25%\n }\n '))),
Ce(1, tr),
(tr.VERSION = u),
(tr.options = Fn.prototype.options_),
(tr.getPlayers = function () {
return Fn.players
}),
(tr.getPlayer = function (e) {
var t = Fn.players
if ('string' == typeof e) {
var i = er(e),
n = t[i]
if (n) return n
i = Te('#' + i)
} else i = e
if (K(i)) {
;(e = i.player), (i = i.playerId)
if (e || t[i]) return e || t[i]
}
}),
(tr.getAllPlayers = function () {
return Object.keys(Fn.players)
.map(function (e) {
return Fn.players[e]
})
.filter(Boolean)
}),
(tr.players = Fn.players),
(tr.getComponent = pt.getComponent),
(tr.registerComponent = function (e, t) {
ji.isTech(t) && h.warn('The ' + e + ' tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)'), pt.registerComponent.call(pt, e, t)
}),
(tr.getTech = ji.getTech),
(tr.registerTech = ji.registerTech),
(tr.use = function (e, t) {
;(Hi[e] = Hi[e] || []), Hi[e].push(t)
}),
Object.defineProperty(tr, 'middleware', { value: {}, writeable: !1, enumerable: !0 }),
Object.defineProperty(tr.middleware, 'TERMINATOR', { value: Vi, writeable: !1, enumerable: !0 }),
(tr.browser = W),
(tr.TOUCH_ENABLED = F),
(tr.extend = function (e, t) {
var i,
n = function () {
e.apply(this, arguments)
},
r = {}
for (i in ('object' == typeof (t = void 0 === t ? {} : t) ? (t.constructor !== Object.prototype.constructor && (n = t.constructor), (r = t)) : 'function' == typeof t && (n = t),
Zn(n, e),
e && (n.super_ = e),
r))
r.hasOwnProperty(i) && (n.prototype[i] = r[i])
return n
}),
(tr.mergeOptions = lt),
(tr.bind = Ve),
(tr.registerPlugin = Jn.registerPlugin),
(tr.deregisterPlugin = Jn.deregisterPlugin),
(tr.plugin = function (e, t) {
return h.warn('videojs.plugin() is deprecated; use videojs.registerPlugin() instead'), Jn.registerPlugin(e, t)
}),
(tr.getPlugins = Jn.getPlugins),
(tr.getPlugin = Jn.getPlugin),
(tr.getPluginVersion = Jn.getPluginVersion),
(tr.addLanguage = function (e, t) {
var i
return (e = ('' + e).toLowerCase()), (tr.options.languages = lt(tr.options.languages, (((i = {})[e] = t), i))), tr.options.languages[e]
}),
(tr.log = h),
(tr.createLogger = p),
(tr.createTimeRange = tr.createTimeRanges = vt),
(tr.formatTime = ln),
(tr.setFormatTime = function (e) {
un = e
}),
(tr.resetFormatTime = function () {
un = on
}),
(tr.parseUrl = Mt),
(tr.isCrossOrigin = Ut),
(tr.EventTarget = ze),
(tr.on = Be),
(tr.one = He),
(tr.off = Fe),
(tr.trigger = je),
(tr.xhr = Jt),
(tr.TextTrack = ri),
(tr.AudioTrack = x),
(tr.VideoTrack = U),
['isEl', 'isTextNode', 'createEl', 'hasClass', 'addClass', 'removeClass', 'toggleClass', 'setAttributes', 'getAttributes', 'emptyEl', 'appendContent', 'insertContent'].forEach(function (e) {
tr[e] = function () {
return h.warn('videojs.' + e + '() is deprecated; use videojs.dom.' + e + '() instead'), we[e].apply(null, arguments)
}
}),
(tr.computedStyle = w),
(tr.dom = we),
(tr.url = zt),
(tr.defineLazyProperty = An),
tr.addLanguage('en', { 'Non-Fullscreen': 'Exit Fullscreen' })
function ir(e, t) {
if (/^[a-z]+:/i.test(t)) return t
;/^data:/.test(e) && (e = (window.location && window.location.href) || '')
var i = 'function' == typeof window.URL,
n = /^\/\//.test(e),
r = !window.location && !/\/\//i.test(e)
if ((i ? (e = new window.URL(e, window.location || rr)) : /\/\//i.test(e) || (e = nr.buildAbsoluteURL((window.location && window.location.href) || '', e)), i)) {
i = new URL(t, e)
return r ? i.href.slice(rr.length) : n ? i.href.slice(i.protocol.length) : i.href
}
return nr.buildAbsoluteURL(e, t)
}
var nr = m(function (e, t) {
var i, a, n, r, s
;(i = /^((?:[a-zA-Z0-9+\-.]+:)?)(\/\/[^\/?#]*)?((?:[^\/?#]*\/)*[^;?#]*)?(;[^?#]*)?(\?[^#]*)?(#[^]*)?$/),
(a = /^([^\/?#]*)([^]*)$/),
(n = /(?:\/|^)\.(?=\/)/g),
(r = /(?:\/|^)\.\.\/(?!\.\.\/)[^\/]*(?=\/)/g),
(s = {
buildAbsoluteURL: function (e, t, i) {
if (((i = i || {}), (e = e.trim()), !(t = t.trim()))) {
if (!i.alwaysNormalize) return e
var n = s.parseURL(e)
if (!n) throw new Error('Error trying to parse base URL.')
return (n.path = s.normalizePath(n.path)), s.buildURLFromParts(n)
}
n = s.parseURL(t)
if (!n) throw new Error('Error trying to parse relative URL.')
if (n.scheme) return i.alwaysNormalize ? ((n.path = s.normalizePath(n.path)), s.buildURLFromParts(n)) : t
t = s.parseURL(e)
if (!t) throw new Error('Error trying to parse base URL.')
!t.netLoc && t.path && '/' !== t.path[0] && ((r = a.exec(t.path)), (t.netLoc = r[1]), (t.path = r[2])), t.netLoc && !t.path && (t.path = '/')
var r,
e = { scheme: t.scheme, netLoc: n.netLoc, path: null, params: n.params, query: n.query, fragment: n.fragment }
return (
n.netLoc ||
((e.netLoc = t.netLoc),
'/' !== n.path[0] &&
(n.path
? ((r = (r = t.path).substring(0, r.lastIndexOf('/') + 1) + n.path), (e.path = s.normalizePath(r)))
: ((e.path = t.path), n.params || ((e.params = t.params), n.query || (e.query = t.query))))),
null === e.path && (e.path = i.alwaysNormalize ? s.normalizePath(n.path) : n.path),
s.buildURLFromParts(e)
)
},
parseURL: function (e) {
e = i.exec(e)
return e ? { scheme: e[1] || '', netLoc: e[2] || '', path: e[3] || '', params: e[4] || '', query: e[5] || '', fragment: e[6] || '' } : null
},
normalizePath: function (e) {
for (e = e.split('').reverse().join('').replace(n, ''); e.length !== (e = e.replace(r, '')).length; );
return e.split('').reverse().join('')
},
buildURLFromParts: function (e) {
return e.scheme + e.netLoc + e.path + e.params + e.query + e.fragment
},
}),
(e.exports = s)
}),
rr = 'http://example.com',
ar = (function () {
function e() {
this.listeners = {}
}
var t = e.prototype
return (
(t.on = function (e, t) {
this.listeners[e] || (this.listeners[e] = []), this.listeners[e].push(t)
}),
(t.off = function (e, t) {
if (!this.listeners[e]) return !1
t = this.listeners[e].indexOf(t)
return (this.listeners[e] = this.listeners[e].slice(0)), this.listeners[e].splice(t, 1), -1 < t
}),
(t.trigger = function (e) {
var t = this.listeners[e]
if (t)
if (2 === arguments.length) for (var i = t.length, n = 0; n < i; ++n) t[n].call(this, arguments[1])
else for (var r = Array.prototype.slice.call(arguments, 1), a = t.length, s = 0; s < a; ++s) t[s].apply(this, r)
}),
(t.dispose = function () {
this.listeners = {}
}),
(t.pipe = function (t) {
this.on('data', function (e) {
t.push(e)
})
}),
e
)
})(),
sr = function (e) {
return window.atob ? window.atob(e) : Buffer.from(e, 'base64').toString('binary')
}
function or(e) {
for (var t = sr(e), i = new Uint8Array(t.length), n = 0; n < t.length; n++) i[n] = t.charCodeAt(n)
return i
}
/*! @name m3u8-parser @version 4.7.1 @license Apache-2.0 */ function ur(e) {
var t = /([0-9.]*)?@?([0-9.]*)?/.exec(e || ''),
e = {}
return t[1] && (e.length = parseInt(t[1], 10)), t[2] && (e.offset = parseInt(t[2], 10)), e
}
function lr(e) {
for (var t, i = e.split(new RegExp('(?:^|,)((?:[^=]*)=(?:"[^"]*"|[^,]*))')), n = {}, r = i.length; r--; )
'' !== i[r] &&
(((t = /([^=]*)=(.*)/.exec(i[r]).slice(1))[0] = t[0].replace(/^\s+|\s+$/g, '')),
(t[1] = t[1].replace(/^\s+|\s+$/g, '')),
(t[1] = t[1].replace(/^['"](.*)['"]$/g, '$1')),
(n[t[0]] = t[1]))
return n
}
function cr(t) {
var i = {}
return (
Object.keys(t).forEach(function (e) {
i[
e.toLowerCase().replace(/-(\w)/g, function (e) {
return e[1].toUpperCase()
})
] = t[e]
}),
i
)
}
function dr(e) {
var t,
i,
n,
r,
a = e.serverControl,
s = e.targetDuration,
o = e.partTargetDuration
a &&
((t = '#EXT-X-SERVER-CONTROL'),
(i = 'holdBack'),
(n = 'partHoldBack'),
(r = s && 3 * s),
(e = o && 2 * o),
s && !a.hasOwnProperty(i) && ((a[i] = r), this.trigger('info', { message: t + ' defaulting HOLD-BACK to targetDuration * 3 (' + r + ').' })),
r && a[i] < r && (this.trigger('warn', { message: t + ' clamping HOLD-BACK (' + a[i] + ') to targetDuration * 3 (' + r + ')' }), (a[i] = r)),
o && !a.hasOwnProperty(n) && ((a[n] = 3 * o), this.trigger('info', { message: t + ' defaulting PART-HOLD-BACK to partTargetDuration * 3 (' + a[n] + ').' })),
o && a[n] < e && (this.trigger('warn', { message: t + ' clamping PART-HOLD-BACK (' + a[n] + ') to partTargetDuration * 2 (' + e + ').' }), (a[n] = e)))
}
function hr(e) {
return (
e &&
e.replace(/avc1\.(\d+)\.(\d+)/i, function (e, t, i) {
return 'avc1.' + ('00' + Number(t).toString(16)).slice(-2) + '00' + ('00' + Number(i).toString(16)).slice(-2)
})
)
}
function pr(e) {
var e = (e = void 0 === e ? '' : e).split(','),
a = []
return (
e.forEach(function (n) {
var r
;(n = n.trim()),
Ar.forEach(function (e) {
var t,
i = xr[e].exec(n.toLowerCase())
!i || i.length <= 1 || ((r = e), (t = n.substring(0, i[1].length)), (i = n.replace(t, '')), a.push({ type: t, details: i, mediaType: e }))
}),
r || a.push({ type: n, details: '', mediaType: 'unknown' })
}),
a
)
}
function fr(e) {
return xr.audio.test((e = void 0 === e ? '' : e).trim().toLowerCase())
}
function mr(e) {
if (e && 'string' == typeof e) {
var t = e
.toLowerCase()
.split(',')
.map(function (e) {
return hr(e.trim())
}),
i = 'video'
1 === t.length && fr(t[0]) ? (i = 'audio') : 1 === t.length && ((n = t[0]), xr.text.test((n = void 0 === n ? '' : n).trim().toLowerCase())) && (i = 'application')
var n = 'mp4'
return (
t.every(function (e) {
return xr.mp4.test(e)
})
? (n = 'mp4')
: t.every(function (e) {
return xr.webm.test(e)
})
? (n = 'webm')
: t.every(function (e) {
return xr.ogg.test(e)
}) && (n = 'ogg'),
i + '/' + n + ';codecs="' + e + '"'
)
}
}
function gr(e) {
return void 0 === e && (e = ''), (window.MediaSource && window.MediaSource.isTypeSupported && window.MediaSource.isTypeSupported(mr(e))) || !1
}
function yr(e) {
return (e = void 0 === e ? '' : e)
.toLowerCase()
.split(',')
.every(function (e) {
e = e.trim()
for (var t = 0; t < Pr.length; t++) if (xr['muxer' + Pr[t]].test(e)) return !0
return !1
})
}
function vr(e) {
return Dr.test(e) ? 'hls' : Or.test(e) ? 'dash' : 'application/vnd.videojs.vhs+json' === e ? 'vhs-json' : null
}
function _r(e) {
return 'function' === ArrayBuffer.isView ? ArrayBuffer.isView(e) : e && e.buffer instanceof ArrayBuffer
}
function br(e) {
return e instanceof Uint8Array
? e
: (Array.isArray(e) || Mr(e) || e instanceof ArrayBuffer || (e = 'number' != typeof e || ('number' == typeof e && e != e) ? 0 : [e]),
new Uint8Array((e && e.buffer) || e, (e && e.byteOffset) || 0, (e && e.byteLength) || 0))
}
function Tr(e, t) {
var i = void 0 !== (t = (void 0 === t ? {} : t).le) && t
e = Rr((e = ('bigint' != typeof e && 'number' != typeof e) || ('number' == typeof e && e != e) ? 0 : e))
for (var n = ((t = e), Math.ceil(t.toString(2).length / 8)), r = new Uint8Array(new ArrayBuffer(n)), a = 0; a < n; a++) {
var s = i ? a : Math.abs(a + 1 - r.length)
;(r[s] = Number((e / Nr[a]) & Rr(255))), e < 0 && ((r[s] = Math.abs(~r[s])), (r[s] -= 0 === a ? 1 : 2))
}
return r
}
function Sr(e, t) {
if ('string' != typeof (e = 'string' != typeof e && e && 'function' == typeof e.toString ? e.toString() : e)) return new Uint8Array()
t || (e = unescape(encodeURIComponent(e)))
for (var i = new Uint8Array(e.length), n = 0; n < e.length; n++) i[n] = e.charCodeAt(n)
return i
}
function wr(i, e, t) {
var n = void 0 === t ? {} : t,
r = void 0 === (t = n.offset) ? 0 : t,
a = void 0 === (n = n.mask) ? [] : n
return (
(i = br(i)),
(n = (e = br(e)).every || Array.prototype.every),
e.length &&
i.length - r >= e.length &&
n.call(e, function (e, t) {
return e === (a[t] ? a[t] & i[r + t] : i[r + t])
})
)
}
var Er = (function (t) {
function e() {
var e = t.call(this) || this
return (e.buffer = ''), e
}
return (
mt(e, t),
(e.prototype.push = function (e) {
var t
for (this.buffer += e, t = this.buffer.indexOf('\n'); -1 < t; t = this.buffer.indexOf('\n'))
this.trigger('data', this.buffer.substring(0, t)), (this.buffer = this.buffer.substring(t + 1))
}),
e
)
})(ar),
kr = String.fromCharCode(9),
Cr = (function (t) {
function e() {
var e = t.call(this) || this
return (e.customParsers = []), (e.tagMappers = []), e
}
mt(e, t)
var i = e.prototype
return (
(i.push = function (i) {
var r,
a,
s = this
0 !== (i = i.trim()).length &&
('#' === i[0]
? this.tagMappers
.reduce(
function (e, t) {
t = t(i)
return t === i ? e : e.concat([t])
},
[i]
)
.forEach(function (e) {
for (var t, i, n = 0; n < s.customParsers.length; n++) if (s.customParsers[n].call(s, e)) return
if (0 === e.indexOf('#EXT'))
if (((e = e.replace('\r', '')), (r = /^#EXTM3U/.exec(e)))) s.trigger('data', { type: 'tag', tagType: 'm3u' })
else {
if ((r = /^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(e)))
return (a = { type: 'tag', tagType: 'inf' }), r[1] && (a.duration = parseFloat(r[1])), r[2] && (a.title = r[2]), void s.trigger('data', a)
if ((r = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(e)))
return (a = { type: 'tag', tagType: 'targetduration' }), r[1] && (a.duration = parseInt(r[1], 10)), void s.trigger('data', a)
if ((r = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(e)))
return (a = { type: 'tag', tagType: 'version' }), r[1] && (a.version = parseInt(r[1], 10)), void s.trigger('data', a)
if ((r = /^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(e)))
return (a = { type: 'tag', tagType: 'media-sequence' }), r[1] && (a.number = parseInt(r[1], 10)), void s.trigger('data', a)
if ((r = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(e)))
return (a = { type: 'tag', tagType: 'discontinuity-sequence' }), r[1] && (a.number = parseInt(r[1], 10)), void s.trigger('data', a)
if ((r = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(e)))
return (a = { type: 'tag', tagType: 'playlist-type' }), r[1] && (a.playlistType = r[1]), void s.trigger('data', a)
if ((r = /^#EXT-X-BYTERANGE:?(.*)?$/.exec(e))) return (a = g(ur(r[1]), { type: 'tag', tagType: 'byterange' })), void s.trigger('data', a)
if ((r = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(e)))
return (a = { type: 'tag', tagType: 'allow-cache' }), r[1] && (a.allowed = !/NO/.test(r[1])), void s.trigger('data', a)
if ((r = /^#EXT-X-MAP:?(.*)$/.exec(e)))
return (
(a = { type: 'tag', tagType: 'map' }),
r[1] && ((t = lr(r[1])).URI && (a.uri = t.URI), t.BYTERANGE && (a.byterange = ur(t.BYTERANGE))),
void s.trigger('data', a)
)
if ((r = /^#EXT-X-STREAM-INF:?(.*)$/.exec(e)))
return (
(a = { type: 'tag', tagType: 'stream-inf' }),
r[1] &&
((a.attributes = lr(r[1])),
a.attributes.RESOLUTION &&
((i = {}),
(t = a.attributes.RESOLUTION.split('x'))[0] && (i.width = parseInt(t[0], 10)),
t[1] && (i.height = parseInt(t[1], 10)),
(a.attributes.RESOLUTION = i)),
a.attributes.BANDWIDTH && (a.attributes.BANDWIDTH = parseInt(a.attributes.BANDWIDTH, 10)),
a.attributes['PROGRAM-ID'] && (a.attributes['PROGRAM-ID'] = parseInt(a.attributes['PROGRAM-ID'], 10))),
void s.trigger('data', a)
)
if ((r = /^#EXT-X-MEDIA:?(.*)$/.exec(e))) return (a = { type: 'tag', tagType: 'media' }), r[1] && (a.attributes = lr(r[1])), void s.trigger('data', a)
if ((r = /^#EXT-X-ENDLIST/.exec(e))) s.trigger('data', { type: 'tag', tagType: 'endlist' })
else {
if (!(r = /^#EXT-X-DISCONTINUITY/.exec(e)))
return (r = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(e))
? ((a = { type: 'tag', tagType: 'program-date-time' }),
r[1] && ((a.dateTimeString = r[1]), (a.dateTimeObject = new Date(r[1]))),
void s.trigger('data', a))
: (r = /^#EXT-X-KEY:?(.*)$/.exec(e))
? ((a = { type: 'tag', tagType: 'key' }),
r[1] &&
((a.attributes = lr(r[1])),
a.attributes.IV &&
('0x' === a.attributes.IV.substring(0, 2).toLowerCase() && (a.attributes.IV = a.attributes.IV.substring(2)),
(a.attributes.IV = a.attributes.IV.match(/.{8}/g)),
(a.attributes.IV[0] = parseInt(a.attributes.IV[0], 16)),
(a.attributes.IV[1] = parseInt(a.attributes.IV[1], 16)),
(a.attributes.IV[2] = parseInt(a.attributes.IV[2], 16)),
(a.attributes.IV[3] = parseInt(a.attributes.IV[3], 16)),
(a.attributes.IV = new Uint32Array(a.attributes.IV)))),
void s.trigger('data', a))
: (r = /^#EXT-X-START:?(.*)$/.exec(e))
? ((a = { type: 'tag', tagType: 'start' }),
r[1] &&
((a.attributes = lr(r[1])),
(a.attributes['TIME-OFFSET'] = parseFloat(a.attributes['TIME-OFFSET'])),
(a.attributes.PRECISE = /YES/.test(a.attributes.PRECISE))),
void s.trigger('data', a))
: (r = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(e))
? ((a = { type: 'tag', tagType: 'cue-out-cont' }), r[1] ? (a.data = r[1]) : (a.data = ''), void s.trigger('data', a))
: (r = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(e))
? ((a = { type: 'tag', tagType: 'cue-out' }), r[1] ? (a.data = r[1]) : (a.data = ''), void s.trigger('data', a))
: (r = /^#EXT-X-CUE-IN:?(.*)?$/.exec(e))
? ((a = { type: 'tag', tagType: 'cue-in' }), r[1] ? (a.data = r[1]) : (a.data = ''), void s.trigger('data', a))
: (r = /^#EXT-X-SKIP:(.*)$/.exec(e)) && r[1]
? (((a = { type: 'tag', tagType: 'skip' }).attributes = lr(r[1])),
a.attributes.hasOwnProperty('SKIPPED-SEGMENTS') && (a.attributes['SKIPPED-SEGMENTS'] = parseInt(a.attributes['SKIPPED-SEGMENTS'], 10)),
a.attributes.hasOwnProperty('RECENTLY-REMOVED-DATERANGES') &&
(a.attributes['RECENTLY-REMOVED-DATERANGES'] = a.attributes['RECENTLY-REMOVED-DATERANGES'].split(kr)),
void s.trigger('data', a))
: (r = /^#EXT-X-PART:(.*)$/.exec(e)) && r[1]
? (((a = { type: 'tag', tagType: 'part' }).attributes = lr(r[1])),
['DURATION'].forEach(function (e) {
a.attributes.hasOwnProperty(e) && (a.attributes[e] = parseFloat(a.attributes[e]))
}),
['INDEPENDENT', 'GAP'].forEach(function (e) {
a.attributes.hasOwnProperty(e) && (a.attributes[e] = /YES/.test(a.attributes[e]))
}),
a.attributes.hasOwnProperty('BYTERANGE') && (a.attributes.byterange = ur(a.attributes.BYTERANGE)),
void s.trigger('data', a))
: (r = /^#EXT-X-SERVER-CONTROL:(.*)$/.exec(e)) && r[1]
? (((a = { type: 'tag', tagType: 'server-control' }).attributes = lr(r[1])),
['CAN-SKIP-UNTIL', 'PART-HOLD-BACK', 'HOLD-BACK'].forEach(function (e) {
a.attributes.hasOwnProperty(e) && (a.attributes[e] = parseFloat(a.attributes[e]))
}),
['CAN-SKIP-DATERANGES', 'CAN-BLOCK-RELOAD'].forEach(function (e) {
a.attributes.hasOwnProperty(e) && (a.attributes[e] = /YES/.test(a.attributes[e]))
}),
void s.trigger('data', a))
: (r = /^#EXT-X-PART-INF:(.*)$/.exec(e)) && r[1]
? (((a = { type: 'tag', tagType: 'part-inf' }).attributes = lr(r[1])),
['PART-TARGET'].forEach(function (e) {
a.attributes.hasOwnProperty(e) && (a.attributes[e] = parseFloat(a.attributes[e]))
}),
void s.trigger('data', a))
: (r = /^#EXT-X-PRELOAD-HINT:(.*)$/.exec(e)) && r[1]
? (((a = { type: 'tag', tagType: 'preload-hint' }).attributes = lr(r[1])),
['BYTERANGE-START', 'BYTERANGE-LENGTH'].forEach(function (e) {
var t
a.attributes.hasOwnProperty(e) &&
((a.attributes[e] = parseInt(a.attributes[e], 10)),
(t = 'BYTERANGE-LENGTH' === e ? 'length' : 'offset'),
(a.attributes.byterange = a.attributes.byterange || {}),
(a.attributes.byterange[t] = a.attributes[e]),
delete a.attributes[e])
}),
void s.trigger('data', a))
: (r = /^#EXT-X-RENDITION-REPORT:(.*)$/.exec(e)) && r[1]
? (((a = { type: 'tag', tagType: 'rendition-report' }).attributes = lr(r[1])),
['LAST-MSN', 'LAST-PART'].forEach(function (e) {
a.attributes.hasOwnProperty(e) && (a.attributes[e] = parseInt(a.attributes[e], 10))
}),
void s.trigger('data', a))
: void s.trigger('data', { type: 'tag', data: e.slice(4) })
s.trigger('data', { type: 'tag', tagType: 'discontinuity' })
}
}
else s.trigger('data', { type: 'comment', text: e.slice(1) })
})
: this.trigger('data', { type: 'uri', uri: i }))
}),
(i.addParser = function (e) {
var t = this,
i = e.expression,
n = e.customType,
r = e.dataParser,
a = e.segment
'function' != typeof r &&
(r = function (e) {
return e
}),
this.customParsers.push(function (e) {
if (i.exec(e)) return t.trigger('data', { type: 'custom', data: r(e), customType: n, segment: a }), !0
})
}),
(i.addTagMapper = function (e) {
var t = e.expression,
i = e.map
this.tagMappers.push(function (e) {
return t.test(e) ? i(e) : e
})
}),
e
)
})(ar),
Ir = (function (t) {
function e() {
var e = t.call(this) || this
;(e.lineStream = new Er()), (e.parseStream = new Cr()), e.lineStream.pipe(e.parseStream)
var n,
r,
a = ft(e),
o = [],
u = {},
l = !1,
c = { AUDIO: {}, VIDEO: {}, 'CLOSED-CAPTIONS': {}, SUBTITLES: {} },
d = 0
e.manifest = { allowCache: !0, discontinuityStarts: [], segments: [] }
var h = 0,
p = 0
return (
e.on('end', function () {
u.uri ||
(!u.parts && !u.preloadHints) ||
(!u.map && n && (u.map = n), !u.key && r && (u.key = r), u.timeline || 'number' != typeof d || (u.timeline = d), (e.manifest.preloadSegment = u))
}),
e.parseStream.on('data', function (s) {
var t, i
;({
tag: function () {
;((
{
version: function () {
s.version && (this.manifest.version = s.version)
},
'allow-cache': function () {
;(this.manifest.allowCache = s.allowed),
'allowed' in s || (this.trigger('info', { message: 'defaulting allowCache to YES' }), (this.manifest.allowCache = !0))
},
byterange: function () {
var e = {}
'length' in s && (((u.byterange = e).length = s.length), 'offset' in s || (s.offset = h)),
'offset' in s && ((u.byterange = e).offset = s.offset),
(h = e.offset + e.length)
},
endlist: function () {
this.manifest.endList = !0
},
inf: function () {
'mediaSequence' in this.manifest || ((this.manifest.mediaSequence = 0), this.trigger('info', { message: 'defaulting media sequence to zero' })),
'discontinuitySequence' in this.manifest ||
((this.manifest.discontinuitySequence = 0), this.trigger('info', { message: 'defaulting discontinuity sequence to zero' })),
0 < s.duration && (u.duration = s.duration),
0 === s.duration && ((u.duration = 0.01), this.trigger('info', { message: 'updating zero segment duration to a small value' })),
(this.manifest.segments = o)
},
key: function () {
if (s.attributes)
if ('NONE' !== s.attributes.METHOD)
if (s.attributes.URI) {
if ('com.apple.streamingkeydelivery' === s.attributes.KEYFORMAT)
return (
(this.manifest.contentProtection = this.manifest.contentProtection || {}),
void (this.manifest.contentProtection['com.apple.fps.1_0'] = { attributes: s.attributes })
)
if ('com.microsoft.playready' === s.attributes.KEYFORMAT)
return (
(this.manifest.contentProtection = this.manifest.contentProtection || {}),
void (this.manifest.contentProtection['com.microsoft.playready'] = { uri: s.attributes.URI })
)
if ('urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed' === s.attributes.KEYFORMAT)
return -1 === ['SAMPLE-AES', 'SAMPLE-AES-CTR', 'SAMPLE-AES-CENC'].indexOf(s.attributes.METHOD)
? void this.trigger('warn', { message: 'invalid key method provided for Widevine' })
: ('SAMPLE-AES-CENC' === s.attributes.METHOD &&
this.trigger('warn', { message: 'SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead' }),
'data:text/plain;base64,' !== s.attributes.URI.substring(0, 23)
? void this.trigger('warn', { message: 'invalid key URI provided for Widevine' })
: s.attributes.KEYID && '0x' === s.attributes.KEYID.substring(0, 2)
? ((this.manifest.contentProtection = this.manifest.contentProtection || {}),
void (this.manifest.contentProtection['com.widevine.alpha'] = {
attributes: { schemeIdUri: s.attributes.KEYFORMAT, keyId: s.attributes.KEYID.substring(2) },
pssh: or(s.attributes.URI.split(',')[1]),
}))
: void this.trigger('warn', { message: 'invalid key ID provided for Widevine' }))
s.attributes.METHOD || this.trigger('warn', { message: 'defaulting key method to AES-128' }),
(r = { method: s.attributes.METHOD || 'AES-128', uri: s.attributes.URI }),
'undefined' != typeof s.attributes.IV && (r.iv = s.attributes.IV)
} else this.trigger('warn', { message: 'ignoring key declaration without URI' })
else r = null
else this.trigger('warn', { message: 'ignoring key declaration without attribute list' })
},
'media-sequence': function () {
isFinite(s.number) ? (this.manifest.mediaSequence = s.number) : this.trigger('warn', { message: 'ignoring invalid media sequence: ' + s.number })
},
'discontinuity-sequence': function () {
isFinite(s.number)
? ((this.manifest.discontinuitySequence = s.number), (d = s.number))
: this.trigger('warn', { message: 'ignoring invalid discontinuity sequence: ' + s.number })
},
'playlist-type': function () {
;/VOD|EVENT/.test(s.playlistType)
? (this.manifest.playlistType = s.playlistType)
: this.trigger('warn', { message: 'ignoring unknown playlist type: ' + s.playlist })
},
map: function () {
;(n = {}), s.uri && (n.uri = s.uri), s.byterange && (n.byterange = s.byterange), r && (n.key = r)
},
'stream-inf': function () {
;(this.manifest.playlists = o),
(this.manifest.mediaGroups = this.manifest.mediaGroups || c),
s.attributes
? (u.attributes || (u.attributes = {}), g(u.attributes, s.attributes))
: this.trigger('warn', { message: 'ignoring empty stream-inf attributes' })
},
media: function () {
var e
;(this.manifest.mediaGroups = this.manifest.mediaGroups || c),
s.attributes && s.attributes.TYPE && s.attributes['GROUP-ID'] && s.attributes.NAME
? (((e = this.manifest.mediaGroups[s.attributes.TYPE])[s.attributes['GROUP-ID']] = e[s.attributes['GROUP-ID']] || {}),
(t = e[s.attributes['GROUP-ID']]),
(i = { default: /yes/i.test(s.attributes.DEFAULT) }).default ? (i.autoselect = !0) : (i.autoselect = /yes/i.test(s.attributes.AUTOSELECT)),
s.attributes.LANGUAGE && (i.language = s.attributes.LANGUAGE),
s.attributes.URI && (i.uri = s.attributes.URI),
s.attributes['INSTREAM-ID'] && (i.instreamId = s.attributes['INSTREAM-ID']),
s.attributes.CHARACTERISTICS && (i.characteristics = s.attributes.CHARACTERISTICS),
s.attributes.FORCED && (i.forced = /yes/i.test(s.attributes.FORCED)),
(t[s.attributes.NAME] = i))
: this.trigger('warn', { message: 'ignoring incomplete or missing media group' })
},
discontinuity: function () {
;(d += 1), (u.discontinuity = !0), this.manifest.discontinuityStarts.push(o.length)
},
'program-date-time': function () {
'undefined' == typeof this.manifest.dateTimeString &&
((this.manifest.dateTimeString = s.dateTimeString), (this.manifest.dateTimeObject = s.dateTimeObject)),
(u.dateTimeString = s.dateTimeString),
(u.dateTimeObject = s.dateTimeObject)
},
targetduration: function () {
!isFinite(s.duration) || s.duration < 0
? this.trigger('warn', { message: 'ignoring invalid target duration: ' + s.duration })
: ((this.manifest.targetDuration = s.duration), dr.call(this, this.manifest))
},
start: function () {
s.attributes && !isNaN(s.attributes['TIME-OFFSET'])
? (this.manifest.start = { timeOffset: s.attributes['TIME-OFFSET'], precise: s.attributes.PRECISE })
: this.trigger('warn', { message: 'ignoring start declaration without appropriate attribute list' })
},
'cue-out': function () {
u.cueOut = s.data
},
'cue-out-cont': function () {
u.cueOutCont = s.data
},
'cue-in': function () {
u.cueIn = s.data
},
skip: function () {
;(this.manifest.skip = cr(s.attributes)), this.warnOnMissingAttributes_('#EXT-X-SKIP', s.attributes, ['SKIPPED-SEGMENTS'])
},
part: function () {
var i = this
l = !0
var e = this.manifest.segments.length,
t = cr(s.attributes)
;(u.parts = u.parts || []),
u.parts.push(t),
t.byterange && (t.byterange.hasOwnProperty('offset') || (t.byterange.offset = p), (p = t.byterange.offset + t.byterange.length))
var n = u.parts.length - 1
this.warnOnMissingAttributes_('#EXT-X-PART #' + n + ' for segment #' + e, s.attributes, ['URI', 'DURATION']),
this.manifest.renditionReports &&
this.manifest.renditionReports.forEach(function (e, t) {
e.hasOwnProperty('lastPart') || i.trigger('warn', { message: '#EXT-X-RENDITION-REPORT #' + t + ' lacks required attribute(s): LAST-PART' })
})
},
'server-control': function () {
var e = (this.manifest.serverControl = cr(s.attributes))
e.hasOwnProperty('canBlockReload') ||
((e.canBlockReload = !1), this.trigger('info', { message: '#EXT-X-SERVER-CONTROL defaulting CAN-BLOCK-RELOAD to false' })),
dr.call(this, this.manifest),
e.canSkipDateranges &&
!e.hasOwnProperty('canSkipUntil') &&
this.trigger('warn', { message: '#EXT-X-SERVER-CONTROL lacks required attribute CAN-SKIP-UNTIL which is required when CAN-SKIP-DATERANGES is set' })
},
'preload-hint': function () {
var e = this.manifest.segments.length,
t = cr(s.attributes),
i = t.type && 'PART' === t.type
;(u.preloadHints = u.preloadHints || []),
u.preloadHints.push(t),
t.byterange && (t.byterange.hasOwnProperty('offset') || ((t.byterange.offset = i ? p : 0), i && (p = t.byterange.offset + t.byterange.length)))
var n = u.preloadHints.length - 1
if ((this.warnOnMissingAttributes_('#EXT-X-PRELOAD-HINT #' + n + ' for segment #' + e, s.attributes, ['TYPE', 'URI']), t.type))
for (var r = 0; r < u.preloadHints.length - 1; r++) {
var a = u.preloadHints[r]
a.type &&
a.type === t.type &&
this.trigger('warn', {
message: '#EXT-X-PRELOAD-HINT #' + n + ' for segment #' + e + ' has the same TYPE ' + t.type + ' as preload hint #' + r,
})
}
},
'rendition-report': function () {
var e = cr(s.attributes)
;(this.manifest.renditionReports = this.manifest.renditionReports || []), this.manifest.renditionReports.push(e)
var t = this.manifest.renditionReports.length - 1,
e = ['LAST-MSN', 'URI']
l && e.push('LAST-PART'), this.warnOnMissingAttributes_('#EXT-X-RENDITION-REPORT #' + t, s.attributes, e)
},
'part-inf': function () {
;(this.manifest.partInf = cr(s.attributes)),
this.warnOnMissingAttributes_('#EXT-X-PART-INF', s.attributes, ['PART-TARGET']),
this.manifest.partInf.partTarget && (this.manifest.partTargetDuration = this.manifest.partInf.partTarget),
dr.call(this, this.manifest)
},
}[s.tagType] || function () {}
).call(a))
},
uri: function () {
;(u.uri = s.uri),
o.push(u),
!this.manifest.targetDuration ||
'duration' in u ||
(this.trigger('warn', { message: 'defaulting segment duration to the target duration' }), (u.duration = this.manifest.targetDuration)),
r && (u.key = r),
(u.timeline = d),
n && (u.map = n),
(p = 0),
(u = {})
},
comment: function () {},
custom: function () {
s.segment
? ((u.custom = u.custom || {}), (u.custom[s.customType] = s.data))
: ((this.manifest.custom = this.manifest.custom || {}), (this.manifest.custom[s.customType] = s.data))
},
}[s.type].call(a))
}),
e
)
}
mt(e, t)
var i = e.prototype
return (
(i.warnOnMissingAttributes_ = function (e, t, i) {
var n = []
i.forEach(function (e) {
t.hasOwnProperty(e) || n.push(e)
}),
n.length && this.trigger('warn', { message: e + ' lacks required attribute(s): ' + n.join(', ') })
}),
(i.push = function (e) {
this.lineStream.push(e)
}),
(i.end = function () {
this.lineStream.push('\n'), this.trigger('end')
}),
(i.addParser = function (e) {
this.parseStream.addParser(e)
}),
(i.addTagMapper = function (e) {
this.parseStream.addTagMapper(e)
}),
e
)
})(ar),
xr = {
mp4: /^(av0?1|avc0?[1234]|vp0?9|flac|opus|mp3|mp4a|mp4v|stpp.ttml.im1t)/,
webm: /^(vp0?[89]|av0?1|opus|vorbis)/,
ogg: /^(vp0?[89]|theora|flac|opus|vorbis)/,
video: /^(av0?1|avc0?[1234]|vp0?[89]|hvc1|hev1|theora|mp4v)/,
audio: /^(mp4a|flac|vorbis|opus|ac-[34]|ec-3|alac|mp3|speex|aac)/,
text: /^(stpp.ttml.im1t)/,
muxerVideo: /^(avc0?1)/,
muxerAudio: /^(mp4a)/,
muxerText: /a^/,
},
Ar = ['video', 'audio', 'text'],
Pr = ['Video', 'Audio', 'Text'],
Lr = 'mp4a.40.2',
Dr = /^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i,
Or = /^application\/dash\+xml/i,
Mr = _r,
Rr = window.BigInt || Number,
Nr = [Rr('0x1'), Rr('0x100'), Rr('0x10000'), Rr('0x1000000'), Rr('0x100000000'), Rr('0x10000000000'), Rr('0x1000000000000'), Rr('0x100000000000000'), Rr('0x10000000000000000')]
function Ur(e, t) {
return (t = void 0 === t ? Object : t) && 'function' == typeof t.freeze ? t.freeze(e) : e
}
var Br = Ur({
HTML: 'text/html',
isHTML: function (e) {
return e === Br.HTML
},
XML_APPLICATION: 'application/xml',
XML_TEXT: 'text/xml',
XML_XHTML_APPLICATION: 'application/xhtml+xml',
XML_SVG_IMAGE: 'image/svg+xml',
}),
Fr = Ur({
HTML: 'http://www.w3.org/1999/xhtml',
isHTML: function (e) {
return e === Fr.HTML
},
SVG: 'http://www.w3.org/2000/svg',
XML: 'http://www.w3.org/XML/1998/namespace',
XMLNS: 'http://www.w3.org/2000/xmlns/',
}),
jr = { freeze: Ur, MIME_TYPE: Br, NAMESPACE: Fr },
Hr = jr.NAMESPACE
function qr(e) {
return '' !== e
}
function Vr(e, t) {
return e.hasOwnProperty(t) || (e[t] = !0), e
}
function Wr(e) {
if (!e) return []
e = (e = e) ? e.split(/[\t\n\f\r ]+/).filter(qr) : []
return Object.keys(e.reduce(Vr, {}))
}
function Gr(e, t) {
for (var i in e) t[i] = e[i]
}
function zr(e, t) {
var i,
n = e.prototype
n instanceof t || (((i = function () {}).prototype = t.prototype), Gr(n, (i = new i())), (e.prototype = n = i)), n.constructor != e && (n.constructor = e)
}
var W = {},
Xr = (W.ELEMENT_NODE = 1),
Kr = (W.ATTRIBUTE_NODE = 2),
Yr = (W.TEXT_NODE = 3),
Qr = (W.CDATA_SECTION_NODE = 4),
$r = (W.ENTITY_REFERENCE_NODE = 5),
Jr = ((W.ENTITY_NODE = 6), (W.PROCESSING_INSTRUCTION_NODE = 7)),
Zr = (W.COMMENT_NODE = 8),
ea = (W.DOCUMENT_NODE = 9),
ta = (W.DOCUMENT_TYPE_NODE = 10),
ia = (W.DOCUMENT_FRAGMENT_NODE = 11),
x = ((W.NOTATION_NODE = 12), {}),
na = {}
;(x.INDEX_SIZE_ERR = ((na[1] = 'Index size error'), 1)), (x.DOMSTRING_SIZE_ERR = ((na[2] = 'DOMString size error'), 2))
x.HIERARCHY_REQUEST_ERR = ((na[3] = 'Hierarchy request error'), 3)
;(x.WRONG_DOCUMENT_ERR = ((na[4] = 'Wrong document'), 4)),
(x.INVALID_CHARACTER_ERR = ((na[5] = 'Invalid character'), 5)),
(x.NO_DATA_ALLOWED_ERR = ((na[6] = 'No data allowed'), 6)),
(x.NO_MODIFICATION_ALLOWED_ERR = ((na[7] = 'No modification allowed'), 7))
x.NOT_FOUND_ERR = ((na[8] = 'Not found'), 8)
x.NOT_SUPPORTED_ERR = ((na[9] = 'Not supported'), 9)
var ra
x.INUSE_ATTRIBUTE_ERR = ((na[10] = 'Attribute in use'), 10)
function aa(e, t) {
var i
return (
t instanceof Error ? (i = t) : ((i = this), Error.call(this, na[e]), (this.message = na[e]), Error.captureStackTrace && Error.captureStackTrace(this, aa)),
(i.code = e),
t && (this.message = this.message + ': ' + t),
i
)
}
function sa() {}
function oa(e, t) {
;(this._node = e), (this._refresh = t), ua(this)
}
function ua(e) {
var t,
i = e._node._inc || e._node.ownerDocument._inc
e._inc != i && ((t = e._refresh(e._node)), Fa(e, 'length', t.length), Gr(t, e), (e._inc = i))
}
function la() {}
function ca(e, t) {
for (var i = e.length; i--; ) if (e[i] === t) return i
}
function da(e, t, i, n) {
n ? (t[ca(t, n)] = i) : (t[t.length++] = i),
!e ||
((t = (i.ownerElement = e).ownerDocument) &&
(n && va(t, e, n), (e = e), (i = i), (t = t) && t._inc++, i.namespaceURI === Hr.XMLNS && (e._nsMap[i.prefix ? i.localName : ''] = i.value)))
}
function ha(e, t, i) {
var n = ca(t, i)
if (!(0 <= n)) throw aa(8, new Error(e.tagName + '@' + i))
for (var r, a = t.length - 1; n < a; ) t[n] = t[++n]
;(t.length = a), !e || ((r = e.ownerDocument) && (va(r, e, i), (i.ownerElement = null)))
}
function pa() {}
function fa() {}
function ma(e) {
return ('<' == e ? '<' : '>' == e && '>') || ('&' == e && '&') || ('"' == e && '"') || '' + e.charCodeAt() + ';'
}
function ga(e, t) {
if (t(e)) return 1
if ((e = e.firstChild))
do {
if (ga(e, t)) return 1
} while ((e = e.nextSibling))
}
function ya() {}
function va(e, t, i) {
e && e._inc++, i.namespaceURI === Hr.XMLNS && delete t._nsMap[i.prefix ? i.localName : '']
}
function _a(e, t, i) {
if (e && e._inc) {
e._inc++
var n = t.childNodes
if (i) n[n.length++] = i
else {
for (var r = t.firstChild, a = 0; r; ) r = (n[a++] = r).nextSibling
n.length = a
}
}
}
function ba(e, t) {
var i = t.previousSibling,
n = t.nextSibling
return i ? (i.nextSibling = n) : (e.firstChild = n), n ? (n.previousSibling = i) : (e.lastChild = i), _a(e.ownerDocument, e), t
}
function Ta(e, t, i) {
var n = t.parentNode
if ((n && n.removeChild(t), t.nodeType === ia)) {
var r = t.firstChild
if (null == r) return t
var a = t.lastChild
} else r = a = t
n = i ? i.previousSibling : e.lastChild
for (
r.previousSibling = n, a.nextSibling = i, n ? (n.nextSibling = r) : (e.firstChild = r), null == i ? (e.lastChild = a) : (i.previousSibling = a);
(r.parentNode = e), r !== a && (r = r.nextSibling);
);
return _a(e.ownerDocument || e, e), t.nodeType == ia && (t.firstChild = t.lastChild = null), t
}
function Sa() {
this._nsMap = {}
}
function wa() {}
function Ea() {}
function ka() {}
function Ca() {}
function Ia() {}
function xa() {}
function Aa() {}
function Pa() {}
function La() {}
function Da() {}
function Oa() {}
function Ma() {}
function Ra(e, t) {
var i,
n = [],
r = (9 == this.nodeType && this.documentElement) || this,
a = r.prefix,
s = r.namespaceURI
return Ba(this, n, e, t, (i = s && null == a && null == (a = r.lookupPrefix(s)) ? [{ namespace: s, prefix: null }] : i)), n.join('')
}
function Na(e, t, i) {
var n = e.prefix || '',
r = e.namespaceURI
if (r && ('xml' !== n || r !== Hr.XML) && r !== Hr.XMLNS) {
for (var a = i.length; a--; ) {
var s = i[a]
if (s.prefix === n) return s.namespace !== r
}
return 1
}
}
function Ua(e, t, i) {
e.push(' ', t, '="', i.replace(/[<&"]/g, ma), '"')
}
function Ba(e, t, i, n, r) {
if (((r = r || []), n)) {
if (!(e = n(e))) return
if ('string' == typeof e) return void t.push(e)
}
switch (e.nodeType) {
case Xr:
var a = e.attributes,
s = a.length,
o = e.firstChild,
u = e.tagName,
l = u
if (!(i = Hr.isHTML(e.namespaceURI) || i) && !e.prefix && e.namespaceURI) {
for (var c, d = 0; d < a.length; d++)
if ('xmlns' === a.item(d).name) {
c = a.item(d).value
break
}
if (!c)
for (var h = r.length - 1; 0 <= h; h--)
if ('' === (p = r[h]).prefix && p.namespace === e.namespaceURI) {
c = p.namespace
break
}
if (c !== e.namespaceURI)
for (var p, h = r.length - 1; 0 <= h; h--)
if ((p = r[h]).namespace === e.namespaceURI) {
p.prefix && (l = p.prefix + ':' + u)
break
}
}
t.push('<', l)
for (var f = 0; f < s; f++)
'xmlns' == (m = a.item(f)).prefix ? r.push({ prefix: m.localName, namespace: m.value }) : 'xmlns' == m.nodeName && r.push({ prefix: '', namespace: m.value })
for (var m, g, y, f = 0; f < s; f++)
Na((m = a.item(f)), 0, r) && (Ua(t, (g = m.prefix || '') ? 'xmlns:' + g : 'xmlns', (y = m.namespaceURI)), r.push({ prefix: g, namespace: y })), Ba(m, t, i, n, r)
if (
(u === l && Na(e, 0, r) && (Ua(t, (g = e.prefix || '') ? 'xmlns:' + g : 'xmlns', (y = e.namespaceURI)), r.push({ prefix: g, namespace: y })),
o || (i && !/^(?:meta|link|img|br|hr|input)$/i.test(u)))
) {
if ((t.push('>'), i && /^script$/i.test(u))) for (; o; ) o.data ? t.push(o.data) : Ba(o, t, i, n, r.slice()), (o = o.nextSibling)
else for (; o; ) Ba(o, t, i, n, r.slice()), (o = o.nextSibling)
t.push('', l, '>')
} else t.push('/>')
return
case ea:
case ia:
for (o = e.firstChild; o; ) Ba(o, t, i, n, r.slice()), (o = o.nextSibling)
return
case Kr:
return Ua(t, e.name, e.value), 0
case Yr:
return t.push(e.data.replace(/[<&]/g, ma).replace(/]]>/g, ']]>'))
case Qr:
return t.push('')
case Zr:
return t.push('\x3c!--', e.data, '--\x3e')
case ta:
var v = e.publicId,
_ = e.systemId
return (
t.push(''))
: _ && '.' != _
? t.push(' SYSTEM ', _, '>')
: ((_ = e.internalSubset) && t.push(' [', _, ']'), t.push('>')))
)
case Jr:
return t.push('', e.target, ' ', e.data, '?>')
case $r:
return t.push('&', e.nodeName, ';')
default:
t.push('??', e.nodeName)
}
}
function Fa(e, t, i) {
e[t] = i
}
;(x.INVALID_STATE_ERR = ((na[11] = 'Invalid state'), 11)),
(x.SYNTAX_ERR = ((na[12] = 'Syntax error'), 12)),
(x.INVALID_MODIFICATION_ERR = ((na[13] = 'Invalid modification'), 13)),
(x.NAMESPACE_ERR = ((na[14] = 'Invalid namespace'), 14)),
(x.INVALID_ACCESS_ERR = ((na[15] = 'Invalid access'), 15)),
(aa.prototype = Error.prototype),
Gr(x, aa),
(sa.prototype = {
length: 0,
item: function (e) {
return this[e] || null
},
toString: function (e, t) {
for (var i = [], n = 0; n < this.length; n++) Ba(this[n], i, e, t)
return i.join('')
},
}),
(oa.prototype.item = function (e) {
return ua(this), this[e]
}),
zr(oa, sa),
(la.prototype = {
length: 0,
item: sa.prototype.item,
getNamedItem: function (e) {
for (var t = this.length; t--; ) {
var i = this[t]
if (i.nodeName == e) return i
}
},
setNamedItem: function (e) {
var t = e.ownerElement
if (t && t != this._ownerElement) throw new aa(10)
t = this.getNamedItem(e.nodeName)
return da(this._ownerElement, this, e, t), t
},
setNamedItemNS: function (e) {
var t = e.ownerElement
if (t && t != this._ownerElement) throw new aa(10)
return (t = this.getNamedItemNS(e.namespaceURI, e.localName)), da(this._ownerElement, this, e, t), t
},
removeNamedItem: function (e) {
e = this.getNamedItem(e)
return ha(this._ownerElement, this, e), e
},
removeNamedItemNS: function (e, t) {
t = this.getNamedItemNS(e, t)
return ha(this._ownerElement, this, t), t
},
getNamedItemNS: function (e, t) {
for (var i = this.length; i--; ) {
var n = this[i]
if (n.localName == t && n.namespaceURI == e) return n
}
return null
},
}),
(pa.prototype = {
hasFeature: function (e, t) {
return !0
},
createDocument: function (e, t, i) {
var n = new ya()
return (n.implementation = this), (n.childNodes = new sa()), (n.doctype = i || null), i && n.appendChild(i), t && ((t = n.createElementNS(e, t)), n.appendChild(t)), n
},
createDocumentType: function (e, t, i) {
var n = new xa()
return (n.name = e), (n.nodeName = e), (n.publicId = t || ''), (n.systemId = i || ''), n
},
}),
(fa.prototype = {
firstChild: null,
lastChild: null,
previousSibling: null,
nextSibling: null,
attributes: null,
parentNode: null,
childNodes: null,
ownerDocument: null,
nodeValue: null,
namespaceURI: null,
prefix: null,
localName: null,
insertBefore: function (e, t) {
return Ta(this, e, t)
},
replaceChild: function (e, t) {
this.insertBefore(e, t), t && this.removeChild(t)
},
removeChild: function (e) {
return ba(this, e)
},
appendChild: function (e) {
return this.insertBefore(e, null)
},
hasChildNodes: function () {
return null != this.firstChild
},
cloneNode: function (e) {
return (function e(t, i, n) {
var r = new i.constructor()
for (var a in i) {
var s = i[a]
'object' != typeof s && s != r[a] && (r[a] = s)
}
i.childNodes && (r.childNodes = new sa())
r.ownerDocument = t
switch (r.nodeType) {
case Xr:
var o = i.attributes,
u = (r.attributes = new la()),
l = o.length
u._ownerElement = r
for (var c = 0; c < l; c++) r.setAttributeNode(e(t, o.item(c), !0))
break
case Kr:
n = !0
}
if (n) for (var d = i.firstChild; d; ) r.appendChild(e(t, d, n)), (d = d.nextSibling)
return r
})(this.ownerDocument || this, this, e)
},
normalize: function () {
for (var e = this.firstChild; e; ) {
var t = e.nextSibling
t && t.nodeType == Yr && e.nodeType == Yr ? (this.removeChild(t), e.appendData(t.data)) : (e.normalize(), (e = t))
}
},
isSupported: function (e, t) {
return this.ownerDocument.implementation.hasFeature(e, t)
},
hasAttributes: function () {
return 0 < this.attributes.length
},
lookupPrefix: function (e) {
for (var t = this; t; ) {
var i = t._nsMap
if (i) for (var n in i) if (i[n] == e) return n
t = t.nodeType == Kr ? t.ownerDocument : t.parentNode
}
return null
},
lookupNamespaceURI: function (e) {
for (var t = this; t; ) {
var i = t._nsMap
if (i && e in i) return i[e]
t = t.nodeType == Kr ? t.ownerDocument : t.parentNode
}
return null
},
isDefaultNamespace: function (e) {
return null == this.lookupPrefix(e)
},
}),
Gr(W, fa),
Gr(W, fa.prototype),
(ya.prototype = {
nodeName: '#document',
nodeType: ea,
doctype: null,
documentElement: null,
_inc: 1,
insertBefore: function (e, t) {
if (e.nodeType != ia) return null == this.documentElement && e.nodeType == Xr && (this.documentElement = e), Ta(this, e, t), (e.ownerDocument = this), e
for (var i = e.firstChild; i; ) {
var n = i.nextSibling
this.insertBefore(i, t), (i = n)
}
return e
},
removeChild: function (e) {
return this.documentElement == e && (this.documentElement = null), ba(this, e)
},
importNode: function (e, t) {
return (function e(t, i, n) {
var r
switch (i.nodeType) {
case Xr:
;(r = i.cloneNode(!1)).ownerDocument = t
case ia:
break
case Kr:
n = !0
}
r = r || i.cloneNode(!1)
r.ownerDocument = t
r.parentNode = null
if (n) for (var a = i.firstChild; a; ) r.appendChild(e(t, a, n)), (a = a.nextSibling)
return r
})(this, e, t)
},
getElementById: function (t) {
var i = null
return (
ga(this.documentElement, function (e) {
if (e.nodeType == Xr && e.getAttribute('id') == t) return (i = e), !0
}),
i
)
},
getElementsByClassName: function (s) {
var o = Wr(s)
return new oa(this, function (r) {
var a = []
return (
0 < o.length &&
ga(r.documentElement, function (e) {
var t, i, n
e === r ||
e.nodeType !== Xr ||
((t = e.getAttribute('class')) &&
((i = s === t) ||
((t = Wr(t)),
(i = o.every(
((n = t),
function (e) {
return n && -1 !== n.indexOf(e)
})
))),
i && a.push(e)))
}),
a
)
})
},
createElement: function (e) {
var t = new Sa()
return (t.ownerDocument = this), (t.nodeName = e), (t.tagName = e), (t.localName = e), (t.childNodes = new sa()), ((t.attributes = new la())._ownerElement = t)
},
createDocumentFragment: function () {
var e = new Da()
return (e.ownerDocument = this), (e.childNodes = new sa()), e
},
createTextNode: function (e) {
var t = new ka()
return (t.ownerDocument = this), t.appendData(e), t
},
createComment: function (e) {
var t = new Ca()
return (t.ownerDocument = this), t.appendData(e), t
},
createCDATASection: function (e) {
var t = new Ia()
return (t.ownerDocument = this), t.appendData(e), t
},
createProcessingInstruction: function (e, t) {
var i = new Oa()
return (i.ownerDocument = this), (i.tagName = i.target = e), (i.nodeValue = i.data = t), i
},
createAttribute: function (e) {
var t = new wa()
return (t.ownerDocument = this), (t.name = e), (t.nodeName = e), (t.localName = e), (t.specified = !0), t
},
createEntityReference: function (e) {
var t = new La()
return (t.ownerDocument = this), (t.nodeName = e), t
},
createElementNS: function (e, t) {
var i = new Sa(),
n = t.split(':'),
r = (i.attributes = new la())
return (
(i.childNodes = new sa()),
(i.ownerDocument = this),
(i.nodeName = t),
(i.tagName = t),
(i.namespaceURI = e),
2 == n.length ? ((i.prefix = n[0]), (i.localName = n[1])) : (i.localName = t),
(r._ownerElement = i)
)
},
createAttributeNS: function (e, t) {
var i = new wa(),
n = t.split(':')
return (
(i.ownerDocument = this), (i.nodeName = t), (i.name = t), (i.namespaceURI = e), (i.specified = !0), 2 == n.length ? ((i.prefix = n[0]), (i.localName = n[1])) : (i.localName = t), i
)
},
}),
zr(ya, fa),
(ya.prototype.getElementsByTagName = (Sa.prototype = {
nodeType: Xr,
hasAttribute: function (e) {
return null != this.getAttributeNode(e)
},
getAttribute: function (e) {
e = this.getAttributeNode(e)
return (e && e.value) || ''
},
getAttributeNode: function (e) {
return this.attributes.getNamedItem(e)
},
setAttribute: function (e, t) {
e = this.ownerDocument.createAttribute(e)
;(e.value = e.nodeValue = '' + t), this.setAttributeNode(e)
},
removeAttribute: function (e) {
e = this.getAttributeNode(e)
e && this.removeAttributeNode(e)
},
appendChild: function (e) {
return e.nodeType === ia
? this.insertBefore(e, null)
: (function (e, t) {
var i = t.parentNode
i && ((n = e.lastChild), i.removeChild(t), (n = e.lastChild))
var n = e.lastChild
return (t.parentNode = e), (t.previousSibling = n), (t.nextSibling = null), n ? (n.nextSibling = t) : (e.firstChild = t), (e.lastChild = t), _a(e.ownerDocument, e, t), t
})(this, e)
},
setAttributeNode: function (e) {
return this.attributes.setNamedItem(e)
},
setAttributeNodeNS: function (e) {
return this.attributes.setNamedItemNS(e)
},
removeAttributeNode: function (e) {
return this.attributes.removeNamedItem(e.nodeName)
},
removeAttributeNS: function (e, t) {
t = this.getAttributeNodeNS(e, t)
t && this.removeAttributeNode(t)
},
hasAttributeNS: function (e, t) {
return null != this.getAttributeNodeNS(e, t)
},
getAttributeNS: function (e, t) {
t = this.getAttributeNodeNS(e, t)
return (t && t.value) || ''
},
setAttributeNS: function (e, t, i) {
t = this.ownerDocument.createAttributeNS(e, t)
;(t.value = t.nodeValue = '' + i), this.setAttributeNode(t)
},
getAttributeNodeNS: function (e, t) {
return this.attributes.getNamedItemNS(e, t)
},
getElementsByTagName: function (n) {
return new oa(this, function (t) {
var i = []
return (
ga(t, function (e) {
e === t || e.nodeType != Xr || ('*' !== n && e.tagName != n) || i.push(e)
}),
i
)
})
},
getElementsByTagNameNS: function (n, r) {
return new oa(this, function (t) {
var i = []
return (
ga(t, function (e) {
e === t || e.nodeType !== Xr || ('*' !== n && e.namespaceURI !== n) || ('*' !== r && e.localName != r) || i.push(e)
}),
i
)
})
},
}).getElementsByTagName),
(ya.prototype.getElementsByTagNameNS = Sa.prototype.getElementsByTagNameNS),
zr(Sa, fa),
(wa.prototype.nodeType = Kr),
zr(wa, fa),
(Ea.prototype = {
data: '',
substringData: function (e, t) {
return this.data.substring(e, e + t)
},
appendData: function (e) {
;(e = this.data + e), (this.nodeValue = this.data = e), (this.length = e.length)
},
insertData: function (e, t) {
this.replaceData(e, 0, t)
},
appendChild: function (e) {
throw new Error(na[3])
},
deleteData: function (e, t) {
this.replaceData(e, t, '')
},
replaceData: function (e, t, i) {
var n = this.data.substring(0, e),
t = this.data.substring(e + t)
;(this.nodeValue = this.data = i = n + i + t), (this.length = i.length)
},
}),
zr(Ea, fa),
(ka.prototype = {
nodeName: '#text',
nodeType: Yr,
splitText: function (e) {
var t = (i = this.data).substring(e),
i = i.substring(0, e)
;(this.data = this.nodeValue = i), (this.length = i.length)
t = this.ownerDocument.createTextNode(t)
return this.parentNode && this.parentNode.insertBefore(t, this.nextSibling), t
},
}),
zr(ka, Ea),
(Ca.prototype = { nodeName: '#comment', nodeType: Zr }),
zr(Ca, Ea),
(Ia.prototype = { nodeName: '#cdata-section', nodeType: Qr }),
zr(Ia, Ea),
(xa.prototype.nodeType = ta),
zr(xa, fa),
(Aa.prototype.nodeType = 12),
zr(Aa, fa),
(Pa.prototype.nodeType = 6),
zr(Pa, fa),
(La.prototype.nodeType = $r),
zr(La, fa),
(Da.prototype.nodeName = '#document-fragment'),
(Da.prototype.nodeType = ia),
zr(Da, fa),
(Oa.prototype.nodeType = Jr),
zr(Oa, fa),
(Ma.prototype.serializeToString = function (e, t, i) {
return Ra.call(e, t, i)
}),
(fa.prototype.toString = Ra)
try {
Object.defineProperty &&
((ra = function e(t) {
switch (t.nodeType) {
case Xr:
case ia:
var i = []
for (t = t.firstChild; t; ) 7 !== t.nodeType && 8 !== t.nodeType && i.push(e(t)), (t = t.nextSibling)
return i.join('')
default:
return t.nodeValue
}
}),
Object.defineProperty(oa.prototype, 'length', {
get: function () {
return ua(this), this.$$length
},
}),
Object.defineProperty(fa.prototype, 'textContent', {
get: function () {
return ra(this)
},
set: function (e) {
switch (this.nodeType) {
case Xr:
case ia:
for (; this.firstChild; ) this.removeChild(this.firstChild)
;(e || String(e)) && this.appendChild(this.ownerDocument.createTextNode(e))
break
default:
;(this.data = e), (this.value = e), (this.nodeValue = e)
}
},
}),
(Fa = function (e, t, i) {
e['$$' + t] = i
}))
} catch (e) {}
var U = { DocumentType: xa, DOMException: aa, DOMImplementation: pa, Element: Sa, Node: fa, NodeList: sa, XMLSerializer: Ma },
ja = m(function (e, t) {
var i = jr.freeze
;(t.XML_ENTITIES = i({ amp: '&', apos: "'", gt: '>', lt: '<', quot: '"' })),
(t.HTML_ENTITIES = i({
lt: '<',
gt: '>',
amp: '&',
quot: '"',
apos: "'",
Agrave: 'À',
Aacute: 'Á',
Acirc: 'Â',
Atilde: 'Ã',
Auml: 'Ä',
Aring: 'Å',
AElig: 'Æ',
Ccedil: 'Ç',
Egrave: 'È',
Eacute: 'É',
Ecirc: 'Ê',
Euml: 'Ë',
Igrave: 'Ì',
Iacute: 'Í',
Icirc: 'Î',
Iuml: 'Ï',
ETH: 'Ð',
Ntilde: 'Ñ',
Ograve: 'Ò',
Oacute: 'Ó',
Ocirc: 'Ô',
Otilde: 'Õ',
Ouml: 'Ö',
Oslash: 'Ø',
Ugrave: 'Ù',
Uacute: 'Ú',
Ucirc: 'Û',
Uuml: 'Ü',
Yacute: 'Ý',
THORN: 'Þ',
szlig: 'ß',
agrave: 'à',
aacute: 'á',
acirc: 'â',
atilde: 'ã',
auml: 'ä',
aring: 'å',
aelig: 'æ',
ccedil: 'ç',
egrave: 'è',
eacute: 'é',
ecirc: 'ê',
euml: 'ë',
igrave: 'ì',
iacute: 'í',
icirc: 'î',
iuml: 'ï',
eth: 'ð',
ntilde: 'ñ',
ograve: 'ò',
oacute: 'ó',
ocirc: 'ô',
otilde: 'õ',
ouml: 'ö',
oslash: 'ø',
ugrave: 'ù',
uacute: 'ú',
ucirc: 'û',
uuml: 'ü',
yacute: 'ý',
thorn: 'þ',
yuml: 'ÿ',
nbsp: ' ',
iexcl: '¡',
cent: '¢',
pound: '£',
curren: '¤',
yen: '¥',
brvbar: '¦',
sect: '§',
uml: '¨',
copy: '©',
ordf: 'ª',
laquo: '«',
not: '¬',
shy: '',
reg: '®',
macr: '¯',
deg: '°',
plusmn: '±',
sup2: '²',
sup3: '³',
acute: '´',
micro: 'µ',
para: '¶',
middot: '·',
cedil: '¸',
sup1: '¹',
ordm: 'º',
raquo: '»',
frac14: '¼',
frac12: '½',
frac34: '¾',
iquest: '¿',
times: '×',
divide: '÷',
forall: '∀',
part: '∂',
exist: '∃',
empty: '∅',
nabla: '∇',
isin: '∈',
notin: '∉',
ni: '∋',
prod: '∏',
sum: '∑',
minus: '−',
lowast: '∗',
radic: '√',
prop: '∝',
infin: '∞',
ang: '∠',
and: '∧',
or: '∨',
cap: '∩',
cup: '∪',
int: '∫',
there4: '∴',
sim: '∼',
cong: '≅',
asymp: '≈',
ne: '≠',
equiv: '≡',
le: '≤',
ge: '≥',
sub: '⊂',
sup: '⊃',
nsub: '⊄',
sube: '⊆',
supe: '⊇',
oplus: '⊕',
otimes: '⊗',
perp: '⊥',
sdot: '⋅',
Alpha: 'Α',
Beta: 'Β',
Gamma: 'Γ',
Delta: 'Δ',
Epsilon: 'Ε',
Zeta: 'Ζ',
Eta: 'Η',
Theta: 'Θ',
Iota: 'Ι',
Kappa: 'Κ',
Lambda: 'Λ',
Mu: 'Μ',
Nu: 'Ν',
Xi: 'Ξ',
Omicron: 'Ο',
Pi: 'Π',
Rho: 'Ρ',
Sigma: 'Σ',
Tau: 'Τ',
Upsilon: 'Υ',
Phi: 'Φ',
Chi: 'Χ',
Psi: 'Ψ',
Omega: 'Ω',
alpha: 'α',
beta: 'β',
gamma: 'γ',
delta: 'δ',
epsilon: 'ε',
zeta: 'ζ',
eta: 'η',
theta: 'θ',
iota: 'ι',
kappa: 'κ',
lambda: 'λ',
mu: 'μ',
nu: 'ν',
xi: 'ξ',
omicron: 'ο',
pi: 'π',
rho: 'ρ',
sigmaf: 'ς',
sigma: 'σ',
tau: 'τ',
upsilon: 'υ',
phi: 'φ',
chi: 'χ',
psi: 'ψ',
omega: 'ω',
thetasym: 'ϑ',
upsih: 'ϒ',
piv: 'ϖ',
OElig: 'Œ',
oelig: 'œ',
Scaron: 'Š',
scaron: 'š',
Yuml: 'Ÿ',
fnof: 'ƒ',
circ: 'ˆ',
tilde: '˜',
ensp: ' ',
emsp: ' ',
thinsp: ' ',
zwnj: '',
zwj: '',
lrm: '',
rlm: '',
ndash: '–',
mdash: '—',
lsquo: '‘',
rsquo: '’',
sbquo: '‚',
ldquo: '“',
rdquo: '”',
bdquo: '„',
dagger: '†',
Dagger: '‡',
bull: '•',
hellip: '…',
permil: '‰',
prime: '′',
Prime: '″',
lsaquo: '‹',
rsaquo: '›',
oline: '‾',
euro: '€',
trade: '™',
larr: '←',
uarr: '↑',
rarr: '→',
darr: '↓',
harr: '↔',
crarr: '↵',
lceil: '⌈',
rceil: '⌉',
lfloor: '⌊',
rfloor: '⌋',
loz: '◊',
spades: '♠',
clubs: '♣',
hearts: '♥',
diams: '♦',
})),
(t.entityMap = t.HTML_ENTITIES)
})
ja.XML_ENTITIES, ja.HTML_ENTITIES, ja.entityMap
var Ha = jr.NAMESPACE,
zt = /[A-Z_a-z\xC0-\xD6\xD8-\xF6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/,
ar = new RegExp('[\\-\\.0-9' + zt.source.slice(1, -1) + '\\u00B7\\u0300-\\u036F\\u203F-\\u2040]'),
qa = new RegExp('^' + zt.source + ar.source + '*(?::' + zt.source + ar.source + '*)?$'),
Va = 0,
Wa = 1,
Ga = 2,
za = 3,
Xa = 4,
Ka = 5,
Ya = 6,
Qa = 7
function $a(e, t) {
;(this.message = e), (this.locator = t), Error.captureStackTrace && Error.captureStackTrace(this, $a)
}
function Ja() {}
function Za(e, t) {
return (t.lineNumber = e.lineNumber), (t.columnNumber = e.columnNumber), t
}
function es(e, t, i) {
for (var n = e.tagName, r = null, a = e.length; a--; ) {
var s = e[a],
o = s.qName,
u = s.value,
o = 0 < (c = o.indexOf(':')) ? ((l = s.prefix = o.slice(0, c)), (d = o.slice(c + 1)), 'xmlns' === l && d) : ((l = null), 'xmlns' === (d = o) && '')
;(s.localName = d), !1 !== o && (null == r && ((r = {}), ts(i, (i = {}))), (i[o] = r[o] = u), (s.uri = Ha.XMLNS), t.startPrefixMapping(o, u))
}
for (var l, a = e.length; a--; ) (l = (s = e[a]).prefix) && ('xml' === l && (s.uri = Ha.XML), 'xmlns' !== l && (s.uri = i[l || '']))
var c,
d = 0 < (c = n.indexOf(':')) ? ((l = e.prefix = n.slice(0, c)), (e.localName = n.slice(c + 1))) : ((l = null), (e.localName = n)),
h = (e.uri = i[l || ''])
if ((t.startElement(h, d, n, e), !e.closed)) return (e.currentNSMap = i), (e.localNSMap = r), 1
if ((t.endElement(h, d, n), r)) for (l in r) t.endPrefixMapping(l)
}
function ts(e, t) {
for (var i in e) t[i] = e[i]
}
function is() {
this.attributeNames = {}
}
;(($a.prototype = new Error()).name = $a.name),
(Ja.prototype = {
parse: function (e, t, i) {
var n = this.domBuilder
n.startDocument(),
ts(t, (t = {})),
(function (i, e, n, r, a) {
function s(e) {
var t = e.slice(1, -1)
return t in n
? n[t]
: '#' === t.charAt(0)
? 65535 < (t = parseInt(t.substr(1).replace('x', '0x')))
? ((t -= 65536), String.fromCharCode(55296 + (t >> 10), 56320 + (1023 & t)))
: String.fromCharCode(t)
: (a.error('entity not found:' + e), e)
}
function t(e) {
var t
f < e && ((t = i.substring(f, e).replace(/?\w+;/g, s)), d && o(f), r.characters(t, 0, e - f), (f = e))
}
function o(e, t) {
for (; l <= e && (t = c.exec(i)); ) (u = t.index), (l = u + t[0].length), d.lineNumber++
d.columnNumber = e - u + 1
}
var u = 0,
l = 0,
c = /.*(?:\r\n?|\n)|.*$/g,
d = r.locator,
h = [{ currentNSMap: e }],
p = {},
f = 0
for (;;) {
try {
var m,
g,
y = i.indexOf('<', f)
if (y < 0) return i.substr(f).match(/^\s*$/) || ((m = r.doc), (g = m.createTextNode(i.substr(f))), m.appendChild(g), (r.currentElement = g))
switch ((f < y && t(y), i.charAt(y + 1))) {
case '/':
var v = i.indexOf('>', y + 3),
_ = i.substring(y + 2, v).replace(/[ \t\n\r]+$/g, ''),
b = h.pop()
v < 0
? ((_ = i.substring(y + 2).replace(/[\s<].*/, '')), a.error('end tag name: ' + _ + ' is not complete:' + b.tagName), (v = y + 1 + _.length))
: _.match(/\s) && ((_ = _.replace(/[\s<].*/, '')), a.error('end tag name: ' + _ + ' maybe not complete'), (v = y + 1 + _.length))
var T = b.localNSMap,
S = b.tagName == _
if (S || (b.tagName && b.tagName.toLowerCase() == _.toLowerCase())) {
if ((r.endElement(b.uri, b.localName, _), T)) for (var w in T) r.endPrefixMapping(w)
S || a.fatalError('end tag name: ' + _ + ' is not match the current start tagName:' + b.tagName)
} else h.push(b)
v++
break
case '?':
d && o(y),
(v = (function (e, t, i) {
var n = e.indexOf('?>', t)
if (n) {
t = e.substring(t, n).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/)
return t ? (t[0].length, i.processingInstruction(t[1], t[2]), n + 2) : -1
}
return -1
})(i, y, r))
break
case '!':
d && o(y),
(v = (function (e, t, i, n) {
{
if ('-' === e.charAt(t + 2)) {
if ('-' !== e.charAt(t + 3)) return -1
var r = e.indexOf('--\x3e', t + 4)
return t < r ? (i.comment(e, t + 4, r - t - 4), r + 3) : (n.error('Unclosed comment'), -1)
}
if ('CDATA[' == e.substr(t + 3, 6)) {
r = e.indexOf(']]>', t + 9)
return i.startCDATA(), i.characters(e, t + 9, r - t - 9), i.endCDATA(), r + 3
}
var a = (function (e, t) {
var i,
n = [],
r = /'[^']+'|"[^"]+"|[^\s<>\/=]+=?|(\/?\s*>|<)/g
;(r.lastIndex = t), r.exec(e)
for (; (i = r.exec(e)); ) if ((n.push(i), i[1])) return n
})(e, t),
n = a.length
if (1 < n && /!doctype/i.test(a[0][0])) {
;(r = a[1][0]), (e = !1), (t = !1)
3 < n && (/^public$/i.test(a[2][0]) ? ((e = a[3][0]), (t = 4 < n && a[4][0])) : /^system$/i.test(a[2][0]) && (t = a[3][0]))
n = a[n - 1]
return i.startDTD(r, e, t), i.endDTD(), n.index + n[0].length
}
}
return -1
})(i, y, r, a))
break
default:
d && o(y)
var E = new is(),
k = h[h.length - 1].currentNSMap,
v = (function (e, t, n, i, r, a) {
function s(e, t, i) {
n.attributeNames.hasOwnProperty(e) && a.fatalError('Attribute ' + e + ' redefined'), n.addValue(e, t, i)
}
var o,
u = ++t,
l = Va
for (;;) {
var c = e.charAt(u)
switch (c) {
case '=':
if (l === Wa) (o = e.slice(t, u)), (l = za)
else {
if (l !== Ga) throw new Error('attribute equal must after attrName')
l = za
}
break
case "'":
case '"':
if (l === za || l === Wa) {
if ((l === Wa && (a.warning('attribute value must after "="'), (o = e.slice(t, u))), (t = u + 1), !(0 < (u = e.indexOf(c, t)))))
throw new Error("attribute value no end '" + c + "' match")
;(d = e.slice(t, u).replace(/?\w+;/g, r)), s(o, d, t - 1), (l = Ka)
} else {
if (l != Xa) throw new Error('attribute value must after "="')
;(d = e.slice(t, u).replace(/?\w+;/g, r)),
s(o, d, t),
a.warning('attribute "' + o + '" missed start quot(' + c + ')!!'),
(t = u + 1),
(l = Ka)
}
break
case '/':
switch (l) {
case Va:
n.setTagName(e.slice(t, u))
case Ka:
case Ya:
case Qa:
;(l = Qa), (n.closed = !0)
case Xa:
case Wa:
case Ga:
break
default:
throw new Error("attribute invalid close char('/')")
}
break
case '':
return a.error('unexpected end of input'), l == Va && n.setTagName(e.slice(t, u)), u
case '>':
switch (l) {
case Va:
n.setTagName(e.slice(t, u))
case Ka:
case Ya:
case Qa:
break
case Xa:
case Wa:
'/' === (d = e.slice(t, u)).slice(-1) && ((n.closed = !0), (d = d.slice(0, -1)))
case Ga:
l === Ga && (d = o),
l == Xa
? (a.warning('attribute "' + d + '" missed quot(")!'), s(o, d.replace(/?\w+;/g, r), t))
: ((Ha.isHTML(i['']) && d.match(/^(?:disabled|checked|selected)$/i)) ||
a.warning('attribute "' + d + '" missed value!! "' + d + '" instead!!'),
s(d, d, t))
break
case za:
throw new Error('attribute value missed!!')
}
return u
case '':
c = ' '
default:
if (c <= ' ')
switch (l) {
case Va:
n.setTagName(e.slice(t, u)), (l = Ya)
break
case Wa:
;(o = e.slice(t, u)), (l = Ga)
break
case Xa:
var d = e.slice(t, u).replace(/?\w+;/g, r)
a.warning('attribute "' + d + '" missed quot(")!!'), s(o, d, t)
case Ka:
l = Ya
}
else
switch (l) {
case Ga:
n.tagName,
(Ha.isHTML(i['']) && o.match(/^(?:disabled|checked|selected)$/i)) ||
a.warning('attribute "' + o + '" missed value!! "' + o + '" instead2!!'),
s(o, o, t),
(t = u),
(l = Wa)
break
case Ka:
a.warning('attribute space is required"' + o + '"!!')
case Ya:
;(l = Wa), (t = u)
break
case za:
;(l = Xa), (t = u)
break
case Qa:
throw new Error("elements closed character '/' and '>' must be connected to")
}
}
u++
}
})(i, y, E, k, s, a),
C = E.length
if (
(!E.closed &&
(function (e, t, i, n) {
var r = n[i]
null == r && ((r = e.lastIndexOf('' + i + '>')) < t && (r = e.lastIndexOf('' + i)), (n[i] = r))
return r < t
})(i, v, E.tagName, p) &&
((E.closed = !0), n.nbsp || a.warning('unclosed xml attribute')),
d && C)
) {
for (var I = Za(d, {}), x = 0; x < C; x++) {
var A = E[x]
o(A.offset), (A.locator = Za(d, {}))
}
;(r.locator = I), es(E, r, k) && h.push(E), (r.locator = d)
} else es(E, r, k) && h.push(E)
Ha.isHTML(E.uri) && !E.closed
? (v = (function (e, t, i, n, r) {
if (/^(?:script|textarea)$/i.test(i)) {
var a = e.indexOf('' + i + '>', t),
e = e.substring(t + 1, a)
if (/[&<]/.test(e)) return /^script$/i.test(i) || (e = e.replace(/?\w+;/g, n)), r.characters(e, 0, e.length), a
}
return t + 1
})(i, v, E.tagName, s, r))
: v++
}
} catch (e) {
if (e instanceof $a) throw e
a.error('element parse error: ' + e), (v = -1)
}
f < v ? (f = v) : t(Math.max(y, f) + 1)
}
})(e, t, i, n, this.errorHandler),
n.endDocument()
},
}),
(is.prototype = {
setTagName: function (e) {
if (!qa.test(e)) throw new Error('invalid tagName:' + e)
this.tagName = e
},
addValue: function (e, t, i) {
if (!qa.test(e)) throw new Error('invalid attribute:' + e)
;(this.attributeNames[e] = this.length), (this[this.length++] = { qName: e, value: t, offset: i })
},
length: 0,
getLocalName: function (e) {
return this[e].localName
},
getLocator: function (e) {
return this[e].locator
},
getQName: function (e) {
return this[e].qName
},
getURI: function (e) {
return this[e].uri
},
getValue: function (e) {
return this[e].value
},
})
var x = { XMLReader: Ja, ParseError: $a },
ns = U.DOMImplementation,
rs = jr.NAMESPACE,
as = x.ParseError,
ss = x.XMLReader
function os(e) {
this.options = e || { locator: {} }
}
function us() {
this.cdata = !1
}
function ls(e, t) {
;(t.lineNumber = e.lineNumber), (t.columnNumber = e.columnNumber)
}
function cs(e) {
if (e) return '\n@' + (e.systemId || '') + '#[line:' + e.lineNumber + ',col:' + e.columnNumber + ']'
}
function ds(e, t, i) {
return 'string' == typeof e ? e.substr(t, i) : e.length >= t + i || t ? new java.lang.String(e, t, i) + '' : e
}
function hs(e, t) {
;(e.currentElement || e.doc).appendChild(t)
}
;(os.prototype.parseFromString = function (e, t) {
var i = this.options,
n = new ss(),
r = i.domBuilder || new us(),
a = i.errorHandler,
s = i.locator,
o = i.xmlns || {},
u = /\/x?html?$/.test(t),
t = u ? ja.HTML_ENTITIES : ja.XML_ENTITIES
return (
s && r.setDocumentLocator(s),
(n.errorHandler = (function (n, e, r) {
if (!n) {
if (e instanceof us) return e
n = e
}
var a = {},
s = n instanceof Function
function t(t) {
var i = n[t]
!i &&
s &&
(i =
2 == n.length
? function (e) {
n(t, e)
}
: n),
(a[t] = i
? function (e) {
i('[xmldom ' + t + ']\t' + e + cs(r))
}
: function () {})
}
return (r = r || {}), t('warning'), t('error'), t('fatalError'), a
})(a, r, s)),
(n.domBuilder = i.domBuilder || r),
u && (o[''] = rs.HTML),
(o.xml = o.xml || rs.XML),
e && 'string' == typeof e ? n.parse(e, o, t) : n.errorHandler.error('invalid doc source'),
r.doc
)
}),
(us.prototype = {
startDocument: function () {
;(this.doc = new ns().createDocument(null, null, null)), this.locator && (this.doc.documentURI = this.locator.systemId)
},
startElement: function (e, t, i, n) {
var r = this.doc,
a = r.createElementNS(e, i || t),
s = n.length
hs(this, a), (this.currentElement = a), this.locator && ls(this.locator, a)
for (var o = 0; o < s; o++) {
var e = n.getURI(o),
u = n.getValue(o),
i = n.getQName(o),
l = r.createAttributeNS(e, i)
this.locator && ls(n.getLocator(o), l), (l.value = l.nodeValue = u), a.setAttributeNode(l)
}
},
endElement: function (e, t, i) {
var n = this.currentElement
n.tagName, (this.currentElement = n.parentNode)
},
startPrefixMapping: function (e, t) {},
endPrefixMapping: function (e) {},
processingInstruction: function (e, t) {
t = this.doc.createProcessingInstruction(e, t)
this.locator && ls(this.locator, t), hs(this, t)
},
ignorableWhitespace: function (e, t, i) {},
characters: function (e, t, i) {
var n
;(e = ds.apply(this, arguments)) &&
((n = this.cdata ? this.doc.createCDATASection(e) : this.doc.createTextNode(e)),
this.currentElement ? this.currentElement.appendChild(n) : /^\s*$/.test(e) && this.doc.appendChild(n),
this.locator && ls(this.locator, n))
},
skippedEntity: function (e) {},
endDocument: function () {
this.doc.normalize()
},
setDocumentLocator: function (e) {
;(this.locator = e) && (e.lineNumber = 0)
},
comment: function (e, t, i) {
e = ds.apply(this, arguments)
e = this.doc.createComment(e)
this.locator && ls(this.locator, e), hs(this, e)
},
startCDATA: function () {
this.cdata = !0
},
endCDATA: function () {
this.cdata = !1
},
startDTD: function (e, t, i) {
var n = this.doc.implementation
n && n.createDocumentType && ((i = n.createDocumentType(e, t, i)), this.locator && ls(this.locator, i), hs(this, i), (this.doc.doctype = i))
},
warning: function (e) {},
error: function (e) {},
fatalError: function (e) {
throw new as(e, this.locator)
},
}),
'endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl'.replace(/\w+/g, function (e) {
us.prototype[e] = function () {
return null
}
})
function ps(e) {
return !!e && 'object' == typeof e
}
function fs() {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
return t.reduce(function (t, i) {
return (
'object' != typeof i ||
Object.keys(i).forEach(function (e) {
Array.isArray(t[e]) && Array.isArray(i[e]) ? (t[e] = t[e].concat(i[e])) : ps(t[e]) && ps(i[e]) ? (t[e] = fs(t[e], i[e])) : (t[e] = i[e])
}),
t
)
}, {})
}
function ms(t) {
return Object.keys(t).map(function (e) {
return t[e]
})
}
function gs(e) {
return e.reduce(function (e, t) {
return e.concat(t)
}, [])
}
function ys(e) {
if (!e.length) return []
for (var t = [], i = 0; i < e.length; i++) t.push(e[i])
return t
}
function vs(e, t) {
for (var i = 0; i < e.length; i++) if (t(e[i])) return i
return -1
}
function _s(e) {
var t = e.baseUrl,
i = void 0 === (n = e.source) ? '' : n,
n = void 0 === (n = e.range) ? '' : n,
e = void 0 === (e = e.indexRange) ? '' : e,
i = { uri: i, resolvedUri: ir((void 0 === t ? '' : t) || '', i) }
return (
(n || e) &&
((n = (n || e).split('-')),
(e = window.BigInt ? window.BigInt(n[0]) : parseInt(n[0], 10)),
(n = window.BigInt ? window.BigInt(n[1]) : parseInt(n[1], 10)),
e < Number.MAX_SAFE_INTEGER && 'bigint' == typeof e && (e = Number(e)),
'bigint' ==
typeof (n =
'bigint' == typeof (n = n < Number.MAX_SAFE_INTEGER && 'bigint' == typeof n ? Number(n) : n) || 'bigint' == typeof e
? window.BigInt(n) - window.BigInt(e) + window.BigInt(1)
: n - e + 1) &&
n < Number.MAX_SAFE_INTEGER &&
(n = Number(n)),
(i.byterange = { length: n, offset: e })),
i
)
}
function bs(e) {
return e && 'number' != typeof e && (e = parseInt(e, 10)), isNaN(e) ? null : e
}
function Ts(e) {
var a,
t = e.type,
i = e.duration,
n = e.timescale,
r = void 0 === n ? 1 : n,
s = e.periodDuration,
o = e.sourceDuration,
e = (function (e, t) {
for (var i = [], n = e; n < t; n++) i.push(n)
return i
})((n = go[t](e)).start, n.end).map(
((a = e),
function (e) {
var t = a.duration,
i = a.timescale,
n = a.periodStart,
r = a.startNumber
return { number: (void 0 === r ? 1 : r) + e, duration: t / (void 0 === i ? 1 : i), timeline: n, time: e * t }
})
)
return 'static' === t && (e[(t = e.length - 1)].duration = ('number' == typeof s ? s : o) - (i / r) * t), e
}
function Ss(e) {
var t = e.baseUrl,
i = void 0 === (u = e.initialization) ? {} : u,
n = e.sourceDuration,
r = void 0 === (o = e.indexRange) ? '' : o,
a = e.periodStart,
s = e.presentationTime,
o = void 0 === (u = e.number) ? 0 : u,
u = e.duration
if (!t) throw new Error(po)
return (
(i = _s({ baseUrl: t, source: i.sourceURL, range: i.range })),
((r = _s({ baseUrl: t, source: t, indexRange: r })).map = i),
u ? (e = Ts(e)).length && ((r.duration = e[0].duration), (r.timeline = e[0].timeline)) : n && ((r.duration = n), (r.timeline = a)),
(r.presentationTime = s || a),
(r.number = o),
[r]
)
}
function ws(e, t, i) {
for (
var n = e.sidx.map || null,
r = e.sidx.duration,
a = e.timeline || 0,
s = (s = e.sidx.byterange).offset + s.length,
o = t.timescale,
u = t.references.filter(function (e) {
return 1 !== e.referenceType
}),
l = [],
c = e.endList ? 'static' : 'dynamic',
d = e.sidx.timeline,
h = d,
p = e.mediaSequence || 0,
f = 'bigint' == typeof t.firstOffset ? window.BigInt(s) + t.firstOffset : s + t.firstOffset,
m = 0;
m < u.length;
m++
) {
var g = t.references[m],
y = g.referencedSize,
v = g.subsegmentDuration,
g = void 0,
g = 'bigint' == typeof f ? f + window.BigInt(y) - window.BigInt(1) : f + y - 1,
g = Ss({ baseUrl: i, timescale: o, timeline: a, periodStart: d, presentationTime: h, number: p, duration: v, sourceDuration: r, indexRange: f + '-' + g, type: c })[0]
n && (g.map = n), l.push(g), (f += 'bigint' == typeof f ? window.BigInt(y) : y), (h += v / o), p++
}
return (e.segments = l), e
}
function Es(e) {
return (
(i = function (e) {
return e.timeline
}),
ms(
e.reduce(function (t, e) {
return (
e.forEach(function (e) {
t[i(e)] = e
}),
t
)
}, {})
).sort(function (e, t) {
return e.timeline > t.timeline ? 1 : -1
})
)
var i
}
function ks(e) {
var r,
a,
s = []
return (
(r = e),
(a = function (e, t, i, n) {
s = s.concat(e.playlists || [])
}),
yo.forEach(function (e) {
for (var t in r.mediaGroups[e])
for (var i in r.mediaGroups[e][t]) {
var n = r.mediaGroups[e][t][i]
a(n, e, t, i)
}
}),
s
)
}
function Cs(e) {
var i = e.playlist,
e = e.mediaSequence
;(i.mediaSequence = e),
i.segments.forEach(function (e, t) {
e.number = i.mediaSequence + t
})
}
function Is(e) {
var r,
a,
t = e.oldManifest,
i = e.newManifest,
n = t.playlists.concat(ks(t)),
e = i.playlists.concat(ks(i))
return (
(i.timelineStarts = Es([t.timelineStarts, i.timelineStarts])),
(n = { oldPlaylists: n, newPlaylists: e, timelineStarts: i.timelineStarts }),
(r = n.oldPlaylists),
(e = n.newPlaylists),
(a = n.timelineStarts),
e.forEach(function (t) {
t.discontinuitySequence = vs(a, function (e) {
return e.timeline === t.timeline
})
var e = (function (e, t) {
for (var i = 0; i < e.length; i++) if (e[i].attributes.NAME === t) return e[i]
return null
})(r, t.attributes.NAME)
if (e && !t.sidx) {
var i = t.segments[0],
n = vs(e.segments, function (e) {
return Math.abs(e.presentationTime - i.presentationTime) < 1 / 60
})
if (-1 === n)
return (
Cs({ playlist: t, mediaSequence: e.mediaSequence + e.segments.length }),
(t.segments[0].discontinuity = !0),
t.discontinuityStarts.unshift(0),
void (((!e.segments.length && t.timeline > e.timeline) || (e.segments.length && t.timeline > e.segments[e.segments.length - 1].timeline)) && t.discontinuitySequence--)
)
e.segments[n].discontinuity && !i.discontinuity && ((i.discontinuity = !0), t.discontinuityStarts.unshift(0), t.discontinuitySequence--),
Cs({ playlist: t, mediaSequence: e.segments[n].number })
}
}),
i
)
}
function xs(e) {
return (
e &&
e.uri +
'-' +
((t = e.byterange),
(e = 'bigint' == typeof t.offset || 'bigint' == typeof t.length ? window.BigInt(t.offset) + window.BigInt(t.length) - window.BigInt(1) : t.offset + t.length - 1),
t.offset + '-' + e)
)
var t
}
function As(e) {
return ms(
e.reduce(function (e, t) {
var i,
n = t.attributes.id + (t.attributes.lang || '')
return (
e[n]
? (t.segments && (t.segments[0] && (t.segments[0].discontinuity = !0), (i = e[n].segments).push.apply(i, t.segments)),
t.attributes.contentProtection && (e[n].attributes.contentProtection = t.attributes.contentProtection))
: ((e[n] = t), (e[n].attributes.timelineStarts = [])),
e[n].attributes.timelineStarts.push({ start: t.attributes.periodStart, timeline: t.attributes.periodStart }),
e
)
}, {})
).map(function (e) {
var t, n
return (
(e.discontinuityStarts =
((t = e.segments || []),
(n = 'discontinuity'),
t.reduce(function (e, t, i) {
return t[n] && e.push(i), e
}, []))),
e
)
})
}
function Ps(e, t) {
var i = xs(e.sidx)
return (i = i && t[i] && t[i].sidx) && ws(e, i, e.sidx.resolvedUri), e
}
function Ls(e, h, p) {
var f
return (
void 0 === h && (h = {}),
void 0 === p && (p = !1),
(e = e.reduce(function (e, t) {
var i = (t.attributes.role && t.attributes.role.value) || '',
n = t.attributes.lang || '',
r = t.attributes.label || 'main'
e[(r = n && !t.attributes.label ? t.attributes.lang + (i ? ' (' + i + ')' : '') : r)] || (e[r] = { language: n, autoselect: !0, default: 'main' === i, playlists: [], uri: '' })
var a,
s,
o,
u,
l,
c,
d,
u = Ps(
((s = p),
(o = (a = t).attributes),
(u = a.segments),
(l = a.sidx),
(c = a.mediaSequence),
(d = a.discontinuitySequence),
(n = a.discontinuityStarts),
(u = {
attributes: (((a = { NAME: o.id, BANDWIDTH: o.bandwidth, CODECS: o.codecs })['PROGRAM-ID'] = 1), a),
uri: '',
endList: 'static' === o.type,
timeline: o.periodStart,
resolvedUri: '',
targetDuration: o.duration,
discontinuitySequence: d,
discontinuityStarts: n,
timelineStarts: o.timelineStarts,
mediaSequence: c,
segments: u,
}),
o.contentProtection && (u.contentProtection = o.contentProtection),
l && (u.sidx = l),
s && ((u.attributes.AUDIO = 'audio'), (u.attributes.SUBTITLES = 'subs')),
u),
h
)
return e[r].playlists.push(u), 'undefined' == typeof f && 'main' === i && ((f = t).default = !0), e
}, {})),
f || (e[Object.keys(e)[0]].default = !0),
e
)
}
function Ds(e) {
var t = e.attributes,
i = e.segments,
n = e.sidx,
r = e.discontinuityStarts,
i = {
attributes:
(((e = { NAME: t.id, AUDIO: 'audio', SUBTITLES: 'subs', RESOLUTION: { width: t.width, height: t.height }, CODECS: t.codecs, BANDWIDTH: t.bandwidth })['PROGRAM-ID'] = 1), e),
uri: '',
endList: 'static' === t.type,
timeline: t.periodStart,
resolvedUri: '',
targetDuration: t.duration,
discontinuityStarts: r,
timelineStarts: t.timelineStarts,
segments: i,
}
return t.contentProtection && (i.contentProtection = t.contentProtection), n && (i.sidx = n), i
}
function Os(e) {
return 'video/mp4' === (e = e.attributes).mimeType || 'video/webm' === e.mimeType || 'video' === e.contentType
}
function Ms(e) {
return 'audio/mp4' === (e = e.attributes).mimeType || 'audio/webm' === e.mimeType || 'audio' === e.contentType
}
function Rs(e) {
return 'text/vtt' === (e = e.attributes).mimeType || 'text' === e.contentType
}
function Ns(i) {
return i
? Object.keys(i).reduce(function (e, t) {
t = i[t]
return e.concat(t.playlists)
}, [])
: []
}
function Us(e) {
var t = e.dashPlaylists,
i = e.locations,
n = void 0 === (c = e.sidxMapping) ? {} : c,
r = e.previousManifest
if (!t.length) return {}
var a = (d = t[0].attributes).sourceDuration,
s = d.type,
o = d.suggestedPresentationDelay,
u = d.minimumUpdatePeriod,
l = As(t.filter(Os)).map(Ds),
c = As(t.filter(Ms)),
e = As(t.filter(Rs)),
d = t
.map(function (e) {
return e.attributes.captionServices
})
.filter(Boolean),
a = {
allowCache: !0,
discontinuityStarts: [],
segments: [],
endList: !0,
mediaGroups: (((t = { AUDIO: {}, VIDEO: {} })['CLOSED-CAPTIONS'] = {}), (t.SUBTITLES = {}), t),
uri: '',
duration: a,
playlists: (function (e, t) {
if ((void 0 === t && (t = {}), !Object.keys(t).length)) return e
for (var i in e) e[i] = Ps(e[i], t)
return e
})(l, n),
}
0 <= u && (a.minimumUpdatePeriod = 1e3 * u), i && (a.locations = i), 'dynamic' === s && (a.suggestedPresentationDelay = o)
var h,
p,
o = 0 === a.playlists.length,
o = c.length ? Ls(c, n, o) : null,
n = e.length
? (void 0 === (h = n) && (h = {}),
e.reduce(function (e, t) {
var i = t.attributes.lang || 'text'
return (
e[i] || (e[i] = { language: i, default: !1, autoselect: !1, playlists: [], uri: '' }),
e[i].playlists.push(
Ps(
(function (e) {
var t = e.attributes,
i = e.segments,
n = e.mediaSequence,
r = e.discontinuityStarts,
a = e.discontinuitySequence
'undefined' == typeof i &&
((i = [{ uri: t.baseUrl, timeline: t.periodStart, resolvedUri: t.baseUrl || '', duration: t.sourceDuration, number: 0 }]), (t.duration = t.sourceDuration))
;(e = { NAME: t.id, BANDWIDTH: t.bandwidth })['PROGRAM-ID'] = 1
return (
t.codecs && (e.CODECS = t.codecs),
{
attributes: e,
uri: '',
endList: 'static' === t.type,
timeline: t.periodStart,
resolvedUri: t.baseUrl || '',
targetDuration: t.duration,
timelineStarts: t.timelineStarts,
discontinuityStarts: r,
discontinuitySequence: a,
mediaSequence: n,
segments: i,
}
)
})(t),
h
)
),
e
)
}, {}))
: null,
l = (e = l.concat(Ns(o), Ns(n))).map(function (e) {
return e.timelineStarts
})
return (
(a.timelineStarts = Es(l)),
(e = e),
(p = a.timelineStarts),
e.forEach(function (t) {
;(t.mediaSequence = 0),
(t.discontinuitySequence = vs(p, function (e) {
return e.timeline === t.timeline
})),
t.segments &&
t.segments.forEach(function (e, t) {
e.number = t
})
}),
o && (a.mediaGroups.AUDIO.audio = o),
n && (a.mediaGroups.SUBTITLES.subs = n),
d.length &&
(a.mediaGroups['CLOSED-CAPTIONS'].cc = d.reduce(function (n, e) {
return (
e &&
e.forEach(function (e) {
var t = e.channel,
i = e.language
;(n[i] = { autoselect: !1, default: !1, instreamId: t, language: i }),
e.hasOwnProperty('aspectRatio') && (n[i].aspectRatio = e.aspectRatio),
e.hasOwnProperty('easyReader') && (n[i].easyReader = e.easyReader),
e.hasOwnProperty('3D') && (n[i]['3D'] = e['3D'])
}),
n
)
}, {})),
r ? Is({ oldManifest: r, newManifest: a }) : a
)
}
function Bs(e, t) {
for (
var i,
n,
r,
a,
s,
o,
u = e.type,
l = e.minimumUpdatePeriod,
c = void 0 === l ? 0 : l,
d = void 0 === (l = e.media) ? '' : l,
h = e.sourceDuration,
p = void 0 === (l = e.timescale) ? 1 : l,
f = void 0 === (l = e.startNumber) ? 1 : l,
m = e.periodStart,
g = [],
y = -1,
v = 0;
v < t.length;
v++
) {
var _ = t[v],
b = _.d,
T = _.r || 0,
S = _.t || 0
y < 0 && (y = S), S && y < S && (y = S)
var w,
E = void 0
E =
T < 0
? (w = v + 1) === t.length
? 'dynamic' === u && 0 < c && 0 < d.indexOf('$Number$')
? ((i = y),
(n = b),
(_ = o = s = a = r = void 0),
(r = (S = e).NOW),
(a = S.clientOffset),
(s = S.availabilityStartTime),
(o = S.timescale),
(_ = S.periodStart),
(S = S.minimumUpdatePeriod),
Math.ceil((((r + a) / 1e3 + (void 0 === S ? 0 : S) - (s + (void 0 === _ ? 0 : _))) * (void 0 === o ? 1 : o) - i) / n))
: (h * p - y) / b
: (t[w].t - y) / b
: T + 1
for (var k = f + g.length + E, C = f + g.length; C < k; ) g.push({ number: C, duration: b / p, time: y, timeline: m }), (y += b), C++
}
return g
}
function Fs(e, t) {
return e.replace(
vo,
((r = t),
function (e, t, i, n) {
if ('$$' === e) return '$'
if ('undefined' == typeof r[t]) return e
e = '' + r[t]
return 'RepresentationID' === t || (n = i ? parseInt(n, 10) : 1) <= e.length ? e : new Array(n - e.length + 1).join('0') + e
})
)
var r
}
function js(r, e) {
var a = { RepresentationID: r.id, Bandwidth: r.bandwidth || 0 },
t = void 0 === (t = r.initialization) ? { sourceURL: '', range: '' } : t,
s = _s({ baseUrl: r.baseUrl, source: Fs(t.sourceURL, a), range: t.range })
return ((t = e), (e = r).duration || t ? (e.duration ? Ts(e) : Bs(e, t)) : [{ number: e.startNumber || 1, duration: e.sourceDuration, time: 0, timeline: e.periodStart }]).map(function (e) {
;(a.Number = e.number), (a.Time = e.time)
var t = Fs(r.media || '', a),
i = r.timescale || 1,
n = r.presentationTimeOffset || 0,
i = r.periodStart + (e.time - n) / i
return { uri: t, timeline: e.timeline, duration: e.duration, resolvedUri: ir(r.baseUrl || '', t), map: s, number: e.number, presentationTime: i }
})
}
function Hs(r, e) {
var t = r.duration,
i = void 0 === (i = r.segmentUrls) ? [] : i,
a = r.periodStart
if ((!t && !e) || (t && e)) throw new Error(fo)
var n,
s = i.map(function (e) {
return (
(i = e),
(e = (t = r).baseUrl),
(t = t.initialization),
(t = _s({ baseUrl: e, source: (t = void 0 === t ? {} : t).sourceURL, range: t.range })),
((i = _s({ baseUrl: e, source: i.media, range: i.mediaRange })).map = t),
i
)
var t, i
})
return (
t && (n = Ts(r)),
(n = e ? Bs(r, e) : n)
.map(function (e, t) {
if (s[t]) {
var i = s[t],
n = r.timescale || 1,
t = r.presentationTimeOffset || 0
return (i.timeline = e.timeline), (i.duration = e.duration), (i.number = e.number), (i.presentationTime = a + (e.time - t) / n), i
}
})
.filter(function (e) {
return e
})
)
}
function qs(e) {
var t,
i = e.attributes,
n = e.segmentInfo
n.template ? ((a = js), (t = fs(i, n.template))) : n.base ? ((a = Ss), (t = fs(i, n.base))) : n.list && ((a = Hs), (t = fs(i, n.list)))
var r = { attributes: i }
if (!a) return r
var a,
e = a(t, n.segmentTimeline)
return (
t.duration
? ((i = t.duration), (a = t.timescale), (t.duration = i / (void 0 === a ? 1 : a)))
: e.length
? (t.duration = e.reduce(function (e, t) {
return Math.max(e, Math.ceil(t.duration))
}, 0))
: (t.duration = 0),
(r.attributes = t),
(r.segments = e),
n.base && t.indexRange && ((r.sidx = e[0]), (r.segments = [])),
r
)
}
function Vs(e, t) {
return ys(e.childNodes).filter(function (e) {
return e.tagName === t
})
}
function Ws(e) {
return e.textContent.trim()
}
function Gs(e) {
if (!(r = /P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)D)?(?:T(?:(\d*)H)?(?:(\d*)M)?(?:([\d.]*)S)?)?/.exec(e))) return 0
var t = (a = r.slice(1))[0],
i = a[1],
n = a[2],
e = a[3],
r = a[4],
a = a[5]
return 31536e3 * parseFloat(t || 0) + 2592e3 * parseFloat(i || 0) + 86400 * parseFloat(n || 0) + 3600 * parseFloat(e || 0) + 60 * parseFloat(r || 0) + parseFloat(a || 0)
}
function zs(e) {
return e && e.attributes
? ys(e.attributes).reduce(function (e, t) {
var i = _o[t.name] || _o.DEFAULT
return (e[t.name] = i(t.value)), e
}, {})
: {}
}
function Xs(e, i) {
return i.length
? gs(
e.map(function (t) {
return i.map(function (e) {
return ir(t, Ws(e))
})
})
)
: e
}
function Ks(e) {
var t = Vs(e, 'SegmentTemplate')[0],
i = Vs(e, 'SegmentList')[0],
n =
i &&
Vs(i, 'SegmentURL').map(function (e) {
return fs({ tag: 'SegmentURL' }, zs(e))
}),
r = Vs(e, 'SegmentBase')[0],
e = (a = i || t) && Vs(a, 'SegmentTimeline')[0],
a = (a = i || r || t) && Vs(a, 'Initialization')[0]
;(t = t && zs(t)) && a ? (t.initialization = a && zs(a)) : t && t.initialization && (t.initialization = { sourceURL: t.initialization })
var s = { template: t, segmentTimeline: e && Vs(e, 'S').map(zs), list: i && fs(zs(i), { segmentUrls: n, initialization: zs(a) }), base: r && fs(zs(r), { initialization: zs(a) }) }
return (
Object.keys(s).forEach(function (e) {
s[e] || delete s[e]
}),
s
)
}
function Ys(u, l, c) {
return function (e) {
var t = zs(e),
i = Xs(l, Vs(e, 'BaseURL')),
n = Vs(e, 'Role')[0],
n = { role: zs(n) },
t = fs(u, t, n),
n = Vs(e, 'Accessibility')[0],
n =
'urn:scte:dash:cc:cea-608:2015' === (n = zs(n)).schemeIdUri
? ('string' != typeof n.value ? [] : n.value.split(';')).map(function (e) {
var t, i, n
return /^CC\d=/.test((n = e)) ? ((i = (t = e.split('='))[0]), (n = t[1])) : /^CC\d$/.test(e) && (i = e), { channel: i, language: n }
})
: 'urn:scte:dash:cc:cea-708:2015' === n.schemeIdUri
? ('string' != typeof n.value ? [] : n.value.split(';')).map(function (e) {
var t,
i,
n = { channel: void 0, language: void 0, aspectRatio: 1, easyReader: 0, '3D': 0 }
return (
/=/.test(e)
? ((t = (i = e.split('='))[0]),
(i = void 0 === (i = i[1]) ? '' : i),
(n.channel = t),
(n.language = e),
i.split(',').forEach(function (e) {
var t = e.split(':'),
e = t[0],
t = t[1]
'lang' === e ? (n.language = t) : 'er' === e ? (n.easyReader = Number(t)) : 'war' === e ? (n.aspectRatio = Number(t)) : '3D' === e && (n['3D'] = Number(t))
}))
: (n.language = e),
n.channel && (n.channel = 'SERVICE' + n.channel),
n
)
})
: void 0
n && (t = fs(t, { captionServices: n }))
n = Vs(e, 'Label')[0]
n && n.childNodes.length && ((r = n.childNodes[0].nodeValue.trim()), (t = fs(t, { label: r })))
var r = Vs(e, 'ContentProtection').reduce(function (e, t) {
var i = zs(t)
i.schemeIdUri && (i.schemeIdUri = i.schemeIdUri.toLowerCase())
var n = bo[i.schemeIdUri]
return n && ((e[n] = { attributes: i }), (t = Vs(t, 'cenc:pssh')[0]) && ((t = Ws(t)), (e[n].pssh = t && or(t)))), e
}, {})
Object.keys(r).length && (t = fs(t, { contentProtection: r }))
var a,
s,
o,
r = Ks(e),
e = Vs(e, 'Representation'),
r = fs(c, r)
return gs(
e.map(
((a = t),
(s = i),
(o = r),
function (e) {
var t = Vs(e, 'BaseURL'),
t = Xs(s, t),
i = fs(a, zs(e)),
n = Ks(e)
return t.map(function (e) {
return { segmentInfo: fs(o, n), attributes: fs(i, { baseUrl: e }) }
})
})
)
)
}
}
function Qs(e, t) {
var i = (t = void 0 === t ? {} : t),
n = void 0 === (a = i.manifestUri) ? '' : a,
t = void 0 === (r = i.NOW) ? Date.now() : r,
r = void 0 === (a = i.clientOffset) ? 0 : a
if (!(i = Vs(e, 'Period')).length) throw new Error(lo)
var a = Vs(e, 'Location'),
s = zs(e),
e = Xs([n], Vs(e, 'BaseURL'))
;(s.type = s.type || 'static'), (s.sourceDuration = s.mediaPresentationDuration || 0), (s.NOW = t), (s.clientOffset = r), a.length && (s.locations = a.map(Ws))
var o,
u,
l = []
return (
i.forEach(function (e, t) {
var i,
n = zs(e),
r = l[t - 1]
;(n.start =
((i = { attributes: n, priorPeriodAttributes: r ? r.attributes : null, mpdType: s.type }),
(t = i.attributes),
(r = i.priorPeriodAttributes),
(i = i.mpdType),
'number' == typeof t.start ? t.start : r && 'number' == typeof r.start && 'number' == typeof r.duration ? r.start + r.duration : r || 'static' !== i ? null : 0)),
l.push({ node: e, attributes: n })
}),
{
locations: s.locations,
representationInfo: gs(
l.map(
((o = s),
(u = e),
function (e, t) {
var i = Xs(u, Vs(e.node, 'BaseURL')),
n = fs(o, { periodStart: e.attributes.start })
'number' == typeof e.attributes.duration && (n.periodDuration = e.attributes.duration)
var r = Vs(e.node, 'AdaptationSet'),
e = Ks(e.node)
return gs(r.map(Ys(n, i, e)))
})
)
),
}
)
}
function $s(e) {
if ('' === e) throw new Error(co)
var t,
i,
n = new uo()
try {
i = (t = n.parseFromString(e, 'application/xml')) && 'MPD' === t.documentElement.tagName ? t.documentElement : null
} catch (e) {}
if (!i || (i && 0 < i.getElementsByTagName('parsererror').length)) throw new Error(ho)
return i
}
function Js(e, t) {
void 0 === t && (t = {})
var i = Qs($s(e), t),
e = i.representationInfo.map(qs)
return Us({ dashPlaylists: e, locations: i.locations, sidxMapping: t.sidxMapping, previousManifest: t.previousManifest })
}
function Zs(e) {
return (function (e) {
e = Vs(e, 'UTCTiming')[0]
if (!e) return null
var t = zs(e)
switch (t.schemeIdUri) {
case 'urn:mpeg:dash:utc:http-head:2014':
case 'urn:mpeg:dash:utc:http-head:2012':
t.method = 'HEAD'
break
case 'urn:mpeg:dash:utc:http-xsdate:2014':
case 'urn:mpeg:dash:utc:http-iso:2014':
case 'urn:mpeg:dash:utc:http-xsdate:2012':
case 'urn:mpeg:dash:utc:http-iso:2012':
t.method = 'GET'
break
case 'urn:mpeg:dash:utc:direct:2014':
case 'urn:mpeg:dash:utc:direct:2012':
;(t.method = 'DIRECT'), (t.value = Date.parse(t.value))
break
case 'urn:mpeg:dash:utc:http-ntp:2014':
case 'urn:mpeg:dash:utc:ntp:2014':
case 'urn:mpeg:dash:utc:sntp:2014':
default:
throw new Error(mo)
}
return t
})($s(e))
}
function eo(e, t) {
return (
void 0 === t && (t = 0),
(e = br(e)).length - t < 10 || !wr(e, Eo, { offset: t })
? t
: eo(
e,
(t += (function (e, t) {
void 0 === t && (t = 0)
var i = (e = br(e))[t + 5],
t = (e[t + 6] << 21) | (e[t + 7] << 14) | (e[t + 8] << 7) | e[t + 9]
return (16 & i) >> 4 ? 20 + t : 10 + t
})(e, t))
)
)
}
function to(e) {
return 'string' == typeof e ? Sr(e) : e
}
function io(e, t, i) {
var n
void 0 === i && (i = !1), (n = t), (t = Array.isArray(n) ? n.map(to) : [to(n)]), (e = br(e))
var r = []
if (!t.length) return r
for (var a = 0; a < e.length; ) {
var s = ((e[a] << 24) | (e[a + 1] << 16) | (e[a + 2] << 8) | e[a + 3]) >>> 0,
o = e.subarray(a + 4, a + 8)
if (0 == s) break
var u = a + s
if (u > e.length) {
if (i) break
u = e.length
}
s = e.subarray(a + 8, u)
wr(o, t[0]) && (1 === t.length ? r.push(s) : r.push.apply(r, io(s, t.slice(1), i))), (a = u)
}
return r
}
function no(e, t, i, n) {
void 0 === i && (i = !0), void 0 === n && (n = !1)
var r = (function (e) {
for (var t = 1, i = 0; i < Co.length && !(e & Co[i]); i++) t++
return t
})(e[t]),
a = e.subarray(t, t + r)
return (
i && ((a = Array.prototype.slice.call(e, t, t + r))[0] ^= Co[r - 1]),
{
length: r,
value: (function (n, e) {
var t = void 0 === e ? {} : e,
e = t.signed,
e = void 0 !== e && e,
t = t.le,
r = void 0 !== t && t
n = br(n)
;(t = r ? 'reduce' : 'reduceRight'),
(t = (n[t] || Array.prototype[t]).call(
n,
function (e, t, i) {
i = r ? i : Math.abs(i + 1 - n.length)
return e + Rr(t) * Nr[i]
},
Rr(0)
))
return !e || ((e = Nr[n.length] / Rr(2) - Rr(1)) < (t = Rr(t)) && ((t -= e), (t -= e), (t -= Rr(2)))), Number(t)
})(a, { signed: n }),
bytes: a,
}
)
}
function ro(e) {
return 'string' == typeof e ? e.match(/.{1,2}/g).map(ro) : 'number' == typeof e ? Tr(e) : e
}
function ao(e, t, i) {
if (i >= t.length) return t.length
var n = no(t, i, !1)
if (wr(e.bytes, n.bytes)) return i
var r = no(t, i + n.length)
return ao(e, t, i + r.length + r.value + n.length)
}
function so(e, t) {
var i
;(i = t), (t = Array.isArray(i) ? i.map(ro) : [ro(i)]), (e = br(e))
var n = []
if (!t.length) return n
for (var r = 0; r < e.length; ) {
var a = no(e, r, !1),
s = no(e, r + a.length),
o = r + a.length + s.length
127 === s.value && ((s.value = ao(a, e, o)), s.value !== e.length && (s.value -= o))
var u = o + s.value > e.length ? e.length : o + s.value,
u = e.subarray(o, u)
wr(t[0], a.bytes) && (1 === t.length ? n.push(u) : (n = n.concat(so(u, t.slice(1))))), (r += a.length + s.length + u.length)
}
return n
}
function oo(e, t, i, n) {
void 0 === n && (n = 1 / 0), (e = br(e)), (i = [].concat(i))
for (var r, a = 0, s = 0; a < e.length && (s < n || r); ) {
var o = void 0
if ((wr(e.subarray(a), Io) ? (o = 4) : wr(e.subarray(a), xo) && (o = 3), o)) {
if ((s++, r))
return (function (e) {
for (var t = [], i = 1; i < e.length - 2; ) wr(e.subarray(i, i + 3), Ao) && (t.push(i + 2), i++), i++
if (0 === t.length) return e
for (var n = e.length - t.length, r = new Uint8Array(n), a = 0, i = 0; i < n; a++, i++) a === t[0] && (a++, t.shift()), (r[i] = e[a])
return r
})(e.subarray(r, a))
var u = void 0
'h264' === t ? (u = 31 & e[a + o]) : 'h265' === t && (u = (e[a + o] >> 1) & 63), -1 !== i.indexOf(u) && (r = a + o), (a += o + ('h264' === t ? 1 : 2))
} else a++
}
return e.subarray(0, 0)
}
var uo = { __DOMHandler: us, DOMParser: os, DOMImplementation: U.DOMImplementation, XMLSerializer: U.XMLSerializer }.DOMParser,
lo = 'INVALID_NUMBER_OF_PERIOD',
co = 'DASH_EMPTY_MANIFEST',
ho = 'DASH_INVALID_XML',
po = 'NO_BASE_URL',
fo = 'SEGMENT_TIME_UNSPECIFIED',
mo = 'UNSUPPORTED_UTC_TIMING_SCHEME',
go = {
static: function (e) {
var t = e.duration,
i = e.timescale,
n = void 0 === i ? 1 : i,
r = e.sourceDuration,
i = e.periodDuration,
e = bs(e.endNumber),
n = t / n
return 'number' == typeof e ? { start: 0, end: e } : 'number' == typeof i ? { start: 0, end: i / n } : { start: 0, end: r / n }
},
dynamic: function (e) {
var t = e.NOW,
i = e.clientOffset,
n = e.availabilityStartTime,
r = e.timescale,
a = void 0 === r ? 1 : r,
s = e.duration,
o = e.periodStart,
u = void 0 === o ? 0 : o,
r = e.minimumUpdatePeriod,
o = void 0 === r ? 0 : r,
r = e.timeShiftBufferDepth,
r = void 0 === r ? 1 / 0 : r,
e = bs(e.endNumber),
i = (t + i) / 1e3,
u = n + u,
o = Math.ceil(((i + o - u) * a) / s),
r = Math.floor(((i - u - r) * a) / s),
s = Math.floor(((i - u) * a) / s)
return { start: Math.max(0, r), end: 'number' == typeof e ? e : Math.min(o, s) }
},
},
yo = ['AUDIO', 'SUBTITLES'],
vo = /\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g,
_o = {
mediaPresentationDuration: Gs,
availabilityStartTime: function (e) {
return /^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test((e = e)) && (e += 'Z'), Date.parse(e) / 1e3
},
minimumUpdatePeriod: Gs,
suggestedPresentationDelay: Gs,
type: function (e) {
return e
},
timeShiftBufferDepth: Gs,
start: Gs,
width: function (e) {
return parseInt(e, 10)
},
height: function (e) {
return parseInt(e, 10)
},
bandwidth: function (e) {
return parseInt(e, 10)
},
startNumber: function (e) {
return parseInt(e, 10)
},
timescale: function (e) {
return parseInt(e, 10)
},
presentationTimeOffset: function (e) {
return parseInt(e, 10)
},
duration: function (e) {
var t = parseInt(e, 10)
return isNaN(t) ? Gs(e) : t
},
d: function (e) {
return parseInt(e, 10)
},
t: function (e) {
return parseInt(e, 10)
},
r: function (e) {
return parseInt(e, 10)
},
DEFAULT: function (e) {
return e
},
},
bo = {
'urn:uuid:1077efec-c0b2-4d02-ace3-3c1e52e2fb4b': 'org.w3.clearkey',
'urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed': 'com.widevine.alpha',
'urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95': 'com.microsoft.playready',
'urn:uuid:f239e769-efa3-4850-9c16-a903c6932efb': 'com.adobe.primetime',
},
To = Math.pow(2, 32),
So = function (e) {
var t = new DataView(e.buffer, e.byteOffset, e.byteLength)
return t.getBigUint64 ? ((e = t.getBigUint64(0)) < Number.MAX_SAFE_INTEGER ? Number(e) : e) : t.getUint32(0) * To + t.getUint32(4)
},
wo = function (e) {
var t = new DataView(e.buffer, e.byteOffset, e.byteLength),
i = { version: e[0], flags: new Uint8Array(e.subarray(1, 4)), references: [], referenceId: t.getUint32(4), timescale: t.getUint32(8) },
n = 12
0 === i.version
? ((i.earliestPresentationTime = t.getUint32(n)), (i.firstOffset = t.getUint32(n + 4)), (n += 8))
: ((i.earliestPresentationTime = So(e.subarray(n))), (i.firstOffset = So(e.subarray(n + 8))), (n += 16))
var r = t.getUint16((n += 2))
for (n += 2; 0 < r; n += 12, r--)
i.references.push({
referenceType: (128 & e[n]) >>> 7,
referencedSize: 2147483647 & t.getUint32(n),
subsegmentDuration: t.getUint32(n + 4),
startsWithSap: !!(128 & e[n + 8]),
sapType: (112 & e[n + 8]) >>> 4,
sapDeltaTime: 268435455 & t.getUint32(n + 8),
})
return i
},
Eo = br([73, 68, 51]),
ko = {
EBML: br([26, 69, 223, 163]),
DocType: br([66, 130]),
Segment: br([24, 83, 128, 103]),
SegmentInfo: br([21, 73, 169, 102]),
Tracks: br([22, 84, 174, 107]),
Track: br([174]),
TrackNumber: br([215]),
DefaultDuration: br([35, 227, 131]),
TrackEntry: br([174]),
TrackType: br([131]),
FlagDefault: br([136]),
CodecID: br([134]),
CodecPrivate: br([99, 162]),
VideoTrack: br([224]),
AudioTrack: br([225]),
Cluster: br([31, 67, 182, 117]),
Timestamp: br([231]),
TimestampScale: br([42, 215, 177]),
BlockGroup: br([160]),
BlockDuration: br([155]),
Block: br([161]),
SimpleBlock: br([163]),
},
Co = [128, 64, 32, 16, 8, 4, 2, 1],
Io = br([0, 0, 0, 1]),
xo = br([0, 0, 1]),
Ao = br([0, 0, 3]),
Po = {
webm: br([119, 101, 98, 109]),
matroska: br([109, 97, 116, 114, 111, 115, 107, 97]),
flac: br([102, 76, 97, 67]),
ogg: br([79, 103, 103, 83]),
ac3: br([11, 119]),
riff: br([82, 73, 70, 70]),
avi: br([65, 86, 73]),
wav: br([87, 65, 86, 69]),
'3gp': br([102, 116, 121, 112, 51, 103]),
mp4: br([102, 116, 121, 112]),
fmp4: br([115, 116, 121, 112]),
mov: br([102, 116, 121, 112, 113, 116]),
moov: br([109, 111, 111, 118]),
moof: br([109, 111, 111, 102]),
},
Lo = {
aac: function (e) {
var t = eo(e)
return wr(e, [255, 16], { offset: t, mask: [255, 22] })
},
mp3: function (e) {
var t = eo(e)
return wr(e, [255, 2], { offset: t, mask: [255, 6] })
},
webm: function (e) {
e = so(e, [ko.EBML, ko.DocType])[0]
return wr(e, Po.webm)
},
mkv: function (e) {
e = so(e, [ko.EBML, ko.DocType])[0]
return wr(e, Po.matroska)
},
mp4: function (e) {
return (
!Lo['3gp'](e) && !Lo.mov(e) && (!(!wr(e, Po.mp4, { offset: 4 }) && !wr(e, Po.fmp4, { offset: 4 })) || !(!wr(e, Po.moof, { offset: 4 }) && !wr(e, Po.moov, { offset: 4 })) || void 0)
)
},
mov: function (e) {
return wr(e, Po.mov, { offset: 4 })
},
'3gp': function (e) {
return wr(e, Po['3gp'], { offset: 4 })
},
ac3: function (e) {
var t = eo(e)
return wr(e, Po.ac3, { offset: t })
},
ts: function (e) {
if (e.length < 189 && 1 <= e.length) return 71 === e[0]
for (var t = 0; t + 188 < e.length && t < 188; ) {
if (71 === e[t] && 71 === e[t + 188]) return !0
t += 1
}
return !1
},
flac: function (e) {
var t = eo(e)
return wr(e, Po.flac, { offset: t })
},
ogg: function (e) {
return wr(e, Po.ogg)
},
avi: function (e) {
return wr(e, Po.riff) && wr(e, Po.avi, { offset: 8 })
},
wav: function (e) {
return wr(e, Po.riff) && wr(e, Po.wav, { offset: 8 })
},
h264: function (e) {
return oo(e, 'h264', 7, 3).length
},
h265: function (e) {
return oo(e, 'h265', [32, 33], 3).length
},
},
Do = Object.keys(Lo)
.filter(function (e) {
return 'ts' !== e && 'h264' !== e && 'h265' !== e
})
.concat(['ts', 'h264', 'h265'])
Do.forEach(function (e) {
var t = Lo[e]
Lo[e] = function (e) {
return t(br(e))
}
})
function Oo(e) {
e = br(e)
for (var t = 0; t < Do.length; t++) {
var i = Do[t]
if (dl[i](e)) return i
}
return ''
}
function Mo(e, t, i) {
return e && i && i.responseURL && t !== i.responseURL ? i.responseURL : t
}
function Ro(e) {
return tr.log.debug ? tr.log.debug.bind(tr, 'VHS:', e + ' >') : function () {}
}
function No(e, t) {
var i,
n = []
if (e && e.length) for (i = 0; i < e.length; i++) t(e.start(i), e.end(i)) && n.push([e.start(i), e.end(i)])
return tr.createTimeRanges(n)
}
function Uo(e, i) {
return No(e, function (e, t) {
return e - 0.1 <= i && i <= t + 0.1
})
}
function Bo(e, t) {
return No(e, function (e) {
return t <= e - fl
})
}
function Fo(e) {
var t = []
if (!e || !e.length) return ''
for (var i = 0; i < e.length; i++) t.push(e.start(i) + ' => ' + e.end(i))
return t.join(', ')
}
function jo(e) {
for (var t = [], i = 0; i < e.length; i++) t.push({ start: e.start(i), end: e.end(i) })
return t
}
function Ho(e) {
if (e && e.length && e.end) return e.end(e.length - 1)
}
function qo(e, t) {
var i = 0
if (!e || !e.length) return i
for (var n = 0; n < e.length; n++) {
var r = e.start(n),
a = e.end(n)
a < t || (i += r < t && t <= a ? a - t : a - r)
}
return i
}
function Vo(t, e) {
if (!e.preload) return e.duration
var i = 0
return (
(e.parts || []).forEach(function (e) {
i += e.duration
}),
(e.preloadHints || []).forEach(function (e) {
'PART' === e.type && (i += t.partTargetDuration)
}),
i
)
}
function Wo(e) {
return (e.segments || []).reduce(function (i, n, r) {
return (
n.parts
? n.parts.forEach(function (e, t) {
i.push({ duration: e.duration, segmentIndex: r, partIndex: t, part: e, segment: n })
})
: i.push({ duration: n.duration, segmentIndex: r, partIndex: null, segment: n, part: null }),
i
)
}, [])
}
function Go(e) {
return ((e = e.segments && e.segments.length && e.segments[e.segments.length - 1]) && e.parts) || []
}
function zo(e) {
var t = e.preloadSegment
if (t) {
;(e = t.parts),
(t = (t.preloadHints || []).reduce(function (e, t) {
return e + ('PART' === t.type ? 1 : 0)
}, 0))
return (t += e && e.length ? e.length : 0)
}
}
function Xo(e, t) {
return t.endList
? 0
: e && e.suggestedPresentationDelay
? e.suggestedPresentationDelay
: (e = 0 < Go(t).length) && t.serverControl && t.serverControl.partHoldBack
? t.serverControl.partHoldBack
: e && t.partTargetDuration
? 3 * t.partTargetDuration
: t.serverControl && t.serverControl.holdBack
? t.serverControl.holdBack
: t.targetDuration
? 3 * t.targetDuration
: 0
}
function Ko(e, t, i) {
if ((t = 'undefined' == typeof t ? e.mediaSequence + e.segments.length : t) < e.mediaSequence) return 0
var n = (function (e, t) {
var i = 0,
n = t - e.mediaSequence,
r = e.segments[n]
if (r) {
if ('undefined' != typeof r.start) return { result: r.start, precise: !0 }
if ('undefined' != typeof r.end) return { result: r.end - r.duration, precise: !0 }
}
for (; n--; ) {
if ('undefined' != typeof (r = e.segments[n]).end) return { result: i + r.end, precise: !0 }
if (((i += Vo(e, r)), 'undefined' != typeof r.start)) return { result: i + r.start, precise: !0 }
}
return { result: i, precise: !1 }
})(e, t)
return n.precise
? n.result
: (t = (function (e, t) {
for (var i, n = 0, r = t - e.mediaSequence; r < e.segments.length; r++) {
if ('undefined' != typeof (i = e.segments[r]).start) return { result: i.start - n, precise: !0 }
if (((n += Vo(e, i)), 'undefined' != typeof i.end)) return { result: i.end - n, precise: !0 }
}
return { result: -1, precise: !1 }
})(e, t)).precise
? t.result
: n.result + i
}
function Yo(e, t, i) {
if (!e) return 0
if (('number' != typeof i && (i = 0), 'undefined' == typeof t)) {
if (e.totalDuration) return e.totalDuration
if (!e.endList) return window.Infinity
}
return Ko(e, t, i)
}
function Qo(e) {
var t = e.defaultDuration,
i = e.durationList,
n = e.startIndex,
r = e.endIndex,
a = 0
if ((r < n && ((n = (e = [r, n])[0]), (r = e[1])), n < 0)) {
for (var s = n; s < Math.min(0, r); s++) a += t
n = 0
}
for (var o = n; o < r; o++) a += i[o].duration
return a
}
function $o(e, t, i, n) {
return e && e.segments
? e.endList
? Yo(e)
: null === t
? null
: ((t = Ko(e, e.mediaSequence + e.segments.length, (t = t || 0))), i && (t -= n = 'number' == typeof n ? n : Xo(null, e)), Math.max(0, t))
: null
}
function Jo(e) {
return e.excludeUntil && e.excludeUntil > Date.now()
}
function Zo(e) {
return e.excludeUntil && e.excludeUntil === 1 / 0
}
function eu(e) {
var t = Jo(e)
return !e.disabled && !t
}
function tu(e, t) {
return t.attributes && t.attributes[e]
}
function iu(e, t) {
if (1 === e.playlists.length) return !0
var i = t.attributes.BANDWIDTH || Number.MAX_VALUE
return (
0 ===
e.playlists.filter(function (e) {
return !!eu(e) && (e.attributes.BANDWIDTH || 0) < i
}).length
)
}
function nu(e, t) {
return (
!((!e && !t) || (!e && t) || (e && !t)) &&
(e === t || !(!e.id || !t.id || e.id !== t.id) || !(!e.resolvedUri || !t.resolvedUri || e.resolvedUri !== t.resolvedUri) || !(!e.uri || !t.uri || e.uri !== t.uri))
)
}
function ru(e, t) {
var i,
n = (e && e.mediaGroups && e.mediaGroups.AUDIO) || {},
r = !1
for (i in n) {
for (var a in n[i]) if ((r = t(n[i][a]))) break
if (r) break
}
return !!r
}
function au(i) {
if (!i || !i.playlists || !i.playlists.length)
return ru(i, function (e) {
return (e.playlists && e.playlists.length) || e.uri
})
for (var e = 0; e < i.playlists.length; e++) {
var t = (function (e) {
var t = i.playlists[e],
e = t.attributes && t.attributes.CODECS
return (e && e.split(',').every(fr)) ||
ru(i, function (e) {
return nu(t, e)
})
? 'continue'
: { v: !1 }
})(e)
if ('continue' !== t && 'object' == typeof t) return t.v
}
return !0
}
function su(e, t) {
return e + '-' + t
}
function ou(r, a) {
r.mediaGroups &&
['AUDIO', 'SUBTITLES'].forEach(function (e) {
if (r.mediaGroups[e])
for (var t in r.mediaGroups[e])
for (var i in r.mediaGroups[e][t]) {
var n = r.mediaGroups[e][t][i]
a(n, e, t, i)
}
})
}
function uu(e) {
var t = e.playlist,
i = e.uri,
e = e.id
;(t.id = e), (t.playlistErrors_ = 0), i && (t.uri = i), (t.attributes = t.attributes || {})
}
function lu(o, e) {
o.uri = e
for (var t = 0; t < o.playlists.length; t++) o.playlists[t].uri || (o.playlists[t].uri = 'placeholder-uri-' + t)
var i,
u = au(o)
ou(o, function (e, t, i, n) {
var r = 'placeholder-uri-' + t + '-' + i + '-' + n
if (!e.playlists || !e.playlists.length) {
if (u && 'AUDIO' === t && !e.uri)
for (var a = 0; a < o.playlists.length; a++) {
var s = o.playlists[a]
if (s.attributes && s.attributes.AUDIO && s.attributes.AUDIO === i) return
}
e.playlists = [g({}, e)]
}
e.playlists.forEach(function (e, t) {
var i = su(t, r)
e.uri ? (e.resolvedUri = e.resolvedUri || pl(o.uri, e.uri)) : ((e.uri = 0 === t ? r : i), (e.resolvedUri = e.uri)),
(e.id = e.id || i),
(e.attributes = e.attributes || {}),
(o.playlists[e.id] = e),
(o.playlists[e.uri] = e)
})
}),
(function (e) {
for (var t = e.playlists.length; t--; ) {
var i = e.playlists[t]
uu({ playlist: i, id: su(t, i.uri) }),
(i.resolvedUri = pl(e.uri, i.uri)),
(e.playlists[i.id] = i),
(e.playlists[i.uri] = i).attributes.BANDWIDTH || yl.warn('Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute.')
}
})(o),
ou((i = o), function (e) {
e.uri && (e.resolvedUri = pl(i.uri, e.uri))
})
}
function cu(e, t, i) {
var n = e.slice(),
r = t.slice()
i = i || 0
for (var a, s = [], o = 0; o < r.length; o++) {
var u = n[o + i],
l = r[o]
u
? ((a = u.map || a),
s.push(
(function (e, t) {
if (!e) return t
var i = vl(e, t)
if ((e.preloadHints && !t.preloadHints && delete i.preloadHints, e.parts && !t.parts)) delete i.parts
else if (e.parts && t.parts) for (var n = 0; n < t.parts.length; n++) e.parts && e.parts[n] && (i.parts[n] = vl(e.parts[n], t.parts[n]))
return !e.skipped && t.skipped && (i.skipped = !1), e.preload && !t.preload && (i.preload = !1), i
})(u, l)
))
: (a && !l.map && (l.map = a), s.push(l))
}
return s
}
function du(e, t) {
!e.resolvedUri && e.uri && (e.resolvedUri = pl(t, e.uri)),
e.key && !e.key.resolvedUri && (e.key.resolvedUri = pl(t, e.key.uri)),
e.map && !e.map.resolvedUri && (e.map.resolvedUri = pl(t, e.map.uri)),
e.map && e.map.key && !e.map.key.resolvedUri && (e.map.key.resolvedUri = pl(t, e.map.key.uri)),
e.parts &&
e.parts.length &&
e.parts.forEach(function (e) {
e.resolvedUri || (e.resolvedUri = pl(t, e.uri))
}),
e.preloadHints &&
e.preloadHints.length &&
e.preloadHints.forEach(function (e) {
e.resolvedUri || (e.resolvedUri = pl(t, e.uri))
})
}
function hu(e) {
var t = e.segments || [],
i = e.preloadSegment
if (i && i.parts && i.parts.length) {
if (i.preloadHints) for (var n = 0; n < i.preloadHints.length; n++) if ('MAP' === i.preloadHints[n].type) return t
;(i.duration = e.targetDuration), (i.preload = !0), t.push(i)
}
return t
}
function pu(e, t) {
return (
e === t || (e.segments && t.segments && e.segments.length === t.segments.length && e.endList === t.endList && e.mediaSequence === t.mediaSequence && e.preloadSegment === t.preloadSegment)
)
}
function fu(e, a, t) {
void 0 === t && (t = pu)
var i = vl(e, {}),
n = i.playlists[a.id]
if (!n) return null
if (t(n, a)) return null
a.segments = hu(a)
var s = vl(n, a)
if ((s.preloadSegment && !a.preloadSegment && delete s.preloadSegment, n.segments)) {
if (a.skip) {
a.segments = a.segments || []
for (var r = 0; r < a.skip.skippedSegments; r++) a.segments.unshift({ skipped: !0 })
}
s.segments = cu(n.segments, a.segments, a.mediaSequence - n.mediaSequence)
}
s.segments.forEach(function (e) {
du(e, s.resolvedUri)
})
for (var o = 0; o < i.playlists.length; o++) i.playlists[o].id === a.id && (i.playlists[o] = s)
return (
(i.playlists[a.id] = s),
(i.playlists[a.uri] = s),
ou(e, function (e, t, i, n) {
if (e.playlists) for (var r = 0; r < e.playlists.length; r++) a.id === e.playlists[r].id && (e.playlists[r] = s)
}),
i
)
}
function mu(e, t) {
var i = e.segments || [],
n = i[i.length - 1],
n = ((i = n && n.parts && n.parts[n.parts.length - 1]) && i.duration) || (n && n.duration)
return t && n ? 1e3 * n : 500 * (e.partTargetDuration || e.targetDuration || 10)
}
function gu(e, t, i, n) {
var r = 'arraybuffer' === e.responseType ? e.response : e.responseText
!t &&
r &&
((e.responseTime = Date.now()),
(e.roundTripTime = e.responseTime - e.requestTime),
(e.bytesReceived = r.byteLength || r.length),
e.bandwidth || (e.bandwidth = Math.floor((e.bytesReceived / e.roundTripTime) * 8 * 1e3))),
i.headers && (e.responseHeaders = i.headers),
t && 'ETIMEDOUT' === t.code && (e.timedout = !0),
n((t = !t && !e.aborted && 200 !== i.statusCode && 206 !== i.statusCode && 0 !== i.statusCode ? new Error('XHR Failed with a response of: ' + (e && (r || e.responseText))) : t), e)
}
function yu() {
function a(e, i) {
e = Tl({ timeout: 45e3 }, e)
var t = a.beforeRequest || tr.Vhs.xhr.beforeRequest
!t || 'function' != typeof t || ((t = t(e)) && (e = t))
var n = (!0 === tr.Vhs.xhr.original ? bl : tr.Vhs.xhr)(e, function (e, t) {
return gu(n, e, t, i)
}),
r = n.abort
return (
(n.abort = function () {
return (n.aborted = !0), r.apply(n, arguments)
}),
(n.uri = e.uri),
(n.requestTime = Date.now()),
n
)
}
return (a.original = !0), a
}
function vu(e) {
var t,
i = {}
return (
e.byterange &&
(i.Range =
((t = e.byterange),
(e = t.offset),
(t = 'bigint' == typeof t.offset || 'bigint' == typeof t.length ? window.BigInt(t.offset) + window.BigInt(t.length) - window.BigInt(1) : t.offset + t.length - 1),
'bytes=' + e + '-' + t)),
i
)
}
function _u(e, t) {
return (e = e.toString(16)), '00'.substring(0, 2 - e.length) + e + (t % 2 ? ' ' : '')
}
function bu(e) {
return 32 <= e && e < 126 ? String.fromCharCode(e) : '.'
}
function Tu(i) {
var n = {}
return (
Object.keys(i).forEach(function (e) {
var t = i[e]
_r(t) ? (n[e] = { bytes: t.buffer, byteOffset: t.byteOffset, byteLength: t.byteLength }) : (n[e] = t)
}),
n
)
}
function Su(e) {
var t = e.byterange || { length: 1 / 0, offset: 0 }
return [t.length, t.offset, e.resolvedUri].join(',')
}
function wu(e) {
return e.resolvedUri
}
function Eu(e) {
for (var t = Array.prototype.slice.call(e), i = '', n = 0; n < t.length / 16; n++)
i +=
t
.slice(16 * n, 16 * n + 16)
.map(_u)
.join('') +
' ' +
t
.slice(16 * n, 16 * n + 16)
.map(bu)
.join('') +
'\n'
return i
}
function ku(e) {
var t = e.playlist,
i = e.time,
n = void 0 === i ? void 0 : i
if (!(i = e.callback)) throw new Error('getProgramTime: callback must be provided')
return t && void 0 !== n
? (e = (function (e, t) {
if (!t || !t.segments || 0 === t.segments.length) return null
for (var i, n = 0, r = 0; r < t.segments.length && !(e <= (n = (i = t.segments[r]).videoTimingInfo ? i.videoTimingInfo.transmuxedPresentationEnd : n + i.duration)); r++);
var a = t.segments[t.segments.length - 1]
if (a.videoTimingInfo && a.videoTimingInfo.transmuxedPresentationEnd < e) return null
if (n < e) {
if (e > n + 0.25 * a.duration) return null
i = a
}
return { segment: i, estimatedStart: i.videoTimingInfo ? i.videoTimingInfo.transmuxedPresentationStart : n - i.duration, type: i.videoTimingInfo ? 'accurate' : 'estimate' }
})(n, t))
? 'estimate' === e.type
? i({ message: 'Accurate programTime could not be determined. Please seek to e.seekTime and try again', seekTime: e.estimatedStart })
: ((t = { mediaSeconds: n }),
(e = (function (e, t) {
if (!t.dateTimeObject) return null
var i = t.videoTimingInfo.transmuxerPrependedSeconds,
i = e - (t.videoTimingInfo.transmuxedPresentationStart + i)
return new Date(t.dateTimeObject.getTime() + 1e3 * i)
})(n, e.segment)) && (t.programDateTime = e.toISOString()),
i(null, t))
: i({ message: 'valid programTime was not found' })
: i({ message: 'getProgramTime: playlist and time must be provided' })
}
function Cu(e) {
var t = e.programTime,
i = e.playlist,
n = e.retryCount,
r = void 0 === n ? 2 : n,
a = e.seekTo,
s = e.pauseAfterSeek,
o = void 0 === s || s,
u = e.tech,
l = e.callback
if (!l) throw new Error('seekToProgramTime: callback must be provided')
return 'undefined' != typeof t && i && a
? i.endList || u.hasStarted_
? (function (e) {
if (!e.segments || 0 === e.segments.length) return !1
for (var t = 0; t < e.segments.length; t++) if (!e.segments[t].dateTimeObject) return !1
return !0
})(i)
? (n = (function (e, t) {
var i
try {
i = new Date(e)
} catch (e) {
return null
}
if (!t || !t.segments || 0 === t.segments.length) return null
if (i < (r = t.segments[0]).dateTimeObject) return null
for (var n = 0; n < t.segments.length - 1; n++) {
var r = t.segments[n]
if (i < t.segments[n + 1].dateTimeObject) break
}
var a,
s = t.segments[t.segments.length - 1],
e = s.dateTimeObject,
a = s.videoTimingInfo ? (a = s.videoTimingInfo).transmuxedPresentationEnd - a.transmuxedPresentationStart - a.transmuxerPrependedSeconds : s.duration + 0.25 * s.duration
return new Date(e.getTime() + 1e3 * a) < i
? null
: {
segment: (r = e < i ? s : r),
estimatedStart: r.videoTimingInfo ? r.videoTimingInfo.transmuxedPresentationStart : gl.duration(t, t.mediaSequence + t.segments.indexOf(r)),
type: r.videoTimingInfo ? 'accurate' : 'estimate',
}
})(t, i))
? ((s = n.segment),
(e = (function (e, t) {
var i
try {
;(n = new Date(e)), (i = new Date(t))
} catch (e) {}
var n = n.getTime()
return (i.getTime() - n) / 1e3
})(s.dateTimeObject, t)),
'estimate' === n.type
? 0 === r
? l({ message: t + ' is not buffered yet. Try again' })
: (a(n.estimatedStart + e),
void u.one('seeked', function () {
Cu({ programTime: t, playlist: i, retryCount: r - 1, seekTo: a, pauseAfterSeek: o, tech: u, callback: l })
}))
: ((e = s.start + e),
u.one('seeked', function () {
return l(null, u.currentTime())
}),
o && u.pause(),
void a(e)))
: l({ message: t + ' was not found in the stream' })
: l({ message: 'programDateTime tags must be provided in the manifest ' + i.resolvedUri })
: l({ message: 'player must be playing a live stream to start buffering' })
: l({ message: 'seekToProgramTime: programTime, seekTo and playlist must be provided' })
}
function Iu(e, t) {
if (4 === e.readyState) return t()
}
function xu(e, t, r) {
function n(e, t, i, n) {
return t.abort(), (o = !0), r(e, t, i, n)
}
function i(e, t) {
if (!o) {
if (e) return n(e, t, '', s)
var i = t.responseText.substring((s && s.byteLength) || 0, t.responseText.length)
if (
((s = (function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i]
if (
(t = t.filter(function (e) {
return e && (e.byteLength || e.length) && 'string' != typeof e
})).length <= 1
)
return br(t[0])
var n = t.reduce(function (e, t, i) {
return e + (t.byteLength || t.length)
}, 0),
r = new Uint8Array(n),
a = 0
return (
t.forEach(function (e) {
;(e = br(e)), r.set(e, a), (a += e.byteLength)
}),
r
)
})(s, Sr(i, !0))),
(a = a || eo(s)),
s.length < 10 || (a && s.length < a + 2))
)
return Iu(t, function () {
return n(e, t, '', s)
})
i = Oo(s)
return ('ts' === i && s.length < 188) || (!i && s.length < 376)
? Iu(t, function () {
return n(e, t, '', s)
})
: n(null, t, i, s)
}
}
var a,
s = [],
o = !1,
u = t(
{
uri: e,
beforeSend: function (t) {
t.overrideMimeType('text/plain; charset=x-user-defined'),
t.addEventListener('progress', function (e) {
return e.total, e.loaded, gu(t, null, { statusCode: t.status }, i)
})
},
},
function (e, t) {
return gu(u, e, t, i)
}
)
return u
}
function Au(e, t) {
if (!pu(e, t)) return !1
if (e.sidx && t.sidx && (e.sidx.offset !== t.sidx.offset || e.sidx.length !== t.sidx.length)) return !1
if ((!e.sidx && t.sidx) || (e.sidx && !t.sidx)) return !1
if ((e.segments && !t.segments) || (!e.segments && t.segments)) return !1
if (!e.segments && !t.segments) return !0
for (var i = 0; i < e.segments.length; i++) {
var n = e.segments[i],
r = t.segments[i]
if (n.uri !== r.uri) return !1
if (n.byterange || r.byterange) {
;(n = n.byterange), (r = r.byterange)
if ((n && !r) || (!n && r)) return !1
if (n.offset !== r.offset || n.length !== r.length) return !1
}
}
return !0
}
function Pu(e, t) {
var i,
n = {}
for (i in e) {
var r = e[i].sidx
if (r) {
var a = xs(r)
if (!t[a]) break
var s = t[a].sidxInfo
;(s = s),
(r = r),
(Boolean(!s.map && !r.map) || Boolean(s.map && r.map && s.map.byterange.offset === r.map.byterange.offset && s.map.byterange.length === r.map.byterange.length)) &&
s.uri === r.uri &&
s.byterange.offset === r.byterange.offset &&
s.byterange.length === r.byterange.length &&
(n[a] = t[a])
}
}
return n
}
function Lu(e) {
return (e.on = e.addEventListener), (e.off = e.removeEventListener), e
}
function Du(i) {
var n = i.transmuxer,
e = i.bytes,
t = i.audioAppendStart,
r = i.gopsToAlignWith,
a = i.remux,
s = i.onData,
o = i.onTrackInfo,
u = i.onAudioTimingInfo,
l = i.onVideoTimingInfo,
c = i.onVideoSegmentTimingInfo,
d = i.onAudioSegmentTimingInfo,
h = i.onId3,
p = i.onCaptions,
f = i.onDone,
m = i.onEndedTimeline,
g = i.onTransmuxerLog,
y = i.isEndOfTimeline,
v = { buffer: [] },
_ = y
;(n.onmessage = function (e) {
var t
n.currentTransmux === i &&
('data' === e.data.action &&
(function (e, t, i) {
var n = e.data.segment,
r = n.type,
a = n.initSegment,
s = n.captions,
o = n.captionStreams,
u = n.metadata,
l = n.videoFrameDtsTime,
n = n.videoFramePtsTime
t.buffer.push({ captions: s, captionStreams: o, metadata: u })
;(e = e.data.segment.boxes || { data: e.data.segment.data }),
(a = { type: r, data: new Uint8Array(e.data, e.data.byteOffset, e.data.byteLength), initSegment: new Uint8Array(a.data, a.byteOffset, a.byteLength) })
'undefined' != typeof l && (a.videoFrameDtsTime = l), 'undefined' != typeof n && (a.videoFramePtsTime = n), i(a)
})(e, v, s),
'trackinfo' === e.data.action && o(e.data.trackInfo),
'gopInfo' === e.data.action && (v.gopInfo = e.data.gopInfo),
'audioTimingInfo' === e.data.action && u(e.data.audioTimingInfo),
'videoTimingInfo' === e.data.action && l(e.data.videoTimingInfo),
'videoSegmentTimingInfo' === e.data.action && c(e.data.videoSegmentTimingInfo),
'audioSegmentTimingInfo' === e.data.action && d(e.data.audioSegmentTimingInfo),
'id3Frame' === e.data.action && h([e.data.id3Frame], e.data.id3Frame.dispatchType),
'caption' === e.data.action && p(e.data.caption),
'endedtimeline' === e.data.action && ((_ = !1), m()),
'log' === e.data.action && g(e.data.log),
'transmuxed' === e.data.type && (_ || ((n.onmessage = null), (e = (t = { transmuxedData: v, callback: f }).transmuxedData), (t = t.callback), (e.buffer = []), t(e), Cl(n))))
}),
t && n.postMessage({ action: 'setAudioAppendStart', appendStart: t }),
Array.isArray(r) && n.postMessage({ action: 'alignGopsWith', gopsToAlignWith: r }),
'undefined' != typeof a && n.postMessage({ action: 'setRemux', remux: a }),
e.byteLength &&
((r = e instanceof ArrayBuffer ? e : e.buffer),
(a = e instanceof ArrayBuffer ? 0 : e.byteOffset),
n.postMessage({ action: 'push', data: r, byteOffset: a, byteLength: e.byteLength }, [r])),
y && n.postMessage({ action: 'endTimeline' }),
n.postMessage({ action: 'flush' })
}
function Ou(e, t) {
e.postMessage({ action: t }), Cl(e)
}
function Mu(e, t) {
if (!t.currentTransmux) return (t.currentTransmux = e), Ou(t, e), 0
t.transmuxQueue.push(Ou.bind(null, t, e))
}
function Ru(e) {
if (!e.transmuxer.currentTransmux) return (e.transmuxer.currentTransmux = e), void Du(e)
e.transmuxer.transmuxQueue.push(e)
}
function Nu(i) {
var n = i.transmuxer,
r = i.endAction || i.action,
a = i.callback,
e = g({}, i, { endAction: null, transmuxer: null, callback: null }),
t = function e(t) {
t.data.action === r &&
(n.removeEventListener('message', e),
t.data.data && ((t.data.data = new Uint8Array(t.data.data, i.byteOffset || 0, i.byteLength || t.data.data.byteLength)), i.data && (i.data = t.data.data)),
a(t.data))
}
n.addEventListener('message', t),
i.data
? ((t = i.data instanceof ArrayBuffer), (e.byteOffset = t ? 0 : i.data.byteOffset), (e.byteLength = i.data.byteLength), (t = [t ? i.data : i.data.buffer]), n.postMessage(e, t))
: n.postMessage(e)
}
function Uu(e) {
e.forEach(function (e) {
e.abort()
})
}
function Bu(e, t) {
return t.timedout
? { status: t.status, message: 'HLS request timed-out at URL: ' + t.uri, code: Pl, xhr: t }
: t.aborted
? { status: t.status, message: 'HLS request aborted at URL: ' + t.uri, code: Ll, xhr: t }
: e
? { status: t.status, message: 'HLS request errored at URL: ' + t.uri, code: Al, xhr: t }
: 'arraybuffer' === t.responseType && 0 === t.response.byteLength
? { status: t.status, message: 'Empty HLS response at URL: ' + t.uri, code: Al, xhr: t }
: null
}
function Fu(a, s, o) {
return function (e, t) {
var i = t.response,
e = Bu(e, t)
if (e) return o(e, a)
if (16 !== i.byteLength) return o({ status: t.status, message: 'Invalid HLS key at URL: ' + t.uri, code: Al, xhr: t }, a)
for (var i = new DataView(i), n = new Uint32Array([i.getUint32(0), i.getUint32(4), i.getUint32(8), i.getUint32(12)]), r = 0; r < s.length; r++) s[r].bytes = n
return o(null, a)
}
}
function ju(i, n) {
var e = Oo(i.map.bytes)
if ('mp4' !== e) {
var t = i.map.resolvedUri || i.map.uri
return n({ internal: !0, message: 'Found unsupported ' + (e || 'unknown') + ' container for initialization segment at URL: ' + t, code: Al })
}
Nu({
action: 'probeMp4Tracks',
data: i.map.bytes,
transmuxer: i.transmuxer,
callback: function (e) {
var t = e.tracks,
e = e.data
return (
(i.map.bytes = e),
t.forEach(function (e) {
;(i.map.tracks = i.map.tracks || {}),
i.map.tracks[e.type] ||
('number' == typeof (i.map.tracks[e.type] = e).id && e.timescale && ((i.map.timescales = i.map.timescales || {}), (i.map.timescales[e.id] = e.timescale)))
}),
n(null)
)
},
})
}
function Hu(e) {
var i = e.segment,
n = e.finishProcessingFn,
r = e.responseType
return function (e, t) {
e = Bu(e, t)
if (e) return n(e, i)
e =
'arraybuffer' !== r && t.responseText
? (function (e) {
for (var t = new Uint8Array(new ArrayBuffer(e.length)), i = 0; i < e.length; i++) t[i] = e.charCodeAt(i)
return t.buffer
})(t.responseText.substring(i.lastReachedChar || 0))
: t.response
return (
(i.stats = { bandwidth: (t = t).bandwidth, bytesReceived: t.bytesReceived || 0, roundTripTime: t.roundTripTime || 0 }),
i.key ? (i.encryptedBytes = new Uint8Array(e)) : (i.bytes = new Uint8Array(e)),
n(null, i)
)
}
}
function qu(e) {
var i = e.segment,
t = e.bytes,
n = e.trackInfoFn,
r = e.timingInfoFn,
a = e.videoSegmentTimingInfoFn,
s = e.audioSegmentTimingInfoFn,
o = e.id3Fn,
u = e.captionsFn,
l = e.isEndOfTimeline,
c = e.endedTimelineFn,
d = e.dataFn,
h = e.doneFn,
p = e.onTransmuxerLog,
e = (i.map && i.map.tracks) || {},
f = Boolean(e.audio && e.video),
m = r.bind(null, i, 'audio', 'start'),
g = r.bind(null, i, 'audio', 'end'),
y = r.bind(null, i, 'video', 'start'),
v = r.bind(null, i, 'video', 'end')
Nu({
action: 'probeTs',
transmuxer: i.transmuxer,
data: t,
baseStartTime: i.baseStartTime,
callback: function (e) {
i.bytes = t = e.data
e = e.result
e && (n(i, { hasAudio: e.hasAudio, hasVideo: e.hasVideo, isMuxed: f }), (n = null), e.hasAudio && !f && m(e.audioStart), e.hasVideo && y(e.videoStart), (y = m = null)),
Ru({
bytes: t,
transmuxer: i.transmuxer,
audioAppendStart: i.audioAppendStart,
gopsToAlignWith: i.gopsToAlignWith,
remux: f,
onData: function (e) {
;(e.type = 'combined' === e.type ? 'video' : e.type), d(i, e)
},
onTrackInfo: function (e) {
n && (f && (e.isMuxed = !0), n(i, e))
},
onAudioTimingInfo: function (e) {
m && 'undefined' != typeof e.start && (m(e.start), (m = null)), g && 'undefined' != typeof e.end && g(e.end)
},
onVideoTimingInfo: function (e) {
y && 'undefined' != typeof e.start && (y(e.start), (y = null)), v && 'undefined' != typeof e.end && v(e.end)
},
onVideoSegmentTimingInfo: function (e) {
a(e)
},
onAudioSegmentTimingInfo: function (e) {
s(e)
},
onId3: function (e, t) {
o(i, e, t)
},
onCaptions: function (e) {
u(i, [e])
},
isEndOfTimeline: l,
onEndedTimeline: function () {
c()
},
onTransmuxerLog: p,
onDone: function (e) {
h && ((e.type = 'combined' === e.type ? 'video' : e.type), h(null, i, e))
},
})
},
})
}
function Vu(e) {
var i = e.segment,
n = e.bytes,
t = e.trackInfoFn,
r = e.timingInfoFn,
a = e.videoSegmentTimingInfoFn,
s = e.audioSegmentTimingInfoFn,
o = e.id3Fn,
u = e.captionsFn,
l = e.isEndOfTimeline,
c = e.endedTimelineFn,
d = e.dataFn,
h = e.doneFn,
p = e.onTransmuxerLog,
f = new Uint8Array(n)
if (0 < io(f, ['moof']).length) {
i.isFmp4 = !0
var m = i.map.tracks,
g = { isFmp4: !0, hasVideo: !!m.video, hasAudio: !!m.audio }
m.audio && m.audio.codec && 'enca' !== m.audio.codec && (g.audioCodec = m.audio.codec),
m.video && m.video.codec && 'encv' !== m.video.codec && (g.videoCodec = m.video.codec),
m.video && m.audio && (g.isMuxed = !0),
t(i, g)
var y = function (e) {
d(i, { data: f, type: g.hasAudio && !g.isMuxed ? 'audio' : 'video' }), e && e.length && u(i, e), h(null, i, {})
}
Nu({
action: 'probeMp4StartTime',
timescales: i.map.timescales,
data: f,
transmuxer: i.transmuxer,
callback: function (e) {
var t = e.data,
e = e.startTime
;(n = t.buffer),
(i.bytes = f = t),
g.hasAudio && !g.isMuxed && r(i, 'audio', 'start', e),
g.hasVideo && r(i, 'video', 'start', e),
m.video && t.byteLength && i.transmuxer
? Nu({
action: 'pushMp4Captions',
endAction: 'mp4Captions',
transmuxer: i.transmuxer,
data: f,
timescales: i.map.timescales,
trackIds: [m.video.id],
callback: function (e) {
;(n = e.data.buffer),
(i.bytes = f = e.data),
e.logs.forEach(function (e) {
p(tr.mergeOptions(e, { stream: 'mp4CaptionParser' }))
}),
y(e.captions)
},
})
: y()
},
})
} else if (i.transmuxer) {
if (('undefined' == typeof i.container && (i.container = Oo(f)), 'ts' !== i.container && 'aac' !== i.container)) return t(i, { hasAudio: !1, hasVideo: !1 }), h(null, i, {}), 0
qu({
segment: i,
bytes: n,
trackInfoFn: t,
timingInfoFn: r,
videoSegmentTimingInfoFn: a,
audioSegmentTimingInfoFn: s,
id3Fn: o,
captionsFn: u,
isEndOfTimeline: l,
endedTimelineFn: c,
dataFn: d,
doneFn: h,
onTransmuxerLog: p,
})
} else h(null, i, {})
}
function Wu(e, i) {
var n = e.id,
t = e.key,
r = e.encryptedBytes,
a = e.decryptionWorker,
e = function e(t) {
t.data.source === n && (a.removeEventListener('message', e), (t = t.data.decrypted), i(new Uint8Array(t.bytes, t.byteOffset, t.byteLength)))
}
a.addEventListener('message', e),
(e = t.bytes.slice ? t.bytes.slice() : new Uint32Array(Array.prototype.slice.call(t.bytes))),
a.postMessage(Tu({ source: n, encrypted: r, key: e, iv: t.iv }), [r.buffer, e.buffer])
}
function Gu(e) {
var i = e.activeXhrs,
m = e.decryptionWorker,
g = e.trackInfoFn,
y = e.timingInfoFn,
v = e.videoSegmentTimingInfoFn,
_ = e.audioSegmentTimingInfoFn,
b = e.id3Fn,
T = e.captionsFn,
S = e.isEndOfTimeline,
w = e.endedTimelineFn,
E = e.dataFn,
k = e.doneFn,
C = e.onTransmuxerLog,
n = 0,
r = !1
return function (e, f) {
if (!r) {
if (e) return (r = !0), Uu(i), k(e, f)
if ((n += 1) === i.length) {
var t = function () {
if (f.encryptedBytes)
return (
(t = (e = {
decryptionWorker: m,
segment: f,
trackInfoFn: g,
timingInfoFn: y,
videoSegmentTimingInfoFn: v,
audioSegmentTimingInfoFn: _,
id3Fn: b,
captionsFn: T,
isEndOfTimeline: S,
endedTimelineFn: w,
dataFn: E,
doneFn: k,
onTransmuxerLog: C,
}).decryptionWorker),
(i = e.segment),
(n = e.trackInfoFn),
(r = e.timingInfoFn),
(a = e.videoSegmentTimingInfoFn),
(s = e.audioSegmentTimingInfoFn),
(o = e.id3Fn),
(u = e.captionsFn),
(l = e.isEndOfTimeline),
(c = e.endedTimelineFn),
(d = e.dataFn),
(h = e.doneFn),
(p = e.onTransmuxerLog),
void Wu({ id: i.requestId, key: i.key, encryptedBytes: i.encryptedBytes, decryptionWorker: t }, function (e) {
;(i.bytes = e),
Vu({
segment: i,
bytes: i.bytes,
trackInfoFn: n,
timingInfoFn: r,
videoSegmentTimingInfoFn: a,
audioSegmentTimingInfoFn: s,
id3Fn: o,
captionsFn: u,
isEndOfTimeline: l,
endedTimelineFn: c,
dataFn: d,
doneFn: h,
onTransmuxerLog: p,
})
})
)
var e, t, i, n, r, a, s, o, u, l, c, d, h, p
Vu({
segment: f,
bytes: f.bytes,
trackInfoFn: g,
timingInfoFn: y,
videoSegmentTimingInfoFn: v,
audioSegmentTimingInfoFn: _,
id3Fn: b,
captionsFn: T,
isEndOfTimeline: S,
endedTimelineFn: w,
dataFn: E,
doneFn: k,
onTransmuxerLog: C,
})
}
if (((f.endOfAllRequests = Date.now()), f.map && f.map.encryptedBytes && !f.map.bytes))
return Wu({ decryptionWorker: m, id: f.requestId + '-init', encryptedBytes: f.map.encryptedBytes, key: f.map.key }, function (e) {
;(f.map.bytes = e),
ju(f, function (e) {
return e ? (Uu(i), k(e, f)) : void t()
})
})
t()
}
}
}
}
function zu(e) {
var n = e.segment,
r = e.progressFn
return (
e.trackInfoFn,
e.timingInfoFn,
e.videoSegmentTimingInfoFn,
e.audioSegmentTimingInfoFn,
e.id3Fn,
e.captionsFn,
e.isEndOfTimeline,
e.endedTimelineFn,
e.dataFn,
function (e) {
var t,
i = e.target
if (!i.aborted)
return (
(n.stats = tr.mergeOptions(
n.stats,
((i = (t = e).target),
((i = { bandwidth: 1 / 0, bytesReceived: 0, roundTripTime: Date.now() - i.requestTime || 0 }).bytesReceived = t.loaded),
(i.bandwidth = Math.floor((i.bytesReceived / i.roundTripTime) * 8 * 1e3)),
i)
)),
!n.stats.firstBytesReceivedAt && n.stats.bytesReceived && (n.stats.firstBytesReceivedAt = Date.now()),
r(e, n)
)
}
)
}
function Xu(e) {
var t,
i,
n,
r = e.xhr,
a = e.xhrOptions,
s = e.decryptionWorker,
o = e.segment,
u = e.abortFn,
l = e.progressFn,
c = e.trackInfoFn,
d = e.timingInfoFn,
h = e.videoSegmentTimingInfoFn,
p = e.audioSegmentTimingInfoFn,
f = e.id3Fn,
m = e.captionsFn,
g = e.isEndOfTimeline,
y = e.endedTimelineFn,
v = e.dataFn,
_ = e.doneFn,
e = e.onTransmuxerLog,
b = [],
_ = Gu({
activeXhrs: b,
decryptionWorker: s,
trackInfoFn: c,
timingInfoFn: d,
videoSegmentTimingInfoFn: h,
audioSegmentTimingInfoFn: p,
id3Fn: f,
captionsFn: m,
isEndOfTimeline: g,
endedTimelineFn: y,
dataFn: v,
doneFn: _,
onTransmuxerLog: e,
})
o.key &&
!o.key.bytes &&
((e = [o.key]),
o.map && !o.map.bytes && o.map.key && o.map.key.resolvedUri === o.key.resolvedUri && e.push(o.map.key),
(e = r(tr.mergeOptions(a, { uri: o.key.resolvedUri, responseType: 'arraybuffer' }), Fu(o, e, _))),
b.push(e)),
o.map &&
!o.map.bytes &&
(!o.map.key ||
(o.key && o.key.resolvedUri === o.map.key.resolvedUri) ||
((t = r(tr.mergeOptions(a, { uri: o.map.key.resolvedUri, responseType: 'arraybuffer' }), Fu(o, [o.map.key], _))), b.push(t)),
(t = r(
tr.mergeOptions(a, { uri: o.map.resolvedUri, responseType: 'arraybuffer', headers: vu(o.map) }),
((i = (t = { segment: o, finishProcessingFn: _ }).segment),
(n = t.finishProcessingFn),
function (e, t) {
e = Bu(e, t)
if (e) return n(e, i)
e = new Uint8Array(t.response)
if (i.map.key) return (i.map.encryptedBytes = e), n(null, i)
;(i.map.bytes = e),
ju(i, function (e) {
return e ? ((e.xhr = t), (e.status = t.status), n(e, i)) : void n(null, i)
})
})
)),
b.push(t)),
(a = tr.mergeOptions(a, { uri: (o.part && o.part.resolvedUri) || o.resolvedUri, responseType: 'arraybuffer', headers: vu(o) })),
(a = r(a, Hu({ segment: o, finishProcessingFn: _, responseType: a.responseType }))).addEventListener(
'progress',
zu({
segment: o,
progressFn: l,
trackInfoFn: c,
timingInfoFn: d,
videoSegmentTimingInfoFn: h,
audioSegmentTimingInfoFn: p,
id3Fn: f,
captionsFn: m,
isEndOfTimeline: g,
endedTimelineFn: y,
dataFn: v,
})
),
b.push(a)
var T = {}
return (
b.forEach(function (e) {
var t, i
e.addEventListener(
'loadend',
((t = (e = { loadendState: T, abortFn: u }).loadendState),
(i = e.abortFn),
function (e) {
e.target.aborted && i && !t.calledAbortFn && (i(), (t.calledAbortFn = !0))
})
)
}),
function () {
return Uu(b)
}
)
}
function Ku(e, t) {
return (t = t.attributes || {}), e && e.mediaGroups && e.mediaGroups.AUDIO && t.AUDIO && e.mediaGroups.AUDIO[t.AUDIO]
}
function Yu(e) {
var n = {}
return (
e.forEach(function (e) {
var t = e.mediaType,
i = e.type,
e = e.details
;(n[t] = n[t] || []), n[t].push(hr('' + i + e))
}),
Object.keys(n).forEach(function (e) {
return 1 < n[e].length
? (Dl('multiple ' + e + ' codecs found as attributes: ' + n[e].join(', ') + '. Setting playlist codecs to null so that we wait for mux.js to probe segments for real codecs.'),
void (n[e] = null))
: void (n[e] = n[e][0])
}),
n
)
}
function Qu(e) {
var t = 0
return e.audio && t++, e.video && t++, t
}
function $u(e, t) {
var i,
n = t.attributes || {},
r = Yu(
(function (e) {
e = e.attributes || {}
if (e.CODECS) return pr(e.CODECS)
})(t) || []
)
return (
Ku(e, t) &&
!r.audio &&
!(function (e, t) {
if (!Ku(e, t)) return !0
var i,
t = t.attributes || {},
n = e.mediaGroups.AUDIO[t.AUDIO]
for (i in n) if (!n[i].uri && !n[i].playlists) return !0
return !1
})(e, t) &&
(i = Yu(
(function (e, t) {
if (!e.mediaGroups.AUDIO || !t) return null
var i,
n = e.mediaGroups.AUDIO[t]
if (!n) return null
for (i in n) {
var r = n[i]
if (r.default && r.playlists) return pr(r.playlists[0].attributes.CODECS)
}
return null
})(e, n.AUDIO) || []
)).audio &&
(r.audio = i.audio),
r
)
}
function Ju(e) {
if (e && e.playlist) {
var t = e.playlist
return JSON.stringify({ id: t.id, bandwidth: e.bandwidth, width: e.width, height: e.height, codecs: (t.attributes && t.attributes.CODECS) || '' })
}
}
function Zu(e, t) {
return (e = e && window.getComputedStyle(e)) ? e[t] : ''
}
function el(e, n) {
var r = e.slice()
e.sort(function (e, t) {
var i = n(e, t)
return 0 === i ? r.indexOf(e) - r.indexOf(t) : i
})
}
function tl(e, t) {
var i, n
return (i = (i = e.attributes.BANDWIDTH ? e.attributes.BANDWIDTH : i) || window.Number.MAX_VALUE) - (n = (n = t.attributes.BANDWIDTH ? t.attributes.BANDWIDTH : n) || window.Number.MAX_VALUE)
}
function il(e, t, i, n, r, a) {
if (e) {
var s = { bandwidth: t, width: i, height: n, limitRenditionByPlayerDimensions: r },
o = e.playlists
gl.isAudioOnly(e) && ((o = a.getAudioTrackPlaylists_()), (s.audioOnly = !0))
var u = o.map(function (e) {
var t = e.attributes && e.attributes.RESOLUTION && e.attributes.RESOLUTION.width,
i = e.attributes && e.attributes.RESOLUTION && e.attributes.RESOLUTION.height,
n = e.attributes && e.attributes.BANDWIDTH
return { bandwidth: n || window.Number.MAX_VALUE, width: t, height: i, playlist: e }
})
el(u, function (e, t) {
return e.bandwidth - t.bandwidth
})
var l = (u = u.filter(function (e) {
return !gl.isIncompatible(e.playlist)
})).filter(function (e) {
return gl.isEnabled(e.playlist)
}),
e = (l = !l.length
? u.filter(function (e) {
return !gl.isDisabled(e.playlist)
})
: l).filter(function (e) {
return e.bandwidth * El.BANDWIDTH_VARIANCE < t
}),
c = e[e.length - 1],
o = e.filter(function (e) {
return e.bandwidth === c.bandwidth
})[0]
if (!1 === r) {
var d = o || l[0] || u[0]
if (d && d.playlist) {
r = o ? 'bandwidthBestRep' : 'sortedPlaylistReps'
return l[0] && (r = 'enabledPlaylistReps'), Ol('choosing ' + Ju(d) + ' using ' + r + ' with options', s), d.playlist
}
return Ol('could not choose a playlist with options', s), null
}
d = e.filter(function (e) {
return e.width && e.height
})
el(d, function (e, t) {
return e.width - t.width
})
var h,
p,
f,
e = d.filter(function (e) {
return e.width === i && e.height === n
}),
c = e[e.length - 1],
e = e.filter(function (e) {
return e.bandwidth === c.bandwidth
})[0]
e ||
((p = (h = d.filter(function (e) {
return e.width > i || e.height > n
})).filter(function (e) {
return e.width === h[0].width && e.height === h[0].height
})),
(c = p[p.length - 1]),
(p = p.filter(function (e) {
return e.bandwidth === c.bandwidth
})[0])),
a.experimentalLeastPixelDiffSelector &&
((m = d.map(function (e) {
return (e.pixelDiff = Math.abs(e.width - i) + Math.abs(e.height - n)), e
})),
el(m, function (e, t) {
return e.pixelDiff === t.pixelDiff ? t.bandwidth - e.bandwidth : e.pixelDiff - t.pixelDiff
}),
(f = m[0]))
var m = f || p || e || o || l[0] || u[0]
if (m && m.playlist) {
u = 'sortedPlaylistReps'
return (
f ? (u = 'leastPixelDiffRep') : p ? (u = 'resolutionPlusOneRep') : e ? (u = 'resolutionBestRep') : o ? (u = 'bandwidthBestRep') : l[0] && (u = 'enabledPlaylistReps'),
Ol('choosing ' + Ju(m) + ' using ' + u + ' with options', s),
m.playlist
)
}
return Ol('could not choose a playlist with options', s), null
}
}
function nl(e) {
var t = e.inbandTextTracks,
i = e.metadataArray,
r = e.timestampOffset,
n = e.videoDuration
if (i) {
var a = window.WebKitDataCue || window.VTTCue,
s = t.metadataTrack_
if (
s &&
(i.forEach(function (e) {
var n = e.cueTime + r
!('number' != typeof n || window.isNaN(n) || n < 0) &&
n < 1 / 0 &&
e.frames.forEach(function (e) {
var t,
i = new a(n, n, e.value || e.url || e.data || '')
;(i.frame = e),
(i.value = e),
(t = i),
Object.defineProperties(t.frame, {
id: {
get: function () {
return tr.log.warn('cue.frame.id is deprecated. Use cue.value.key instead.'), t.value.key
},
},
value: {
get: function () {
return tr.log.warn('cue.frame.value is deprecated. Use cue.value.data instead.'), t.value.data
},
},
privateData: {
get: function () {
return tr.log.warn('cue.frame.privateData is deprecated. Use cue.value.data instead.'), t.value.data
},
},
}),
s.addCue(i)
})
}),
s.cues && s.cues.length)
) {
for (var o = s.cues, u = [], l = 0; l < o.length; l++) o[l] && u.push(o[l])
var c = u.reduce(function (e, t) {
var i = e[t.startTime] || []
return i.push(t), (e[t.startTime] = i), e
}, {}),
d = Object.keys(c).sort(function (e, t) {
return Number(e) - Number(t)
})
d.forEach(function (e, t) {
var e = c[e],
i = Number(d[t + 1]) || n
e.forEach(function (e) {
e.endTime = i
})
})
}
}
}
function rl(e, t, i) {
var n, r
if (i && i.cues) for (n = i.cues.length; n--; ) (r = i.cues[n]).startTime >= e && r.endTime <= t && i.removeCue(r)
}
function al(e) {
return 'number' == typeof e && isFinite(e)
}
function sl(e) {
var t = e.startOfSegment,
i = e.duration,
n = e.segment,
r = e.part,
a = e.playlist,
s = a.mediaSequence,
o = a.id,
u = a.segments,
l = e.mediaIndex,
c = e.partIndex,
d = e.timeline,
h = (void 0 === u ? [] : u).length - 1,
p = 'mediaIndex/partIndex increment'
return (
e.getMediaInfoForTime ? (p = 'getMediaInfoForTime (' + e.getMediaInfoForTime + ')') : e.isSyncRequest && (p = 'getSyncSegmentCandidate (isSyncRequest)'),
e.independent && (p += ' with independent ' + e.independent),
(a = 'number' == typeof c),
(u = e.segment.uri ? 'segment' : 'pre-segment'),
(e = a ? zo({ preloadSegment: n }) - 1 : 0),
u +
' [' +
(s + l) +
'/' +
(s + h) +
']' +
(a ? ' part [' + c + '/' + e + ']' : '') +
' segment start/end [' +
n.start +
' => ' +
n.end +
']' +
(a ? ' part start/end [' + r.start + ' => ' + r.end + ']' : '') +
' startOfSegment [' +
t +
'] duration [' +
i +
'] timeline [' +
d +
'] selected by [' +
p +
'] playlist [' +
o +
']'
)
}
function ol(e) {
return e + 'TimingInfo'
}
function ul(e) {
var t = e.timelineChangeController,
i = e.currentTimeline,
n = e.segmentTimeline,
r = e.loaderType,
e = e.audioDisabled
if (i !== n) {
if ('audio' === r) {
i = t.lastTimelineChange({ type: 'main' })
return !i || i.to !== n
}
if ('main' === r && e) {
t = t.pendingTimelineChange({ type: 'audio' })
return t && t.to === n ? !1 : !0
}
}
}
function ll(e) {
var t = e.segmentDuration,
e = e.maxDuration
return !!t && Math.round(t) > e + fl
}
function cl(e, t) {
if ('hls' !== t) return null
var n,
r,
i =
((n = { audioTimingInfo: e.audioTimingInfo, videoTimingInfo: e.videoTimingInfo }),
(r = 0),
['video', 'audio'].forEach(function (e) {
var t,
i = n[e + 'TimingInfo']
i &&
((e = i.start),
(i = i.end),
'bigint' == typeof e || 'bigint' == typeof i ? (t = window.BigInt(i) - window.BigInt(e)) : 'number' == typeof e && 'number' == typeof i && (t = i - e),
'undefined' != typeof t && r < t && (r = t))
}),
(r = 'bigint' == typeof r && r < Number.MAX_SAFE_INTEGER ? Number(r) : r))
if (!i) return null
var a = e.playlist.targetDuration,
s = ll({ segmentDuration: i, maxDuration: 2 * a }),
t = ll({ segmentDuration: i, maxDuration: a }),
a =
'Segment with index ' +
e.mediaIndex +
' from playlist ' +
e.playlist.id +
' has a duration of ' +
i +
' when the reported duration is ' +
e.duration +
' and the target duration is ' +
a +
'. For HLS content, a duration in excess of the target duration may result in playback issues. See the HLS specification section on EXT-X-TARGETDURATION for more details: https://tools.ietf.org/html/draft-pantos-http-live-streaming-23#section-4.3.3.1'
return s || t ? { severity: s ? 'warn' : 'info', message: a } : null
}
var dl = Lo,
hl = 9e4,
pl = ir,
fl = 1 / 30,
ml = tr.createTimeRange,
gl = {
liveEdgeDelay: Xo,
duration: Yo,
seekable: function (e, t, i) {
var n = t || 0,
i = $o(e, t, !0, i)
return null === i ? ml() : ml(n, i)
},
getMediaInfoForTime: function (e) {
for (
var t = e.playlist,
i = e.currentTime,
n = e.startingSegmentIndex,
r = e.startingPartIndex,
a = e.startTime,
s = e.experimentalExactManifestTimings,
o = i - a,
u = Wo(t),
l = 0,
c = 0;
c < u.length;
c++
) {
var d = u[c]
if (n === d.segmentIndex && ('number' != typeof r || 'number' != typeof d.partIndex || r === d.partIndex)) {
l = c
break
}
}
if (o < 0) {
if (0 < l)
for (var h = l - 1; 0 <= h; h--) {
var p = u[h]
if (((o += p.duration), s)) {
if (o < 0) continue
} else if (o + fl <= 0) continue
return { partIndex: p.partIndex, segmentIndex: p.segmentIndex, startTime: a - Qo({ defaultDuration: t.targetDuration, durationList: u, startIndex: l, endIndex: h }) }
}
return { partIndex: (u[0] && u[0].partIndex) || null, segmentIndex: (u[0] && u[0].segmentIndex) || 0, startTime: i }
}
if (l < 0) {
for (var f = l; f < 0; f++) if ((o -= t.targetDuration) < 0) return { partIndex: (u[0] && u[0].partIndex) || null, segmentIndex: (u[0] && u[0].segmentIndex) || 0, startTime: i }
l = 0
}
for (var m = l; m < u.length; m++) {
var g = u[m]
if (((o -= g.duration), s)) {
if (0 < o) continue
} else if (0 <= o - fl) continue
return { partIndex: g.partIndex, segmentIndex: g.segmentIndex, startTime: a + Qo({ defaultDuration: t.targetDuration, durationList: u, startIndex: l, endIndex: m }) }
}
return { segmentIndex: u[u.length - 1].segmentIndex, partIndex: u[u.length - 1].partIndex, startTime: i }
},
isEnabled: eu,
isDisabled: function (e) {
return e.disabled
},
isBlacklisted: Jo,
isIncompatible: Zo,
playlistEnd: $o,
isAes: function (e) {
for (var t = 0; t < e.segments.length; t++) if (e.segments[t].key) return !0
return !1
},
hasAttribute: tu,
estimateSegmentRequestTime: function (e, t, i, n) {
return tu('BANDWIDTH', i) ? (e * i.attributes.BANDWIDTH - 8 * (n = void 0 === n ? 0 : n)) / t : NaN
},
isLowestEnabledRendition: iu,
isAudioOnly: au,
playlistMatch: nu,
segmentDurationWithParts: Vo,
},
yl = tr.log,
vl = tr.mergeOptions,
W = tr.EventTarget,
_l = (function (a) {
function e(e, t, i) {
var n
if ((void 0 === i && (i = {}), (n = a.call(this) || this), !e)) throw new Error('A non-empty playlist URL or object is required')
n.logger_ = Ro('PlaylistLoader')
var r = i.withCredentials,
r = void 0 !== r && r,
i = i.handleManifestRedirects,
i = void 0 !== i && i
;(n.src = e), (n.vhs_ = t), (n.withCredentials = r), (n.handleManifestRedirects = i)
t = t.options_
return (
(n.customTagParsers = (t && t.customTagParsers) || []),
(n.customTagMappers = (t && t.customTagMappers) || []),
(n.experimentalLLHLS = (t && t.experimentalLLHLS) || !1),
tr.browser.IE_VERSION && (n.experimentalLLHLS = !1),
(n.state = 'HAVE_NOTHING'),
(n.handleMediaupdatetimeout_ = n.handleMediaupdatetimeout_.bind(ft(n))),
n.on('mediaupdatetimeout', n.handleMediaupdatetimeout_),
n
)
}
mt(e, a)
var t = e.prototype
return (
(t.handleMediaupdatetimeout_ = function () {
var e,
t,
i = this
'HAVE_METADATA' === this.state &&
((e = this.media()),
(t = pl(this.master.uri, e.uri)),
this.experimentalLLHLS &&
(t = (function (e, t) {
if (t.endList || !t.serverControl) return e
var i,
n,
r,
a,
s = {}
return (
t.serverControl.canBlockReload &&
((r = t.preloadSegment),
(i = t.mediaSequence + t.segments.length),
r && ((n = r.parts || []), -1 < (r = zo(t) - 1) && r != n.length - 1 && (s._HLS_part = r), (-1 < r || n.length) && i--),
(s._HLS_msn = i)),
t.serverControl && t.serverControl.canSkipUntil && (s._HLS_skip = t.serverControl.canSkipDateranges ? 'v2' : 'YES'),
Object.keys(s).length &&
((a = new window.URL(e)),
['_HLS_skip', '_HLS_msn', '_HLS_part'].forEach(function (e) {
s.hasOwnProperty(e) && a.searchParams.set(e, s[e])
}),
(e = a.toString())),
e
)
})(t, e)),
(this.state = 'HAVE_CURRENT_METADATA'),
(this.request = this.vhs_.xhr({ uri: t, withCredentials: this.withCredentials }, function (e, t) {
if (i.request)
return e
? i.playlistRequestError(i.request, i.media(), 'HAVE_METADATA')
: void i.haveMetadata({ playlistString: i.request.responseText, url: i.media().uri, id: i.media().id })
})))
}),
(t.playlistRequestError = function (e, t, i) {
var n = t.uri,
t = t.id
;(this.request = null),
i && (this.state = i),
(this.error = {
playlist: this.master.playlists[t],
status: e.status,
message: 'HLS playlist request error at URL: ' + n + '.',
responseText: e.responseText,
code: 500 <= e.status ? 4 : 2,
}),
this.trigger('error')
}),
(t.parseManifest_ = function (e) {
var t = this,
i = e.url
return (function (e) {
var t = e.onwarn,
i = e.oninfo,
n = e.manifestString,
r = e.customTagParsers,
a = void 0 === r ? [] : r,
r = e.customTagMappers,
r = void 0 === r ? [] : r,
e = e.experimentalLLHLS,
s = new Ir()
t && s.on('warn', t),
i && s.on('info', i),
a.forEach(function (e) {
return s.addParser(e)
}),
r.forEach(function (e) {
return s.addTagMapper(e)
}),
s.push(n),
s.end()
var o = s.manifest
e ||
(['preloadSegment', 'skip', 'serverControl', 'renditionReports', 'partInf', 'partTargetDuration'].forEach(function (e) {
o.hasOwnProperty(e) && delete o[e]
}),
o.segments &&
o.segments.forEach(function (t) {
;['parts', 'preloadHints'].forEach(function (e) {
t.hasOwnProperty(e) && delete t[e]
})
})),
o.targetDuration ||
((u = 10),
o.segments &&
o.segments.length &&
(u = o.segments.reduce(function (e, t) {
return Math.max(e, t.duration)
}, 0)),
t && t('manifest has no targetDuration defaulting to ' + u),
(o.targetDuration = u))
var u = Go(o)
return (
u.length &&
!o.partTargetDuration &&
((u = u.reduce(function (e, t) {
return Math.max(e, t.duration)
}, 0)),
t &&
(t('manifest has no partTargetDuration defaulting to ' + u),
yl.error(
'LL-HLS manifest has parts but lacks required #EXT-X-PART-INF:PART-TARGET value. See https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis-09#section-4.4.3.7. Playback is not guaranteed.'
)),
(o.partTargetDuration = u)),
o
)
})({
onwarn: function (e) {
e = e.message
return t.logger_('m3u8-parser warn for ' + i + ': ' + e)
},
oninfo: function (e) {
e = e.message
return t.logger_('m3u8-parser info for ' + i + ': ' + e)
},
manifestString: e.manifestString,
customTagParsers: this.customTagParsers,
customTagMappers: this.customTagMappers,
experimentalLLHLS: this.experimentalLLHLS,
})
}),
(t.haveMetadata = function (e) {
var t = e.playlistString,
i = e.playlistObject,
n = e.url,
e = e.id
;(this.request = null), (this.state = 'HAVE_METADATA')
t = i || this.parseManifest_({ url: n, manifestString: t })
;(t.lastRequest = Date.now()), uu({ playlist: t, uri: n, id: e })
n = fu(this.master, t)
;(this.targetDuration = t.partTargetDuration || t.targetDuration),
(this.pendingMedia_ = null),
n ? ((this.master = n), (this.media_ = this.master.playlists[e])) : this.trigger('playlistunchanged'),
this.updateMediaUpdateTimeout_(mu(this.media(), !!n)),
this.trigger('loadedplaylist')
}),
(t.dispose = function () {
this.trigger('dispose'), this.stopRequest(), window.clearTimeout(this.mediaUpdateTimeout), window.clearTimeout(this.finalRenditionTimeout), this.off()
}),
(t.stopRequest = function () {
var e
this.request && ((e = this.request), (this.request = null), (e.onreadystatechange = null), e.abort())
}),
(t.media = function (i, e) {
var n = this
if (!i) return this.media_
if ('HAVE_NOTHING' === this.state) throw new Error('Cannot switch media playlist from ' + this.state)
if ('string' == typeof i) {
if (!this.master.playlists[i]) throw new Error('Unknown playlist URI: ' + i)
i = this.master.playlists[i]
}
if ((window.clearTimeout(this.finalRenditionTimeout), e)) {
var t = ((i.partTargetDuration || i.targetDuration) / 2) * 1e3 || 5e3
this.finalRenditionTimeout = window.setTimeout(this.media.bind(this, i, !1), t)
} else {
var r = this.state,
e = !this.media_ || i.id !== this.media_.id,
t = this.master.playlists[i.id]
if ((t && t.endList) || (i.endList && i.segments.length))
return (
this.request && ((this.request.onreadystatechange = null), this.request.abort(), (this.request = null)),
(this.state = 'HAVE_METADATA'),
(this.media_ = i),
void (e && (this.trigger('mediachanging'), 'HAVE_MASTER' === r ? this.trigger('loadedmetadata') : this.trigger('mediachange')))
)
if ((this.updateMediaUpdateTimeout_(mu(i, !0)), e)) {
if (((this.state = 'SWITCHING_MEDIA'), this.request)) {
if (i.resolvedUri === this.request.url) return
;(this.request.onreadystatechange = null), this.request.abort(), (this.request = null)
}
this.media_ && this.trigger('mediachanging'),
(this.pendingMedia_ = i),
(this.request = this.vhs_.xhr({ uri: i.resolvedUri, withCredentials: this.withCredentials }, function (e, t) {
if (n.request) {
if (((i.lastRequest = Date.now()), (i.resolvedUri = Mo(n.handleManifestRedirects, i.resolvedUri, t)), e)) return n.playlistRequestError(n.request, i, r)
n.haveMetadata({ playlistString: t.responseText, url: i.uri, id: i.id }), 'HAVE_MASTER' === r ? n.trigger('loadedmetadata') : n.trigger('mediachange')
}
}))
}
}
}),
(t.pause = function () {
this.mediaUpdateTimeout && (window.clearTimeout(this.mediaUpdateTimeout), (this.mediaUpdateTimeout = null)),
this.stopRequest(),
'HAVE_NOTHING' === this.state && (this.started = !1),
'SWITCHING_MEDIA' === this.state
? this.media_
? (this.state = 'HAVE_METADATA')
: (this.state = 'HAVE_MASTER')
: 'HAVE_CURRENT_METADATA' === this.state && (this.state = 'HAVE_METADATA')
}),
(t.load = function (e) {
var t = this
this.mediaUpdateTimeout && (window.clearTimeout(this.mediaUpdateTimeout), (this.mediaUpdateTimeout = null))
var i = this.media()
e
? ((e = i ? ((i.partTargetDuration || i.targetDuration) / 2) * 1e3 : 5e3),
(this.mediaUpdateTimeout = window.setTimeout(function () {
;(t.mediaUpdateTimeout = null), t.load()
}, e)))
: this.started
? i && !i.endList
? this.trigger('mediaupdatetimeout')
: this.trigger('loadedplaylist')
: this.start()
}),
(t.updateMediaUpdateTimeout_ = function (e) {
var t = this
this.mediaUpdateTimeout && (window.clearTimeout(this.mediaUpdateTimeout), (this.mediaUpdateTimeout = null)),
this.media() &&
!this.media().endList &&
(this.mediaUpdateTimeout = window.setTimeout(function () {
;(t.mediaUpdateTimeout = null), t.trigger('mediaupdatetimeout'), t.updateMediaUpdateTimeout_(e)
}, e))
}),
(t.start = function () {
var i = this
if (((this.started = !0), 'object' == typeof this.src))
return (
this.src.uri || (this.src.uri = window.location.href),
(this.src.resolvedUri = this.src.uri),
void setTimeout(function () {
i.setupInitialPlaylist(i.src)
}, 0)
)
this.request = this.vhs_.xhr({ uri: this.src, withCredentials: this.withCredentials }, function (e, t) {
if (i.request) {
if (((i.request = null), e))
return (
(i.error = { status: t.status, message: 'HLS playlist request error at URL: ' + i.src + '.', responseText: t.responseText, code: 2 }),
'HAVE_NOTHING' === i.state && (i.started = !1),
i.trigger('error')
)
i.src = Mo(i.handleManifestRedirects, i.src, t)
t = i.parseManifest_({ manifestString: t.responseText, url: i.src })
i.setupInitialPlaylist(t)
}
})
}),
(t.srcUri = function () {
return 'string' == typeof this.src ? this.src : this.src.uri
}),
(t.setupInitialPlaylist = function (e) {
if (((this.state = 'HAVE_MASTER'), e.playlists))
return (
(this.master = e),
lu(this.master, this.srcUri()),
e.playlists.forEach(function (t) {
;(t.segments = hu(t)),
t.segments.forEach(function (e) {
du(e, t.resolvedUri)
})
}),
this.trigger('loadedplaylist'),
void (this.request || this.media(this.master.playlists[0]))
)
var t,
i,
n,
r = this.srcUri() || window.location.href
;(this.master =
((i = su(0, (t = r))),
((n = {
mediaGroups: { AUDIO: {}, VIDEO: {}, 'CLOSED-CAPTIONS': {}, SUBTITLES: {} },
uri: window.location.href,
resolvedUri: window.location.href,
playlists: [{ uri: t, id: i, resolvedUri: t, attributes: {} }],
}).playlists[i] = n.playlists[0]),
(n.playlists[t] = n.playlists[0]),
n)),
this.haveMetadata({ playlistObject: e, url: r, id: this.master.playlists[0].id }),
this.trigger('loadedmetadata')
}),
e
)
})(W),
bl = tr.xhr,
Tl = tr.mergeOptions,
zt = Object.freeze({
__proto__: null,
createTransferableMessage: Tu,
initSegmentId: Su,
segmentKeyId: wu,
hexDump: Eu,
tagDump: function (e) {
e = e.bytes
return Eu(e)
},
textRanges: function (e) {
for (var t, i, n = '', r = 0; r < e.length; r++) n += ((i = r), (t = e).start(i) + '-' + t.end(i) + ' ')
return n
},
}),
ar = tr.EventTarget,
Sl = tr.mergeOptions,
wl = (function (a) {
function e(e, t, i, n) {
var r
void 0 === i && (i = {}), ((r = a.call(this) || this).masterPlaylistLoader_ = n || ft(r)), n || (r.isMaster_ = !0)
;(n = i.withCredentials), (n = void 0 !== n && n), (i = i.handleManifestRedirects), (i = void 0 !== i && i)
if (((r.vhs_ = t), (r.withCredentials = n), (r.handleManifestRedirects = i), !e)) throw new Error('A non-empty playlist URL or object is required')
return (
r.on('minimumUpdatePeriod', function () {
r.refreshXml_()
}),
r.on('mediaupdatetimeout', function () {
r.refreshMedia_(r.media().id)
}),
(r.state = 'HAVE_NOTHING'),
(r.loadedPlaylists_ = {}),
(r.logger_ = Ro('DashPlaylistLoader')),
r.isMaster_ ? ((r.masterPlaylistLoader_.srcUrl = e), (r.masterPlaylistLoader_.sidxMapping_ = {})) : (r.childPlaylist_ = e),
r
)
}
mt(e, a)
var t = e.prototype
return (
(t.requestErrored_ = function (e, t, i) {
return (
!this.request ||
((this.request = null),
e
? ((this.error = 'object' != typeof e || e instanceof Error ? { status: t.status, message: 'DASH request error at URL: ' + t.uri, response: t.response, code: 2 } : e),
i && (this.state = i),
this.trigger('error'),
!0)
: void 0)
)
}),
(t.addSidxSegments_ = function (a, n, r) {
var s,
o,
u = this,
l = a.sidx && xs(a.sidx)
a.sidx && l && !this.masterPlaylistLoader_.sidxMapping_[l]
? ((s = Mo(this.handleManifestRedirects, a.sidx.resolvedUri)),
(o = function (e, t) {
if (!u.requestErrored_(e, t, n)) {
var i,
e = u.masterPlaylistLoader_.sidxMapping_
try {
i = wo(br(t.response).subarray(8))
} catch (e) {
return void u.requestErrored_(e, t, n)
}
return (e[l] = { sidxInfo: a.sidx, sidx: i }), ws(a, i, a.sidx.resolvedUri), r(!0)
}
}),
(this.request = xu(s, this.vhs_.xhr, function (e, t, i, n) {
if (e) return o(e, t)
if (!i || 'mp4' !== i)
return o(
{
status: t.status,
message: 'Unsupported ' + (i || 'unknown') + ' container type for sidx segment at URL: ' + s,
response: '',
playlist: a,
internal: !0,
blacklistDuration: 1 / 0,
code: 2,
},
t
)
var r = a.sidx.byterange,
i = r.offset,
r = r.length
if (n.length >= r + i) return o(e, { response: n.subarray(i, i + r), status: t.status, uri: t.uri })
u.request = u.vhs_.xhr({ uri: s, responseType: 'arraybuffer', headers: vu({ byterange: a.sidx.byterange }) }, o)
})))
: (this.mediaRequest_ = window.setTimeout(function () {
return r(!1)
}, 0))
}),
(t.dispose = function () {
this.trigger('dispose'),
this.stopRequest(),
(this.loadedPlaylists_ = {}),
window.clearTimeout(this.minimumUpdatePeriodTimeout_),
window.clearTimeout(this.mediaRequest_),
window.clearTimeout(this.mediaUpdateTimeout),
(this.mediaUpdateTimeout = null),
(this.mediaRequest_ = null),
(this.minimumUpdatePeriodTimeout_ = null),
this.masterPlaylistLoader_.createMupOnMedia_ &&
(this.off('loadedmetadata', this.masterPlaylistLoader_.createMupOnMedia_), (this.masterPlaylistLoader_.createMupOnMedia_ = null)),
this.off()
}),
(t.hasPendingRequest = function () {
return this.request || this.mediaRequest_
}),
(t.stopRequest = function () {
var e
this.request && ((e = this.request), (this.request = null), (e.onreadystatechange = null), e.abort())
}),
(t.media = function (t) {
var i = this
if (!t) return this.media_
if ('HAVE_NOTHING' === this.state) throw new Error('Cannot switch media playlist from ' + this.state)
var n = this.state
if ('string' == typeof t) {
if (!this.masterPlaylistLoader_.master.playlists[t]) throw new Error('Unknown playlist URI: ' + t)
t = this.masterPlaylistLoader_.master.playlists[t]
}
var e = !this.media_ || t.id !== this.media_.id
if (e && this.loadedPlaylists_[t.id] && this.loadedPlaylists_[t.id].endList)
return (this.state = 'HAVE_METADATA'), (this.media_ = t), void (e && (this.trigger('mediachanging'), this.trigger('mediachange')))
e &&
(this.media_ && this.trigger('mediachanging'),
this.addSidxSegments_(t, n, function (e) {
i.haveMetadata({ startingState: n, playlist: t })
}))
}),
(t.haveMetadata = function (e) {
var t = e.startingState,
e = e.playlist
;(this.state = 'HAVE_METADATA'),
(this.loadedPlaylists_[e.id] = e),
(this.mediaRequest_ = null),
this.refreshMedia_(e.id),
'HAVE_MASTER' === t ? this.trigger('loadedmetadata') : this.trigger('mediachange')
}),
(t.pause = function () {
this.masterPlaylistLoader_.createMupOnMedia_ && (this.off('loadedmetadata', this.masterPlaylistLoader_.createMupOnMedia_), (this.masterPlaylistLoader_.createMupOnMedia_ = null)),
this.stopRequest(),
window.clearTimeout(this.mediaUpdateTimeout),
(this.mediaUpdateTimeout = null),
this.isMaster_ && (window.clearTimeout(this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_), (this.masterPlaylistLoader_.minimumUpdatePeriodTimeout_ = null)),
'HAVE_NOTHING' === this.state && (this.started = !1)
}),
(t.load = function (e) {
var t = this
window.clearTimeout(this.mediaUpdateTimeout), (this.mediaUpdateTimeout = null)
var i = this.media()
e
? ((e = i ? (i.targetDuration / 2) * 1e3 : 5e3),
(this.mediaUpdateTimeout = window.setTimeout(function () {
return t.load()
}, e)))
: this.started
? i && !i.endList
? (this.isMaster_ && !this.minimumUpdatePeriodTimeout_ && (this.trigger('minimumUpdatePeriod'), this.updateMinimumUpdatePeriodTimeout_()),
this.trigger('mediaupdatetimeout'))
: this.trigger('loadedplaylist')
: this.start()
}),
(t.start = function () {
var i = this
;(this.started = !0),
this.isMaster_
? this.requestMaster_(function (e, t) {
i.haveMaster_(), i.hasPendingRequest() || i.media_ || i.media(i.masterPlaylistLoader_.master.playlists[0])
})
: (this.mediaRequest_ = window.setTimeout(function () {
return i.haveMaster_()
}, 0))
}),
(t.requestMaster_ = function (n) {
var r = this
this.request = this.vhs_.xhr({ uri: this.masterPlaylistLoader_.srcUrl, withCredentials: this.withCredentials }, function (e, t) {
if (!r.requestErrored_(e, t)) {
var i = t.responseText !== r.masterPlaylistLoader_.masterXml_
return (
(r.masterPlaylistLoader_.masterXml_ = t.responseText),
t.responseHeaders && t.responseHeaders.date ? (r.masterLoaded_ = Date.parse(t.responseHeaders.date)) : (r.masterLoaded_ = Date.now()),
(r.masterPlaylistLoader_.srcUrl = Mo(r.handleManifestRedirects, r.masterPlaylistLoader_.srcUrl, t)),
i
? (r.handleMaster_(),
void r.syncClientServerClock_(function () {
return n(t, i)
}))
: n(t, i)
)
}
'HAVE_NOTHING' === r.state && (r.started = !1)
})
}),
(t.syncClientServerClock_ = function (i) {
var n = this,
r = Zs(this.masterPlaylistLoader_.masterXml_)
return null === r
? ((this.masterPlaylistLoader_.clientOffset_ = this.masterLoaded_ - Date.now()), i())
: 'DIRECT' === r.method
? ((this.masterPlaylistLoader_.clientOffset_ = r.value - Date.now()), i())
: void (this.request = this.vhs_.xhr({ uri: pl(this.masterPlaylistLoader_.srcUrl, r.value), method: r.method, withCredentials: this.withCredentials }, function (e, t) {
if (n.request) {
if (e) return (n.masterPlaylistLoader_.clientOffset_ = n.masterLoaded_ - Date.now()), i()
t = 'HEAD' === r.method ? (t.responseHeaders && t.responseHeaders.date ? Date.parse(t.responseHeaders.date) : n.masterLoaded_) : Date.parse(t.responseText)
;(n.masterPlaylistLoader_.clientOffset_ = t - Date.now()), i()
}
}))
}),
(t.haveMaster_ = function () {
;(this.state = 'HAVE_MASTER'), this.isMaster_ ? this.trigger('loadedplaylist') : this.media_ || this.media(this.childPlaylist_)
}),
(t.handleMaster_ = function () {
this.mediaRequest_ = null
var e,
t,
i,
n,
r = this.masterPlaylistLoader_.master,
t =
((a = {
masterXml: this.masterPlaylistLoader_.masterXml_,
srcUrl: this.masterPlaylistLoader_.srcUrl,
clientOffset: this.masterPlaylistLoader_.clientOffset_,
sidxMapping: this.masterPlaylistLoader_.sidxMapping_,
previousManifest: r,
}),
(e = a.masterXml),
(t = a.srcUrl),
(i = a.clientOffset),
(n = a.sidxMapping),
(a = a.previousManifest),
(a = Js(e, { manifestUri: t, clientOffset: i, sidxMapping: n, previousManifest: a })),
lu(a, t),
a)
r &&
(t = (function (e, t, i) {
for (var a = !0, s = Sl(e, { duration: t.duration, minimumUpdatePeriod: t.minimumUpdatePeriod, timelineStarts: t.timelineStarts }), n = 0; n < t.playlists.length; n++) {
var r,
o = t.playlists[n]
o.sidx && ((r = xs(o.sidx)), i && i[r] && i[r].sidx && ws(o, i[r].sidx, o.sidx.resolvedUri))
o = fu(s, o, Au)
o && ((s = o), (a = !1))
}
return (
ou(t, function (e, t, i, n) {
var r
e.playlists &&
e.playlists.length &&
((r = e.playlists[0].id), (e = fu(s, e.playlists[0], Au)) && (((s = e).mediaGroups[t][i][n].playlists[0] = s.playlists[r]), (a = !1)))
}),
(a = t.minimumUpdatePeriod === e.minimumUpdatePeriod && a) ? null : s
)
})(r, t, this.masterPlaylistLoader_.sidxMapping_)),
(this.masterPlaylistLoader_.master = t || r)
var a = this.masterPlaylistLoader_.master.locations && this.masterPlaylistLoader_.master.locations[0]
return (
a && a !== this.masterPlaylistLoader_.srcUrl && (this.masterPlaylistLoader_.srcUrl = a),
(!r || (t && t.minimumUpdatePeriod !== r.minimumUpdatePeriod)) && this.updateMinimumUpdatePeriodTimeout_(),
Boolean(t)
)
}),
(t.updateMinimumUpdatePeriodTimeout_ = function () {
var e = this.masterPlaylistLoader_
e.createMupOnMedia_ && (e.off('loadedmetadata', e.createMupOnMedia_), (e.createMupOnMedia_ = null)),
e.minimumUpdatePeriodTimeout_ && (window.clearTimeout(e.minimumUpdatePeriodTimeout_), (e.minimumUpdatePeriodTimeout_ = null))
var t = e.master && e.master.minimumUpdatePeriod
0 === t && (e.media() ? (t = 1e3 * e.media().targetDuration) : ((e.createMupOnMedia_ = e.updateMinimumUpdatePeriodTimeout_), e.one('loadedmetadata', e.createMupOnMedia_))),
'number' != typeof t || t <= 0 ? t < 0 && this.logger_('found invalid minimumUpdatePeriod of ' + t + ', not setting a timeout') : this.createMUPTimeout_(t)
}),
(t.createMUPTimeout_ = function (e) {
var t = this.masterPlaylistLoader_
t.minimumUpdatePeriodTimeout_ = window.setTimeout(function () {
;(t.minimumUpdatePeriodTimeout_ = null), t.trigger('minimumUpdatePeriod'), t.createMUPTimeout_(e)
}, e)
}),
(t.refreshXml_ = function () {
var i = this
this.requestMaster_(function (e, t) {
var r, a
t &&
(i.media_ && (i.media_ = i.masterPlaylistLoader_.master.playlists[i.media_.id]),
(i.masterPlaylistLoader_.sidxMapping_ =
((t = i.masterPlaylistLoader_.master),
(r = i.masterPlaylistLoader_.sidxMapping_),
(a = Pu(t.playlists, r)),
ou(t, function (e, t, i, n) {
e.playlists && e.playlists.length && ((e = e.playlists), (a = Sl(a, Pu(e, r))))
}),
a)),
i.addSidxSegments_(i.media(), i.state, function (e) {
i.refreshMedia_(i.media().id)
}))
})
}),
(t.refreshMedia_ = function (e) {
var t = this
if (!e) throw new Error('refreshMedia_ must take a media id')
this.media_ && this.isMaster_ && this.handleMaster_()
var i = this.masterPlaylistLoader_.master.playlists,
n = !this.media_ || this.media_ !== i[e]
n ? (this.media_ = i[e]) : this.trigger('playlistunchanged'),
this.mediaUpdateTimeout ||
(function e() {
t.media().endList ||
(t.mediaUpdateTimeout = window.setTimeout(function () {
t.trigger('mediaupdatetimeout'), e()
}, mu(t.media(), Boolean(n))))
})(),
this.trigger('loadedplaylist')
}),
e
)
})(ar),
El = {
GOAL_BUFFER_LENGTH: 30,
MAX_GOAL_BUFFER_LENGTH: 60,
BACK_BUFFER_LENGTH: 30,
GOAL_BUFFER_LENGTH_RATE: 1,
INITIAL_BANDWIDTH: 4194304,
BANDWIDTH_VARIANCE: 1.2,
BUFFER_LOW_WATER_LINE: 0,
MAX_BUFFER_LOW_WATER_LINE: 30,
EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE: 16,
BUFFER_LOW_WATER_LINE_RATE: 1,
BUFFER_HIGH_WATER_LINE: 30,
},
x = function (n) {
return function () {
var e = (function (t) {
try {
return URL.createObjectURL(new Blob([t], { type: 'application/javascript' }))
} catch (e) {
var i = new BlobBuilder()
return i.append(t), URL.createObjectURL(i.getBlob())
}
})(n),
t = Lu(new Worker(e))
t.objURL = e
var i = t.terminate
return (
(t.on = t.addEventListener),
(t.off = t.removeEventListener),
(t.terminate = function () {
return URL.revokeObjectURL(e), i.call(this)
}),
t
)
}
},
U = function (e) {
return 'var browserWorkerPolyFill = ' + Lu.toString() + ';\nbrowserWorkerPolyFill(self);\n' + e
},
W = function (e) {
return e
.toString()
.replace(/^function.+?{/, '')
.slice(0, -1)
},
kl = x(
U(
W(function () {
var e = function () {
this.init = function () {
var a = {}
;(this.on = function (e, t) {
a[e] || (a[e] = []), (a[e] = a[e].concat(t))
}),
(this.off = function (e, t) {
return !!a[e] && ((t = a[e].indexOf(t)), (a[e] = a[e].slice()), a[e].splice(t, 1), -1 < t)
}),
(this.trigger = function (e) {
var t,
i,
n,
r = a[e]
if (r)
if (2 === arguments.length) for (i = r.length, t = 0; t < i; ++t) r[t].call(this, arguments[1])
else {
for (n = [], t = arguments.length, t = 1; t < arguments.length; ++t) n.push(arguments[t])
for (i = r.length, t = 0; t < i; ++t) r[t].apply(this, n)
}
}),
(this.dispose = function () {
a = {}
})
}
}
;(e.prototype.pipe = function (t) {
return (
this.on('data', function (e) {
t.push(e)
}),
this.on('done', function (e) {
t.flush(e)
}),
this.on('partialdone', function (e) {
t.partialFlush(e)
}),
this.on('endedtimeline', function (e) {
t.endTimeline(e)
}),
this.on('reset', function (e) {
t.reset(e)
}),
t
)
}),
(e.prototype.push = function (e) {
this.trigger('data', e)
}),
(e.prototype.flush = function (e) {
this.trigger('done', e)
}),
(e.prototype.partialFlush = function (e) {
this.trigger('partialdone', e)
}),
(e.prototype.endTimeline = function (e) {
this.trigger('endedtimeline', e)
}),
(e.prototype.reset = function (e) {
this.trigger('reset', e)
})
var u,
t,
i,
n,
r,
a,
s,
o,
l,
c,
d,
h,
p,
f,
m,
g,
y,
v,
_,
b,
T,
S,
w,
E,
k,
C,
I,
x,
A,
P,
L,
D,
O,
M,
R,
N,
U,
B,
F,
j = e,
H = Math.pow(2, 32),
q = {
getUint64: function (e) {
var t = new DataView(e.buffer, e.byteOffset, e.byteLength)
return t.getBigUint64 ? ((e = t.getBigUint64(0)) < Number.MAX_SAFE_INTEGER ? Number(e) : e) : t.getUint32(0) * H + t.getUint32(4)
},
MAX_UINT32: H,
},
V = q.MAX_UINT32
!(function () {
if (
((T = {
avc1: [],
avcC: [],
btrt: [],
dinf: [],
dref: [],
esds: [],
ftyp: [],
hdlr: [],
mdat: [],
mdhd: [],
mdia: [],
mfhd: [],
minf: [],
moof: [],
moov: [],
mp4a: [],
mvex: [],
mvhd: [],
pasp: [],
sdtp: [],
smhd: [],
stbl: [],
stco: [],
stsc: [],
stsd: [],
stsz: [],
stts: [],
styp: [],
tfdt: [],
tfhd: [],
traf: [],
trak: [],
trun: [],
trex: [],
tkhd: [],
vmhd: [],
}),
'undefined' != typeof Uint8Array)
) {
for (var e in T) T.hasOwnProperty(e) && (T[e] = [e.charCodeAt(0), e.charCodeAt(1), e.charCodeAt(2), e.charCodeAt(3)])
;(S = new Uint8Array(['i'.charCodeAt(0), 's'.charCodeAt(0), 'o'.charCodeAt(0), 'm'.charCodeAt(0)])),
(E = new Uint8Array(['a'.charCodeAt(0), 'v'.charCodeAt(0), 'c'.charCodeAt(0), '1'.charCodeAt(0)])),
(w = new Uint8Array([0, 0, 0, 1])),
(k = 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])),
(C = 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 = { video: k, audio: C }),
(P = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1])),
(A = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0])),
(L = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0])),
(D = L),
(O = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])),
(M = L),
(x = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]))
}
})(),
(u = function (e) {
for (var t, i = [], n = 0, r = 1; r < arguments.length; r++) i.push(arguments[r])
for (r = i.length; r--; ) n += i[r].byteLength
for (t = new Uint8Array(n + 8), new DataView(t.buffer, t.byteOffset, t.byteLength).setUint32(0, t.byteLength), t.set(e, 4), r = 0, n = 8; r < i.length; r++)
t.set(i[r], n), (n += i[r].byteLength)
return t
}),
(t = function () {
return u(T.dinf, u(T.dref, P))
}),
(i = function (e) {
return u(
T.esds,
new Uint8Array([
0,
0,
0,
0,
3,
25,
0,
0,
0,
4,
17,
64,
21,
0,
6,
0,
0,
0,
218,
192,
0,
0,
218,
192,
5,
2,
(e.audioobjecttype << 3) | (e.samplingfrequencyindex >>> 1),
(e.samplingfrequencyindex << 7) | (e.channelcount << 3),
6,
1,
2,
])
)
}),
(f = function (e) {
return u(T.hdlr, I[e])
}),
(p = function (e) {
var t = new Uint8Array([
0,
0,
0,
0,
0,
0,
0,
2,
0,
0,
0,
3,
0,
1,
95,
144,
(e.duration >>> 24) & 255,
(e.duration >>> 16) & 255,
(e.duration >>> 8) & 255,
255 & e.duration,
85,
196,
0,
0,
])
return (
e.samplerate && ((t[12] = (e.samplerate >>> 24) & 255), (t[13] = (e.samplerate >>> 16) & 255), (t[14] = (e.samplerate >>> 8) & 255), (t[15] = 255 & e.samplerate)),
u(T.mdhd, t)
)
}),
(h = function (e) {
return u(T.mdia, p(e), f(e.type), a(e))
}),
(r = function (e) {
return u(T.mfhd, new Uint8Array([0, 0, 0, 0, (4278190080 & e) >> 24, (16711680 & e) >> 16, (65280 & e) >> 8, 255 & e]))
}),
(a = function (e) {
return u(T.minf, 'video' === e.type ? u(T.vmhd, x) : u(T.smhd, A), t(), g(e))
}),
(We = function (e, t) {
for (var i = [], n = t.length; n--; ) i[n] = v(t[n])
return u.apply(null, [T.moof, r(e)].concat(i))
}),
(s = function (e) {
for (var t = e.length, i = []; t--; ) i[t] = c(e[t])
return u.apply(null, [T.moov, l(4294967295)].concat(i).concat(o(e)))
}),
(o = function (e) {
for (var t = e.length, i = []; t--; ) i[t] = _(e[t])
return u.apply(null, [T.mvex].concat(i))
}),
(l = function (e) {
e = new Uint8Array([
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
2,
0,
1,
95,
144,
(4278190080 & e) >> 24,
(16711680 & e) >> 16,
(65280 & e) >> 8,
255 & e,
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,
])
return u(T.mvhd, e)
}),
(m = function (e) {
for (var t, i = e.samples || [], n = new Uint8Array(4 + i.length), r = 0; r < i.length; r++)
(t = i[r].flags), (n[r + 4] = (t.dependsOn << 4) | (t.isDependedOn << 2) | t.hasRedundancy)
return u(T.sdtp, n)
}),
(g = function (e) {
return u(T.stbl, y(e), u(T.stts, M), u(T.stsc, D), u(T.stsz, O), u(T.stco, L))
}),
(y = function (e) {
return u(T.stsd, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]), ('video' === e.type ? R : N)(e))
}),
(R = function (e) {
for (var t, i, n = e.sps || [], r = e.pps || [], a = [], s = [], o = 0; o < n.length; o++)
a.push((65280 & n[o].byteLength) >>> 8), a.push(255 & n[o].byteLength), (a = a.concat(Array.prototype.slice.call(n[o])))
for (o = 0; o < r.length; o++) s.push((65280 & r[o].byteLength) >>> 8), s.push(255 & r[o].byteLength), (s = s.concat(Array.prototype.slice.call(r[o])))
return (
(t = [
T.avc1,
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,
(65280 & e.width) >> 8,
255 & e.width,
(65280 & e.height) >> 8,
255 & e.height,
0,
72,
0,
0,
0,
72,
0,
0,
0,
0,
0,
0,
0,
1,
19,
118,
105,
100,
101,
111,
106,
115,
45,
99,
111,
110,
116,
114,
105,
98,
45,
104,
108,
115,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
24,
17,
17,
]),
u(T.avcC, new Uint8Array([1, e.profileIdc, e.profileCompatibility, e.levelIdc, 255].concat([n.length], a, [r.length], s))),
u(T.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192])),
]),
e.sarRatio &&
((i = e.sarRatio[0]),
(e = e.sarRatio[1]),
t.push(
u(
T.pasp,
new Uint8Array([
(4278190080 & i) >> 24,
(16711680 & i) >> 16,
(65280 & i) >> 8,
255 & i,
(4278190080 & e) >> 24,
(16711680 & e) >> 16,
(65280 & e) >> 8,
255 & e,
])
)
)),
u.apply(null, t)
)
}),
(N = function (e) {
return u(
T.mp4a,
new Uint8Array([
0,
0,
0,
0,
0,
0,
0,
1,
0,
0,
0,
0,
0,
0,
0,
0,
(65280 & e.channelcount) >> 8,
255 & e.channelcount,
(65280 & e.samplesize) >> 8,
255 & e.samplesize,
0,
0,
0,
0,
(65280 & e.samplerate) >> 8,
255 & e.samplerate,
0,
0,
]),
i(e)
)
}),
(d = function (e) {
e = new Uint8Array([
0,
0,
0,
7,
0,
0,
0,
0,
0,
0,
0,
0,
(4278190080 & e.id) >> 24,
(16711680 & e.id) >> 16,
(65280 & e.id) >> 8,
255 & e.id,
0,
0,
0,
0,
(4278190080 & e.duration) >> 24,
(16711680 & e.duration) >> 16,
(65280 & e.duration) >> 8,
255 & e.duration,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
1,
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,
(65280 & e.width) >> 8,
255 & e.width,
0,
0,
(65280 & e.height) >> 8,
255 & e.height,
0,
0,
])
return u(T.tkhd, e)
}),
(v = function (e) {
var t,
i = u(
T.tfhd,
new Uint8Array([0, 0, 0, 58, (4278190080 & e.id) >> 24, (16711680 & e.id) >> 16, (65280 & e.id) >> 8, 255 & e.id, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
),
n = Math.floor(e.baseMediaDecodeTime / V),
r = Math.floor(e.baseMediaDecodeTime % V),
n = u(T.tfdt, new Uint8Array([1, 0, 0, 0, (n >>> 24) & 255, (n >>> 16) & 255, (n >>> 8) & 255, 255 & n, (r >>> 24) & 255, (r >>> 16) & 255, (r >>> 8) & 255, 255 & r]))
return 'audio' === e.type ? ((t = b(e, 92)), u(T.traf, i, n, t)) : ((r = m(e)), (t = b(e, r.length + 92)), u(T.traf, i, n, t, r))
}),
(c = function (e) {
return (e.duration = e.duration || 4294967295), u(T.trak, d(e), h(e))
}),
(_ = function (e) {
var t = new Uint8Array([0, 0, 0, 0, (4278190080 & e.id) >> 24, (16711680 & e.id) >> 16, (65280 & e.id) >> 8, 255 & e.id, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1])
return 'video' !== e.type && (t[t.length - 1] = 0), u(T.trex, t)
}),
(U = function (e, t) {
var i = 0,
n = 0,
r = 0,
a = 0
return (
e.length && (void 0 !== e[0].duration && (i = 1), void 0 !== e[0].size && (n = 2), void 0 !== e[0].flags && (r = 4), void 0 !== e[0].compositionTimeOffset && (a = 8)),
[
0,
0,
i | n | r | a,
1,
(4278190080 & e.length) >>> 24,
(16711680 & e.length) >>> 16,
(65280 & e.length) >>> 8,
255 & e.length,
(4278190080 & t) >>> 24,
(16711680 & t) >>> 16,
(65280 & t) >>> 8,
255 & t,
]
)
}),
(B = function (e, t) {
var i,
n,
r,
a,
s = e.samples || []
for (t += 20 + 16 * s.length, t = U(s, t), (n = new Uint8Array(t.length + 16 * s.length)).set(t), i = t.length, a = 0; a < s.length; a++)
(r = s[a]),
(n[i++] = (4278190080 & r.duration) >>> 24),
(n[i++] = (16711680 & r.duration) >>> 16),
(n[i++] = (65280 & r.duration) >>> 8),
(n[i++] = 255 & r.duration),
(n[i++] = (4278190080 & r.size) >>> 24),
(n[i++] = (16711680 & r.size) >>> 16),
(n[i++] = (65280 & r.size) >>> 8),
(n[i++] = 255 & r.size),
(n[i++] = (r.flags.isLeading << 2) | r.flags.dependsOn),
(n[i++] = (r.flags.isDependedOn << 6) | (r.flags.hasRedundancy << 4) | (r.flags.paddingValue << 1) | r.flags.isNonSyncSample),
(n[i++] = 61440 & r.flags.degradationPriority),
(n[i++] = 15 & r.flags.degradationPriority),
(n[i++] = (4278190080 & r.compositionTimeOffset) >>> 24),
(n[i++] = (16711680 & r.compositionTimeOffset) >>> 16),
(n[i++] = (65280 & r.compositionTimeOffset) >>> 8),
(n[i++] = 255 & r.compositionTimeOffset)
return u(T.trun, n)
}),
(F = function (e, t) {
var i,
n,
r,
a,
s = e.samples || []
for (t += 20 + 8 * s.length, t = U(s, t), (i = new Uint8Array(t.length + 8 * s.length)).set(t), n = t.length, a = 0; a < s.length; a++)
(r = s[a]),
(i[n++] = (4278190080 & r.duration) >>> 24),
(i[n++] = (16711680 & r.duration) >>> 16),
(i[n++] = (65280 & r.duration) >>> 8),
(i[n++] = 255 & r.duration),
(i[n++] = (4278190080 & r.size) >>> 24),
(i[n++] = (16711680 & r.size) >>> 16),
(i[n++] = (65280 & r.size) >>> 8),
(i[n++] = 255 & r.size)
return u(T.trun, i)
}),
(b = function (e, t) {
return ('audio' === e.type ? F : B)(e, t)
})
n = function () {
return u(T.ftyp, S, w, S, E)
}
function W(e, t) {
var i = { size: 0, flags: { isLeading: 0, dependsOn: 1, isDependedOn: 0, hasRedundancy: 0, degradationPriority: 0, isNonSyncSample: 1 } }
return (
(i.dataOffset = t),
(i.compositionTimeOffset = e.pts - e.dts),
(i.duration = e.duration),
(i.size = 4 * e.length),
(i.size += e.byteLength),
e.keyFrame && ((i.flags.dependsOn = 2), (i.flags.isNonSyncSample = 0)),
i
)
}
function G(e) {
for (var t = []; e--; ) t.push(0)
return t
}
function z() {
var e, i
return (
X ||
((e = {
96e3: [ie, [227, 64], G(154), [56]],
88200: [ie, [231], G(170), [56]],
64e3: [ie, [248, 192], G(240), [56]],
48e3: [ie, [255, 192], G(268), [55, 148, 128], G(54), [112]],
44100: [ie, [255, 192], G(268), [55, 163, 128], G(84), [112]],
32e3: [ie, [255, 192], G(268), [55, 234], G(226), [112]],
24e3: [ie, [255, 192], G(268), [55, 255, 128], G(268), [111, 112], G(126), [224]],
16e3: [ie, [255, 192], G(268), [55, 255, 128], G(268), [111, 255], G(269), [223, 108], G(195), [1, 192]],
12e3: [ne, G(268), [3, 127, 248], G(268), [6, 255, 240], G(268), [13, 255, 224], G(268), [27, 253, 128], G(259), [56]],
11025: [ne, G(268), [3, 127, 248], G(268), [6, 255, 240], G(268), [13, 255, 224], G(268), [27, 255, 192], G(268), [55, 175, 128], G(108), [112]],
8e3: [ne, G(268), [3, 121, 16], G(47), [7]],
}),
(i = e),
(X = Object.keys(i).reduce(function (e, t) {
return (
(e[t] = new Uint8Array(
i[t].reduce(function (e, t) {
return e.concat(t)
}, [])
)),
e
)
}, {}))),
X
)
}
var X,
K = function (e) {
return u(T.mdat, e)
},
Y = We,
Q = function (e) {
var t = n(),
i = s(e),
e = new Uint8Array(t.byteLength + i.byteLength)
return e.set(t), e.set(i, t.byteLength), e
},
$ = function (e) {
var t,
i,
n = [],
r = []
for (r.byteLength = 0, r.nalCount = 0, r.duration = 0, t = n.byteLength = 0; t < e.length; t++)
'access_unit_delimiter_rbsp' === (i = e[t]).nalUnitType
? (n.length && ((n.duration = i.dts - n.dts), (r.byteLength += n.byteLength), (r.nalCount += n.length), (r.duration += n.duration), r.push(n)),
((n = [i]).byteLength = i.data.byteLength),
(n.pts = i.pts),
(n.dts = i.dts))
: ('slice_layer_without_partitioning_rbsp_idr' === i.nalUnitType && (n.keyFrame = !0), (n.duration = i.dts - n.dts), (n.byteLength += i.data.byteLength), n.push(i))
return (
r.length && (!n.duration || n.duration <= 0) && (n.duration = r[r.length - 1].duration),
(r.byteLength += n.byteLength),
(r.nalCount += n.length),
(r.duration += n.duration),
r.push(n),
r
)
},
J = function (e) {
var t,
i,
n = [],
r = []
for (
n.byteLength = 0,
n.nalCount = 0,
n.duration = 0,
n.pts = e[0].pts,
n.dts = e[0].dts,
r.byteLength = 0,
r.nalCount = 0,
r.duration = 0,
r.pts = e[0].pts,
r.dts = e[0].dts,
t = 0;
t < e.length;
t++
)
(i = e[t]).keyFrame
? (n.length && (r.push(n), (r.byteLength += n.byteLength), (r.nalCount += n.nalCount), (r.duration += n.duration)),
((n = [i]).nalCount = i.length),
(n.byteLength = i.byteLength),
(n.pts = i.pts),
(n.dts = i.dts),
(n.duration = i.duration))
: ((n.duration += i.duration), (n.nalCount += i.length), (n.byteLength += i.byteLength), n.push(i))
return (
r.length && n.duration <= 0 && (n.duration = r[r.length - 1].duration),
(r.byteLength += n.byteLength),
(r.nalCount += n.nalCount),
(r.duration += n.duration),
r.push(n),
r
)
},
Z = function (e) {
var t
return (
!e[0][0].keyFrame &&
1 < e.length &&
((t = e.shift()), (e.byteLength -= t.byteLength), (e.nalCount -= t.nalCount), (e[0][0].dts = t.dts), (e[0][0].pts = t.pts), (e[0][0].duration += t.duration)),
e
)
},
ee = function (e, t) {
for (var i, n, r, a = t || 0, s = [], o = 0; o < e.length; o++) for (n = e[o], i = 0; i < n.length; i++) (r = n[i]), (a += (r = W(r, a)).size), s.push(r)
return s
},
te = function (e) {
for (var t, i, n, r, a, s = 0, o = e.byteLength, u = e.nalCount, l = new Uint8Array(o + 4 * u), c = new DataView(l.buffer), d = 0; d < e.length; d++)
for (n = e[d], t = 0; t < n.length; t++)
for (r = n[t], i = 0; i < r.length; i++) (a = r[i]), c.setUint32(s, a.data.byteLength), l.set(a.data, (s += 4)), (s += a.data.byteLength)
return l
},
ie = [33, 16, 5, 32, 164, 27],
ne = [33, 65, 108, 84, 1, 2, 4, 8, 168, 2, 4, 8, 17, 191, 252],
re = function (e) {
return 9e4 * e
},
ae = function (e, t) {
return e * t
},
se = function (e) {
return e / 9e4
},
oe = function (e, t) {
return e / t
},
ue = 9e4,
le = re,
ce = se,
de = function (e, t) {
return re(oe(e, t))
},
he = function (e, t) {
return ae(se(e), t)
},
pe = function (e, t, i) {
return se(i ? e : e - t)
},
fe = function (e, t, i, n) {
var r,
a,
s,
o,
u,
l,
c = 0,
d = 0
if (
t.length &&
((r = de(e.baseMediaDecodeTime, e.samplerate)),
(a = Math.ceil(ue / (e.samplerate / 1024))),
i && n && ((s = r - Math.max(i, n)), (d = (c = Math.floor(s / a)) * a)),
!(c < 1 || ue / 2 < d))
) {
for (o = (o = z()[e.samplerate]) || t[0].data, u = 0; u < c; u++) (l = t[0]), t.splice(0, 0, { data: o, dts: l.dts - a, pts: l.pts - a })
return (e.baseMediaDecodeTime -= Math.floor(he(d, e.samplerate))), d
}
},
me = function (e, t, i) {
return t.minSegmentDts >= i
? e
: ((t.minSegmentDts = 1 / 0),
e.filter(function (e) {
return e.dts >= i && ((t.minSegmentDts = Math.min(t.minSegmentDts, e.dts)), (t.minSegmentPts = t.minSegmentDts), !0)
}))
},
ge = function (e) {
for (var t, i = [], n = 0; n < e.length; n++) (t = e[n]), i.push({ size: t.data.byteLength, duration: 1024 })
return i
},
ye = function (e) {
for (
var t,
i = 0,
n = new Uint8Array(
(function (e) {
for (var t = 0, i = 0; i < e.length; i++) t += e[i].data.byteLength
return t
})(e)
),
r = 0;
r < e.length;
r++
)
(t = e[r]), n.set(t.data, i), (i += t.data.byteLength)
return n
},
ve = ue,
_e = function (e) {
delete e.minSegmentDts, delete e.maxSegmentDts, delete e.minSegmentPts, delete e.maxSegmentPts
},
be = function (e, t) {
var i = e.minSegmentDts
return (
t || (i -= e.timelineStartInfo.dts),
(t = e.timelineStartInfo.baseMediaDecodeTime),
(t += i),
(t = Math.max(0, t)),
'audio' === e.type && ((t *= e.samplerate / ve), (t = Math.floor(t))),
t
)
},
Te = function (e, t) {
'number' == typeof t.pts &&
(void 0 === e.timelineStartInfo.pts && (e.timelineStartInfo.pts = t.pts),
void 0 === e.minSegmentPts ? (e.minSegmentPts = t.pts) : (e.minSegmentPts = Math.min(e.minSegmentPts, t.pts)),
void 0 === e.maxSegmentPts ? (e.maxSegmentPts = t.pts) : (e.maxSegmentPts = Math.max(e.maxSegmentPts, t.pts))),
'number' == typeof t.dts &&
(void 0 === e.timelineStartInfo.dts && (e.timelineStartInfo.dts = t.dts),
void 0 === e.minSegmentDts ? (e.minSegmentDts = t.dts) : (e.minSegmentDts = Math.min(e.minSegmentDts, t.dts)),
void 0 === e.maxSegmentDts ? (e.maxSegmentDts = t.dts) : (e.maxSegmentDts = Math.max(e.maxSegmentDts, t.dts)))
},
Se = function (e) {
for (var t = 0, i = { payloadType: -1, payloadSize: 0 }, n = 0, r = 0; t < e.byteLength && 128 !== e[t]; ) {
for (; 255 === e[t]; ) (n += 255), t++
for (n += e[t++]; 255 === e[t]; ) (r += 255), t++
if (((r += e[t++]), !i.payload && 4 === n)) {
if ('GA94' === String.fromCharCode(e[t + 3], e[t + 4], e[t + 5], e[t + 6])) {
;(i.payloadType = n), (i.payloadSize = r), (i.payload = e.subarray(t, t + r))
break
}
i.payload = void 0
}
;(t += r), (r = n = 0)
}
return i
},
we = function (e) {
return 181 !== e.payload[0] ||
49 != ((e.payload[1] << 8) | e.payload[2]) ||
'GA94' !== String.fromCharCode(e.payload[3], e.payload[4], e.payload[5], e.payload[6]) ||
3 !== e.payload[7]
? null
: e.payload.subarray(8, e.payload.length - 1)
},
Ee = function (e, t) {
var i,
n,
r,
a,
s = []
if (!(64 & t[0])) return s
for (n = 31 & t[0], i = 0; i < n; i++) (a = { type: 3 & t[2 + (r = 3 * i)], pts: e }), 4 & t[2 + r] && ((a.ccData = (t[3 + r] << 8) | t[4 + r]), s.push(a))
return s
},
ke = function (e) {
for (var t = e.byteLength, i = [], n = 1; n < t - 2; ) 0 === e[n] && 0 === e[n + 1] && 3 === e[n + 2] ? (i.push(n + 2), (n += 2)) : n++
if (0 === i.length) return e
for (var r = t - i.length, a = new Uint8Array(r), s = 0, n = 0; n < r; s++, n++) s === i[0] && (s++, i.shift()), (a[n] = e[s])
return a
},
Ce = 4,
Ie = function e(t) {
;(t = t || {}),
e.prototype.init.call(this),
(this.parse708captions_ = 'boolean' != typeof t.parse708captions || t.parse708captions),
(this.captionPackets_ = []),
(this.ccStreams_ = [new Ue(0, 0), new Ue(0, 1), new Ue(1, 0), new Ue(1, 1)]),
this.parse708captions_ && (this.cc708Stream_ = new De({ captionServices: t.captionServices })),
this.reset(),
this.ccStreams_.forEach(function (e) {
e.on('data', this.trigger.bind(this, 'data')), e.on('partialdone', this.trigger.bind(this, 'partialdone')), e.on('done', this.trigger.bind(this, 'done'))
}, this),
this.parse708captions_ &&
(this.cc708Stream_.on('data', this.trigger.bind(this, 'data')),
this.cc708Stream_.on('partialdone', this.trigger.bind(this, 'partialdone')),
this.cc708Stream_.on('done', this.trigger.bind(this, 'done')))
}
;((Ie.prototype = new j()).push = function (e) {
var t, i
if ('sei_rbsp' === e.nalUnitType && (t = Se(e.escapedRBSP)).payload && t.payloadType === Ce && (i = we(t)))
if (e.dts < this.latestDts_) this.ignoreNextEqualDts_ = !0
else {
if (e.dts === this.latestDts_ && this.ignoreNextEqualDts_) return this.numSameDts_--, void (this.numSameDts_ || (this.ignoreNextEqualDts_ = !1))
;(i = Ee(e.pts, i)),
(this.captionPackets_ = this.captionPackets_.concat(i)),
this.latestDts_ !== e.dts && (this.numSameDts_ = 0),
this.numSameDts_++,
(this.latestDts_ = e.dts)
}
}),
(Ie.prototype.flushCCStreams = function (t) {
this.ccStreams_.forEach(function (e) {
return 'flush' === t ? e.flush() : e.partialFlush()
}, this)
}),
(Ie.prototype.flushStream = function (e) {
this.captionPackets_.length &&
(this.captionPackets_.forEach(function (e, t) {
e.presortIndex = t
}),
this.captionPackets_.sort(function (e, t) {
return e.pts === t.pts ? e.presortIndex - t.presortIndex : e.pts - t.pts
}),
this.captionPackets_.forEach(function (e) {
e.type < 2 ? this.dispatchCea608Packet(e) : this.dispatchCea708Packet(e)
}, this),
(this.captionPackets_.length = 0)),
this.flushCCStreams(e)
}),
(Ie.prototype.flush = function () {
return this.flushStream('flush')
}),
(Ie.prototype.partialFlush = function () {
return this.flushStream('partialFlush')
}),
(Ie.prototype.reset = function () {
;(this.latestDts_ = null),
(this.ignoreNextEqualDts_ = !1),
(this.numSameDts_ = 0),
(this.activeCea608Channel_ = [null, null]),
this.ccStreams_.forEach(function (e) {
e.reset()
})
}),
(Ie.prototype.dispatchCea608Packet = function (e) {
this.setsTextOrXDSActive(e)
? (this.activeCea608Channel_[e.type] = null)
: this.setsChannel1Active(e)
? (this.activeCea608Channel_[e.type] = 0)
: this.setsChannel2Active(e) && (this.activeCea608Channel_[e.type] = 1),
null !== this.activeCea608Channel_[e.type] && this.ccStreams_[(e.type << 1) + this.activeCea608Channel_[e.type]].push(e)
}),
(Ie.prototype.setsChannel1Active = function (e) {
return 4096 == (30720 & e.ccData)
}),
(Ie.prototype.setsChannel2Active = function (e) {
return 6144 == (30720 & e.ccData)
}),
(Ie.prototype.setsTextOrXDSActive = function (e) {
return 256 == (28928 & e.ccData) || 4138 == (30974 & e.ccData) || 6186 == (30974 & e.ccData)
}),
(Ie.prototype.dispatchCea708Packet = function (e) {
this.parse708captions_ && this.cc708Stream_.push(e)
})
function xe(e) {
return (32 <= e && e <= 127) || (160 <= e && e <= 255)
}
function Ae(e) {
;(this.windowNum = e), this.reset()
}
var Pe = {
127: 9834,
4128: 32,
4129: 160,
4133: 8230,
4138: 352,
4140: 338,
4144: 9608,
4145: 8216,
4146: 8217,
4147: 8220,
4148: 8221,
4149: 8226,
4153: 8482,
4154: 353,
4156: 339,
4157: 8480,
4159: 376,
4214: 8539,
4215: 8540,
4216: 8541,
4217: 8542,
4218: 9168,
4219: 9124,
4220: 9123,
4221: 9135,
4222: 9126,
4223: 9121,
4256: 12600,
}
;(Ae.prototype.reset = function () {
this.clearText(),
(this.pendingNewLine = !1),
(this.winAttr = {}),
(this.penAttr = {}),
(this.penLoc = {}),
(this.penColor = {}),
(this.visible = 0),
(this.rowLock = 0),
(this.columnLock = 0),
(this.priority = 0),
(this.relativePositioning = 0),
(this.anchorVertical = 0),
(this.anchorHorizontal = 0),
(this.anchorPoint = 0),
(this.rowCount = 1),
(this.virtualRowCount = this.rowCount + 1),
(this.columnCount = 41),
(this.windowStyle = 0),
(this.penStyle = 0)
}),
(Ae.prototype.getText = function () {
return this.rows.join('\n')
}),
(Ae.prototype.clearText = function () {
;(this.rows = ['']), (this.rowIdx = 0)
}),
(Ae.prototype.newLine = function (e) {
for (
this.rows.length >= this.virtualRowCount && 'function' == typeof this.beforeRowOverflow && this.beforeRowOverflow(e),
0 < this.rows.length && (this.rows.push(''), this.rowIdx++);
this.rows.length > this.virtualRowCount;
)
this.rows.shift(), this.rowIdx--
}),
(Ae.prototype.isEmpty = function () {
return 0 === this.rows.length || (1 === this.rows.length && '' === this.rows[0])
}),
(Ae.prototype.addText = function (e) {
this.rows[this.rowIdx] += e
}),
(Ae.prototype.backspace = function () {
var e
this.isEmpty() || ((e = this.rows[this.rowIdx]), (this.rows[this.rowIdx] = e.substr(0, e.length - 1)))
})
function Le(e, t, i) {
;(this.serviceNum = e), (this.text = ''), (this.currentWindow = new Ae(-1)), (this.windows = []), (this.stream = i), 'string' == typeof t && this.createTextDecoder(t)
}
;(Le.prototype.init = function (e, t) {
this.startPts = e
for (var i = 0; i < 8; i++) (this.windows[i] = new Ae(i)), 'function' == typeof t && (this.windows[i].beforeRowOverflow = t)
}),
(Le.prototype.setCurrentWindow = function (e) {
this.currentWindow = this.windows[e]
}),
(Le.prototype.createTextDecoder = function (t) {
if ('undefined' == typeof TextDecoder) this.stream.trigger('log', { level: 'warn', message: 'The `encoding` option is unsupported without TextDecoder support' })
else
try {
this.textDecoder_ = new TextDecoder(t)
} catch (e) {
this.stream.trigger('log', { level: 'warn', message: 'TextDecoder could not be created with ' + t + ' encoding. ' + e })
}
})
var De = function e(t) {
;(t = t || {}), e.prototype.init.call(this)
var i,
n = this,
r = t.captionServices || {},
a = {}
Object.keys(r).forEach(function (e) {
;(i = r[e]), /^SERVICE/.test(e) && (a[e] = i.encoding)
}),
(this.serviceEncodings = a),
(this.current708Packet = null),
(this.services = {}),
(this.push = function (e) {
;(3 === e.type || null === n.current708Packet) && n.new708Packet(), n.add708Bytes(e)
})
}
;(De.prototype = new j()),
(De.prototype.new708Packet = function () {
null !== this.current708Packet && this.push708Packet(), (this.current708Packet = { data: [], ptsVals: [] })
}),
(De.prototype.add708Bytes = function (e) {
var t = e.ccData,
i = t >>> 8,
t = 255 & t
this.current708Packet.ptsVals.push(e.pts), this.current708Packet.data.push(i), this.current708Packet.data.push(t)
}),
(De.prototype.push708Packet = function () {
var e,
t = this.current708Packet,
i = t.data,
n = null,
r = 0,
a = i[r++]
for (t.seq = a >> 6, t.sizeCode = 63 & a; r < i.length; r++)
(e = 31 & (a = i[r++])), 7 === (n = a >> 5) && 0 < e && (n = i[r++]), this.pushServiceBlock(n, r, e), 0 < e && (r += e - 1)
}),
(De.prototype.pushServiceBlock = function (e, t, i) {
for (var n, r = t, a = this.current708Packet.data, s = (s = this.services[e]) || this.initService(e, r); r < t + i && r < a.length; r++)
(n = a[r]),
xe(n)
? (r = this.handleText(r, s))
: 24 === n
? (r = this.multiByteCharacter(r, s))
: 16 === n
? (r = this.extendedCommands(r, s))
: 128 <= n && n <= 135
? (r = this.setCurrentWindow(r, s))
: 152 <= n && n <= 159
? (r = this.defineWindow(r, s))
: 136 === n
? (r = this.clearWindows(r, s))
: 140 === n
? (r = this.deleteWindows(r, s))
: 137 === n
? (r = this.displayWindows(r, s))
: 138 === n
? (r = this.hideWindows(r, s))
: 139 === n
? (r = this.toggleWindows(r, s))
: 151 === n
? (r = this.setWindowAttributes(r, s))
: 144 === n
? (r = this.setPenAttributes(r, s))
: 145 === n
? (r = this.setPenColor(r, s))
: 146 === n
? (r = this.setPenLocation(r, s))
: 143 === n
? (s = this.reset(r, s))
: 8 === n
? s.currentWindow.backspace()
: 12 === n
? s.currentWindow.clearText()
: 13 === n
? (s.currentWindow.pendingNewLine = !0)
: 14 === n
? s.currentWindow.clearText()
: 141 === n && r++
}),
(De.prototype.extendedCommands = function (e, t) {
var i = this.current708Packet.data[++e]
return (e = xe(i) ? this.handleText(e, t, { isExtended: !0 }) : e)
}),
(De.prototype.getPts = function (e) {
return this.current708Packet.ptsVals[Math.floor(e / 2)]
}),
(De.prototype.initService = function (t, e) {
var i,
n = 'SERVICE' + t,
r = this
return (
n in this.serviceEncodings && (i = this.serviceEncodings[n]),
(this.services[t] = new Le(t, i, r)),
this.services[t].init(this.getPts(e), function (e) {
r.flushDisplayed(e, r.services[t])
}),
this.services[t]
)
}),
(De.prototype.handleText = function (e, t, i) {
var n,
r = i && i.isExtended,
a = i && i.isMultiByte,
s = this.current708Packet.data,
o = r ? 4096 : 0,
u = s[e],
i = s[e + 1],
s = t.currentWindow,
l =
t.textDecoder_ && !r
? (a ? ((n = [u, i]), e++) : (n = [u]), t.textDecoder_.decode(new Uint8Array(n)))
: ((l = Pe[(u = o | u)] || u), 4096 & u && u === l ? '' : String.fromCharCode(l))
return s.pendingNewLine && !s.isEmpty() && s.newLine(this.getPts(e)), (s.pendingNewLine = !1), s.addText(l), e
}),
(De.prototype.multiByteCharacter = function (e, t) {
var i = this.current708Packet.data,
n = i[e + 1],
i = i[e + 2]
return (e = xe(n) && xe(i) ? this.handleText(++e, t, { isMultiByte: !0 }) : e)
}),
(De.prototype.setCurrentWindow = function (e, t) {
var i = this.current708Packet.data[e]
return t.setCurrentWindow(7 & i), e
}),
(De.prototype.defineWindow = function (e, t) {
var i = this.current708Packet.data,
n = i[e]
t.setCurrentWindow(7 & n)
;(t = t.currentWindow), (n = i[++e])
return (
(t.visible = (32 & n) >> 5),
(t.rowLock = (16 & n) >> 4),
(t.columnLock = (8 & n) >> 3),
(t.priority = 7 & n),
(n = i[++e]),
(t.relativePositioning = (128 & n) >> 7),
(t.anchorVertical = 127 & n),
(n = i[++e]),
(t.anchorHorizontal = n),
(n = i[++e]),
(t.anchorPoint = (240 & n) >> 4),
(t.rowCount = 15 & n),
(n = i[++e]),
(t.columnCount = 63 & n),
(n = i[++e]),
(t.windowStyle = (56 & n) >> 3),
(t.penStyle = 7 & n),
(t.virtualRowCount = t.rowCount + 1),
e
)
}),
(De.prototype.setWindowAttributes = function (e, t) {
var i = this.current708Packet.data,
n = i[e],
t = t.currentWindow.winAttr,
n = i[++e]
return (
(t.fillOpacity = (192 & n) >> 6),
(t.fillRed = (48 & n) >> 4),
(t.fillGreen = (12 & n) >> 2),
(t.fillBlue = 3 & n),
(n = i[++e]),
(t.borderType = (192 & n) >> 6),
(t.borderRed = (48 & n) >> 4),
(t.borderGreen = (12 & n) >> 2),
(t.borderBlue = 3 & n),
(n = i[++e]),
(t.borderType += (128 & n) >> 5),
(t.wordWrap = (64 & n) >> 6),
(t.printDirection = (48 & n) >> 4),
(t.scrollDirection = (12 & n) >> 2),
(t.justify = 3 & n),
(n = i[++e]),
(t.effectSpeed = (240 & n) >> 4),
(t.effectDirection = (12 & n) >> 2),
(t.displayEffect = 3 & n),
e
)
}),
(De.prototype.flushDisplayed = function (e, t) {
for (var i = [], n = 0; n < 8; n++) t.windows[n].visible && !t.windows[n].isEmpty() && i.push(t.windows[n].getText())
;(t.endPts = e), (t.text = i.join('\n\n')), this.pushCaption(t), (t.startPts = e)
}),
(De.prototype.pushCaption = function (e) {
'' !== e.text && (this.trigger('data', { startPts: e.startPts, endPts: e.endPts, text: e.text, stream: 'cc708_' + e.serviceNum }), (e.text = ''), (e.startPts = e.endPts))
}),
(De.prototype.displayWindows = function (e, t) {
var i = this.current708Packet.data[++e],
n = this.getPts(e)
this.flushDisplayed(n, t)
for (var r = 0; r < 8; r++) i & (1 << r) && (t.windows[r].visible = 1)
return e
}),
(De.prototype.hideWindows = function (e, t) {
var i = this.current708Packet.data[++e],
n = this.getPts(e)
this.flushDisplayed(n, t)
for (var r = 0; r < 8; r++) i & (1 << r) && (t.windows[r].visible = 0)
return e
}),
(De.prototype.toggleWindows = function (e, t) {
var i = this.current708Packet.data[++e],
n = this.getPts(e)
this.flushDisplayed(n, t)
for (var r = 0; r < 8; r++) i & (1 << r) && (t.windows[r].visible ^= 1)
return e
}),
(De.prototype.clearWindows = function (e, t) {
var i = this.current708Packet.data[++e],
n = this.getPts(e)
this.flushDisplayed(n, t)
for (var r = 0; r < 8; r++) i & (1 << r) && t.windows[r].clearText()
return e
}),
(De.prototype.deleteWindows = function (e, t) {
var i = this.current708Packet.data[++e],
n = this.getPts(e)
this.flushDisplayed(n, t)
for (var r = 0; r < 8; r++) i & (1 << r) && t.windows[r].reset()
return e
}),
(De.prototype.setPenAttributes = function (e, t) {
var i = this.current708Packet.data,
n = i[e],
t = t.currentWindow.penAttr,
n = i[++e]
return (
(t.textTag = (240 & n) >> 4),
(t.offset = (12 & n) >> 2),
(t.penSize = 3 & n),
(n = i[++e]),
(t.italics = (128 & n) >> 7),
(t.underline = (64 & n) >> 6),
(t.edgeType = (56 & n) >> 3),
(t.fontStyle = 7 & n),
e
)
}),
(De.prototype.setPenColor = function (e, t) {
var i = this.current708Packet.data,
n = i[e],
t = t.currentWindow.penColor,
n = i[++e]
return (
(t.fgOpacity = (192 & n) >> 6),
(t.fgRed = (48 & n) >> 4),
(t.fgGreen = (12 & n) >> 2),
(t.fgBlue = 3 & n),
(n = i[++e]),
(t.bgOpacity = (192 & n) >> 6),
(t.bgRed = (48 & n) >> 4),
(t.bgGreen = (12 & n) >> 2),
(t.bgBlue = 3 & n),
(n = i[++e]),
(t.edgeRed = (48 & n) >> 4),
(t.edgeGreen = (12 & n) >> 2),
(t.edgeBlue = 3 & n),
e
)
}),
(De.prototype.setPenLocation = function (e, t) {
var i = this.current708Packet.data,
n = i[e],
r = t.currentWindow.penLoc
return (t.currentWindow.pendingNewLine = !0), (n = i[++e]), (r.row = 15 & n), (n = i[++e]), (r.column = 63 & n), e
}),
(De.prototype.reset = function (e, t) {
var i = this.getPts(e)
return this.flushDisplayed(i, t), this.initService(t.serviceNum, e)
})
function Oe(e) {
return null === e ? '' : ((e = Re[e] || e), String.fromCharCode(e))
}
function Me() {
for (var e = [], t = 15; t--; ) e.push('')
return e
}
var Re = {
42: 225,
92: 233,
94: 237,
95: 243,
96: 250,
123: 231,
124: 247,
125: 209,
126: 241,
127: 9608,
304: 174,
305: 176,
306: 189,
307: 191,
308: 8482,
309: 162,
310: 163,
311: 9834,
312: 224,
313: 160,
314: 232,
315: 226,
316: 234,
317: 238,
318: 244,
319: 251,
544: 193,
545: 201,
546: 211,
547: 218,
548: 220,
549: 252,
550: 8216,
551: 161,
552: 42,
553: 39,
554: 8212,
555: 169,
556: 8480,
557: 8226,
558: 8220,
559: 8221,
560: 192,
561: 194,
562: 199,
563: 200,
564: 202,
565: 203,
566: 235,
567: 206,
568: 207,
569: 239,
570: 212,
571: 217,
572: 249,
573: 219,
574: 171,
575: 187,
800: 195,
801: 227,
802: 205,
803: 204,
804: 236,
805: 210,
806: 242,
807: 213,
808: 245,
809: 123,
810: 125,
811: 92,
812: 94,
813: 95,
814: 124,
815: 126,
816: 196,
817: 228,
818: 214,
819: 246,
820: 223,
821: 165,
822: 164,
823: 9474,
824: 197,
825: 229,
826: 216,
827: 248,
828: 9484,
829: 9488,
830: 9492,
831: 9496,
},
Ne = [4352, 4384, 4608, 4640, 5376, 5408, 5632, 5664, 5888, 5920, 4096, 4864, 4896, 5120, 5152],
Ue = function e(t, i) {
e.prototype.init.call(this),
(this.field_ = t || 0),
(this.dataChannel_ = i || 0),
(this.name_ = 'CC' + (1 + ((this.field_ << 1) | this.dataChannel_))),
this.setConstants(),
this.reset(),
(this.push = function (e) {
var t,
i,
n,
r,
a = 32639 & e.ccData
a !== this.lastControlCode_
? (4096 == (61440 & a) ? (this.lastControlCode_ = a) : a !== this.PADDING_ && (this.lastControlCode_ = null),
(t = a >>> 8),
(i = 255 & a),
a === this.PADDING_ ||
(a === this.RESUME_CAPTION_LOADING_
? (this.mode_ = 'popOn')
: a === this.END_OF_CAPTION_
? ((this.mode_ = 'popOn'),
this.clearFormatting(e.pts),
this.flushDisplayed(e.pts),
(r = this.displayed_),
(this.displayed_ = this.nonDisplayed_),
(this.nonDisplayed_ = r),
(this.startPts_ = e.pts))
: a === this.ROLL_UP_2_ROWS_
? ((this.rollUpRows_ = 2), this.setRollUp(e.pts))
: a === this.ROLL_UP_3_ROWS_
? ((this.rollUpRows_ = 3), this.setRollUp(e.pts))
: a === this.ROLL_UP_4_ROWS_
? ((this.rollUpRows_ = 4), this.setRollUp(e.pts))
: a === this.CARRIAGE_RETURN_
? (this.clearFormatting(e.pts), this.flushDisplayed(e.pts), this.shiftRowsUp_(), (this.startPts_ = e.pts))
: a === this.BACKSPACE_
? 'popOn' === this.mode_
? (this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1))
: (this.displayed_[this.row_] = this.displayed_[this.row_].slice(0, -1))
: a === this.ERASE_DISPLAYED_MEMORY_
? (this.flushDisplayed(e.pts), (this.displayed_ = Me()))
: a === this.ERASE_NON_DISPLAYED_MEMORY_
? (this.nonDisplayed_ = Me())
: a === this.RESUME_DIRECT_CAPTIONING_
? ('paintOn' !== this.mode_ && (this.flushDisplayed(e.pts), (this.displayed_ = Me())), (this.mode_ = 'paintOn'), (this.startPts_ = e.pts))
: this.isSpecialCharacter(t, i)
? ((n = Oe((t = (3 & t) << 8) | i)), this[this.mode_](e.pts, n), this.column_++)
: this.isExtCharacter(t, i)
? ('popOn' === this.mode_
? (this.nonDisplayed_[this.row_] = this.nonDisplayed_[this.row_].slice(0, -1))
: (this.displayed_[this.row_] = this.displayed_[this.row_].slice(0, -1)),
(n = Oe((t = (3 & t) << 8) | i)),
this[this.mode_](e.pts, n),
this.column_++)
: this.isMidRowCode(t, i)
? (this.clearFormatting(e.pts),
this[this.mode_](e.pts, ' '),
this.column_++,
14 == (14 & i) && this.addFormatting(e.pts, ['i']),
1 == (1 & i) && this.addFormatting(e.pts, ['u']))
: this.isOffsetControlCode(t, i)
? (this.column_ += 3 & i)
: this.isPAC(t, i)
? ((r = Ne.indexOf(7968 & a)),
'rollUp' === this.mode_ && (r - this.rollUpRows_ + 1 < 0 && (r = this.rollUpRows_ - 1), this.setRollUp(e.pts, r)),
r !== this.row_ && (this.clearFormatting(e.pts), (this.row_ = r)),
1 & i && -1 === this.formatting_.indexOf('u') && this.addFormatting(e.pts, ['u']),
16 == (16 & a) && (this.column_ = 4 * ((14 & a) >> 1)),
this.isColorPAC(i) && 14 == (14 & i) && this.addFormatting(e.pts, ['i']))
: this.isNormalChar(t) && (0 === i && (i = null), (n = Oe(t)), (n += Oe(i)), this[this.mode_](e.pts, n), (this.column_ += n.length))))
: (this.lastControlCode_ = null)
})
}
;(Ue.prototype = new j()),
(Ue.prototype.flushDisplayed = function (e) {
var t = this.displayed_
.map(function (e, t) {
try {
return e.trim()
} catch (e) {
return this.trigger('log', { level: 'warn', message: 'Skipping a malformed 608 caption at index ' + t + '.' }), ''
}
}, this)
.join('\n')
.replace(/^\n+|\n+$/g, '')
t.length && this.trigger('data', { startPts: this.startPts_, endPts: e, text: t, stream: this.name_ })
}),
(Ue.prototype.reset = function () {
;(this.mode_ = 'popOn'),
(this.topRow_ = 0),
(this.startPts_ = 0),
(this.displayed_ = Me()),
(this.nonDisplayed_ = Me()),
(this.lastControlCode_ = null),
(this.column_ = 0),
(this.row_ = 14),
(this.rollUpRows_ = 2),
(this.formatting_ = [])
}),
(Ue.prototype.setConstants = function () {
0 === this.dataChannel_
? ((this.BASE_ = 16), (this.EXT_ = 17), (this.CONTROL_ = (20 | this.field_) << 8), (this.OFFSET_ = 23))
: 1 === this.dataChannel_ && ((this.BASE_ = 24), (this.EXT_ = 25), (this.CONTROL_ = (28 | this.field_) << 8), (this.OFFSET_ = 31)),
(this.PADDING_ = 0),
(this.RESUME_CAPTION_LOADING_ = 32 | this.CONTROL_),
(this.END_OF_CAPTION_ = 47 | this.CONTROL_),
(this.ROLL_UP_2_ROWS_ = 37 | this.CONTROL_),
(this.ROLL_UP_3_ROWS_ = 38 | this.CONTROL_),
(this.ROLL_UP_4_ROWS_ = 39 | this.CONTROL_),
(this.CARRIAGE_RETURN_ = 45 | this.CONTROL_),
(this.RESUME_DIRECT_CAPTIONING_ = 41 | this.CONTROL_),
(this.BACKSPACE_ = 33 | this.CONTROL_),
(this.ERASE_DISPLAYED_MEMORY_ = 44 | this.CONTROL_),
(this.ERASE_NON_DISPLAYED_MEMORY_ = 46 | this.CONTROL_)
}),
(Ue.prototype.isSpecialCharacter = function (e, t) {
return e === this.EXT_ && 48 <= t && t <= 63
}),
(Ue.prototype.isExtCharacter = function (e, t) {
return (e === this.EXT_ + 1 || e === this.EXT_ + 2) && 32 <= t && t <= 63
}),
(Ue.prototype.isMidRowCode = function (e, t) {
return e === this.EXT_ && 32 <= t && t <= 47
}),
(Ue.prototype.isOffsetControlCode = function (e, t) {
return e === this.OFFSET_ && 33 <= t && t <= 35
}),
(Ue.prototype.isPAC = function (e, t) {
return e >= this.BASE_ && e < this.BASE_ + 8 && 64 <= t && t <= 127
}),
(Ue.prototype.isColorPAC = function (e) {
return (64 <= e && e <= 79) || (96 <= e && e <= 127)
}),
(Ue.prototype.isNormalChar = function (e) {
return 32 <= e && e <= 127
}),
(Ue.prototype.setRollUp = function (e, t) {
if (
('rollUp' !== this.mode_ && ((this.row_ = 14), (this.mode_ = 'rollUp'), this.flushDisplayed(e), (this.nonDisplayed_ = Me()), (this.displayed_ = Me())),
void 0 !== t && t !== this.row_)
)
for (var i = 0; i < this.rollUpRows_; i++) (this.displayed_[t - i] = this.displayed_[this.row_ - i]), (this.displayed_[this.row_ - i] = '')
void 0 === t && (t = this.row_), (this.topRow_ = t - this.rollUpRows_ + 1)
}),
(Ue.prototype.addFormatting = function (e, t) {
this.formatting_ = this.formatting_.concat(t)
t = t.reduce(function (e, t) {
return e + '<' + t + '>'
}, '')
this[this.mode_](e, t)
}),
(Ue.prototype.clearFormatting = function (e) {
var t
this.formatting_.length &&
((t = this.formatting_.reverse().reduce(function (e, t) {
return e + '' + t + '>'
}, '')),
(this.formatting_ = []),
this[this.mode_](e, t))
}),
(Ue.prototype.popOn = function (e, t) {
var i = this.nonDisplayed_[this.row_]
this.nonDisplayed_[this.row_] = i += t
}),
(Ue.prototype.rollUp = function (e, t) {
var i = this.displayed_[this.row_]
this.displayed_[this.row_] = i += t
}),
(Ue.prototype.shiftRowsUp_ = function () {
for (var e = 0; e < this.topRow_; e++) this.displayed_[e] = ''
for (e = this.row_ + 1; e < 15; e++) this.displayed_[e] = ''
for (e = this.topRow_; e < this.row_; e++) this.displayed_[e] = this.displayed_[e + 1]
this.displayed_[this.row_] = ''
}),
(Ue.prototype.paintOn = function (e, t) {
var i = this.displayed_[this.row_]
this.displayed_[this.row_] = i += t
})
function Be(e, t) {
var i = 1
for (t < e && (i = -1); 4294967296 < Math.abs(t - e); ) e += 8589934592 * i
return e
}
var Fe = { CaptionStream: Ie, Cea608Stream: Ue, Cea708Stream: De },
je = { H264_STREAM_TYPE: 27, ADTS_STREAM_TYPE: 15, METADATA_STREAM_TYPE: 21 },
e = function e(t) {
var i, n
e.prototype.init.call(this),
(this.type_ = t || 'shared'),
(this.push = function (e) {
;('shared' !== this.type_ && e.type !== this.type_) ||
(void 0 === n && (n = e.dts), (e.dts = Be(e.dts, n)), (e.pts = Be(e.pts, n)), (i = e.dts), this.trigger('data', e))
}),
(this.flush = function () {
;(n = i), this.trigger('done')
}),
(this.endTimeline = function () {
this.flush(), this.trigger('endedtimeline')
}),
(this.discontinuity = function () {
i = n = void 0
}),
(this.reset = function () {
this.discontinuity(), this.trigger('reset')
})
}
e.prototype = new j()
function He(e, t, i) {
for (var n = '', r = t; r < i; r++) n += '%' + ('00' + e[r].toString(16)).slice(-2)
return n
}
function qe(e, t, i) {
return decodeURIComponent(He(e, t, i))
}
function Ve(e) {
return (e[0] << 21) | (e[1] << 14) | (e[2] << 7) | e[3]
}
var We = e,
Ie = Be,
Ge = {
TXXX: function (e) {
var t
if (3 === e.data[0]) {
for (t = 1; t < e.data.length; t++)
if (0 === e.data[t]) {
;(e.description = qe(e.data, 1, t)), (e.value = qe(e.data, t + 1, e.data.length).replace(/\0*$/, ''))
break
}
e.data = e.value
}
},
WXXX: function (e) {
var t
if (3 === e.data[0])
for (t = 1; t < e.data.length; t++)
if (0 === e.data[t]) {
;(e.description = qe(e.data, 1, t)), (e.url = qe(e.data, t + 1, e.data.length))
break
}
},
PRIV: function (e) {
for (var t, i = 0; i < e.data.length; i++)
if (0 === e.data[i]) {
e.owner = ((t = e.data), unescape(He(t, 0, i)))
break
}
;(e.privateData = e.data.subarray(i + 1)), (e.data = e.privateData)
},
},
ze = function (e) {
var t,
i = { descriptor: e && e.descriptor },
u = 0,
l = [],
c = 0
if ((ze.prototype.init.call(this), (this.dispatchType = je.METADATA_STREAM_TYPE.toString(16)), i.descriptor))
for (t = 0; t < i.descriptor.length; t++) this.dispatchType += ('00' + i.descriptor[t].toString(16)).slice(-2)
this.push = function (e) {
var t, i, n, r, a, s, o
if ('timed-metadata' === e.type)
if (
(e.dataAlignmentIndicator && ((c = 0), (l.length = 0)),
0 === l.length && (e.data.length < 10 || e.data[0] !== 'I'.charCodeAt(0) || e.data[1] !== 'D'.charCodeAt(0) || e.data[2] !== '3'.charCodeAt(0)))
)
this.trigger('log', { level: 'warn', message: 'Skipping unrecognized metadata packet' })
else if ((l.push(e), (c += e.data.byteLength), 1 === l.length && ((u = Ve(e.data.subarray(6, 10))), (u += 10)), !(c < u))) {
for (t = { data: new Uint8Array(u), frames: [], pts: l[0].pts, dts: l[0].dts }, r = 0; r < u; )
t.data.set(l[0].data.subarray(0, u - r), r), (r += l[0].data.byteLength), (c -= l[0].data.byteLength), l.shift()
;(i = 10), 64 & t.data[5] && ((i += 4), (i += Ve(t.data.subarray(10, 14))), (u -= Ve(t.data.subarray(16, 20))))
do {
if ((n = Ve(t.data.subarray(i + 4, i + 8))) < 1)
return void this.trigger('log', { level: 'warn', message: 'Malformed ID3 frame encountered. Skipping metadata parsing.' })
} while (
(((o = { id: String.fromCharCode(t.data[i], t.data[i + 1], t.data[i + 2], t.data[i + 3]), data: t.data.subarray(i + 10, i + n + 10) }).key = o.id),
Ge[o.id] &&
(Ge[o.id](o),
'com.apple.streaming.transportStreamTimestamp' === o.owner &&
((s = ((1 & (a = o.data)[3]) << 30) | (a[4] << 22) | (a[5] << 14) | (a[6] << 6) | (a[7] >>> 2)),
(s *= 4),
(s += 3 & a[7]),
(o.timeStamp = s),
void 0 === t.pts && void 0 === t.dts && ((t.pts = o.timeStamp), (t.dts = o.timeStamp)),
this.trigger('timestamp', o))),
t.frames.push(o),
(i += 10),
(i += n) < u)
)
this.trigger('data', t)
}
}
}
ze.prototype = new j()
var Xe,
Ke,
e = ze,
We = We,
Ye = function () {
var r = new Uint8Array(188),
a = 0
Ye.prototype.init.call(this),
(this.push = function (e) {
var t,
i = 0,
n = 188
for (a ? ((t = new Uint8Array(e.byteLength + a)).set(r.subarray(0, a)), t.set(e, a), (a = 0)) : (t = e); n < t.byteLength; )
71 !== t[i] || 71 !== t[n] ? (i++, n++) : (this.trigger('data', t.subarray(i, n)), (i += 188), (n += 188))
i < t.byteLength && (r.set(t.subarray(i), 0), (a = t.byteLength - i))
}),
(this.flush = function () {
188 === a && 71 === r[0] && (this.trigger('data', r), (a = 0)), this.trigger('done')
}),
(this.endTimeline = function () {
this.flush(), this.trigger('endedtimeline')
}),
(this.reset = function () {
;(a = 0), this.trigger('reset')
})
}
;(Ye.prototype = new j()),
((Xe = function () {
var n, r, a, s
Xe.prototype.init.call(this),
((s = this).packetsWaitingForPmt = []),
(this.programMapTable = void 0),
(n = function (e, t) {
var i = 0
t.payloadUnitStartIndicator && (i += e[i] + 1), ('pat' === t.type ? r : a)(e.subarray(i), t)
}),
(r = function (e, t) {
;(t.section_number = e[7]), (t.last_section_number = e[8]), (s.pmtPid = ((31 & e[10]) << 8) | e[11]), (t.pmtPid = s.pmtPid)
}),
(a = function (e, t) {
var i, n
if (1 & e[5]) {
for (
s.programMapTable = { video: null, audio: null, 'timed-metadata': {} }, i = 3 + (((15 & e[1]) << 8) | e[2]) - 4, n = 12 + (((15 & e[10]) << 8) | e[11]);
n < i;
) {
var r = e[n],
a = ((31 & e[n + 1]) << 8) | e[n + 2]
r === je.H264_STREAM_TYPE && null === s.programMapTable.video
? (s.programMapTable.video = a)
: r === je.ADTS_STREAM_TYPE && null === s.programMapTable.audio
? (s.programMapTable.audio = a)
: r === je.METADATA_STREAM_TYPE && (s.programMapTable['timed-metadata'][a] = r),
(n += 5 + (((15 & e[n + 3]) << 8) | e[n + 4]))
}
t.programMapTable = s.programMapTable
}
}),
(this.push = function (e) {
var t = {},
i = 4
if (((t.payloadUnitStartIndicator = !!(64 & e[1])), (t.pid = 31 & e[1]), (t.pid <<= 8), (t.pid |= e[2]), 1 < (48 & e[3]) >>> 4 && (i += e[i] + 1), 0 === t.pid))
(t.type = 'pat'), n(e.subarray(i), t), this.trigger('data', t)
else if (t.pid === this.pmtPid)
for (t.type = 'pmt', n(e.subarray(i), t), this.trigger('data', t); this.packetsWaitingForPmt.length; )
this.processPes_.apply(this, this.packetsWaitingForPmt.shift())
else void 0 === this.programMapTable ? this.packetsWaitingForPmt.push([e, i, t]) : this.processPes_(e, i, t)
}),
(this.processPes_ = function (e, t, i) {
i.pid === this.programMapTable.video
? (i.streamType = je.H264_STREAM_TYPE)
: i.pid === this.programMapTable.audio
? (i.streamType = je.ADTS_STREAM_TYPE)
: (i.streamType = this.programMapTable['timed-metadata'][i.pid]),
(i.type = 'pes'),
(i.data = e.subarray(t)),
this.trigger('data', i)
})
}).prototype = new j()),
(Xe.STREAM_TYPES = { h264: 27, adts: 15 }),
((Ke = function () {
function n(e, t, i) {
var n,
r,
a,
s,
o = new Uint8Array(e.size),
u = { type: t },
l = 0,
c = 0
if (e.data.length && !(e.size < 9)) {
for (u.trackId = e.data[0].pid, l = 0; l < e.data.length; l++) (n = e.data[l]), o.set(n.data, c), (c += n.data.byteLength)
;(a = u),
(s = ((r = o)[0] << 16) | (r[1] << 8) | r[2]),
(a.data = new Uint8Array()),
1 == s &&
((a.packetLength = 6 + ((r[4] << 8) | r[5])),
(a.dataAlignmentIndicator = 0 != (4 & r[6])),
192 & (s = r[7]) &&
((a.pts = ((14 & r[9]) << 27) | ((255 & r[10]) << 20) | ((254 & r[11]) << 12) | ((255 & r[12]) << 5) | ((254 & r[13]) >>> 3)),
(a.pts *= 4),
(a.pts += (6 & r[13]) >>> 1),
(a.dts = a.pts),
64 & s &&
((a.dts = ((14 & r[14]) << 27) | ((255 & r[15]) << 20) | ((254 & r[16]) << 12) | ((255 & r[17]) << 5) | ((254 & r[18]) >>> 3)),
(a.dts *= 4),
(a.dts += (6 & r[18]) >>> 1))),
(a.data = r.subarray(9 + r[8]))),
(t = 'video' === t || u.packetLength <= e.size),
(i || t) && ((e.size = 0), (e.data.length = 0)),
t && d.trigger('data', u)
}
}
var t,
d = this,
r = !1,
a = { data: [], size: 0 },
s = { data: [], size: 0 },
o = { data: [], size: 0 }
Ke.prototype.init.call(this),
(this.push = function (i) {
;({
pat: function () {},
pes: function () {
var e, t
switch (i.streamType) {
case je.H264_STREAM_TYPE:
;(e = a), (t = 'video')
break
case je.ADTS_STREAM_TYPE:
;(e = s), (t = 'audio')
break
case je.METADATA_STREAM_TYPE:
;(e = o), (t = 'timed-metadata')
break
default:
return
}
i.payloadUnitStartIndicator && n(e, t, !0), e.data.push(i), (e.size += i.data.byteLength)
},
pmt: function () {
var e = { type: 'metadata', tracks: [] }
null !== (t = i.programMapTable).video && e.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +t.video, codec: 'avc', type: 'video' }),
null !== t.audio && e.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +t.audio, codec: 'adts', type: 'audio' }),
(r = !0),
d.trigger('data', e)
},
}[i.type]())
}),
(this.reset = function () {
;(a.size = 0), (a.data.length = 0), (s.size = 0), (s.data.length = 0), this.trigger('reset')
}),
(this.flushStreams_ = function () {
n(a, 'video'), n(s, 'audio'), n(o, 'timed-metadata')
}),
(this.flush = function () {
var e
!r &&
t &&
((e = { type: 'metadata', tracks: [] }),
null !== t.video && e.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +t.video, codec: 'avc', type: 'video' }),
null !== t.audio && e.tracks.push({ timelineStartInfo: { baseMediaDecodeTime: 0 }, id: +t.audio, codec: 'adts', type: 'audio' }),
d.trigger('data', e)),
(r = !1),
this.flushStreams_(),
this.trigger('done')
})
}).prototype = new j())
var Qe,
$e = {
PAT_PID: 0,
MP2T_PACKET_LENGTH: 188,
TransportPacketStream: Ye,
TransportParseStream: Xe,
ElementaryStream: Ke,
TimestampRolloverStream: We,
CaptionStream: Fe.CaptionStream,
Cea608Stream: Fe.Cea608Stream,
Cea708Stream: Fe.Cea708Stream,
MetadataStream: e,
}
for (Qe in je) je.hasOwnProperty(Qe) && ($e[Qe] = je[Qe])
var Je = $e,
Ze = ue,
et = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350],
tt = function (u) {
var l,
c = 0
tt.prototype.init.call(this),
(this.skipWarn_ = function (e, t) {
this.trigger('log', { level: 'warn', message: 'adts skiping bytes ' + e + ' to ' + t + ' in frame ' + c + ' outside syncword' })
}),
(this.push = function (e) {
var t,
i,
n,
r,
a,
s,
o = 0
if ((u || (c = 0), 'audio' === e.type)) {
for (l && l.length ? ((n = l), (l = new Uint8Array(n.byteLength + e.data.byteLength)).set(n), l.set(e.data, n.byteLength)) : (l = e.data); o + 7 < l.length; )
if (255 === l[o] && 240 == (246 & l[o + 1])) {
if (
('number' == typeof s && (this.skipWarn_(s, o), (s = null)),
(i = 2 * (1 & ~l[o + 1])),
(t = ((3 & l[o + 3]) << 11) | (l[o + 4] << 3) | ((224 & l[o + 5]) >> 5)),
(a = ((r = 1024 * (1 + (3 & l[o + 6]))) * Ze) / et[(60 & l[o + 2]) >>> 2]),
l.byteLength - o < t)
)
break
this.trigger('data', {
pts: e.pts + c * a,
dts: e.dts + c * a,
sampleCount: r,
audioobjecttype: 1 + ((l[o + 2] >>> 6) & 3),
channelcount: ((1 & l[o + 2]) << 2) | ((192 & l[o + 3]) >>> 6),
samplerate: et[(60 & l[o + 2]) >>> 2],
samplingfrequencyindex: (60 & l[o + 2]) >>> 2,
samplesize: 16,
data: l.subarray(o + 7 + i, o + t),
}),
c++,
(o += t)
} else 'number' != typeof s && (s = o), o++
'number' == typeof s && (this.skipWarn_(s, o), (s = null)), (l = l.subarray(o))
}
}),
(this.flush = function () {
;(c = 0), this.trigger('done')
}),
(this.reset = function () {
;(l = void 0), this.trigger('reset')
}),
(this.endTimeline = function () {
;(l = void 0), this.trigger('endedtimeline')
})
}
tt.prototype = new j()
var it,
nt,
rt = tt,
at = function (n) {
var r = n.byteLength,
a = 0,
s = 0
;(this.length = function () {
return 8 * r
}),
(this.bitsAvailable = function () {
return 8 * r + s
}),
(this.loadWord = function () {
var e = n.byteLength - r,
t = new Uint8Array(4),
i = Math.min(4, r)
if (0 === i) throw new Error('no bytes available')
t.set(n.subarray(e, e + i)), (a = new DataView(t.buffer).getUint32(0)), (s = 8 * i), (r -= i)
}),
(this.skipBits = function (e) {
var t
e < s || ((e -= s), (e -= 8 * (t = Math.floor(e / 8))), (r -= t), this.loadWord()), (a <<= e), (s -= e)
}),
(this.readBits = function (e) {
var t = Math.min(s, e),
i = a >>> (32 - t)
return 0 < (s -= t) ? (a <<= t) : 0 < r && this.loadWord(), 0 < (t = e - t) ? (i << t) | this.readBits(t) : i
}),
(this.skipLeadingZeros = function () {
for (var e = 0; e < s; ++e) if (0 != (a & (2147483648 >>> e))) return (a <<= e), (s -= e), e
return this.loadWord(), e + this.skipLeadingZeros()
}),
(this.skipUnsignedExpGolomb = function () {
this.skipBits(1 + this.skipLeadingZeros())
}),
(this.skipExpGolomb = function () {
this.skipBits(1 + this.skipLeadingZeros())
}),
(this.readUnsignedExpGolomb = function () {
var e = this.skipLeadingZeros()
return this.readBits(e + 1) - 1
}),
(this.readExpGolomb = function () {
var e = this.readUnsignedExpGolomb()
return 1 & e ? (1 + e) >>> 1 : -1 * (e >>> 1)
}),
(this.readBoolean = function () {
return 1 === this.readBits(1)
}),
(this.readUnsignedByte = function () {
return this.readBits(8)
}),
this.loadWord()
},
st = function () {
var n,
r,
a = 0
st.prototype.init.call(this),
(this.push = function (e) {
for (var t, i = (r = r ? ((t = new Uint8Array(r.byteLength + e.data.byteLength)).set(r), t.set(e.data, r.byteLength), t) : e.data).byteLength; a < i - 3; a++)
if (1 === r[a + 2]) {
n = a + 5
break
}
for (; n < i; )
switch (r[n]) {
case 0:
if (0 !== r[n - 1]) {
n += 2
break
}
if (0 !== r[n - 2]) {
n++
break
}
for (a + 3 !== n - 2 && this.trigger('data', r.subarray(a + 3, n - 2)); 1 !== r[++n] && n < i; );
;(a = n - 2), (n += 3)
break
case 1:
if (0 !== r[n - 1] || 0 !== r[n - 2]) {
n += 3
break
}
this.trigger('data', r.subarray(a + 3, n - 2)), (a = n - 2), (n += 3)
break
default:
n += 3
}
;(r = r.subarray(a)), (n -= a), (a = 0)
}),
(this.reset = function () {
;(r = null), (a = 0), this.trigger('reset')
}),
(this.flush = function () {
r && 3 < r.byteLength && this.trigger('data', r.subarray(a + 3)), (r = null), (a = 0), this.trigger('done')
}),
(this.endTimeline = function () {
this.flush(), this.trigger('endedtimeline')
})
}
;(st.prototype = new j()),
(nt = { 100: !0, 110: !0, 122: !0, 244: !0, 44: !0, 83: !0, 86: !0, 118: !0, 128: !0, 138: !0, 139: !0, 134: !0 }),
((it = function () {
var i,
n,
r,
a,
s,
o,
m,
t = new st()
it.prototype.init.call(this),
((i = this).push = function (e) {
'video' === e.type && ((n = e.trackId), (r = e.pts), (a = e.dts), t.push(e))
}),
t.on('data', function (e) {
var t = { trackId: n, pts: r, dts: a, data: e, nalUnitTypeCode: 31 & e[0] }
switch (t.nalUnitTypeCode) {
case 5:
t.nalUnitType = 'slice_layer_without_partitioning_rbsp_idr'
break
case 6:
;(t.nalUnitType = 'sei_rbsp'), (t.escapedRBSP = s(e.subarray(1)))
break
case 7:
;(t.nalUnitType = 'seq_parameter_set_rbsp'), (t.escapedRBSP = s(e.subarray(1))), (t.config = o(t.escapedRBSP))
break
case 8:
t.nalUnitType = 'pic_parameter_set_rbsp'
break
case 9:
t.nalUnitType = 'access_unit_delimiter_rbsp'
}
i.trigger('data', t)
}),
t.on('done', function () {
i.trigger('done')
}),
t.on('partialdone', function () {
i.trigger('partialdone')
}),
t.on('reset', function () {
i.trigger('reset')
}),
t.on('endedtimeline', function () {
i.trigger('endedtimeline')
}),
(this.flush = function () {
t.flush()
}),
(this.partialFlush = function () {
t.partialFlush()
}),
(this.reset = function () {
t.reset()
}),
(this.endTimeline = function () {
t.endTimeline()
}),
(m = function (e, t) {
for (var i = 8, n = 8, r = 0; r < e; r++) i = 0 === (n = 0 !== n ? (i + t.readExpGolomb() + 256) % 256 : n) ? i : n
}),
(s = function (e) {
for (var t = e.byteLength, i = [], n = 1; n < t - 2; ) 0 === e[n] && 0 === e[n + 1] && 3 === e[n + 2] ? (i.push(n + 2), (n += 2)) : n++
if (0 === i.length) return e
for (var r = t - i.length, a = new Uint8Array(r), s = 0, n = 0; n < r; s++, n++) s === i[0] && (s++, i.shift()), (a[n] = e[s])
return a
}),
(o = function (e) {
var t,
i,
n,
r,
a,
s = 0,
o = 0,
u = 0,
l = 0,
c = [1, 1],
d = new at(e),
h = d.readUnsignedByte(),
p = d.readUnsignedByte(),
f = d.readUnsignedByte()
if (
(d.skipUnsignedExpGolomb(),
nt[h] && (3 === (i = d.readUnsignedExpGolomb()) && d.skipBits(1), d.skipUnsignedExpGolomb(), d.skipUnsignedExpGolomb(), d.skipBits(1), d.readBoolean()))
)
for (r = 3 !== i ? 8 : 12, a = 0; a < r; a++) d.readBoolean() && m(a < 6 ? 16 : 64, d)
if ((d.skipUnsignedExpGolomb(), 0 === (n = d.readUnsignedExpGolomb()))) d.readUnsignedExpGolomb()
else if (1 === n) for (d.skipBits(1), d.skipExpGolomb(), d.skipExpGolomb(), t = d.readUnsignedExpGolomb(), a = 0; a < t; a++) d.skipExpGolomb()
if (
(d.skipUnsignedExpGolomb(),
d.skipBits(1),
(e = d.readUnsignedExpGolomb()),
(i = d.readUnsignedExpGolomb()),
0 === (n = d.readBits(1)) && d.skipBits(1),
d.skipBits(1),
d.readBoolean() && ((s = d.readUnsignedExpGolomb()), (o = d.readUnsignedExpGolomb()), (u = d.readUnsignedExpGolomb()), (l = d.readUnsignedExpGolomb())),
d.readBoolean() && d.readBoolean())
) {
switch (d.readUnsignedByte()) {
case 1:
c = [1, 1]
break
case 2:
c = [12, 11]
break
case 3:
c = [10, 11]
break
case 4:
c = [16, 11]
break
case 5:
c = [40, 33]
break
case 6:
c = [24, 11]
break
case 7:
c = [20, 11]
break
case 8:
c = [32, 11]
break
case 9:
c = [80, 33]
break
case 10:
c = [18, 11]
break
case 11:
c = [15, 11]
break
case 12:
c = [64, 33]
break
case 13:
c = [160, 99]
break
case 14:
c = [4, 3]
break
case 15:
c = [3, 2]
break
case 16:
c = [2, 1]
break
case 255:
c = [(d.readUnsignedByte() << 8) | d.readUnsignedByte(), (d.readUnsignedByte() << 8) | d.readUnsignedByte()]
}
c && (c[0], c[1])
}
return { profileIdc: h, levelIdc: f, profileCompatibility: p, width: 16 * (e + 1) - 2 * s - 2 * o, height: (2 - n) * (i + 1) * 16 - 2 * u - 2 * l, sarRatio: c }
})
}).prototype = new j())
function ot(e, t) {
var i = 0 <= (i = (e[t + 6] << 21) | (e[t + 7] << 14) | (e[t + 8] << 7) | e[t + 9]) ? i : 0
return (16 & e[t + 5]) >> 4 ? i + 20 : i + 10
}
function ut(e, t) {
return e.length - t < 10 || e[t] !== 'I'.charCodeAt(0) || e[t + 1] !== 'D'.charCodeAt(0) || e[t + 2] !== '3'.charCodeAt(0) ? t : ut(e, (t += ot(e, t)))
}
function lt(e) {
return (e[0] << 21) | (e[1] << 14) | (e[2] << 7) | e[3]
}
var e = { H264Stream: it, NalByteStream: st },
ct = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350],
dt = {
isLikelyAacData: function (e) {
var t = ut(e, 0)
return e.length >= t + 2 && 255 == (255 & e[t]) && 240 == (240 & e[t + 1]) && 16 == (22 & e[t + 1])
},
parseId3TagSize: ot,
parseAdtsSize: function (e, t) {
var i = (224 & e[t + 5]) >> 5,
n = e[t + 4] << 3
return (6144 & e[t + 3]) | n | i
},
parseType: function (e, t) {
return e[t] === 'I'.charCodeAt(0) && e[t + 1] === 'D'.charCodeAt(0) && e[t + 2] === '3'.charCodeAt(0)
? 'timed-metadata'
: !0 & e[t] && 240 == (240 & e[t + 1])
? 'audio'
: null
},
parseSampleRate: function (e) {
for (var t = 0; t + 5 < e.length; ) {
if (255 === e[t] && 240 == (246 & e[t + 1])) return ct[(60 & e[t + 2]) >>> 2]
t++
}
return null
},
parseAacTimestamp: function (e) {
var t,
i = 10
64 & e[5] && ((i += 4), (i += lt(e.subarray(10, 14))))
do {
if ((t = lt(e.subarray(i + 4, i + 8))) < 1) return null
if ('PRIV' === String.fromCharCode(e[i], e[i + 1], e[i + 2], e[i + 3]))
for (var n = e.subarray(i + 10, i + t + 10), r = 0; r < n.byteLength; r++)
if (0 === n[r]) {
if (
'com.apple.streaming.transportStreamTimestamp' !==
unescape(
(function (e, t, i) {
for (var n = '', r = t; r < i; r++) n += '%' + ('00' + e[r].toString(16)).slice(-2)
return n
})(n, 0, r)
)
)
break
var a = n.subarray(r + 1),
s = ((1 & a[3]) << 30) | (a[4] << 22) | (a[5] << 14) | (a[6] << 6) | (a[7] >>> 2)
return (s *= 4), (s += 3 & a[7])
}
} while (((i += 10), (i += t) < e.byteLength))
return null
},
},
ht = function () {
var a = new Uint8Array(),
s = 0
ht.prototype.init.call(this),
(this.setTimestamp = function (e) {
s = e
}),
(this.push = function (e) {
var t,
i,
n = 0,
r = 0
for (a.length ? ((i = a.length), (a = new Uint8Array(e.byteLength + i)).set(a.subarray(0, i)), a.set(e, i)) : (a = e); 3 <= a.length - r; )
if (a[r] !== 'I'.charCodeAt(0) || a[r + 1] !== 'D'.charCodeAt(0) || a[r + 2] !== '3'.charCodeAt(0))
if (255 != (255 & a[r]) || 240 != (240 & a[r + 1])) r++
else {
if (a.length - r < 7) break
if (r + (n = dt.parseAdtsSize(a, r)) > a.length) break
;(t = { type: 'audio', data: a.subarray(r, r + n), pts: s, dts: s }), this.trigger('data', t), (r += n)
}
else {
if (a.length - r < 10) break
if (r + (n = dt.parseId3TagSize(a, r)) > a.length) break
;(t = { type: 'timed-metadata', data: a.subarray(r, r + n) }), this.trigger('data', t), (r += n)
}
;(e = a.length - r), (a = 0 < e ? a.subarray(r) : new Uint8Array())
}),
(this.reset = function () {
;(a = new Uint8Array()), this.trigger('reset')
}),
(this.endTimeline = function () {
;(a = new Uint8Array()), this.trigger('endedtimeline')
})
}
ht.prototype = new j()
function pt(e, t) {
;(t.stream = e), this.trigger('log', t)
}
function ft(e, t) {
for (var i = Object.keys(t), n = 0; n < i.length; n++) {
var r = i[n]
'headOfPipeline' !== r && t[r].on && t[r].on('log', pt.bind(e, r))
}
}
function mt(e, t) {
var i
if (e.length === t.length) {
for (i = 0; i < e.length; i++) if (e[i] !== t[i]) return
return 1
}
}
function gt(e, t, i, n, r, a) {
return { start: { dts: e, pts: e + (i - t) }, end: { dts: e + (n - t), pts: e + (r - i) }, prependedContentDuration: a, baseMediaDecodeTime: e }
}
var yt,
vt,
_t,
bt = ht,
Tt = ['audioobjecttype', 'channelcount', 'samplerate', 'samplingfrequencyindex', 'samplesize'],
St = ['width', 'height', 'profileIdc', 'levelIdc', 'profileCompatibility', 'sarRatio'],
wt = e.H264Stream,
Et = dt.isLikelyAacData,
kt = ue,
Ct = function (a, s) {
var o = [],
u = 0,
l = 0,
c = 1 / 0,
d = (s = s || {}).firstSequenceNumber || 0
Ct.prototype.init.call(this),
(this.push = function (t) {
Te(a, t),
a &&
Tt.forEach(function (e) {
a[e] = t[e]
}),
o.push(t)
}),
(this.setEarliestDts = function (e) {
u = e
}),
(this.setVideoBaseMediaDecodeTime = function (e) {
c = e
}),
(this.setAudioAppendStart = function (e) {
l = e
}),
(this.flush = function () {
var e, t, i, n, r
0 !== o.length &&
((e = me(o, a, u)),
(a.baseMediaDecodeTime = be(a, s.keepOriginalTimestamps)),
(r = fe(a, e, l, c)),
(a.samples = ge(e)),
(t = K(ye(e))),
(o = []),
(n = Y(d, [a])),
(i = new Uint8Array(n.byteLength + t.byteLength)),
d++,
i.set(n),
i.set(t, n.byteLength),
_e(a),
(n = Math.ceil((1024 * kt) / a.samplerate)),
e.length &&
((n = e.length * n),
this.trigger('segmentTimingInfo', gt(de(a.baseMediaDecodeTime, a.samplerate), e[0].dts, e[0].pts, e[0].dts + n, e[0].pts + n, r || 0)),
this.trigger('timingInfo', { start: e[0].pts, end: e[0].pts + n })),
this.trigger('data', { track: a, boxes: i })),
this.trigger('done', 'AudioSegmentStream')
}),
(this.reset = function () {
_e(a), (o = []), this.trigger('reset')
})
}
;(Ct.prototype = new j()),
((yt = function (s, a) {
var t,
i,
o = [],
l = [],
u = (a = a || {}).firstSequenceNumber || 0
yt.prototype.init.call(this),
delete s.minPTS,
(this.gopCache_ = []),
(this.push = function (e) {
Te(s, e),
'seq_parameter_set_rbsp' !== e.nalUnitType ||
t ||
((t = e.config),
(s.sps = [e.data]),
St.forEach(function (e) {
s[e] = t[e]
}, this)),
'pic_parameter_set_rbsp' !== e.nalUnitType || i || ((i = e.data), (s.pps = [e.data])),
o.push(e)
}),
(this.flush = function () {
for (var e, t, i, n = 0; o.length && 'access_unit_delimiter_rbsp' !== o[0].nalUnitType; ) o.shift()
if (0 === o.length) return this.resetStream_(), void this.trigger('done', 'VideoSegmentStream')
if (
((e = $(o)),
(t = J(e))[0][0].keyFrame ||
((i = this.getGopForFusion_(o[0], s))
? ((n = i.duration),
t.unshift(i),
(t.byteLength += i.byteLength),
(t.nalCount += i.nalCount),
(t.pts = i.pts),
(t.dts = i.dts),
(t.duration += i.duration))
: (t = Z(t))),
l.length)
) {
var r = a.alignGopsAtEnd ? this.alignGopsAtEnd_(t) : this.alignGopsAtStart_(t)
if (!r)
return (
this.gopCache_.unshift({ gop: t.pop(), pps: s.pps, sps: s.sps }),
(this.gopCache_.length = Math.min(6, this.gopCache_.length)),
(o = []),
this.resetStream_(),
void this.trigger('done', 'VideoSegmentStream')
)
_e(s), (t = r)
}
Te(s, t),
(s.samples = ee(t)),
(e = K(te(t))),
(s.baseMediaDecodeTime = be(s, a.keepOriginalTimestamps)),
this.trigger(
'processedGopsInfo',
t.map(function (e) {
return { pts: e.pts, dts: e.dts, byteLength: e.byteLength }
})
),
(i = t[0]),
(r = t[t.length - 1]),
this.trigger('segmentTimingInfo', gt(s.baseMediaDecodeTime, i.dts, i.pts, r.dts + r.duration, r.pts + r.duration, n)),
this.trigger('timingInfo', { start: t[0].pts, end: t[t.length - 1].pts + t[t.length - 1].duration }),
this.gopCache_.unshift({ gop: t.pop(), pps: s.pps, sps: s.sps }),
(this.gopCache_.length = Math.min(6, this.gopCache_.length)),
(o = []),
this.trigger('baseMediaDecodeTime', s.baseMediaDecodeTime),
this.trigger('timelineStartInfo', s.timelineStartInfo),
(n = Y(u, [s])),
(t = new Uint8Array(n.byteLength + e.byteLength)),
u++,
t.set(n),
t.set(e, n.byteLength),
this.trigger('data', { track: s, boxes: t }),
this.resetStream_(),
this.trigger('done', 'VideoSegmentStream')
}),
(this.reset = function () {
this.resetStream_(), (o = []), (this.gopCache_.length = 0), (l.length = 0), this.trigger('reset')
}),
(this.resetStream_ = function () {
_e(s), (i = t = void 0)
}),
(this.getGopForFusion_ = function (e) {
for (var t, i, n, r = 1 / 0, a = 0; a < this.gopCache_.length; a++)
(i = (n = this.gopCache_[a]).gop),
s.pps &&
mt(s.pps[0], n.pps[0]) &&
s.sps &&
mt(s.sps[0], n.sps[0]) &&
(i.dts < s.timelineStartInfo.dts || (-1e4 <= (i = e.dts - i.dts - i.duration) && i <= 45e3 && (!t || i < r) && ((t = n), (r = i))))
return t ? t.gop : null
}),
(this.alignGopsAtStart_ = function (e) {
for (var t, i, n, r, a = e.byteLength, s = e.nalCount, o = e.duration, u = (t = 0); u < l.length && t < e.length && ((i = l[u]), (n = e[t]), i.pts !== n.pts); )
n.pts > i.pts ? u++ : (t++, (a -= n.byteLength), (s -= n.nalCount), (o -= n.duration))
return 0 === t ? e : t === e.length ? null : (((r = e.slice(t)).byteLength = a), (r.duration = o), (r.nalCount = s), (r.pts = r[0].pts), (r.dts = r[0].dts), r)
}),
(this.alignGopsAtEnd_ = function (e) {
for (var t, i, n = l.length - 1, r = e.length - 1, a = null, s = !1; 0 <= n && 0 <= r; ) {
if (((t = l[n]), (i = e[r]), t.pts === i.pts)) {
s = !0
break
}
t.pts > i.pts ? n-- : (n === l.length - 1 && (a = r), r--)
}
if (!s && null === a) return null
if (0 === (u = s ? r : a)) return e
var o = e.slice(u),
u = o.reduce(
function (e, t) {
return (e.byteLength += t.byteLength), (e.duration += t.duration), (e.nalCount += t.nalCount), e
},
{ byteLength: 0, duration: 0, nalCount: 0 }
)
return (o.byteLength = u.byteLength), (o.duration = u.duration), (o.nalCount = u.nalCount), (o.pts = o[0].pts), (o.dts = o[0].dts), o
}),
(this.alignGopsWith = function (e) {
l = e
})
}).prototype = new j()),
((_t = function (e, t) {
;(this.numberOfTracks = 0),
(this.metadataStream = t),
'undefined' != typeof (e = e || {}).remux ? (this.remuxTracks = !!e.remux) : (this.remuxTracks = !0),
'boolean' == typeof e.keepOriginalTimestamps ? (this.keepOriginalTimestamps = e.keepOriginalTimestamps) : (this.keepOriginalTimestamps = !1),
(this.pendingTracks = []),
(this.videoTrack = null),
(this.pendingBoxes = []),
(this.pendingCaptions = []),
(this.pendingMetadata = []),
(this.pendingBytes = 0),
(this.emittedTracks = 0),
_t.prototype.init.call(this),
(this.push = function (e) {
return e.text
? this.pendingCaptions.push(e)
: e.frames
? this.pendingMetadata.push(e)
: (this.pendingTracks.push(e.track),
(this.pendingBytes += e.boxes.byteLength),
'video' === e.track.type && ((this.videoTrack = e.track), this.pendingBoxes.push(e.boxes)),
void ('audio' === e.track.type && ((this.audioTrack = e.track), this.pendingBoxes.unshift(e.boxes))))
})
}).prototype = new j()),
(_t.prototype.flush = function (e) {
var t,
i,
n,
r = 0,
a = { captions: [], captionStreams: {}, metadata: [], info: {} },
s = 0
if (this.pendingTracks.length < this.numberOfTracks) {
if ('VideoSegmentStream' !== e && 'AudioSegmentStream' !== e) return
if (this.remuxTracks) return
if (0 === this.pendingTracks.length) return this.emittedTracks++, void (this.emittedTracks >= this.numberOfTracks && (this.trigger('done'), (this.emittedTracks = 0)))
}
if (
(this.videoTrack
? ((s = this.videoTrack.timelineStartInfo.pts),
St.forEach(function (e) {
a.info[e] = this.videoTrack[e]
}, this))
: this.audioTrack &&
((s = this.audioTrack.timelineStartInfo.pts),
Tt.forEach(function (e) {
a.info[e] = this.audioTrack[e]
}, this)),
this.videoTrack || this.audioTrack)
) {
for (
1 === this.pendingTracks.length ? (a.type = this.pendingTracks[0].type) : (a.type = 'combined'),
this.emittedTracks += this.pendingTracks.length,
e = Q(this.pendingTracks),
a.initSegment = new Uint8Array(e.byteLength),
a.initSegment.set(e),
a.data = new Uint8Array(this.pendingBytes),
n = 0;
n < this.pendingBoxes.length;
n++
)
a.data.set(this.pendingBoxes[n], r), (r += this.pendingBoxes[n].byteLength)
for (n = 0; n < this.pendingCaptions.length; n++)
((t = this.pendingCaptions[n]).startTime = pe(t.startPts, s, this.keepOriginalTimestamps)),
(t.endTime = pe(t.endPts, s, this.keepOriginalTimestamps)),
(a.captionStreams[t.stream] = !0),
a.captions.push(t)
for (n = 0; n < this.pendingMetadata.length; n++) ((i = this.pendingMetadata[n]).cueTime = pe(i.pts, s, this.keepOriginalTimestamps)), a.metadata.push(i)
for (
a.metadata.dispatchType = this.metadataStream.dispatchType,
this.pendingTracks.length = 0,
this.videoTrack = null,
this.pendingBoxes.length = 0,
this.pendingCaptions.length = 0,
this.pendingBytes = 0,
this.pendingMetadata.length = 0,
this.trigger('data', a),
n = 0;
n < a.captions.length;
n++
)
(t = a.captions[n]), this.trigger('caption', t)
for (n = 0; n < a.metadata.length; n++) (i = a.metadata[n]), this.trigger('id3Frame', i)
}
this.emittedTracks >= this.numberOfTracks && (this.trigger('done'), (this.emittedTracks = 0))
}),
(_t.prototype.setRemux = function (e) {
this.remuxTracks = e
}),
((vt = function (n) {
var r,
a,
s = this,
i = !0
vt.prototype.init.call(this),
(this.baseMediaDecodeTime = (n = n || {}).baseMediaDecodeTime || 0),
(this.transmuxPipeline_ = {}),
(this.setupAacPipeline = function () {
var t = {}
;((this.transmuxPipeline_ = t).type = 'aac'),
(t.metadataStream = new Je.MetadataStream()),
(t.aacStream = new bt()),
(t.audioTimestampRolloverStream = new Je.TimestampRolloverStream('audio')),
(t.timedMetadataTimestampRolloverStream = new Je.TimestampRolloverStream('timed-metadata')),
(t.adtsStream = new rt()),
(t.coalesceStream = new _t(n, t.metadataStream)),
(t.headOfPipeline = t.aacStream),
t.aacStream.pipe(t.audioTimestampRolloverStream).pipe(t.adtsStream),
t.aacStream.pipe(t.timedMetadataTimestampRolloverStream).pipe(t.metadataStream).pipe(t.coalesceStream),
t.metadataStream.on('timestamp', function (e) {
t.aacStream.setTimestamp(e.timeStamp)
}),
t.aacStream.on('data', function (e) {
;('timed-metadata' !== e.type && 'audio' !== e.type) ||
t.audioSegmentStream ||
((a = a || { timelineStartInfo: { baseMediaDecodeTime: s.baseMediaDecodeTime }, codec: 'adts', type: 'audio' }),
t.coalesceStream.numberOfTracks++,
(t.audioSegmentStream = new Ct(a, n)),
t.audioSegmentStream.on('log', s.getLogTrigger_('audioSegmentStream')),
t.audioSegmentStream.on('timingInfo', s.trigger.bind(s, 'audioTimingInfo')),
t.adtsStream.pipe(t.audioSegmentStream).pipe(t.coalesceStream),
s.trigger('trackinfo', { hasAudio: !!a, hasVideo: !!r }))
}),
t.coalesceStream.on('data', this.trigger.bind(this, 'data')),
t.coalesceStream.on('done', this.trigger.bind(this, 'done')),
ft(this, t)
}),
(this.setupTsPipeline = function () {
var i = {}
;((this.transmuxPipeline_ = i).type = 'ts'),
(i.metadataStream = new Je.MetadataStream()),
(i.packetStream = new Je.TransportPacketStream()),
(i.parseStream = new Je.TransportParseStream()),
(i.elementaryStream = new Je.ElementaryStream()),
(i.timestampRolloverStream = new Je.TimestampRolloverStream()),
(i.adtsStream = new rt()),
(i.h264Stream = new wt()),
(i.captionStream = new Je.CaptionStream(n)),
(i.coalesceStream = new _t(n, i.metadataStream)),
(i.headOfPipeline = i.packetStream),
i.packetStream.pipe(i.parseStream).pipe(i.elementaryStream).pipe(i.timestampRolloverStream),
i.timestampRolloverStream.pipe(i.h264Stream),
i.timestampRolloverStream.pipe(i.adtsStream),
i.timestampRolloverStream.pipe(i.metadataStream).pipe(i.coalesceStream),
i.h264Stream.pipe(i.captionStream).pipe(i.coalesceStream),
i.elementaryStream.on('data', function (e) {
var t
if ('metadata' === e.type) {
for (t = e.tracks.length; t--; )
r || 'video' !== e.tracks[t].type
? a || 'audio' !== e.tracks[t].type || ((a = e.tracks[t]).timelineStartInfo.baseMediaDecodeTime = s.baseMediaDecodeTime)
: ((r = e.tracks[t]).timelineStartInfo.baseMediaDecodeTime = s.baseMediaDecodeTime)
r &&
!i.videoSegmentStream &&
(i.coalesceStream.numberOfTracks++,
(i.videoSegmentStream = new yt(r, n)),
i.videoSegmentStream.on('log', s.getLogTrigger_('videoSegmentStream')),
i.videoSegmentStream.on('timelineStartInfo', function (e) {
a && !n.keepOriginalTimestamps && ((a.timelineStartInfo = e), i.audioSegmentStream.setEarliestDts(e.dts - s.baseMediaDecodeTime))
}),
i.videoSegmentStream.on('processedGopsInfo', s.trigger.bind(s, 'gopInfo')),
i.videoSegmentStream.on('segmentTimingInfo', s.trigger.bind(s, 'videoSegmentTimingInfo')),
i.videoSegmentStream.on('baseMediaDecodeTime', function (e) {
a && i.audioSegmentStream.setVideoBaseMediaDecodeTime(e)
}),
i.videoSegmentStream.on('timingInfo', s.trigger.bind(s, 'videoTimingInfo')),
i.h264Stream.pipe(i.videoSegmentStream).pipe(i.coalesceStream)),
a &&
!i.audioSegmentStream &&
(i.coalesceStream.numberOfTracks++,
(i.audioSegmentStream = new Ct(a, n)),
i.audioSegmentStream.on('log', s.getLogTrigger_('audioSegmentStream')),
i.audioSegmentStream.on('timingInfo', s.trigger.bind(s, 'audioTimingInfo')),
i.audioSegmentStream.on('segmentTimingInfo', s.trigger.bind(s, 'audioSegmentTimingInfo')),
i.adtsStream.pipe(i.audioSegmentStream).pipe(i.coalesceStream)),
s.trigger('trackinfo', { hasAudio: !!a, hasVideo: !!r })
}
}),
i.coalesceStream.on('data', this.trigger.bind(this, 'data')),
i.coalesceStream.on('id3Frame', function (e) {
;(e.dispatchType = i.metadataStream.dispatchType), s.trigger('id3Frame', e)
}),
i.coalesceStream.on('caption', this.trigger.bind(this, 'caption')),
i.coalesceStream.on('done', this.trigger.bind(this, 'done')),
ft(this, i)
}),
(this.setBaseMediaDecodeTime = function (e) {
var t = this.transmuxPipeline_
n.keepOriginalTimestamps || (this.baseMediaDecodeTime = e),
a &&
((a.timelineStartInfo.dts = void 0),
(a.timelineStartInfo.pts = void 0),
_e(a),
t.audioTimestampRolloverStream && t.audioTimestampRolloverStream.discontinuity()),
r &&
(t.videoSegmentStream && (t.videoSegmentStream.gopCache_ = []),
(r.timelineStartInfo.dts = void 0),
(r.timelineStartInfo.pts = void 0),
_e(r),
t.captionStream.reset()),
t.timestampRolloverStream && t.timestampRolloverStream.discontinuity()
}),
(this.setAudioAppendStart = function (e) {
a && this.transmuxPipeline_.audioSegmentStream.setAudioAppendStart(e)
}),
(this.setRemux = function (e) {
var t = this.transmuxPipeline_
;(n.remux = e), t && t.coalesceStream && t.coalesceStream.setRemux(e)
}),
(this.alignGopsWith = function (e) {
r && this.transmuxPipeline_.videoSegmentStream && this.transmuxPipeline_.videoSegmentStream.alignGopsWith(e)
}),
(this.getLogTrigger_ = function (t) {
var i = this
return function (e) {
;(e.stream = t), i.trigger('log', e)
}
}),
(this.push = function (e) {
var t
i &&
((t = Et(e)) && 'aac' !== this.transmuxPipeline_.type ? this.setupAacPipeline() : t || 'ts' === this.transmuxPipeline_.type || this.setupTsPipeline(),
(i = !1)),
this.transmuxPipeline_.headOfPipeline.push(e)
}),
(this.flush = function () {
;(i = !0), this.transmuxPipeline_.headOfPipeline.flush()
}),
(this.endTimeline = function () {
this.transmuxPipeline_.headOfPipeline.endTimeline()
}),
(this.reset = function () {
this.transmuxPipeline_.headOfPipeline && this.transmuxPipeline_.headOfPipeline.reset()
}),
(this.resetCaptions = function () {
this.transmuxPipeline_.captionStream && this.transmuxPipeline_.captionStream.reset()
})
}).prototype = new j())
function It(e, c) {
var i = Rt(e, ['moof', 'traf']),
e = Rt(e, ['mdat']),
d = {},
n = []
return (
e.forEach(function (e, t) {
t = i[t]
n.push({ mdat: e, traf: t })
}),
n.forEach(function (e) {
var t,
i,
n,
r,
a,
s = e.mdat,
o = e.traf,
u = Rt(o, ['tfhd']),
l = Ht(u[0]),
e = l.trackId,
u = Rt(o, ['tfdt']),
u = 0 < u.length ? Bt(u[0]).baseMediaDecodeTime : 0,
o = Rt(o, ['trun'])
c === e &&
0 < o.length &&
((o = o),
(t = u),
(i = (l = l).defaultSampleDuration || 0),
(n = l.defaultSampleSize || 0),
(r = l.trackId),
(a = []),
o.forEach(function (e) {
e = jt(e).samples
e.forEach(function (e) {
void 0 === e.duration && (e.duration = i),
void 0 === e.size && (e.size = n),
(e.trackId = r),
(e.dts = t),
void 0 === e.compositionTimeOffset && (e.compositionTimeOffset = 0),
'bigint' == typeof t
? ((e.pts = t + qt.BigInt(e.compositionTimeOffset)), (t += qt.BigInt(e.duration)))
: ((e.pts = t + e.compositionTimeOffset), (t += e.duration))
}),
(a = a.concat(e))
}),
(s = (function (e, t, i) {
for (var n, r, a = new DataView(e.buffer, e.byteOffset, e.byteLength), s = { logs: [], seiNals: [] }, o = 0; o + 4 < e.length; o += n)
if (((n = a.getUint32(o)), (o += 4), !(n <= 0)))
switch (31 & e[o]) {
case 6:
var u = e.subarray(o + 1, o + 1 + n),
l = (function (e, t) {
for (var i = e, n = 0; n < t.length; n++) {
var r = t[n]
if (i < r.size) return r
i -= r.size
}
return null
})(o, t),
u = { nalUnitType: 'sei_rbsp', size: n, data: u, escapedRBSP: Vt(u), trackId: i }
if (l) (u.pts = l.pts), (u.dts = l.dts), (r = l)
else {
if (!r) {
s.logs.push({ level: 'warn', message: "We've encountered a nal unit without data at " + o + ' for trackId ' + i + '. See mux.js#223.' })
break
}
;(u.pts = r.pts), (u.dts = r.dts)
}
s.seiNals.push(u)
}
return s
})(s, a, e)),
d[e] || (d[e] = { seiNals: [], logs: [] }),
(d[e].seiNals = d[e].seiNals.concat(s.seiNals)),
(d[e].logs = d[e].logs.concat(s.logs)))
}),
d
)
}
function xt(e) {
var t = 31 & e[1]
return (t <<= 8), (t |= e[2])
}
function At(e) {
return !!(64 & e[1])
}
function Pt(e) {
var t = 0
return 1 < (48 & e[3]) >>> 4 && (t += e[4] + 1), t
}
function Lt(e) {
switch (e) {
case 5:
return 'slice_layer_without_partitioning_rbsp_idr'
case 6:
return 'sei_rbsp'
case 7:
return 'seq_parameter_set_rbsp'
case 8:
return 'pic_parameter_set_rbsp'
case 9:
return 'access_unit_delimiter_rbsp'
default:
return null
}
}
var Dt = { Transmuxer: vt, VideoSegmentStream: yt, AudioSegmentStream: Ct, AUDIO_PROPERTIES: Tt, VIDEO_PROPERTIES: St, generateSegmentTimingInfo: gt },
e = function (e) {
return e >>> 0
},
Ot = function (e) {
var t = ''
return (t += String.fromCharCode(e[0])), (t += String.fromCharCode(e[1])), (t += String.fromCharCode(e[2])), (t += String.fromCharCode(e[3]))
},
Mt = e,
Rt = function e(t, i) {
var n,
r,
a,
s = []
if (!i.length) return null
for (n = 0; n < t.byteLength; )
(r = Mt((t[n] << 24) | (t[n + 1] << 16) | (t[n + 2] << 8) | t[n + 3])),
(a = Ot(t.subarray(n + 4, n + 8))),
(r = 1 < r ? n + r : t.byteLength),
a === i[0] && (1 === i.length ? s.push(t.subarray(n + 8, r)) : (a = e(t.subarray(n + 8, r), i.slice(1))).length && (s = s.concat(a))),
(n = r)
return s
},
Nt = e,
Ut = q.getUint64,
Bt = function (e) {
var t = { version: e[0], flags: new Uint8Array(e.subarray(1, 4)) }
return 1 === t.version ? (t.baseMediaDecodeTime = Ut(e.subarray(4))) : (t.baseMediaDecodeTime = Nt((e[4] << 24) | (e[5] << 16) | (e[6] << 8) | e[7])), t
},
Ft = function (e) {
return {
isLeading: (12 & e[0]) >>> 2,
dependsOn: 3 & e[0],
isDependedOn: (192 & e[1]) >>> 6,
hasRedundancy: (48 & e[1]) >>> 4,
paddingValue: (14 & e[1]) >>> 1,
isNonSyncSample: 1 & e[1],
degradationPriority: (e[2] << 8) | e[3],
}
},
jt = function (e) {
var t,
i = { version: e[0], flags: new Uint8Array(e.subarray(1, 4)), samples: [] },
n = new DataView(e.buffer, e.byteOffset, e.byteLength),
r = 1 & i.flags[2],
a = 4 & i.flags[2],
s = 1 & i.flags[1],
o = 2 & i.flags[1],
u = 4 & i.flags[1],
l = 8 & i.flags[1],
c = n.getUint32(4),
d = 8
for (
r && ((i.dataOffset = n.getInt32(d)), (d += 4)),
a &&
c &&
((t = { flags: Ft(e.subarray(d, d + 4)) }),
(d += 4),
s && ((t.duration = n.getUint32(d)), (d += 4)),
o && ((t.size = n.getUint32(d)), (d += 4)),
l && (1 === i.version ? (t.compositionTimeOffset = n.getInt32(d)) : (t.compositionTimeOffset = n.getUint32(d)), (d += 4)),
i.samples.push(t),
c--);
c--;
)
(t = {}),
s && ((t.duration = n.getUint32(d)), (d += 4)),
o && ((t.size = n.getUint32(d)), (d += 4)),
u && ((t.flags = Ft(e.subarray(d, d + 4))), (d += 4)),
l && (1 === i.version ? (t.compositionTimeOffset = n.getInt32(d)) : (t.compositionTimeOffset = n.getUint32(d)), (d += 4)),
i.samples.push(t)
return i
},
Ht = function (e) {
var t = new DataView(e.buffer, e.byteOffset, e.byteLength),
i = { version: e[0], flags: new Uint8Array(e.subarray(1, 4)), trackId: t.getUint32(4) },
n = 1 & i.flags[2],
r = 2 & i.flags[2],
a = 8 & i.flags[2],
s = 16 & i.flags[2],
o = 32 & i.flags[2],
u = 65536 & i.flags[0],
l = 131072 & i.flags[0],
e = 8
return (
n && ((e += 4), (i.baseDataOffset = t.getUint32(12)), (e += 4)),
r && ((i.sampleDescriptionIndex = t.getUint32(e)), (e += 4)),
a && ((i.defaultSampleDuration = t.getUint32(e)), (e += 4)),
s && ((i.defaultSampleSize = t.getUint32(e)), (e += 4)),
o && (i.defaultSampleFlags = t.getUint32(e)),
u && (i.durationIsEmpty = !0),
!n && l && (i.baseDataOffsetIsMoof = !0),
i
)
},
j = 'undefined' != typeof globalThis ? globalThis : 'undefined' != typeof window ? window : 'undefined' != typeof global ? global : 'undefined' != typeof self ? self : {},
j = 'undefined' != typeof window ? window : 'undefined' != typeof j ? j : 'undefined' != typeof self ? self : {},
qt = j,
Vt = ke,
Wt = Fe.CaptionStream,
Gt = function () {
var t,
r,
a,
s,
o,
i,
n = !1
;(this.isInitialized = function () {
return n
}),
(this.init = function (e) {
;(t = new Wt()),
(n = !0),
(i = !!e && e.isPartial),
t.on('data', function (e) {
;(e.startTime = e.startPts / s), (e.endTime = e.endPts / s), o.captions.push(e), (o.captionStreams[e.stream] = !0)
}),
t.on('log', function (e) {
o.logs.push(e)
})
}),
(this.isNewInit = function (e, t) {
return !((e && 0 === e.length) || (t && 'object' == typeof t && 0 === Object.keys(t).length)) && (a !== e[0] || s !== t[a])
}),
(this.parse = function (e, t, i) {
if (!this.isInitialized()) return null
if (!t || !i) return null
if (this.isNewInit(t, i)) (a = t[0]), (s = i[a])
else if (null === a || !s) return r.push(e), null
for (; 0 < r.length; ) {
var n = r.shift()
this.parse(n, t, i)
}
return (
(e = (function (e, t, i) {
if (null === t) return null
t = It(e, t)[t] || {}
return { seiNals: t.seiNals, logs: t.logs, timescale: i }
})(e, a, s)) &&
e.logs &&
(o.logs = o.logs.concat(e.logs)),
null !== e && e.seiNals ? (this.pushNals(e.seiNals), this.flushStream(), o) : o.logs.length ? { logs: o.logs, captions: [], captionStreams: [] } : null
)
}),
(this.pushNals = function (e) {
if (!this.isInitialized() || !e || 0 === e.length) return null
e.forEach(function (e) {
t.push(e)
})
}),
(this.flushStream = function () {
if (!this.isInitialized()) return null
i ? t.partialFlush() : t.flush()
}),
(this.clearParsedCaptions = function () {
;(o.captions = []), (o.captionStreams = {}), (o.logs = [])
}),
(this.resetCaptionStream = function () {
if (!this.isInitialized()) return null
t.reset()
}),
(this.clearAllCaptions = function () {
this.clearParsedCaptions(), this.resetCaptionStream()
}),
(this.reset = function () {
;(r = []), (s = a = null), o ? this.clearParsedCaptions() : (o = { captions: [], captionStreams: {}, logs: [] }), this.resetCaptionStream()
}),
this.reset()
},
zt = e,
Xt = function (e) {
return ('00' + e.toString(16)).slice(-2)
},
Kt = q.getUint64,
j = function (e) {
return Rt(e, ['moov', 'trak']).reduce(function (e, t) {
var i,
n,
r = Rt(t, ['tkhd'])[0]
return r
? ((i = r[0]),
(r = zt((r[(n = 0 === i ? 12 : 20)] << 24) | (r[1 + n] << 16) | (r[2 + n] << 8) | r[3 + n])),
(t = Rt(t, ['mdia', 'mdhd'])[0]) ? ((i = t[0]), (e[r] = zt((t[(n = 0 === i ? 12 : 20)] << 24) | (t[1 + n] << 16) | (t[2 + n] << 8) | t[3 + n])), e) : null)
: null
}, {})
},
ke = function (a, e) {
e = Rt(e, ['moof', 'traf']).reduce(function (e, t) {
var i,
n = Rt(t, ['tfhd'])[0],
r = zt((n[4] << 24) | (n[5] << 16) | (n[6] << 8) | n[7]),
n = a[r] || 9e4,
r = Rt(t, ['tfdt'])[0],
t = new DataView(r.buffer, r.byteOffset, r.byteLength),
t = 1 === r[0] ? Kt(r.subarray(4, 12)) : t.getUint32(4)
return (
'bigint' == typeof t ? (i = t / qt.BigInt(n)) : 'number' != typeof t || isNaN(t) || (i = t / n), (e = (i = i < Number.MAX_SAFE_INTEGER ? Number(i) : i) < e ? i : e)
)
}, 1 / 0)
return 'bigint' == typeof e || isFinite(e) ? e : 0
},
e = function (e) {
var e = Rt(e, ['moov', 'trak']),
n = []
return (
e.forEach(function (e) {
var t = Rt(e, ['mdia', 'hdlr']),
i = Rt(e, ['tkhd'])
t.forEach(function (e, t) {
;(e = Ot(e.subarray(8, 12))), (t = i[t])
'vide' === e && ((t = 0 === (t = new DataView(t.buffer, t.byteOffset, t.byteLength)).getUint8(0) ? t.getUint32(12) : t.getUint32(20)), n.push(t))
})
}),
n
)
},
Yt = function (e) {
var t = 0 === e[0] ? 12 : 20
return zt((e[t] << 24) | (e[1 + t] << 16) | (e[2 + t] << 8) | e[3 + t])
},
q = function (e) {
var e = Rt(e, ['moov', 'trak']),
s = []
return (
e.forEach(function (e) {
var t = {},
i = Rt(e, ['tkhd'])[0]
i && ((i = (n = new DataView(i.buffer, i.byteOffset, i.byteLength)).getUint8(0)), (t.id = 0 === i ? n.getUint32(12) : n.getUint32(20)))
var n = Rt(e, ['mdia', 'hdlr'])[0]
n && ((a = Ot(n.subarray(8, 12))), (t.type = 'vide' === a ? 'video' : 'soun' === a ? 'audio' : a))
var r,
a = Rt(e, ['mdia', 'minf', 'stbl', 'stsd'])[0]
a &&
((a = a.subarray(8)),
(t.codec = Ot(a.subarray(4, 8))),
(a = Rt(a, [t.codec])[0]) &&
(/^[asm]vc[1-9]$/i.test(t.codec)
? ((r = a.subarray(78)),
'avcC' === Ot(r.subarray(4, 8)) && 11 < r.length
? ((t.codec += '.'), (t.codec += Xt(r[9])), (t.codec += Xt(r[10])), (t.codec += Xt(r[11])))
: (t.codec = 'avc1.4d400d'))
: /^mp4[a,v]$/i.test(t.codec)
? ((r = a.subarray(28)),
'esds' === Ot(r.subarray(4, 8)) && 20 < r.length && 0 !== r[19]
? ((t.codec += '.' + Xt(r[19])), (t.codec += '.' + Xt((r[20] >>> 2) & 63).replace(/^0/, '')))
: (t.codec = 'mp4a.40.2'))
: (t.codec = t.codec.toLowerCase())))
e = Rt(e, ['mdia', 'mdhd'])[0]
e && (t.timescale = Yt(e)), s.push(t)
}),
s
)
},
Qt = ke,
$t = q,
Jt = Ie,
Zt = {}
;(Zt.ts = {
parseType: function (e, t) {
e = xt(e)
return 0 === e ? 'pat' : e === t ? 'pmt' : t ? 'pes' : null
},
parsePat: function (e) {
var t = At(e),
i = 4 + Pt(e)
return t && (i += e[i] + 1), ((31 & e[i + 10]) << 8) | e[i + 11]
},
parsePmt: function (e) {
var t = {},
i = At(e),
n = 4 + Pt(e)
if ((i && (n += e[n] + 1), 1 & e[n + 5])) {
for (var r = 3 + (((15 & e[n + 1]) << 8) | e[n + 2]) - 4, a = 12 + (((15 & e[n + 10]) << 8) | e[n + 11]); a < r; ) {
var s = n + a
;(t[((31 & e[s + 1]) << 8) | e[s + 2]] = e[s]), (a += 5 + (((15 & e[s + 3]) << 8) | e[s + 4]))
}
return t
}
},
parsePayloadUnitStartIndicator: At,
parsePesType: function (e, t) {
switch (t[xt(e)]) {
case je.H264_STREAM_TYPE:
return 'video'
case je.ADTS_STREAM_TYPE:
return 'audio'
case je.METADATA_STREAM_TYPE:
return 'timed-metadata'
default:
return null
}
},
parsePesTime: function (e) {
if (!At(e)) return null
var t = 4 + Pt(e)
if (t >= e.byteLength) return null
var i = null,
n = e[t + 7]
return (
192 & n &&
(((i = {}).pts = ((14 & e[t + 9]) << 27) | ((255 & e[t + 10]) << 20) | ((254 & e[t + 11]) << 12) | ((255 & e[t + 12]) << 5) | ((254 & e[t + 13]) >>> 3)),
(i.pts *= 4),
(i.pts += (6 & e[t + 13]) >>> 1),
(i.dts = i.pts),
64 & n &&
((i.dts = ((14 & e[t + 14]) << 27) | ((255 & e[t + 15]) << 20) | ((254 & e[t + 16]) << 12) | ((255 & e[t + 17]) << 5) | ((254 & e[t + 18]) >>> 3)),
(i.dts *= 4),
(i.dts += (6 & e[t + 18]) >>> 1))),
i
)
},
videoPacketContainsKeyFrame: function (e) {
for (var t = 4 + Pt(e), i = e.subarray(t), n = 0, r = 0, a = !1; r < i.byteLength - 3; r++)
if (1 === i[r + 2]) {
n = r + 5
break
}
for (; n < i.byteLength; )
switch (i[n]) {
case 0:
if (0 !== i[n - 1]) {
n += 2
break
}
if (0 !== i[n - 2]) {
n++
break
}
for (r + 3 !== n - 2 && 'slice_layer_without_partitioning_rbsp_idr' === Lt(31 & i[r + 3]) && (a = !0); 1 !== i[++n] && n < i.length; );
;(r = n - 2), (n += 3)
break
case 1:
if (0 !== i[n - 1] || 0 !== i[n - 2]) {
n += 3
break
}
'slice_layer_without_partitioning_rbsp_idr' === Lt(31 & i[r + 3]) && (a = !0), (r = n - 2), (n += 3)
break
default:
n += 3
}
return (i = i.subarray(r)), (n -= r), (r = 0), (a = i && 3 < i.byteLength && 'slice_layer_without_partitioning_rbsp_idr' === Lt(31 & i[r + 3]) ? !0 : a)
},
}),
(Zt.aac = dt)
function ei(e, t, i) {
for (var n, r, a, s, o = 0, u = 188, l = !1; u <= e.byteLength; )
if (71 !== e[o] || (71 !== e[u] && u !== e.byteLength)) o++, u++
else {
if (
((n = e.subarray(o, u)),
'pes' === Zt.ts.parseType(n, t.pid) &&
((r = Zt.ts.parsePesType(n, t.table)),
(a = Zt.ts.parsePayloadUnitStartIndicator(n)),
'audio' === r && a && (s = Zt.ts.parsePesTime(n)) && ((s.type = 'audio'), i.audio.push(s), (l = !0))),
l)
)
break
;(o += 188), (u += 188)
}
for (o = (u = e.byteLength) - 188, l = !1; 0 <= o; )
if (71 !== e[o] || (71 !== e[u] && u !== e.byteLength)) o--, u--
else {
if (
((n = e.subarray(o, u)),
'pes' === Zt.ts.parseType(n, t.pid) &&
((r = Zt.ts.parsePesType(n, t.table)),
(a = Zt.ts.parsePayloadUnitStartIndicator(n)),
'audio' === r && a && (s = Zt.ts.parsePesTime(n)) && ((s.type = 'audio'), i.audio.push(s), (l = !0))),
l)
)
break
;(o -= 188), (u -= 188)
}
}
function ti(e) {
var t,
i = { pid: null, table: null },
n = {}
for (t in (!(function (e, t) {
for (var i, n = 0, r = 188; r < e.byteLength; )
if (71 !== e[n] || 71 !== e[r]) n++, r++
else {
switch (((i = e.subarray(n, r)), Zt.ts.parseType(i, t.pid))) {
case 'pat':
t.pid = Zt.ts.parsePat(i)
break
case 'pmt':
var a = Zt.ts.parsePmt(i)
;(t.table = t.table || {}),
Object.keys(a).forEach(function (e) {
t.table[e] = a[e]
})
}
;(n += 188), (r += 188)
}
})(e, i),
i.table))
if (i.table.hasOwnProperty(t))
switch (i.table[t]) {
case je.H264_STREAM_TYPE:
;(n.video = []),
(function (e, t, i) {
for (var n, r, a, s, o, u, l, c, d = 0, h = 188, p = !1, f = { data: [], size: 0 }; h < e.byteLength; )
if (71 !== e[d] || 71 !== e[h]) d++, h++
else {
if (((n = e.subarray(d, h)), 'pes' === Zt.ts.parseType(n, t.pid)))
if (
((r = Zt.ts.parsePesType(n, t.table)),
(a = Zt.ts.parsePayloadUnitStartIndicator(n)),
'video' === r && (a && !p && (s = Zt.ts.parsePesTime(n)) && ((s.type = 'video'), i.video.push(s), (p = !0)), !i.firstKeyFrame))
) {
if (a && 0 !== f.size) {
for (o = new Uint8Array(f.size), u = 0; f.data.length; ) (l = f.data.shift()), o.set(l, u), (u += l.byteLength)
!Zt.ts.videoPacketContainsKeyFrame(o) || ((c = Zt.ts.parsePesTime(o)) && ((i.firstKeyFrame = c), (i.firstKeyFrame.type = 'video'))),
(f.size = 0)
}
f.data.push(n), (f.size += n.byteLength)
}
if (p && i.firstKeyFrame) break
;(d += 188), (h += 188)
}
for (d = (h = e.byteLength) - 188, p = !1; 0 <= d; )
if (71 !== e[d] || 71 !== e[h]) d--, h--
else {
if (
((n = e.subarray(d, h)),
'pes' === Zt.ts.parseType(n, t.pid) &&
((r = Zt.ts.parsePesType(n, t.table)),
(a = Zt.ts.parsePayloadUnitStartIndicator(n)),
'video' === r && a && (s = Zt.ts.parsePesTime(n)) && ((s.type = 'video'), i.video.push(s), (p = !0))),
p)
)
break
;(d -= 188), (h -= 188)
}
})(e, i, n),
0 === n.video.length && delete n.video
break
case je.ADTS_STREAM_TYPE:
;(n.audio = []), ei(e, i, n), 0 === n.audio.length && delete n.audio
}
return n
}
var ii = ue,
ni = function (e, t) {
var i,
n,
r = (
Zt.aac.isLikelyAacData(e)
? function (e) {
for (var t, i = !1, n = 0, r = null, a = null, s = 0, o = 0; 3 <= e.length - o; ) {
switch (Zt.aac.parseType(e, o)) {
case 'timed-metadata':
if (e.length - o < 10) {
i = !0
break
}
if ((s = Zt.aac.parseId3TagSize(e, o)) > e.length) {
i = !0
break
}
null === a && ((t = e.subarray(o, o + s)), (a = Zt.aac.parseAacTimestamp(t))), (o += s)
break
case 'audio':
if (e.length - o < 7) {
i = !0
break
}
if ((s = Zt.aac.parseAdtsSize(e, o)) > e.length) {
i = !0
break
}
null === r && ((t = e.subarray(o, o + s)), (r = Zt.aac.parseSampleRate(t))), n++, (o += s)
break
default:
o++
}
if (i) return null
}
if (null === r || null === a) return null
var u = ii / r
return {
audio: [
{ type: 'audio', dts: a, pts: a },
{ type: 'audio', dts: a + 1024 * n * u, pts: a + 1024 * n * u },
],
}
}
: ti
)(e)
return r && (r.audio || r.video)
? ((e = t),
(t = r).audio &&
t.audio.length &&
(('undefined' != typeof (i = e) && !isNaN(i)) || (i = t.audio[0].dts),
t.audio.forEach(function (e) {
;(e.dts = Jt(e.dts, i)), (e.pts = Jt(e.pts, i)), (e.dtsTime = e.dts / ii), (e.ptsTime = e.pts / ii)
})),
t.video &&
t.video.length &&
(('undefined' != typeof (n = e) && !isNaN(n)) || (n = t.video[0].dts),
t.video.forEach(function (e) {
;(e.dts = Jt(e.dts, n)), (e.pts = Jt(e.pts, n)), (e.dtsTime = e.dts / ii), (e.ptsTime = e.pts / ii)
}),
t.firstKeyFrame && (((t = t.firstKeyFrame).dts = Jt(t.dts, n)), (t.pts = Jt(t.pts, n)), (t.dtsTime = t.dts / ii), (t.ptsTime = t.pts / ii))),
r)
: null
},
ri = (function () {
function e(e, t) {
;(this.options = t || {}), (this.self = e), this.init()
}
var t = e.prototype
return (
(t.init = function () {
var i, e
this.transmuxer && this.transmuxer.dispose(),
(this.transmuxer = new Dt.Transmuxer(this.options)),
(i = this.self),
(e = this.transmuxer).on('data', function (e) {
var t = e.initSegment
e.initSegment = { data: t.buffer, byteOffset: t.byteOffset, byteLength: t.byteLength }
t = e.data
;(e.data = t.buffer), i.postMessage({ action: 'data', segment: e, byteOffset: t.byteOffset, byteLength: t.byteLength }, [e.data])
}),
e.on('done', function (e) {
i.postMessage({ action: 'done' })
}),
e.on('gopInfo', function (e) {
i.postMessage({ action: 'gopInfo', gopInfo: e })
}),
e.on('videoSegmentTimingInfo', function (e) {
var t = {
start: { decode: ce(e.start.dts), presentation: ce(e.start.pts) },
end: { decode: ce(e.end.dts), presentation: ce(e.end.pts) },
baseMediaDecodeTime: ce(e.baseMediaDecodeTime),
}
e.prependedContentDuration && (t.prependedContentDuration = ce(e.prependedContentDuration)),
i.postMessage({ action: 'videoSegmentTimingInfo', videoSegmentTimingInfo: t })
}),
e.on('audioSegmentTimingInfo', function (e) {
var t = {
start: { decode: ce(e.start.dts), presentation: ce(e.start.pts) },
end: { decode: ce(e.end.dts), presentation: ce(e.end.pts) },
baseMediaDecodeTime: ce(e.baseMediaDecodeTime),
}
e.prependedContentDuration && (t.prependedContentDuration = ce(e.prependedContentDuration)),
i.postMessage({ action: 'audioSegmentTimingInfo', audioSegmentTimingInfo: t })
}),
e.on('id3Frame', function (e) {
i.postMessage({ action: 'id3Frame', id3Frame: e })
}),
e.on('caption', function (e) {
i.postMessage({ action: 'caption', caption: e })
}),
e.on('trackinfo', function (e) {
i.postMessage({ action: 'trackinfo', trackInfo: e })
}),
e.on('audioTimingInfo', function (e) {
i.postMessage({ action: 'audioTimingInfo', audioTimingInfo: { start: ce(e.start), end: ce(e.end) } })
}),
e.on('videoTimingInfo', function (e) {
i.postMessage({ action: 'videoTimingInfo', videoTimingInfo: { start: ce(e.start), end: ce(e.end) } })
}),
e.on('log', function (e) {
i.postMessage({ action: 'log', log: e })
})
}),
(t.pushMp4Captions = function (e) {
this.captionParser || ((this.captionParser = new Gt()), this.captionParser.init())
var t = new Uint8Array(e.data, e.byteOffset, e.byteLength),
e = this.captionParser.parse(t, e.trackIds, e.timescales)
this.self.postMessage({ action: 'mp4Captions', captions: (e && e.captions) || [], logs: (e && e.logs) || [], data: t.buffer }, [t.buffer])
}),
(t.probeMp4StartTime = function (e) {
var t = e.timescales,
e = e.data,
t = Qt(t, e)
this.self.postMessage({ action: 'probeMp4StartTime', startTime: t, data: e }, [e.buffer])
}),
(t.probeMp4Tracks = function (e) {
var t = e.data,
e = $t(t)
this.self.postMessage({ action: 'probeMp4Tracks', tracks: e, data: t }, [t.buffer])
}),
(t.probeTs = function (e) {
var t = e.data,
i = e.baseStartTime,
e = 'number' != typeof i || isNaN(i) ? void 0 : i * ue,
i = ni(t, e),
e = null
i &&
((e = { hasVideo: (i.video && 2 === i.video.length) || !1, hasAudio: (i.audio && 2 === i.audio.length) || !1 }).hasVideo && (e.videoStart = i.video[0].ptsTime),
e.hasAudio && (e.audioStart = i.audio[0].ptsTime)),
this.self.postMessage({ action: 'probeTs', result: e, data: t }, [t.buffer])
}),
(t.clearAllMp4Captions = function () {
this.captionParser && this.captionParser.clearAllCaptions()
}),
(t.clearParsedMp4Captions = function () {
this.captionParser && this.captionParser.clearParsedCaptions()
}),
(t.push = function (e) {
e = new Uint8Array(e.data, e.byteOffset, e.byteLength)
this.transmuxer.push(e)
}),
(t.reset = function () {
this.transmuxer.reset()
}),
(t.setTimestampOffset = function (e) {
e = e.timestampOffset || 0
this.transmuxer.setBaseMediaDecodeTime(Math.round(le(e)))
}),
(t.setAudioAppendStart = function (e) {
this.transmuxer.setAudioAppendStart(Math.ceil(le(e.appendStart)))
}),
(t.setRemux = function (e) {
this.transmuxer.setRemux(e.remux)
}),
(t.flush = function (e) {
this.transmuxer.flush(), self.postMessage({ action: 'done', type: 'transmuxed' })
}),
(t.endTimeline = function () {
this.transmuxer.endTimeline(), self.postMessage({ action: 'endedtimeline', type: 'transmuxed' })
}),
(t.alignGopsWith = function (e) {
this.transmuxer.alignGopsWith(e.gopsToAlignWith.slice())
}),
e
)
})()
self.onmessage = function (e) {
'init' === e.data.action && e.data.options
? (this.messageHandlers = new ri(self, e.data.options))
: (this.messageHandlers || (this.messageHandlers = new ri(self)),
e.data && e.data.action && 'init' !== e.data.action && this.messageHandlers[e.data.action] && this.messageHandlers[e.data.action](e.data))
}
})
)
),
Cl = function (e) {
;(e.currentTransmux = null), e.transmuxQueue.length && ((e.currentTransmux = e.transmuxQueue.shift()), 'function' == typeof e.currentTransmux ? e.currentTransmux() : Du(e.currentTransmux))
},
Il = function (e) {
Mu('reset', e)
},
xl = function (e) {
var t = new kl()
;(t.currentTransmux = null), (t.transmuxQueue = [])
var i = t.terminate
return (
(t.terminate = function () {
return (t.currentTransmux = null), (t.transmuxQueue.length = 0), i.call(t)
}),
t.postMessage({ action: 'init', options: e }),
t
)
},
Al = 2,
Pl = -101,
Ll = -102,
Dl = Ro('CodecUtils'),
Ol = Ro('PlaylistSelector'),
ar = function () {
var e = (this.useDevicePixelRatio && window.devicePixelRatio) || 1
return il(
this.playlists.master,
this.systemBandwidth,
parseInt(Zu(this.tech_.el(), 'width'), 10) * e,
parseInt(Zu(this.tech_.el(), 'height'), 10) * e,
this.limitRenditionByPlayerDimensions,
this.masterPlaylistController_
)
},
Ml = (function (n) {
function e(e, t) {
var i = n.call(this) || this
if (!e) throw new TypeError('Initialization settings are required')
if ('function' != typeof e.currentTime) throw new TypeError('No currentTime getter specified')
if (!e.mediaSource) throw new TypeError('No MediaSource specified')
return (
(i.bandwidth = e.bandwidth),
(i.throughput = { rate: 0, count: 0 }),
(i.roundTrip = NaN),
i.resetStats_(),
(i.mediaIndex = null),
(i.partIndex = null),
(i.hasPlayed_ = e.hasPlayed),
(i.currentTime_ = e.currentTime),
(i.seekable_ = e.seekable),
(i.seeking_ = e.seeking),
(i.duration_ = e.duration),
(i.mediaSource_ = e.mediaSource),
(i.vhs_ = e.vhs),
(i.loaderType_ = e.loaderType),
(i.currentMediaInfo_ = void 0),
(i.startingMediaInfo_ = void 0),
(i.segmentMetadataTrack_ = e.segmentMetadataTrack),
(i.goalBufferLength_ = e.goalBufferLength),
(i.sourceType_ = e.sourceType),
(i.sourceUpdater_ = e.sourceUpdater),
(i.inbandTextTracks_ = e.inbandTextTracks),
(i.state_ = 'INIT'),
(i.timelineChangeController_ = e.timelineChangeController),
(i.shouldSaveSegmentTimingInfo_ = !0),
(i.parse708captions_ = e.parse708captions),
(i.useDtsForTimestampOffset_ = e.useDtsForTimestampOffset),
(i.captionServices_ = e.captionServices),
(i.experimentalExactManifestTimings = e.experimentalExactManifestTimings),
(i.checkBufferTimeout_ = null),
(i.error_ = void 0),
(i.currentTimeline_ = -1),
(i.pendingSegment_ = null),
(i.xhrOptions_ = null),
(i.pendingSegments_ = []),
(i.audioDisabled_ = !1),
(i.isPendingTimestampOffset_ = !1),
(i.gopBuffer_ = []),
(i.timeMapping_ = 0),
(i.safeAppend_ = 11 <= tr.browser.IE_VERSION),
(i.appendInitSegment_ = { audio: !0, video: !0 }),
(i.playlistOfLastInitSegment_ = { audio: null, video: null }),
(i.callQueue_ = []),
(i.loadQueue_ = []),
(i.metadataQueue_ = { id3: [], caption: [] }),
(i.waitingOnRemove_ = !1),
(i.quotaExceededErrorRetryTimeout_ = null),
(i.activeInitSegmentId_ = null),
(i.initSegments_ = {}),
(i.cacheEncryptionKeys_ = e.cacheEncryptionKeys),
(i.keyCache_ = {}),
(i.decrypter_ = e.decrypter),
(i.syncController_ = e.syncController),
(i.syncPoint_ = { segmentIndex: 0, time: 0 }),
(i.transmuxer_ = i.createTransmuxer_()),
(i.triggerSyncInfoUpdate_ = function () {
return i.trigger('syncinfoupdate')
}),
i.syncController_.on('syncinfoupdate', i.triggerSyncInfoUpdate_),
i.mediaSource_.addEventListener('sourceopen', function () {
i.isEndOfStream_() || (i.ended_ = !1)
}),
(i.fetchAtBuffer_ = !1),
(i.logger_ = Ro('SegmentLoader[' + i.loaderType_ + ']')),
Object.defineProperty(ft(i), 'state', {
get: function () {
return this.state_
},
set: function (e) {
e !== this.state_ && (this.logger_(this.state_ + ' -> ' + e), (this.state_ = e), this.trigger('statechange'))
},
}),
i.sourceUpdater_.on('ready', function () {
i.hasEnoughInfoToAppend_() && i.processCallQueue_()
}),
'main' === i.loaderType_ &&
i.timelineChangeController_.on('pendingtimelinechange', function () {
i.hasEnoughInfoToAppend_() && i.processCallQueue_()
}),
'audio' === i.loaderType_ &&
i.timelineChangeController_.on('timelinechange', function () {
i.hasEnoughInfoToLoad_() && i.processLoadQueue_(), i.hasEnoughInfoToAppend_() && i.processCallQueue_()
}),
i
)
}
mt(e, n)
var t = e.prototype
return (
(t.createTransmuxer_ = function () {
return xl({ remux: !1, alignGopsAtEnd: this.safeAppend_, keepOriginalTimestamps: !0, parse708captions: this.parse708captions_, captionServices: this.captionServices_ })
}),
(t.resetStats_ = function () {
;(this.mediaBytesTransferred = 0),
(this.mediaRequests = 0),
(this.mediaRequestsAborted = 0),
(this.mediaRequestsTimedout = 0),
(this.mediaRequestsErrored = 0),
(this.mediaTransferDuration = 0),
(this.mediaSecondsLoaded = 0),
(this.mediaAppends = 0)
}),
(t.dispose = function () {
this.trigger('dispose'),
(this.state = 'DISPOSED'),
this.pause(),
this.abort_(),
this.transmuxer_ && this.transmuxer_.terminate(),
this.resetStats_(),
this.checkBufferTimeout_ && window.clearTimeout(this.checkBufferTimeout_),
this.syncController_ && this.triggerSyncInfoUpdate_ && this.syncController_.off('syncinfoupdate', this.triggerSyncInfoUpdate_),
this.off()
}),
(t.setAudio = function (e) {
;(this.audioDisabled_ = !e), e ? (this.appendInitSegment_.audio = !0) : this.sourceUpdater_.removeAudio(0, this.duration_())
}),
(t.abort = function () {
'WAITING' === this.state ? (this.abort_(), (this.state = 'READY'), this.paused() || this.monitorBuffer_()) : this.pendingSegment_ && (this.pendingSegment_ = null)
}),
(t.abort_ = function () {
this.pendingSegment_ && this.pendingSegment_.abortRequests && this.pendingSegment_.abortRequests(),
(this.pendingSegment_ = null),
(this.callQueue_ = []),
(this.loadQueue_ = []),
(this.metadataQueue_.id3 = []),
(this.metadataQueue_.caption = []),
this.timelineChangeController_.clearPendingTimelineChange(this.loaderType_),
(this.waitingOnRemove_ = !1),
window.clearTimeout(this.quotaExceededErrorRetryTimeout_),
(this.quotaExceededErrorRetryTimeout_ = null)
}),
(t.checkForAbort_ = function (e) {
return 'APPENDING' !== this.state || this.pendingSegment_ ? !this.pendingSegment_ || this.pendingSegment_.requestId !== e : ((this.state = 'READY'), !0)
}),
(t.error = function (e) {
return 'undefined' != typeof e && (this.logger_('error occurred:', e), (this.error_ = e)), (this.pendingSegment_ = null), this.error_
}),
(t.endOfStream = function () {
;(this.ended_ = !0), this.transmuxer_ && Il(this.transmuxer_), (this.gopBuffer_.length = 0), this.pause(), this.trigger('ended')
}),
(t.buffered_ = function () {
var e = this.getMediaInfo_()
if (!this.sourceUpdater_ || !e) return tr.createTimeRanges()
if ('main' === this.loaderType_) {
var t = e.hasAudio,
i = e.hasVideo,
e = e.isMuxed
if (i && t && !this.audioDisabled_ && !e) return this.sourceUpdater_.buffered()
if (i) return this.sourceUpdater_.videoBuffered()
}
return this.sourceUpdater_.audioBuffered()
}),
(t.initSegmentForMap = function (e, t) {
if ((void 0 === t && (t = !1), !e)) return null
var i = Su(e),
n = this.initSegments_[i]
return (
t && !n && e.bytes && (this.initSegments_[i] = n = { resolvedUri: e.resolvedUri, byterange: e.byterange, bytes: e.bytes, tracks: e.tracks, timescales: e.timescales }), n || e
)
}),
(t.segmentKey = function (e, t) {
if ((void 0 === t && (t = !1), !e)) return null
var i = wu(e),
n = this.keyCache_[i]
this.cacheEncryptionKeys_ && t && !n && e.bytes && (this.keyCache_[i] = n = { resolvedUri: e.resolvedUri, bytes: e.bytes })
e = { resolvedUri: (n || e).resolvedUri }
return n && (e.bytes = n.bytes), e
}),
(t.couldBeginLoading_ = function () {
return this.playlist_ && !this.paused()
}),
(t.load = function () {
if ((this.monitorBuffer_(), this.playlist_))
return 'INIT' === this.state && this.couldBeginLoading_()
? this.init_()
: void (!this.couldBeginLoading_() || ('READY' !== this.state && 'INIT' !== this.state) || (this.state = 'READY'))
}),
(t.init_ = function () {
return (this.state = 'READY'), this.resetEverything(), this.monitorBuffer_()
}),
(t.playlist = function (e, t) {
if ((void 0 === t && (t = {}), e)) {
var i = this.playlist_,
n = this.pendingSegment_
;(this.playlist_ = e),
(this.xhrOptions_ = t),
'INIT' === this.state && ((e.syncInfo = { mediaSequence: e.mediaSequence, time: 0 }), 'main' === this.loaderType_ && this.syncController_.setDateTimeMappingForStart(e))
var r = null
if (
(i && (i.id ? (r = i.id) : i.uri && (r = i.uri)),
this.logger_('playlist update [' + r + ' => ' + (e.id || e.uri) + ']'),
this.trigger('syncinfoupdate'),
'INIT' === this.state && this.couldBeginLoading_())
)
return this.init_()
if (!i || i.uri !== e.uri)
return null !== this.mediaIndex && (e.endList ? this.resyncLoader() : this.resetLoader()), (this.currentMediaInfo_ = void 0), void this.trigger('playlistupdate')
t = e.mediaSequence - i.mediaSequence
this.logger_('live window shift [' + t + ']'),
null !== this.mediaIndex &&
((this.mediaIndex -= t),
this.mediaIndex < 0
? ((this.mediaIndex = null), (this.partIndex = null))
: ((r = this.playlist_.segments[this.mediaIndex]),
!this.partIndex ||
(r.parts && r.parts.length && r.parts[this.partIndex]) ||
((r = this.mediaIndex),
this.logger_('currently processing part (index ' + this.partIndex + ') no longer exists.'),
this.resetLoader(),
(this.mediaIndex = r)))),
n &&
((n.mediaIndex -= t),
n.mediaIndex < 0
? ((n.mediaIndex = null), (n.partIndex = null))
: (0 <= n.mediaIndex && (n.segment = e.segments[n.mediaIndex]), 0 <= n.partIndex && n.segment.parts && (n.part = n.segment.parts[n.partIndex]))),
this.syncController_.saveExpiredSegmentInfo(i, e)
}
}),
(t.pause = function () {
this.checkBufferTimeout_ && (window.clearTimeout(this.checkBufferTimeout_), (this.checkBufferTimeout_ = null))
}),
(t.paused = function () {
return null === this.checkBufferTimeout_
}),
(t.resetEverything = function (e) {
;(this.ended_ = !1),
(this.appendInitSegment_ = { audio: !0, video: !0 }),
this.resetLoader(),
this.remove(0, 1 / 0, e),
this.transmuxer_ && (this.transmuxer_.postMessage({ action: 'clearAllMp4Captions' }), this.transmuxer_.postMessage({ action: 'reset' }))
}),
(t.resetLoader = function () {
;(this.fetchAtBuffer_ = !1), this.resyncLoader()
}),
(t.resyncLoader = function () {
this.transmuxer_ && Il(this.transmuxer_),
(this.mediaIndex = null),
(this.partIndex = null),
(this.syncPoint_ = null),
(this.isPendingTimestampOffset_ = !1),
(this.callQueue_ = []),
(this.loadQueue_ = []),
(this.metadataQueue_.id3 = []),
(this.metadataQueue_.caption = []),
this.abort(),
this.transmuxer_ && this.transmuxer_.postMessage({ action: 'clearParsedMp4Captions' })
}),
(t.remove = function (e, t, i, n) {
if ((void 0 === i && (i = function () {}), void 0 === n && (n = !1), (t = t === 1 / 0 ? this.duration_() : t) <= e))
this.logger_('skipping remove because end ${end} is <= start ${start}')
else if (this.sourceUpdater_ && this.getMediaInfo_()) {
var r,
a = 1,
s = function () {
0 === --a && i()
}
for (r in ((!n && this.audioDisabled_) || (a++, this.sourceUpdater_.removeAudio(e, t, s)),
(!n && 'main' !== this.loaderType_) ||
((this.gopBuffer_ = (function (e, t, i, n) {
for (var r = Math.ceil((t - n) * hl), a = Math.ceil((i - n) * hl), n = e.slice(), s = e.length; s-- && !(e[s].pts <= a); );
if (-1 === s) return n
for (var o = s + 1; o-- && !(e[o].pts <= r); );
return (o = Math.max(o, 0)), n.splice(o, s - o + 1), n
})(this.gopBuffer_, e, t, this.timeMapping_)),
a++,
this.sourceUpdater_.removeVideo(e, t, s)),
this.inbandTextTracks_))
rl(e, t, this.inbandTextTracks_[r])
rl(e, t, this.segmentMetadataTrack_), s()
} else this.logger_('skipping remove because no source updater or starting media info')
}),
(t.monitorBuffer_ = function () {
this.checkBufferTimeout_ && window.clearTimeout(this.checkBufferTimeout_), (this.checkBufferTimeout_ = window.setTimeout(this.monitorBufferTick_.bind(this), 1))
}),
(t.monitorBufferTick_ = function () {
'READY' === this.state && this.fillBuffer_(),
this.checkBufferTimeout_ && window.clearTimeout(this.checkBufferTimeout_),
(this.checkBufferTimeout_ = window.setTimeout(this.monitorBufferTick_.bind(this), 500))
}),
(t.fillBuffer_ = function () {
var e
this.sourceUpdater_.updating() ||
((e = this.chooseNextRequest_()) &&
('number' == typeof e.timestampOffset &&
((this.isPendingTimestampOffset_ = !1), this.timelineChangeController_.pendingTimelineChange({ type: this.loaderType_, from: this.currentTimeline_, to: e.timeline })),
this.loadSegment_(e)))
}),
(t.isEndOfStream_ = function (e, t, i) {
if ((void 0 === e && (e = this.mediaIndex), void 0 === t && (t = this.playlist_), void 0 === i && (i = this.partIndex), !t || !this.mediaSource_)) return !1
var n = 'number' == typeof e && t.segments[e],
e = e + 1 === t.segments.length,
n = !n || !n.parts || i + 1 === n.parts.length
return t.endList && 'open' === this.mediaSource_.readyState && e && n
}),
(t.chooseNextRequest_ = function () {
var e = this.buffered_(),
t = Ho(e) || 0,
i = qo(e, this.currentTime_()),
n = !this.hasPlayed_() && 1 <= i,
r = i >= this.goalBufferLength_(),
e = this.playlist_.segments
if (!e.length || n || r) return null
this.syncPoint_ = this.syncPoint_ || this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_())
var a,
n = { partIndex: null, mediaIndex: null, startOfSegment: null, playlist: this.playlist_, isSyncRequest: Boolean(!this.syncPoint_) }
n.isSyncRequest
? (n.mediaIndex = (function (e, t, i) {
t = t || []
for (var n = [], r = 0, a = 0; a < t.length; a++) {
var s = t[a]
if (e === s.timeline && (n.push(a), i < (r += s.duration))) return a
}
return 0 === n.length ? 0 : n[n.length - 1]
})(this.currentTimeline_, e, t))
: null !== this.mediaIndex
? ((r = e[this.mediaIndex]),
(a = 'number' == typeof this.partIndex ? this.partIndex : -1),
(n.startOfSegment = r.end || t),
r.parts && r.parts[a + 1] ? ((n.mediaIndex = this.mediaIndex), (n.partIndex = a + 1)) : (n.mediaIndex = this.mediaIndex + 1))
: ((a = (o = gl.getMediaInfoForTime({
experimentalExactManifestTimings: this.experimentalExactManifestTimings,
playlist: this.playlist_,
currentTime: this.fetchAtBuffer_ ? t : this.currentTime_(),
startingPartIndex: this.syncPoint_.partIndex,
startingSegmentIndex: this.syncPoint_.segmentIndex,
startTime: this.syncPoint_.time,
})).segmentIndex),
(s = o.startTime),
(o = o.partIndex),
(n.getMediaInfoForTime = this.fetchAtBuffer_ ? 'bufferedEnd ' + t : 'currentTime ' + this.currentTime_()),
(n.mediaIndex = a),
(n.startOfSegment = s),
(n.partIndex = o))
var s = e[n.mediaIndex],
o = s && 'number' == typeof n.partIndex && s.parts && s.parts[n.partIndex]
if (!s || ('number' == typeof n.partIndex && !o)) return null
'number' != typeof n.partIndex && s.parts && ((n.partIndex = 0), (o = s.parts[0])),
i ||
!o ||
o.independent ||
(0 === n.partIndex
? (o = (i = e[n.mediaIndex - 1]).parts && i.parts.length && i.parts[i.parts.length - 1]) &&
o.independent &&
(--n.mediaIndex, (n.partIndex = i.parts.length - 1), (n.independent = 'previous segment'))
: s.parts[n.partIndex - 1].independent && (--n.partIndex, (n.independent = 'previous part')))
s = this.mediaSource_ && 'ended' === this.mediaSource_.readyState
return n.mediaIndex >= e.length - 1 && s && !this.seeking_() ? null : this.generateSegmentInfo_(n)
}),
(t.generateSegmentInfo_ = function (e) {
var t = e.independent,
i = e.playlist,
n = e.mediaIndex,
r = e.startOfSegment,
a = e.isSyncRequest,
s = e.partIndex,
o = e.forceTimestampOffset,
u = e.getMediaInfoForTime,
l = i.segments[n],
e = 'number' == typeof s && l.parts[s],
t = {
requestId: 'segment-loader-' + Math.random(),
uri: (e && e.resolvedUri) || l.resolvedUri,
mediaIndex: n,
partIndex: e ? s : null,
isSyncRequest: a,
startOfSegment: r,
playlist: i,
bytes: null,
encryptedBytes: null,
timestampOffset: null,
timeline: l.timeline,
duration: (e && e.duration) || l.duration,
segment: l,
part: e,
byteLength: 0,
transmuxer: this.transmuxer_,
getMediaInfoForTime: u,
independent: t,
},
o = 'undefined' != typeof o ? o : this.isPendingTimestampOffset_
t.timestampOffset = this.timestampOffsetForSegment_({
segmentTimeline: l.timeline,
currentTimeline: this.currentTimeline_,
startOfSegment: r,
buffered: this.buffered_(),
overrideCheck: o,
})
o = Ho(this.sourceUpdater_.audioBuffered())
return (
'number' == typeof o && (t.audioAppendStart = o - this.sourceUpdater_.audioTimestampOffset()),
this.sourceUpdater_.videoBuffered().length &&
(t.gopsToAlignWith = (function (e, t, i) {
if ('undefined' == typeof t || null === t || !e.length) return []
for (var n = Math.ceil((t - i + 3) * hl), r = 0; r < e.length && !(e[r].pts > n); r++);
return e.slice(r)
})(this.gopBuffer_, this.currentTime_() - this.sourceUpdater_.videoTimestampOffset(), this.timeMapping_)),
t
)
}),
(t.timestampOffsetForSegment_ = function (e) {
return (
(i = (t = e).segmentTimeline),
(n = t.currentTimeline),
(r = t.startOfSegment),
(e = t.buffered),
t.overrideCheck || i !== n ? (!(i < n) && e.length ? e.end(e.length - 1) : r) : null
)
var t, i, n, r
}),
(t.earlyAbortWhenNeeded_ = function (e) {
var t, i, n, r, a, s, o, u, l, c, d, h, p
!this.vhs_.tech_.paused() &&
this.xhrOptions_.timeout &&
this.playlist_.attributes.BANDWIDTH &&
(Date.now() - (e.firstBytesReceivedAt || Date.now()) < 1e3 ||
((t = this.currentTime_()),
(r = e.bandwidth),
(a = this.pendingSegment_.duration),
(p = gl.estimateSegmentRequestTime(a, r, this.playlist_, e.bytesReceived)),
(i = this.buffered_()),
(n = t),
void 0 === (e = this.vhs_.tech_.playbackRate()) && (e = 1),
p <= (e = ((i.length ? i.end(i.length - 1) : 0) - n) / e - 1) ||
((r = {
master: this.vhs_.playlists.master,
currentTime: t,
bandwidth: r,
duration: this.duration_(),
segmentDuration: a,
timeUntilRebuffer: e,
currentTimeline: this.currentTimeline_,
syncController: this.syncController_,
}),
(a = r.master),
(s = r.currentTime),
(o = r.bandwidth),
(u = r.duration),
(l = r.segmentDuration),
(c = r.timeUntilRebuffer),
(d = r.currentTimeline),
(h = r.syncController),
(a = (r = (a = !(a = (r = a.playlists.filter(function (e) {
return !gl.isIncompatible(e)
})).filter(gl.isEnabled)).length
? r.filter(function (e) {
return !gl.isDisabled(e)
})
: a)
.filter(gl.hasAttribute.bind(null, 'BANDWIDTH'))
.map(function (e) {
var t = h.getSyncPoint(e, u, d, s) ? 1 : 2
return { playlist: e, rebufferingImpact: gl.estimateSegmentRequestTime(l, o, e) * t - c }
})).filter(function (e) {
return e.rebufferingImpact <= 0
})),
el(a, function (e, t) {
return tl(t.playlist, e.playlist)
}),
(r = a.length
? a[0]
: (el(r, function (e, t) {
return e.rebufferingImpact - t.rebufferingImpact
}),
r[0] || null)) &&
((p = p - e - r.rebufferingImpact),
!r.playlist ||
r.playlist.uri === this.playlist_.uri ||
p < (e <= fl ? 1 : 0.5) ||
((this.bandwidth = r.playlist.attributes.BANDWIDTH * El.BANDWIDTH_VARIANCE + 1), this.trigger('earlyabort'))))))
}),
(t.handleAbort_ = function (e) {
this.logger_('Aborting ' + sl(e)), (this.mediaRequestsAborted += 1)
}),
(t.handleProgress_ = function (e, t) {
this.earlyAbortWhenNeeded_(t.stats), this.checkForAbort_(t.requestId) || this.trigger('progress')
}),
(t.handleTrackInfo_ = function (e, t) {
this.earlyAbortWhenNeeded_(e.stats),
this.checkForAbort_(e.requestId) ||
this.checkForIllegalMediaSwitch(t) ||
((function (e, t) {
if ((!e && !t) || (!e && t) || (e && !t)) return !1
if (e === t) return !0
var i = Object.keys(e).sort(),
n = Object.keys(t).sort()
if (i.length !== n.length) return !1
for (var r = 0; r < i.length; r++) {
var a = i[r]
if (a !== n[r]) return !1
if (e[a] !== t[a]) return !1
}
return !0
})(this.currentMediaInfo_, (t = t || {})) ||
((this.appendInitSegment_ = { audio: !0, video: !0 }),
(this.startingMediaInfo_ = t),
(this.currentMediaInfo_ = t),
this.logger_('trackinfo update', t),
this.trigger('trackinfo')),
this.checkForAbort_(e.requestId) || ((this.pendingSegment_.trackInfo = t), this.hasEnoughInfoToAppend_() && this.processCallQueue_()))
}),
(t.handleTimingInfo_ = function (e, t, i, n) {
var r
this.earlyAbortWhenNeeded_(e.stats),
this.checkForAbort_(e.requestId) ||
(((r = this.pendingSegment_)[(e = ol(t))] = r[e] || {}),
(r[e][i] = n),
this.logger_('timinginfo: ' + t + ' - ' + i + ' - ' + n),
this.hasEnoughInfoToAppend_() && this.processCallQueue_())
}),
(t.handleCaptions_ = function (e, t) {
var g,
y,
v = this
this.earlyAbortWhenNeeded_(e.stats),
this.checkForAbort_(e.requestId) ||
(0 !== t.length
? this.pendingSegment_.hasAppendedData_
? ((g = null === this.sourceUpdater_.videoTimestampOffset() ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset()),
(y = {}),
t.forEach(function (e) {
y[e.stream] = y[e.stream] || { startTime: 1 / 0, captions: [], endTime: 0 }
var t = y[e.stream]
;(t.startTime = Math.min(t.startTime, e.startTime + g)), (t.endTime = Math.max(t.endTime, e.endTime + g)), t.captions.push(e)
}),
Object.keys(y).forEach(function (e) {
var t,
i,
n,
r,
a,
s,
o,
u,
l,
c,
d = y[e],
h = d.startTime,
p = d.endTime,
f = d.captions,
m = v.inbandTextTracks_
v.logger_('adding cues from ' + h + ' -> ' + p + ' for ' + e),
(t = m),
(i = v.vhs_.tech_),
t[(n = e)] ||
(i.trigger({ type: 'usage', name: 'vhs-608' }),
i.trigger({ type: 'usage', name: 'hls-608' }),
/^cc708_/.test((r = n)) && (r = 'SERVICE' + n.split('_')[1]),
(o = i.textTracks().getTrackById(r))
? (t[n] = o)
: ((s = a = n),
(d = !1),
(o = ((i.options_.vhs && i.options_.vhs.captionServices) || {})[r]) && ((a = o.label), (s = o.language), (d = o.default)),
(t[n] = i.addRemoteTextTrack({ kind: 'captions', id: r, default: d, label: a, language: s }, !1).track))),
rl(h, p, m[e]),
(l = (f = { captionArray: f, inbandTextTracks: m, timestampOffset: g }).inbandTextTracks),
(m = f.captionArray),
(c = f.timestampOffset),
m &&
((u = window.WebKitDataCue || window.VTTCue),
m.forEach(function (e) {
var t = e.stream
l[t].addCue(new u(e.startTime + c, e.endTime + c, e.text))
}))
}),
this.transmuxer_ && this.transmuxer_.postMessage({ action: 'clearParsedMp4Captions' }))
: this.metadataQueue_.caption.push(this.handleCaptions_.bind(this, e, t))
: this.logger_('SegmentLoader received no captions from a caption event'))
}),
(t.handleId3_ = function (e, t, i) {
var n, r, a, s
this.earlyAbortWhenNeeded_(e.stats),
this.checkForAbort_(e.requestId) ||
(this.pendingSegment_.hasAppendedData_
? ((n = null === this.sourceUpdater_.videoTimestampOffset() ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset()),
(r = this.inbandTextTracks_),
(a = i),
(s = this.vhs_.tech_),
r.metadataTrack_ ||
((r.metadataTrack_ = s.addRemoteTextTrack({ kind: 'metadata', label: 'Timed Metadata' }, !1).track), (r.metadataTrack_.inBandMetadataTrackDispatchType = a)),
nl({ inbandTextTracks: this.inbandTextTracks_, metadataArray: t, timestampOffset: n, videoDuration: this.duration_() }))
: this.metadataQueue_.id3.push(this.handleId3_.bind(this, e, t, i)))
}),
(t.processMetadataQueue_ = function () {
this.metadataQueue_.id3.forEach(function (e) {
return e()
}),
this.metadataQueue_.caption.forEach(function (e) {
return e()
}),
(this.metadataQueue_.id3 = []),
(this.metadataQueue_.caption = [])
}),
(t.processCallQueue_ = function () {
var e = this.callQueue_
;(this.callQueue_ = []),
e.forEach(function (e) {
return e()
})
}),
(t.processLoadQueue_ = function () {
var e = this.loadQueue_
;(this.loadQueue_ = []),
e.forEach(function (e) {
return e()
})
}),
(t.hasEnoughInfoToLoad_ = function () {
if ('audio' !== this.loaderType_) return !0
var e = this.pendingSegment_
return (
!!e &&
(!this.getCurrentMediaInfo_() ||
!ul({
timelineChangeController: this.timelineChangeController_,
currentTimeline: this.currentTimeline_,
segmentTimeline: e.timeline,
loaderType: this.loaderType_,
audioDisabled: this.audioDisabled_,
}))
)
}),
(t.getCurrentMediaInfo_ = function (e) {
return ((e = void 0 === e ? this.pendingSegment_ : e) && e.trackInfo) || this.currentMediaInfo_
}),
(t.getMediaInfo_ = function (e) {
return void 0 === e && (e = this.pendingSegment_), this.getCurrentMediaInfo_(e) || this.startingMediaInfo_
}),
(t.hasEnoughInfoToAppend_ = function () {
if (!this.sourceUpdater_.ready()) return !1
if (this.waitingOnRemove_ || this.quotaExceededErrorRetryTimeout_) return !1
var e = this.pendingSegment_,
t = this.getCurrentMediaInfo_()
if (!e || !t) return !1
var i = t.hasAudio,
n = t.hasVideo,
t = t.isMuxed
return (
!(n && !e.videoTimingInfo) &&
!(i && !this.audioDisabled_ && !t && !e.audioTimingInfo) &&
!ul({
timelineChangeController: this.timelineChangeController_,
currentTimeline: this.currentTimeline_,
segmentTimeline: e.timeline,
loaderType: this.loaderType_,
audioDisabled: this.audioDisabled_,
})
)
}),
(t.handleData_ = function (e, t) {
if ((this.earlyAbortWhenNeeded_(e.stats), !this.checkForAbort_(e.requestId)))
if (!this.callQueue_.length && this.hasEnoughInfoToAppend_()) {
var i,
n = this.pendingSegment_
if ((this.setTimeMapping_(n.timeline), this.updateMediaSecondsLoaded_(n.part || n.segment), 'closed' !== this.mediaSource_.readyState)) {
if (
(e.map && ((e.map = this.initSegmentForMap(e.map, !0)), (n.segment.map = e.map)),
e.key && this.segmentKey(e.key, !0),
(n.isFmp4 = e.isFmp4),
(n.timingInfo = n.timingInfo || {}),
n.isFmp4
? (this.trigger('fmp4'), (n.timingInfo.start = n[ol(t.type)].start))
: ((i = this.getCurrentMediaInfo_()),
(i = 'main' === this.loaderType_ && i && i.hasVideo) && (r = n.videoTimingInfo.start),
(n.timingInfo.start = this.trueSegmentStart_({
currentStart: n.timingInfo.start,
playlist: n.playlist,
mediaIndex: n.mediaIndex,
currentVideoTimestampOffset: this.sourceUpdater_.videoTimestampOffset(),
useVideoTimingInfo: i,
firstVideoFrameTimeForData: r,
videoTimingInfo: n.videoTimingInfo,
audioTimingInfo: n.audioTimingInfo,
}))),
this.updateAppendInitSegmentStatus(n, t.type),
this.updateSourceBufferTimestampOffset_(n),
n.isSyncRequest)
) {
this.updateTimingInfoEnd_(n), this.syncController_.saveSegmentTimingInfo({ segmentInfo: n, shouldSaveTimelineMapping: 'main' === this.loaderType_ })
var r = this.chooseNextRequest_()
if (r.mediaIndex !== n.mediaIndex || r.partIndex !== n.partIndex) return void this.logger_('sync segment was incorrect, not appending')
this.logger_('sync segment was correct, appending')
}
;(n.hasAppendedData_ = !0), this.processMetadataQueue_(), this.appendData_(n, t)
}
} else this.callQueue_.push(this.handleData_.bind(this, e, t))
}),
(t.updateAppendInitSegmentStatus = function (e, t) {
'main' !== this.loaderType_ || 'number' != typeof e.timestampOffset || e.changedTimestampOffset || (this.appendInitSegment_ = { audio: !0, video: !0 }),
this.playlistOfLastInitSegment_[t] !== e.playlist && (this.appendInitSegment_[t] = !0)
}),
(t.getInitSegmentAndUpdateState_ = function (e) {
var t = e.type,
i = e.initSegment,
n = e.map,
r = e.playlist
if (n) {
e = Su(n)
if (this.activeInitSegmentId_ === e) return null
;(i = this.initSegmentForMap(n, !0).bytes), (this.activeInitSegmentId_ = e)
}
return i && this.appendInitSegment_[t] ? ((this.playlistOfLastInitSegment_[t] = r), (this.appendInitSegment_[t] = !1), (this.activeInitSegmentId_ = null), i) : null
}),
(t.handleQuotaExceededError_ = function (e, t) {
var i = this,
n = e.segmentInfo,
r = e.type,
a = e.bytes,
s = this.sourceUpdater_.audioBuffered(),
o = this.sourceUpdater_.videoBuffered()
1 < s.length && this.logger_('On QUOTA_EXCEEDED_ERR, found gaps in the audio buffer: ' + jo(s).join(', ')),
1 < o.length && this.logger_('On QUOTA_EXCEEDED_ERR, found gaps in the video buffer: ' + jo(o).join(', '))
var u = s.length ? s.start(0) : 0,
l = s.length ? s.end(s.length - 1) : 0,
c = o.length ? o.start(0) : 0,
e = o.length ? o.end(o.length - 1) : 0
if (l - u <= 1 && e - c <= 1)
return (
this.logger_(
'On QUOTA_EXCEEDED_ERR, single segment too large to append to buffer, triggering an error. Appended byte length: ' +
a.byteLength +
', audio buffer: ' +
jo(s).join(', ') +
', video buffer: ' +
jo(o).join(', ') +
', '
),
this.error({ message: 'Quota exceeded error with append of a single segment of content', excludeUntil: 1 / 0 }),
void this.trigger('error')
)
;(this.waitingOnRemove_ = !0), this.callQueue_.push(this.appendToSourceBuffer_.bind(this, { segmentInfo: n, type: r, bytes: a }))
a = this.currentTime_() - 1
this.logger_('On QUOTA_EXCEEDED_ERR, removing audio/video from 0 to ' + a),
this.remove(
0,
a,
function () {
i.logger_('On QUOTA_EXCEEDED_ERR, retrying append in 1s'),
(i.waitingOnRemove_ = !1),
(i.quotaExceededErrorRetryTimeout_ = window.setTimeout(function () {
i.logger_('On QUOTA_EXCEEDED_ERR, re-processing call queue'), (i.quotaExceededErrorRetryTimeout_ = null), i.processCallQueue_()
}, 1e3))
},
!0
)
}),
(t.handleAppendError_ = function (e, t) {
var i = e.segmentInfo,
n = e.type,
e = e.bytes
t &&
(22 !== t.code
? (this.logger_('Received non QUOTA_EXCEEDED_ERR on append', t),
this.error(n + ' append of ' + e.length + 'b failed for segment #' + i.mediaIndex + ' in playlist ' + i.playlist.id),
this.trigger('appenderror'))
: this.handleQuotaExceededError_({ segmentInfo: i, type: n, bytes: e }))
}),
(t.appendToSourceBuffer_ = function (e) {
var t,
i,
n = e.segmentInfo,
r = e.type,
a = e.initSegment,
s = e.data,
o = e.bytes
o ||
((e = [s]),
(s = s.byteLength),
a && (e.unshift(a), (s += a.byteLength)),
(i = 0),
(e = { bytes: s, segments: e }).bytes &&
((t = new Uint8Array(e.bytes)),
e.segments.forEach(function (e) {
t.set(e, i), (i += e.byteLength)
})),
(o = t)),
this.sourceUpdater_.appendBuffer({ segmentInfo: n, type: r, bytes: o }, this.handleAppendError_.bind(this, { segmentInfo: n, type: r, bytes: o }))
}),
(t.handleSegmentTimingInfo_ = function (e, t, i) {
this.pendingSegment_ &&
t === this.pendingSegment_.requestId &&
((t = this.pendingSegment_.segment)[(e = e + 'TimingInfo')] || (t[e] = {}),
(t[e].transmuxerPrependedSeconds = i.prependedContentDuration || 0),
(t[e].transmuxedPresentationStart = i.start.presentation),
(t[e].transmuxedDecodeStart = i.start.decode),
(t[e].transmuxedPresentationEnd = i.end.presentation),
(t[e].transmuxedDecodeEnd = i.end.decode),
(t[e].baseMediaDecodeTime = i.baseMediaDecodeTime))
}),
(t.appendData_ = function (e, t) {
var i = t.type,
n = t.data
n &&
n.byteLength &&
(('audio' === i && this.audioDisabled_) ||
((t = this.getInitSegmentAndUpdateState_({ type: i, initSegment: t.initSegment, playlist: e.playlist, map: e.isFmp4 ? e.segment.map : null })),
this.appendToSourceBuffer_({ segmentInfo: e, type: i, initSegment: t, data: n })))
}),
(t.loadSegment_ = function (t) {
var i = this
;(this.state = 'WAITING'),
(this.pendingSegment_ = t),
this.trimBackBuffer_(t),
'number' == typeof t.timestampOffset && this.transmuxer_ && this.transmuxer_.postMessage({ action: 'clearAllMp4Captions' }),
this.hasEnoughInfoToLoad_()
? this.updateTransmuxerAndRequestSegment_(t)
: this.loadQueue_.push(function () {
var e = g({}, t, { forceTimestampOffset: !0 })
g(t, i.generateSegmentInfo_(e)), (i.isPendingTimestampOffset_ = !1), i.updateTransmuxerAndRequestSegment_(t)
})
}),
(t.updateTransmuxerAndRequestSegment_ = function (n) {
var r = this
this.shouldUpdateTransmuxerTimestampOffset_(n.timestampOffset) &&
((this.gopBuffer_.length = 0),
(n.gopsToAlignWith = []),
(this.timeMapping_ = 0),
this.transmuxer_.postMessage({ action: 'reset' }),
this.transmuxer_.postMessage({ action: 'setTimestampOffset', timestampOffset: n.timestampOffset }))
var e = this.createSimplifiedSegmentObj_(n),
t = this.isEndOfStream_(n.mediaIndex, n.playlist, n.partIndex),
i = null !== this.mediaIndex,
a = n.timeline !== this.currentTimeline_ && 0 < n.timeline,
a = t || (i && a)
this.logger_('Requesting ' + sl(n)),
e.map && !e.map.bytes && (this.logger_('going to request init segment.'), (this.appendInitSegment_ = { video: !0, audio: !0 })),
(n.abortRequests = Xu({
xhr: this.vhs_.xhr,
xhrOptions: this.xhrOptions_,
decryptionWorker: this.decrypter_,
segment: e,
abortFn: this.handleAbort_.bind(this, n),
progressFn: this.handleProgress_.bind(this),
trackInfoFn: this.handleTrackInfo_.bind(this),
timingInfoFn: this.handleTimingInfo_.bind(this),
videoSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, 'video', n.requestId),
audioSegmentTimingInfoFn: this.handleSegmentTimingInfo_.bind(this, 'audio', n.requestId),
captionsFn: this.handleCaptions_.bind(this),
isEndOfTimeline: a,
endedTimelineFn: function () {
r.logger_('received endedtimeline callback')
},
id3Fn: this.handleId3_.bind(this),
dataFn: this.handleData_.bind(this),
doneFn: this.segmentRequestFinished_.bind(this),
onTransmuxerLog: function (e) {
var t = e.message,
i = e.level,
e = e.stream
r.logger_(sl(n) + ' logged from transmuxer stream ' + e + ' as a ' + i + ': ' + t)
},
}))
}),
(t.trimBackBuffer_ = function (e) {
var t,
i,
n,
r,
r =
((t = this.seekable_()),
(i = this.currentTime_()),
(n = this.playlist_.targetDuration || 10),
(r = i - El.BACK_BUFFER_LENGTH),
t.length && (r = Math.max(r, t.start(0))),
Math.min(i - n, r))
0 < r && this.remove(0, r)
}),
(t.createSimplifiedSegmentObj_ = function (e) {
var t = e.segment,
i = e.part,
n = {
resolvedUri: (i || t).resolvedUri,
byterange: (i || t).byterange,
requestId: e.requestId,
transmuxer: e.transmuxer,
audioAppendStart: e.audioAppendStart,
gopsToAlignWith: e.gopsToAlignWith,
part: e.part,
},
i = e.playlist.segments[e.mediaIndex - 1]
return (
i &&
i.timeline === t.timeline &&
(i.videoTimingInfo ? (n.baseStartTime = i.videoTimingInfo.transmuxedDecodeEnd) : i.audioTimingInfo && (n.baseStartTime = i.audioTimingInfo.transmuxedDecodeEnd)),
t.key && ((e = t.key.iv || new Uint32Array([0, 0, 0, e.mediaIndex + e.playlist.mediaSequence])), (n.key = this.segmentKey(t.key)), (n.key.iv = e)),
t.map && (n.map = this.initSegmentForMap(t.map)),
n
)
}),
(t.saveTransferStats_ = function (e) {
;(this.mediaRequests += 1), e && ((this.mediaBytesTransferred += e.bytesReceived), (this.mediaTransferDuration += e.roundTripTime))
}),
(t.saveBandwidthRelatedStats_ = function (e, t) {
;(this.pendingSegment_.byteLength = t.bytesReceived),
e < 1 / 60
? this.logger_("Ignoring segment's bandwidth because its duration of " + e + ' is less than the min to record ' + 1 / 60)
: ((this.bandwidth = t.bandwidth), (this.roundTrip = t.roundTripTime))
}),
(t.handleTimeout_ = function () {
;(this.mediaRequestsTimedout += 1), (this.bandwidth = 1), (this.roundTrip = NaN), this.trigger('bandwidthupdate')
}),
(t.segmentRequestFinished_ = function (e, t, i) {
if (this.callQueue_.length) this.callQueue_.push(this.segmentRequestFinished_.bind(this, e, t, i))
else if ((this.saveTransferStats_(t.stats), this.pendingSegment_ && t.requestId === this.pendingSegment_.requestId)) {
if (e)
return (
(this.pendingSegment_ = null),
(this.state = 'READY'),
e.code === Ll ? void 0 : (this.pause(), e.code === Pl ? void this.handleTimeout_() : ((this.mediaRequestsErrored += 1), this.error(e), void this.trigger('error')))
)
e = this.pendingSegment_
this.saveBandwidthRelatedStats_(e.duration, t.stats),
(e.endOfAllRequests = t.endOfAllRequests),
i.gopInfo &&
(this.gopBuffer_ = (function (e, t, i) {
if (!t.length) return e
if (i) return t.slice()
for (var n = t[0].pts, r = 0; r < e.length && !(e[r].pts >= n); r++);
return e.slice(0, r).concat(t)
})(this.gopBuffer_, i.gopInfo, this.safeAppend_)),
(this.state = 'APPENDING'),
this.trigger('appending'),
this.waitForAppendsToComplete_(e)
}
}),
(t.setTimeMapping_ = function (e) {
e = this.syncController_.mappingForTimeline(e)
null !== e && (this.timeMapping_ = e)
}),
(t.updateMediaSecondsLoaded_ = function (e) {
'number' == typeof e.start && 'number' == typeof e.end ? (this.mediaSecondsLoaded += e.end - e.start) : (this.mediaSecondsLoaded += e.duration)
}),
(t.shouldUpdateTransmuxerTimestampOffset_ = function (e) {
return (
null !== e && (('main' === this.loaderType_ && e !== this.sourceUpdater_.videoTimestampOffset()) || (!this.audioDisabled_ && e !== this.sourceUpdater_.audioTimestampOffset()))
)
}),
(t.trueSegmentStart_ = function (e) {
var t = e.currentStart,
i = e.playlist,
n = e.mediaIndex,
r = e.firstVideoFrameTimeForData,
a = e.currentVideoTimestampOffset,
s = e.useVideoTimingInfo,
o = e.videoTimingInfo,
e = e.audioTimingInfo
if ('undefined' != typeof t) return t
if (!s) return e.start
i = i.segments[n - 1]
return 0 !== n && i && 'undefined' != typeof i.start && i.end === r + a ? o.start : r
}),
(t.waitForAppendsToComplete_ = function (e) {
var t = this.getCurrentMediaInfo_(e)
if (!t) return this.error({ message: 'No starting media returned, likely due to an unsupported media format.', blacklistDuration: 1 / 0 }), void this.trigger('error')
var i = t.hasAudio,
n = t.hasVideo,
t = t.isMuxed,
n = 'main' === this.loaderType_ && n,
t = !this.audioDisabled_ && i && !t
if (((e.waitingOnAppends = 0), !e.hasAppendedData_))
return (
e.timingInfo || 'number' != typeof e.timestampOffset || (this.isPendingTimestampOffset_ = !0),
(e.timingInfo = { start: 0 }),
e.waitingOnAppends++,
this.isPendingTimestampOffset_ || (this.updateSourceBufferTimestampOffset_(e), this.processMetadataQueue_()),
void this.checkAppendsDone_(e)
)
n && e.waitingOnAppends++,
t && e.waitingOnAppends++,
n && this.sourceUpdater_.videoQueueCallback(this.checkAppendsDone_.bind(this, e)),
t && this.sourceUpdater_.audioQueueCallback(this.checkAppendsDone_.bind(this, e))
}),
(t.checkAppendsDone_ = function (e) {
this.checkForAbort_(e.requestId) || (e.waitingOnAppends--, 0 === e.waitingOnAppends && this.handleAppendsDone_())
}),
(t.checkForIllegalMediaSwitch = function (e) {
var t,
i,
e =
((t = this.loaderType_),
(i = this.getCurrentMediaInfo_()),
(e = e),
'main' === t && i && e
? e.hasAudio || e.hasVideo
? i.hasVideo && !e.hasVideo
? "Only audio found in segment when we expected video. We can't switch to audio only from a stream that had video. To get rid of this message, please add codec information to the manifest."
: !i.hasVideo && e.hasVideo
? "Video found in segment when we expected only audio. We can't switch to a stream with video from an audio only stream. To get rid of this message, please add codec information to the manifest."
: null
: 'Neither audio nor video found in segment.'
: null)
return !!e && (this.error({ message: e, blacklistDuration: 1 / 0 }), this.trigger('error'), !0)
}),
(t.updateSourceBufferTimestampOffset_ = function (e) {
var t
null === e.timestampOffset ||
'number' != typeof e.timingInfo.start ||
e.changedTimestampOffset ||
'main' !== this.loaderType_ ||
((t = !1),
(e.timestampOffset -= this.getSegmentStartTimeForTimestampOffsetCalculation_({
videoTimingInfo: e.segment.videoTimingInfo,
audioTimingInfo: e.segment.audioTimingInfo,
timingInfo: e.timingInfo,
})),
(e.changedTimestampOffset = !0),
e.timestampOffset !== this.sourceUpdater_.videoTimestampOffset() && (this.sourceUpdater_.videoTimestampOffset(e.timestampOffset), (t = !0)),
e.timestampOffset !== this.sourceUpdater_.audioTimestampOffset() && (this.sourceUpdater_.audioTimestampOffset(e.timestampOffset), (t = !0)),
t && this.trigger('timestampoffset'))
}),
(t.getSegmentStartTimeForTimestampOffsetCalculation_ = function (e) {
var t = e.videoTimingInfo,
i = e.audioTimingInfo,
e = e.timingInfo
return this.useDtsForTimestampOffset_
? t && 'number' == typeof t.transmuxedDecodeStart
? t.transmuxedDecodeStart
: i && 'number' == typeof i.transmuxedDecodeStart
? i.transmuxedDecodeStart
: e.start
: e.start
}),
(t.updateTimingInfoEnd_ = function (e) {
e.timingInfo = e.timingInfo || {}
var t = this.getMediaInfo_(),
t = 'main' === this.loaderType_ && t && t.hasVideo && e.videoTimingInfo ? e.videoTimingInfo : e.audioTimingInfo
t && (e.timingInfo.end = 'number' == typeof t.end ? t.end : t.start + e.duration)
}),
(t.handleAppendsDone_ = function () {
if ((this.pendingSegment_ && this.trigger('appendsdone'), !this.pendingSegment_)) return (this.state = 'READY'), void (this.paused() || this.monitorBuffer_())
var e = this.pendingSegment_
this.updateTimingInfoEnd_(e),
this.shouldSaveSegmentTimingInfo_ && this.syncController_.saveSegmentTimingInfo({ segmentInfo: e, shouldSaveTimelineMapping: 'main' === this.loaderType_ })
var t = cl(e, this.sourceType_)
if (
(t && ('warn' === t.severity ? tr.log.warn(t.message) : this.logger_(t.message)),
this.recordThroughput_(e),
(this.pendingSegment_ = null),
(this.state = 'READY'),
!e.isSyncRequest || (this.trigger('syncinfoupdate'), e.hasAppendedData_))
) {
this.logger_('Appended ' + sl(e)),
this.addSegmentMetadataCue_(e),
(this.fetchAtBuffer_ = !0),
this.currentTimeline_ !== e.timeline &&
(this.timelineChangeController_.lastTimelineChange({ type: this.loaderType_, from: this.currentTimeline_, to: e.timeline }),
'main' !== this.loaderType_ ||
this.audioDisabled_ ||
this.timelineChangeController_.lastTimelineChange({ type: 'audio', from: this.currentTimeline_, to: e.timeline })),
(this.currentTimeline_ = e.timeline),
this.trigger('syncinfoupdate')
var i = e.segment,
t = e.part,
i = i.end && this.currentTime_() - i.end > 3 * e.playlist.targetDuration,
t = t && t.end && this.currentTime_() - t.end > 3 * e.playlist.partTargetDuration
if (i || t) return this.logger_('bad ' + (i ? 'segment' : 'part') + ' ' + sl(e)), void this.resetEverything()
null !== this.mediaIndex && this.trigger('bandwidthupdate'),
this.trigger('progress'),
(this.mediaIndex = e.mediaIndex),
(this.partIndex = e.partIndex),
this.isEndOfStream_(e.mediaIndex, e.playlist, e.partIndex) && this.endOfStream(),
this.trigger('appended'),
e.hasAppendedData_ && this.mediaAppends++,
this.paused() || this.monitorBuffer_()
} else this.logger_('Throwing away un-appended sync request ' + sl(e))
}),
(t.recordThroughput_ = function (e) {
var t, i
e.duration < 1 / 60
? this.logger_("Ignoring segment's throughput because its duration of " + e.duration + ' is less than the min to record ' + 1 / 60)
: ((t = this.throughput.rate),
(i = Date.now() - e.endOfAllRequests + 1),
(i = Math.floor((e.byteLength / i) * 8 * 1e3)),
(this.throughput.rate += (i - t) / ++this.throughput.count))
}),
(t.addSegmentMetadataCue_ = function (e) {
var t, i, n, r
this.segmentMetadataTrack_ &&
((i = (t = e.segment).start),
(r = t.end),
al(i) &&
al(r) &&
(rl(i, r, this.segmentMetadataTrack_),
(n = window.WebKitDataCue || window.VTTCue),
(e = {
custom: t.custom,
dateTimeObject: t.dateTimeObject,
dateTimeString: t.dateTimeString,
bandwidth: e.playlist.attributes.BANDWIDTH,
resolution: e.playlist.attributes.RESOLUTION,
codecs: e.playlist.attributes.CODECS,
byteLength: e.byteLength,
uri: e.uri,
timeline: e.timeline,
playlist: e.playlist.id,
start: i,
end: r,
}),
((r = new n(i, r, JSON.stringify(e))).value = e),
this.segmentMetadataTrack_.addCue(r)))
}),
e
)
})(tr.EventTarget)
function Rl() {}
function Nl(e) {
return 'string' != typeof e
? e
: e.replace(/./, function (e) {
return e.toUpperCase()
})
}
function Ul(e, t) {
var i = t[e + 'Buffer']
return (i && i.updating) || t.queuePending[e]
}
function Bl(e, t) {
if (0 !== t.queue.length) {
var i = 0,
n = t.queue[i]
if ('mediaSource' !== n.type) {
if ('mediaSource' !== e && t.ready() && 'closed' !== t.mediaSource.readyState && !Ul(e, t)) {
if (n.type !== e) {
if (
null ===
(i = (function (e, t) {
for (var i = 0; i < t.length; i++) {
var n = t[i]
if ('mediaSource' === n.type) return null
if (n.type === e) return i
}
return null
})(e, t.queue))
)
return
n = t.queue[i]
}
t.queue.splice(i, 1), (t.queuePending[e] = n).action(e, t), n.doneFn || ((t.queuePending[e] = null), Bl(e, t))
}
} else t.updating() || 'closed' === t.mediaSource.readyState || (t.queue.shift(), n.action(t), n.doneFn && n.doneFn(), Bl('audio', t), Bl('video', t))
}
}
function Fl(e, t) {
var i = t[e + 'Buffer'],
n = Nl(e)
i && (i.removeEventListener('updateend', t['on' + n + 'UpdateEnd_']), i.removeEventListener('error', t['on' + n + 'Error_']), (t.codecs[e] = null), (t[e + 'Buffer'] = null))
}
function jl(e, t) {
return e && t && -1 !== Array.prototype.indexOf.call(e.sourceBuffers, t)
}
function Hl(e) {
var t = e.type,
i = e.sourceUpdater,
n = e.action,
r = e.doneFn,
e = e.name
i.queue.push({ type: t, action: n, doneFn: r, name: e }), Bl(t, i)
}
function ql(i, n) {
return function (e) {
var t
n.queuePending[i] && ((t = n.queuePending[i].doneFn), (n.queuePending[i] = null), t && t(n[i + 'Error_'])), Bl(i, n)
}
}
function Vl(e) {
return decodeURIComponent(escape(String.fromCharCode.apply(null, e)))
}
function Wl(e, t) {
e.abort(), e.pause(), t && t.activePlaylistLoader && (t.activePlaylistLoader.pause(), (t.activePlaylistLoader = null))
}
function Gl(e, t) {
;(t.activePlaylistLoader = e).load()
}
function zl(e, t) {
for (var i = 0; i < e.length; i++) {
if (nu(t, e[i])) return !0
if (e[i].playlists && zl(e[i].playlists, t)) return !0
}
return !1
}
function Xl(a) {
;['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(function (e) {
yc[e](e, a)
})
var e,
s = a.mediaTypes,
t = a.masterPlaylistLoader,
i = a.tech,
n = a.vhs,
r = a.segmentLoaders,
o = r.AUDIO,
u = r.main
function l() {
s.AUDIO.onTrackChanged(), i.trigger({ type: 'usage', name: 'vhs-audio-change' }), i.trigger({ type: 'usage', name: 'hls-audio-change' })
}
for (e in (['AUDIO', 'SUBTITLES'].forEach(function (e) {
var u, l, o, c, t, i, d, h, n, r
;(s[e].activeGroup =
((u = e),
(l = a),
function (t) {
var e = l.masterPlaylistLoader,
i = l.mediaTypes[u].groups,
n = e.media()
if (!n) return null
var r = null
n.attributes[u] && (r = i[n.attributes[u]])
var a = Object.keys(i)
if (!r)
if ('AUDIO' === u && 1 < a.length && au(l.master))
for (var s = 0; s < a.length; s++) {
var o = i[a[s]]
if (zl(o, n)) {
r = o
break
}
}
else i.main ? (r = i.main) : 1 === a.length && (r = i[a[0]])
return 'undefined' == typeof t
? r
: (null !== t &&
r &&
r.filter(function (e) {
return e.id === t.id
})[0]) ||
null
})),
(s[e].activeTrack = vc[e](e, a)),
(s[e].onGroupChanged =
((o = e),
(c = a),
function () {
var e = c.segmentLoaders,
t = e[o],
i = e.main,
n = c.mediaTypes[o],
r = n.activeTrack(),
a = n.getActiveGroup(),
s = n.activePlaylistLoader,
e = n.lastGroup_
;(a && e && a.id === e.id) ||
((n.lastGroup_ = a), (n.lastTrack_ = r), Wl(t, n), a && !a.isMasterPlaylist && (a.playlistLoader ? (t.resyncLoader(), Gl(a.playlistLoader, n)) : s && i.resetEverything()))
})),
(s[e].onGroupChanging =
((t = e),
(i = a),
function () {
var e = i.segmentLoaders[t]
;(i.mediaTypes[t].lastGroup_ = null), e.abort(), e.pause()
})),
(s[e].onTrackChanged =
((d = e),
(h = a),
function () {
var e = h.masterPlaylistLoader,
t = h.segmentLoaders,
i = t[d],
n = t.main,
r = h.mediaTypes[d],
a = r.activeTrack(),
s = r.getActiveGroup(),
o = r.activePlaylistLoader,
u = r.lastTrack_
if ((!u || !a || u.id !== a.id) && ((r.lastGroup_ = s), (r.lastTrack_ = a), Wl(i, r), s)) {
if (s.isMasterPlaylist) {
if (!a || !u || a.id === u.id) return
var l = h.vhs.masterPlaylistController_,
t = l.selectPlaylist()
return l.media() === t
? void 0
: (r.logger_('track change. Switching master audio from ' + u.id + ' to ' + a.id), e.pause(), n.resetEverything(), void l.fastQualityChange_(t))
}
if ('AUDIO' === d) {
if (!s.playlistLoader) return n.setAudio(!0), void n.resetEverything()
i.setAudio(!0), n.setAudio(!1)
}
o !== s.playlistLoader && (i.track && i.track(a), i.resetEverything()), Gl(s.playlistLoader, r)
}
})),
(s[e].getActiveGroup =
((n = e),
(r = a.mediaTypes),
function () {
var e = r[n].activeTrack()
return e ? r[n].activeGroup(e) : null
}))
}),
(r = s.AUDIO.activeGroup()) &&
((r = (
r.filter(function (e) {
return e.default
})[0] || r[0]
).id),
(s.AUDIO.tracks[r].enabled = !0),
s.AUDIO.onGroupChanged(),
s.AUDIO.onTrackChanged(),
s.AUDIO.getActiveGroup().playlistLoader ? (u.setAudio(!1), o.setAudio(!0)) : u.setAudio(!0)),
t.on('mediachange', function () {
;['AUDIO', 'SUBTITLES'].forEach(function (e) {
return s[e].onGroupChanged()
})
}),
t.on('mediachanging', function () {
;['AUDIO', 'SUBTITLES'].forEach(function (e) {
return s[e].onGroupChanging()
})
}),
i.audioTracks().addEventListener('change', l),
i.remoteTextTracks().addEventListener('change', s.SUBTITLES.onTrackChanged),
n.on('dispose', function () {
i.audioTracks().removeEventListener('change', l), i.remoteTextTracks().removeEventListener('change', s.SUBTITLES.onTrackChanged)
}),
i.clearTracks('audio'),
s.AUDIO.tracks))
i.audioTracks().addTrack(s.AUDIO.tracks[e])
}
function Kl(e, t, i) {
var n,
r,
a,
s,
o = e.masterPlaylistController_,
u = o[(e.options_.smoothQualityChange ? 'smooth' : 'fast') + 'QualityChange_'].bind(o)
t.attributes && ((n = t.attributes.RESOLUTION), (this.width = n && n.width), (this.height = n && n.height), (this.bandwidth = t.attributes.BANDWIDTH)),
(this.codecs = $u(o.master(), t)),
(this.playlist = t),
(this.id = i),
(this.enabled =
((r = e.playlists),
(a = t.id),
(s = u),
function (e) {
var t = r.master.playlists[a],
i = Zo(t),
n = eu(t)
return 'undefined' == typeof e ? n : (e ? delete t.disabled : (t.disabled = !0), e === n || i || (s(), e ? r.trigger('renditionenabled') : r.trigger('renditiondisabled')), e)
}))
}
function Yl(t, e) {
var i = 0,
n = 0,
r = tr.mergeOptions(wc, e)
function a() {
n && t.currentTime(n)
}
function s(e) {
null != e &&
((n = (t.duration() !== 1 / 0 && t.currentTime()) || 0),
t.one('loadedmetadata', a),
t.src(e),
t.trigger({ type: 'usage', name: 'vhs-error-reload' }),
t.trigger({ type: 'usage', name: 'hls-error-reload' }),
t.play())
}
function o() {
return Date.now() - i < 1e3 * r.errorInterval
? (t.trigger({ type: 'usage', name: 'vhs-error-reload-canceled' }), void t.trigger({ type: 'usage', name: 'hls-error-reload-canceled' }))
: r.getSource && 'function' == typeof r.getSource
? ((i = Date.now()), r.getSource.call(t, s))
: void tr.log.error('ERROR: reloadSourceOnError - The option getSource must be a function!')
}
function u() {
t.off('loadedmetadata', a), t.off('error', o), t.off('dispose', u)
}
t.ready(function () {
t.trigger({ type: 'usage', name: 'vhs-error-reload-initialized' }), t.trigger({ type: 'usage', name: 'hls-error-reload-initialized' })
}),
t.on('error', o),
t.on('dispose', u),
(t.reloadSourceOnError = function (e) {
u(), Yl(t, e)
})
}
var Ql,
$l = ['video', 'audio'],
Jl = function (n, r, a) {
return function (t, i) {
var e = i[t + 'Buffer']
if (jl(i.mediaSource, e)) {
i.logger_('Appending segment ' + r.mediaIndex + "'s " + n.length + ' bytes to ' + t + 'Buffer')
try {
e.appendBuffer(n)
} catch (e) {
i.logger_('Error with code ' + e.code + ' ' + (22 === e.code ? '(QUOTA_EXCEEDED_ERR) ' : '') + 'when appending segment ' + r.mediaIndex + ' to ' + t + 'Buffer'),
(i.queuePending[t] = null),
a(e)
}
}
}
},
Zl = function (n, r) {
return function (t, i) {
var e = i[t + 'Buffer']
if (jl(i.mediaSource, e)) {
i.logger_('Removing ' + n + ' to ' + r + ' from ' + t + 'Buffer')
try {
e.remove(n, r)
} catch (e) {
i.logger_('Remove ' + n + ' to ' + r + ' from ' + t + 'Buffer failed')
}
}
}
},
ec = function (n) {
return function (e, t) {
var i = t[e + 'Buffer']
jl(t.mediaSource, i) && (t.logger_('Setting ' + e + 'timestampOffset to ' + n), (i.timestampOffset = n))
}
},
tc = function (i) {
return function (e, t) {
i()
}
},
ic = function (t) {
return function (e) {
if ('open' === e.mediaSource.readyState) {
e.logger_('Calling mediaSource endOfStream(' + (t || '') + ')')
try {
e.mediaSource.endOfStream(t)
} catch (e) {
tr.log.warn('Failed to call media source endOfStream', e)
}
}
}
},
nc = function (t) {
return function (e) {
e.logger_('Setting mediaSource duration to ' + t)
try {
e.mediaSource.duration = t
} catch (e) {
tr.log.warn('Failed to set media source duration', e)
}
}
},
rc = function () {
return function (t, e) {
if ('open' === e.mediaSource.readyState) {
var i = e[t + 'Buffer']
if (jl(e.mediaSource, i)) {
e.logger_('calling abort on ' + t + 'Buffer')
try {
i.abort()
} catch (e) {
tr.log.warn('Failed to abort on ' + t + 'Buffer', e)
}
}
}
}
},
ac = function (n, r) {
return function (e) {
var t = Nl(n),
i = mr(r)
e.logger_('Adding ' + n + 'Buffer with codec ' + r + ' to mediaSource')
i = e.mediaSource.addSourceBuffer(i)
i.addEventListener('updateend', e['on' + t + 'UpdateEnd_']), i.addEventListener('error', e['on' + t + 'Error_']), (e.codecs[n] = r), (e[n + 'Buffer'] = i)
}
},
sc = function (i) {
return function (e) {
var t = e[i + 'Buffer']
if ((Fl(i, e), jl(e.mediaSource, t))) {
e.logger_('Removing ' + i + 'Buffer with codec ' + e.codecs[i] + ' from mediaSource')
try {
e.mediaSource.removeSourceBuffer(t)
} catch (e) {
tr.log.warn('Failed to removeSourceBuffer ' + i + 'Buffer', e)
}
}
}
},
oc = function (r) {
return function (e, t) {
var i = t[e + 'Buffer'],
n = mr(r)
jl(t.mediaSource, i) && t.codecs[e] !== r && (t.logger_('changing ' + e + 'Buffer codec from ' + t.codecs[e] + ' to ' + r), i.changeType(n), (t.codecs[e] = r))
}
},
uc = (function (i) {
function e(e) {
var t = i.call(this) || this
return (
(t.mediaSource = e),
(t.sourceopenListener_ = function () {
return Bl('mediaSource', ft(t))
}),
t.mediaSource.addEventListener('sourceopen', t.sourceopenListener_),
(t.logger_ = Ro('SourceUpdater')),
(t.audioTimestampOffset_ = 0),
(t.videoTimestampOffset_ = 0),
(t.queue = []),
(t.queuePending = { audio: null, video: null }),
(t.delayedAudioAppendQueue_ = []),
(t.videoAppendQueued_ = !1),
(t.codecs = {}),
(t.onVideoUpdateEnd_ = ql('video', ft(t))),
(t.onAudioUpdateEnd_ = ql('audio', ft(t))),
(t.onVideoError_ = function (e) {
t.videoError_ = e
}),
(t.onAudioError_ = function (e) {
t.audioError_ = e
}),
(t.createdSourceBuffers_ = !1),
(t.initializedEme_ = !1),
(t.triggeredReady_ = !1),
t
)
}
mt(e, i)
var t = e.prototype
return (
(t.initializedEme = function () {
;(this.initializedEme_ = !0), this.triggerReady()
}),
(t.hasCreatedSourceBuffers = function () {
return this.createdSourceBuffers_
}),
(t.hasInitializedAnyEme = function () {
return this.initializedEme_
}),
(t.ready = function () {
return this.hasCreatedSourceBuffers() && this.hasInitializedAnyEme()
}),
(t.createSourceBuffers = function (e) {
this.hasCreatedSourceBuffers() || (this.addOrChangeSourceBuffers(e), (this.createdSourceBuffers_ = !0), this.trigger('createdsourcebuffers'), this.triggerReady())
}),
(t.triggerReady = function () {
this.ready() && !this.triggeredReady_ && ((this.triggeredReady_ = !0), this.trigger('ready'))
}),
(t.addSourceBuffer = function (e, t) {
Hl({ type: 'mediaSource', sourceUpdater: this, action: ac(e, t), name: 'addSourceBuffer' })
}),
(t.abort = function (e) {
Hl({ type: e, sourceUpdater: this, action: rc(e), name: 'abort' })
}),
(t.removeSourceBuffer = function (e) {
this.canRemoveSourceBuffer() ? Hl({ type: 'mediaSource', sourceUpdater: this, action: sc(e), name: 'removeSourceBuffer' }) : tr.log.error('removeSourceBuffer is not supported!')
}),
(t.canRemoveSourceBuffer = function () {
return (
!tr.browser.IE_VERSION && !tr.browser.IS_FIREFOX && window.MediaSource && window.MediaSource.prototype && 'function' == typeof window.MediaSource.prototype.removeSourceBuffer
)
}),
(e.canChangeType = function () {
return window.SourceBuffer && window.SourceBuffer.prototype && 'function' == typeof window.SourceBuffer.prototype.changeType
}),
(t.canChangeType = function () {
return this.constructor.canChangeType()
}),
(t.changeType = function (e, t) {
this.canChangeType() ? Hl({ type: e, sourceUpdater: this, action: oc(t), name: 'changeType' }) : tr.log.error('changeType is not supported!')
}),
(t.addOrChangeSourceBuffers = function (i) {
var n = this
if (!i || 'object' != typeof i || 0 === Object.keys(i).length) throw new Error('Cannot addOrChangeSourceBuffers to undefined codecs')
Object.keys(i).forEach(function (e) {
var t = i[e]
if (!n.hasCreatedSourceBuffers()) return n.addSourceBuffer(e, t)
n.canChangeType() && n.changeType(e, t)
})
}),
(t.appendBuffer = function (e, t) {
var i = this,
n = e.segmentInfo,
r = e.type,
a = e.bytes
if (((this.processedAppend_ = !0), 'audio' === r && this.videoBuffer && !this.videoAppendQueued_))
return this.delayedAudioAppendQueue_.push([e, t]), void this.logger_('delayed audio append of ' + a.length + ' until video append')
Hl({ type: r, sourceUpdater: this, action: Jl(a, n || { mediaIndex: -1 }, t), doneFn: t, name: 'appendBuffer' }),
'video' === r &&
((this.videoAppendQueued_ = !0),
this.delayedAudioAppendQueue_.length &&
((r = this.delayedAudioAppendQueue_.slice()),
this.logger_('queuing delayed audio ' + r.length + ' appendBuffers'),
(this.delayedAudioAppendQueue_.length = 0),
r.forEach(function (e) {
i.appendBuffer.apply(i, e)
})))
}),
(t.audioBuffered = function () {
return (jl(this.mediaSource, this.audioBuffer) && this.audioBuffer.buffered) || tr.createTimeRange()
}),
(t.videoBuffered = function () {
return (jl(this.mediaSource, this.videoBuffer) && this.videoBuffer.buffered) || tr.createTimeRange()
}),
(t.buffered = function () {
var e = jl(this.mediaSource, this.videoBuffer) ? this.videoBuffer : null,
t = jl(this.mediaSource, this.audioBuffer) ? this.audioBuffer : null
return t && !e
? this.audioBuffered()
: e && !t
? this.videoBuffered()
: (function (e, t) {
var i = null,
n = null,
r = 0,
a = [],
s = []
if (!(e && e.length && t && t.length)) return tr.createTimeRange()
for (var o = e.length; o--; ) a.push({ time: e.start(o), type: 'start' }), a.push({ time: e.end(o), type: 'end' })
for (o = t.length; o--; ) a.push({ time: t.start(o), type: 'start' }), a.push({ time: t.end(o), type: 'end' })
for (
a.sort(function (e, t) {
return e.time - t.time
}),
o = 0;
o < a.length;
o++
)
'start' === a[o].type ? 2 === ++r && (i = a[o].time) : 'end' === a[o].type && 1 === --r && (n = a[o].time),
null !== i && null !== n && (s.push([i, n]), (n = i = null))
return tr.createTimeRanges(s)
})(this.audioBuffered(), this.videoBuffered())
}),
(t.setDuration = function (e, t) {
void 0 === t && (t = Rl), Hl({ type: 'mediaSource', sourceUpdater: this, action: nc(e), name: 'duration', doneFn: t })
}),
(t.endOfStream = function (e, t) {
void 0 === t && (t = Rl),
Hl({ type: 'mediaSource', sourceUpdater: this, action: ic((e = 'string' != typeof (e = void 0 === e ? null : e) ? void 0 : e)), name: 'endOfStream', doneFn: t })
}),
(t.removeAudio = function (e, t, i) {
void 0 === i && (i = Rl),
this.audioBuffered().length && 0 !== this.audioBuffered().end(0) ? Hl({ type: 'audio', sourceUpdater: this, action: Zl(e, t), doneFn: i, name: 'remove' }) : i()
}),
(t.removeVideo = function (e, t, i) {
void 0 === i && (i = Rl),
this.videoBuffered().length && 0 !== this.videoBuffered().end(0) ? Hl({ type: 'video', sourceUpdater: this, action: Zl(e, t), doneFn: i, name: 'remove' }) : i()
}),
(t.updating = function () {
return !(!Ul('audio', this) && !Ul('video', this))
}),
(t.audioTimestampOffset = function (e) {
return (
'undefined' != typeof e &&
this.audioBuffer &&
this.audioTimestampOffset_ !== e &&
(Hl({ type: 'audio', sourceUpdater: this, action: ec(e), name: 'timestampOffset' }), (this.audioTimestampOffset_ = e)),
this.audioTimestampOffset_
)
}),
(t.videoTimestampOffset = function (e) {
return (
'undefined' != typeof e &&
this.videoBuffer &&
this.videoTimestampOffset !== e &&
(Hl({ type: 'video', sourceUpdater: this, action: ec(e), name: 'timestampOffset' }), (this.videoTimestampOffset_ = e)),
this.videoTimestampOffset_
)
}),
(t.audioQueueCallback = function (e) {
this.audioBuffer && Hl({ type: 'audio', sourceUpdater: this, action: tc(e), name: 'callback' })
}),
(t.videoQueueCallback = function (e) {
this.videoBuffer && Hl({ type: 'video', sourceUpdater: this, action: tc(e), name: 'callback' })
}),
(t.dispose = function () {
var t = this
this.trigger('dispose'),
$l.forEach(function (e) {
t.abort(e),
t.canRemoveSourceBuffer()
? t.removeSourceBuffer(e)
: t[e + 'QueueCallback'](function () {
return Fl(e, t)
})
}),
(this.videoAppendQueued_ = !1),
(this.delayedAudioAppendQueue_.length = 0),
this.sourceopenListener_ && this.mediaSource.removeEventListener('sourceopen', this.sourceopenListener_),
this.off()
}),
e
)
})(tr.EventTarget),
lc = new Uint8Array(
'\n\n'.split('').map(function (e) {
return e.charCodeAt(0)
})
),
cc = (function (i) {
function e(e, t) {
return (
((t = i.call(this, e, (t = void 0 === t ? {} : t)) || this).mediaSource_ = null),
(t.subtitlesTrack_ = null),
(t.loaderType_ = 'subtitle'),
(t.featuresNativeTextTracks_ = e.featuresNativeTextTracks),
(t.shouldSaveSegmentTimingInfo_ = !1),
t
)
}
mt(e, i)
var t = e.prototype
return (
(t.createTransmuxer_ = function () {
return null
}),
(t.buffered_ = function () {
if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues || !this.subtitlesTrack_.cues.length) return tr.createTimeRanges()
var e = this.subtitlesTrack_.cues,
t = e[0].startTime,
e = e[e.length - 1].startTime
return tr.createTimeRanges([[t, e]])
}),
(t.initSegmentForMap = function (e, t) {
if ((void 0 === t && (t = !1), !e)) return null
var i = Su(e),
n = this.initSegments_[i]
return (
t &&
!n &&
e.bytes &&
((t = lc.byteLength + e.bytes.byteLength),
(t = new Uint8Array(t)).set(e.bytes),
t.set(lc, e.bytes.byteLength),
(this.initSegments_[i] = n = { resolvedUri: e.resolvedUri, byterange: e.byterange, bytes: t })),
n || e
)
}),
(t.couldBeginLoading_ = function () {
return this.playlist_ && this.subtitlesTrack_ && !this.paused()
}),
(t.init_ = function () {
return (this.state = 'READY'), this.resetEverything(), this.monitorBuffer_()
}),
(t.track = function (e) {
return 'undefined' == typeof e || ((this.subtitlesTrack_ = e), 'INIT' === this.state && this.couldBeginLoading_() && this.init_()), this.subtitlesTrack_
}),
(t.remove = function (e, t) {
rl(e, t, this.subtitlesTrack_)
}),
(t.fillBuffer_ = function () {
var e = this,
t = this.chooseNextRequest_()
if (t) {
if (null === this.syncController_.timestampOffsetForTimeline(t.timeline))
return (
this.syncController_.one('timestampoffset', function () {
;(e.state = 'READY'), e.paused() || e.monitorBuffer_()
}),
void (this.state = 'WAITING_ON_TIMELINE')
)
this.loadSegment_(t)
}
}),
(t.timestampOffsetForSegment_ = function () {
return null
}),
(t.chooseNextRequest_ = function () {
return this.skipEmptySegments_(i.prototype.chooseNextRequest_.call(this))
}),
(t.skipEmptySegments_ = function (e) {
for (; e && e.segment.empty; ) {
if (e.mediaIndex + 1 >= e.playlist.segments.length) {
e = null
break
}
e = this.generateSegmentInfo_({ playlist: e.playlist, mediaIndex: e.mediaIndex + 1, startOfSegment: e.startOfSegment + e.duration, isSyncRequest: e.isSyncRequest })
}
return e
}),
(t.stopForError = function (e) {
this.error(e), (this.state = 'READY'), this.pause(), this.trigger('error')
}),
(t.segmentRequestFinished_ = function (e, t, i) {
var n = this
if (this.subtitlesTrack_) {
if ((this.saveTransferStats_(t.stats), !this.pendingSegment_)) return (this.state = 'READY'), void (this.mediaRequestsAborted += 1)
if (e) return e.code === Pl && this.handleTimeout_(), e.code === Ll ? (this.mediaRequestsAborted += 1) : (this.mediaRequestsErrored += 1), void this.stopForError(e)
var r = this.pendingSegment_
this.saveBandwidthRelatedStats_(r.duration, t.stats), (this.state = 'APPENDING'), this.trigger('appending')
var a = r.segment
if ((a.map && (a.map.bytes = t.map.bytes), (r.bytes = t.bytes), 'function' != typeof window.WebVTT && this.subtitlesTrack_ && this.subtitlesTrack_.tech_)) {
var s = function () {
n.subtitlesTrack_.tech_.off('vttjsloaded', o), n.stopForError({ message: 'Error loading vtt.js' })
},
o = function () {
n.subtitlesTrack_.tech_.off('vttjserror', s), n.segmentRequestFinished_(e, t, i)
}
return (this.state = 'WAITING_ON_VTTJS'), this.subtitlesTrack_.tech_.one('vttjsloaded', o), void this.subtitlesTrack_.tech_.one('vttjserror', s)
}
a.requested = !0
try {
this.parseVTTCues_(r)
} catch (e) {
return void this.stopForError({ message: e.message })
}
if (
(this.updateTimeMapping_(r, this.syncController_.timelines[r.timeline], this.playlist_),
r.cues.length
? (r.timingInfo = { start: r.cues[0].startTime, end: r.cues[r.cues.length - 1].endTime })
: (r.timingInfo = { start: r.startOfSegment, end: r.startOfSegment + r.duration }),
r.isSyncRequest)
)
return this.trigger('syncinfoupdate'), (this.pendingSegment_ = null), void (this.state = 'READY')
;(r.byteLength = r.bytes.byteLength),
(this.mediaSecondsLoaded += a.duration),
r.cues.forEach(function (e) {
n.subtitlesTrack_.addCue(n.featuresNativeTextTracks_ ? new window.VTTCue(e.startTime, e.endTime, e.text) : e)
}),
(function (t) {
var e = t.cues
if (e)
for (var i = 0; i < e.length; i++) {
for (var n = [], r = 0, a = 0; a < e.length; a++)
e[i].startTime === e[a].startTime && e[i].endTime === e[a].endTime && e[i].text === e[a].text && 1 < ++r && n.push(e[a])
n.length &&
n.forEach(function (e) {
return t.removeCue(e)
})
}
})(this.subtitlesTrack_),
this.handleAppendsDone_()
} else this.state = 'READY'
}),
(t.handleData_ = function () {}),
(t.updateTimingInfoEnd_ = function () {}),
(t.parseVTTCues_ = function (t) {
var e = !1
'function' == typeof window.TextDecoder ? (i = new window.TextDecoder('utf8')) : ((i = window.WebVTT.StringDecoder()), (e = !0))
var i = new window.WebVTT.Parser(window, window.vttjs, i)
;(t.cues = []),
(t.timestampmap = { MPEGTS: 0, LOCAL: 0 }),
(i.oncue = t.cues.push.bind(t.cues)),
(i.ontimestampmap = function (e) {
t.timestampmap = e
}),
(i.onparsingerror = function (e) {
tr.log.warn('Error encountered when parsing cues: ' + e.message)
}),
t.segment.map && ((n = t.segment.map.bytes), e && (n = Vl(n)), i.parse(n))
var n = t.bytes
e && (n = Vl(n)), i.parse(n), i.flush()
}),
(t.updateTimeMapping_ = function (e, t, i) {
var n,
r,
a = e.segment
t &&
(e.cues.length
? ((r = e.timestampmap),
(n = r.MPEGTS / hl - r.LOCAL + t.mapping),
e.cues.forEach(function (e) {
;(e.startTime += n), (e.endTime += n)
}),
i.syncInfo ||
((r = e.cues[0].startTime),
(t = e.cues[e.cues.length - 1].startTime),
(i.syncInfo = { mediaSequence: i.mediaSequence + e.mediaIndex, time: Math.min(r, t - a.duration) })))
: (a.empty = !0))
}),
e
)
})(Ml),
dc = [
{
name: 'VOD',
run: function (e, t, i, n, r) {
if (i === 1 / 0) return null
return { time: 0, segmentIndex: 0, partIndex: null }
},
},
{
name: 'ProgramDateTime',
run: function (e, t, i, n, r) {
if (!Object.keys(e.timelineToDatetimeMappings).length) return null
var a = null,
s = null,
o = Wo(t)
r = r || 0
for (var u = 0; u < o.length; u++) {
var l = o[t.endList || 0 === r ? u : o.length - (u + 1)],
c = l.segment,
d = e.timelineToDatetimeMappings[c.timeline]
if (d && c.dateTimeObject) {
var h = c.dateTimeObject.getTime() / 1e3 + d
if (c.parts && 'number' == typeof l.partIndex) for (var p = 0; p < l.partIndex; p++) h += c.parts[p].duration
d = Math.abs(r - h)
if (null !== s && (0 === d || s < d)) break
;(s = d), (a = { time: h, segmentIndex: l.segmentIndex, partIndex: l.partIndex })
}
}
return a
},
},
{
name: 'Segment',
run: function (e, t, i, n, r) {
var a = null,
s = null
r = r || 0
for (var o = Wo(t), u = 0; u < o.length; u++) {
var l = o[t.endList || 0 === r ? u : o.length - (u + 1)],
c = l.segment,
d = (l.part && l.part.start) || (c && c.start)
if (c.timeline === n && 'undefined' != typeof d) {
c = Math.abs(r - d)
if (null !== s && s < c) break
;(!a || null === s || c <= s) && ((s = c), (a = { time: d, segmentIndex: l.segmentIndex, partIndex: l.partIndex }))
}
}
return a
},
},
{
name: 'Discontinuity',
run: function (e, t, i, n, r) {
var a = null
if (((r = r || 0), t.discontinuityStarts && t.discontinuityStarts.length))
for (var s = null, o = 0; o < t.discontinuityStarts.length; o++) {
var u = t.discontinuityStarts[o],
l = t.discontinuitySequence + o + 1,
c = e.discontinuities[l]
if (c) {
l = Math.abs(r - c.time)
if (null !== s && s < l) break
;(!a || null === s || l <= s) && ((s = l), (a = { time: c.time, segmentIndex: u, partIndex: null }))
}
}
return a
},
},
{
name: 'Playlist',
run: function (e, t, i, n, r) {
return t.syncInfo ? { time: t.syncInfo.time, segmentIndex: t.syncInfo.mediaSequence - t.mediaSequence, partIndex: null } : null
},
},
],
hc = (function (i) {
function e(e) {
var t = i.call(this) || this
return (t.timelines = []), (t.discontinuities = []), (t.timelineToDatetimeMappings = {}), (t.logger_ = Ro('SyncController')), t
}
mt(e, i)
var t = e.prototype
return (
(t.getSyncPoint = function (e, t, i, n) {
i = this.runStrategies_(e, t, i, n)
return i.length ? this.selectSyncPoint_(i, { key: 'time', value: n }) : null
}),
(t.getExpiredTime = function (e, t) {
if (!e || !e.segments) return null
t = this.runStrategies_(e, t, e.discontinuitySequence, 0)
if (!t.length) return null
t = this.selectSyncPoint_(t, { key: 'segmentIndex', value: 0 })
return 0 < t.segmentIndex && (t.time *= -1), Math.abs(t.time + Qo({ defaultDuration: e.targetDuration, durationList: e.segments, startIndex: t.segmentIndex, endIndex: 0 }))
}),
(t.runStrategies_ = function (e, t, i, n) {
for (var r = [], a = 0; a < dc.length; a++) {
var s = dc[a],
o = s.run(this, e, t, i, n)
o && ((o.strategy = s.name), r.push({ strategy: s.name, syncPoint: o }))
}
return r
}),
(t.selectSyncPoint_ = function (e, t) {
for (var i = e[0].syncPoint, n = Math.abs(e[0].syncPoint[t.key] - t.value), r = e[0].strategy, a = 1; a < e.length; a++) {
var s = Math.abs(e[a].syncPoint[t.key] - t.value)
s < n && ((n = s), (i = e[a].syncPoint), (r = e[a].strategy))
}
return (
this.logger_(
'syncPoint for [' +
t.key +
': ' +
t.value +
'] chosen with strategy [' +
r +
']: [time:' +
i.time +
', segmentIndex:' +
i.segmentIndex +
('number' == typeof i.partIndex ? ',partIndex:' + i.partIndex : '') +
']'
),
i
)
}),
(t.saveExpiredSegmentInfo = function (e, t) {
var i = t.mediaSequence - e.mediaSequence
if (86400 < i) tr.log.warn('Not saving expired segment info. Media sequence gap ' + i + ' is too large.')
else
for (var n = i - 1; 0 <= n; n--) {
var r = e.segments[n]
if (r && 'undefined' != typeof r.start) {
;(t.syncInfo = { mediaSequence: e.mediaSequence + n, time: r.start }),
this.logger_('playlist refresh sync: [time:' + t.syncInfo.time + ', mediaSequence: ' + t.syncInfo.mediaSequence + ']'),
this.trigger('syncinfoupdate')
break
}
}
}),
(t.setDateTimeMappingForStart = function (e) {
var t
;(this.timelineToDatetimeMappings = {}),
e.segments &&
e.segments.length &&
e.segments[0].dateTimeObject &&
((e = (t = e.segments[0]).dateTimeObject.getTime() / 1e3), (this.timelineToDatetimeMappings[t.timeline] = -e))
}),
(t.saveSegmentTimingInfo = function (e) {
var t = e.segmentInfo,
i = e.shouldSaveTimelineMapping,
n = this.calculateSegmentTimeMapping_(t, t.timingInfo, i),
e = t.segment
n && (this.saveDiscontinuitySyncInfo_(t), t.playlist.syncInfo || (t.playlist.syncInfo = { mediaSequence: t.playlist.mediaSequence + t.mediaIndex, time: e.start }))
t = e.dateTimeObject
e.discontinuity && i && t && (this.timelineToDatetimeMappings[e.timeline] = -t.getTime() / 1e3)
}),
(t.timestampOffsetForTimeline = function (e) {
return 'undefined' == typeof this.timelines[e] ? null : this.timelines[e].time
}),
(t.mappingForTimeline = function (e) {
return 'undefined' == typeof this.timelines[e] ? null : this.timelines[e].mapping
}),
(t.calculateSegmentTimeMapping_ = function (e, t, i) {
var n,
r,
a = e.segment,
s = e.part,
o = this.timelines[e.timeline]
if ('number' == typeof e.timestampOffset)
(o = { time: e.startOfSegment, mapping: e.startOfSegment - t.start }),
i &&
((this.timelines[e.timeline] = o),
this.trigger('timestampoffset'),
this.logger_('time mapping for timeline ' + e.timeline + ': [time: ' + o.time + '] [mapping: ' + o.mapping + ']')),
(n = e.startOfSegment),
(r = t.end + o.mapping)
else {
if (!o) return !1
;(n = t.start + o.mapping), (r = t.end + o.mapping)
}
return s && ((s.start = n), (s.end = r)), (!a.start || n < a.start) && (a.start = n), (a.end = r), !0
}),
(t.saveDiscontinuitySyncInfo_ = function (e) {
var t = e.playlist,
i = e.segment
if (i.discontinuity) this.discontinuities[i.timeline] = { time: i.start, accuracy: 0 }
else if (t.discontinuityStarts && t.discontinuityStarts.length)
for (var n = 0; n < t.discontinuityStarts.length; n++) {
var r,
a = t.discontinuityStarts[n],
s = t.discontinuitySequence + n + 1,
o = a - e.mediaIndex,
u = Math.abs(o)
;(!this.discontinuities[s] || this.discontinuities[s].accuracy > u) &&
((r = void 0),
(r =
o < 0
? i.start - Qo({ defaultDuration: t.targetDuration, durationList: t.segments, startIndex: e.mediaIndex, endIndex: a })
: i.end + Qo({ defaultDuration: t.targetDuration, durationList: t.segments, startIndex: e.mediaIndex + 1, endIndex: a })),
(this.discontinuities[s] = { time: r, accuracy: u }))
}
}),
(t.dispose = function () {
this.trigger('dispose'), this.off()
}),
e
)
})(tr.EventTarget),
pc = (function (t) {
function e() {
var e = t.call(this) || this
return (e.pendingTimelineChanges_ = {}), (e.lastTimelineChanges_ = {}), e
}
mt(e, t)
var i = e.prototype
return (
(i.clearPendingTimelineChange = function (e) {
;(this.pendingTimelineChanges_[e] = null), this.trigger('pendingtimelinechange')
}),
(i.pendingTimelineChange = function (e) {
var t = e.type,
i = e.from,
e = e.to
return (
'number' == typeof i && 'number' == typeof e && ((this.pendingTimelineChanges_[t] = { type: t, from: i, to: e }), this.trigger('pendingtimelinechange')),
this.pendingTimelineChanges_[t]
)
}),
(i.lastTimelineChange = function (e) {
var t = e.type,
i = e.from,
e = e.to
return (
'number' == typeof i &&
'number' == typeof e &&
((this.lastTimelineChanges_[t] = { type: t, from: i, to: e }), delete this.pendingTimelineChanges_[t], this.trigger('timelinechange')),
this.lastTimelineChanges_[t]
)
}),
(i.dispose = function () {
this.trigger('dispose'), (this.pendingTimelineChanges_ = {}), (this.lastTimelineChanges_ = {}), this.off()
}),
e
)
})(tr.EventTarget),
fc = x(
U(
W(function () {
var e = 'undefined' != typeof globalThis ? globalThis : 'undefined' != typeof window ? window : 'undefined' != typeof global ? global : 'undefined' != typeof self ? self : {}
function t(e, t, i) {
return (
e(
(i = {
path: t,
exports: {},
require: function (e, t) {
return (function () {
throw new Error('Dynamic requires are not currently supported by @rollup/plugin-commonjs')
})(null == t && i.path)
},
}),
i.exports
),
i.exports
)
}
var i = t(function (e) {
function n(e, t) {
for (var i = 0; i < t.length; i++) {
var n = t[i]
;(n.enumerable = n.enumerable || !1), (n.configurable = !0), 'value' in n && (n.writable = !0), Object.defineProperty(e, n.key, n)
}
}
;(e.exports = function (e, t, i) {
return t && n(e.prototype, t), i && n(e, i), e
}),
(e.exports.default = e.exports),
(e.exports.__esModule = !0)
}),
n = t(function (i) {
function n(e, t) {
return (
(i.exports = n =
Object.setPrototypeOf ||
function (e, t) {
return (e.__proto__ = t), e
}),
(i.exports.default = i.exports),
(i.exports.__esModule = !0),
n(e, t)
)
}
;(i.exports = n), (i.exports.default = i.exports), (i.exports.__esModule = !0)
}),
r = t(function (e) {
;(e.exports = function (e, t) {
;(e.prototype = Object.create(t.prototype)), (e.prototype.constructor = e), n(e, t)
}),
(e.exports.default = e.exports),
(e.exports.__esModule = !0)
}),
a = (function () {
function e() {
this.listeners = {}
}
var t = e.prototype
return (
(t.on = function (e, t) {
this.listeners[e] || (this.listeners[e] = []), this.listeners[e].push(t)
}),
(t.off = function (e, t) {
if (!this.listeners[e]) return !1
t = this.listeners[e].indexOf(t)
return (this.listeners[e] = this.listeners[e].slice(0)), this.listeners[e].splice(t, 1), -1 < t
}),
(t.trigger = function (e) {
var t = this.listeners[e]
if (t)
if (2 === arguments.length) for (var i = t.length, n = 0; n < i; ++n) t[n].call(this, arguments[1])
else for (var r = Array.prototype.slice.call(arguments, 1), a = t.length, s = 0; s < a; ++s) t[s].apply(this, r)
}),
(t.dispose = function () {
this.listeners = {}
}),
(t.pipe = function (t) {
this.on('data', function (e) {
t.push(e)
})
}),
e
)
})()
/*! @name aes-decrypter @version 3.1.3 @license Apache-2.0 */
var c = null,
m = (function () {
function e(e) {
var t, i, n
;(c =
c ||
(function () {
for (
var e,
t,
i,
n,
r,
a,
s,
o = [
[[], [], [], [], []],
[[], [], [], [], []],
],
u = o[0],
l = o[1],
c = u[4],
d = l[4],
h = [],
p = [],
f = 0;
f < 256;
f++
)
p[(h[f] = (f << 1) ^ (283 * (f >> 7))) ^ f] = f
for (e = t = 0; !c[e]; e ^= i || 1, t = p[t] || 1)
for (
s =
(16843009 * h[(n = h[(i = h[(d[(c[e] = r = ((r = t ^ (t << 1) ^ (t << 2) ^ (t << 3) ^ (t << 4)) >> 8) ^ (255 & r) ^ 99)] = e)])])]) ^
(65537 * n) ^
(257 * i) ^
(16843008 * e),
a = (257 * h[r]) ^ (16843008 * r),
f = 0;
f < 4;
f++
)
(u[f][e] = a = (a << 24) ^ (a >>> 8)), (l[f][r] = s = (s << 24) ^ (s >>> 8))
for (f = 0; f < 5; f++) (u[f] = u[f].slice(0)), (l[f] = l[f].slice(0))
return o
})()),
(this._tables = [
[c[0][0].slice(), c[0][1].slice(), c[0][2].slice(), c[0][3].slice(), c[0][4].slice()],
[c[1][0].slice(), c[1][1].slice(), c[1][2].slice(), c[1][3].slice(), c[1][4].slice()],
])
var r = this._tables[0][4],
a = this._tables[1],
s = e.length,
o = 1
if (4 !== s && 6 !== s && 8 !== s) throw new Error('Invalid aes key size')
var u = e.slice(0),
l = []
for (this._key = [u, l], t = s; t < 4 * s + 28; t++)
(n = u[t - 1]),
(t % s == 0 || (8 === s && t % s == 4)) &&
((n = (r[n >>> 24] << 24) ^ (r[(n >> 16) & 255] << 16) ^ (r[(n >> 8) & 255] << 8) ^ r[255 & n]),
t % s == 0 && ((n = (n << 8) ^ (n >>> 24) ^ (o << 24)), (o = (o << 1) ^ (283 * (o >> 7))))),
(u[t] = u[t - s] ^ n)
for (i = 0; t; i++, t--)
(n = u[3 & i ? t : t - 4]), (l[i] = t <= 4 || i < 4 ? n : a[0][r[n >>> 24]] ^ a[1][r[(n >> 16) & 255]] ^ a[2][r[(n >> 8) & 255]] ^ a[3][r[255 & n]])
}
return (
(e.prototype.decrypt = function (e, t, i, n, r, a) {
for (
var s,
o,
u,
l = this._key[1],
c = e ^ l[0],
d = n ^ l[1],
h = i ^ l[2],
p = t ^ l[3],
f = l.length / 4 - 2,
m = 4,
t = this._tables[1],
g = t[0],
y = t[1],
v = t[2],
_ = t[3],
b = t[4],
T = 0;
T < f;
T++
)
(s = g[c >>> 24] ^ y[(d >> 16) & 255] ^ v[(h >> 8) & 255] ^ _[255 & p] ^ l[m]),
(o = g[d >>> 24] ^ y[(h >> 16) & 255] ^ v[(p >> 8) & 255] ^ _[255 & c] ^ l[m + 1]),
(u = g[h >>> 24] ^ y[(p >> 16) & 255] ^ v[(c >> 8) & 255] ^ _[255 & d] ^ l[m + 2]),
(p = g[p >>> 24] ^ y[(c >> 16) & 255] ^ v[(d >> 8) & 255] ^ _[255 & h] ^ l[m + 3]),
(m += 4),
(c = s),
(d = o),
(h = u)
for (T = 0; T < 4; T++)
(r[(3 & -T) + a] = (b[c >>> 24] << 24) ^ (b[(d >> 16) & 255] << 16) ^ (b[(h >> 8) & 255] << 8) ^ b[255 & p] ^ l[m++]),
(s = c),
(c = d),
(d = h),
(h = p),
(p = s)
}),
e
)
})(),
l = (function (t) {
function e() {
var e = t.call(this, a) || this
return (e.jobs = []), (e.delay = 1), (e.timeout_ = null), e
}
r(e, t)
var i = e.prototype
return (
(i.processJob_ = function () {
this.jobs.shift()(), this.jobs.length ? (this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay)) : (this.timeout_ = null)
}),
(i.push = function (e) {
this.jobs.push(e), this.timeout_ || (this.timeout_ = setTimeout(this.processJob_.bind(this), this.delay))
}),
e
)
})(a),
g = function (e) {
return (e << 24) | ((65280 & e) << 8) | ((16711680 & e) >> 8) | (e >>> 24)
},
s = (function () {
function u(e, t, i, n) {
var r = u.STEP,
a = new Int32Array(e.buffer),
s = new Uint8Array(e.byteLength),
o = 0
for (this.asyncStream_ = new l(), this.asyncStream_.push(this.decryptChunk_(a.subarray(o, o + r), t, i, s)), o = r; o < a.length; o += r)
(i = new Uint32Array([g(a[o - 4]), g(a[o - 3]), g(a[o - 2]), g(a[o - 1])])), this.asyncStream_.push(this.decryptChunk_(a.subarray(o, o + r), t, i, s))
this.asyncStream_.push(function () {
/*! @name pkcs7 @version 1.0.4 @license Apache-2.0 */
var e
n(null, (e = s).subarray(0, e.byteLength - e[e.byteLength - 1]))
})
}
return (
(u.prototype.decryptChunk_ = function (t, i, n, r) {
return function () {
var e = (function (e, t, i) {
for (
var n,
r,
a,
s,
o = new Int32Array(e.buffer, e.byteOffset, e.byteLength >> 2),
u = new m(Array.prototype.slice.call(t)),
e = new Uint8Array(e.byteLength),
l = new Int32Array(e.buffer),
c = i[0],
d = i[1],
h = i[2],
p = i[3],
f = 0;
f < o.length;
f += 4
)
(n = g(o[f])),
(r = g(o[f + 1])),
(a = g(o[f + 2])),
(s = g(o[f + 3])),
u.decrypt(n, r, a, s, l, f),
(l[f] = g(l[f] ^ c)),
(l[f + 1] = g(l[f + 1] ^ d)),
(l[f + 2] = g(l[f + 2] ^ h)),
(l[f + 3] = g(l[f + 3] ^ p)),
(c = n),
(d = r),
(h = a),
(p = s)
return e
})(t, i, n)
r.set(e, t.byteOffset)
}
}),
i(u, null, [
{
key: 'STEP',
get: function () {
return 32e3
},
},
]),
u
)
})(),
e = 'undefined' != typeof window ? window : 'undefined' != typeof e ? e : 'undefined' != typeof self ? self : {},
e = e.BigInt || Number
e('0x1'), e('0x100'), e('0x10000'), e('0x1000000'), e('0x100000000'), e('0x10000000000'), e('0x1000000000000'), e('0x100000000000000'), e('0x10000000000000000')
function o(n) {
var r = {}
return (
Object.keys(n).forEach(function (e) {
var t,
i = n[e]
;(t = i),
('function' === ArrayBuffer.isView ? ArrayBuffer.isView(t) : t && t.buffer instanceof ArrayBuffer)
? (r[e] = { bytes: i.buffer, byteOffset: i.byteOffset, byteLength: i.byteLength })
: (r[e] = i)
}),
r
)
}
self.onmessage = function (e) {
var i = e.data,
t = new Uint8Array(i.encrypted.bytes, i.encrypted.byteOffset, i.encrypted.byteLength),
n = new Uint32Array(i.key.bytes, i.key.byteOffset, i.key.byteLength / 4),
e = new Uint32Array(i.iv.bytes, i.iv.byteOffset, i.iv.byteLength / 4)
new s(t, n, e, function (e, t) {
self.postMessage(o({ source: i.source, decrypted: t }), [t.buffer])
})
}
})
)
),
mc = {
AUDIO: function (s, o) {
return function () {
var e = o.segmentLoaders[s],
t = o.mediaTypes[s],
i = o.blacklistCurrentPlaylist
Wl(e, t)
var n = t.activeTrack(),
e = t.activeGroup(),
e = (
e.filter(function (e) {
return e.default
})[0] || e[0]
).id,
r = t.tracks[e]
if (n !== r) {
for (var a in (tr.log.warn('Problem encountered loading the alternate audio track.Switching back to default.'), t.tracks)) t.tracks[a].enabled = t.tracks[a] === r
t.onTrackChanged()
} else i({ message: 'Problem encountered loading the default audio track.' })
}
},
SUBTITLES: function (i, n) {
return function () {
var e = n.segmentLoaders[i],
t = n.mediaTypes[i]
tr.log.warn('Problem encountered loading the subtitle track.Disabling subtitle track.'), Wl(e, t)
e = t.activeTrack()
e && (e.mode = 'disabled'), t.onTrackChanged()
}
},
},
gc = {
AUDIO: function (e, t, i) {
var n, r, a
t &&
((n = i.tech),
(r = i.requestOptions),
(a = i.segmentLoaders[e]),
t.on('loadedmetadata', function () {
var e = t.media()
a.playlist(e, r), (!n.paused() || (e.endList && 'none' !== n.preload())) && a.load()
}),
t.on('loadedplaylist', function () {
a.playlist(t.media(), r), n.paused() || a.load()
}),
t.on('error', mc[e](e, i)))
},
SUBTITLES: function (e, t, i) {
var n = i.tech,
r = i.requestOptions,
a = i.segmentLoaders[e],
s = i.mediaTypes[e]
t.on('loadedmetadata', function () {
var e = t.media()
a.playlist(e, r), a.track(s.activeTrack()), (!n.paused() || (e.endList && 'none' !== n.preload())) && a.load()
}),
t.on('loadedplaylist', function () {
a.playlist(t.media(), r), n.paused() || a.load()
}),
t.on('error', mc[e](e, i))
},
},
yc = {
AUDIO: function (e, t) {
var i,
n,
r = t.vhs,
a = t.sourceType,
s = t.segmentLoaders[e],
o = t.requestOptions,
u = t.master.mediaGroups,
l = t.mediaTypes[e],
c = l.groups,
d = l.tracks,
h = l.logger_,
p = t.masterPlaylistLoader,
f = au(p.master)
for (i in ((u[e] && 0 !== Object.keys(u[e]).length) || ((u[e] = { main: { default: { default: !0 } } }), f && (u[e].main.default.playlists = p.master.playlists)), u[e]))
for (var m in (c[i] || (c[i] = []), u[e][i])) {
var g = u[e][i][m],
y = void 0,
y = f
? (h("AUDIO group '" + i + "' label '" + m + "' is a master playlist"), (g.isMasterPlaylist = !0), null)
: 'vhs-json' === a && g.playlists
? new _l(g.playlists[0], r, o)
: g.resolvedUri
? new _l(g.resolvedUri, r, o)
: g.playlists && 'dash' === a
? new wl(g.playlists[0], r, o, p)
: null,
g = tr.mergeOptions({ id: m, playlistLoader: y }, g)
gc[e](e, g.playlistLoader, t),
c[i].push(g),
'undefined' == typeof d[m] &&
((g = new tr.AudioTrack({
id: m,
kind:
((n = void 0),
(n = (y = g).default ? 'main' : 'alternative'),
(n = y.characteristics && 0 <= y.characteristics.indexOf('public.accessibility.describes-video') ? 'main-desc' : n)),
enabled: !1,
language: g.language,
default: g.default,
label: m,
})),
(d[m] = g))
}
s.on('error', mc[e](e, t))
},
SUBTITLES: function (e, t) {
var i,
n = t.tech,
r = t.vhs,
a = t.sourceType,
s = t.segmentLoaders[e],
o = t.requestOptions,
u = t.master.mediaGroups,
l = t.mediaTypes[e],
c = l.groups,
d = l.tracks,
h = t.masterPlaylistLoader
for (i in u[e])
for (var p in (c[i] || (c[i] = []), u[e][i]))
if (!u[e][i][p].forced) {
var f = u[e][i][p],
m = void 0
if ('hls' === a) m = new _l(f.resolvedUri, r, o)
else if ('dash' === a) {
if (
!f.playlists.filter(function (e) {
return e.excludeUntil !== 1 / 0
}).length
)
return
m = new wl(f.playlists[0], r, o, h)
} else 'vhs-json' === a && (m = new _l(f.playlists ? f.playlists[0] : f.resolvedUri, r, o))
;(f = tr.mergeOptions({ id: p, playlistLoader: m }, f)),
gc[e](e, f.playlistLoader, t),
c[i].push(f),
'undefined' == typeof d[p] &&
((f = n.addRemoteTextTrack({ id: p, kind: 'subtitles', default: f.default && f.autoselect, language: f.language, label: p }, !1).track), (d[p] = f))
}
s.on('error', mc[e](e, t))
},
'CLOSED-CAPTIONS': function (e, t) {
var i,
n = t.tech,
r = t.master.mediaGroups,
t = t.mediaTypes[e],
a = t.groups,
s = t.tracks
for (i in r[e])
for (var o in (a[i] || (a[i] = []), r[e][i])) {
var u,
l,
c = r[e][i][o]
;/^(?:CC|SERVICE)/.test(c.instreamId) &&
(void 0 ===
(l = (u = (n.options_.vhs && n.options_.vhs.captionServices) || {})[
(l = { label: o, language: c.language, instreamId: c.instreamId, default: c.default && c.autoselect }).instreamId
]
? tr.mergeOptions(l, u[l.instreamId])
: l).default && delete l.default,
a[i].push(tr.mergeOptions({ id: o }, c)),
'undefined' == typeof s[o] &&
((l = n.addRemoteTextTrack({ id: l.instreamId, kind: 'captions', default: l.default, language: l.language, label: l.label }, !1).track), (s[o] = l)))
}
},
},
vc = {
AUDIO: function (i, n) {
return function () {
var e,
t = n.mediaTypes[i].tracks
for (e in t) if (t[e].enabled) return t[e]
return null
}
},
SUBTITLES: function (i, n) {
return function () {
var e,
t = n.mediaTypes[i].tracks
for (e in t) if ('showing' === t[e].mode || 'hidden' === t[e].mode) return t[e]
return null
}
},
},
_c = ['mediaRequests', 'mediaRequestsAborted', 'mediaRequestsTimedout', 'mediaRequestsErrored', 'mediaTransferDuration', 'mediaBytesTransferred', 'mediaAppends'],
bc = (function (v) {
function e(e) {
var t = v.call(this) || this,
i = e.src,
n = e.handleManifestRedirects,
r = e.withCredentials,
a = e.tech,
s = e.bandwidth,
o = e.externVhs,
u = e.useCueTags,
l = e.blacklistDuration,
c = e.enableLowInitialPlaylist,
d = e.sourceType,
h = e.cacheEncryptionKeys,
p = e.experimentalBufferBasedABR,
f = e.experimentalLeastPixelDiffSelector,
m = e.captionServices
if (!i) throw new Error('A non-empty playlist URL or JSON manifest string is required')
var g,
y = e.maxPlaylistRetries
;(null !== y && 'undefined' != typeof y) || (y = 1 / 0),
(Ql = o),
(t.experimentalBufferBasedABR = Boolean(p)),
(t.experimentalLeastPixelDiffSelector = Boolean(f)),
(t.withCredentials = r),
(t.tech_ = a),
(t.vhs_ = a.vhs),
(t.sourceType_ = d),
(t.useCueTags_ = u),
(t.blacklistDuration = l),
(t.maxPlaylistRetries = y),
(t.enableLowInitialPlaylist = c),
t.useCueTags_ && ((t.cueTagsTrack_ = t.tech_.addTextTrack('metadata', 'ad-cues')), (t.cueTagsTrack_.inBandMetadataTrackDispatchType = '')),
(t.requestOptions_ = { withCredentials: r, handleManifestRedirects: n, maxPlaylistRetries: y, timeout: null }),
t.on('error', t.pauseLoading),
(t.mediaTypes_ =
((g = {}),
['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(function (e) {
g[e] = {
groups: {},
tracks: {},
activePlaylistLoader: null,
activeGroup: Rl,
activeTrack: Rl,
getActiveGroup: Rl,
onGroupChanged: Rl,
onTrackChanged: Rl,
lastTrack_: null,
logger_: Ro('MediaGroups[' + e + ']'),
}
}),
g)),
(t.mediaSource = new window.MediaSource()),
(t.handleDurationChange_ = t.handleDurationChange_.bind(ft(t))),
(t.handleSourceOpen_ = t.handleSourceOpen_.bind(ft(t))),
(t.handleSourceEnded_ = t.handleSourceEnded_.bind(ft(t))),
t.mediaSource.addEventListener('durationchange', t.handleDurationChange_),
t.mediaSource.addEventListener('sourceopen', t.handleSourceOpen_),
t.mediaSource.addEventListener('sourceended', t.handleSourceEnded_),
(t.seekable_ = tr.createTimeRanges()),
(t.hasPlayed_ = !1),
(t.syncController_ = new hc(e)),
(t.segmentMetadataTrack_ = a.addRemoteTextTrack({ kind: 'metadata', label: 'segment-metadata' }, !1).track),
(t.decrypter_ = new fc()),
(t.sourceUpdater_ = new uc(t.mediaSource)),
(t.inbandTextTracks_ = {}),
(t.timelineChangeController_ = new pc())
h = {
vhs: t.vhs_,
parse708captions: e.parse708captions,
useDtsForTimestampOffset: e.useDtsForTimestampOffset,
captionServices: m,
mediaSource: t.mediaSource,
currentTime: t.tech_.currentTime.bind(t.tech_),
seekable: function () {
return t.seekable()
},
seeking: function () {
return t.tech_.seeking()
},
duration: function () {
return t.duration()
},
hasPlayed: function () {
return t.hasPlayed_
},
goalBufferLength: function () {
return t.goalBufferLength()
},
bandwidth: s,
syncController: t.syncController_,
decrypter: t.decrypter_,
sourceType: t.sourceType_,
inbandTextTracks: t.inbandTextTracks_,
cacheEncryptionKeys: h,
sourceUpdater: t.sourceUpdater_,
timelineChangeController: t.timelineChangeController_,
experimentalExactManifestTimings: e.experimentalExactManifestTimings,
}
;(t.masterPlaylistLoader_ = new ('dash' === t.sourceType_ ? wl : _l)(i, t.vhs_, t.requestOptions_)),
t.setupMasterPlaylistLoaderListeners_(),
(t.mainSegmentLoader_ = new Ml(tr.mergeOptions(h, { segmentMetadataTrack: t.segmentMetadataTrack_, loaderType: 'main' }), e)),
(t.audioSegmentLoader_ = new Ml(tr.mergeOptions(h, { loaderType: 'audio' }), e)),
(t.subtitleSegmentLoader_ = new cc(tr.mergeOptions(h, { loaderType: 'vtt', featuresNativeTextTracks: t.tech_.featuresNativeTextTracks }), e)),
t.setupSegmentLoaderListeners_(),
t.experimentalBufferBasedABR &&
(t.masterPlaylistLoader_.one('loadedplaylist', function () {
return t.startABRTimer_()
}),
t.tech_.on('pause', function () {
return t.stopABRTimer_()
}),
t.tech_.on('play', function () {
return t.startABRTimer_()
})),
_c.forEach(function (e) {
t[e + '_'] = function (e) {
return this.audioSegmentLoader_[e] + this.mainSegmentLoader_[e]
}.bind(ft(t), e)
}),
(t.logger_ = Ro('MPC')),
(t.triggeredFmp4Usage = !1),
'none' === t.tech_.preload()
? ((t.loadOnPlay_ = function () {
;(t.loadOnPlay_ = null), t.masterPlaylistLoader_.load()
}),
t.tech_.one('play', t.loadOnPlay_))
: t.masterPlaylistLoader_.load(),
(t.timeToLoadedData__ = -1),
(t.mainAppendsToLoadedData__ = -1),
(t.audioAppendsToLoadedData__ = -1)
e = 'none' === t.tech_.preload() ? 'play' : 'loadstart'
return (
t.tech_.one(e, function () {
var e = Date.now()
t.tech_.one('loadeddata', function () {
;(t.timeToLoadedData__ = Date.now() - e),
(t.mainAppendsToLoadedData__ = t.mainSegmentLoader_.mediaAppends),
(t.audioAppendsToLoadedData__ = t.audioSegmentLoader_.mediaAppends)
})
}),
t
)
}
mt(e, v)
var t = e.prototype
return (
(t.mainAppendsToLoadedData_ = function () {
return this.mainAppendsToLoadedData__
}),
(t.audioAppendsToLoadedData_ = function () {
return this.audioAppendsToLoadedData__
}),
(t.appendsToLoadedData_ = function () {
var e = this.mainAppendsToLoadedData_(),
t = this.audioAppendsToLoadedData_()
return -1 === e || -1 === t ? -1 : e + t
}),
(t.timeToLoadedData_ = function () {
return this.timeToLoadedData__
}),
(t.checkABR_ = function () {
var e = this.selectPlaylist()
e && this.shouldSwitchToMedia_(e) && this.switchMedia_(e, 'abr')
}),
(t.switchMedia_ = function (e, t, i) {
var n = this.media(),
r = n && (n.id || n.uri),
n = e.id || e.uri
r && r !== n && (this.logger_('switch media ' + r + ' -> ' + n + ' from ' + t), this.tech_.trigger({ type: 'usage', name: 'vhs-rendition-change-' + t })),
this.masterPlaylistLoader_.media(e, i)
}),
(t.startABRTimer_ = function () {
var e = this
this.stopABRTimer_(),
(this.abrTimer_ = window.setInterval(function () {
return e.checkABR_()
}, 250))
}),
(t.stopABRTimer_ = function () {
;(this.tech_.scrubbing && this.tech_.scrubbing()) || (window.clearInterval(this.abrTimer_), (this.abrTimer_ = null))
}),
(t.getAudioTrackPlaylists_ = function () {
var e = this.master(),
t = (e && e.playlists) || []
if (!e || !e.mediaGroups || !e.mediaGroups.AUDIO) return t
var i,
n = e.mediaGroups.AUDIO,
r = Object.keys(n)
if (Object.keys(this.mediaTypes_.AUDIO.groups).length) i = this.mediaTypes_.AUDIO.activeTrack()
else {
var a,
s = n.main || (r.length && n[r[0]])
for (a in s)
if (s[a].default) {
i = { label: a }
break
}
}
if (!i) return t
var o,
u = []
for (o in n)
if (n[o][i.label]) {
var l = n[o][i.label]
if (l.playlists && l.playlists.length) u.push.apply(u, l.playlists)
else if (l.uri) u.push(l)
else if (e.playlists.length)
for (var c = 0; c < e.playlists.length; c++) {
var d = e.playlists[c]
d.attributes && d.attributes.AUDIO && d.attributes.AUDIO === o && u.push(d)
}
}
return u.length ? u : t
}),
(t.setupMasterPlaylistLoaderListeners_ = function () {
var i = this
this.masterPlaylistLoader_.on('loadedmetadata', function () {
var e = i.masterPlaylistLoader_.media(),
t = 1.5 * e.targetDuration * 1e3
iu(i.masterPlaylistLoader_.master, i.masterPlaylistLoader_.media()) ? (i.requestOptions_.timeout = 0) : (i.requestOptions_.timeout = t),
e.endList && 'none' !== i.tech_.preload() && (i.mainSegmentLoader_.playlist(e, i.requestOptions_), i.mainSegmentLoader_.load()),
Xl({
sourceType: i.sourceType_,
segmentLoaders: { AUDIO: i.audioSegmentLoader_, SUBTITLES: i.subtitleSegmentLoader_, main: i.mainSegmentLoader_ },
tech: i.tech_,
requestOptions: i.requestOptions_,
masterPlaylistLoader: i.masterPlaylistLoader_,
vhs: i.vhs_,
master: i.master(),
mediaTypes: i.mediaTypes_,
blacklistCurrentPlaylist: i.blacklistCurrentPlaylist.bind(i),
}),
i.triggerPresenceUsage_(i.master(), e),
i.setupFirstPlay(),
!i.mediaTypes_.AUDIO.activePlaylistLoader || i.mediaTypes_.AUDIO.activePlaylistLoader.media()
? i.trigger('selectedinitialmedia')
: i.mediaTypes_.AUDIO.activePlaylistLoader.one('loadedmetadata', function () {
i.trigger('selectedinitialmedia')
})
}),
this.masterPlaylistLoader_.on('loadedplaylist', function () {
i.loadOnPlay_ && i.tech_.off('play', i.loadOnPlay_)
var e,
t = i.masterPlaylistLoader_.media()
if (!t) {
if ((i.excludeUnsupportedVariants_(), !(e = (e = i.enableLowInitialPlaylist ? i.selectInitialPlaylist() : e) || i.selectPlaylist()) || !i.shouldSwitchToMedia_(e)))
return
if (((i.initialMedia_ = e), i.switchMedia_(i.initialMedia_, 'initial'), !('vhs-json' === i.sourceType_ && i.initialMedia_.segments))) return
t = i.initialMedia_
}
i.handleUpdatedMediaPlaylist(t)
}),
this.masterPlaylistLoader_.on('error', function () {
i.blacklistCurrentPlaylist(i.masterPlaylistLoader_.error)
}),
this.masterPlaylistLoader_.on('mediachanging', function () {
i.mainSegmentLoader_.abort(), i.mainSegmentLoader_.pause()
}),
this.masterPlaylistLoader_.on('mediachange', function () {
var e = i.masterPlaylistLoader_.media(),
t = 1.5 * e.targetDuration * 1e3
iu(i.masterPlaylistLoader_.master, i.masterPlaylistLoader_.media()) ? (i.requestOptions_.timeout = 0) : (i.requestOptions_.timeout = t),
i.mainSegmentLoader_.playlist(e, i.requestOptions_),
i.mainSegmentLoader_.load(),
i.tech_.trigger({ type: 'mediachange', bubbles: !0 })
}),
this.masterPlaylistLoader_.on('playlistunchanged', function () {
var e = i.masterPlaylistLoader_.media()
'playlist-unchanged' !== e.lastExcludeReason_ &&
i.stuckAtPlaylistEnd_(e) &&
(i.blacklistCurrentPlaylist({ message: 'Playlist no longer updating.', reason: 'playlist-unchanged' }), i.tech_.trigger('playliststuck'))
}),
this.masterPlaylistLoader_.on('renditiondisabled', function () {
i.tech_.trigger({ type: 'usage', name: 'vhs-rendition-disabled' }), i.tech_.trigger({ type: 'usage', name: 'hls-rendition-disabled' })
}),
this.masterPlaylistLoader_.on('renditionenabled', function () {
i.tech_.trigger({ type: 'usage', name: 'vhs-rendition-enabled' }), i.tech_.trigger({ type: 'usage', name: 'hls-rendition-enabled' })
})
}),
(t.handleUpdatedMediaPlaylist = function (e) {
this.useCueTags_ && this.updateAdCues_(e),
this.mainSegmentLoader_.playlist(e, this.requestOptions_),
this.updateDuration(!e.endList),
this.tech_.paused() || (this.mainSegmentLoader_.load(), this.audioSegmentLoader_ && this.audioSegmentLoader_.load())
}),
(t.triggerPresenceUsage_ = function (e, t) {
var i,
n = e.mediaGroups || {},
r = !0,
e = Object.keys(n.AUDIO)
for (i in n.AUDIO) for (var a in n.AUDIO[i]) n.AUDIO[i][a].uri || (r = !1)
r && (this.tech_.trigger({ type: 'usage', name: 'vhs-demuxed' }), this.tech_.trigger({ type: 'usage', name: 'hls-demuxed' })),
Object.keys(n.SUBTITLES).length && (this.tech_.trigger({ type: 'usage', name: 'vhs-webvtt' }), this.tech_.trigger({ type: 'usage', name: 'hls-webvtt' })),
Ql.Playlist.isAes(t) && (this.tech_.trigger({ type: 'usage', name: 'vhs-aes' }), this.tech_.trigger({ type: 'usage', name: 'hls-aes' })),
e.length &&
1 < Object.keys(n.AUDIO[e[0]]).length &&
(this.tech_.trigger({ type: 'usage', name: 'vhs-alternate-audio' }), this.tech_.trigger({ type: 'usage', name: 'hls-alternate-audio' })),
this.useCueTags_ && (this.tech_.trigger({ type: 'usage', name: 'vhs-playlist-cue-tags' }), this.tech_.trigger({ type: 'usage', name: 'hls-playlist-cue-tags' }))
}),
(t.shouldSwitchToMedia_ = function (e) {
var t = this.masterPlaylistLoader_.media() || this.masterPlaylistLoader_.pendingMedia_,
i = this.tech_.currentTime(),
n = this.bufferLowWaterLine(),
r = this.bufferHighWaterLine()
return (function (e) {
var t = e.currentPlaylist,
i = e.buffered,
n = e.currentTime,
r = e.nextPlaylist,
a = e.bufferLowWaterLine,
s = e.bufferHighWaterLine,
o = e.duration,
u = e.experimentalBufferBasedABR,
l = e.log
if (!r) return tr.log.warn('We received no playlist to switch to. Please check your stream.'), !1
var c = 'allowing switch ' + ((t && t.id) || 'null') + ' -> ' + r.id
if (!t) return l(c + ' as current playlist is not set'), !0
if (r.id === t.id) return !1
e = Boolean(Uo(i, n).length)
if (!t.endList)
return e || 'number' != typeof t.partTargetDuration
? (l(c + ' as current playlist is live'), !0)
: (l('not ' + c + " as current playlist is live llhls, but currentTime isn't in buffered."), !1)
;(i = qo(i, n)), (n = u ? El.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE : El.MAX_BUFFER_LOW_WATER_LINE)
if (o < n) return l(c + ' as duration < max low water line (' + o + ' < ' + n + ')'), !0
;(n = r.attributes.BANDWIDTH), (r = t.attributes.BANDWIDTH)
if (n < r && (!u || i < s)) {
t = c + ' as next bandwidth < current bandwidth (' + n + ' < ' + r + ')'
return u && (t += ' and forwardBuffer < bufferHighWaterLine (' + i + ' < ' + s + ')'), l(t), !0
}
if ((!u || r < n) && a <= i) {
a = c + ' as forwardBuffer >= bufferLowWaterLine (' + i + ' >= ' + a + ')'
return u && (a += ' and next bandwidth > current bandwidth (' + n + ' > ' + r + ')'), l(a), !0
}
return l('not ' + c + ' as no switching criteria met'), !1
})({
buffered: this.tech_.buffered(),
currentTime: i,
currentPlaylist: t,
nextPlaylist: e,
bufferLowWaterLine: n,
bufferHighWaterLine: r,
duration: this.duration(),
experimentalBufferBasedABR: this.experimentalBufferBasedABR,
log: this.logger_,
})
}),
(t.setupSegmentLoaderListeners_ = function () {
var t = this
this.experimentalBufferBasedABR ||
(this.mainSegmentLoader_.on('bandwidthupdate', function () {
var e = t.selectPlaylist()
t.shouldSwitchToMedia_(e) && t.switchMedia_(e, 'bandwidthupdate'), t.tech_.trigger('bandwidthupdate')
}),
this.mainSegmentLoader_.on('progress', function () {
t.trigger('progress')
})),
this.mainSegmentLoader_.on('error', function () {
t.blacklistCurrentPlaylist(t.mainSegmentLoader_.error())
}),
this.mainSegmentLoader_.on('appenderror', function () {
;(t.error = t.mainSegmentLoader_.error_), t.trigger('error')
}),
this.mainSegmentLoader_.on('syncinfoupdate', function () {
t.onSyncInfoUpdate_()
}),
this.mainSegmentLoader_.on('timestampoffset', function () {
t.tech_.trigger({ type: 'usage', name: 'vhs-timestamp-offset' }), t.tech_.trigger({ type: 'usage', name: 'hls-timestamp-offset' })
}),
this.audioSegmentLoader_.on('syncinfoupdate', function () {
t.onSyncInfoUpdate_()
}),
this.audioSegmentLoader_.on('appenderror', function () {
;(t.error = t.audioSegmentLoader_.error_), t.trigger('error')
}),
this.mainSegmentLoader_.on('ended', function () {
t.logger_('main segment loader ended'), t.onEndOfStream()
}),
this.mainSegmentLoader_.on('earlyabort', function (e) {
t.experimentalBufferBasedABR ||
(t.delegateLoaders_('all', ['abort']),
t.blacklistCurrentPlaylist({ message: "Aborted early because there isn't enough bandwidth to complete the request without rebuffering." }, 120))
})
function e() {
if (!t.sourceUpdater_.hasCreatedSourceBuffers()) return t.tryToCreateSourceBuffers_()
var e = t.getCodecsOrExclude_()
e && t.sourceUpdater_.addOrChangeSourceBuffers(e)
}
this.mainSegmentLoader_.on('trackinfo', e),
this.audioSegmentLoader_.on('trackinfo', e),
this.mainSegmentLoader_.on('fmp4', function () {
t.triggeredFmp4Usage || (t.tech_.trigger({ type: 'usage', name: 'vhs-fmp4' }), t.tech_.trigger({ type: 'usage', name: 'hls-fmp4' }), (t.triggeredFmp4Usage = !0))
}),
this.audioSegmentLoader_.on('fmp4', function () {
t.triggeredFmp4Usage || (t.tech_.trigger({ type: 'usage', name: 'vhs-fmp4' }), t.tech_.trigger({ type: 'usage', name: 'hls-fmp4' }), (t.triggeredFmp4Usage = !0))
}),
this.audioSegmentLoader_.on('ended', function () {
t.logger_('audioSegmentLoader ended'), t.onEndOfStream()
})
}),
(t.mediaSecondsLoaded_ = function () {
return Math.max(this.audioSegmentLoader_.mediaSecondsLoaded + this.mainSegmentLoader_.mediaSecondsLoaded)
}),
(t.load = function () {
this.mainSegmentLoader_.load(),
this.mediaTypes_.AUDIO.activePlaylistLoader && this.audioSegmentLoader_.load(),
this.mediaTypes_.SUBTITLES.activePlaylistLoader && this.subtitleSegmentLoader_.load()
}),
(t.smoothQualityChange_ = function (e) {
void 0 === e && (e = this.selectPlaylist()), this.fastQualityChange_(e)
}),
(t.fastQualityChange_ = function (e) {
var t = this
;(e = void 0 === e ? this.selectPlaylist() : e) !== this.masterPlaylistLoader_.media()
? (this.switchMedia_(e, 'fast-quality'),
this.mainSegmentLoader_.resetEverything(function () {
tr.browser.IE_VERSION || tr.browser.IS_EDGE ? t.tech_.setCurrentTime(t.tech_.currentTime() + 0.04) : t.tech_.setCurrentTime(t.tech_.currentTime())
}))
: this.logger_('skipping fastQualityChange because new media is same as old')
}),
(t.play = function () {
if (!this.setupFirstPlay()) {
this.tech_.ended() && this.tech_.setCurrentTime(0), this.hasPlayed_ && this.load()
var e = this.tech_.seekable()
return this.tech_.duration() === 1 / 0 && this.tech_.currentTime() < e.start(0) ? this.tech_.setCurrentTime(e.end(e.length - 1)) : void 0
}
}),
(t.setupFirstPlay = function () {
var e = this,
t = this.masterPlaylistLoader_.media()
if (!t || this.tech_.paused() || this.hasPlayed_) return !1
if (!t.endList) {
var i = this.seekable()
if (!i.length) return !1
if (tr.browser.IE_VERSION && 0 === this.tech_.readyState())
return (
this.tech_.one('loadedmetadata', function () {
e.trigger('firstplay'), e.tech_.setCurrentTime(i.end(0)), (e.hasPlayed_ = !0)
}),
!1
)
this.trigger('firstplay'), this.tech_.setCurrentTime(i.end(0))
}
return (this.hasPlayed_ = !0), this.load(), !0
}),
(t.handleSourceOpen_ = function () {
var e
this.tryToCreateSourceBuffers_(),
!this.tech_.autoplay() || ('undefined' != typeof (e = this.tech_.play()) && 'function' == typeof e.then && e.then(null, function (e) {})),
this.trigger('sourceopen')
}),
(t.handleSourceEnded_ = function () {
var e, t
!this.inbandTextTracks_.metadataTrack_ ||
((e = this.inbandTextTracks_.metadataTrack_.cues) && e.length && ((t = this.duration()), (e[e.length - 1].endTime = isNaN(t) || Math.abs(t) === 1 / 0 ? Number.MAX_VALUE : t)))
}),
(t.handleDurationChange_ = function () {
this.tech_.trigger('durationchange')
}),
(t.onEndOfStream = function () {
var e,
t = this.mainSegmentLoader_.ended_
;(t = this.mediaTypes_.AUDIO.activePlaylistLoader ? (((e = this.mainSegmentLoader_.getCurrentMediaInfo_()) && !e.hasVideo) || t) && this.audioSegmentLoader_.ended_ : t) &&
(this.stopABRTimer_(), this.sourceUpdater_.endOfStream())
}),
(t.stuckAtPlaylistEnd_ = function (e) {
if (!this.seekable().length) return !1
var t = this.syncController_.getExpiredTime(e, this.duration())
if (null === t) return !1
var i = Ql.Playlist.playlistEnd(e, t),
e = this.tech_.currentTime(),
t = this.tech_.buffered()
if (!t.length) return i - e <= 0.1
t = t.end(t.length - 1)
return t - e <= 0.1 && i - t <= 0.1
}),
(t.blacklistCurrentPlaylist = function (e, t) {
var i = (e = void 0 === e ? {} : e).playlist || this.masterPlaylistLoader_.media()
if (((t = t || e.blacklistDuration || this.blacklistDuration), !i))
return (this.error = e), void ('open' !== this.mediaSource.readyState ? this.trigger('error') : this.sourceUpdater_.endOfStream('network'))
i.playlistErrors_++
var n,
r = this.masterPlaylistLoader_.master.playlists,
a = r.filter(eu),
s = 1 === a.length && a[0] === i
if (1 === r.length && t !== 1 / 0)
return (
tr.log.warn('Problem encountered with playlist ' + i.id + '. Trying again since it is the only playlist.'),
this.tech_.trigger('retryplaylist'),
this.masterPlaylistLoader_.load(s)
)
s &&
((n = !1),
r.forEach(function (e) {
var t
e === i || ('undefined' != typeof (t = e.excludeUntil) && t !== 1 / 0 && ((n = !0), delete e.excludeUntil))
}),
n && (tr.log.warn('Removing other playlists from the exclusion list because the last rendition is about to be excluded.'), this.tech_.trigger('retryplaylist'))),
(a = i.playlistErrors_ > this.maxPlaylistRetries ? 1 / 0 : Date.now() + 1e3 * t),
(i.excludeUntil = a),
e.reason && (i.lastExcludeReason_ = e.reason),
this.tech_.trigger('blacklistplaylist'),
this.tech_.trigger({ type: 'usage', name: 'vhs-rendition-blacklisted' }),
this.tech_.trigger({ type: 'usage', name: 'hls-rendition-blacklisted' })
r = this.selectPlaylist()
if (!r) return (this.error = 'Playback cannot continue. No available working or supported playlists.'), void this.trigger('error')
;(t = e.internal ? this.logger_ : tr.log.warn), (a = e.message ? ' ' + e.message : '')
t((e.internal ? 'Internal problem' : 'Problem') + ' encountered with playlist ' + i.id + '.' + a + ' Switching to playlist ' + r.id + '.'),
r.attributes.AUDIO !== i.attributes.AUDIO && this.delegateLoaders_('audio', ['abort', 'pause']),
r.attributes.SUBTITLES !== i.attributes.SUBTITLES && this.delegateLoaders_('subtitle', ['abort', 'pause']),
this.delegateLoaders_('main', ['abort', 'pause'])
;(a = (r.targetDuration / 2) * 1e3 || 5e3), (a = 'number' == typeof r.lastRequest && Date.now() - r.lastRequest <= a)
return this.switchMedia_(r, 'exclude', s || a)
}),
(t.pauseLoading = function () {
this.delegateLoaders_('all', ['abort', 'pause']), this.stopABRTimer_()
}),
(t.delegateLoaders_ = function (i, e) {
var n = this,
r = [],
t = 'all' === i
;(!t && 'main' !== i) || r.push(this.masterPlaylistLoader_)
var a = []
;(!t && 'audio' !== i) || a.push('AUDIO'),
(!t && 'subtitle' !== i) || (a.push('CLOSED-CAPTIONS'), a.push('SUBTITLES')),
a.forEach(function (e) {
e = n.mediaTypes_[e] && n.mediaTypes_[e].activePlaylistLoader
e && r.push(e)
}),
['main', 'audio', 'subtitle'].forEach(function (e) {
var t = n[e + 'SegmentLoader_']
!t || (i !== e && 'all' !== i) || r.push(t)
}),
r.forEach(function (t) {
return e.forEach(function (e) {
'function' == typeof t[e] && t[e]()
})
})
}),
(t.setCurrentTime = function (e) {
var t = Uo(this.tech_.buffered(), e)
return this.masterPlaylistLoader_ && this.masterPlaylistLoader_.media() && this.masterPlaylistLoader_.media().segments
? t && t.length
? e
: (this.mainSegmentLoader_.resetEverything(),
this.mainSegmentLoader_.abort(),
this.mediaTypes_.AUDIO.activePlaylistLoader && (this.audioSegmentLoader_.resetEverything(), this.audioSegmentLoader_.abort()),
this.mediaTypes_.SUBTITLES.activePlaylistLoader && (this.subtitleSegmentLoader_.resetEverything(), this.subtitleSegmentLoader_.abort()),
void this.load())
: 0
}),
(t.duration = function () {
if (!this.masterPlaylistLoader_) return 0
var e = this.masterPlaylistLoader_.media()
return e ? (e.endList ? (this.mediaSource ? this.mediaSource.duration : Ql.Playlist.duration(e)) : 1 / 0) : 0
}),
(t.seekable = function () {
return this.seekable_
}),
(t.onSyncInfoUpdate_ = function () {
var e
if (this.masterPlaylistLoader_) {
var t = this.masterPlaylistLoader_.media()
if (t) {
var i = this.syncController_.getExpiredTime(t, this.duration())
if (null !== i) {
var n,
r,
a = this.masterPlaylistLoader_.master,
s = Ql.Playlist.seekable(t, i, Ql.Playlist.liveEdgeDelay(a, t))
if (0 !== s.length) {
if (this.mediaTypes_.AUDIO.activePlaylistLoader) {
if (((t = this.mediaTypes_.AUDIO.activePlaylistLoader.media()), null === (i = this.syncController_.getExpiredTime(t, this.duration())))) return
if (0 === (e = Ql.Playlist.seekable(t, i, Ql.Playlist.liveEdgeDelay(a, t))).length) return
}
this.seekable_ && this.seekable_.length && ((n = this.seekable_.end(0)), (r = this.seekable_.start(0))),
!e || e.start(0) > s.end(0) || s.start(0) > e.end(0)
? (this.seekable_ = s)
: (this.seekable_ = tr.createTimeRanges([[(e.start(0) > s.start(0) ? e : s).start(0), (e.end(0) < s.end(0) ? e : s).end(0)]])),
(this.seekable_ && this.seekable_.length && this.seekable_.end(0) === n && this.seekable_.start(0) === r) ||
(this.logger_('seekable updated [' + Fo(this.seekable_) + ']'), this.tech_.trigger('seekablechanged'))
}
}
}
}
}),
(t.updateDuration = function (e) {
if ((this.updateDuration_ && (this.mediaSource.removeEventListener('sourceopen', this.updateDuration_), (this.updateDuration_ = null)), 'open' !== this.mediaSource.readyState))
return (this.updateDuration_ = this.updateDuration.bind(this, e)), void this.mediaSource.addEventListener('sourceopen', this.updateDuration_)
if (e) {
var t = this.seekable()
return t.length ? void ((isNaN(this.mediaSource.duration) || this.mediaSource.duration < t.end(t.length - 1)) && this.sourceUpdater_.setDuration(t.end(t.length - 1))) : void 0
}
;(e = this.tech_.buffered()), (t = Ql.Playlist.duration(this.masterPlaylistLoader_.media()))
0 < e.length && (t = Math.max(t, e.end(e.length - 1))), this.mediaSource.duration !== t && this.sourceUpdater_.setDuration(t)
}),
(t.dispose = function () {
var n = this
this.trigger('dispose'),
this.decrypter_.terminate(),
this.masterPlaylistLoader_.dispose(),
this.mainSegmentLoader_.dispose(),
this.loadOnPlay_ && this.tech_.off('play', this.loadOnPlay_),
['AUDIO', 'SUBTITLES'].forEach(function (e) {
var t,
i = n.mediaTypes_[e].groups
for (t in i)
i[t].forEach(function (e) {
e.playlistLoader && e.playlistLoader.dispose()
})
}),
this.audioSegmentLoader_.dispose(),
this.subtitleSegmentLoader_.dispose(),
this.sourceUpdater_.dispose(),
this.timelineChangeController_.dispose(),
this.stopABRTimer_(),
this.updateDuration_ && this.mediaSource.removeEventListener('sourceopen', this.updateDuration_),
this.mediaSource.removeEventListener('durationchange', this.handleDurationChange_),
this.mediaSource.removeEventListener('sourceopen', this.handleSourceOpen_),
this.mediaSource.removeEventListener('sourceended', this.handleSourceEnded_),
this.off()
}),
(t.master = function () {
return this.masterPlaylistLoader_.master
}),
(t.media = function () {
return this.masterPlaylistLoader_.media() || this.initialMedia_
}),
(t.areMediaTypesKnown_ = function () {
var e = !!this.mediaTypes_.AUDIO.activePlaylistLoader,
t = !!this.mainSegmentLoader_.getCurrentMediaInfo_(),
e = !e || !!this.audioSegmentLoader_.getCurrentMediaInfo_()
return t && e
}),
(t.getCodecsOrExclude_ = function () {
var n = this,
r = { main: this.mainSegmentLoader_.getCurrentMediaInfo_() || {}, audio: this.audioSegmentLoader_.getCurrentMediaInfo_() || {} }
r.video = r.main
var e = $u(this.master(), this.media()),
a = {},
t = !!this.mediaTypes_.AUDIO.activePlaylistLoader
if (
(r.main.hasVideo && (a.video = e.video || r.main.videoCodec || 'avc1.4d400d'),
r.main.isMuxed && (a.video += ',' + (e.audio || r.main.audioCodec || Lr)),
((r.main.hasAudio && !r.main.isMuxed) || r.audio.hasAudio || t) &&
((a.audio = e.audio || r.main.audioCodec || r.audio.audioCodec || Lr), (r.audio.isFmp4 = (r.main.hasAudio && !r.main.isMuxed ? r.main : r.audio).isFmp4)),
a.audio || a.video)
) {
var s,
i,
o = {}
if (
(['video', 'audio'].forEach(function (e) {
var t, i
a.hasOwnProperty(e) &&
((t = r[e].isFmp4), (i = a[e]), !(t ? gr : yr)(i)) &&
((i = r[e].isFmp4 ? 'browser' : 'muxer'), (o[i] = o[i] || []), o[i].push(a[e]), 'audio' === e && (s = i))
}),
t &&
s &&
this.media().attributes.AUDIO &&
((i = this.media().attributes.AUDIO),
this.master().playlists.forEach(function (e) {
;(e.attributes && e.attributes.AUDIO) === i && e !== n.media() && (e.excludeUntil = 1 / 0)
}),
this.logger_('excluding audio group ' + i + ' as ' + s + ' does not support codec(s): "' + a.audio + '"')),
!Object.keys(o).length)
) {
if (this.sourceUpdater_.hasCreatedSourceBuffers() && !this.sourceUpdater_.canChangeType()) {
var u = []
if (
(['video', 'audio'].forEach(function (e) {
var t = (pr(n.sourceUpdater_.codecs[e] || '')[0] || {}).type,
i = (pr(a[e] || '')[0] || {}).type
t && i && t.toLowerCase() !== i.toLowerCase() && u.push('"' + n.sourceUpdater_.codecs[e] + '" -> "' + a[e] + '"')
}),
u.length)
)
return void this.blacklistCurrentPlaylist({
playlist: this.media(),
message: 'Codec switching not supported: ' + u.join(', ') + '.',
blacklistDuration: 1 / 0,
internal: !0,
})
}
return a
}
t =
Object.keys(o).reduce(function (e, t) {
return e && (e += ', '), (e += t + ' does not support codec(s): "' + o[t].join(',') + '"')
}, '') + '.'
this.blacklistCurrentPlaylist({ playlist: this.media(), internal: !0, message: t, blacklistDuration: 1 / 0 })
} else this.blacklistCurrentPlaylist({ playlist: this.media(), message: 'Could not determine codecs for playlist.', blacklistDuration: 1 / 0 })
}),
(t.tryToCreateSourceBuffers_ = function () {
var e
'open' !== this.mediaSource.readyState ||
this.sourceUpdater_.hasCreatedSourceBuffers() ||
!this.areMediaTypesKnown_() ||
((e = this.getCodecsOrExclude_()) && (this.sourceUpdater_.createSourceBuffers(e), (e = [e.video, e.audio].filter(Boolean).join(',')), this.excludeIncompatibleVariants_(e)))
}),
(t.excludeUnsupportedVariants_ = function () {
var n = this,
r = this.master().playlists,
a = []
Object.keys(r).forEach(function (e) {
var t,
i = r[e]
;-1 === a.indexOf(i.id) &&
(a.push(i.id),
(t = []),
!(e = $u(n.master, i)).audio || yr(e.audio) || gr(e.audio) || t.push('audio codec ' + e.audio),
!e.video || yr(e.video) || gr(e.video) || t.push('video codec ' + e.video),
e.text && 'stpp.ttml.im1t' === e.text && t.push('text codec ' + e.text),
t.length && ((i.excludeUntil = 1 / 0), n.logger_('excluding ' + i.id + ' for unsupported: ' + t.join(', '))))
})
}),
(t.excludeIncompatibleVariants_ = function (e) {
var r = this,
a = [],
s = this.master().playlists,
e = Yu(pr(e)),
o = Qu(e),
u = (e.video && pr(e.video)[0]) || null,
l = (e.audio && pr(e.audio)[0]) || null
Object.keys(s).forEach(function (e) {
var t,
i,
n = s[e]
;-1 === a.indexOf(n.id) &&
n.excludeUntil !== 1 / 0 &&
(a.push(n.id),
(t = []),
(i = $u(r.masterPlaylistLoader_.master, n)),
(e = Qu(i)),
(i.audio || i.video) &&
(e !== o && t.push('codec count "' + e + '" !== "' + o + '"'),
r.sourceUpdater_.canChangeType() ||
((e = (i.video && pr(i.video)[0]) || null),
(i = (i.audio && pr(i.audio)[0]) || null),
e && u && e.type.toLowerCase() !== u.type.toLowerCase() && t.push('video codec "' + e.type + '" !== "' + u.type + '"'),
i && l && i.type.toLowerCase() !== l.type.toLowerCase() && t.push('audio codec "' + i.type + '" !== "' + l.type + '"')),
t.length && ((n.excludeUntil = 1 / 0), r.logger_('blacklisting ' + n.id + ': ' + t.join(' && ')))))
})
}),
(t.updateAdCues_ = function (e) {
var t = 0,
i = this.seekable()
i.length && (t = i.start(0)),
(function (e, t, i) {
if ((void 0 === i && (i = 0), e.segments))
for (var n = i, r = 0; r < e.segments.length; r++) {
var a,
s,
o,
u = e.segments[r]
if (
(o =
o ||
(function (e, t) {
for (var i = e.cues, n = 0; n < i.length; n++) {
var r = i[n]
if (t >= r.adStartTime && t <= r.adEndTime) return r
}
return null
})(t, n + u.duration / 2))
) {
if ('cueIn' in u) {
;(o.endTime = n), (o.adEndTime = n), (n += u.duration), (o = null)
continue
}
if (n < o.endTime) {
n += u.duration
continue
}
o.endTime += u.duration
} else
'cueOut' in u && (((o = new window.VTTCue(n, n + u.duration, u.cueOut)).adStartTime = n), (o.adEndTime = n + parseFloat(u.cueOut)), t.addCue(o)),
'cueOutCont' in u &&
((a = (s = u.cueOutCont.split('/').map(parseFloat))[0]),
(s = s[1]),
((o = new window.VTTCue(n, n + u.duration, '')).adStartTime = n - a),
(o.adEndTime = o.adStartTime + s),
t.addCue(o))
n += u.duration
}
})(e, this.cueTagsTrack_, t)
}),
(t.goalBufferLength = function () {
var e = this.tech_.currentTime(),
t = El.GOAL_BUFFER_LENGTH,
i = El.GOAL_BUFFER_LENGTH_RATE,
n = Math.max(t, El.MAX_GOAL_BUFFER_LENGTH)
return Math.min(t + e * i, n)
}),
(t.bufferLowWaterLine = function () {
var e = this.tech_.currentTime(),
t = El.BUFFER_LOW_WATER_LINE,
i = El.BUFFER_LOW_WATER_LINE_RATE,
n = Math.max(t, El.MAX_BUFFER_LOW_WATER_LINE),
r = Math.max(t, El.EXPERIMENTAL_MAX_BUFFER_LOW_WATER_LINE)
return Math.min(t + e * i, this.experimentalBufferBasedABR ? r : n)
}),
(t.bufferHighWaterLine = function () {
return El.BUFFER_HIGH_WATER_LINE
}),
e
)
})(tr.EventTarget),
Tc = ['seeking', 'seeked', 'pause', 'playing', 'error'],
Sc = (function () {
function e(e) {
var i = this
;(this.masterPlaylistController_ = e.masterPlaylistController),
(this.tech_ = e.tech),
(this.seekable = e.seekable),
(this.allowSeeksWithinUnsafeLiveWindow = e.allowSeeksWithinUnsafeLiveWindow),
(this.liveRangeSafeTimeDelta = e.liveRangeSafeTimeDelta),
(this.media = e.media),
(this.consecutiveUpdates = 0),
(this.lastRecordedTime = null),
(this.timer_ = null),
(this.checkCurrentTimeTimeout_ = null),
(this.logger_ = Ro('PlaybackWatcher')),
this.logger_('initialize')
function t() {
return i.monitorCurrentTime_()
}
function n() {
return i.monitorCurrentTime_()
}
function r() {
return i.techWaiting_()
}
function a() {
return i.cancelTimer_()
}
var s = this.masterPlaylistController_,
o = ['main', 'subtitle', 'audio'],
u = {}
o.forEach(function (e) {
;(u[e] = {
reset: function () {
return i.resetSegmentDownloads_(e)
},
updateend: function () {
return i.checkSegmentDownloads_(e)
},
}),
s[e + 'SegmentLoader_'].on('appendsdone', u[e].updateend),
s[e + 'SegmentLoader_'].on('playlistupdate', u[e].reset),
i.tech_.on(['seeked', 'seeking'], u[e].reset)
})
function l(t) {
;['main', 'audio'].forEach(function (e) {
s[e + 'SegmentLoader_'][t]('appended', i.seekingAppendCheck_)
})
}
;(this.seekingAppendCheck_ = function () {
i.fixesBadSeeks_() && ((i.consecutiveUpdates = 0), (i.lastRecordedTime = i.tech_.currentTime()), l('off'))
}),
(this.clearSeekingAppendCheck_ = function () {
return l('off')
}),
(this.watchForBadSeeking_ = function () {
i.clearSeekingAppendCheck_(), l('on')
}),
this.tech_.on('seeked', this.clearSeekingAppendCheck_),
this.tech_.on('seeking', this.watchForBadSeeking_),
this.tech_.on('waiting', r),
this.tech_.on(Tc, a),
this.tech_.on('canplay', n),
this.tech_.one('play', t),
(this.dispose = function () {
i.clearSeekingAppendCheck_(),
i.logger_('dispose'),
i.tech_.off('waiting', r),
i.tech_.off(Tc, a),
i.tech_.off('canplay', n),
i.tech_.off('play', t),
i.tech_.off('seeking', i.watchForBadSeeking_),
i.tech_.off('seeked', i.clearSeekingAppendCheck_),
o.forEach(function (e) {
s[e + 'SegmentLoader_'].off('appendsdone', u[e].updateend), s[e + 'SegmentLoader_'].off('playlistupdate', u[e].reset), i.tech_.off(['seeked', 'seeking'], u[e].reset)
}),
i.checkCurrentTimeTimeout_ && window.clearTimeout(i.checkCurrentTimeTimeout_),
i.cancelTimer_()
})
}
var t = e.prototype
return (
(t.monitorCurrentTime_ = function () {
this.checkCurrentTime_(),
this.checkCurrentTimeTimeout_ && window.clearTimeout(this.checkCurrentTimeTimeout_),
(this.checkCurrentTimeTimeout_ = window.setTimeout(this.monitorCurrentTime_.bind(this), 250))
}),
(t.resetSegmentDownloads_ = function (e) {
var t = this.masterPlaylistController_[e + 'SegmentLoader_']
0 < this[e + 'StalledDownloads_'] && this.logger_('resetting possible stalled download count for ' + e + ' loader'),
(this[e + 'StalledDownloads_'] = 0),
(this[e + 'Buffered_'] = t.buffered_())
}),
(t.checkSegmentDownloads_ = function (e) {
var t = this.masterPlaylistController_,
i = t[e + 'SegmentLoader_'],
n = i.buffered_(),
r = (function (e, t) {
if (e === t) return !1
if ((!e && t) || (!t && e)) return !0
if (e.length !== t.length) return !0
for (var i = 0; i < e.length; i++) if (e.start(i) !== t.start(i) || e.end(i) !== t.end(i)) return !0
return !1
})(this[e + 'Buffered_'], n)
;(this[e + 'Buffered_'] = n),
r
? this.resetSegmentDownloads_(e)
: (this[e + 'StalledDownloads_']++,
this.logger_('found #' + this[e + 'StalledDownloads_'] + ' ' + e + ' appends that did not increase buffer (possible stalled download)', {
playlistId: i.playlist_ && i.playlist_.id,
buffered: jo(n),
}),
this[e + 'StalledDownloads_'] < 10 ||
(this.logger_(e + ' loader stalled download exclusion'),
this.resetSegmentDownloads_(e),
this.tech_.trigger({ type: 'usage', name: 'vhs-' + e + '-download-exclusion' }),
'subtitle' !== e && t.blacklistCurrentPlaylist({ message: 'Excessive ' + e + ' segment downloading detected.' }, 1 / 0)))
}),
(t.checkCurrentTime_ = function () {
if (!this.tech_.paused() && !this.tech_.seeking()) {
var e = this.tech_.currentTime(),
t = this.tech_.buffered()
if (this.lastRecordedTime === e && (!t.length || e + 0.1 >= t.end(t.length - 1))) return this.techWaiting_()
5 <= this.consecutiveUpdates && e === this.lastRecordedTime
? (this.consecutiveUpdates++, this.waiting_())
: e === this.lastRecordedTime
? this.consecutiveUpdates++
: ((this.consecutiveUpdates = 0), (this.lastRecordedTime = e))
}
}),
(t.cancelTimer_ = function () {
;(this.consecutiveUpdates = 0), this.timer_ && (this.logger_('cancelTimer_'), clearTimeout(this.timer_)), (this.timer_ = null)
}),
(t.fixesBadSeeks_ = function () {
if (!this.tech_.seeking()) return !1
var e,
t = this.seekable(),
i = this.tech_.currentTime()
if (
(this.afterSeekableWindow_(t, i, this.media(), this.allowSeeksWithinUnsafeLiveWindow) && (e = t.end(t.length - 1)),
'undefined' != typeof (e = this.beforeSeekableWindow_(t, i) ? (a = t.start(0)) + (a === t.end(0) ? 0 : 0.1) : e))
)
return this.logger_('Trying to seek outside of seekable at time ' + i + ' with seekable range ' + Fo(t) + '. Seeking to ' + e + '.'), this.tech_.setCurrentTime(e), !0
for (
var n = this.masterPlaylistController_.sourceUpdater_,
r = this.tech_.buffered(),
a = n.audioBuffer ? n.audioBuffered() : null,
t = n.videoBuffer ? n.videoBuffered() : null,
n = this.media(),
s = n.partTargetDuration || 2 * (n.targetDuration - fl),
o = [a, t],
u = 0;
u < o.length;
u++
)
if (o[u]) if (qo(o[u], i) < s) return !1
r = Bo(r, i)
return (
0 !== r.length &&
((e = r.start(0) + 0.1),
this.logger_('Buffered region starts (' + r.start(0) + ') just beyond seek point (' + i + '). Seeking to ' + e + '.'),
this.tech_.setCurrentTime(e),
!0)
)
}),
(t.waiting_ = function () {
var e, t
this.techWaiting_() ||
((e = this.tech_.currentTime()),
(t = this.tech_.buffered()),
(t = Uo(t, e)).length &&
e + 3 <= t.end(0) &&
(this.cancelTimer_(),
this.tech_.setCurrentTime(e),
this.logger_('Stopped at ' + e + ' while inside a buffered region [' + t.start(0) + ' -> ' + t.end(0) + ']. Attempting to resume playback by seeking to the current time.'),
this.tech_.trigger({ type: 'usage', name: 'vhs-unknown-waiting' }),
this.tech_.trigger({ type: 'usage', name: 'hls-unknown-waiting' })))
}),
(t.techWaiting_ = function () {
var e = this.seekable(),
t = this.tech_.currentTime()
if (this.tech_.seeking() || null !== this.timer_) return !0
if (this.beforeSeekableWindow_(e, t)) {
var i = e.end(e.length - 1)
return (
this.logger_('Fell out of live window at time ' + t + '. Seeking to live point (seekable end) ' + i),
this.cancelTimer_(),
this.tech_.setCurrentTime(i),
this.tech_.trigger({ type: 'usage', name: 'vhs-live-resync' }),
this.tech_.trigger({ type: 'usage', name: 'hls-live-resync' }),
!0
)
}
;(e = this.tech_.vhs.masterPlaylistController_.sourceUpdater_), (i = this.tech_.buffered())
if (this.videoUnderflow_({ audioBuffered: e.audioBuffered(), videoBuffered: e.videoBuffered(), currentTime: t }))
return (
this.cancelTimer_(),
this.tech_.setCurrentTime(t),
this.tech_.trigger({ type: 'usage', name: 'vhs-video-underflow' }),
this.tech_.trigger({ type: 'usage', name: 'hls-video-underflow' }),
!0
)
e = Bo(i, t)
if (0 < e.length) {
i = e.start(0) - t
return (
this.logger_('Stopped at ' + t + ', setting timer for ' + i + ', seeking to ' + e.start(0)),
this.cancelTimer_(),
(this.timer_ = setTimeout(this.skipTheGap_.bind(this), 1e3 * i, t)),
!0
)
}
return !1
}),
(t.afterSeekableWindow_ = function (e, t, i, n) {
if ((void 0 === n && (n = !1), !e.length)) return !1
var r = e.end(e.length - 1) + 0.1
return (r = !i.endList && n ? e.end(e.length - 1) + 3 * i.targetDuration : r) < t
}),
(t.beforeSeekableWindow_ = function (e, t) {
return !!(e.length && 0 < e.start(0) && t < e.start(0) - this.liveRangeSafeTimeDelta)
}),
(t.videoUnderflow_ = function (e) {
var t,
i,
n = e.videoBuffered,
r = e.audioBuffered,
a = e.currentTime
if (n)
return (
n.length && r.length
? ((i = Uo(n, a - 3)), (e = Uo(n, a)), (r = Uo(r, a)).length && !e.length && i.length && (t = { start: i.end(0), end: r.end(0) }))
: Bo(n, a).length || (t = this.gapFromVideoUnderflow_(n, a)),
!!t && (this.logger_('Encountered a gap in video from ' + t.start + ' to ' + t.end + '. Seeking to current time ' + a), !0)
)
}),
(t.skipTheGap_ = function (e) {
var t = this.tech_.buffered(),
i = this.tech_.currentTime(),
t = Bo(t, i)
this.cancelTimer_(),
0 !== t.length &&
i === e &&
(this.logger_('skipTheGap_:', 'currentTime:', i, 'scheduled currentTime:', e, 'nextRange start:', t.start(0)),
this.tech_.setCurrentTime(t.start(0) + fl),
this.tech_.trigger({ type: 'usage', name: 'vhs-gap-skip' }),
this.tech_.trigger({ type: 'usage', name: 'hls-gap-skip' }))
}),
(t.gapFromVideoUnderflow_ = function (e, t) {
for (
var i = (function (e) {
if (e.length < 2) return tr.createTimeRanges()
for (var t = [], i = 1; i < e.length; i++) {
var n = e.end(i - 1),
r = e.start(i)
t.push([n, r])
}
return tr.createTimeRanges(t)
})(e),
n = 0;
n < i.length;
n++
) {
var r = i.start(n),
a = i.end(n)
if (t - r < 4 && 2 < t - r) return { start: r, end: a }
}
return null
}),
e
)
})(),
wc = {
errorInterval: 30,
getSource: function (e) {
return e(this.tech({ IWillNotUseThisInPlugins: !0 }).currentSource_ || this.currentSource())
},
},
Ec = {
PlaylistLoader: _l,
Playlist: gl,
utils: zt,
STANDARD_PLAYLIST_SELECTOR: ar,
INITIAL_PLAYLIST_SELECTOR: function () {
var t = this,
e = this.playlists.master.playlists.filter(gl.isEnabled)
return (
el(e, tl),
e.filter(function (e) {
return !!$u(t.playlists.master, e).video
})[0] || null
)
},
lastBandwidthSelector: ar,
movingAverageBandwidthSelector: function (t) {
var i = -1,
n = -1
if (t < 0 || 1 < t) throw new Error('Moving average bandwidth decay must be between 0 and 1.')
return function () {
var e = (this.useDevicePixelRatio && window.devicePixelRatio) || 1
return (
i < 0 && ((i = this.systemBandwidth), (n = this.systemBandwidth)),
0 < this.systemBandwidth && this.systemBandwidth !== n && ((i = t * this.systemBandwidth + (1 - t) * i), (n = this.systemBandwidth)),
il(
this.playlists.master,
i,
parseInt(Zu(this.tech_.el(), 'width'), 10) * e,
parseInt(Zu(this.tech_.el(), 'height'), 10) * e,
this.limitRenditionByPlayerDimensions,
this.masterPlaylistController_
)
)
}
},
comparePlaylistBandwidth: tl,
comparePlaylistResolution: function (e, t) {
var i, n
return (i = (i = e.attributes.RESOLUTION && e.attributes.RESOLUTION.width ? e.attributes.RESOLUTION.width : i) || window.Number.MAX_VALUE) ===
(n = (n = t.attributes.RESOLUTION && t.attributes.RESOLUTION.width ? t.attributes.RESOLUTION.width : n) || window.Number.MAX_VALUE) &&
e.attributes.BANDWIDTH &&
t.attributes.BANDWIDTH
? e.attributes.BANDWIDTH - t.attributes.BANDWIDTH
: i - n
},
xhr: yu(),
}
Object.keys(El).forEach(function (t) {
Object.defineProperty(Ec, t, {
get: function () {
return tr.log.warn('using Vhs.' + t + ' is UNSAFE be sure you know what you are doing'), El[t]
},
set: function (e) {
tr.log.warn('using Vhs.' + t + ' is UNSAFE be sure you know what you are doing'),
'number' != typeof e || e < 0 ? tr.log.warn('value of Vhs.' + t + ' must be greater than or equal to 0') : (El[t] = e)
},
})
})
function kc(e, t) {
for (var i = t.media(), n = -1, r = 0; r < e.length; r++)
if (e[r].id === i.id) {
n = r
break
}
;(e.selectedIndex_ = n), e.trigger({ selectedIndex: n, type: 'change' })
}
var Cc = 'videojs-vhs'
Ec.canPlaySource = function () {
return tr.log.warn("HLS is no longer a tech. Please remove it from your player's techOrder.")
}
function Ic(e) {
var n = e.player,
t = e.sourceKeySystems,
i = e.audioMedia,
e = e.mainPlaylists
if (!n.eme.initializeMediaKeys) return Promise.resolve()
var r,
e =
((e = e = i ? e.concat([i]) : e),
(r = Object.keys(t)),
e.reduce(function (e, n) {
if (!n.contentProtection) return e
var t = r.reduce(function (e, t) {
var i = n.contentProtection[t]
return i && i.pssh && (e[t] = { pssh: i.pssh }), e
}, {})
return Object.keys(t).length && e.push(t), e
}, [])),
a = [],
s = []
return (
e.forEach(function (e) {
s.push(
new Promise(function (e, t) {
n.tech_.one('keysessioncreated', e)
})
),
a.push(
new Promise(function (t, i) {
n.eme.initializeMediaKeys({ keySystems: e }, function (e) {
e ? i(e) : t()
})
})
)
}),
Promise.race([Promise.all(a), Promise.race(s)])
)
}
function xc(e) {
var t = e.player
return (
!!(e = (function (e, t, i) {
if (!e) return e
var n = {}
t && t.attributes && t.attributes.CODECS && (n = Yu(pr(t.attributes.CODECS))), i && i.attributes && i.attributes.CODECS && (n.audio = i.attributes.CODECS)
var r,
a = mr(n.video),
s = mr(n.audio),
o = {}
for (r in e)
(o[r] = {}),
s && (o[r].audioContentType = s),
a && (o[r].videoContentType = a),
t.contentProtection && t.contentProtection[r] && t.contentProtection[r].pssh && (o[r].pssh = t.contentProtection[r].pssh),
'string' == typeof e[r] && (o[r].url = e[r])
return tr.mergeOptions(e, o)
})(e.sourceKeySystems, e.media, e.audioMedia)) &&
(!((t.currentSource().keySystems = e) && !t.eme) || (tr.log.warn('DRM encrypted source cannot be decrypted without a DRM plugin'), !1))
)
}
function Ac() {
if (!window.localStorage) return null
var e = window.localStorage.getItem(Cc)
if (!e) return null
try {
return JSON.parse(e)
} catch (e) {
return null
}
}
;(Ec.supportsNativeHls = (function () {
if (!document || !document.createElement) return !1
var t = document.createElement('video')
if (!tr.getTech('Html5').isSupported()) return !1
return ['application/vnd.apple.mpegurl', 'audio/mpegurl', 'audio/x-mpegurl', 'application/x-mpegurl', 'video/x-mpegurl', 'video/mpegurl', 'application/mpegurl'].some(function (e) {
return /maybe|probably/i.test(t.canPlayType(e))
})
})()),
(Ec.supportsNativeDash =
!!(document && document.createElement && tr.getTech('Html5').isSupported()) && /maybe|probably/i.test(document.createElement('video').canPlayType('application/dash+xml'))),
(Ec.supportsTypeNatively = function (e) {
return 'hls' === e ? Ec.supportsNativeHls : 'dash' === e && Ec.supportsNativeDash
}),
(Ec.isSupported = function () {
return tr.log.warn("HLS is no longer a tech. Please remove it from your player's techOrder.")
})
var Pc = (function (r) {
function e(e, t, i) {
var n = r.call(this, t, tr.mergeOptions(i.hls, i.vhs)) || this
if (
(i.hls && Object.keys(i.hls).length && tr.log.warn('Using hls options is deprecated. Please rename `hls` to `vhs` in your options object.'),
'number' == typeof i.initialBandwidth && (n.options_.bandwidth = i.initialBandwidth),
(n.logger_ = Ro('VhsHandler')),
t.options_ &&
t.options_.playerId &&
((i = tr(t.options_.playerId)).hasOwnProperty('hls') ||
Object.defineProperty(i, 'hls', {
get: function () {
return tr.log.warn('player.hls is deprecated. Use player.tech().vhs instead.'), t.trigger({ type: 'usage', name: 'hls-player-access' }), ft(n)
},
configurable: !0,
}),
i.hasOwnProperty('vhs') ||
Object.defineProperty(i, 'vhs', {
get: function () {
return tr.log.warn('player.vhs is deprecated. Use player.tech().vhs instead.'), t.trigger({ type: 'usage', name: 'vhs-player-access' }), ft(n)
},
configurable: !0,
}),
i.hasOwnProperty('dash') ||
Object.defineProperty(i, 'dash', {
get: function () {
return tr.log.warn('player.dash is deprecated. Use player.tech().vhs instead.'), ft(n)
},
configurable: !0,
}),
(n.player_ = i)),
(n.tech_ = t),
(n.source_ = e),
(n.stats = {}),
(n.ignoreNextSeekingEvent_ = !1),
n.setOptions_(),
n.options_.overrideNative && t.overrideNativeAudioTracks && t.overrideNativeVideoTracks)
)
t.overrideNativeAudioTracks(!0), t.overrideNativeVideoTracks(!0)
else if (n.options_.overrideNative && (t.featuresNativeVideoTracks || t.featuresNativeAudioTracks))
throw new Error('Overriding native HLS requires emulated tracks. See https://git.io/vMpjB')
return (
n.on(document, ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'], function (e) {
var t = document.fullscreenElement || document.webkitFullscreenElement || document.mozFullScreenElement || document.msFullscreenElement
t && t.contains(n.tech_.el()) ? n.masterPlaylistController_.fastQualityChange_() : n.masterPlaylistController_.checkABR_()
}),
n.on(n.tech_, 'seeking', function () {
this.ignoreNextSeekingEvent_ ? (this.ignoreNextSeekingEvent_ = !1) : this.setCurrentTime(this.tech_.currentTime())
}),
n.on(n.tech_, 'error', function () {
this.tech_.error() && this.masterPlaylistController_ && this.masterPlaylistController_.pauseLoading()
}),
n.on(n.tech_, 'play', n.play),
n
)
}
mt(e, r)
var t = e.prototype
return (
(t.setOptions_ = function () {
var e,
t = this
;(this.options_.withCredentials = this.options_.withCredentials || !1),
(this.options_.handleManifestRedirects = !1 !== this.options_.handleManifestRedirects),
(this.options_.limitRenditionByPlayerDimensions = !1 !== this.options_.limitRenditionByPlayerDimensions),
(this.options_.useDevicePixelRatio = this.options_.useDevicePixelRatio || !1),
(this.options_.smoothQualityChange = this.options_.smoothQualityChange || !1),
(this.options_.useBandwidthFromLocalStorage =
'undefined' != typeof this.source_.useBandwidthFromLocalStorage ? this.source_.useBandwidthFromLocalStorage : this.options_.useBandwidthFromLocalStorage || !1),
(this.options_.useNetworkInformationApi = this.options_.useNetworkInformationApi || !1),
(this.options_.useDtsForTimestampOffset = this.options_.useDtsForTimestampOffset || !1),
(this.options_.customTagParsers = this.options_.customTagParsers || []),
(this.options_.customTagMappers = this.options_.customTagMappers || []),
(this.options_.cacheEncryptionKeys = this.options_.cacheEncryptionKeys || !1),
'number' != typeof this.options_.blacklistDuration && (this.options_.blacklistDuration = 300),
'number' != typeof this.options_.bandwidth &&
this.options_.useBandwidthFromLocalStorage &&
((e = Ac()) &&
e.bandwidth &&
((this.options_.bandwidth = e.bandwidth),
this.tech_.trigger({ type: 'usage', name: 'vhs-bandwidth-from-local-storage' }),
this.tech_.trigger({ type: 'usage', name: 'hls-bandwidth-from-local-storage' })),
e &&
e.throughput &&
((this.options_.throughput = e.throughput),
this.tech_.trigger({ type: 'usage', name: 'vhs-throughput-from-local-storage' }),
this.tech_.trigger({ type: 'usage', name: 'hls-throughput-from-local-storage' }))),
'number' != typeof this.options_.bandwidth && (this.options_.bandwidth = El.INITIAL_BANDWIDTH),
(this.options_.enableLowInitialPlaylist = this.options_.enableLowInitialPlaylist && this.options_.bandwidth === El.INITIAL_BANDWIDTH),
[
'withCredentials',
'useDevicePixelRatio',
'limitRenditionByPlayerDimensions',
'bandwidth',
'smoothQualityChange',
'customTagParsers',
'customTagMappers',
'handleManifestRedirects',
'cacheEncryptionKeys',
'playlistSelector',
'initialPlaylistSelector',
'experimentalBufferBasedABR',
'liveRangeSafeTimeDelta',
'experimentalLLHLS',
'useNetworkInformationApi',
'useDtsForTimestampOffset',
'experimentalExactManifestTimings',
'experimentalLeastPixelDiffSelector',
].forEach(function (e) {
'undefined' != typeof t.source_[e] && (t.options_[e] = t.source_[e])
}),
(this.limitRenditionByPlayerDimensions = this.options_.limitRenditionByPlayerDimensions),
(this.useDevicePixelRatio = this.options_.useDevicePixelRatio)
}),
(t.src = function (e, t) {
var n = this
e &&
(this.setOptions_(),
(this.options_.src = 0 === (e = this.source_.src).toLowerCase().indexOf('data:application/vnd.videojs.vhs+json,') ? JSON.parse(e.substring(e.indexOf(',') + 1)) : e),
(this.options_.tech = this.tech_),
(this.options_.externVhs = Ec),
(this.options_.sourceType = vr(t)),
(this.options_.seekTo = function (e) {
n.tech_.setCurrentTime(e)
}),
this.options_.smoothQualityChange && tr.log.warn('smoothQualityChange is deprecated and will be removed in the next major version'),
(this.masterPlaylistController_ = new bc(this.options_)),
(t = tr.mergeOptions({ liveRangeSafeTimeDelta: 0.1 }, this.options_, {
seekable: function () {
return n.seekable()
},
media: function () {
return n.masterPlaylistController_.media()
},
masterPlaylistController: this.masterPlaylistController_,
})),
(this.playbackWatcher_ = new Sc(t)),
this.masterPlaylistController_.on('error', function () {
var e = tr.players[n.tech_.options_.playerId],
t = n.masterPlaylistController_.error
'object' != typeof t || t.code ? 'string' == typeof t && (t = { message: t, code: 3 }) : (t.code = 3), e.error(t)
}),
(t = this.options_.experimentalBufferBasedABR ? Ec.movingAverageBandwidthSelector(0.55) : Ec.STANDARD_PLAYLIST_SELECTOR),
(this.masterPlaylistController_.selectPlaylist = (this.selectPlaylist || t).bind(this)),
(this.masterPlaylistController_.selectInitialPlaylist = Ec.INITIAL_PLAYLIST_SELECTOR.bind(this)),
(this.playlists = this.masterPlaylistController_.masterPlaylistLoader_),
(this.mediaSource = this.masterPlaylistController_.mediaSource),
Object.defineProperties(this, {
selectPlaylist: {
get: function () {
return this.masterPlaylistController_.selectPlaylist
},
set: function (e) {
this.masterPlaylistController_.selectPlaylist = e.bind(this)
},
},
throughput: {
get: function () {
return this.masterPlaylistController_.mainSegmentLoader_.throughput.rate
},
set: function (e) {
;(this.masterPlaylistController_.mainSegmentLoader_.throughput.rate = e), (this.masterPlaylistController_.mainSegmentLoader_.throughput.count = 1)
},
},
bandwidth: {
get: function () {
var e = this.masterPlaylistController_.mainSegmentLoader_.bandwidth,
t = window.navigator.connection || window.navigator.mozConnection || window.navigator.webkitConnection
return (e = this.options_.useNetworkInformationApi && t ? (1e7 <= (t = 1e3 * t.downlink * 1e3) && 1e7 <= e ? Math.max(e, t) : t) : e)
},
set: function (e) {
;(this.masterPlaylistController_.mainSegmentLoader_.bandwidth = e), (this.masterPlaylistController_.mainSegmentLoader_.throughput = { rate: 0, count: 0 })
},
},
systemBandwidth: {
get: function () {
var e = 1 / (this.bandwidth || 1),
t = 0 < this.throughput ? 1 / this.throughput : 0
return Math.floor(1 / (e + t))
},
set: function () {
tr.log.error('The "systemBandwidth" property is read-only')
},
},
}),
this.options_.bandwidth && (this.bandwidth = this.options_.bandwidth),
this.options_.throughput && (this.throughput = this.options_.throughput),
Object.defineProperties(this.stats, {
bandwidth: {
get: function () {
return n.bandwidth || 0
},
enumerable: !0,
},
mediaRequests: {
get: function () {
return n.masterPlaylistController_.mediaRequests_() || 0
},
enumerable: !0,
},
mediaRequestsAborted: {
get: function () {
return n.masterPlaylistController_.mediaRequestsAborted_() || 0
},
enumerable: !0,
},
mediaRequestsTimedout: {
get: function () {
return n.masterPlaylistController_.mediaRequestsTimedout_() || 0
},
enumerable: !0,
},
mediaRequestsErrored: {
get: function () {
return n.masterPlaylistController_.mediaRequestsErrored_() || 0
},
enumerable: !0,
},
mediaTransferDuration: {
get: function () {
return n.masterPlaylistController_.mediaTransferDuration_() || 0
},
enumerable: !0,
},
mediaBytesTransferred: {
get: function () {
return n.masterPlaylistController_.mediaBytesTransferred_() || 0
},
enumerable: !0,
},
mediaSecondsLoaded: {
get: function () {
return n.masterPlaylistController_.mediaSecondsLoaded_() || 0
},
enumerable: !0,
},
mediaAppends: {
get: function () {
return n.masterPlaylistController_.mediaAppends_() || 0
},
enumerable: !0,
},
mainAppendsToLoadedData: {
get: function () {
return n.masterPlaylistController_.mainAppendsToLoadedData_() || 0
},
enumerable: !0,
},
audioAppendsToLoadedData: {
get: function () {
return n.masterPlaylistController_.audioAppendsToLoadedData_() || 0
},
enumerable: !0,
},
appendsToLoadedData: {
get: function () {
return n.masterPlaylistController_.appendsToLoadedData_() || 0
},
enumerable: !0,
},
timeToLoadedData: {
get: function () {
return n.masterPlaylistController_.timeToLoadedData_() || 0
},
enumerable: !0,
},
buffered: {
get: function () {
return jo(n.tech_.buffered())
},
enumerable: !0,
},
currentTime: {
get: function () {
return n.tech_.currentTime()
},
enumerable: !0,
},
currentSource: {
get: function () {
return n.tech_.currentSource_
},
enumerable: !0,
},
currentTech: {
get: function () {
return n.tech_.name_
},
enumerable: !0,
},
duration: {
get: function () {
return n.tech_.duration()
},
enumerable: !0,
},
master: {
get: function () {
return n.playlists.master
},
enumerable: !0,
},
playerDimensions: {
get: function () {
return n.tech_.currentDimensions()
},
enumerable: !0,
},
seekable: {
get: function () {
return jo(n.tech_.seekable())
},
enumerable: !0,
},
timestamp: {
get: function () {
return Date.now()
},
enumerable: !0,
},
videoPlaybackQuality: {
get: function () {
return n.tech_.getVideoPlaybackQuality()
},
enumerable: !0,
},
}),
this.tech_.one('canplay', this.masterPlaylistController_.setupFirstPlay.bind(this.masterPlaylistController_)),
this.tech_.on('bandwidthupdate', function () {
n.options_.useBandwidthFromLocalStorage &&
(function (e) {
if (!window.localStorage) return
var t = (t = Ac()) ? tr.mergeOptions(t, e) : e
try {
window.localStorage.setItem(Cc, JSON.stringify(t))
} catch (e) {
return
}
})({ bandwidth: n.bandwidth, throughput: Math.round(n.throughput) })
}),
this.masterPlaylistController_.on('selectedinitialmedia', function () {
var i
;(i = n).representations = function () {
var e = i.masterPlaylistController_.master(),
e = au(e) ? i.masterPlaylistController_.getAudioTrackPlaylists_() : e.playlists
return e
? e
.filter(function (e) {
return !Zo(e)
})
.map(function (e, t) {
return new Kl(i, e, e.id)
})
: []
}
}),
this.masterPlaylistController_.sourceUpdater_.on('createdsourcebuffers', function () {
n.setupEme_()
}),
this.on(this.masterPlaylistController_, 'progress', function () {
this.tech_.trigger('progress')
}),
this.on(this.masterPlaylistController_, 'firstplay', function () {
this.ignoreNextSeekingEvent_ = !0
}),
this.setupQualityLevels_(),
this.tech_.el() && ((this.mediaSourceUrl_ = window.URL.createObjectURL(this.masterPlaylistController_.mediaSource)), this.tech_.src(this.mediaSourceUrl_)))
}),
(t.createKeySessions_ = function () {
var t = this,
e = this.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader
this.logger_('waiting for EME key session creation'),
Ic({ player: this.player_, sourceKeySystems: this.source_.keySystems, audioMedia: e && e.media(), mainPlaylists: this.playlists.master.playlists })
.then(function () {
t.logger_('created EME key session'), t.masterPlaylistController_.sourceUpdater_.initializedEme()
})
.catch(function (e) {
t.logger_('error while creating EME key session', e), t.player_.error({ message: 'Failed to initialize media keys for EME', code: 3 })
})
}),
(t.handleWaitingForKey_ = function () {
this.logger_('waitingforkey fired, attempting to create any new key sessions'), this.createKeySessions_()
}),
(t.setupEme_ = function () {
var t = this,
e = this.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader,
e = xc({ player: this.player_, sourceKeySystems: this.source_.keySystems, media: this.playlists.media(), audioMedia: e && e.media() })
this.player_.tech_.on('keystatuschange', function (e) {
'output-restricted' === e.status &&
t.masterPlaylistController_.blacklistCurrentPlaylist({
playlist: t.masterPlaylistController_.media(),
message: 'DRM keystatus changed to ' + e.status + '. Playlist will fail to play. Check for HDCP content.',
blacklistDuration: 1 / 0,
})
}),
(this.handleWaitingForKey_ = this.handleWaitingForKey_.bind(this)),
this.player_.tech_.on('waitingforkey', this.handleWaitingForKey_),
11 !== tr.browser.IE_VERSION && e ? this.createKeySessions_() : this.masterPlaylistController_.sourceUpdater_.initializedEme()
}),
(t.setupQualityLevels_ = function () {
var i = this,
e = tr.players[this.tech_.options_.playerId]
e &&
e.qualityLevels &&
!this.qualityLevels_ &&
((this.qualityLevels_ = e.qualityLevels()),
this.masterPlaylistController_.on('selectedinitialmedia', function () {
var t, e
;(t = i.qualityLevels_),
(e = i).representations().forEach(function (e) {
t.addQualityLevel(e)
}),
kc(t, e.playlists)
}),
this.playlists.on('mediachange', function () {
kc(i.qualityLevels_, i.playlists)
}))
}),
(e.version = function () {
return { '@videojs/http-streaming': '2.14.2', 'mux.js': '6.0.1', 'mpd-parser': '0.21.1', 'm3u8-parser': '4.7.1', 'aes-decrypter': '3.1.3' }
}),
(t.version = function () {
return this.constructor.version()
}),
(t.canChangeType = function () {
return uc.canChangeType()
}),
(t.play = function () {
this.masterPlaylistController_.play()
}),
(t.setCurrentTime = function (e) {
this.masterPlaylistController_.setCurrentTime(e)
}),
(t.duration = function () {
return this.masterPlaylistController_.duration()
}),
(t.seekable = function () {
return this.masterPlaylistController_.seekable()
}),
(t.dispose = function () {
this.playbackWatcher_ && this.playbackWatcher_.dispose(),
this.masterPlaylistController_ && this.masterPlaylistController_.dispose(),
this.qualityLevels_ && this.qualityLevels_.dispose(),
this.player_ && (delete this.player_.vhs, delete this.player_.dash, delete this.player_.hls),
this.tech_ && this.tech_.vhs && delete this.tech_.vhs,
this.tech_ && delete this.tech_.hls,
this.mediaSourceUrl_ && window.URL.revokeObjectURL && (window.URL.revokeObjectURL(this.mediaSourceUrl_), (this.mediaSourceUrl_ = null)),
this.tech_ && this.tech_.off('waitingforkey', this.handleWaitingForKey_),
r.prototype.dispose.call(this)
}),
(t.convertToProgramTime = function (e, t) {
return ku({ playlist: this.masterPlaylistController_.media(), time: e, callback: t })
}),
(t.seekToProgramTime = function (e, t, i, n) {
return (
void 0 === i && (i = !0),
void 0 === n && (n = 2),
Cu({ programTime: e, playlist: this.masterPlaylistController_.media(), retryCount: n, pauseAfterSeek: i, seekTo: this.options_.seekTo, tech: this.options_.tech, callback: t })
)
}),
e
)
})(tr.getComponent('Component')),
Lc = {
name: 'videojs-http-streaming',
VERSION: '2.14.2',
canHandleSource: function (e, t) {
t = tr.mergeOptions(tr.options, (t = void 0 === t ? {} : t))
return Lc.canPlayType(e.type, t)
},
handleSource: function (e, t, i) {
i = tr.mergeOptions(tr.options, (i = void 0 === i ? {} : i))
return (
(t.vhs = new Pc(e, t, i)),
tr.hasOwnProperty('hls') ||
Object.defineProperty(t, 'hls', {
get: function () {
return tr.log.warn('player.tech().hls is deprecated. Use player.tech().vhs instead.'), t.vhs
},
configurable: !0,
}),
(t.vhs.xhr = yu()),
t.vhs.src(e.src, e.type),
t.vhs
)
},
canPlayType: function (e, t) {
var i = tr.mergeOptions(tr.options, (t = void 0 === t ? {} : t)),
t = i.vhs,
t = (t = void 0 === t ? {} : t).overrideNative,
t = void 0 === t ? !tr.browser.IS_ANY_SAFARI : t,
i = i.hls,
i = (i = void 0 === i ? {} : i).overrideNative,
i = void 0 !== i && i,
e = vr(e)
return e && (!Ec.supportsTypeNatively(e) || i || t) ? 'maybe' : ''
},
}
return (
gr('avc1.4d400d,mp4a.40.2') && tr.getTech('Html5').registerSourceHandler(Lc, 0),
(tr.VhsHandler = Pc),
Object.defineProperty(tr, 'HlsHandler', {
get: function () {
return tr.log.warn('videojs.HlsHandler is deprecated. Use videojs.VhsHandler instead.'), Pc
},
configurable: !0,
}),
(tr.VhsSourceHandler = Lc),
Object.defineProperty(tr, 'HlsSourceHandler', {
get: function () {
return tr.log.warn('videojs.HlsSourceHandler is deprecated. Use videojs.VhsSourceHandler instead.'), Lc
},
configurable: !0,
}),
(tr.Vhs = Ec),
Object.defineProperty(tr, 'Hls', {
get: function () {
return tr.log.warn('videojs.Hls is deprecated. Use videojs.Vhs instead.'), Ec
},
configurable: !0,
}),
tr.use || (tr.registerComponent('Hls', Ec), tr.registerComponent('Vhs', Ec)),
(tr.options.vhs = tr.options.vhs || {}),
(tr.options.hls = tr.options.hls || {}),
(tr.getPlugin && tr.getPlugin('reloadSourceOnError')) ||
(tr.registerPlugin || tr.plugin)('reloadSourceOnError', function (e) {
Yl(this, e)
}),
tr
)
})