/**
* @license
* Video.js 7.10.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(require('global/window'), require('global/document')) : 'function' == typeof define && define.amd ? define(['global/window', 'global/document'], t) : (e = e || self).videojs = t(e.window, e.document);}(this, function (T, d) {
'use strict';
T = T && Object.prototype.hasOwnProperty.call(T, 'default') ? T.default : T, d = d && Object.prototype.hasOwnProperty.call(d, 'default') ? d.default : d;
var h = '7.10.2', l = [], e = function (o, u) {
return function (e, t, i) {
var n = u.levels[t], r = new RegExp('^(' + n + ')$');
if ('log' !== e && i.unshift(e.toUpperCase() + ':'), i.unshift(o + ':'), l) {
l.push([].concat(i));
var a = l.length - 1e3;
l.splice(0, 0 < a ? a : 0);
}
if (T.console) {
var s = T.console[e];
s || 'debug' !== e || (s = T.console.info || T.console.log), s && n && r.test(e) && s[Array.isArray(i) ? 'apply' : 'call'](T.console, i);
}
};
};
var p = function t (i) {
function n () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i];
r('log', a, t);
}
var r, a = 'info';
return r = e(i, n), 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: a
}, n.level = function (e) {
if ('string' == typeof e) {
if (!n.levels.hasOwnProperty(e)) throw new Error('"' + e + '" in not a valid log level');
a = e;
}
return a;
}, (n.history = function () {return l ? [].concat(l) : [];}).filter = function (t) {return (l || []).filter(function (e) {return new RegExp('.*' + t + '.*').test(e[0]);});}, n.history.clear = function () {l && (l.length = 0);}, n.history.disable = function () {null !== l && (l.length = 0, l = null);}, n.history.enable = function () {null === l && (l = []);}, n.error = function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i];
return r('error', a, t);
}, n.warn = function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i];
return r('warn', a, t);
}, n.debug = function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i];
return r('debug', a, t);
}, n;
}('VIDEOJS'), f = p.createLogger;
function t (e) {return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, 'default') ? e.default : e;}
function i (e, t) {return e(t = {exports: {}}, t.exports), t.exports;}
var m = i(function (e) {
function t () {
return e.exports = t = Object.assign || function (e) {
for (var t = 1; t < arguments.length; t++) {
var i = arguments[t];
for (var n in i) Object.prototype.hasOwnProperty.call(i, n) && (e[n] = i[n]);
}
return e;
}, t.apply(this, arguments);
}
e.exports = t;
}), n = Object.prototype.toString, a = function (e) {return s(e) ? Object.keys(e) : [];};
function r (t, i) {a(t).forEach(function (e) {return i(t[e], e);});}
function g (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 ? m.apply(void 0, [i].concat(t)) : (t.forEach(function (e) {e && r(e, function (e, t) {i[t] = e;});}), i);
}
function s (e) {return !!e && 'object' == typeof e;}
function o (e) {return s(e) && '[object Object]' === n.call(e) && e.constructor === Object;}
function u (e, t) {
if (!e || !t) return '';
if ('function' != typeof T.getComputedStyle) return '';
var i = T.getComputedStyle(e);
return i ? i.getPropertyValue(t) || i[t] : '';
}
function c (e) {return 'string' == typeof e && Boolean(e.trim());}
function v (e) {if (0 <= e.indexOf(' ')) throw new Error('class has illegal whitespace characters');}
function y () {return d === T.document;}
function _ (e) {return s(e) && 1 === e.nodeType;}
function b () {try {return T.parent !== T.self;} catch (e) {return !0;}}
function S (n) {
return function (e, t) {
if (!c(e)) return d[n](null);
c(t) && (t = d.querySelector(t));
var i = _(t) ? t : d;
return i[n] && i[n](e);
};
}
function k (e, i, t, n) {
void 0 === e && (e = 'div'), void 0 === i && (i = {}), void 0 === t && (t = {});
var r = d.createElement(e);
return Object.getOwnPropertyNames(i).forEach(function (e) {
var t = i[e];
-1 !== e.indexOf('aria-') || 'role' === e || 'type' === e ? (p.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 ? C(r, t) : r[e] !== t && (r[e] = t);
}), Object.getOwnPropertyNames(t).forEach(function (e) {r.setAttribute(e, t[e]);}), n && H(r, n), r;
}
function C (e, t) {return 'undefined' == typeof e.textContent ? e.innerText = t : e.textContent = t, e;}
function E (e, t) {t.firstChild ? t.insertBefore(e, t.firstChild) : t.appendChild(e);}
function w (e, t) {return v(t), e.classList ? e.classList.contains(t) : function (e) {return new RegExp('(^|\\s)' + e + '($|\\s)');}(t).test(e.className);}
function I (e, t) {return e.classList ? e.classList.add(t) : w(e, t) || (e.className = (e.className + ' ' + t).trim()), e;}
function A (e, t) {return e.classList ? e.classList.remove(t) : (v(t), e.className = e.className.split(/\s+/).filter(function (e) {return e !== t;}).join(' ')), e;}
function x (e, t, i) {
var n = w(e, t);
if ('function' == typeof i && (i = i(e, t)), 'boolean' != typeof i && (i = !n), i !== n) return i ? I(e, t) : A(e, t), e;
}
function P (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 L (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 O (e, t) {return e.getAttribute(t);}
function D (e, t, i) {e.setAttribute(t, i);}
function M (e, t) {e.removeAttribute(t);}
function R () {d.body.focus(), d.onselectstart = function () {return !1;};}
function N () {d.onselectstart = function () {return !0;};}
function U (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(u(e, 'height'))), i.width || (i.width = parseFloat(u(e, 'width'))), i;
}
}
function F (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; n += e.offsetLeft, r += e.offsetTop, e = e.offsetParent;) ;
return {left: n, top: r, width: t, height: i};
}
function B (e, t) {
var i = {}, n = F(t.target), r = F(e), a = r.width, s = r.height, o = t.offsetY - (r.top - n.top),
u = t.offsetX - (r.left - n.left);
return t.changedTouches && (u = t.changedTouches[0].pageX - r.left, o = t.changedTouches[0].pageY + r.top), i.y = 1 - Math.max(0, Math.min(1, o / s)), i.x = Math.max(0, Math.min(1, u / a)), i;
}
function j (e) {return s(e) && 3 === e.nodeType;}
function V (e) {
for (; e.firstChild;) e.removeChild(e.firstChild);
return e;
}
function q (e) {return 'function' == typeof e && (e = e()), (Array.isArray(e) ? e : [e]).map(function (e) {return 'function' == typeof e && (e = e()), _(e) || j(e) ? e : 'string' == typeof e && /\S/.test(e) ? d.createTextNode(e) : void 0;}).filter(function (e) {return e;});}
function H (t, e) {return q(e).forEach(function (e) {return t.appendChild(e);}), t;}
function W (e, t) {return H(V(e), t);}
function z (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 G, X = S('querySelector'), K = S('querySelectorAll'), Y = Object.freeze({
__proto__: null,
isReal: y,
isEl: _,
isInFrame: b,
createEl: k,
textContent: C,
prependTo: E,
hasClass: w,
addClass: I,
removeClass: A,
toggleClass: x,
setAttributes: P,
getAttributes: L,
getAttribute: O,
setAttribute: D,
removeAttribute: M,
blockTextSelection: R,
unblockTextSelection: N,
getBoundingClientRect: U,
findPosition: F,
getPointerPosition: B,
isTextNode: j,
emptyEl: V,
normalizeContent: q,
appendContent: H,
insertContent: W,
isSingleLeftClick: z,
$: X,
$$: K
}), $ = !1, Q = function () {
if (y() && !1 !== G.options.autoSetup) {
var e = Array.prototype.slice.call(d.getElementsByTagName('video')),
t = Array.prototype.slice.call(d.getElementsByTagName('audio')),
i = Array.prototype.slice.call(d.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) {
J(1);
break;
}
void 0 === s.player && null !== s.getAttribute('data-setup') && G(s);
} else $ || J(1);
}
};
function J (e, t) {t && (G = t), T.setTimeout(Q, e);}
function Z () {$ = !0, T.removeEventListener('load', Z);}
y() && ('complete' === d.readyState ? Z() : T.addEventListener('load', Z));
function ee (e) {
var t = d.createElement('style');
return t.className = e, t;
}
function te (e, t) {e.styleSheet ? e.styleSheet.cssText = t : e.textContent = t;}
var ie, ne = 3;
function re () {return ne++;}
T.WeakMap || (ie = function () {
function e () {this.vdata = 'vdata' + Math.floor(T.performance && T.performance.now() || Date.now()), this.data = {};}
var t = e.prototype;
return t.set = function (e, t) {
var i = e[this.vdata] || re();
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];
p('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 ae, se = T.WeakMap ? new WeakMap : new ie;
function oe (e, t) {
if (se.has(e)) {
var i = se.get(e);
0 === i.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 && se.delete(e);
}
}
function ue (t, i, e, n) {e.forEach(function (e) {t(i, e, n);});}
function le (e) {
if (e.fixed_) return e;
function t () {return !0;}
function i () {return !1;}
if (!e || !e.isPropagationStopped) {
var n = e || T.event;
for (var r in e = {}, n) 'layerX' !== r && 'layerY' !== r && 'keyLocation' !== r && 'webkitMovementX' !== r && 'webkitMovementY' !== r && ('returnValue' === r && n.preventDefault || (e[r] = n[r]));
if (e.target || (e.target = e.srcElement || d), e.relatedTarget || (e.relatedTarget = e.fromElement === e.target ? e.toElement : e.fromElement), e.preventDefault = function () {n.preventDefault && n.preventDefault(), e.returnValue = !1, n.returnValue = !1, e.defaultPrevented = !0;}, e.defaultPrevented = !1, e.stopPropagation = function () {n.stopPropagation && n.stopPropagation(), e.cancelBubble = !0, n.cancelBubble = !0, e.isPropagationStopped = t;}, e.isPropagationStopped = i, e.stopImmediatePropagation = function () {n.stopImmediatePropagation && n.stopImmediatePropagation(), e.isImmediatePropagationStopped = t, e.stopPropagation();}, e.isImmediatePropagationStopped = i, null !== e.clientX && void 0 !== e.clientX) {
var a = d.documentElement, s = d.body;
e.pageX = e.clientX + (a && a.scrollLeft || s && s.scrollLeft || 0) - (a && a.clientLeft || s && s.clientLeft || 0), e.pageY = e.clientY + (a && a.scrollTop || s && s.scrollTop || 0) - (a && a.clientTop || s && s.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 ce = function () {
if ('boolean' != typeof ae) {
ae = !1;
try {
var e = Object.defineProperty({}, 'passive', {get: function () {ae = !0;}});
T.addEventListener('test', null, e), T.removeEventListener('test', null, e);
} catch (e) {}
}
return ae;
}, de = ['touchstart', 'touchmove'];
function he (s, e, t) {
if (Array.isArray(e)) return ue(he, s, e, t);
se.has(s) || se.set(s, {});
var o = se.get(s);
if (o.handlers || (o.handlers = {}), o.handlers[e] || (o.handlers[e] = []), t.guid || (t.guid = re()), o.handlers[e].push(t), o.dispatcher || (o.disabled = !1, o.dispatcher = function (e, t) {
if (!o.disabled) {
e = le(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) {p.error(e);}
}
}), 1 === o.handlers[e].length) if (s.addEventListener) {
var i = !1;
ce() && -1 < de.indexOf(e) && (i = {passive: !0}), s.addEventListener(e, o.dispatcher, i);
} else s.attachEvent && s.attachEvent('on' + e, o.dispatcher);
}
function pe (e, t, i) {
if (se.has(e)) {
var n = se.get(e);
if (n.handlers) {
if (Array.isArray(t)) return ue(pe, 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 fe (e, t, i) {
var n = se.has(e) ? se.get(e) : {}, r = e.parentNode || e.ownerDocument;
if ('string' == typeof t ? t = {
type: t,
target: e
} : t.target || (t.target = e), t = le(t), n.dispatcher && n.dispatcher.call(e, t, i), r && !t.isPropagationStopped() && !0 === t.bubbles) fe.call(null, r, t, i); else if (!r && !t.defaultPrevented && t.target && t.target[t.type]) {
se.has(t.target) || se.set(t.target, {});
var a = se.get(t.target);
t.target[t.type] && (a.disabled = !0, 'function' == typeof t.target[t.type] && t.target[t.type](), a.disabled = !1);
}
return !t.defaultPrevented;
}
function me (e, t, i) {
if (Array.isArray(t)) return ue(me, e, t, i);
function n () {pe(e, t, n), i.apply(this, arguments);}
n.guid = i.guid = i.guid || re(), he(e, t, n);
}
function ge (e, t, i) {
function n () {pe(e, t, n), i.apply(this, arguments);}
n.guid = i.guid = i.guid || re(), he(e, t, n);
}
function ve (e, t, i) {
t.guid || (t.guid = re());
var n = t.bind(e);
return n.guid = i ? i + '_' + t.guid : t.guid, n;
}
function ye (t, i) {
var n = T.performance.now();
return function () {
var e = T.performance.now();
i <= e - n && (t.apply(void 0, arguments), n = e);
};
}
function _e () {}
var be, Te = Object.freeze({__proto__: null, fixEvent: le, on: he, off: pe, trigger: fe, one: me, any: ge});
_e.prototype.allowedEvents_ = {}, _e.prototype.addEventListener = _e.prototype.on = function (e, t) {
var i = this.addEventListener;
this.addEventListener = function () {}, he(this, e, t), this.addEventListener = i;
}, _e.prototype.removeEventListener = _e.prototype.off = function (e, t) {pe(this, e, t);}, _e.prototype.one = function (e, t) {
var i = this.addEventListener;
this.addEventListener = function () {}, me(this, e, t), this.addEventListener = i;
}, _e.prototype.any = function (e, t) {
var i = this.addEventListener;
this.addEventListener = function () {}, ge(this, e, t), this.addEventListener = i;
}, _e.prototype.dispatchEvent = _e.prototype.trigger = function (e) {
var t = e.type || e;
'string' == typeof e && (e = {type: t}), e = le(e), this.allowedEvents_[t] && this['on' + t] && this['on' + t](e), fe(this, e);
}, _e.prototype.queueTrigger = function (e) {
var t = this;
be = be || new Map;
var i = e.type || e, n = be.get(this);
n || (n = new Map, be.set(this, n));
var r = n.get(i);
n.delete(i), T.clearTimeout(r);
var a = T.setTimeout(function () {0 === n.size && (n = null, be.delete(t)), t.trigger(e);}, 0);
n.set(i, a);
};
function Se (e) {return 'string' == typeof e && /\S/.test(e) || Array.isArray(e) && !!e.length;}
function ke (e) {if (!e.nodeName && !Ae(e)) throw new Error('Invalid target; must be a DOM node or evented object.');}
function Ce (e) {if (!Se(e)) throw new Error('Invalid event type; must be a non-empty string or array.');}
function Ee (e) {if ('function' != typeof e) throw new Error('Invalid listener; must be a function.');}
function we (e, t) {
var i, n, r, a = t.length < 3 || t[0] === e || t[0] === e.eventBusEl_;
return r = a ? (i = e.eventBusEl_, 3 <= t.length && t.shift(), n = t[0], t[1]) : (i = t[0], n = t[1], t[2]), ke(i), Ce(n), Ee(r), {
isTargetingSelf: a,
target: i,
type: n,
listener: r = ve(e, r)
};
}
function Ie (e, t, i, n) {ke(e), e.nodeName ? Te[t](e, i, n) : e[t](i, n);}
var Ae = function (t) {return t instanceof _e || !!t.eventBusEl_ && ['on', 'one', 'off', 'trigger'].every(function (e) {return 'function' == typeof t[e];});},
xe = {
on: function () {
for (var e = this, t = arguments.length, i = new Array(t), n = 0; n < t; n++) i[n] = arguments[n];
var r = we(this, i), a = r.isTargetingSelf, s = r.target, o = r.type, u = r.listener;
if (Ie(s, 'on', o, u), !a) {
var l = function () {return e.off(s, o, u);};
l.guid = u.guid;
var c = function () {return e.off('dispose', l);};
c.guid = u.guid, Ie(this, 'on', 'dispose', l), Ie(s, 'on', 'dispose', c);
}
},
one: function () {
for (var r = this, e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i];
var n = we(this, t), a = n.isTargetingSelf, s = n.target, o = n.type, u = n.listener;
if (a) Ie(s, 'one', o, u); else {
var l = 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);
};
l.guid = u.guid, Ie(s, 'one', o, l);
}
},
any: function () {
for (var r = this, e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i];
var n = we(this, t), a = n.isTargetingSelf, s = n.target, o = n.type, u = n.listener;
if (a) Ie(s, 'any', o, u); else {
var l = 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);
};
l.guid = u.guid, Ie(s, 'any', o, l);
}
},
off: function (e, t, i) {
if (!e || Se(e)) pe(this.eventBusEl_, e, t); else {
var n = e, r = t;
ke(n), Ce(r), Ee(i), i = ve(this, i), this.off('dispose', i), n.nodeName ? (pe(n, r, i), pe(n, 'dispose', i)) : Ae(n) && (n.off(r, i), n.off('dispose', i));
}
},
trigger: function (e, t) {return fe(this.eventBusEl_, e, t);}
};
function Pe (e, t) {
void 0 === t && (t = {});
var i = t.eventBusKey;
if (i) {
if (!e[i].nodeName) throw new Error('The eventBusKey "' + i + '" does not refer to an element.');
e.eventBusEl_ = e[i];
} else e.eventBusEl_ = k('span', {className: 'vjs-event-bus'});
return g(e, xe), e.eventedCallbacks && e.eventedCallbacks.forEach(function (e) {e();}), e.on('dispose', function () {e.off(), T.setTimeout(function () {e.eventBusEl_ = null;}, 0);}), e;
}
var Le = {
state: {}, setState: function (e) {
var i, n = this;
return 'function' == typeof e && (e = e()), r(e, function (e, t) {
n.state[t] !== e && ((i = i || {})[t] = {
from: n.state[t],
to: e
}), n.state[t] = e;
}), i && Ae(this) && this.trigger({changes: i, type: 'statechanged'}), i;
}
};
function Oe (e, t) {return g(e, Le), e.state = g({}, e.state, t), 'function' == typeof e.handleStateChanged && Ae(e) && e.on('statechanged', e.handleStateChanged), e;}
function De (e) {return 'string' != typeof e ? e : e.replace(/./, function (e) {return e.toLowerCase();});}
function Me (e) {return 'string' != typeof e ? e : e.replace(/./, function (e) {return e.toUpperCase();});}
function Re () {
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 && r(e, function (e, t) {o(e) ? (o(i[t]) || (i[t] = {}), i[t] = Re(i[t], e)) : i[t] = e;});}), i;
}
var Ne = 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.set_[e] = t, this;}, t.forEach = function (e, t) {for (var i in this.map_) e.call(t, this.map_[i], i, this);}, e;
}(), Ue = T.Map ? T.Map : Ne, Fe = 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;
}(), Be = T.Set ? T.Set : Fe, je = function () {
function l (e, t, i) {
if (!e && this.play ? this.player_ = e = this : this.player_ = e, this.isDisposed_ = !1, this.parentComponent_ = null, this.options_ = Re({}, this.options_), t = this.options_ = Re(this.options_, t), this.id_ = t.id || t.el && t.el.id, !this.id_) {
var n = e && e.id && e.id() || 'no_player';
this.id_ = n + '_component_' + re();
}
this.name_ = t.name || null, t.el ? this.el_ = t.el : !1 !== t.createEl && (this.el_ = this.createEl()), !1 !== t.evented && Pe(this, {eventBusKey: this.el_ ? 'el_' : null}), Oe(this, this.constructor.defaultState), this.children_ = [], this.childIndex_ = {}, this.childNameIndex_ = {}, this.setTimeoutIds_ = new Be, this.setIntervalIds_ = new Be, this.rafIds_ = new Be, this.namedRafs_ = new Ue, (this.clearingTimersOnDispose_ = !1) !== t.initChildren && this.initChildren(), this.ready(i), !1 !== t.reportTouchActivity && this.enableTouchActivity();
}
var e = l.prototype;
return e.dispose = function () {
if (!this.isDisposed_) {
if (this.trigger({
type: 'dispose',
bubbles: !1
}), this.isDisposed_ = !0, this.children_) for (var e = this.children_.length - 1; 0 <= e; e--) this.children_[e].dispose && this.children_[e].dispose();
this.children_ = null, this.childIndex_ = null, this.childNameIndex_ = null, this.parentComponent_ = null, this.el_ && (this.el_.parentNode && this.el_.parentNode.removeChild(this.el_), se.has(this.el_) && se.delete(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_ = Re(this.options_, e)), this.options_;}, e.el = function () {return this.el_;}, e.createEl = function (e, t, i) {return k(e, t, i);}, e.localize = function (e, r, t) {
void 0 === t && (t = e);
var i = this.player_.language && this.player_.language(), n = this.player_.languages && this.player_.languages(),
a = n && n[i], s = i && i.split('-')[0], o = n && n[s], u = t;
return a && a[e] ? u = a[e] : o && o[e] && (u = o[e]), r && (u = u.replace(/\{(\d+)\}/g, function (e, t) {
var i = r[t - 1], n = i;
return 'undefined' == typeof i && (n = e), n;
})), u;
}, 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];
t = t.reduce(function (e, t) {return e.concat(t);}, []);
for (var 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) {
var n, r;
if (void 0 === t && (t = {}), void 0 === i && (i = this.children_.length), 'string' == typeof e) {
r = Me(e);
var a = t.componentClass || r;
t.name = r;
var s = l.getComponent(a);
if (!s) throw new Error('Component ' + a + ' does not exist');
if ('function' != typeof s) return null;
n = new s(this.player_ || this, t);
} else n = e;
if (n.parentComponent_ && n.parentComponent_.removeChild(n), this.children_.splice(i, 0, n), n.parentComponent_ = this, 'function' == typeof n.id && (this.childIndex_[n.id()] = n), (r = r || n.name && Me(n.name())) && (this.childNameIndex_[r] = n, this.childNameIndex_[De(r)] = n), 'function' == typeof n.el && n.el()) {
var o = null;
this.children_[i + 1] && (this.children_[i + 1].el_ ? o = this.children_[i + 1].el_ : _(this.children_[i + 1]) && (o = this.children_[i + 1])), this.contentEl().insertBefore(n.el(), o);
}
return n;
}, e.removeChild = function (e) {
if ('string' == typeof e && (e = this.getChild(e)), e && this.children_) {
for (var t = !1, i = this.children_.length - 1; 0 <= i; i--) if (this.children_[i] === e) {
t = !0, this.children_.splice(i, 1);
break;
}
if (t) {
e.parentComponent_ = null, this.childIndex_[e.id()] = null, this.childNameIndex_[Me(e.name())] = null, this.childNameIndex_[De(e.name())] = null;
var n = e.el();
n && n.parentNode === this.contentEl() && this.contentEl().removeChild(e.el());
}
}
}, e.initChildren = function () {
var r = this, n = this.options_.children;
if (n) {
var e, a = this.options_, i = l.getComponent('Tech');
(e = Array.isArray(n) ? n : Object.keys(n)).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, i;
return i = 'string' == typeof e ? n[t = e] || r.options_[t] || {} : (t = e.name, e), {name: t, opts: i};
}).filter(function (e) {
var t = l.getComponent(e.opts.componentClass || Me(e.name));
return t && !i.isTech(t);
}).forEach(function (e) {
var t = e.name, i = e.opts;
if (void 0 !== a[t] && (i = a[t]), !1 !== i) {
!0 === i && (i = {}), i.playerOptions = r.options_.playerOptions;
var n = r.addChild(t, i);
n && (r[t] = n);
}
});
}
}, 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 X(e, t || this.contentEl());}, e.$$ = function (e, t) {return K(e, t || this.contentEl());}, e.hasClass = function (e) {return w(this.el_, e);}, e.addClass = function (e) {I(this.el_, e);}, e.removeClass = function (e) {A(this.el_, e);}, e.toggleClass = function (e, t) {x(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 O(this.el_, e);}, e.setAttribute = function (e, t) {D(this.el_, e, t);}, e.removeAttribute = function (e) {M(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 null !== t && t == t || (t = 0), -1 !== ('' + 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;
var n = this.el_.style[e], r = n.indexOf('px');
return -1 !== r ? parseInt(n.slice(0, r), 10) : parseInt(this.el_['offset' + Me(e)], 10);
}, e.currentDimension = function (e) {
var t = 0;
if ('width' !== e && 'height' !== e) throw new Error('currentDimension only accepts width or height value');
if (t = u(this.el_, e), 0 === (t = parseFloat(t)) || isNaN(t)) {
var i = 'offset' + Me(e);
t = this.el_[i];
}
return 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_ && (e.stopPropagation(), this.player_.handleKeyDown(e));}, e.handleKeyPress = function (e) {this.handleKeyDown(e);}, e.emitTapEvents = function () {
var n, t = 0, r = null;
this.on('touchstart', function (e) {
1 === e.touches.length && (r = {
pageX: e.touches[0].pageX,
pageY: e.touches[0].pageY
}, t = T.performance.now(), n = !0);
}), this.on('touchmove', function (e) {
if (1 < e.touches.length) n = !1; else if (r) {
var t = e.touches[0].pageX - r.pageX, i = e.touches[0].pageY - r.pageY;
10 < Math.sqrt(t * t + i * i) && (n = !1);
}
});
function e () {n = !1;}
this.on('touchleave', e), this.on('touchcancel', e), this.on('touchend', function (e) {!(r = null) === n && T.performance.now() - t < 200 && (e.preventDefault(), this.trigger('tap'));});
}, e.enableTouchActivity = function () {
if (this.player() && this.player().reportUserActivity) {
var t, i = ve(this.player(), this.player().reportUserActivity);
this.on('touchstart', function () {i(), this.clearInterval(t), t = this.setInterval(i, 250);});
var e = function (e) {i(), this.clearInterval(t);};
this.on('touchmove', i), 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 = T.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), T.clearTimeout(e)), e;}, e.setInterval = function (e, t) {
e = ve(this, e), this.clearTimersOnDispose_();
var i = T.setInterval(e, t);
return this.setIntervalIds_.add(i), i;
}, e.clearInterval = function (e) {return this.setIntervalIds_.has(e) && (this.setIntervalIds_.delete(e), T.clearInterval(e)), e;}, e.requestAnimationFrame = function (e) {
var t, i = this;
return this.supportsRaf_ ? (this.clearTimersOnDispose_(), e = ve(this, e), t = T.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), T.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;
}));
}, l.registerComponent = function (e, t) {
if ('string' != typeof e || !e) throw new Error('Illegal component name, "' + e + '"; must be a non-empty string.');
var i, n = l.getComponent('Tech'), r = n && n.isTech(t), a = l === t || l.prototype.isPrototypeOf(t.prototype);
if (r || !a) throw i = r ? 'techs must be registered using Tech.registerTech()' : 'must be a Component subclass', new Error('Illegal component, "' + e + '"; ' + i + '.');
e = Me(e), l.components_ || (l.components_ = {});
var s = l.getComponent('Player');
if ('Player' === e && s && s.players) {
var o = s.players, u = Object.keys(o);
if (o && 0 < u.length && u.map(function (e) {return o[e];}).every(Boolean)) throw new Error('Can not register Player component after player has been created.');
}
return l.components_[e] = t, l.components_[De(e)] = t;
}, l.getComponent = function (e) {if (e && l.components_) return l.components_[e];}, l;
}();
je.prototype.supportsRaf_ = 'function' == typeof T.requestAnimationFrame && 'function' == typeof T.cancelAnimationFrame, je.registerComponent('Component', je);
var Ve = function (e) {
if (void 0 === e) throw new ReferenceError('this hasn\'t been initialised - super() hasn\'t been called');
return e;
};
i(function (t) {
function i (e) {return 'function' == typeof Symbol && 'symbol' == typeof Symbol.iterator ? t.exports = i = function (e) {return typeof e;} : t.exports = i = function (e) {return e && 'function' == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? 'symbol' : typeof e;}, i(e);}
t.exports = i;
}), i(function (t) {
function i (e) {return t.exports = i = Object.setPrototypeOf ? Object.getPrototypeOf : function (e) {return e.__proto__ || Object.getPrototypeOf(e);}, i(e);}
t.exports = i;
});
var qe, He, We, ze,
Ge = function (e, t) {e.prototype = Object.create(t.prototype), (e.prototype.constructor = e).__proto__ = t;},
Xe = T.navigator && T.navigator.userAgent || '', Ke = /AppleWebKit\/([\d.]+)/i.exec(Xe),
Ye = Ke ? parseFloat(Ke.pop()) : null, $e = /iPod/i.test(Xe),
Qe = (qe = Xe.match(/OS (\d+)_/i)) && qe[1] ? qe[1] : null, Je = /Android/i.test(Xe), Ze = function () {
var e = Xe.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;
}(), et = Je && Ze < 5 && Ye < 537, tt = /Firefox/i.test(Xe), it = /Edg/i.test(Xe),
nt = !it && (/Chrome/i.test(Xe) || /CriOS/i.test(Xe)),
rt = (He = Xe.match(/(Chrome|CriOS)\/(\d+)/)) && He[2] ? parseFloat(He[2]) : null,
at = (We = /MSIE\s(\d+)\.\d/.exec(Xe), !(ze = We && parseFloat(We[1])) && /Trident\/7.0/i.test(Xe) && /rv:11.0/.test(Xe) && (ze = 11), ze),
st = /Safari/i.test(Xe) && !nt && !Je && !it, ot = /Windows/i.test(Xe),
ut = y() && ('ontouchstart' in T || T.navigator.maxTouchPoints || T.DocumentTouch && T.document instanceof T.DocumentTouch),
lt = /iPad/i.test(Xe) || st && ut && !/iPhone/i.test(Xe), ct = /iPhone/i.test(Xe) && !lt, dt = ct || lt || $e,
ht = (st || dt) && !nt, pt = Object.freeze({
__proto__: null,
IS_IPOD: $e,
IOS_VERSION: Qe,
IS_ANDROID: Je,
ANDROID_VERSION: Ze,
IS_NATIVE_ANDROID: et,
IS_FIREFOX: tt,
IS_EDGE: it,
IS_CHROME: nt,
CHROME_VERSION: rt,
IE_VERSION: at,
IS_SAFARI: st,
IS_WINDOWS: ot,
TOUCH_ENABLED: ut,
IS_IPAD: lt,
IS_IPHONE: ct,
IS_IOS: dt,
IS_ANY_SAFARI: ht
});
function ft (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 mt (e) {
return 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: ft.bind(null, 'start', 0, e), end: ft.bind(null, 'end', 1, e)};
}
function gt (e, t) {return Array.isArray(e) ? mt(e) : void 0 === e || void 0 === t ? mt() : mt([[e, t]]);}
function vt (e, t) {
var i, n, r = 0;
if (!t) return 0;
e && e.length || (e = gt(0, 0));
for (var a = 0; a < e.length; a++) i = e.start(a), t < (n = e.end(a)) && (n = t), r += n - i;
return r / t;
}
for (var yt, _t = {prefixed: !0}, bt = [['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']], Tt = bt[0], St = 0; St < bt.length; St++) if (bt[St][1] in d) {
yt = bt[St];
break;
}
if (yt) {
for (var kt = 0; kt < yt.length; kt++) _t[Tt[kt]] = yt[kt];
_t.prefixed = yt[0] !== Tt[0];
}
function Ct (e) {
if (e instanceof Ct) return e;
'number' == typeof e ? this.code = e : 'string' == typeof e ? this.message = e : s(e) && ('number' == typeof e.code && (this.code = e.code), g(this, e)), this.message || (this.message = Ct.defaultMessages[this.code] || '');
}
Ct.prototype.code = 0, Ct.prototype.message = '', Ct.prototype.status = null, Ct.errorTypes = ['MEDIA_ERR_CUSTOM', 'MEDIA_ERR_ABORTED', 'MEDIA_ERR_NETWORK', 'MEDIA_ERR_DECODE', 'MEDIA_ERR_SRC_NOT_SUPPORTED', 'MEDIA_ERR_ENCRYPTED'], Ct.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 Et = 0; Et < Ct.errorTypes.length; Et++) Ct[Ct.errorTypes[Et]] = Et, Ct.prototype[Ct.errorTypes[Et]] = Et;
var wt = function (e, t) {
var i, n = null;
try {i = JSON.parse(e, t);} catch (e) {n = e;}
return [n, i];
};
function It (e) {return null != e && 'function' == typeof e.then;}
function At (e) {It(e) && e.then(null, function (e) {});}
function xt (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 Pt = 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 = xt(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(xt));
}, Lt = 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();
}, Ot = i(function (e, t) {
function i (e) {
if (e && 'object' == typeof e) {
var t = e.which || e.keyCode || e.charCode;
t && (e = t);
}
if ('number' == typeof e) return s[e];
var i, n = String(e);
return (i = r[n.toLowerCase()]) ? i : (i = a[n.toLowerCase()]) || (1 === n.length ? n.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) {
var n;
if (n = r[t.toLowerCase()]) return n === i;
if (n = a[t.toLowerCase()]) return n === i;
} else if ('number' == typeof t) return t === i;
return !1;
}
};
var r = (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
}, a = 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
};
for (n = 97; n < 123; n++) r[String.fromCharCode(n)] = n - 32;
for (var n = 48; n < 58; n++) r[n - 48] = n;
for (n = 1; n < 13; n++) r['f' + n] = n + 111;
for (n = 0; n < 10; n++) r['numpad ' + n] = n + 96;
var s = t.names = t.title = {};
for (n in r) s[r[n]] = n;
for (var o in a) r[o] = a[o];
}), Dt = (Ot.code, Ot.codes, Ot.aliases, Ot.names, Ot.title, 'vjs-modal-dialog'), Mt = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).opened_ = i.hasBeenOpened_ = i.hasBeenFilled_ = !1, i.closeable(!i.options_.uncloseable), i.content(i.options_.content), i.contentEl_ = k('div', {className: Dt + '-content'}, {role: 'document'}), i.descEl_ = k('p', {
className: Dt + '-description vjs-control-text',
id: i.el().getAttribute('aria-describedby')
}), C(i.descEl_, i.description()), i.el_.appendChild(i.descEl_), i.el_.appendChild(i.contentEl_), i;
}
Ge(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 Dt + ' 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 () {
if (!this.opened_) {
var 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 () {
if (this.opened_) {
var 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) {
if ('boolean' == typeof e) {
var t = this.closeable_ = !!e, i = this.getChild('closeButton');
if (t && !i) {
var n = this.contentEl_;
this.contentEl_ = this.el_, i = this.addChild('closeButton', {controlText: 'Close Modal Dialog'}), this.contentEl_ = n, this.on(i, 'close', this.close);
}
!t && i && (this.off(i, 'close', this.close), this.removeChild(i), i.dispose());
}
return 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(), W(t, e), this.trigger('modalfill'), n ? i.insertBefore(t, n) : i.appendChild(t);
var r = this.getChild('closeButton');
r && i.appendChild(r.el_);
}, t.empty = function () {this.trigger('beforemodalempty'), V(this.contentEl()), this.trigger('modalempty');}, t.content = function (e) {return 'undefined' != typeof e && (this.content_ = e), this.content_;}, t.conditionalFocus_ = function () {
var e = d.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(), Ot.isEventKey(e, 'Escape') && this.closeable()) return e.preventDefault(), void this.close();
if (Ot.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;
}
d.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 T.HTMLAnchorElement || e instanceof T.HTMLAreaElement) && e.hasAttribute('href') || (e instanceof T.HTMLInputElement || e instanceof T.HTMLSelectElement || e instanceof T.HTMLTextAreaElement || e instanceof T.HTMLButtonElement) && !e.hasAttribute('disabled') || e instanceof T.HTMLIFrameElement || e instanceof T.HTMLObjectElement || e instanceof T.HTMLEmbedElement || e.hasAttribute('tabindex') && -1 !== e.getAttribute('tabindex') || e.hasAttribute('contenteditable');});
}, e;
}(je);
Mt.prototype.options_ = {pauseOnOpen: !0, temporary: !0}, je.registerComponent('ModalDialog', Mt);
var Rt = function (n) {
function e (e) {
var t;
void 0 === e && (e = []), (t = n.call(this) || this).tracks_ = [], Object.defineProperty(Ve(t), 'length', {get: function () {return this.tracks_.length;}});
for (var i = 0; i < e.length; i++) t.addTrack(e[i]);
return t;
}
Ge(e, n);
var t = e.prototype;
return t.addTrack = function (e) {
var t = this.tracks_.length;
'' + t in this || Object.defineProperty(this, t, {get: function () {return this.tracks_[t];}}), -1 === this.tracks_.indexOf(e) && (this.tracks_.push(e), this.trigger({
track: e,
type: 'addtrack',
target: this
}));
}, 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;
}(_e);
for (var Nt in Rt.prototype.allowedEvents_ = {
change: 'change',
addtrack: 'addtrack',
removetrack: 'removetrack'
}, Rt.prototype.allowedEvents_) Rt.prototype['on' + Nt] = null;
function Ut (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 Ft (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 Bt (e) {
var t = ['protocol', 'hostname', 'port', 'pathname', 'search', 'hash', 'host'], i = d.createElement('a');
i.href = e;
var n, r = '' === i.host && 'file:' !== i.protocol;
r && ((n = d.createElement('div')).innerHTML = '', i = n.firstChild, n.setAttribute('style', 'display:none; position:static;'), d.body.appendChild(n));
for (var a = {}, s = 0; s < t.length; s++) a[t[s]] = i[t[s]];
return 'http:' === a.protocol && (a.host = a.host.replace(/:80$/, '')), 'https:' === a.protocol && (a.host = a.host.replace(/:443$/, '')), a.protocol || (a.protocol = T.location.protocol), r && d.body.removeChild(n), a;
}
function jt (e) {
if (!e.match(/^https?:\/\//)) {
var t = d.createElement('div');
t.innerHTML = 'x', e = t.firstChild.href;
}
return e;
}
function Vt (e) {
if ('string' == typeof e) {
var t = /^(\/?)([\s\S]*?)((?:\.{1,2}|[^\/]+?)(\.([^\.\/\?]+)))(?:[\/]*|[\?].*)$/.exec(e);
if (t) return t.pop().toLowerCase();
}
return '';
}
function qt (e, t) {
void 0 === t && (t = T.location);
var i = Bt(e);
return (':' === i.protocol ? t.protocol : i.protocol) + i.host !== t.protocol + t.host;
}
var Ht = function (n) {
function e (e) {
var t;
void 0 === e && (e = []);
for (var i = e.length - 1; 0 <= i; i--) if (e[i].enabled) {
Ut(e, e[i]);
break;
}
return (t = n.call(this, e) || this).changing_ = !1, t;
}
Ge(e, n);
var t = e.prototype;
return t.addTrack = function (e) {
var t = this;
e.enabled && Ut(this, e), n.prototype.addTrack.call(this, e), e.addEventListener && (e.enabledChange_ = function () {t.changing_ || (t.changing_ = !0, Ut(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;
}(Rt), Wt = function (n) {
function e (e) {
var t;
void 0 === e && (e = []);
for (var i = e.length - 1; 0 <= i; i--) if (e[i].selected) {
Ft(e, e[i]);
break;
}
return (t = n.call(this, e) || this).changing_ = !1, Object.defineProperty(Ve(t), 'selectedIndex', {
get: function () {
for (var e = 0; e < this.length; e++) if (this[e].selected) return e;
return -1;
}, set: function () {}
}), t;
}
Ge(e, n);
var t = e.prototype;
return t.addTrack = function (e) {
var t = this;
e.selected && Ft(this, e), n.prototype.addTrack.call(this, e), e.addEventListener && (e.selectedChange_ = function () {t.changing_ || (t.changing_ = !0, Ft(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;
}(Rt), zt = function (i) {
function e () {return i.apply(this, arguments) || this;}
Ge(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;
}(Rt), Gt = 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;
}(), Xt = 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;
}(), Kt = {
alternative: 'alternative',
captions: 'captions',
main: 'main',
sign: 'sign',
subtitles: 'subtitles',
commentary: 'commentary'
}, Yt = {
alternative: 'alternative',
descriptions: 'descriptions',
main: 'main',
'main-desc': 'main-desc',
translation: 'translation',
commentary: 'commentary'
}, $t = {
subtitles: 'subtitles',
captions: 'captions',
descriptions: 'descriptions',
chapters: 'chapters',
metadata: 'metadata'
}, Qt = {disabled: 'disabled', hidden: 'hidden', showing: 'showing'}, Jt = function (a) {
function e (e) {
var t;
void 0 === e && (e = {}), t = a.call(this) || this;
function i (e) {Object.defineProperty(Ve(t), e, {get: function () {return n[e];}, set: function () {}});}
var n = {id: e.id || 'vjs_track_' + re(), kind: e.kind || '', label: e.label || '', language: e.language || ''};
for (var r in n) i(r);
return t;
}
return Ge(e, a), e;
}(_e),
Zt = Object.freeze({__proto__: null, parseUrl: Bt, getAbsoluteURL: jt, getFileExtension: Vt, isCrossOrigin: qt}),
ei = function (e) {
var t = ti.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);
}
/**
* @license
* slighly modified parse-headers 2.0.2
* Copyright (c) 2014 David Björklund
* Available under the MIT license
*
*/, ti = Object.prototype.toString;
var ii = function (e) {
var r = {};
return e && e.trim().split('\n').forEach(function (e) {
var t = e.indexOf(':'), i = e.slice(0, t).trim().toLowerCase(), n = e.slice(t + 1).trim();
'undefined' == typeof r[i] ? r[i] = n : Array.isArray(r[i]) ? r[i].push(n) : r[i] = [r[i], n];
}), r;
}, ni = si, ri = si;
function ai (e, t, i) {
var n = e;
return ei(t) ? (i = t, 'string' == typeof e && (n = {uri: e})) : n = m({}, t, {uri: e}), n.callback = i, n;
}
function si (e, t, i) {return oi(t = ai(e, t, i));}
function oi (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 t (e) {return clearTimeout(o), e instanceof Error || (e = new Error('' + (e || 'Unknown XMLHttpRequest Error'))), e.statusCode = 0, a(e, m);}
function e () {
if (!s) {
var e;
clearTimeout(o), e = n.useXDR && void 0 === u.status ? 200 : 1223 === u.status ? 204 : u.status;
var t = m, i = null;
return 0 !== e ? (t = {
body: function () {
var e = void 0;
if (e = u.response ? u.response : u.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;
}(u), f) try {e = JSON.parse(e);} catch (e) {}
return e;
}(), statusCode: e, method: c, headers: {}, url: l, rawRequest: u
}, u.getAllResponseHeaders && (t.headers = ii(u.getAllResponseHeaders()))) : i = new Error('Internal XMLHttpRequest Error'), a(i, t, t.body);
}
}
var i, s, o, u = n.xhr || null,
l = (u = u || (n.cors || n.useXDR ? new si.XDomainRequest : new si.XMLHttpRequest)).url = n.uri || n.url,
c = u.method = n.method || 'GET', d = n.body || n.data, h = u.headers = n.headers || {}, p = !!n.sync, f = !1,
m = {body: void 0, headers: {}, statusCode: 0, method: c, url: l, rawRequest: u};
if ('json' in n && !1 !== n.json && (f = !0, h.accept || h.Accept || (h.Accept = 'application/json'), 'GET' !== c && 'HEAD' !== c && (h['content-type'] || h['Content-Type'] || (h['Content-Type'] = 'application/json'), d = JSON.stringify(!0 === n.json ? d : n.json))), u.onreadystatechange = function () {4 === u.readyState && setTimeout(e, 0);}, u.onload = e, u.onerror = t, u.onprogress = function () {}, u.onabort = function () {s = !0;}, u.ontimeout = t, u.open(c, l, !p, n.username, n.password), p || (u.withCredentials = !!n.withCredentials), !p && 0 < n.timeout && (o = setTimeout(function () {
if (!s) {
s = !0, u.abort('timeout');
var e = new Error('XMLHttpRequest timeout');
e.code = 'ETIMEDOUT', t(e);
}
}, n.timeout)), u.setRequestHeader) for (i in h) h.hasOwnProperty(i) && u.setRequestHeader(i, h[i]); else if (n.headers && !function (e) {
for (var t in e) if (e.hasOwnProperty(t)) return !1;
return !0;
}(n.headers)) throw new Error('Headers cannot be set on an XDomainRequest object');
return 'responseType' in n && (u.responseType = n.responseType), 'beforeSend' in n && 'function' == typeof n.beforeSend && n.beforeSend(u), u.send(d || null), u;
}
si.XMLHttpRequest = T.XMLHttpRequest || function () {}, si.XDomainRequest = 'withCredentials' in new si.XMLHttpRequest ? si.XMLHttpRequest : T.XDomainRequest, function (e, t) {for (var i = 0; i < e.length; i++) t(e[i]);}(['get', 'put', 'post', 'patch', 'head', 'delete'], function (n) {si['delete' === n ? 'del' : n] = function (e, t, i) {return (t = ai(e, t, i)).method = n.toUpperCase(), oi(t);};}), ni.default = ri;
function ui (e, t) {
var i = new T.WebVTT.Parser(T, T.vttjs, T.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 && (T.console && T.console.groupCollapsed && T.console.groupCollapsed('Text Track parsing errors for ' + t.src), n.forEach(function (e) {return p.error(e);}), T.console && T.console.groupEnd && T.console.groupEnd()), i.flush();
}
function li (e, n) {
var t = {uri: e}, i = qt(e);
i && (t.cors = i);
var r = 'use-credentials' === n.tech_.crossOrigin();
r && (t.withCredentials = r), ni(t, ve(this, function (e, t, i) {
if (e) return p.error(e, t);
n.loaded_ = !0, 'function' != typeof T.WebVTT ? n.tech_ && n.tech_.any(['vttjsloaded', 'vttjserror'], function (e) {
if ('vttjserror' !== e.type) return ui(i, n);
p.error('vttjs failed to load, stopping trying to process ' + n.src);
}) : ui(i, n);
}));
}
var ci = function (l) {
function e (e) {
var t;
if (void 0 === e && (e = {}), !e.tech) throw new Error('A tech was not provided.');
var i = Re(e, {kind: $t[e.kind] || 'subtitles', language: e.language || e.srclang || ''}),
n = Qt[i.mode] || 'disabled', r = i.default;
'metadata' !== i.kind && 'chapters' !== i.kind || (n = 'hidden'), (t = l.call(this, i) || this).tech_ = i.tech, t.cues_ = [], t.activeCues_ = [], t.preload_ = !1 !== t.tech_.preloadTextTracks;
var a = new Xt(t.cues_), s = new Xt(t.activeCues_), o = !1,
u = ve(Ve(t), function () {this.activeCues = this.activeCues, o && (this.trigger('cuechange'), o = !1);});
return 'disabled' !== n && t.tech_.ready(function () {t.tech_.on('timeupdate', u);}, !0), Object.defineProperties(Ve(t), {
default: {
get: function () {return r;},
set: function () {}
},
mode: {
get: function () {return n;}, set: function (e) {
var t = this;
Qt[e] && (n = e, this.preload_ || 'disabled' === n || 0 !== this.cues.length || li(this.src, this), 'disabled' !== n ? this.tech_.ready(function () {t.tech_.on('timeupdate', u);}, !0) : this.tech_.off('timeupdate', u), this.trigger('modechange'));
}
},
cues: {get: function () {return this.loaded_ ? a : 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 ? t.push(r) : r.startTime === r.endTime && r.startTime <= e && r.startTime + .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 () {}
}
}), i.src ? (t.src = i.src, t.preload_ || (t.loaded_ = !0), (t.preload_ || r || 'subtitles' !== i.kind && 'captions' !== i.kind) && li(t.src, Ve(t))) : t.loaded_ = !0, t;
}
Ge(e, l);
var t = e.prototype;
return t.addCue = function (e) {
var t = e;
if (T.vttjs && !(e instanceof T.vttjs.VTTCue)) {
for (var i in t = new T.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;
}(Jt);
ci.prototype.allowedEvents_ = {cuechange: 'cuechange'};
var di = function (r) {
function e (e) {
var t;
void 0 === e && (e = {});
var i = Re(e, {kind: Yt[e.kind] || ''});
t = r.call(this, i) || this;
var n = !1;
return Object.defineProperty(Ve(t), 'enabled', {
get: function () {return n;},
set: function (e) {'boolean' == typeof e && e !== n && (n = e, this.trigger('enabledchange'));}
}), i.enabled && (t.enabled = i.enabled), t.loaded_ = !0, t;
}
return Ge(e, r), e;
}(Jt), hi = function (r) {
function e (e) {
var t;
void 0 === e && (e = {});
var i = Re(e, {kind: Kt[e.kind] || ''});
t = r.call(this, i) || this;
var n = !1;
return Object.defineProperty(Ve(t), 'selected', {
get: function () {return n;},
set: function (e) {'boolean' == typeof e && e !== n && (n = e, this.trigger('selectedchange'));}
}), i.selected && (t.selected = i.selected), t;
}
return Ge(e, r), e;
}(Jt), pi = function (r) {
function e (e) {
var t, i;
void 0 === e && (e = {}), t = r.call(this) || this;
var n = new ci(e);
return t.kind = n.kind, t.src = n.src, t.srclang = n.language, t.label = n.label, t.default = n.default, Object.defineProperties(Ve(t), {
readyState: {get: function () {return i;}},
track: {get: function () {return n;}}
}), i = 0, n.addEventListener('loadeddata', function () {i = 2, t.trigger({type: 'load', target: Ve(t)});}), t;
}
return Ge(e, r), e;
}(_e);
pi.prototype.allowedEvents_ = {load: 'load'}, pi.NONE = 0, pi.LOADING = 1, pi.LOADED = 2, pi.ERROR = 3;
var fi = {
audio: {ListClass: Ht, TrackClass: di, capitalName: 'Audio'},
video: {ListClass: Wt, TrackClass: hi, capitalName: 'Video'},
text: {ListClass: zt, TrackClass: ci, capitalName: 'Text'}
};
Object.keys(fi).forEach(function (e) {fi[e].getterName = e + 'Tracks', fi[e].privateName = e + 'Tracks_';});
var mi = {
remoteText: {
ListClass: zt,
TrackClass: ci,
capitalName: 'RemoteText',
getterName: 'remoteTextTracks',
privateName: 'remoteTextTracks_'
},
remoteTextEl: {
ListClass: Gt,
TrackClass: pi,
capitalName: 'RemoteTextTrackEls',
getterName: 'remoteTextTrackEls',
privateName: 'remoteTextTrackEls_'
}
}, gi = m({}, fi, mi);
mi.names = Object.keys(mi), fi.names = Object.keys(fi), gi.names = [].concat(mi.names).concat(fi.names);
var vi = Object.create || function (e) {
if (1 !== arguments.length) throw new Error('Object.create shim only accepts one parameter.');
return yi.prototype = e, new yi;
};
function yi () {}
function _i (e, t) {this.name = 'ParsingError', this.code = e.code, this.message = t || e.message;}
function bi (e) {
function t (e, t, i, n) {return 3600 * (0 | e) + 60 * (0 | t) + (0 | i) + (0 | n) / 1e3;}
var i = e.match(/^(\d+):(\d{1,2})(:\d{1,2})?\.(\d{3})/);
return i ? i[3] ? t(i[1], i[2], i[3].replace(':', ''), i[4]) : 59 < i[1] ? t(i[1], i[2], 0, i[4]) : t(0, i[1], i[2], i[4]) : null;
}
function Ti () {this.values = vi(null);}
function Si (e, t, i, n) {
var r = n ? e.split(n) : [e];
for (var a in r) if ('string' == typeof r[a]) {
var s = r[a].split(i);
if (2 === s.length) t(s[0], s[1]);
}
}
function ki (t, e, s) {
var i = t;
function n () {
var e = bi(t);
if (null === e) throw new _i(_i.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 _i(_i.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 Ti;
Si(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);
}
((_i.prototype = vi(Error.prototype)).constructor = _i).Errors = {
BadSignature: {
code: 0,
message: 'Malformed WebVTT signature.'
}, BadTimeStamp: {code: 1, message: 'Malformed time stamp.'}
}, Ti.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 Ci = d.createElement('textarea'),
Ei = {c: 'span', i: 'i', b: 'b', u: 'u', ruby: 'ruby', rt: 'rt', v: 'span', lang: 'span'}, wi = {
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)'
}, Ii = {v: 'title', lang: 'lang'}, Ai = {rt: 'ruby'};
function xi (a, i) {
function e () {
if (!i) return null;
var e, t = i.match(/^([^<]*)(<[^>]*>?)?/);
return e = t[1] ? t[1] : t[2], i = i.substr(e.length), e;
}
function t (e, t) {
var i = Ei[e];
if (!i) return null;
var n = a.document.createElement(i), r = Ii[e];
return r && t && (n[r] = t.trim()), n;
}
for (var n, r, s, o, u = a.document.createElement('div'), l = u, c = []; null !== (n = e());) if ('<' !== n[0]) l.appendChild(a.document.createTextNode((r = n, Ci.innerHTML = r, r = Ci.textContent, Ci.textContent = '', r))); else {
if ('/' === n[1]) {
c.length && c[c.length - 1] === n.substr(2).replace('>', '') && (c.pop(), l = l.parentNode);
continue;
}
var d, h = bi(n.substr(1, n.length - 2));
if (h) {
d = a.document.createProcessingInstruction('timestamp', h), l.appendChild(d);
continue;
}
var p = n.match(/^<([^.\s/0-9>]+)(\.[^\s\\>]+)?([^>\\]+)?(\\?)>?$/);
if (!p) continue;
if (!(d = t(p[1], p[3]))) continue;
if (s = l, Ai[(o = d).localName] && Ai[o.localName] !== s.localName) continue;
if (p[2]) {
var f = p[2].split('.');
f.forEach(function (e) {
var t = /^bg_/.test(e), i = t ? e.slice(3) : e;
if (wi.hasOwnProperty(i)) {
var n = t ? 'background-color' : 'color', r = wi[i];
d.style[n] = r;
}
}), d.className = f.join(' ');
}
c.push(p[1]), l.appendChild(d), l = d;
}
return u;
}
var Pi = [[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 Li (e) {
for (var t = 0; t < Pi.length; t++) {
var i = Pi[t];
if (e >= i[0] && e <= i[1]) return !0;
}
return !1;
}
function Oi () {}
function Di (e, t, i) {
Oi.call(this), this.cue = t, this.cueDiv = xi(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: function (e) {
var t = [], i = '';
if (!e || !e.childNodes) return 'ltr';
function r (e, t) {for (var i = t.childNodes.length - 1; 0 <= i; i--) e.push(t.childNodes[i]);}
function a (e) {
if (!e || !e.length) return null;
var t = e.pop(), i = t.textContent || t.innerText;
if (i) {
var n = i.match(/^.*(\n|\r)/);
return n ? n[e.length = 0] : i;
}
return 'ruby' === t.tagName ? a(e) : t.childNodes ? (r(e, t), a(e)) : void 0;
}
for (r(t, e); i = a(t);) for (var n = 0; n < i.length; n++) if (Li(i.charCodeAt(n))) return 'rtl';
return 'ltr';
}(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 Mi (e) {
var t, i, n, r;
if (e.div) {
i = e.div.offsetHeight, n = e.div.offsetWidth, r = e.div.offsetTop;
var a = (a = e.div.childNodes) && (a = a[0]) && a.getClientRects && a.getClientRects();
e = e.div.getBoundingClientRect(), t = a ? Math.max(a[0] && a[0].height || 0, e.height / a.length) : 0;
}
this.left = e.left, this.right = e.right, this.top = e.top || r, this.height = e.height || i, this.bottom = e.bottom || r + (e.height || i), this.width = e.width || n, this.lineHeight = void 0 !== t ? t : e.lineHeight;
}
function Ri (e, t, o, u) {
var i = new Mi(t), n = t.cue, r = 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;
}(n), a = [];
if (n.snapToLines) {
var s;
switch (n.vertical) {
case'':
a = ['+y', '-y'], s = 'height';
break;
case'rl':
a = ['+x', '-x'], s = 'width';
break;
case'lr':
a = ['-x', '+x'], s = 'width';
}
var l = i.lineHeight, c = l * Math.round(r), d = o[s] + l, h = a[0];
Math.abs(c) > d && (c = c < 0 ? -1 : 1, c *= Math.ceil(d / l) * l), r < 0 && (c += '' === n.vertical ? o.height : o.width, a = a.reverse()), i.move(h, c);
} else {
var p = i.lineHeight / o.height * 100;
switch (n.lineAlign) {
case'center':
r -= p / 2;
break;
case'end':
r -= p;
}
switch (n.vertical) {
case'':
t.applyStyles({top: t.formatStyle(r, '%')});
break;
case'rl':
t.applyStyles({left: t.formatStyle(r, '%')});
break;
case'lr':
t.applyStyles({right: t.formatStyle(r, '%')});
}
a = ['+y', '-x', '+x', '-y'], i = new Mi(t);
}
var f = function (e, t) {
for (var i, n = new Mi(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 Mi(e), r = s), e = new Mi(n);
}
return i || n;
}(i, a);
t.move(f.toCSSCompatValues(o));
}
function Ni () {}
Oi.prototype.applyStyles = function (e, t) {for (var i in t = t || this.div, e) e.hasOwnProperty(i) && (t.style[i] = e[i]);}, Oi.prototype.formatStyle = function (e, t) {return 0 === e ? 0 : e + t;}, (Di.prototype = vi(Oi.prototype)).constructor = Di, Mi.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;
}
}, Mi.prototype.overlaps = function (e) {return this.left < e.right && this.right > e.left && this.top < e.bottom && this.bottom > e.top;}, Mi.prototype.overlapsAny = function (e) {
for (var t = 0; t < e.length; t++) if (this.overlaps(e[t])) return !0;
return !1;
}, Mi.prototype.within = function (e) {return this.top >= e.top && this.bottom <= e.bottom && this.left >= e.left && this.right <= e.right;}, Mi.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;
}
}, Mi.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);}, Mi.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
};
}, Mi.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
};
}, Ni.StringDecoder = function () {
return {
decode: function (e) {
if (!e) return '';
if ('string' != typeof e) throw new Error('Error - expected string data.');
return decodeURIComponent(encodeURIComponent(e));
}
};
}, Ni.convertCueToDOMTree = function (e, t) {return e && t ? xi(e, t) : null;};
Ni.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 !0;
return !1;
}(r)) {
var s = [], o = Mi.getSimpleBoxPosition(a), u = {font: Math.round(.05 * o.height * 100) / 100 + 'px sans-serif'};
!function () {for (var e, t, i = 0; i < r.length; i++) t = r[i], e = new Di(n, t, u), a.appendChild(e.div), Ri(0, e, o, s), t.displayState = e.div, s.push(Mi.getSimpleBoxPosition(e));}();
} else for (var t = 0; t < r.length; t++) a.appendChild(r[t].displayState);
}, (Ni.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 _i)) 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/) ? Si(e, function (e, t) {
switch (e) {
case'X-TIMESTAMP-MAP':
!function (e) {
var i = new Ti;
Si(e, function (e, t) {
switch (e) {
case'MPEGT':
i.integer(e + 'S', t);
break;
case'LOCA':
i.set(e + 'L', bi(t));
}
}, /[^\d]:/, /,/), n.ontimestampmap && n.ontimestampmap({
MPEGTS: i.get('MPEGTS'),
LOCAL: i.get('LOCAL')
});
}(t);
}
}, /=/) : Si(e, function (e, t) {
switch (e) {
case'Region':
!function (e) {
var r = new Ti;
if (Si(e, 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 Ti;
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')) {
var t = new (n.vttjs.VTTRegion || n.window.VTTRegion);
t.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
});
}
}(t);
}
}, /:/);
}
e && (n.buffer += n.decoder.decode(e, {stream: !0}));
try {
var r;
if ('INITIAL' === n.state) {
if (!/\r\n|\n/.test(n.buffer)) return this;
var a = (r = t()).match(/^WEBVTT([ \t].*)?$/);
if (!a || !a[0]) throw new _i(_i.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 {ki(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 _i(_i.Errors.BadSignature);} catch (e) {t.reportOrThrowError(e);}
return t.onflush && t.onflush(), this;
}
};
var Ui = Ni, Fi = {'': 1, lr: 1, rl: 1},
Bi = {start: 1, center: 1, end: 1, left: 1, right: 1, auto: 1, 'line-left': 1, 'line-right': 1};
function ji (e) {return 'string' == typeof e && (!!Bi[e.toLowerCase()] && e.toLowerCase());}
function Vi (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) {
var t = function (e) {return 'string' == typeof e && (!!Fi[e.toLowerCase()] && e.toLowerCase());}(e);
if (!1 === t) throw new SyntaxError('Vertical: an invalid or illegal direction string was specified.');
l = t, 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) {
var t = ji(e);
t && (h = t, 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) {
var t = ji(e);
t && (f = t, 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) {
var t = ji(e);
if (!t) throw new SyntaxError('align: an invalid or illegal alignment string was specified.');
g = t, this.hasBeenReset = !0;
}
}
}), this.displayState = void 0;
}
Vi.prototype.getCueAsHTML = function () {return WebVTT.convertCueToDOMTree(window, this.text);};
var qi = Vi, Hi = {'': !0, up: !0};
function Wi (e) {return 'number' == typeof e && 0 <= e && e <= 100;}
function zi () {
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 (!Wi(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 (!Wi(e)) throw new Error('RegionAnchorX must be between 0 and 100.');
r = e;
}
},
regionAnchorX: {
enumerable: !0,
get: function () {return n;},
set: function (e) {
if (!Wi(e)) throw new Error('RegionAnchorY must be between 0 and 100.');
n = e;
}
},
viewportAnchorY: {
enumerable: !0,
get: function () {return s;},
set: function (e) {
if (!Wi(e)) throw new Error('ViewportAnchorY must be between 0 and 100.');
s = e;
}
},
viewportAnchorX: {
enumerable: !0,
get: function () {return a;},
set: function (e) {
if (!Wi(e)) throw new Error('ViewportAnchorX must be between 0 and 100.');
a = e;
}
},
scroll: {
enumerable: !0,
get: function () {return o;},
set: function (e) {
var t = function (e) {return 'string' == typeof e && (!!Hi[e.toLowerCase()] && e.toLowerCase());}(e);
!1 === t || (o = t);
}
}
});
}
var Gi = i(function (e) {
var t = e.exports = {WebVTT: Ui, VTTCue: qi, VTTRegion: zi};
T.vttjs = t, T.WebVTT = t.WebVTT;
var i = t.VTTCue, n = t.VTTRegion, r = T.VTTCue, a = T.VTTRegion;
t.shim = function () {T.VTTCue = i, T.VTTRegion = n;}, t.restore = function () {T.VTTCue = r, T.VTTRegion = a;}, T.VTTCue || t.shim();
});
Gi.WebVTT, Gi.VTTCue, Gi.VTTRegion;
var Xi = function (t) {
function i (i, e) {
var n;
return void 0 === i && (i = {}), void 0 === e && (e = function () {}), i.reportTouchActivity = !1, (n = t.call(this, null, i, e) || this).hasStarted_ = !1, n.on('playing', function () {this.hasStarted_ = !0;}), n.on('loadstart', function () {this.hasStarted_ = !1;}), gi.names.forEach(function (e) {
var t = gi[e];
i && i[t.getterName] && (n[t.privateName] = i[t.getterName]);
}), n.featuresProgressEvents || n.manualProgressOn(), n.featuresTimeupdateEvents || n.manualTimeUpdatesOn(), ['Text', 'Audio', 'Video'].forEach(function (e) {!1 === i['native' + e + 'Tracks'] && (n['featuresNative' + e + 'Tracks'] = !1);}), !1 === i.nativeCaptions || !1 === i.nativeTextTracks ? n.featuresNativeTextTracks = !1 : !0 !== i.nativeCaptions && !0 !== i.nativeTextTracks || (n.featuresNativeTextTracks = !0), n.featuresNativeTextTracks || n.emulateTextTracks(), n.preloadTextTracks = !1 !== i.preloadTextTracks, n.autoRemoteTextTracks_ = new gi.text.ListClass, n.initTrackListeners(), i.nativeControlsForTouch || n.emitTapEvents(), n.constructor && (n.name_ = n.constructor.name || 'Unknown Tech'), n;
}
Ge(i, t);
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 gt(0, 0);}, e.bufferedPercent = function () {return vt(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(fi.names), this.manualProgress && this.manualProgressOff(), this.manualTimeUpdates && this.manualTimeUpdatesOff(), t.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 Ct(e), this.trigger('error')), this.error_;}, e.played = function () {return this.hasStarted_ ? gt(0, 0) : gt();}, e.setScrubbing = function () {}, e.setCurrentTime = function () {
this.manualTimeUpdates && this.trigger({
type: 'timeupdate',
target: this,
manuallyTriggered: !0
});
}, e.initTrackListeners = function () {
var r = this;
fi.names.forEach(function (e) {
function t () {r.trigger(e + 'trackchange');}
var i = fi[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 = this;
if (!T.WebVTT) if (d.body.contains(this.el())) {
if (!this.options_['vtt.js'] && o(Gi) && 0 < Object.keys(Gi).length) return void this.trigger('vttjsloaded');
var t = d.createElement('script');
t.src = this.options_['vtt.js'] || 'https://vjs.zencdn.net/vttjs/0.14.1/vtt.min.js', t.onload = function () {e.trigger('vttjsloaded');}, t.onerror = function () {e.trigger('vttjserror');}, this.on('dispose', function () {t.onload = null, t.onerror = null;}), T.WebVTT = !0, this.el().parentNode.appendChild(t);
} else 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();
r.kind = t, i && (r.label = i), n && (r.language = n), r.tech = e;
var s = new gi.text.TrackClass(r);
return a.addTrack(s), s;
}(this, e, t, i);
}, e.createRemoteTextTrack = function (e) {
var t = Re(e, {tech: this});
return new mi.remoteTextEl.TrackClass(t);
}, e.addRemoteTextTrack = function (e, t) {
var i = this;
void 0 === e && (e = {});
var n = this.createRemoteTextTrack(e);
return !0 !== t && !1 !== t && (p.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 || T.Promise;
if (e) return e.reject();
}, e.disablePictureInPicture = function () {return !0;}, e.setDisablePictureInPicture = function () {}, 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 = Me(e), i.techs_[e] = t, i.techs_[De(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 = Me(e), T && T.videojs && T.videojs[e] ? (p.warn('The ' + e + ' tech was added to the videojs object when it should be registered using videojs.registerTech(name, tech)'), T.videojs[e]) : void 0);}, i;
}(je);
gi.names.forEach(function (e) {
var t = gi[e];
Xi.prototype[t.getterName] = function () {return this[t.privateName] = this[t.privateName] || new t.ListClass, this[t.privateName];};
}), Xi.prototype.featuresVolumeControl = !0, Xi.prototype.featuresMuteControl = !0, Xi.prototype.featuresFullscreenResize = !1, Xi.prototype.featuresPlaybackRate = !1, Xi.prototype.featuresProgressEvents = !1, Xi.prototype.featuresSourceset = !1, Xi.prototype.featuresTimeupdateEvents = !1, Xi.prototype.featuresNativeTextTracks = !1, Xi.withSourceHandlers = function (r) {
r.registerSourceHandler = function (e, t) {
var i = r.sourceHandlers;
i = i || (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 : p.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);};
}, je.registerComponent('Tech', Xi), Xi.registerTech('Tech', Xi), Xi.defaultTechOrder_ = [];
var Ki = {}, Yi = {}, $i = {};
function Qi (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, u = t[0], l = t.slice(1);
if ('string' == typeof u) i(n, Ki[u], r, a, s, o); else if (u) {
var c = rn(a, u);
if (!c.setSource) return s.push(c), i(n, l, r, a, s, o);
c.setSource(g({}, n), function (e, t) {
if (e) return i(n, l, r, a, s, o);
s.push(c), i(t, n.type === t.type ? l : Ki[t.type], r, a, s, o);
});
} else l.length ? i(n, l, r, a, s, o) : o ? r(n, s) : i(n, Ki['*'], r, a, s, !0);
}(t, Ki[t.type], i, e);
}, 1);
}
function Ji (e, t, i, n) {
void 0 === n && (n = null);
var r = 'call' + Me(i), a = e.reduce(nn(r), n), s = a === $i, o = s ? null : t[i](a);
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, o, s), o;
}
var Zi = {buffered: 1, currentTime: 1, duration: 1, muted: 1, played: 1, paused: 1, seekable: 1, volume: 1},
en = {setCurrentTime: 1, setMuted: 1, setVolume: 1}, tn = {play: 1, pause: 1};
function nn (i) {return function (e, t) {return e === $i ? $i : t[i] ? t[i](e) : e;};}
function rn (e, t) {
var i = Yi[e.id()], n = null;
if (null == i) return n = t(e), Yi[e.id()] = [[t, n]], n;
for (var r = 0; r < i.length; r++) {
var a = i[r], s = a[0], o = a[1];
s === t && (n = o);
}
return null === n && (n = t(e), i.push([t, n])), n;
}
function an (e) {
void 0 === e && (e = '');
var t = Vt(e);
return sn[t.toLowerCase()] || '';
}
var sn = {
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',
jpg: 'image/jpeg',
jpeg: 'image/jpeg',
gif: 'image/gif',
png: 'image/png',
svg: 'image/svg+xml',
webp: 'image/webp'
};
function on (e) {
if (!e.type) {
var t = an(e.src);
t && (e.type = t);
}
return e;
}
var un = function (l) {
function e (e, t, i) {
var n, r = Re({createEl: !1}, t);
if (n = l.call(this, e, r, i) || this, t.playerOptions.sources && 0 !== t.playerOptions.sources.length) e.src(t.playerOptions.sources); else for (var a = 0, s = t.playerOptions.techOrder; a < s.length; a++) {
var o = Me(s[a]), u = Xi.getTech(o);
if (o || (u = je.getComponent(o)), u && u.isSupported()) {
e.loadTech_(o);
break;
}
}
return n;
}
return Ge(e, l), e;
}(je);
je.registerComponent('MediaLoader', un);
var ln = function (r) {
function e (e, t) {
var i;
return (i = r.call(this, e, t) || this).emitTapEvents(), i.enable(), i;
}
Ge(e, r);
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 = g({
innerHTML: '',
className: this.buildCSSClass(),
tabIndex: 0
}, t), 'button' === e && p.error('Creating a ClickableComponent with an HTML element of ' + e + ' is not supported; use a Button instead.'), i = g({role: 'button'}, i), this.tabIndex_ = t.tabIndex;
var n = r.prototype.createEl.call(this, e, t, i);
return this.createControlTextEl(n), n;
}, t.dispose = function () {this.controlTextEl_ = null, r.prototype.dispose.call(this);}, t.createControlTextEl = function (e) {return this.controlTextEl_ = k('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, C(this.controlTextEl_, i), this.nonIconControl || t.setAttribute('title', i);
}, t.buildCSSClass = function () {return 'vjs-control vjs-button ' + r.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.handleClick = function (e) {this.options_.clickHandler && this.options_.clickHandler.call(this, arguments);}, t.handleKeyDown = function (e) {Ot.isEventKey(e, 'Space') || Ot.isEventKey(e, 'Enter') ? (e.preventDefault(), e.stopPropagation(), this.trigger('click')) : r.prototype.handleKeyDown.call(this, e);}, e;
}(je);
je.registerComponent('ClickableComponent', ln);
var cn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).update(), e.on('posterchange', ve(Ve(i), i.update)), i;
}
Ge(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 k('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) {
var t = '';
e && (t = 'url("' + e + '")'), this.el_.style.backgroundImage = t;
}, t.handleClick = function (e) {
if (this.player_.controls()) {
var t = this.player_.usingPlugin('eme') && this.player_.eme.sessions && 0 < this.player_.eme.sessions.length;
!this.player_.tech(!0) || (at || it) && t || this.player_.tech(!0).focus(), this.player_.paused() ? At(this.player_.play()) : this.player_.pause();
}
}, e;
}(ln);
je.registerComponent('PosterImage', cn);
var dn = '#222', hn = {
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 pn (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 fn (e, t, i) {try {e.style[t] = i;} catch (e) {return;}}
var mn = function (a) {
function e (i, e, t) {
var n;
n = a.call(this, i, e, t) || this;
var r = ve(Ve(n), n.updateDisplay);
return i.on('loadstart', ve(Ve(n), n.toggleDisplay)), i.on('texttrackchange', r), i.on('loadedmetadata', ve(Ve(n), n.preselectTrack)), i.ready(ve(Ve(n), function () {
if (i.tech_ && i.tech_.featuresNativeTextTracks) this.hide(); else {
i.on('fullscreenchange', r), i.on('playerresize', r), T.addEventListener('orientationchange', r), i.on('dispose', function () {return T.removeEventListener('orientationchange', r);});
for (var e = this.options_.playerOptions.tracks || [], t = 0; t < e.length; t++) this.player_.addRemoteTextTrack(e[t], !0);
this.preselectTrack();
}
})), n;
}
Ge(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 ? o : 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'}, {
'aria-live': 'off',
'aria-atomic': 'true'
});
}, t.clearDisplay = function () {'function' == typeof T.WebVTT && T.WebVTT.processCues(T, [], 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 = i[n];
if (r) {
var a = r.displayState;
if (t.color && (a.firstChild.style.color = t.color), t.textOpacity && fn(a.firstChild, 'color', pn(t.color || '#fff', t.textOpacity)), t.backgroundColor && (a.firstChild.style.backgroundColor = t.backgroundColor), t.backgroundOpacity && fn(a.firstChild, 'backgroundColor', pn(t.backgroundColor || '#000', t.backgroundOpacity)), t.windowColor && (t.windowOpacity ? fn(a, 'backgroundColor', pn(t.windowColor, t.windowOpacity)) : a.style.backgroundColor = t.windowColor), t.edgeStyle && ('dropshadow' === t.edgeStyle ? a.firstChild.style.textShadow = '2px 2px 3px #222, 2px 2px 4px #222, 2px 2px 5px ' + dn : 'raised' === t.edgeStyle ? a.firstChild.style.textShadow = '1px 1px #222, 2px 2px #222, 3px 3px ' + dn : 'depressed' === t.edgeStyle ? a.firstChild.style.textShadow = '1px 1px #ccc, 0 1px #ccc, -1px -1px #222, 0 -1px ' + dn : 'uniform' === t.edgeStyle && (a.firstChild.style.textShadow = '0 0 4px #222, 0 0 4px #222, 0 0 4px #222, 0 0 4px ' + dn)), t.fontPercent && 1 !== t.fontPercent) {
var s = T.parseFloat(a.style.fontSize);
a.style.fontSize = s * t.fontPercent + 'px', a.style.height = 'auto', a.style.top = 'auto';
}
t.fontFamily && 'default' !== t.fontFamily && ('small-caps' === t.fontFamily ? a.firstChild.style.fontVariant = 'small-caps' : a.firstChild.style.fontFamily = hn[t.fontFamily]);
}
}
}, t.updateForTrack = function (e) {
if (Array.isArray(e) || (e = [e]), 'function' == typeof T.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]);
T.WebVTT.processCues(T, 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;
I(u, 'vjs-text-track-cue'), I(u, 'vjs-text-track-cue-' + (s.language ? s.language : a));
}
this.player_.textTrackSettings && this.updateDisplayState(s);
}
}
}, e;
}(je);
je.registerComponent('TextTrackDisplay', mn);
var gn = function (r) {
function e () {return r.apply(this, arguments) || this;}
return Ge(e, r), e.prototype.createEl = function () {
var e = this.player_.isAudio(), t = this.localize(e ? 'Audio Player' : 'Video Player'),
i = k('span', {className: 'vjs-control-text', innerHTML: this.localize('{1} is loading.', [t])}),
n = r.prototype.createEl.call(this, 'div', {className: 'vjs-loading-spinner', dir: 'ltr'});
return n.appendChild(i), n;
}, e;
}(je);
je.registerComponent('LoadingSpinner', gn);
var vn = function (t) {
function e () {return t.apply(this, arguments) || this;}
Ge(e, t);
var i = e.prototype;
return i.createEl = function (e, t, i) {
void 0 === t && (t = {}), void 0 === i && (i = {}), t = g({
innerHTML: '',
className: this.buildCSSClass()
}, t), i = g({type: 'button'}, i);
var n = je.prototype.createEl.call(this, 'button', t, i);
return this.createControlTextEl(n), n;
}, i.addChild = function (e, t) {
void 0 === t && (t = {});
var i = this.constructor.name;
return p.warn('Adding an actionable (user controllable) child to a Button (' + i + ') is not supported; use a ClickableComponent instead.'), je.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) {Ot.isEventKey(e, 'Space') || Ot.isEventKey(e, 'Enter') ? e.stopPropagation() : t.prototype.handleKeyDown.call(this, e);}, e;
}(ln);
je.registerComponent('Button', vn);
var yn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).mouseused_ = !1, i.on('mousedown', i.handleMouseDown), i;
}
Ge(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 At(t), void (!this.player_.tech(!0) || (at || it) && i || this.player_.tech(!0).focus());
}
var n = this.player_.getChild('controlBar'), r = n && n.getChild('playToggle');
if (r) {
var a = function () {return r.focus();};
It(t) ? t.then(a, function () {}) : this.setTimeout(a, 1);
} else 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;
}(vn);
yn.prototype.controlText_ = 'Play Video', je.registerComponent('BigPlayButton', yn);
var _n = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).controlText(t && t.controlText || i.localize('Close')), i;
}
Ge(e, n);
var t = e.prototype;
return t.buildCSSClass = function () {return 'vjs-close-button ' + n.prototype.buildCSSClass.call(this);}, t.handleClick = function (e) {
this.trigger({
type: 'close',
bubbles: !1
});
}, t.handleKeyDown = function (e) {Ot.isEventKey(e, 'Esc') ? (e.preventDefault(), e.stopPropagation(), this.trigger('click')) : n.prototype.handleKeyDown.call(this, e);}, e;
}(vn);
je.registerComponent('CloseButton', _n);
var bn = function (n) {
function e (e, t) {
var i;
return void 0 === t && (t = {}), i = n.call(this, e, t) || this, t.replay = void 0 === t.replay || t.replay, i.on(e, 'play', i.handlePlay), i.on(e, 'pause', i.handlePause), t.replay && i.on(e, 'ended', i.handleEnded), i;
}
Ge(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() ? 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) {this.removeClass('vjs-playing'), this.addClass('vjs-ended'), this.controlText('Replay'), this.one(this.player_, 'seeked', this.handleSeeked);}, e;
}(vn);
bn.prototype.controlText_ = 'Play', je.registerComponent('PlayToggle', bn);
function Tn (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),
s = Math.floor(t / 3600);
return !isNaN(e) && e !== 1 / 0 || (r = n = i = '-'), (r = 0 < r || 0 < s ? r + ':' : '') + (n = ((r || 10 <= a) && n < 10 ? '0' + n : n) + ':') + (i = i < 10 ? '0' + i : i);
}
var Sn = Tn;
function kn (e, t) {return void 0 === t && (t = e), Sn(e, t);}
var Cn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).on(e, ['timeupdate', 'ended'], i.updateContent), i.updateTextNode_(), i;
}
Ge(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',
innerHTML: '' + this.localize(this.labelText_) + ' '
});
return this.contentEl_ = k('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;
void 0 === e && (e = 0), e = kn(e), this.formattedTime_ !== e && (this.formattedTime_ = e, this.requestNamedAnimationFrame('TimeDisplay#updateTextNode_', function () {
if (t.contentEl_) {
var e = t.textNode_;
t.textNode_ = d.createTextNode(t.formattedTime_), t.textNode_ && (e ? t.contentEl_.replaceChild(t.textNode_, e) : t.contentEl_.appendChild(t.textNode_));
}
}));
}, t.updateContent = function (e) {}, e;
}(je);
Cn.prototype.labelText_ = 'Time', Cn.prototype.controlText_ = 'Time', je.registerComponent('TimeDisplay', Cn);
var En = function (e) {
function t () {return e.apply(this, arguments) || this;}
Ge(t, e);
var i = t.prototype;
return i.buildCSSClass = function () {return 'vjs-current-time';}, i.updateContent = function (e) {
var t;
t = this.player_.ended() ? this.player_.duration() : this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime(), this.updateTextNode_(t);
}, t;
}(Cn);
En.prototype.labelText_ = 'Current Time', En.prototype.controlText_ = 'Current Time', je.registerComponent('CurrentTimeDisplay', En);
var wn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).on(e, 'durationchange', i.updateContent), i.on(e, 'loadstart', i.updateContent), i.on(e, 'loadedmetadata', i.updateContent), i;
}
Ge(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;
}(Cn);
wn.prototype.labelText_ = 'Duration', wn.prototype.controlText_ = 'Duration', je.registerComponent('DurationDisplay', wn);
var In = function (e) {
function t () {return e.apply(this, arguments) || this;}
return Ge(t, e), t.prototype.createEl = function () {
return e.prototype.createEl.call(this, 'div', {
className: 'vjs-time-control vjs-time-divider',
innerHTML: '/
'
}, {'aria-hidden': !0});
}, t;
}(je);
je.registerComponent('TimeDivider', In);
var An = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).on(e, 'durationchange', i.updateContent), i;
}
Ge(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 e.insertBefore(k('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;
}(Cn);
An.prototype.labelText_ = 'Remaining Time', An.prototype.controlText_ = 'Remaining Time', je.registerComponent('RemainingTimeDisplay', An);
var xn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).updateShowing(), i.on(i.player(), 'durationchange', i.updateShowing), i;
}
Ge(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_ = k('div', {
className: 'vjs-live-display',
innerHTML: '' + this.localize('Stream Type') + ' ' + this.localize('LIVE')
}, {'aria-live': 'off'}), 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;
}(je);
je.registerComponent('LiveDisplay', xn);
var Pn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).updateLiveEdgeStatus(), i.player_.liveTracker && i.on(i.player_.liveTracker, 'liveedgechange', i.updateLiveEdgeStatus), i;
}
Ge(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_ = k('span', {
className: 'vjs-seek-to-live-text',
innerHTML: 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.updateLiveEdgeStatus), this.textEl_ = null, n.prototype.dispose.call(this);}, e;
}(vn);
Pn.prototype.controlText_ = 'Seek to live, currently playing live', je.registerComponent('SeekToLive', Pn);
function Ln (e, t, i) {return e = Number(e), Math.min(i, Math.max(t, isNaN(e) ? t : e));}
var On = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).bar = i.getChild(i.options_.barName), i.vertical(!!i.options_.vertical), i.enable(), i;
}
Ge(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 () {
if (this.enabled()) {
var 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 === t && (t = {}), void 0 === i && (i = {}), t.className = t.className + ' vjs-slider', t = g({tabIndex: 0}, t), i = g({
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 || nt || e.preventDefault(), R(), 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);
}, t.handleMouseMove = function (e) {}, t.handleMouseUp = function () {
var e = this.bar.el_.ownerDocument;
N(), 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_ || (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(Ln(this.getPercent(), 0, 1).toFixed(4));}, t.calculateDistance = function (e) {
var t = B(this.el_, e);
return this.vertical() ? t.y : t.x;
}, t.handleKeyDown = function (e) {Ot.isEventKey(e, 'Left') || Ot.isEventKey(e, 'Down') ? (e.preventDefault(), e.stopPropagation(), this.stepBack()) : Ot.isEventKey(e, 'Right') || Ot.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;
}(je);
je.registerComponent('Slider', On);
function Dn (e, t) {return Ln(e / t * 100, 0, 100).toFixed(2) + '%';}
var Mn = function (r) {
function e (e, t) {
var i;
return (i = r.call(this, e, t) || this).partEls_ = [], i.on(e, 'progress', i.update), i;
}
Ge(e, r);
var t = e.prototype;
return t.createEl = function () {
var e = r.prototype.createEl.call(this, 'div', {className: 'vjs-load-progress'}),
t = k('span', {className: 'vjs-control-text'}), i = k('span', {textContent: this.localize('Loaded')}),
n = d.createTextNode(': ');
return this.percentageEl_ = k('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 d = this;
this.requestNamedAnimationFrame('LoadProgressBar#update', function () {
var e = d.player_.liveTracker, t = d.player_.buffered(),
i = e && e.isLive() ? e.seekableEnd() : d.player_.duration(), n = d.player_.bufferedEnd(), r = d.partEls_,
a = Dn(n, i);
d.percent_ !== a && (d.el_.style.width = a, C(d.percentageEl_, a), d.percent_ = a);
for (var s = 0; s < t.length; s++) {
var o = t.start(s), u = t.end(s), l = r[s];
l || (l = d.el_.appendChild(k()), r[s] = l), l.dataset.start === o && l.dataset.end === u || (l.dataset.start = o, l.dataset.end = u, l.style.left = Dn(o, n), l.style.width = Dn(u - o, n));
}
for (var c = r.length; c > t.length; c--) d.el_.removeChild(r[c - 1]);
r.length = t.length;
});
}, e;
}(je);
je.registerComponent('LoadProgressBar', Mn);
var Rn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).update = ye(ve(Ve(i), i.update), 30), i;
}
Ge(e, n);
var t = e.prototype;
return t.createEl = function () {return n.prototype.createEl.call(this, 'div', {className: 'vjs-time-tooltip'}, {'aria-hidden': 'true'});}, t.update = function (e, t, i) {
var n = F(this.el_), r = U(this.player_.el()), a = e.width * t;
if (r && n) {
var s = e.left - r.left + a, o = e.width - a + (r.right - e.right), u = n.width / 2;
s < u ? u += u - s : o < u && (u = o), u < 0 ? u = 0 : u > n.width && (u = n.width), this.el_.style.right = '-' + u + 'px', this.write(i);
}
}, t.write = function (e) {C(this.el_, e);}, t.updateTime = function (r, a, s, o) {
var u = this;
this.requestNamedAnimationFrame('TimeTooltip#updateTime', function () {
var e, t = u.player_.duration();
if (u.player_.liveTracker && u.player_.liveTracker.isLive()) {
var i = u.player_.liveTracker.liveWindow(), n = i - a * i;
e = (n < 1 ? '' : '-') + kn(n, i);
} else e = kn(s, t);
u.update(r, a, e), o && o();
});
}, e;
}(je);
je.registerComponent('TimeTooltip', Rn);
var Nn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).update = ye(ve(Ve(i), i.update), 30), i;
}
Ge(e, n);
var t = e.prototype;
return t.createEl = function () {return n.prototype.createEl.call(this, 'div', {className: 'vjs-play-progress vjs-slider-bar'}, {'aria-hidden': 'true'});}, t.update = function (e, t) {
var i = this.getChild('timeTooltip');
if (i) {
var n = this.player_.scrubbing() ? this.player_.getCache().currentTime : this.player_.currentTime();
i.updateTime(e, t, n);
}
}, e;
}(je);
Nn.prototype.options_ = {children: []}, dt || Je || Nn.prototype.options_.children.push('timeTooltip'), je.registerComponent('PlayProgressBar', Nn);
var Un = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).update = ye(ve(Ve(i), i.update), 30), i;
}
Ge(e, n);
var t = e.prototype;
return t.createEl = function () {return n.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;
}(je);
Un.prototype.options_ = {children: ['timeTooltip']}, je.registerComponent('MouseTimeDisplay', Un);
var Fn = function (a) {
function e (e, t) {
var i;
return (i = a.call(this, e, t) || this).setEventHandlers_(), i;
}
Ge(e, a);
var t = e.prototype;
return t.setEventHandlers_ = function () {this.update_ = ve(this, this.update), this.update = ye(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.on(this.player_, ['playing'], this.enableInterval_), this.on(this.player_, ['ended', 'pause', 'waiting'], this.disableInterval_), 'hidden' in d && 'visibilityState' in d && this.on(d, 'visibilitychange', this.toggleVisibility_);}, t.toggleVisibility_ = function (e) {d.hidden ? this.disableInterval_(e) : (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, 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}', [kn(e, i), kn(i, i)], '{1} of {2}')), n.currentTime_ = e, n.duration_ = i), n.bar && n.bar.update(U(n.el()), n.getProgress());
}), r;
}, 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) {z(e) && (e.stopPropagation(), this.player_.scrubbing(!0), this.videoWasPlaying = !this.player_.paused(), this.player_.pause(), a.prototype.handleMouseDown.call(this, e));}, t.handleMouseMove = function (e) {
if (z(e)) {
var t, i = this.calculateDistance(e), n = this.player_.liveTracker;
if (n && n.isLive()) {
if (.99 <= i) return void n.seekToLiveEdge();
var r = n.seekableStart(), a = n.liveCurrentTime();
if (a <= (t = r + i * n.liveWindow()) && (t = a), t <= r && (t = r + .1), t === 1 / 0) return;
} else (t = i * this.player_.duration()) === this.player_.duration() && (t -= .1);
this.player_.currentTime(t);
}
}, 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 ? At(this.player_.play()) : this.update_();
}, t.stepForward = function () {this.player_.currentTime(this.player_.currentTime() + 5);}, t.stepBack = function () {this.player_.currentTime(this.player_.currentTime() - 5);}, t.handleAction = function (e) {this.player_.paused() ? this.player_.play() : this.player_.pause();}, t.handleKeyDown = function (e) {
if (Ot.isEventKey(e, 'Space') || Ot.isEventKey(e, 'Enter')) e.preventDefault(), e.stopPropagation(), this.handleAction(e); else if (Ot.isEventKey(e, 'Home')) e.preventDefault(), e.stopPropagation(), this.player_.currentTime(0); else if (Ot.isEventKey(e, 'End')) e.preventDefault(), e.stopPropagation(), this.player_.currentTime(this.player_.duration()); else if (/^[0-9]$/.test(Ot(e))) {
e.preventDefault(), e.stopPropagation();
var t = 10 * (Ot.codes[Ot(e)] - Ot.codes[0]) / 100;
this.player_.currentTime(this.player_.duration() * t);
} else Ot.isEventKey(e, 'PgDn') ? (e.preventDefault(), e.stopPropagation(), this.player_.currentTime(this.player_.currentTime() - 60)) : Ot.isEventKey(e, 'PgUp') ? (e.preventDefault(), e.stopPropagation(), this.player_.currentTime(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.on(this.player_.liveTracker, 'liveedgechange', this.update), this.off(this.player_, ['playing'], this.enableInterval_), this.off(this.player_, ['ended', 'pause', 'waiting'], this.disableInterval_), 'hidden' in d && 'visibilityState' in d && this.off(d, 'visibilitychange', this.toggleVisibility_), a.prototype.dispose.call(this);}, e;
}(On);
Fn.prototype.options_ = {
children: ['loadProgressBar', 'playProgressBar'],
barName: 'playProgressBar'
}, dt || Je || Fn.prototype.options_.children.splice(1, 0, 'mouseTimeDisplay'), je.registerComponent('SeekBar', Fn);
var Bn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).handleMouseMove = ye(ve(Ve(i), i.handleMouseMove), 30), i.throttledHandleMouseSeek = ye(ve(Ve(i), i.handleMouseSeek), 30), i.enable(), i;
}
Ge(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 = this.getChild('seekBar');
if (t) {
var i = t.getChild('playProgressBar'), n = t.getChild('mouseTimeDisplay');
if (i || n) {
var r = t.el(), a = F(r), s = B(r, e).x;
s = Ln(s, 0, 1), n && n.update(a, s), i && i.update(a, t.getProgress());
}
}
}, t.handleMouseSeek = function (e) {
var t = this.getChild('seekBar');
t && t.handleMouseMove(e);
}, t.enabled = function () {return this.enabled_;}, t.disable = function () {this.children().forEach(function (e) {return e.disable && e.disable();}), this.enabled() && (this.off(['mousedown', 'touchstart'], this.handleMouseDown), this.off(this.el_, 'mousemove', this.handleMouseMove), this.handleMouseUp(), this.addClass('disabled'), this.enabled_ = !1);}, t.enable = function () {this.children().forEach(function (e) {return e.enable && e.enable();}), this.enabled() || (this.on(['mousedown', 'touchstart'], this.handleMouseDown), this.on(this.el_, 'mousemove', this.handleMouseMove), this.removeClass('disabled'), this.enabled_ = !0);}, 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.handleMouseUp), this.on(t, 'touchend', this.handleMouseUp);
}, t.handleMouseUp = function (e) {
var t = this.el_.ownerDocument, i = this.getChild('seekBar');
i && i.handleMouseUp(e), this.off(t, 'mousemove', this.throttledHandleMouseSeek), this.off(t, 'touchmove', this.throttledHandleMouseSeek), this.off(t, 'mouseup', this.handleMouseUp), this.off(t, 'touchend', this.handleMouseUp);
}, e;
}(je);
Bn.prototype.options_ = {children: ['seekBar']}, je.registerComponent('ProgressControl', Bn);
var jn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).on(e, ['enterpictureinpicture', 'leavepictureinpicture'], i.handlePictureInPictureChange), i.on(e, ['disablepictureinpicturechanged', 'loadedmetadata'], i.handlePictureInPictureEnabledChange), i.disable(), i;
}
Ge(e, n);
var t = e.prototype;
return t.buildCSSClass = function () {return 'vjs-picture-in-picture-control ' + n.prototype.buildCSSClass.call(this);}, t.handlePictureInPictureEnabledChange = function () {d.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;
}(vn);
jn.prototype.controlText_ = 'Picture-in-Picture', je.registerComponent('PictureInPictureToggle', jn);
var Vn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).on(e, 'fullscreenchange', i.handleFullscreenChange), !1 === d[e.fsApi_.fullscreenEnabled] && i.disable(), i;
}
Ge(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;
}(vn);
Vn.prototype.controlText_ = 'Fullscreen', je.registerComponent('FullscreenToggle', Vn);
var qn = function (e) {
function t () {return e.apply(this, arguments) || this;}
return Ge(t, e), t.prototype.createEl = function () {
return e.prototype.createEl.call(this, 'div', {
className: 'vjs-volume-level',
innerHTML: ''
});
}, t;
}(je);
je.registerComponent('VolumeLevel', qn);
var Hn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).on('slideractive', i.updateLastVolume_), i.on(e, 'volumechange', i.updateARIAAttributes), e.ready(function () {return i.updateARIAAttributes();}), i;
}
Ge(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) {z(e) && n.prototype.handleMouseDown.call(this, e);}, t.handleMouseMove = function (e) {z(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() + .1);}, t.stepBack = function () {this.checkMuted(), this.player_.volume(this.player_.volume() - .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;
}(On);
Hn.prototype.options_ = {
children: ['volumeLevel'],
barName: 'volumeLevel'
}, Hn.prototype.playerEvent = 'volumechange', je.registerComponent('VolumeBar', Hn);
var Wn = function (n) {
function e (e, t) {
var i;
return void 0 === t && (t = {}), t.vertical = t.vertical || !1, 'undefined' != typeof t.volumeBar && !o(t.volumeBar) || (t.volumeBar = t.volumeBar || {}, t.volumeBar.vertical = t.vertical), i = n.call(this, e, t) || this, function (e, t) {t.tech_ && !t.tech_.featuresVolumeControl && e.addClass('vjs-hidden'), e.on(t, 'loadstart', function () {t.tech_.featuresVolumeControl ? e.removeClass('vjs-hidden') : e.addClass('vjs-hidden');});}(Ve(i), e), i.throttledHandleMouseMove = ye(ve(Ve(i), i.handleMouseMove), 30), i.on('mousedown', i.handleMouseDown), i.on('touchstart', i.handleMouseDown), 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;
}
Ge(e, n);
var t = e.prototype;
return t.createEl = function () {
var e = 'vjs-volume-horizontal';
return this.options_.vertical && (e = 'vjs-volume-vertical'), n.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.handleMouseUp), this.on(t, 'touchend', this.handleMouseUp);
}, 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.handleMouseUp), this.off(t, 'touchend', this.handleMouseUp);
}, t.handleMouseMove = function (e) {this.volumeBar.handleMouseMove(e);}, e;
}(je);
Wn.prototype.options_ = {children: ['volumeBar']}, je.registerComponent('VolumeControl', Wn);
var zn = function (n) {
function e (e, t) {
var i;
return i = n.call(this, e, t) || this, function (e, t) {t.tech_ && !t.tech_.featuresMuteControl && e.addClass('vjs-hidden'), e.on(t, 'loadstart', function () {t.tech_.featuresMuteControl ? e.removeClass('vjs-hidden') : e.addClass('vjs-hidden');});}(Ve(i), e), i.on(e, ['loadstart', 'volumechange'], i.update), i;
}
Ge(e, n);
var t = e.prototype;
return t.buildCSSClass = function () {return 'vjs-mute-control ' + n.prototype.buildCSSClass.call(this);}, t.handleClick = function (e) {
var t = this.player_.volume(), i = this.player_.lastVolume_();
if (0 === t) {
var n = i < .1 ? .1 : i;
this.player_.volume(n), this.player_.muted(!1);
} else this.player_.muted(!this.player_.muted());
}, t.update = function (e) {this.updateIcon_(), this.updateControlText_();}, t.updateIcon_ = function () {
var e = this.player_.volume(), t = 3;
dt && this.player_.tech_ && this.player_.tech_.el_ && this.player_.muted(this.player_.tech_.el_.muted), 0 === e || this.player_.muted() ? t = 0 : e < .33 ? t = 1 : e < .67 && (t = 2);
for (var i = 0; i < 4; i++) A(this.el_, 'vjs-vol-' + i);
I(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;
}(vn);
zn.prototype.controlText_ = 'Mute', je.registerComponent('MuteToggle', zn);
var Gn = function (n) {
function e (e, t) {
var i;
return void 0 === t && (t = {}), 'undefined' != typeof t.inline ? t.inline = t.inline : t.inline = !0, 'undefined' != typeof t.volumeControl && !o(t.volumeControl) || (t.volumeControl = t.volumeControl || {}, t.volumeControl.vertical = !t.inline), (i = n.call(this, e, t) || this).on(e, ['loadstart'], i.volumePanelState_), i.on(i.muteToggle, 'keyup', i.handleKeyPress), i.on(i.volumeControl, 'keyup', i.handleVolumeControlKeyUp), i.on('keydown', i.handleKeyPress), i.on('mouseover', i.handleMouseOver), i.on('mouseout', i.handleMouseOut), i.on(i.volumeControl, ['slideractive'], i.sliderActive_), i.on(i.volumeControl, ['sliderinactive'], i.sliderInactive_), i;
}
Ge(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) {Ot.isEventKey(e, 'Esc') && this.muteToggle.focus();}, t.handleMouseOver = function (e) {this.addClass('vjs-hover'), he(d, 'keyup', ve(this, this.handleKeyPress));}, t.handleMouseOut = function (e) {this.removeClass('vjs-hover'), pe(d, 'keyup', ve(this, this.handleKeyPress));}, t.handleKeyPress = function (e) {Ot.isEventKey(e, 'Esc') && this.handleMouseOut();}, e;
}(je);
Gn.prototype.options_ = {children: ['muteToggle', 'volumeControl']}, je.registerComponent('VolumePanel', Gn);
var Xn = function (n) {
function e (e, t) {
var i;
return i = n.call(this, e, t) || this, t && (i.menuButton_ = t.menuButton), i.focusedChild_ = -1, i.on('keydown', i.handleKeyDown), i.boundHandleBlur_ = ve(Ve(i), i.handleBlur), i.boundHandleTapClick_ = ve(Ve(i), i.handleTapClick), i;
}
Ge(e, n);
var t = e.prototype;
return t.addEventListenerForItem = function (e) {e instanceof je && (this.on(e, 'blur', this.boundHandleBlur_), this.on(e, ['tap', 'click'], this.boundHandleTapClick_));}, t.removeEventListenerForItem = function (e) {e instanceof je && (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) {
var t = this.addChild(e);
t && this.addEventListenerForItem(t);
}, t.createEl = function () {
var e = this.options_.contentElType || 'ul';
this.contentEl_ = k(e, {className: 'vjs-menu-content'}), this.contentEl_.setAttribute('role', 'menu');
var t = n.prototype.createEl.call(this, 'div', {append: this.contentEl_, className: 'vjs-menu'});
return t.appendChild(this.contentEl_), he(t, 'click', function (e) {e.preventDefault(), e.stopImmediatePropagation();}), t;
}, 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 || d.activeElement;
if (!this.children().some(function (e) {return e.el() === t;})) {
var i = this.menuButton_;
i && i.buttonPressed_ && t !== i.el().firstChild && i.unpressButton();
}
}, t.handleTapClick = function (t) {
if (this.menuButton_) {
this.menuButton_.unpressButton();
var e = this.children();
if (!Array.isArray(e)) return;
var i = e.filter(function (e) {return e.el() === t.target;})[0];
if (!i) return;
'CaptionSettingsMenuItem' !== i.name() && this.menuButton_.focus();
}
}, t.handleKeyDown = function (e) {Ot.isEventKey(e, 'Left') || Ot.isEventKey(e, 'Down') ? (e.preventDefault(), e.stopPropagation(), this.stepForward()) : (Ot.isEventKey(e, 'Right') || Ot.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].className && /vjs-menu-title/.test(t[0].className) && t.shift(), 0 < t.length && (e < 0 ? e = 0 : e >= t.length && (e = t.length - 1), t[this.focusedChild_ = e].el_.focus());
}, e;
}(je);
je.registerComponent('Menu', Xn);
var Kn = function (r) {
function e (e, t) {
var i;
void 0 === t && (t = {}), (i = r.call(this, e, t) || this).menuButton_ = new vn(e, t), i.menuButton_.controlText(i.controlText_), i.menuButton_.el_.setAttribute('aria-haspopup', 'true');
var n = vn.prototype.buildCSSClass();
return i.menuButton_.el_.className = i.buildCSSClass() + ' ' + n, i.menuButton_.removeClass('vjs-control'), i.addChild(i.menuButton_), i.update(), i.enabled_ = !0, i.on(i.menuButton_, 'tap', i.handleClick), i.on(i.menuButton_, 'click', i.handleClick), i.on(i.menuButton_, 'keydown', i.handleKeyDown), i.on(i.menuButton_, 'mouseenter', function () {i.addClass('vjs-hover'), i.menu.show(), he(d, 'keyup', ve(Ve(i), i.handleMenuKeyUp));}), i.on('mouseleave', i.handleMouseLeave), i.on('keydown', i.handleSubmenuKeyDown), i;
}
Ge(e, r);
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.show();
}, t.createMenu = function () {
var e = new Xn(this.player_, {menuButton: this});
if (this.hideThreshold_ = 0, this.options_.title) {
var t = k('li', {
className: 'vjs-menu-title',
innerHTML: Me(this.options_.title),
tabIndex: -1
});
this.hideThreshold_ += 1;
var i = new je(this.player_, {el: t});
e.addItem(i);
}
if (this.items = this.createItems(), this.items) for (var n = 0; n < this.items.length; n++) e.addItem(this.items[n]);
return e;
}, t.createItems = function () {}, t.createEl = function () {return r.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 + ' ' + vn.prototype.buildCSSClass() + ' ' + r.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 + ' ' + r.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(), r.prototype.dispose.call(this);}, t.handleClick = function (e) {this.buttonPressed_ ? this.unpressButton() : this.pressButton();}, t.handleMouseLeave = function (e) {this.removeClass('vjs-hover'), pe(d, 'keyup', ve(this, this.handleMenuKeyUp));}, t.focus = function () {this.menuButton_.focus();}, t.blur = function () {this.menuButton_.blur();}, t.handleKeyDown = function (e) {Ot.isEventKey(e, 'Esc') || Ot.isEventKey(e, 'Tab') ? (this.buttonPressed_ && this.unpressButton(), Ot.isEventKey(e, 'Tab') || (e.preventDefault(), this.menuButton_.focus())) : (Ot.isEventKey(e, 'Up') || Ot.isEventKey(e, 'Down')) && (this.buttonPressed_ || (e.preventDefault(), this.pressButton()));}, t.handleMenuKeyUp = function (e) {(Ot.isEventKey(e, 'Esc') || Ot.isEventKey(e, 'Tab')) && this.removeClass('vjs-hover');}, t.handleSubmenuKeyPress = function (e) {this.handleSubmenuKeyDown(e);}, t.handleSubmenuKeyDown = function (e) {(Ot.isEventKey(e, 'Esc') || Ot.isEventKey(e, 'Tab')) && (this.buttonPressed_ && this.unpressButton(), Ot.isEventKey(e, 'Tab') || (e.preventDefault(), this.menuButton_.focus()));}, t.pressButton = function () {
if (this.enabled_) {
if (this.buttonPressed_ = !0, this.menu.show(), this.menu.lockShowing(), this.menuButton_.el_.setAttribute('aria-expanded', 'true'), dt && b()) return;
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;
}(je);
je.registerComponent('MenuButton', Kn);
var Yn = function (a) {
function e (e, t) {
var i, n = t.tracks;
if ((i = a.call(this, e, t) || this).items.length <= 1 && i.hide(), !n) return Ve(i);
var r = ve(Ve(i), i.update);
return n.addEventListener('removetrack', r), n.addEventListener('addtrack', r), i.player_.on('ready', r), i.player_.on('dispose', function () {n.removeEventListener('removetrack', r), n.removeEventListener('addtrack', r);}), i;
}
return Ge(e, a), e;
}(Kn);
je.registerComponent('TrackButton', Yn);
var $n = ['Tab', 'Esc', 'Up', 'Down', 'Right', 'Left'], Qn = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).selectable = t.selectable, i.isSelected_ = t.selected || !1, i.multiSelectable = t.multiSelectable, i.selected(i.isSelected_), i.selectable ? i.multiSelectable ? i.el_.setAttribute('role', 'menuitemcheckbox') : i.el_.setAttribute('role', 'menuitemradio') : i.el_.setAttribute('role', 'menuitem'), i;
}
Ge(e, n);
var t = e.prototype;
return t.createEl = function (e, t, i) {
return this.nonIconControl = !0, n.prototype.createEl.call(this, 'li', g({
className: 'vjs-menu-item',
innerHTML: '',
tabIndex: -1
}, t), i);
}, t.handleKeyDown = function (t) {$n.some(function (e) {return Ot.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;
}(ln);
je.registerComponent('MenuItem', Qn);
var Jn = 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(Ve(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(Ve(n), t);
}
var o;
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 T.Event) try {o = new T.Event('change');} catch (e) {}
o || (o = d.createEvent('Event')).initEvent('change', !0, !0), r.dispatchEvent(o);
});
return n.handleTracksChange(), n;
}
Ge(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) {
if ('showing' === this.track.mode) {
var t = this.player_.cache_.selectedLanguage;
if (t && t.enabled && t.language === this.track.language && t.kind !== this.track.kind) return;
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;
}(Qn);
je.registerComponent('TextTrackMenuItem', Jn);
var Zn = 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;
}
Ge(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;
}(Jn);
je.registerComponent('OffTextTrackMenuItem', Zn);
var er = function (i) {
function e (e, t) {return void 0 === t && (t = {}), t.tracks = e.textTracks(), i.call(this, e, t) || this;}
return Ge(e, i), e.prototype.createItems = function (e, t) {
var i;
void 0 === e && (e = []), void 0 === t && (t = Jn), this.label_ && (i = this.label_ + ' off'), e.push(new Zn(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 = n[r];
if (-1 < this.kinds_.indexOf(a.kind)) {
var s = new t(this.player_, {
track: a,
kinds: this.kinds_,
kind: this.kind_,
selectable: !0,
multiSelectable: !1
});
s.addClass('vjs-' + a.kind + '-menu-item'), e.push(s);
}
}
return e;
}, e;
}(Yn);
je.registerComponent('TextTrackButton', er);
var tr = function (s) {
function e (e, t) {
var i, n = t.track, r = t.cue, a = e.currentTime();
return t.selectable = !0, t.multiSelectable = !1, t.label = r.text, t.selected = r.startTime <= a && a < r.endTime, (i = s.call(this, e, t) || this).track = n, i.cue = r, n.addEventListener('cuechange', ve(Ve(i), i.update)), i;
}
Ge(e, s);
var t = e.prototype;
return t.handleClick = function (e) {s.prototype.handleClick.call(this), this.player_.currentTime(this.cue.startTime), this.update(this.cue.startTime);}, t.update = function (e) {
var t = this.cue, i = this.player_.currentTime();
this.selected(t.startTime <= i && i < t.endTime);
}, e;
}(Qn);
je.registerComponent('ChaptersTrackMenuItem', tr);
var ir = function (n) {
function e (e, t, i) {return n.call(this, e, t, i) || this;}
Ge(e, n);
var t = e.prototype;
return t.buildCSSClass = function () {return 'vjs-chapters-button ' + n.prototype.buildCSSClass.call(this);}, t.buildWrapperCSSClass = function () {return 'vjs-chapters-button ' + n.prototype.buildWrapperCSSClass.call(this);}, t.update = function (e) {this.track_ && (!e || 'addtrack' !== e.type && 'removetrack' !== e.type) || this.setTrack(this.findChaptersTrack()), n.prototype.update.call(this);}, t.setTrack = function (e) {
if (this.track_ !== e) {
if (this.updateHandler_ || (this.updateHandler_ = this.update.bind(this)), this.track_) {
var t = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_);
t && t.removeEventListener('load', this.updateHandler_), this.track_ = null;
}
if (this.track_ = e, this.track_) {
this.track_.mode = 'hidden';
var i = this.player_.remoteTextTrackEls().getTrackElementByTrack_(this.track_);
i && i.addEventListener('load', this.updateHandler_);
}
}
}, 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(Me(this.kind_));}, t.createMenu = function () {return this.options_.title = this.getMenuCaption(), n.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], a = new tr(this.player_, {track: this.track_, cue: r});
e.push(a);
}
return e;
}, e;
}(er);
ir.prototype.kind_ = 'chapters', ir.prototype.controlText_ = 'Chapters', je.registerComponent('ChaptersButton', ir);
var nr = function (s) {
function e (e, t, i) {
var n;
n = s.call(this, e, t, i) || this;
var r = e.textTracks(), a = ve(Ve(n), n.handleTracksChange);
return r.addEventListener('change', a), n.on('dispose', function () {r.removeEventListener('change', a);}), n;
}
Ge(e, s);
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 ' + s.prototype.buildCSSClass.call(this);}, t.buildWrapperCSSClass = function () {return 'vjs-descriptions-button ' + s.prototype.buildWrapperCSSClass.call(this);}, e;
}(er);
nr.prototype.kind_ = 'descriptions', nr.prototype.controlText_ = 'Descriptions', je.registerComponent('DescriptionsButton', nr);
var rr = function (n) {
function e (e, t, i) {return n.call(this, e, t, i) || this;}
Ge(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;
}(er);
rr.prototype.kind_ = 'subtitles', rr.prototype.controlText_ = 'Subtitles', je.registerComponent('SubtitlesButton', rr);
var ar = function (n) {
function e (e, t) {
var i;
return t.track = {
player: e,
kind: t.kind,
label: t.kind + ' settings',
selectable: !1,
default: !1,
mode: 'disabled'
}, t.selectable = !1, t.name = 'CaptionSettingsMenuItem', (i = n.call(this, e, t) || this).addClass('vjs-texttrack-settings'), i.controlText(', opens ' + t.kind + ' settings dialog'), i;
}
return Ge(e, n), e.prototype.handleClick = function (e) {this.player().getChild('textTrackSettings').open();}, e;
}(Jn);
je.registerComponent('CaptionSettingsMenuItem', ar);
var sr = function (n) {
function e (e, t, i) {return n.call(this, e, t, i) || this;}
Ge(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 ar(this.player_, {kind: this.kind_})), this.hideThreshold_ += 1), n.prototype.createItems.call(this, e);
}, e;
}(er);
sr.prototype.kind_ = 'captions', sr.prototype.controlText_ = 'Captions', je.registerComponent('CaptionsButton', sr);
var or = function (r) {
function e () {return r.apply(this, arguments) || this;}
return Ge(e, r), e.prototype.createEl = function (e, t, i) {
var n = '', r.prototype.createEl.call(this, e, g({innerHTML: n}, t), i);
}, e;
}(Jn);
je.registerComponent('SubsCapsMenuItem', or);
var ur = function (n) {
function e (e, t) {
var i;
return void 0 === t && (t = {}), (i = n.call(this, e, t) || this).label_ = 'subtitles', -1 < ['en', 'en-us', 'en-ca', 'fr-ca'].indexOf(i.player_.language_) && (i.label_ = 'captions'), i.menuButton_.controlText(Me(i.label_)), i;
}
Ge(e, n);
var t = e.prototype;
return t.buildCSSClass = function () {return 'vjs-subs-caps-button ' + n.prototype.buildCSSClass.call(this);}, t.buildWrapperCSSClass = function () {return 'vjs-subs-caps-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 ar(this.player_, {kind: this.label_})), this.hideThreshold_ += 1), e = n.prototype.createItems.call(this, e, or);
}, e;
}(er);
ur.prototype.kinds_ = ['captions', 'subtitles'], ur.prototype.controlText_ = 'Subtitles', je.registerComponent('SubsCapsButton', ur);
var lr = 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(Ve(n), t);
}
return r.addEventListener('change', a), n.on('dispose', function () {r.removeEventListener('change', a);}), n;
}
Ge(e, s);
var t = e.prototype;
return t.createEl = function (e, t, i) {
var n = '', s.prototype.createEl.call(this, e, g({innerHTML: n}, t), i);
}, t.handleClick = function (e) {
var t = this.player_.audioTracks();
s.prototype.handleClick.call(this, e);
for (var i = 0; i < t.length; i++) {
var n = t[i];
n.enabled = n === this.track;
}
}, t.handleTracksChange = function (e) {this.selected(this.track.enabled);}, e;
}(Qn);
je.registerComponent('AudioTrackMenuItem', lr);
var cr = function (i) {
function e (e, t) {return void 0 === t && (t = {}), t.tracks = e.audioTracks(), i.call(this, e, t) || this;}
Ge(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 lr(this.player_, {track: n, selectable: !0, multiSelectable: !1}));
}
return e;
}, e;
}(Yn);
cr.prototype.controlText_ = 'Audio Track', je.registerComponent('AudioTrackButton', cr);
var dr = function (a) {
function e (e, t) {
var i, n = t.rate, r = parseFloat(n, 10);
return t.label = n, t.selected = 1 === r, t.selectable = !0, t.multiSelectable = !1, (i = a.call(this, e, t) || this).label = n, i.rate = r, i.on(e, 'ratechange', i.update), i;
}
Ge(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;
}(Qn);
dr.prototype.contentElType = 'button', je.registerComponent('PlaybackRateMenuItem', dr);
var hr = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).updateVisibility(), i.updateLabel(), i.on(e, 'loadstart', i.updateVisibility), i.on(e, 'ratechange', i.updateLabel), i;
}
Ge(e, n);
var t = e.prototype;
return t.createEl = function () {
var e = n.prototype.createEl.call(this);
return this.labelEl_ = k('div', {
className: 'vjs-playback-rate-value',
innerHTML: '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.createMenu = function () {
var e = new Xn(this.player()), t = this.playbackRates();
if (t) for (var i = t.length - 1; 0 <= i; i--) e.addChild(new dr(this.player(), {rate: t[i] + 'x'}));
return e;
}, t.updateARIAAttributes = function () {this.el().setAttribute('aria-valuenow', this.player().playbackRate());}, t.handleClick = function (e) {
for (var t = this.player().playbackRate(), i = this.playbackRates(), n = i[0], r = 0; r < i.length; r++) if (i[r] > t) {
n = i[r];
break;
}
this.player().playbackRate(n);
}, t.playbackRates = function () {return this.options_.playbackRates || this.options_.playerOptions && this.options_.playerOptions.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_.innerHTML = this.player().playbackRate() + 'x');}, e;
}(Kn);
hr.prototype.controlText_ = 'Playback Rate', je.registerComponent('PlaybackRateMenuButton', hr);
var pr = function (e) {
function t () {return e.apply(this, arguments) || this;}
Ge(t, e);
var i = t.prototype;
return i.buildCSSClass = function () {return 'vjs-spacer ' + e.prototype.buildCSSClass.call(this);}, i.createEl = function () {return e.prototype.createEl.call(this, 'div', {className: this.buildCSSClass()});}, t;
}(je);
je.registerComponent('Spacer', pr);
var fr = function (t) {
function e () {return t.apply(this, arguments) || this;}
Ge(e, t);
var i = e.prototype;
return i.buildCSSClass = function () {return 'vjs-custom-control-spacer ' + t.prototype.buildCSSClass.call(this);}, i.createEl = function () {
var e = t.prototype.createEl.call(this, {className: this.buildCSSClass()});
return e.innerHTML = ' ', e;
}, e;
}(pr);
je.registerComponent('CustomControlSpacer', fr);
var mr = function (e) {
function t () {return e.apply(this, arguments) || this;}
return Ge(t, e), t.prototype.createEl = function () {
return e.prototype.createEl.call(this, 'div', {
className: 'vjs-control-bar',
dir: 'ltr'
});
}, t;
}(je);
mr.prototype.options_ = {children: ['playToggle', 'volumePanel', 'currentTimeDisplay', 'timeDivider', 'durationDisplay', 'progressControl', 'liveDisplay', 'seekToLive', 'remainingTimeDisplay', 'customControlSpacer', 'playbackRateMenuButton', 'chaptersButton', 'descriptionsButton', 'subsCapsButton', 'audioTrackButton', 'fullscreenToggle']}, 'exitPictureInPicture' in d && mr.prototype.options_.children.splice(mr.prototype.options_.children.length - 1, 0, 'pictureInPictureToggle'), je.registerComponent('ControlBar', mr);
var gr = function (n) {
function e (e, t) {
var i;
return (i = n.call(this, e, t) || this).on(e, 'error', i.open), i;
}
Ge(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;
}(Mt);
gr.prototype.options_ = m({}, Mt.prototype.options_, {
pauseOnOpen: !1,
fillAlways: !0,
temporary: !1,
uncloseable: !0
}), je.registerComponent('ErrorDisplay', gr);
var vr = 'vjs-text-track-settings', yr = ['#000', 'Black'], _r = ['#00F', 'Blue'], br = ['#0FF', 'Cyan'],
Tr = ['#0F0', 'Green'], Sr = ['#F0F', 'Magenta'], kr = ['#F00', 'Red'], Cr = ['#FFF', 'White'],
Er = ['#FF0', 'Yellow'], wr = ['1', 'Opaque'], Ir = ['0.5', 'Semi-Transparent'], Ar = ['0', 'Transparent'], xr = {
backgroundColor: {
selector: '.vjs-bg-color > select',
id: 'captions-background-color-%s',
label: 'Color',
options: [yr, Cr, kr, Tr, _r, Er, Sr, br]
},
backgroundOpacity: {
selector: '.vjs-bg-opacity > select',
id: 'captions-background-opacity-%s',
label: 'Transparency',
options: [wr, Ir, Ar]
},
color: {
selector: '.vjs-fg-color > select',
id: 'captions-foreground-color-%s',
label: 'Color',
options: [Cr, yr, kr, Tr, _r, Er, Sr, br]
},
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: [wr, Ir]
},
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: [Ar, Ir, wr]
}
};
function Pr (e, t) {if (t && (e = t(e)), e && 'none' !== e) return e;}
xr.windowColor.options = xr.backgroundColor.options;
var Lr = function (n) {
function e (e, t) {
var i;
return t.temporary = !1, (i = n.call(this, e, t) || this).updateDisplay = ve(Ve(i), i.updateDisplay), i.fill(), i.hasBeenOpened_ = i.hasBeenFilled_ = !0, i.endDialog = k('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();}), r(xr, function (e) {i.on(i.$(e.selector), 'change', i.updateDisplay);}), i.options_.persistTextTrackSettings && i.restoreSettings(), i;
}
Ge(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 r = xr[e], a = r.id.replace('%s', this.id_), s = [t, a].join(' ').trim();
return ['<' + i + ' id="' + a + '" class="' + ('label' === i ? 'vjs-label' : '') + '">', this.localize(r.label), '', '').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 k('div', {
className: 'vjs-track-settings-colors',
innerHTML: [this.createElFgColor_(), this.createElBgColor_(), this.createElWinColor_()].join('')
});
}, t.createElFont_ = function () {
return k('div', {
className: 'vjs-track-settings-font',
innerHTML: ['', '', ''].join('')
});
}, t.createElControls_ = function () {
var e = this.localize('restore all settings to the default values');
return k('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 r = this;
return function (i, n, e) {return void 0 === e && (e = 0), a(i).reduce(function (e, t) {return n(e, i[t], t);}, e);}(xr, function (e, t, i) {
var n = function (e, t) {return Pr(e.options[e.options.selectedIndex].value, t);}(r.$(t.selector), t.parser);
return void 0 !== n && (e[i] = n), e;
}, {});
}, t.setValues = function (i) {
var n = this;
r(xr, function (e, t) {
!function (e, t, i) {
if (t) for (var n = 0; n < e.options.length; n++) if (Pr(e.options[n].value, i) === t) {
e.selectedIndex = n;
break;
}
}(n.$(e.selector), i[t], e.parser);
});
}, t.setDefaults = function () {
var i = this;
r(xr, function (e) {
var t = e.hasOwnProperty('default') ? e.default : 0;
i.$(e.selector).selectedIndex = t;
});
}, t.restoreSettings = function () {
var e;
try {e = JSON.parse(T.localStorage.getItem(vr));} catch (e) {p.warn(e);}
e && this.setValues(e);
}, t.saveSettings = function () {
if (this.options_.persistTextTrackSettings) {
var e = this.getValues();
try {Object.keys(e).length ? T.localStorage.setItem(vr, JSON.stringify(e)) : T.localStorage.removeItem(vr);} catch (e) {p.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, i = e && e.captionsButton;
t ? t.focus() : i && i.focus();
}, e;
}(Mt);
je.registerComponent('TextTrackSettings', Lr);
var Or = function (a) {
function e (e, t) {
var i, n = t.ResizeObserver || T.ResizeObserver;
null === t.ResizeObserver && (n = !1);
var r = Re({createEl: !n, reportTouchActivity: !1}, t);
return (i = a.call(this, e, r) || this).ResizeObserver = t.ResizeObserver || T.ResizeObserver, i.loadListener_ = null, i.resizeObserver_ = null, i.debouncedHandler_ = function (n, r, a, s) {
var o;
void 0 === s && (s = T);
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 e.cancel = function () {s.clearTimeout(o), o = null;}, e;
}(function () {i.resizeHandler();}, 100, !1, Ve(i)), n ? (i.resizeObserver_ = new i.ResizeObserver(i.debouncedHandler_), i.resizeObserver_.observe(e.el())) : (i.loadListener_ = function () {
if (i.el_ && i.el_.contentWindow) {
var e = i.debouncedHandler_,
t = i.unloadListener_ = function () {pe(this, 'resize', e), pe(this, 'unload', t), t = null;};
he(i.el_.contentWindow, 'unload', t), he(i.el_.contentWindow, 'resize', e);
}
}, i.one('load', i.loadListener_)), i;
}
Ge(e, a);
var t = e.prototype;
return t.createEl = function () {
return a.prototype.createEl.call(this, 'iframe', {
className: 'vjs-resize-manager',
tabIndex: -1
}, {'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;
}(je);
je.registerComponent('ResizeManager', Or);
var Dr = {trackingThreshold: 30, liveTolerance: 15}, Mr = function (r) {
function e (e, t) {
var i, n = Re(Dr, t, {createEl: !1});
return (i = r.call(this, e, n) || this).reset_(), i.on(i.player_, 'durationchange', i.handleDurationchange), at && 'hidden' in d && 'visibilityState' in d && i.on(d, 'visibilitychange', i.handleVisibilityChange), i;
}
Ge(e, r);
var t = e.prototype;
return t.handleVisibilityChange = function () {this.player_.duration() === 1 / 0 && (d.hidden ? this.stopTracking() : this.startTracking());}, t.trackLive_ = function () {
var e = this.player_.seekable();
if (e && e.length) {
var t = Number(T.performance.now().toFixed(4)), i = -1 === this.lastTime_ ? 0 : (t - this.lastTime_) / 1e3;
this.lastTime_ = t, this.pastSeekEnd_ = this.pastSeekEnd() + i;
var n = this.liveCurrentTime(), r = this.player_.currentTime(),
a = this.player_.paused() || this.seekedBehindLive_ || Math.abs(n - r) > this.options_.liveTolerance;
this.timeupdateSeen_ && n !== 1 / 0 || (a = !1), a !== this.behindLiveEdge_ && (this.behindLiveEdge_ = a, this.trigger('liveedgechange'));
}
}, t.handleDurationchange = 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.trackLive_, 30), this.trackLive_(), this.on(this.player_, ['play', 'pause'], this.trackLive_), 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.skipNextSeeked_ && 2 < e, this.skipNextSeeked_ = !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.skipNextSeeked_ = !1, this.clearInterval(this.trackingInterval_), this.trackingInterval_ = null, this.off(this.player_, ['play', 'pause'], this.trackLive_), 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.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 ? 1 / 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.skipNextSeeked_ = !0, this.player_.currentTime(this.liveCurrentTime()));}, t.dispose = function () {this.off(d, 'visibilitychange', this.handleVisibilityChange), this.stopTracking(), r.prototype.dispose.call(this);}, e;
}(je);
je.registerComponent('LiveTracker', Mr);
function Rr (e) {
var t = e.el();
if (t.hasAttribute('src')) return e.triggerSourceset(t.src), !0;
var i = e.$$('source'), n = [], r = '';
if (!i.length) return !1;
for (var a = 0; a < i.length; a++) {
var s = i[a].src;
s && -1 === n.indexOf(s) && n.push(s);
}
return !!n.length && (1 === n.length && (r = n[0]), e.triggerSourceset(r), !0);
}
function Nr (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 Ur (a) {
var s = a.el();
if (!s.resetSourceWatch_) {
var t = {},
e = function (e) {return Nr([e.el(), T.HTMLMediaElement.prototype, T.Element.prototype, Vr], 'innerHTML');}(a),
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 Rr(a), n;
};
};
['append', 'appendChild', 'insertAdjacentHTML'].forEach(function (e) {s[e] && (t[e] = s[e], s[e] = i(t[e]));}), Object.defineProperty(s, 'innerHTML', Re(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 Fr (n) {
if (n.featuresSourceset) {
var r = n.el();
if (!r.resetSourceset_) {
var i = function (e) {return Nr([e.el(), T.HTMLMediaElement.prototype, qr], 'src');}(n), a = r.setAttribute,
t = r.load;
Object.defineProperty(r, 'src', Re(i, {
set: function (e) {
var t = i.set.call(r, e);
return n.triggerSourceset(r.src), t;
}
})), r.setAttribute = function (e, t) {
var i = a.call(r, e, t);
return /src/i.test(e) && n.triggerSourceset(r.src), i;
}, r.load = function () {
var e = t.call(r);
return Rr(n) || (n.triggerSourceset(''), Ur(n)), e;
}, r.currentSrc ? n.triggerSourceset(r.currentSrc) : Rr(n) || Ur(n), r.resetSourceset_ = function () {r.resetSourceset_ = null, r.load = t, r.setAttribute = a, Object.defineProperty(r, 'src', i), r.resetSourceWatch_ && r.resetSourceWatch_();};
}
}
}
function Br (t, i, n, e) {
function r (e) {
return Object.defineProperty(t, i, {
value: e,
enumerable: !0,
writable: !0
});
}
void 0 === e && (e = !0);
var a = {
configurable: !0, enumerable: !0, get: function () {
var e = n();
return r(e), e;
}
};
return e && (a.set = r), Object.defineProperty(t, i, a);
}
var jr, Vr = Object.defineProperty({}, 'innerHTML', {
get: function () {return this.cloneNode(!0).innerHTML;},
set: function (e) {
var t = d.createElement(this.nodeName.toLowerCase());
t.innerHTML = e;
for (var i = d.createDocumentFragment(); t.childNodes.length;) i.appendChild(t.childNodes[0]);
return this.innerText = '', T.Element.prototype.appendChild.call(this, i), this.innerHTML;
}
}), qr = Object.defineProperty({}, 'src', {
get: function () {return this.hasAttribute('src') ? jt(T.Element.prototype.getAttribute.call(this, 'src')) : '';},
set: function (e) {return T.Element.prototype.setAttribute.call(this, 'src', e), e;}
}), Hr = function (c) {
function o (e, t) {
var i;
i = c.call(this, e, t) || this;
var n = e.source, r = !1;
if (n && (i.el_.currentSrc !== n.src || e.tag && 3 === e.tag.initNetworkState_) ? i.setSource(n) : i.handleLateInit_(i.el_), e.enableSourceset && i.setupSourcesetHandling_(), i.el_.hasChildNodes()) {
for (var a = i.el_.childNodes, s = a.length, o = []; s--;) {
var u = a[s];
'track' === u.nodeName.toLowerCase() && (i.featuresNativeTextTracks ? (i.remoteTextTrackEls().addTrackElement_(u), i.remoteTextTracks().addTrack(u.track), i.textTracks().addTrack(u.track), r || i.el_.hasAttribute('crossorigin') || !qt(u.src) || (r = !0)) : o.push(u));
}
for (var l = 0; l < o.length; l++) i.el_.removeChild(o[l]);
}
return i.proxyNativeTracks_(), i.featuresNativeTextTracks && r && p.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_(), (ut || ct || et) && !0 === e.nativeControlsForTouch && i.setControls(!0), i.proxyWebkitFullscreen_(), i.triggerReady(), i;
}
Ge(o, c);
var e = o.prototype;
return e.dispose = function () {this.el_ && this.el_.resetSourceset_ && this.el_.resetSourceset_(), o.disposeMediaElement(this.el_), this.options_ = null, c.prototype.dispose.call(this);}, e.setupSourcesetHandling_ = function () {Fr(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 = this;
if (t === this['featuresNative' + e + 'Tracks']) {
var n = e.toLowerCase();
this[n + 'TracksListeners_'] && Object.keys(this[n + 'TracksListeners_']).forEach(function (e) {i.el()[n + 'Tracks'].removeEventListener(e, i[n + 'TracksListeners_'][e]);}), this['featuresNative' + e + 'Tracks'] = !t, this[n + 'TracksListeners_'] = null, this.proxyNativeTracksForType_(n);
}
}, e.overrideNativeAudioTracks = function (e) {this.overrideNative_('Audio', e);}, e.overrideNativeVideoTracks = function (e) {this.overrideNative_('Video', e);}, e.proxyNativeTracksForType_ = function (i) {
var n = this, e = fi[i], r = this.el()[e.getterName], a = this[e.getterName]();
if (this['featuresNative' + e.capitalName + 'Tracks'] && r && r.addEventListener) {
var s = {
change: function (e) {
var t = {
type: 'change',
target: a,
currentTarget: a,
srcElement: a
};
a.trigger(t), 'text' === i && n[mi.remoteText.getterName]().trigger(t);
}, addtrack: function (e) {a.addTrack(e.track);}, removetrack: function (e) {a.removeTrack(e.track);}
}, t = function () {
for (var e = [], t = 0; t < a.length; t++) {
for (var i = !1, n = 0; n < r.length; n++) if (r[n] === a[t]) {
i = !0;
break;
}
i || e.push(a[t]);
}
for (; e.length;) a.removeTrack(e.shift());
};
this[e.getterName + 'Listeners_'] = s, Object.keys(s).forEach(function (t) {
var i = s[t];
r.addEventListener(t, i), n.on('dispose', function (e) {return r.removeEventListener(t, i);});
}), this.on('loadstart', t), this.on('dispose', function (e) {return n.off('loadstart', t);});
}
}, e.proxyNativeTracks_ = function () {
var t = this;
fi.names.forEach(function (e) {t.proxyNativeTracksForType_(e);});
}, e.createEl = function () {
var e = this.options_.tag;
if (!e || !this.options_.playerElIngest && !this.movingMediaElementInDOM) {
if (e) {
var t = e.cloneNode(!0);
e.parentNode && e.parentNode.insertBefore(t, e), o.disposeMediaElement(e), e = t;
} else {
e = d.createElement('video');
var i = Re({}, this.options_.tag && L(this.options_.tag));
ut && !0 === this.options_.nativeControlsForTouch || delete i.controls, P(e, g(i, {
id: this.options_.techId,
class: 'vjs-tech'
}));
}
e.playerId = this.options_.playerId;
}
'undefined' != typeof this.options_.preload && D(e, 'preload', this.options_.preload), void 0 !== this.options_.disablePictureInPicture && (e.disablePictureInPicture = this.options_.disablePictureInPicture);
for (var n = ['loop', 'muted', 'playsinline', 'autoplay'], r = 0; r < n.length; r++) {
var a = n[r], s = this.options_[a];
'undefined' != typeof s && (s ? D(e, a, a) : M(e, a), e[a] = s);
}
return e;
}, 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.setCurrentTime = function (e) {try {this.isScrubbing_ && this.el_.fastSeek && ht ? this.el_.fastSeek(e) : this.el_.currentTime = e;} catch (e) {p(e, 'Video is not ready. (Video.js)');}}, e.duration = function () {
var t = this;
if (this.el_.duration === 1 / 0 && Je && nt && 0 === this.el_.currentTime) {return this.on('timeupdate', function e () {0 < t.el_.currentTime && (t.el_.duration === 1 / 0 && t.trigger('durationchange'), t.off('timeupdate', e));}), NaN;}
return this.el_.duration || NaN;
}, e.width = function () {return this.el_.offsetWidth;}, e.height = function () {return this.el_.offsetHeight;}, e.proxyWebkitFullscreen_ = function () {
var e = this;
if ('webkitDisplayingFullscreen' in this.el_) {
var t = function () {this.trigger('fullscreenchange', {isFullscreen: !1});}, i = function () {
'webkitPresentationMode' in this.el_ && 'picture-in-picture' !== this.el_.webkitPresentationMode && (this.one('webkitendfullscreen', t), this.trigger('fullscreenchange', {
isFullscreen: !0,
nativeIOSFullscreen: !0
}));
};
this.on('webkitbeginfullscreen', i), this.on('dispose', function () {e.off('webkitbeginfullscreen', i), e.off('webkitendfullscreen', t);});
}
}, e.supportsFullScreen = function () {
if ('function' == typeof this.el_.webkitEnterFullScreen) {
var e = T.navigator && T.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) At(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.src = function (e) {
if (void 0 === e) return this.el_.src;
this.setSrc(e);
}, e.reset = function () {o.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) : c.prototype.addTextTrack.call(this, e, t, i);}, e.createRemoteTextTrack = function (e) {
if (!this.featuresNativeTextTracks) return c.prototype.createRemoteTextTrack.call(this, e);
var t = d.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) {
var i = c.prototype.addRemoteTextTrack.call(this, e, t);
return this.featuresNativeTextTracks && this.el().appendChild(i), i;
}, e.removeRemoteTextTrack = function (e) {if (c.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), T.performance && 'function' == typeof T.performance.now ? e.creationTime = T.performance.now() : T.performance && T.performance.timing && 'number' == typeof T.performance.timing.navigationStart && (e.creationTime = T.Date.now() - T.performance.timing.navigationStart), e;
}, o;
}(Xi);
Br(Hr, 'TEST_VID', function () {
if (y()) {
var e = d.createElement('video'), t = d.createElement('track');
return t.kind = 'captions', t.srclang = 'en', t.label = 'English', e.appendChild(t), e;
}
}), Hr.isSupported = function () {
try {Hr.TEST_VID.volume = .5;} catch (e) {return !1;}
return !(!Hr.TEST_VID || !Hr.TEST_VID.canPlayType);
}, Hr.canPlayType = function (e) {return Hr.TEST_VID.canPlayType(e);}, Hr.canPlaySource = function (e, t) {return Hr.canPlayType(e.type);}, Hr.canControlVolume = function () {
try {
var e = Hr.TEST_VID.volume;
return Hr.TEST_VID.volume = e / 2 + .1, e !== Hr.TEST_VID.volume;
} catch (e) {return !1;}
}, Hr.canMuteVolume = function () {
try {
var e = Hr.TEST_VID.muted;
return Hr.TEST_VID.muted = !e, Hr.TEST_VID.muted ? D(Hr.TEST_VID, 'muted', 'muted') : M(Hr.TEST_VID, 'muted'), e !== Hr.TEST_VID.muted;
} catch (e) {return !1;}
}, Hr.canControlPlaybackRate = function () {
if (Je && nt && rt < 58) return !1;
try {
var e = Hr.TEST_VID.playbackRate;
return Hr.TEST_VID.playbackRate = e / 2 + .1, e !== Hr.TEST_VID.playbackRate;
} catch (e) {return !1;}
}, Hr.canOverrideAttributes = function () {
try {
var e = function () {};
Object.defineProperty(d.createElement('video'), 'src', {
get: e,
set: e
}), Object.defineProperty(d.createElement('audio'), 'src', {
get: e,
set: e
}), Object.defineProperty(d.createElement('video'), 'innerHTML', {
get: e,
set: e
}), Object.defineProperty(d.createElement('audio'), 'innerHTML', {get: e, set: e});
} catch (e) {return !1;}
return !0;
}, Hr.supportsNativeTextTracks = function () {return ht || dt && nt;}, Hr.supportsNativeVideoTracks = function () {return !(!Hr.TEST_VID || !Hr.TEST_VID.videoTracks);}, Hr.supportsNativeAudioTracks = function () {return !(!Hr.TEST_VID || !Hr.TEST_VID.audioTracks);}, Hr.Events = ['loadstart', 'suspend', 'abort', 'error', 'emptied', 'stalled', 'loadedmetadata', 'loadeddata', 'canplay', 'canplaythrough', 'playing', 'waiting', 'seeking', 'seeked', 'ended', 'durationchange', 'timeupdate', 'progress', 'play', 'pause', 'ratechange', 'resize', 'volumechange'], [['featuresVolumeControl', 'canControlVolume'], ['featuresMuteControl', 'canMuteVolume'], ['featuresPlaybackRate', 'canControlPlaybackRate'], ['featuresSourceset', 'canOverrideAttributes'], ['featuresNativeTextTracks', 'supportsNativeTextTracks'], ['featuresNativeVideoTracks', 'supportsNativeVideoTracks'], ['featuresNativeAudioTracks', 'supportsNativeAudioTracks']].forEach(function (e) {
var t = e[0], i = e[1];
Br(Hr.prototype, t, function () {return Hr[i]();}, !0);
}), Hr.prototype.movingMediaElementInDOM = !dt, Hr.prototype.featuresFullscreenResize = !0, Hr.prototype.featuresProgressEvents = !0, Hr.prototype.featuresTimeupdateEvents = !0, Hr.patchCanPlayType = function () {4 <= Ze && !tt && !nt && (jr = Hr.TEST_VID && Hr.TEST_VID.constructor.prototype.canPlayType, Hr.TEST_VID.constructor.prototype.canPlayType = function (e) {return e && /^application\/(?:x-|vnd\.apple\.)mpegurl/i.test(e) ? 'maybe' : jr.call(this, e);});}, Hr.unpatchCanPlayType = function () {
var e = Hr.TEST_VID.constructor.prototype.canPlayType;
return jr && (Hr.TEST_VID.constructor.prototype.canPlayType = jr), e;
}, Hr.patchCanPlayType(), Hr.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) {}}();
}
}, Hr.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) {Hr.prototype[e] = function () {return this.el_[e] || this.el_.hasAttribute(e);};}), ['muted', 'defaultMuted', 'autoplay', 'loop', 'playsinline'].forEach(function (t) {Hr.prototype['set' + Me(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) {Hr.prototype[e] = function () {return this.el_[e];};}), ['volume', 'src', 'poster', 'preload', 'playbackRate', 'defaultPlaybackRate', 'disablePictureInPicture', 'crossOrigin'].forEach(function (t) {Hr.prototype['set' + Me(t)] = function (e) {this.el_[t] = e;};}), ['pause', 'load', 'play'].forEach(function (e) {Hr.prototype[e] = function () {return this.el_[e]();};}), Xi.withSourceHandlers(Hr), Hr.nativeSourceHandler = {}, Hr.nativeSourceHandler.canPlayType = function (e) {try {return Hr.TEST_VID.canPlayType(e);} catch (e) {return '';}}, Hr.nativeSourceHandler.canHandleSource = function (e, t) {
if (e.type) return Hr.nativeSourceHandler.canPlayType(e.type);
if (e.src) {
var i = Vt(e.src);
return Hr.nativeSourceHandler.canPlayType('video/' + i);
}
return '';
}, Hr.nativeSourceHandler.handleSource = function (e, t, i) {t.setSrc(e.src);}, Hr.nativeSourceHandler.dispose = function () {}, Hr.registerSourceHandler(Hr.nativeSourceHandler), Xi.registerTech('Html5', Hr);
var Wr = ['progress', 'abort', 'suspend', 'emptied', 'stalled', 'loadedmetadata', 'loadeddata', 'timeupdate', 'resize', 'volumechange', 'texttrackchange'],
zr = {canplay: 'CanPlay', canplaythrough: 'CanPlayThrough', playing: 'Playing', seeked: 'Seeked'},
Gr = ['tiny', 'xsmall', 'small', 'medium', 'large', 'xlarge', 'huge'], Xr = {};
Gr.forEach(function (e) {
var t = 'x' === e.charAt(0) ? 'x-' + e.substring(1) : e;
Xr[e] = 'vjs-layout-' + t;
});
var Kr = {tiny: 210, xsmall: 320, small: 425, medium: 768, large: 1440, xlarge: 2560, huge: 1 / 0},
Yr = function (c) {
function l (e, t, i) {
var n;
if (e.id = e.id || t.id || 'vjs_video_' + re(), (t = g(l.getTagSettings(e), t)).initChildren = !1, t.createEl = !1, t.evented = !1, t.reportTouchActivity = !1, !t.language) if ('function' == typeof e.closest) {
var r = e.closest('[lang]');
r && r.getAttribute && (t.language = r.getAttribute('lang'));
} else for (var a = e; a && 1 === a.nodeType;) {
if (L(a).hasOwnProperty('lang')) {
t.language = a.getAttribute('lang');
break;
}
a = a.parentNode;
}
if ((n = c.call(this, null, t, i) || this).boundDocumentFullscreenChange_ = ve(Ve(n), n.documentFullscreenChange_), n.boundFullWindowOnEscKey_ = ve(Ve(n), n.fullWindowOnEscKey), n.isFullscreen_ = !1, n.log = f(n.id_), n.fsApi_ = _t, n.isPosterFromTech_ = !1, n.queuedCallbacks_ = [], n.isReady_ = !1, n.hasStarted_ = !1, n.userActive_ = !1, n.debugEnabled_ = !1, !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?');
if (n.tag = e, n.tagAttributes = e && L(e), n.language(n.options_.language), t.languages) {
var s = {};
Object.getOwnPropertyNames(t.languages).forEach(function (e) {s[e.toLowerCase()] = t.languages[e];}), n.languages_ = s;
} else n.languages_ = l.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(), Pe(Ve(n), {eventBusKey: 'el_'}), n.fsApi_.requestFullscreen && (he(d, n.fsApi_.fullscreenchange, n.boundDocumentFullscreenChange_), n.on(n.fsApi_.fullscreenchange, n.boundDocumentFullscreenChange_)), n.fluid_ && n.on('playerreset', n.updateStyleEl_);
var o = Re(n.options_);
t.plugins && Object.keys(t.plugins).forEach(function (e) {n[e](t.plugins[e]);}), t.debug && n.debug(!0), n.options_.playerOptions = o, n.middleware_ = [], 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'), ut && n.addClass('vjs-touch-enabled'), dt || n.addClass('vjs-workinghover'), l.players[n.id_] = Ve(n);
var u = h.split('.')[0];
return n.addClass('vjs-v' + u), n.userActive(!0), n.reportUserActivity(), n.one('play', n.listenForUserActivity_), n.on('stageclick', n.handleStageClick_), n.on('keydown', n.handleKeyDown), n.breakpoints(n.options_.breakpoints), n.responsive(n.options_.responsive), n;
}
Ge(l, c);
var e = l.prototype;
return e.dispose = function () {
var n = this;
this.trigger('dispose'), this.off('dispose'), pe(d, this.fsApi_.fullscreenchange, this.boundDocumentFullscreenChange_), pe(d, 'keydown', this.boundFullWindowOnEscKey_), this.styleEl_ && this.styleEl_.parentNode && (this.styleEl_.parentNode.removeChild(this.styleEl_), this.styleEl_ = null), l.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), function (e) {Yi[e.id()] = null;}(this), gi.names.forEach(function (e) {
var t = gi[e], i = n[t.getterName]();
i && i.off && i.off();
}), c.prototype.dispose.call(this);
}, 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 = L(i);
if (n) {
for (t = this.el_ = i, i = this.tag = d.createElement('video'); t.children.length;) i.appendChild(t.firstChild);
w(t, 'video-js') || I(t, 'video-js'), t.appendChild(i), e = this.playerElIngest_ = t, Object.keys(t).forEach(function (e) {try {i[e] = t[e];} catch (e) {}});
}
if (i.setAttribute('tabindex', '-1'), r.tabindex = '-1', (at || nt && ot) && (i.setAttribute('role', 'application'), r.role = 'application'), i.removeAttribute('width'), i.removeAttribute('height'), 'width' in r && delete r.width, 'height' in r && delete r.height, Object.getOwnPropertyNames(r).forEach(function (e) {n && 'class' === e || t.setAttribute(e, r[e]), n && i.setAttribute(e, r[e]);}), i.playerId = i.id, i.id += '_html5_api', i.className = 'vjs-tech', i.player = t.player = this, this.addClass('vjs-paused'), !0 !== T.VIDEOJS_NO_DYNAMIC_STYLE) {
this.styleEl_ = ee('vjs-styles-dimensions');
var a = X('.vjs-styles-defaults'), s = X('head');
s.insertBefore(this.styleEl_, a ? a.nextSibling : s.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);
I(l, 'vjs-hidden'), l.setAttribute('hidden', 'hidden');
}
return i.initNetworkState_ = i.networkState, i.parentNode && !e && i.parentNode.insertBefore(t, i), E(i, t), this.children_.unshift(i), this.el_.setAttribute('lang', this.language_), this.el_ = t;
}, e.crossOrigin = function (e) {
if (!e) return this.techGet_('crossOrigin');
'anonymous' === e || 'use-credentials' === e ? this.techCall_('setCrossOrigin', e) : p.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) ? p.error('Improper value "' + t + '" supplied for for ' + e) : (this[i] = n, this.updateStyleEl_());
}, e.fluid = function (e) {
if (void 0 === e) return !!this.fluid_;
this.fluid_ = !!e, Ae(this) && this.off('playerreset', this.updateStyleEl_), e ? (this.addClass('vjs-fluid'), this.fill(!1), function (e, t) {Ae(e) ? t() : (e.eventedCallbacks || (e.eventedCallbacks = []), e.eventedCallbacks.push(t));}(function () {this.on('playerreset', this.updateStyleEl_);})) : 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 () {
if (!0 !== T.VIDEOJS_NO_DYNAMIC_STYLE) {
var e, t, i,
n = (void 0 !== this.aspectRatio_ && 'auto' !== this.aspectRatio_ ? this.aspectRatio_ : 0 < this.videoWidth() ? this.videoWidth() + ':' + this.videoHeight() : '16:9').split(':'),
r = n[1] / n[0];
e = void 0 !== this.width_ ? this.width_ : void 0 !== this.height_ ? this.height_ / r : this.videoWidth() || 300, t = void 0 !== this.height_ ? this.height_ : e * r, i = /^[^a-zA-Z]/.test(this.id()) ? 'dimensions-' + this.id() : this.id() + '-dimensions', this.addClass(i), te(this.styleEl_, '\n .' + i + ' {\n width: ' + e + 'px;\n height: ' + t + 'px;\n }\n\n .' + i + '.vjs-fluid {\n padding-top: ' + 100 * r + '%;\n }\n ');
} else {
var a = 'number' == typeof this.width_ ? this.width_ : this.options_.width,
s = 'number' == typeof this.height_ ? this.height_ : this.options_.height,
o = this.tech_ && this.tech_.el();
o && (0 <= a && (o.width = a), 0 <= s && (o.height = s));
}
}, e.loadTech_ = function (e, t) {
var i = this;
this.tech_ && this.unloadTech_();
var n = Me(e), r = e.charAt(0).toLowerCase() + e.slice(1);
'Html5' !== n && this.tag && (Xi.getTech('Html5').disposeMediaElement(this.tag), this.tag.player = null, this.tag = null), this.techName_ = n, this.isReady_ = !1;
var a = {
source: t,
autoplay: 'string' != typeof this.autoplay() && this.autoplay(),
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
};
gi.names.forEach(function (e) {
var t = gi[e];
a[t.getterName] = i[t.privateName];
}), g(a, this.options_[n]), g(a, this.options_[r]), g(a, this.options_[e.toLowerCase()]), this.tag && (a.tag = this.tag), t && t.src === this.cache_.src && 0 < this.cache_.currentTime && (a.startTime = this.cache_.currentTime);
var s = Xi.getTech(e);
if (!s) throw new Error('No Tech named \'' + n + '\' exists! \'' + n + '\' should be registered using videojs.registerTech()\'');
this.tech_ = new s(a), this.tech_.ready(ve(this, this.handleTechReady_), !0), Lt(this.textTracksJson_ || [], this.tech_), Wr.forEach(function (e) {i.on(i.tech_, e, i['handleTech' + Me(e) + '_']);}), Object.keys(zr).forEach(function (t) {
i.on(i.tech_, t, function (e) {
0 === i.tech_.playbackRate() && i.tech_.seeking() ? i.queuedCallbacks_.push({
callback: i['handleTech' + zr[t] + '_'].bind(i),
event: e
}) : i['handleTech' + zr[t] + '_'](e);
});
}), this.on(this.tech_, 'loadstart', this.handleTechLoadStart_), this.on(this.tech_, 'sourceset', this.handleTechSourceset_), this.on(this.tech_, 'waiting', this.handleTechWaiting_), this.on(this.tech_, 'ended', this.handleTechEnded_), this.on(this.tech_, 'seeking', this.handleTechSeeking_), this.on(this.tech_, 'play', this.handleTechPlay_), this.on(this.tech_, 'firstplay', this.handleTechFirstPlay_), this.on(this.tech_, 'pause', this.handleTechPause_), this.on(this.tech_, 'durationchange', this.handleTechDurationChange_), this.on(this.tech_, 'fullscreenchange', this.handleTechFullscreenChange_), this.on(this.tech_, 'fullscreenerror', this.handleTechFullscreenError_), this.on(this.tech_, 'enterpictureinpicture', this.handleTechEnterPictureInPicture_), this.on(this.tech_, 'leavepictureinpicture', this.handleTechLeavePictureInPicture_), this.on(this.tech_, 'error', this.handleTechError_), this.on(this.tech_, 'loadedmetadata', this.updateStyleEl_), this.on(this.tech_, 'posterchange', this.handleTechPosterChange_), this.on(this.tech_, 'textdata', this.handleTechTextData_), this.on(this.tech_, 'ratechange', this.handleTechRateChange_), this.usingNativeControls(this.techGet_('controls')), this.controls() && !this.usingNativeControls() && this.addTechControlsListeners_(), this.tech_.el().parentNode === this.el() || 'Html5' === n && this.tag || E(this.tech_.el(), this.el()), this.tag && (this.tag.player = null, this.tag = null);
}, e.unloadTech_ = function () {
var i = this;
gi.names.forEach(function (e) {
var t = gi[e];
i[t.privateName] = i[t.getterName]();
}), this.textTracksJson_ = Pt(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 && p.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_, 'mouseup', this.handleTechClick_), this.on(this.tech_, 'dblclick', this.handleTechDoubleClick_), this.on(this.tech_, 'touchstart', this.handleTechTouchStart_), this.on(this.tech_, 'touchmove', this.handleTechTouchMove_), this.on(this.tech_, 'touchend', this.handleTechTouchEnd_), this.on(this.tech_, 'tap', this.handleTechTap_);}, e.removeTechControlsListeners_ = function () {this.off(this.tech_, 'tap', this.handleTechTap_), this.off(this.tech_, 'touchstart', this.handleTechTouchStart_), this.off(this.tech_, 'touchmove', this.handleTechTouchMove_), this.off(this.tech_, 'touchend', this.handleTechTouchEnd_), this.off(this.tech_, 'mouseup', this.handleTechClick_), this.off(this.tech_, 'dblclick', this.handleTechDoubleClick_);}, 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_(this.autoplay());}, e.manualAutoplay_ = function (t) {
var n = this;
if (this.tech_ && 'string' == typeof t) {
var e, i = function () {
var e = n.muted();
n.muted(!0);
function t () {n.muted(e);}
n.playTerminatedQueue_.push(t);
var i = n.play();
if (It(i)) return i.catch(t);
};
if ('any' === t && !0 !== this.muted() ? It(e = this.play()) && (e = e.catch(i)) : e = 'muted' === t && !0 !== this.muted() ? i() : this.play(), It(e)) return e.then(function () {
n.trigger({
type: 'autoplay-success',
autoplay: t
});
}).catch(function (e) {n.trigger({type: 'autoplay-failure', autoplay: t});});
}
}, e.updateSourceCaches_ = function (e) {
void 0 === e && (e = '');
var t = 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 an(t);
}(this, t)), this.cache_.source = Re({}, e, {src: t, type: i});
for (var n = this.cache_.sources.filter(function (e) {return e.src && e.src === t;}), r = [], a = this.$$('source'), s = [], o = 0; o < a.length; o++) {
var u = L(a[o]);
r.push(u), u.src && u.src === t && s.push(u.src);
}
s.length && !n.length ? this.cache_.sources = r : n.length || (this.cache_.sources = [this.cache_.source]), this.cache_.src = t;
}, e.handleTechSourceset_ = function (e) {
var i = this;
if (!this.changingSrc_) {
var t = function (e) {return i.updateSourceCaches_(e);}, n = this.currentSource().src, r = e.src;
n && !/^blob:/.test(n) && /^blob:/.test(r) && (this.lastSource_ && (this.lastSource_.tech === r || this.lastSource_.player === n) || (t = function () {})), t(r), e.src || this.tech_.any(['sourceset', 'loadstart'], function (e) {
if ('sourceset' !== e.type) {
var t = i.techGet('currentSrc');
i.lastSource_.tech = t, i.updateSourceCaches_(t);
}
});
}
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 && (p.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.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) {z(e) && this.controls_ && (this.paused() ? At(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.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;
if (!t || t === this) {
var i = this.el(), n = d[this.fsApi_.fullscreenElement] === i;
!n && i.matches ? n = i.matches(':' + this.fsApi_.fullscreen) : !n && i.msMatchesSelector && (n = i.msMatchesSelector(':' + this.fsApi_.fullscreen)), this.isFullscreen(n);
}
}, e.handleTechFullscreenChange_ = function (e, t) {t && (t.nativeIOSFullscreen && this.toggleClass('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 (e, t) {
var i = null;
1 < arguments.length && (i = t), this.trigger('textdata', i);
}, 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: [],
volume: 1
};
}, e.techCall_ = function (e, t) {
this.ready(function () {
if (e in en) return function (e, t, i, n) {return t[i](e.reduce(nn(i), n));}(this.middleware_, this.tech_, e, t);
if (e in tn) return Ji(this.middleware_, this.tech_, e, t);
try {this.tech_ && this.tech_[e](t);} catch (e) {throw p(e), e;}
}, !0);
}, e.techGet_ = function (t) {
if (this.tech_ && this.tech_.isReady_) {
if (t in Zi) return function (e, t, i) {return e.reduceRight(nn(i), t[i]());}(this.middleware_, this.tech_, t);
if (t in tn) return Ji(this.middleware_, this.tech_, t);
try {return this.tech_[t]();} catch (e) {
if (void 0 === this.tech_[t]) throw p('Video.js: ' + t + ' method not defined for ' + this.techName_ + ' playback technology.', e), e;
if ('TypeError' === e.name) throw p('Video.js: ' + t + ' unavailable on ' + this.techName_ + ' playback technology element.', e), this.tech_.isReady_ = !1, e;
throw p(e), e;
}
}
}, e.play = function () {
var t = this, e = this.options_.Promise || T.Promise;
return e ? new e(function (e) {t.play_(e);}) : this.play_();
}, e.play_ = function (e) {
var t = this;
void 0 === e && (e = At), this.playCallbacks_.push(e);
var i = Boolean(!this.changingSrc_ && (this.src() || this.currentSrc()));
if (this.waitToPlay_ && (this.off(['ready', 'loadstart'], this.waitToPlay_), this.waitToPlay_ = null), !this.isReady_ || !i) return this.waitToPlay_ = function (e) {t.play_();}, this.one(['ready', 'loadstart'], this.waitToPlay_), void (i || !ht && !dt || this.load());
var n = this.techGet_('play');
null === n ? this.runPlayTerminatedQueue_() : this.runPlayCallbacks_(n);
}, 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') || gt(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.applyInitTime_), void this.one('canplay', this.applyInitTime_))) : (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 = parseFloat(e)) < 0 && (e = 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 = this.techGet_('buffered');
return e && e.length || (e = gt(0, 0)), e;
}, e.bufferedPercent = function () {return vt(this.buffered(), this.duration());}, e.bufferedEnd = function () {
var e = this.buffered(), t = this.duration(), i = e.end(e.length - 1);
return t < i && (i = t), i;
}, 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_;
return this.isFullscreen_ = Boolean(e), this.isFullscreen_ !== t && this.fsApi_.prefixed && this.trigger('fullscreenchange'), void this.toggleFullscreenClass_();
}, e.requestFullscreen = function (s) {
var e = this.options_.Promise || T.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);
if (a) return a.then(n, n), a;
});
}
return this.requestFullscreenHelper_();
}, e.requestFullscreenHelper_ = function (e) {
var t, i = this;
if (this.fsApi_.prefixed || (t = this.options_.fullscreen && this.options_.fullscreen.options || {}, void 0 !== e && (t = e)), this.fsApi_.requestFullscreen) {
var n = this.el_[this.fsApi_.requestFullscreen](t);
return n && n.then(function () {return i.isFullscreen(!0);}, function () {return i.isFullscreen(!1);}), n;
}
this.tech_.supportsFullScreen() ? this.techCall_('enterFullScreen') : this.enterFullWindow();
}, e.exitFullscreen = function () {
var e = this.options_.Promise || T.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_();
if (a) return a.then(n, n), a;
});
}
return this.exitFullscreenHelper_();
}, e.exitFullscreenHelper_ = function () {
var e = this;
if (this.fsApi_.requestFullscreen) {
var t = d[this.fsApi_.exitFullscreen]();
return t && t.then(function () {return e.isFullscreen(!1);}), t;
}
this.tech_.supportsFullScreen() ? this.techCall_('exitFullScreen') : this.exitFullWindow();
}, e.enterFullWindow = function () {this.isFullscreen(!0), this.isFullWindow = !0, this.docOrigOverflow = d.documentElement.style.overflow, he(d, 'keydown', this.boundFullWindowOnEscKey_), d.documentElement.style.overflow = 'hidden', I(d.body, 'vjs-full-window'), this.trigger('enterFullWindow');}, e.fullWindowOnEscKey = function (e) {Ot.isEventKey(e, 'Esc') && (!0 === this.isFullscreen() ? this.exitFullscreen() : this.exitFullWindow());}, e.exitFullWindow = function () {this.isFullscreen(!1), this.isFullWindow = !1, pe(d, 'keydown', this.boundFullWindowOnEscKey_), d.documentElement.style.overflow = this.docOrigOverflow, A(d.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 d && !1 === this.disablePictureInPicture()) return this.techGet_('requestPictureInPicture');}, e.exitPictureInPicture = function () {if ('pictureInPictureEnabled' in d) return d.exitPictureInPicture();}, e.handleKeyDown = function (e) {
var t = this.options_.userActions;
if (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 = void 0 === i ? function (e) {return Ot.isEventKey(e, 'f');} : i, r = t.muteKey,
a = void 0 === r ? function (e) {return Ot.isEventKey(e, 'm');} : r, s = t.playPauseKey,
o = void 0 === s ? function (e) {return Ot.isEventKey(e, 'k') || Ot.isEventKey(e, 'Space');} : s;
if (n.call(this, e)) {
e.preventDefault(), e.stopPropagation();
var u = je.getComponent('FullscreenToggle');
!1 !== d[this.fsApi_.fullscreenEnabled] && u.prototype.handleClick.call(this, e);
} else if (a.call(this, e)) {e.preventDefault(), e.stopPropagation(), je.getComponent('MuteToggle').prototype.handleClick.call(this, e);} else if (o.call(this, e)) {e.preventDefault(), e.stopPropagation(), je.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 = Xi.getTech(r);
if (a = a || je.getComponent(r)) {if (a.isSupported() && (t = a.canPlayType(e))) return t;} else p.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;
}
function i (e, t) {
var i = e[0];
if (e[1].canPlaySource(t, r.options_[i.toLowerCase()])) return {source: t, tech: i};
}
var n, r = this, a = this.options_.techOrder.map(function (e) {return [e, Xi.getTech(e)];}).filter(function (e) {
var t = e[0], i = e[1];
return i ? i.isSupported() : (p.error('The "' + t + '" tech is undefined. Skipped browser support check for that tech.'), !1);
});
return (this.options_.sourceOrder ? t(e, a, (n = i, function (e, t) {return n(t, e);})) : t(a, e, i)) || !1;
}, e.src = function (e) {
var i = this;
if ('undefined' == typeof e) return this.cache_.src || '';
var n = function t (e) {
if (Array.isArray(e)) {
var i = [];
e.forEach(function (e) {e = t(e), Array.isArray(e) ? i = i.concat(e) : s(e) && i.push(e);}), e = i;
} else e = 'string' == typeof e && e.trim() ? [on({src: e})] : s(e) && 'string' == typeof e.src && e.src && e.src.trim() ? [on(e)] : [];
return e;
}(e);
n.length ? (this.changingSrc_ = !0, this.cache_.sources = n, this.updateSourceCaches_(n[0]), Qi(this, n[0], function (e, t) {
if (i.middleware_ = t, i.cache_.sources = n, i.updateSourceCaches_(e), i.src_(e)) return 1 < n.length ? i.src(n.slice(1)) : (i.changingSrc_ = !1, i.setTimeout(function () {
this.error({
code: 4,
message: this.localize(this.options_.notSupportedMessage)
});
}, 0), void i.triggerReady());
!function (e, t) {e.forEach(function (e) {return e.setTech && e.setTech(t);});}(t, i.tech_);
})) : this.setTimeout(function () {
this.error({
code: 4,
message: this.localize(this.options_.notSupportedMessage)
});
}, 0);
}, e.src_ = function (e) {
var t = this, i = this.selectSource([e]);
return !i || (function (e, t) {return Me(e) === Me(t);}(i.tech, this.techName_) ? this.ready(function () {this.tech_.constructor.prototype.hasOwnProperty('setSource') ? this.techCall_('setSource', e) : this.techCall_('src', e.src), this.changingSrc_ = !1;}, !0) : (this.changingSrc_ = !0, this.loadTech_(i.tech, i.source), this.tech_.ready(function () {t.changingSrc_ = !1;})), !1);
}, e.load = function () {this.techCall_('load');}, e.reset = function () {
var e = this, t = this.options_.Promise || T.Promise;
this.paused() || !t ? this.doReset_() : At(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_(), Ae(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, i = e.remainingTimeDisplay;
t && t.updateContent(), i && i.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) ? (this.options_.autoplay = e, this.manualAutoplay_(e), 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 () {
if ((!this.poster_ || this.options_.techCanOverridePoster) && this.tech_ && this.tech_.poster) {
var e = this.tech_.poster() || '';
e !== this.poster_ && (this.poster_ = e, this.isPosterFromTech_ = !0, this.trigger('posterchange'));
}
},e.controls = function (e) {
if (void 0 === e) return !!this.controls_;
e = !!e, this.controls_ !== 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_;
e = !!e, this.usingNativeControls_ !== 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 (e) {
if (void 0 === e) return this.error_ || null;
if (this.options_.suppressNotSupportedError && e && 4 === e.code) {
var t = function () {this.error(e);};
return this.options_.suppressNotSupportedError = !1, this.any(['click', 'touchstart'], t), void this.one('loadstart', function () {this.off(['click', 'touchstart'], t);});
}
if (null === e) return this.error_ = e, this.removeClass('vjs-error'), void (this.errorDisplay && this.errorDisplay.close());
this.error_ = new Ct(e), this.addClass('vjs-error'), p.error('(CODE:' + this.error_.code + ' ' + Ct.errorTypes[this.error_.code] + ')', this.error_.message, this.error_), this.trigger('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 () {
function e (e) {r(), this.clearInterval(t);}
var t, i, n, r = ve(this, this.reportUserActivity);
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, s = this.getChild('controlBar');
!s || dt || Je || (s.on('mouseenter', function (e) {this.player().cache_.inactivityTimeout = this.player().options_.inactivityTimeout, this.player().options_.inactivityTimeout = 0;}), s.on('mouseleave', function (e) {this.player().options_.inactivityTimeout = this.player().cache_.inactivityTimeout;})), this.on('keydown', r), this.on('keyup', r), this.setInterval(function () {
if (this.userActivity_) {
this.userActivity_ = !1, this.userActive(!0), this.clearTimeout(a);
var e = this.options_.inactivityTimeout;
e <= 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.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) {
void 0 === e && (e = {});
var t = e.track;
if (t = t || e, 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();
},e.languages = function () {return Re(l.prototype.options_.languages, this.languages_);},e.toJSON = function () {
var e = Re(this.options_), t = e.tracks;
e.tracks = [];
for (var i = 0; i < t.length; i++) {
var n = t[i];
(n = Re(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 Mt(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 < Gr.length; i++) {
var n = Gr[i];
if (t <= this.breakpoints_[n]) {
if (e === n) return;
e && this.removeClass(Xr[e]), this.addClass(Xr[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_ = g({}, Kr, e), this.updateCurrentBreakpoint_()), g(this.breakpoints_);},e.responsive = function (e) {return void 0 === e ? this.responsive_ : (e = Boolean(e)) !== this.responsive_ ? ((this.responsive_ = e) ? (this.on('playerresize', this.updateCurrentBreakpoint_), this.updateCurrentBreakpoint_()) : (this.off('playerresize', this.updateCurrentBreakpoint_), this.removeCurrentBreakpoint_()), e) : void 0;},e.currentBreakpoint = function () {return this.breakpoint_;},e.currentBreakpointClass = function () {return Xr[this.breakpoint_] || '';},e.loadMedia = function (e, t) {
var i = this;
if (e && 'object' == typeof e) {
this.reset(), this.cache_.media = Re(e);
var n = this.cache_.media, r = n.artwork, a = n.poster, s = n.src, o = n.textTracks;
!r && a && (this.cache_.media.artwork = [{
src: a,
type: an(a)
}]), s && this.src(s), a && this.poster(a), Array.isArray(o) && o.forEach(function (e) {return i.addRemoteTextTrack(e, !1);}), this.ready(t);
}
},e.getMedia = function () {
if (this.cache_.media) return Re(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: an(t.poster)}]), t;
},l.getTagSettings = function (e) {
var t = {sources: [], tracks: []}, i = L(e), n = i['data-setup'];
if (w(e, 'vjs-fill') && (i.fill = !0), w(e, 'vjs-fluid') && (i.fluid = !0), null !== n) {
var r = wt(n || '{}'), a = r[0], s = r[1];
a && p.error(a), g(i, s);
}
if (g(t, i), e.hasChildNodes()) for (var o = e.childNodes, u = 0, l = o.length; u < l; u++) {
var c = o[u], d = c.nodeName.toLowerCase();
'source' === d ? t.sources.push(L(c)) : 'track' === d && t.tracks.push(L(c));
}
return t;
},e.flexNotSupported_ = function () {
var e = d.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);
},l;
}(je);
gi.names.forEach(function (e) {
var t = gi[e];
Yr.prototype[t.getterName] = function () {return this.tech_ ? this.tech_[t.getterName]() : (this[t.privateName] = this[t.privateName] || new t.ListClass, this[t.privateName]);};
}), Yr.prototype.crossorigin = Yr.prototype.crossOrigin, Yr.players = {};
var $r = T.navigator;
Yr.prototype.options_ = {
techOrder: Xi.defaultTechOrder_,
html5: {},
flash: {},
inactivityTimeout: 2e3,
playbackRates: [],
liveui: !1,
children: ['mediaLoader', 'posterImage', 'textTrackDisplay', 'loadingSpinner', 'bigPlayButton', 'liveTracker', 'controlBar', 'errorDisplay', 'textTrackSettings', 'resizeManager'],
language: $r && ($r.languages && $r.languages[0] || $r.userLanguage || $r.language) || 'en',
languages: {},
notSupportedMessage: 'No compatible source was found for this media.',
fullscreen: {options: {navigationUI: 'hide'}},
breakpoints: {},
responsive: !1
}, ['ended', 'seeking', 'seekable', 'networkState', 'readyState'].forEach(function (e) {Yr.prototype[e] = function () {return this.techGet_(e);};}), Wr.forEach(function (e) {Yr.prototype['handleTech' + Me(e) + '_'] = function () {return this.trigger(e);};}), je.registerComponent('Player', Yr);
var Qr = i(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 Jr (e) {return oa.hasOwnProperty(e);}
function Zr (e) {return Jr(e) ? oa[e] : void 0;}
function ea (e, t) {e[sa] = e[sa] || {}, e[sa][t] = !0;}
function ta (e, t, i) {
var n = (i ? 'before' : '') + 'pluginsetup';
e.trigger(n, t), e.trigger(n + ':' + t.name, t);
}
function ia (r, a) {
return a.prototype.name = r, function () {
ta(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 = ra(a, [this].concat(t));
return this[r] = function () {return n;}, ta(this, n.getEventHash()), n;
};
}
var na = 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;}
}, ra = i(function (n) {
function r (e, t, i) {
return na() ? n.exports = r = Reflect.construct : n.exports = r = function (e, t, i) {
var n = [null];
n.push.apply(n, t);
var r = new (Function.bind.apply(e, n));
return i && Qr(r, i.prototype), r;
}, r.apply(null, arguments);
}
n.exports = r;
}), aa = 'plugin', sa = 'activePlugins_', oa = {}, ua = 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)), Pe(this), delete this.trigger, Oe(this, this.constructor.defaultState), ea(e, this.name), this.dispose = ve(this, this.dispose), e.on('dispose', this.dispose);
}
var e = i.prototype;
return e.version = function () {return this.constructor.VERSION;}, e.getEventHash = function (e) {return void 0 === e && (e = {}), e.name = this.name, e.plugin = this.constructor, e.instance = this, e;}, e.trigger = function (e, t) {return void 0 === t && (t = {}), fe(this.eventBusEl_, e, this.getEventHash(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[sa][e] = !1, this.player = this.state = null, t[e] = ia(e, oa[e]);
}, i.isBasic = function (e) {
var t = 'string' == typeof e ? Zr(e) : e;
return 'function' == typeof t && !i.prototype.isPrototypeOf(t.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 (Jr(e)) p.warn('A plugin named "' + e + '" already exists. You may want to avoid re-registering plugins!'); else if (Yr.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 oa[e] = t, e !== aa && (i.isBasic(t) ? Yr.prototype[e] = function (t, i) {
function n () {
ta(this, {
name: t,
plugin: i,
instance: null
}, !0);
var e = i.apply(this, arguments);
return ea(this, t), ta(this, {name: t, plugin: i, instance: e}), e;
}
return Object.keys(i).forEach(function (e) {n[e] = i[e];}), n;
}(e, t) : Yr.prototype[e] = ia(e, t)), t;
}, i.deregisterPlugin = function (e) {
if (e === aa) throw new Error('Cannot de-register base plugin.');
Jr(e) && (delete oa[e], delete Yr.prototype[e]);
}, i.getPlugins = function (e) {
var i;
return void 0 === e && (e = Object.keys(oa)), e.forEach(function (e) {
var t = Zr(e);
t && ((i = i || {})[e] = t);
}), i;
}, i.getPluginVersion = function (e) {
var t = Zr(e);
return t && t.VERSION || '';
}, i;
}();
ua.getPlugin = Zr, ua.BASE_PLUGIN_NAME = aa, ua.registerPlugin(aa, ua), Yr.prototype.usingPlugin = function (e) {return !!this[sa] && !0 === this[sa][e];}, Yr.prototype.hasPlugin = function (e) {return !!Jr(e);};
var la = 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 && Qr(e, t);
}, ca = function (e) {return 0 === e.indexOf('#') ? e.slice(1) : e;};
function da (e, i, t) {
var n = da.getPlayer(e);
if (n) return i && p.warn('Player "' + e + '" is already initialised. Options will not be applied.'), t && n.ready(t), n;
var r = 'string' == typeof e ? X('#' + ca(e)) : e;
if (!_(r)) throw new TypeError('The element or ID supplied is not valid. (videojs)');
r.ownerDocument.defaultView && r.ownerDocument.body.contains(r) || p.warn('The element supplied is not included in the DOM'), i = i || {}, da.hooks('beforesetup').forEach(function (e) {
var t = e(r, Re(i));
s(t) && !Array.isArray(t) ? i = Re(i, t) : p.error('please return an object in beforesetup hooks');
});
var a = je.getComponent('Player');
return n = new a(r, i, t), da.hooks('setup').forEach(function (e) {return e(n);}), n;
}
if (da.hooks_ = {}, da.hooks = function (e, t) {return da.hooks_[e] = da.hooks_[e] || [], t && (da.hooks_[e] = da.hooks_[e].concat(t)), da.hooks_[e];}, da.hook = function (e, t) {da.hooks(e, t);}, da.hookOnce = function (i, e) {da.hooks(i, [].concat(e).map(function (t) {return function e () {return da.removeHook(i, e), t.apply(void 0, arguments);};}));}, da.removeHook = function (e, t) {
var i = da.hooks(e).indexOf(t);
return !(i <= -1) && (da.hooks_[e] = da.hooks_[e].slice(), da.hooks_[e].splice(i, 1), !0);
}, !0 !== T.VIDEOJS_NO_DYNAMIC_STYLE && y()) {
var ha = X('.vjs-styles-defaults');
if (!ha) {
ha = ee('vjs-styles-defaults');
var pa = X('head');
pa && pa.insertBefore(ha, pa.firstChild), te(ha, '\n .video-js {\n width: 300px;\n height: 150px;\n }\n\n .vjs-fluid {\n padding-top: 56.25%\n }\n ');
}
}
function fa (e) {return e && 'object' == typeof e && 'default' in e ? e : {default: e};}
J(1, da), da.VERSION = h, da.options = Yr.prototype.options_, da.getPlayers = function () {return Yr.players;}, da.getPlayer = function (e) {
var t, i = Yr.players;
if ('string' == typeof e) {
var n = ca(e), r = i[n];
if (r) return r;
t = X('#' + n);
} else t = e;
if (_(t)) {
var a = t, s = a.player, o = a.playerId;
if (s || i[o]) return s || i[o];
}
}, da.getAllPlayers = function () {return Object.keys(Yr.players).map(function (e) {return Yr.players[e];}).filter(Boolean);}, da.players = Yr.players, da.getComponent = je.getComponent, da.registerComponent = function (e, t) {Xi.isTech(t) && p.warn('The ' + e + ' tech was registered as a component. It should instead be registered using videojs.registerTech(name, tech)'), je.registerComponent.call(je, e, t);}, da.getTech = Xi.getTech, da.registerTech = Xi.registerTech, da.use = function (e, t) {Ki[e] = Ki[e] || [], Ki[e].push(t);}, Object.defineProperty(da, 'middleware', {
value: {},
writeable: !1,
enumerable: !0
}), Object.defineProperty(da.middleware, 'TERMINATOR', {
value: $i,
writeable: !1,
enumerable: !0
}), da.browser = pt, da.TOUCH_ENABLED = ut, da.extend = function (e, t) {
void 0 === t && (t = {});
var i = function () {e.apply(this, arguments);}, n = {};
for (var r in 'object' == typeof t ? (t.constructor !== Object.prototype.constructor && (i = t.constructor), n = t) : 'function' == typeof t && (i = t), la(i, e), e && (i.super_ = e), n) n.hasOwnProperty(r) && (i.prototype[r] = n[r]);
return i;
}, da.mergeOptions = Re, da.bind = ve, da.registerPlugin = ua.registerPlugin, da.deregisterPlugin = ua.deregisterPlugin, da.plugin = function (e, t) {return p.warn('videojs.plugin() is deprecated; use videojs.registerPlugin() instead'), ua.registerPlugin(e, t);}, da.getPlugins = ua.getPlugins, da.getPlugin = ua.getPlugin, da.getPluginVersion = ua.getPluginVersion, da.addLanguage = function (e, t) {
var i;
return e = ('' + e).toLowerCase(), da.options.languages = Re(da.options.languages, ((i = {})[e] = t, i)), da.options.languages[e];
}, da.log = p, da.createLogger = f, da.createTimeRange = da.createTimeRanges = gt, da.formatTime = kn, da.setFormatTime = function (e) {Sn = e;}, da.resetFormatTime = function () {Sn = Tn;}, da.parseUrl = Bt, da.isCrossOrigin = qt, da.EventTarget = _e, da.on = he, da.one = me, da.off = pe, da.trigger = fe, da.xhr = ni, da.TextTrack = ci, da.AudioTrack = di, da.VideoTrack = hi, ['isEl', 'isTextNode', 'createEl', 'hasClass', 'addClass', 'removeClass', 'toggleClass', 'setAttributes', 'getAttributes', 'emptyEl', 'appendContent', 'insertContent'].forEach(function (e) {da[e] = function () {return p.warn('videojs.' + e + '() is deprecated; use videojs.dom.' + e + '() instead'), Y[e].apply(null, arguments);};}), da.computedStyle = u, da.dom = Y, da.url = Zt, da.defineLazyProperty = Br;
var ma = fa(i(function (e, t) {
var i, c, n, r, d;
i = /^((?:[a-zA-Z0-9+\-.]+:)?)(\/\/[^\/?#]*)?((?:[^\/\?#]*\/)*.*?)??(;.*?)?(\?.*?)?(#.*?)?$/, c = /^([^\/?#]*)(.*)$/, n = /(?:\/|^)\.(?=\/)/g, r = /(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g, d = {
buildAbsoluteURL: function (e, t, i) {
if (i = i || {}, e = e.trim(), !(t = t.trim())) {
if (!i.alwaysNormalize) return e;
var n = d.parseURL(e);
if (!n) throw new Error('Error trying to parse base URL.');
return n.path = d.normalizePath(n.path), d.buildURLFromParts(n);
}
var r = d.parseURL(t);
if (!r) throw new Error('Error trying to parse relative URL.');
if (r.scheme) return i.alwaysNormalize ? (r.path = d.normalizePath(r.path), d.buildURLFromParts(r)) : t;
var a = d.parseURL(e);
if (!a) throw new Error('Error trying to parse base URL.');
if (!a.netLoc && a.path && '/' !== a.path[0]) {
var s = c.exec(a.path);
a.netLoc = s[1], a.path = s[2];
}
a.netLoc && !a.path && (a.path = '/');
var o = {
scheme: a.scheme,
netLoc: r.netLoc,
path: null,
params: r.params,
query: r.query,
fragment: r.fragment
};
if (!r.netLoc && (o.netLoc = a.netLoc, '/' !== r.path[0])) if (r.path) {
var u = a.path, l = u.substring(0, u.lastIndexOf('/') + 1) + r.path;
o.path = d.normalizePath(l);
} else o.path = a.path, r.params || (o.params = a.params, r.query || (o.query = a.query));
return null === o.path && (o.path = i.alwaysNormalize ? d.normalizePath(r.path) : r.path), d.buildURLFromParts(o);
},
parseURL: function (e) {
var t = i.exec(e);
return t ? {
scheme: t[1] || '',
netLoc: t[2] || '',
path: t[3] || '',
params: t[4] || '',
query: t[5] || '',
fragment: t[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 = d;
})), ga = fa(T),
va = function (e, t) {return /^[a-z]+:/i.test(t) ? t : (/\/\//i.test(e) || (e = ma.default.buildAbsoluteURL(ga.default.location && ga.default.location.href || '', e)), ma.default.buildAbsoluteURL(e, t));},
ya = 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;
var i = this.listeners[e].indexOf(t);
return this.listeners[e] = this.listeners[e].slice(0), this.listeners[e].splice(i, 1), -1 < i;
}, t.trigger = function (e, t) {
var i = this.listeners[e];
if (i) if (2 === arguments.length) for (var n = i.length, r = 0; r < n; ++r) i[r].call(this, t); else for (var a = Array.prototype.slice.call(arguments, 1), s = i.length, o = 0; o < s; ++o) i[o].apply(this, a);
}, t.dispose = function () {this.listeners = {};}, t.pipe = function (t) {this.on('data', function (e) {t.push(e);});}, e;
}();
function _a (e) {return e && 'object' == typeof e && 'default' in e ? e : {default: e};}
var ba = _a(T);
function Ta (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;
}
var Sa = function (e) {
for (var t = function (e) {return ba.default.atob ? ba.default.atob(e) : Buffer.from(e, 'base64').toString('binary');}(e), i = new Uint8Array(t.length), n = 0; n < t.length; n++) i[n] = t.charCodeAt(n);
return i;
}, ka = function (t) {
function e () {
var e;
return (e = t.call(this) || this).buffer = '', e;
}
return Ge(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;
}(ya), Ca = function (t) {
function e () {
var e;
return (e = t.call(this) || this).customParsers = [], e.tagMappers = [], e;
}
Ge(e, t);
var i = e.prototype;
return i.push = function (n) {
var u, l, c = this;
0 !== (n = n.trim()).length && ('#' === n[0] ? this.tagMappers.reduce(function (e, t) {
var i = t(n);
return i === n ? e : e.concat([i]);
}, [n]).forEach(function (e) {
for (var t = 0; t < c.customParsers.length; t++) if (c.customParsers[t].call(c, e)) return;
if (0 === e.indexOf('#EXT')) if (e = e.replace('\r', ''), u = /^#EXTM3U/.exec(e)) c.trigger('data', {
type: 'tag',
tagType: 'm3u'
}); else {
if (u = /^#EXTINF:?([0-9\.]*)?,?(.*)?$/.exec(e)) return l = {
type: 'tag',
tagType: 'inf'
}, u[1] && (l.duration = parseFloat(u[1])), u[2] && (l.title = u[2]), void c.trigger('data', l);
if (u = /^#EXT-X-TARGETDURATION:?([0-9.]*)?/.exec(e)) return l = {
type: 'tag',
tagType: 'targetduration'
}, u[1] && (l.duration = parseInt(u[1], 10)), void c.trigger('data', l);
if (u = /^#ZEN-TOTAL-DURATION:?([0-9.]*)?/.exec(e)) return l = {
type: 'tag',
tagType: 'totalduration'
}, u[1] && (l.duration = parseInt(u[1], 10)), void c.trigger('data', l);
if (u = /^#EXT-X-VERSION:?([0-9.]*)?/.exec(e)) return l = {
type: 'tag',
tagType: 'version'
}, u[1] && (l.version = parseInt(u[1], 10)), void c.trigger('data', l);
if (u = /^#EXT-X-MEDIA-SEQUENCE:?(\-?[0-9.]*)?/.exec(e)) return l = {
type: 'tag',
tagType: 'media-sequence'
}, u[1] && (l.number = parseInt(u[1], 10)), void c.trigger('data', l);
if (u = /^#EXT-X-DISCONTINUITY-SEQUENCE:?(\-?[0-9.]*)?/.exec(e)) return l = {
type: 'tag',
tagType: 'discontinuity-sequence'
}, u[1] && (l.number = parseInt(u[1], 10)), void c.trigger('data', l);
if (u = /^#EXT-X-PLAYLIST-TYPE:?(.*)?$/.exec(e)) return l = {
type: 'tag',
tagType: 'playlist-type'
}, u[1] && (l.playlistType = u[1]), void c.trigger('data', l);
if (u = /^#EXT-X-BYTERANGE:?([0-9.]*)?@?([0-9.]*)?/.exec(e)) return l = {
type: 'tag',
tagType: 'byterange'
}, u[1] && (l.length = parseInt(u[1], 10)), u[2] && (l.offset = parseInt(u[2], 10)), void c.trigger('data', l);
if (u = /^#EXT-X-ALLOW-CACHE:?(YES|NO)?/.exec(e)) return l = {
type: 'tag',
tagType: 'allow-cache'
}, u[1] && (l.allowed = !/NO/.test(u[1])), void c.trigger('data', l);
if (u = /^#EXT-X-MAP:?(.*)$/.exec(e)) {
if (l = {type: 'tag', tagType: 'map'}, u[1]) {
var i = Ta(u[1]);
if (i.URI && (l.uri = i.URI), i.BYTERANGE) {
var n = i.BYTERANGE.split('@'), r = n[0], a = n[1];
l.byterange = {}, r && (l.byterange.length = parseInt(r, 10)), a && (l.byterange.offset = parseInt(a, 10));
}
}
c.trigger('data', l);
} else if (u = /^#EXT-X-STREAM-INF:?(.*)$/.exec(e)) {
if (l = {
type: 'tag',
tagType: 'stream-inf'
}, u[1]) {
if (l.attributes = Ta(u[1]), l.attributes.RESOLUTION) {
var s = l.attributes.RESOLUTION.split('x'), o = {};
s[0] && (o.width = parseInt(s[0], 10)), s[1] && (o.height = parseInt(s[1], 10)), l.attributes.RESOLUTION = o;
}
l.attributes.BANDWIDTH && (l.attributes.BANDWIDTH = parseInt(l.attributes.BANDWIDTH, 10)), l.attributes['PROGRAM-ID'] && (l.attributes['PROGRAM-ID'] = parseInt(l.attributes['PROGRAM-ID'], 10));
}
c.trigger('data', l);
} else {
if (u = /^#EXT-X-MEDIA:?(.*)$/.exec(e)) return l = {
type: 'tag',
tagType: 'media'
}, u[1] && (l.attributes = Ta(u[1])), void c.trigger('data', l);
if (u = /^#EXT-X-ENDLIST/.exec(e)) c.trigger('data', {
type: 'tag',
tagType: 'endlist'
}); else if (u = /^#EXT-X-DISCONTINUITY/.exec(e)) c.trigger('data', {
type: 'tag',
tagType: 'discontinuity'
}); else {
if (u = /^#EXT-X-PROGRAM-DATE-TIME:?(.*)$/.exec(e)) return l = {
type: 'tag',
tagType: 'program-date-time'
}, u[1] && (l.dateTimeString = u[1], l.dateTimeObject = new Date(u[1])), void c.trigger('data', l);
if (u = /^#EXT-X-KEY:?(.*)$/.exec(e)) return l = {
type: 'tag',
tagType: 'key'
}, u[1] && (l.attributes = Ta(u[1]), l.attributes.IV && ('0x' === l.attributes.IV.substring(0, 2).toLowerCase() && (l.attributes.IV = l.attributes.IV.substring(2)), l.attributes.IV = l.attributes.IV.match(/.{8}/g), l.attributes.IV[0] = parseInt(l.attributes.IV[0], 16), l.attributes.IV[1] = parseInt(l.attributes.IV[1], 16), l.attributes.IV[2] = parseInt(l.attributes.IV[2], 16), l.attributes.IV[3] = parseInt(l.attributes.IV[3], 16), l.attributes.IV = new Uint32Array(l.attributes.IV))), void c.trigger('data', l);
if (u = /^#EXT-X-START:?(.*)$/.exec(e)) return l = {
type: 'tag',
tagType: 'start'
}, u[1] && (l.attributes = Ta(u[1]), l.attributes['TIME-OFFSET'] = parseFloat(l.attributes['TIME-OFFSET']), l.attributes.PRECISE = /YES/.test(l.attributes.PRECISE)), void c.trigger('data', l);
if (u = /^#EXT-X-CUE-OUT-CONT:?(.*)?$/.exec(e)) return l = {
type: 'tag',
tagType: 'cue-out-cont'
}, u[1] ? l.data = u[1] : l.data = '', void c.trigger('data', l);
if (u = /^#EXT-X-CUE-OUT:?(.*)?$/.exec(e)) return l = {
type: 'tag',
tagType: 'cue-out'
}, u[1] ? l.data = u[1] : l.data = '', void c.trigger('data', l);
if (u = /^#EXT-X-CUE-IN:?(.*)?$/.exec(e)) return l = {
type: 'tag',
tagType: 'cue-in'
}, u[1] ? l.data = u[1] : l.data = '', void c.trigger('data', l);
c.trigger('data', {type: 'tag', data: e.slice(4)});
}
}
} else c.trigger('data', {type: 'comment', text: e.slice(1)});
}) : this.trigger('data', {type: 'uri', uri: n}));
}, 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;
}(ya), Ea = function (t) {
function e () {
var e;
(e = t.call(this) || this).lineStream = new ka, e.parseStream = new Ca, e.lineStream.pipe(e.parseStream);
var r, a, s = Ve(e), o = [], u = {}, l = {AUDIO: {}, VIDEO: {}, 'CLOSED-CAPTIONS': {}, SUBTITLES: {}}, c = 0;
e.manifest = {allowCache: !0, discontinuityStarts: [], segments: []};
var d = 0;
return e.parseStream.on('data', function (t) {
var i, n;
({
tag: function () {
({
'allow-cache': function () {this.manifest.allowCache = t.allowed, 'allowed' in t || (this.trigger('info', {message: 'defaulting allowCache to YES'}), this.manifest.allowCache = !0);},
byterange: function () {
var e = {};
'length' in t && ((u.byterange = e).length = t.length, 'offset' in t || (t.offset = d)), 'offset' in t && ((u.byterange = e).offset = t.offset), d = 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 < t.duration && (u.duration = t.duration), 0 === t.duration && (u.duration = .01, this.trigger('info', {message: 'updating zero segment duration to a small value'})), this.manifest.segments = o;},
key: function () {
if (t.attributes) if ('NONE' !== t.attributes.METHOD) if (t.attributes.URI) {
if ('urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed' === t.attributes.KEYFORMAT) {
return -1 === ['SAMPLE-AES', 'SAMPLE-AES-CTR', 'SAMPLE-AES-CENC'].indexOf(t.attributes.METHOD) ? void this.trigger('warn', {message: 'invalid key method provided for Widevine'}) : ('SAMPLE-AES-CENC' === t.attributes.METHOD && this.trigger('warn', {message: 'SAMPLE-AES-CENC is deprecated, please use SAMPLE-AES-CTR instead'}), 'data:text/plain;base64,' !== t.attributes.URI.substring(0, 23) ? void this.trigger('warn', {message: 'invalid key URI provided for Widevine'}) : t.attributes.KEYID && '0x' === t.attributes.KEYID.substring(0, 2) ? void (this.manifest.contentProtection = {
'com.widevine.alpha': {
attributes: {
schemeIdUri: t.attributes.KEYFORMAT,
keyId: t.attributes.KEYID.substring(2)
}, pssh: Sa(t.attributes.URI.split(',')[1])
}
}) : void this.trigger('warn', {message: 'invalid key ID provided for Widevine'}));
}
t.attributes.METHOD || this.trigger('warn', {message: 'defaulting key method to AES-128'}), a = {
method: t.attributes.METHOD || 'AES-128',
uri: t.attributes.URI
}, 'undefined' != typeof t.attributes.IV && (a.iv = t.attributes.IV);
} else this.trigger('warn', {message: 'ignoring key declaration without URI'}); else a = null; else this.trigger('warn', {message: 'ignoring key declaration without attribute list'});
},
'media-sequence': function () {isFinite(t.number) ? this.manifest.mediaSequence = t.number : this.trigger('warn', {message: 'ignoring invalid media sequence: ' + t.number});},
'discontinuity-sequence': function () {isFinite(t.number) ? (this.manifest.discontinuitySequence = t.number, c = t.number) : this.trigger('warn', {message: 'ignoring invalid discontinuity sequence: ' + t.number});},
'playlist-type': function () {/VOD|EVENT/.test(t.playlistType) ? this.manifest.playlistType = t.playlistType : this.trigger('warn', {message: 'ignoring unknown playlist type: ' + t.playlist});},
map: function () {r = {}, t.uri && (r.uri = t.uri), t.byterange && (r.byterange = t.byterange);},
'stream-inf': function () {this.manifest.playlists = o, this.manifest.mediaGroups = this.manifest.mediaGroups || l, t.attributes ? (u.attributes || (u.attributes = {}), m(u.attributes, t.attributes)) : this.trigger('warn', {message: 'ignoring empty stream-inf attributes'});},
media: function () {
if (this.manifest.mediaGroups = this.manifest.mediaGroups || l, t.attributes && t.attributes.TYPE && t.attributes['GROUP-ID'] && t.attributes.NAME) {
var e = this.manifest.mediaGroups[t.attributes.TYPE];
e[t.attributes['GROUP-ID']] = e[t.attributes['GROUP-ID']] || {}, i = e[t.attributes['GROUP-ID']], (n = {default: /yes/i.test(t.attributes.DEFAULT)}).default ? n.autoselect = !0 : n.autoselect = /yes/i.test(t.attributes.AUTOSELECT), t.attributes.LANGUAGE && (n.language = t.attributes.LANGUAGE), t.attributes.URI && (n.uri = t.attributes.URI), t.attributes['INSTREAM-ID'] && (n.instreamId = t.attributes['INSTREAM-ID']), t.attributes.CHARACTERISTICS && (n.characteristics = t.attributes.CHARACTERISTICS), t.attributes.FORCED && (n.forced = /yes/i.test(t.attributes.FORCED)), i[t.attributes.NAME] = n;
} else this.trigger('warn', {message: 'ignoring incomplete or missing media group'});
},
discontinuity: function () {c += 1, u.discontinuity = !0, this.manifest.discontinuityStarts.push(o.length);},
'program-date-time': function () {'undefined' == typeof this.manifest.dateTimeString && (this.manifest.dateTimeString = t.dateTimeString, this.manifest.dateTimeObject = t.dateTimeObject), u.dateTimeString = t.dateTimeString, u.dateTimeObject = t.dateTimeObject;},
targetduration: function () {!isFinite(t.duration) || t.duration < 0 ? this.trigger('warn', {message: 'ignoring invalid target duration: ' + t.duration}) : this.manifest.targetDuration = t.duration;},
totalduration: function () {!isFinite(t.duration) || t.duration < 0 ? this.trigger('warn', {message: 'ignoring invalid total duration: ' + t.duration}) : this.manifest.totalDuration = t.duration;},
start: function () {
t.attributes && !isNaN(t.attributes['TIME-OFFSET']) ? this.manifest.start = {
timeOffset: t.attributes['TIME-OFFSET'],
precise: t.attributes.PRECISE
} : this.trigger('warn', {message: 'ignoring start declaration without appropriate attribute list'});
},
'cue-out': function () {u.cueOut = t.data;},
'cue-out-cont': function () {u.cueOutCont = t.data;},
'cue-in': function () {u.cueIn = t.data;}
}[t.tagType] || function () {}).call(s);
},
uri: function () {u.uri = t.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), a && (u.key = a), u.timeline = c, r && (u.map = r), u = {};},
comment: function () {},
custom: function () {t.segment ? (u.custom = u.custom || {}, u.custom[t.customType] = t.data) : (this.manifest.custom = this.manifest.custom || {}, this.manifest.custom[t.customType] = t.data);}
})[t.type].call(s);
}), e;
}
Ge(e, t);
var i = e.prototype;
return i.push = function (e) {this.lineStream.push(e);}, i.end = function () {this.lineStream.push('\n');}, i.addParser = function (e) {this.parseStream.addParser(e);}, i.addTagMapper = function (e) {this.parseStream.addTagMapper(e);}, e;
}(ya), wa = i(function (e, t) {
Object.defineProperty(t, '__esModule', {value: !0});
var i = /^(audio|video|application)\/(x-|vnd\.apple\.)?mpegurl/i, n = /^application\/dash\+xml/i;
t.simpleTypeFromSourceType = function (e) {return i.test(e) ? 'hls' : n.test(e) ? 'dash' : 'application/vnd.videojs.vhs+json' === e ? 'vhs-json' : null;};
});
/*! @name m3u8-parser @version 4.5.0 @license Apache-2.0 */
t(wa);
var Ia = wa.simpleTypeFromSourceType,
Aa = /[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]/,
xa = new RegExp('[\\-\\.0-9' + Aa.source.slice(1, -1) + '\\u00B7\\u0300-\\u036F\\u203F-\\u2040]'),
Pa = new RegExp('^' + Aa.source + xa.source + '*(?::' + Aa.source + xa.source + '*)?$'), La = 0, Oa = 1, Da = 2,
Ma = 3, Ra = 4, Na = 5, Ua = 6, Fa = 7;
function Ba () {}
function ja (e, t) {return t.lineNumber = e.lineNumber, t.columnNumber = e.columnNumber, t;}
function Va (e, t, i, n, r, a) {
for (var s, o = ++t, u = La; ;) {
var l = e.charAt(o);
switch (l) {
case'=':
if (u === Oa) s = e.slice(t, o), u = Ma; else {
if (u !== Da) throw new Error('attribute equal must after attrName');
u = Ma;
}
break;
case'\'':
case'"':
if (u === Ma || u === Oa) {
if (u === Oa && (a.warning('attribute value must after "="'), s = e.slice(t, o)), t = o + 1, !(0 < (o = e.indexOf(l, t)))) throw new Error('attribute value no end \'' + l + '\' match');
c = e.slice(t, o).replace(/&#?\w+;/g, r), i.add(s, c, t - 1), u = Na;
} else {
if (u != Ra) throw new Error('attribute value must after "="');
c = e.slice(t, o).replace(/&#?\w+;/g, r), i.add(s, c, t), a.warning('attribute "' + s + '" missed start quot(' + l + ')!!'), t = o + 1, u = Na;
}
break;
case'/':
switch (u) {
case La:
i.setTagName(e.slice(t, o));
case Na:
case Ua:
case Fa:
u = Fa, i.closed = !0;
case Ra:
case Oa:
case Da:
break;
default:
throw new Error('attribute invalid close char(\'/\')');
}
break;
case'':
return a.error('unexpected end of input'), u == La && i.setTagName(e.slice(t, o)), o;
case'>':
switch (u) {
case La:
i.setTagName(e.slice(t, o));
case Na:
case Ua:
case Fa:
break;
case Ra:
case Oa:
'/' === (c = e.slice(t, o)).slice(-1) && (i.closed = !0, c = c.slice(0, -1));
case Da:
u === Da && (c = s), u == Ra ? (a.warning('attribute "' + c + '" missed quot(")!!'), i.add(s, c.replace(/&#?\w+;/g, r), t)) : ('http://www.w3.org/1999/xhtml' === n[''] && c.match(/^(?:disabled|checked|selected)$/i) || a.warning('attribute "' + c + '" missed value!! "' + c + '" instead!!'), i.add(c, c, t));
break;
case Ma:
throw new Error('attribute value missed!!');
}
return o;
case'':
l = ' ';
default:
if (l <= ' ') switch (u) {
case La:
i.setTagName(e.slice(t, o)), u = Ua;
break;
case Oa:
s = e.slice(t, o), u = Da;
break;
case Ra:
var c = e.slice(t, o).replace(/&#?\w+;/g, r);
a.warning('attribute "' + c + '" missed quot(")!!'), i.add(s, c, t);
case Na:
u = Ua;
} else switch (u) {
case Da:
i.tagName;
'http://www.w3.org/1999/xhtml' === n[''] && s.match(/^(?:disabled|checked|selected)$/i) || a.warning('attribute "' + s + '" missed value!! "' + s + '" instead2!!'), i.add(s, s, t), t = o, u = Oa;
break;
case Na:
a.warning('attribute space is required"' + s + '"!!');
case Ua:
u = Oa, t = o;
break;
case Ma:
u = Ra, t = o;
break;
case Fa:
throw new Error('elements closed character \'/\' and \'>\' must be connected to');
}
}
o++;
}
}
function qa (e, t, i) {
for (var n = e.tagName, r = null, a = e.length; a--;) {
var s = e[a], o = s.qName, u = s.value;
if (0 < (h = o.indexOf(':'))) var l = s.prefix = o.slice(0, h), c = o.slice(h + 1),
d = 'xmlns' === l && c; else l = null, d = 'xmlns' === (c = o) && '';
s.localName = c, !1 !== d && (null == r && (r = {}, za(i, i = {})), i[d] = r[d] = u, s.uri = 'http://www.w3.org/2000/xmlns/', t.startPrefixMapping(d, u));
}
for (a = e.length; a--;) {(l = (s = e[a]).prefix) && ('xml' === l && (s.uri = 'http://www.w3.org/XML/1998/namespace'), 'xmlns' !== l && (s.uri = i[l || '']));}
var h;
c = 0 < (h = n.indexOf(':')) ? (l = e.prefix = n.slice(0, h), e.localName = n.slice(h + 1)) : (l = null, e.localName = n);
var p = e.uri = i[l || ''];
if (t.startElement(p, c, n, e), !e.closed) return e.currentNSMap = i, e.localNSMap = r, !0;
if (t.endElement(p, c, n), r) for (l in r) t.endPrefixMapping(l);
}
function Ha (e, t, i, n, r) {
if (/^(?:script|textarea)$/i.test(i)) {
var a = e.indexOf('</' + i + '>', t), s = e.substring(t + 1, a);
if (/[&<]/.test(s)) return /^script$/i.test(i) || (s = s.replace(/&#?\w+;/g, n)), r.characters(s, 0, s.length), a;
}
return t + 1;
}
function Wa (e, t, i, n) {
var r = n[i];
return null == r && ((r = e.lastIndexOf('</' + i + '>')) < t && (r = e.lastIndexOf('</' + i)), n[i] = r), r < t;
}
function za (e, t) {for (var i in e) t[i] = e[i];}
function Ga (e, t, i, n) {
switch (e.charAt(t + 2)) {
case'-':
return '-' !== e.charAt(t + 3) ? -1 : t < (r = e.indexOf('--\x3e', t + 4)) ? (i.comment(e, t + 4, r - t - 4), r + 3) : (n.error('Unclosed comment'), -1);
default:
if ('CDATA[' == e.substr(t + 3, 6)) {
var 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), s = a.length;
if (1 < s && /!doctype/i.test(a[0][0])) {
var o = a[1][0], u = 3 < s && /^public$/i.test(a[2][0]) && a[3][0], l = 4 < s && a[4][0], c = a[s - 1];
return i.startDTD(o, u && u.replace(/^(['"])(.*?)\1$/, '$2'), l && l.replace(/^(['"])(.*?)\1$/, '$2')), i.endDTD(), c.index + c[0].length;
}
}
return -1;
}
function Xa (e, t, i) {
var n = e.indexOf('?>', t);
if (n) {
var r = e.substring(t, n).match(/^<\?(\S*)\s*([\s\S]*?)\s*$/);
if (r) {
r[0].length;
return i.processingInstruction(r[1], r[2]), n + 2;
}
return -1;
}
return -1;
}
function Ka (e) {}
function Ya (e, t) {return e.__proto__ = t, e;}
Ba.prototype = {
parse: function (e, t, i) {
var n = this.domBuilder;
n.startDocument(), za(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) ? function (e) {
if (65535 < e) {
var t = 55296 + ((e -= 65536) >> 10), i = 56320 + (1023 & e);
return String.fromCharCode(t, i);
}
return String.fromCharCode(e);
}(parseInt(t.substr(1).replace('x', '0x'))) : (a.error('entity not found:' + e), e);
}
function t (e) {
if (f < e) {
var 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 = i.indexOf('<', f);
if (m < 0) {
if (!i.substr(f).match(/^\s*$/)) {
var g = r.doc, v = g.createTextNode(i.substr(f));
g.appendChild(v), r.currentElement = v;
}
return;
}
switch (f < m && t(m), i.charAt(m + 1)) {
case'/':
var y = i.indexOf('>', m + 3), _ = i.substring(m + 2, y), b = h.pop();
y < 0 ? (_ = i.substring(m + 2).replace(/[\s<].*/, ''), a.error('end tag name: ' + _ + ' is not complete:' + b.tagName), y = m + 1 + _.length) : _.match(/\s</) && (_ = _.replace(/[\s<].*/, ''), a.error('end tag name: ' + _ + ' maybe not complete'), y = m + 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 k in T) r.endPrefixMapping(k);
S || a.fatalError('end tag name: ' + _ + ' is not match the current start tagName:' + b.tagName);
} else h.push(b);
y++;
break;
case'?':
d && o(m), y = Xa(i, m, r);
break;
case'!':
d && o(m), y = Ga(i, m, r, a);
break;
default:
d && o(m);
var C = new Ka, E = h[h.length - 1].currentNSMap, w = (y = Va(i, m, C, E, s, a), C.length);
if (!C.closed && Wa(i, y, C.tagName, p) && (C.closed = !0, n.nbsp || a.warning('unclosed xml attribute')), d && w) {
for (var I = ja(d, {}), A = 0; A < w; A++) {
var x = C[A];
o(x.offset), x.locator = ja(d, {});
}
r.locator = I, qa(C, r, E) && h.push(C), r.locator = d;
} else qa(C, r, E) && h.push(C);
'http://www.w3.org/1999/xhtml' !== C.uri || C.closed ? y++ : y = Ha(i, y, C.tagName, s, r);
}
} catch (e) {a.error('element parse error: ' + e), y = -1;}
f < y ? f = y : t(Math.max(m, f) + 1);
}
}(e, t, i, n, this.errorHandler), n.endDocument();
}
}, Ka.prototype = {
setTagName: function (e) {
if (!Pa.test(e)) throw new Error('invalid tagName:' + e);
this.tagName = e;
},
add: function (e, t, i) {
if (!Pa.test(e)) throw new Error('invalid attribute:' + e);
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;}
}, Ya({}, Ya.prototype) instanceof Ya || (Ya = function (e, t) {
function i () {}
for (t in i.prototype = t, i = new i, e) i[t] = e[t];
return i;
});
var $a = {XMLReader: Ba};
function Qa (e, t) {for (var i in e) t[i] = e[i];}
function Ja (e, t) {
var i = e.prototype;
if (Object.create) {
var n = Object.create(t.prototype);
i.__proto__ = n;
}
if (!(i instanceof t)) {
var r = function () {};
r.prototype = t.prototype, Qa(i, r = new r), e.prototype = i = r;
}
i.constructor != e && (i.constructor = e);
}
var Za = 'http://www.w3.org/1999/xhtml', es = {}, ts = es.ELEMENT_NODE = 1, is = es.ATTRIBUTE_NODE = 2,
ns = es.TEXT_NODE = 3, rs = es.CDATA_SECTION_NODE = 4, as = es.ENTITY_REFERENCE_NODE = 5, ss = es.ENTITY_NODE = 6,
os = es.PROCESSING_INSTRUCTION_NODE = 7, us = es.COMMENT_NODE = 8, ls = es.DOCUMENT_NODE = 9,
cs = es.DOCUMENT_TYPE_NODE = 10, ds = es.DOCUMENT_FRAGMENT_NODE = 11, hs = es.NOTATION_NODE = 12, ps = {}, fs = {},
ms = (ps.INDEX_SIZE_ERR = (fs[1] = 'Index size error', 1), ps.DOMSTRING_SIZE_ERR = (fs[2] = 'DOMString size error', 2), ps.HIERARCHY_REQUEST_ERR = (fs[3] = 'Hierarchy request error', 3)),
gs = (ps.WRONG_DOCUMENT_ERR = (fs[4] = 'Wrong document', 4), ps.INVALID_CHARACTER_ERR = (fs[5] = 'Invalid character', 5), ps.NO_DATA_ALLOWED_ERR = (fs[6] = 'No data allowed', 6), ps.NO_MODIFICATION_ALLOWED_ERR = (fs[7] = 'No modification allowed', 7), ps.NOT_FOUND_ERR = (fs[8] = 'Not found', 8)),
vs = (ps.NOT_SUPPORTED_ERR = (fs[9] = 'Not supported', 9), ps.INUSE_ATTRIBUTE_ERR = (fs[10] = 'Attribute in use', 10));
ps.INVALID_STATE_ERR = (fs[11] = 'Invalid state', 11), ps.SYNTAX_ERR = (fs[12] = 'Syntax error', 12), ps.INVALID_MODIFICATION_ERR = (fs[13] = 'Invalid modification', 13), ps.NAMESPACE_ERR = (fs[14] = 'Invalid namespace', 14), ps.INVALID_ACCESS_ERR = (fs[15] = 'Invalid access', 15);
function ys (e, t) {
if (t instanceof Error) var i = t; else i = this, Error.call(this, fs[e]), this.message = fs[e], Error.captureStackTrace && Error.captureStackTrace(this, ys);
return i.code = e, t && (this.message = this.message + ': ' + t), i;
}
function _s () {}
function bs (e, t) {this._node = e, this._refresh = t, Ts(this);}
function Ts (e) {
var t = e._node._inc || e._node.ownerDocument._inc;
if (e._inc != t) {
var i = e._refresh(e._node);
Qs(e, 'length', i.length), Qa(i, e), e._inc = t;
}
}
function Ss () {}
function ks (e, t) {for (var i = e.length; i--;) if (e[i] === t) return i;}
function Cs (e, t, i, n) {
if (n ? t[ks(t, n)] = i : t[t.length++] = i, e) {
var r = (i.ownerElement = e).ownerDocument;
r && (n && Ls(r, e, n), function (e, t, i) {e && e._inc++, 'http://www.w3.org/2000/xmlns/' == i.namespaceURI && (t._nsMap[i.prefix ? i.localName : ''] = i.value);}(r, e, i));
}
}
function Es (e, t, i) {
var n = ks(t, i);
if (!(0 <= n)) throw ys(gs, new Error(e.tagName + '@' + i));
for (var r = t.length - 1; n < r;) t[n] = t[++n];
if (t.length = r, e) {
var a = e.ownerDocument;
a && (Ls(a, e, i), i.ownerElement = null);
}
}
function ws (e) {if (this._features = {}, e) for (var t in e) this._features = e[t];}
function Is () {}
function As (e) {return ('<' == e ? '<' : '>' == e && '>') || '&' == e && '&' || '"' == e && '"' || '&#' + e.charCodeAt() + ';';}
function xs (e, t) {
if (t(e)) return !0;
if (e = e.firstChild) do {if (xs(e, t)) return !0;} while (e = e.nextSibling);
}
function Ps () {}
function Ls (e, t, i) {e && e._inc++, 'http://www.w3.org/2000/xmlns/' == i.namespaceURI && delete t._nsMap[i.prefix ? i.localName : ''];}
function Os (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 Ds (e, t) {
var i = t.previousSibling, n = t.nextSibling;
return i ? i.nextSibling = n : e.firstChild = n, n ? n.previousSibling = i : e.lastChild = i, Os(e.ownerDocument, e), t;
}
function Ms (e, t, i) {
var n = t.parentNode;
if (n && n.removeChild(t), t.nodeType === ds) {
var r = t.firstChild;
if (null == r) return t;
var a = t.lastChild;
} else r = a = t;
var s = i ? i.previousSibling : e.lastChild;
for (r.previousSibling = s, a.nextSibling = i, s ? s.nextSibling = r : e.firstChild = r, null == i ? e.lastChild = a : i.previousSibling = a; r.parentNode = e, r !== a && (r = r.nextSibling);) ;
return Os(e.ownerDocument || e, e), t.nodeType == ds && (t.firstChild = t.lastChild = null), t;
}
function Rs () {this._nsMap = {};}
function Ns () {}
function Us () {}
function Fs () {}
function Bs () {}
function js () {}
function Vs () {}
function qs () {}
function Hs () {}
function Ws () {}
function zs () {}
function Gs () {}
function Xs () {}
function Ks (e, t) {
var i = [], n = 9 == this.nodeType ? this.documentElement : this, r = n.prefix, a = n.namespaceURI;
if (a && null == r && null == (r = n.lookupPrefix(a))) var s = [{namespace: a, prefix: null}];
return $s(this, i, e, t, s), i.join('');
}
function Ys (e, t, i) {
var n = e.prefix || '', r = e.namespaceURI;
if (!n && !r) return !1;
if ('xml' === n && 'http://www.w3.org/XML/1998/namespace' === r || 'http://www.w3.org/2000/xmlns/' == r) return !1;
for (var a = i.length; a--;) {
var s = i[a];
if (s.prefix == n) return s.namespace != r;
}
return !0;
}
function $s (e, t, i, n, r) {
if (n) {
if (!(e = n(e))) return;
if ('string' == typeof e) return void t.push(e);
}
switch (e.nodeType) {
case ts:
r = r || [];
var a = e.attributes, s = a.length, o = e.firstChild, u = e.tagName;
i = Za === e.namespaceURI || i, t.push('<', u);
for (var l = 0; l < s; l++) {
'xmlns' == (c = a.item(l)).prefix ? r.push({
prefix: c.localName,
namespace: c.value
}) : 'xmlns' == c.nodeName && r.push({prefix: '', namespace: c.value});
}
for (l = 0; l < s; l++) {
var c;
if (Ys(c = a.item(l), 0, r)) {
var d = c.prefix || '', h = c.namespaceURI, p = d ? ' xmlns:' + d : ' xmlns';
t.push(p, '="', h, '"'), r.push({prefix: d, namespace: h});
}
$s(c, t, i, n, r);
}
if (Ys(e, 0, r)) {
d = e.prefix || '', h = e.namespaceURI, p = d ? ' xmlns:' + d : ' xmlns';
t.push(p, '="', h, '"'), r.push({prefix: d, namespace: h});
}
if (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) : $s(o, t, i, n, r), o = o.nextSibling; else for (; o;) $s(o, t, i, n, r), o = o.nextSibling;
t.push('</', u, '>');
} else t.push('/>');
return;
case ls:
case ds:
for (o = e.firstChild; o;) $s(o, t, i, n, r), o = o.nextSibling;
return;
case is:
return t.push(' ', e.name, '="', e.value.replace(/[<&"]/g, As), '"');
case ns:
return t.push(e.data.replace(/[<&]/g, As));
case rs:
return t.push('<![CDATA[', e.data, ']]>');
case us:
return t.push('\x3c!--', e.data, '--\x3e');
case cs:
var f = e.publicId, m = e.systemId;
if (t.push('<!DOCTYPE ', e.name), f) t.push(' PUBLIC "', f), m && '.' != m && t.push('" "', m), t.push('">'); else if (m && '.' != m) t.push(' SYSTEM "', m, '">'); else {
var g = e.internalSubset;
g && t.push(' [', g, ']'), t.push('>');
}
return;
case os:
return t.push('<?', e.target, ' ', e.data, '?>');
case as:
return t.push('&', e.nodeName, ';');
default:
t.push('??', e.nodeName);
}
}
function Qs (e, t, i) {e[t] = i;}
ys.prototype = Error.prototype, Qa(ps, ys), _s.prototype = {
length: 0,
item: function (e) {return this[e] || null;},
toString: function (e, t) {
for (var i = [], n = 0; n < this.length; n++) $s(this[n], i, e, t);
return i.join('');
}
}, bs.prototype.item = function (e) {return Ts(this), this[e];}, Ja(bs, _s), Ss.prototype = {
length: 0,
item: _s.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 ys(vs);
var i = this.getNamedItem(e.nodeName);
return Cs(this._ownerElement, this, e, i), i;
},
setNamedItemNS: function (e) {
var t, i = e.ownerElement;
if (i && i != this._ownerElement) throw new ys(vs);
return t = this.getNamedItemNS(e.namespaceURI, e.localName), Cs(this._ownerElement, this, e, t), t;
},
removeNamedItem: function (e) {
var t = this.getNamedItem(e);
return Es(this._ownerElement, this, t), t;
},
removeNamedItemNS: function (e, t) {
var i = this.getNamedItemNS(e, t);
return Es(this._ownerElement, this, i), i;
},
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;
}
}, ws.prototype = {
hasFeature: function (e, t) {
var i = this._features[e.toLowerCase()];
return !(!i || t && !(t in i));
}, createDocument: function (e, t, i) {
var n = new Ps;
if (n.implementation = this, n.childNodes = new _s, (n.doctype = i) && n.appendChild(i), t) {
var r = n.createElementNS(e, t);
n.appendChild(r);
}
return n;
}, createDocumentType: function (e, t, i) {
var n = new Vs;
return n.name = e, n.nodeName = e, n.publicId = t, n.systemId = i, n;
}
}, Is.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 Ms(this, e, t);},
replaceChild: function (e, t) {this.insertBefore(e, t), t && this.removeChild(t);},
removeChild: function (e) {return Ds(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 _s);
r.ownerDocument = t;
switch (r.nodeType) {
case ts:
var o = i.attributes, u = r.attributes = new Ss, l = o.length;
u._ownerElement = r;
for (var c = 0; c < l; c++) r.setAttributeNode(e(t, o.item(c), !0));
break;
case is:
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 == ns && e.nodeType == ns ? (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 == is ? 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 == is ? t.ownerDocument : t.parentNode;
}
return null;
},
isDefaultNamespace: function (e) {return null == this.lookupPrefix(e);}
}, Qa(es, Is), Qa(es, Is.prototype), Ps.prototype = {
nodeName: '#document',
nodeType: ls,
doctype: null,
documentElement: null,
_inc: 1,
insertBefore: function (e, t) {
if (e.nodeType != ds) return null == this.documentElement && e.nodeType == ts && (this.documentElement = e), Ms(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), Ds(this, e);},
importNode: function (e, t) {
return function e (t, i, n) {
var r;
switch (i.nodeType) {
case ts:
(r = i.cloneNode(!1)).ownerDocument = t;
case ds:
break;
case is:
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 xs(this.documentElement, function (e) {if (e.nodeType == ts && e.getAttribute('id') == t) return i = e, !0;}), i;
},
createElement: function (e) {
var t = new Rs;
return t.ownerDocument = this, t.nodeName = e, t.tagName = e, t.childNodes = new _s, (t.attributes = new Ss)._ownerElement = t;
},
createDocumentFragment: function () {
var e = new zs;
return e.ownerDocument = this, e.childNodes = new _s, e;
},
createTextNode: function (e) {
var t = new Fs;
return t.ownerDocument = this, t.appendData(e), t;
},
createComment: function (e) {
var t = new Bs;
return t.ownerDocument = this, t.appendData(e), t;
},
createCDATASection: function (e) {
var t = new js;
return t.ownerDocument = this, t.appendData(e), t;
},
createProcessingInstruction: function (e, t) {
var i = new Gs;
return i.ownerDocument = this, i.tagName = i.target = e, i.nodeValue = i.data = t, i;
},
createAttribute: function (e) {
var t = new Ns;
return t.ownerDocument = this, t.name = e, t.nodeName = e, t.localName = e, t.specified = !0, t;
},
createEntityReference: function (e) {
var t = new Ws;
return t.ownerDocument = this, t.nodeName = e, t;
},
createElementNS: function (e, t) {
var i = new Rs, n = t.split(':'), r = i.attributes = new Ss;
return i.childNodes = new _s, 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 Ns, 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;
}
}, Ja(Ps, Is), Ps.prototype.getElementsByTagName = (Rs.prototype = {
nodeType: ts,
hasAttribute: function (e) {return null != this.getAttributeNode(e);},
getAttribute: function (e) {
var t = this.getAttributeNode(e);
return t && t.value || '';
},
getAttributeNode: function (e) {return this.attributes.getNamedItem(e);},
setAttribute: function (e, t) {
var i = this.ownerDocument.createAttribute(e);
i.value = i.nodeValue = '' + t, this.setAttributeNode(i);
},
removeAttribute: function (e) {
var t = this.getAttributeNode(e);
t && this.removeAttributeNode(t);
},
appendChild: function (e) {
return e.nodeType === ds ? this.insertBefore(e, null) : function (e, t) {
var i = t.parentNode;
if (i) {
var n = e.lastChild;
i.removeChild(t);
n = e.lastChild;
}
return n = e.lastChild, t.parentNode = e, t.previousSibling = n, t.nextSibling = null, n ? n.nextSibling = t : e.firstChild = t, e.lastChild = t, Os(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) {
var i = this.getAttributeNodeNS(e, t);
i && this.removeAttributeNode(i);
},
hasAttributeNS: function (e, t) {return null != this.getAttributeNodeNS(e, t);},
getAttributeNS: function (e, t) {
var i = this.getAttributeNodeNS(e, t);
return i && i.value || '';
},
setAttributeNS: function (e, t, i) {
var n = this.ownerDocument.createAttributeNS(e, t);
n.value = n.nodeValue = '' + i, this.setAttributeNode(n);
},
getAttributeNodeNS: function (e, t) {return this.attributes.getNamedItemNS(e, t);},
getElementsByTagName: function (n) {
return new bs(this, function (t) {
var i = [];
return xs(t, function (e) {e === t || e.nodeType != ts || '*' !== n && e.tagName != n || i.push(e);}), i;
});
},
getElementsByTagNameNS: function (n, r) {
return new bs(this, function (t) {
var i = [];
return xs(t, function (e) {e === t || e.nodeType !== ts || '*' !== n && e.namespaceURI !== n || '*' !== r && e.localName != r || i.push(e);}), i;
});
}
}).getElementsByTagName, Ps.prototype.getElementsByTagNameNS = Rs.prototype.getElementsByTagNameNS, Ja(Rs, Is), Ns.prototype.nodeType = is, Ja(Ns, Is), Us.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(fs[ms]);},
deleteData: function (e, t) {this.replaceData(e, t, '');},
replaceData: function (e, t, i) {i = this.data.substring(0, e) + i + this.data.substring(e + t), this.nodeValue = this.data = i, this.length = i.length;}
}, Ja(Us, Is), Fs.prototype = {
nodeName: '#text',
nodeType: ns,
splitText: function (e) {
var t = this.data, i = t.substring(e);
t = t.substring(0, e), this.data = this.nodeValue = t, this.length = t.length;
var n = this.ownerDocument.createTextNode(i);
return this.parentNode && this.parentNode.insertBefore(n, this.nextSibling), n;
}
}, Ja(Fs, Us), Bs.prototype = {
nodeName: '#comment',
nodeType: us
}, Ja(Bs, Us), js.prototype = {
nodeName: '#cdata-section',
nodeType: rs
}, Ja(js, Us), Vs.prototype.nodeType = cs, Ja(Vs, Is), qs.prototype.nodeType = hs, Ja(qs, Is), Hs.prototype.nodeType = ss, Ja(Hs, Is), Ws.prototype.nodeType = as, Ja(Ws, Is), zs.prototype.nodeName = '#document-fragment', zs.prototype.nodeType = ds, Ja(zs, Is), Gs.prototype.nodeType = os, Ja(Gs, Is), Xs.prototype.serializeToString = function (e, t, i) {return Ks.call(e, t, i);}, Is.prototype.toString = Ks;
try {
if (Object.defineProperty) {
Object.defineProperty(bs.prototype, 'length', {get: function () {return Ts(this), this.$$length;}}), Object.defineProperty(Is.prototype, 'textContent', {
get: function () {
return function e (t) {
switch (t.nodeType) {
case ts:
case ds:
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;
}
}(this);
}, set: function (e) {
switch (this.nodeType) {
case ts:
case ds:
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;
}
}
}), Qs = function (e, t, i) {e['$$' + t] = i;};
}
} catch (e) {}
function Js (e) {return !!e && 'object' == typeof e;}
function Zs () {
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.keys(i).forEach(function (e) {Array.isArray(t[e]) && Array.isArray(i[e]) ? t[e] = t[e].concat(i[e]) : Js(t[e]) && Js(i[e]) ? t[e] = Zs(t[e], i[e]) : t[e] = i[e];}), t;}, {});
}
function eo (e) {return e.reduce(function (e, t) {return e.concat(t);}, []);}
function to (e) {
if (!e.length) return [];
for (var t = [], i = 0; i < e.length; i++) t.push(e[i]);
return t;
}
function io (e) {
var t = e.baseUrl, i = void 0 === t ? '' : t, n = e.source, r = void 0 === n ? '' : n, a = e.range,
s = void 0 === a ? '' : a, o = e.indexRange, u = void 0 === o ? '' : o, l = {uri: r, resolvedUri: va(i || '', r)};
if (s || u) {
var c = (s || u).split('-'), d = parseInt(c[0], 10), h = parseInt(c[1], 10);
l.byterange = {length: h - d + 1, offset: d};
}
return l;
}
function no (e) {
var t = e.type, i = void 0 === t ? 'static' : t, n = e.duration, r = e.timescale, a = void 0 === r ? 1 : r,
s = e.sourceDuration, o = No[i](e), u = function (e, t) {
for (var i = [], n = e; n < t; n++) i.push(n);
return i;
}(o.start, o.end).map(function (o) {
return function (e, t) {
var i = o.duration, n = o.timescale, r = void 0 === n ? 1 : n, a = o.periodIndex, s = o.startNumber;
return {number: (void 0 === s ? 1 : s) + e, duration: i / r, timeline: a, time: t * i};
};
}(e));
if ('static' === i) {
var l = u.length - 1;
u[l].duration = s - n / a * l;
}
return u;
}
function ro (e) {
var t = e.baseUrl, i = e.initialization, n = void 0 === i ? {} : i, r = e.sourceDuration, a = e.indexRange,
s = void 0 === a ? '' : a, o = e.duration;
if (!t) throw new Error(Do);
var u = io({baseUrl: t, source: n.sourceURL, range: n.range}), l = io({baseUrl: t, source: t, indexRange: s});
if (l.map = u, o) {
var c = no(e);
c.length && (l.duration = c[0].duration, l.timeline = c[0].timeline);
} else r && (l.duration = r, l.timeline = 0);
return l.number = 0, [l];
}
function ao (e, t, i) {
for (var n = e.sidx.map ? e.sidx.map : null, r = e.sidx.duration, a = e.timeline || 0, s = e.sidx.byterange, o = s.offset + s.length, u = t.timescale, l = t.references.filter(function (e) {return 1 !== e.referenceType;}), c = [], d = o + t.firstOffset, h = 0; h < l.length; h++) {
var p = t.references[h], f = p.referencedSize, m = p.subsegmentDuration, g = ro({
baseUrl: i,
timescale: u,
timeline: a,
periodIndex: a,
duration: m,
sourceDuration: r,
indexRange: d + '-' + (d + f - 1)
})[0];
n && (g.map = n), c.push(g), d += f;
}
return e.segments = c, e;
}
function so (e) {
return function (t) {return Object.keys(t).map(function (e) {return t[e];});}(e.reduce(function (e, t) {
var i, n = t.attributes.id + (t.attributes.lang || '');
e[n] ? (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;
return e;
}, {})).map(function (e) {return e.discontinuityStarts = function (e, n) {return e.reduce(function (e, t, i) {return t[n] && e.push(i), e;}, []);}(e.segments, 'discontinuity'), e;});
}
function oo (e, t) {
if (void 0 === t && (t = {}), !Object.keys(t).length) return e;
for (var i in e) {
var n = e[i];
if (n.sidx) {
var r = n.sidx.uri + '-' + (s = n.sidx.byterange, void 0, o = s.offset + s.length - 1, s.offset + '-' + o),
a = t[r] && t[r].sidx;
n.sidx && a && ao(n, a, n.sidx.resolvedUri);
}
}
var s, o;
return e;
}
function uo (e) {
var t, i = e.attributes, n = e.segments, r = e.sidx, a = {
attributes: (t = {
NAME: i.id,
AUDIO: 'audio',
SUBTITLES: 'subs',
RESOLUTION: {width: i.width, height: i.height},
CODECS: i.codecs,
BANDWIDTH: i.bandwidth
}, t['PROGRAM-ID'] = 1, t),
uri: '',
endList: 'static' === (i.type || 'static'),
timeline: i.periodIndex,
resolvedUri: '',
targetDuration: i.duration,
segments: n,
mediaSequence: n.length ? n[0].number : 1
};
return i.contentProtection && (a.contentProtection = i.contentProtection), r && (a.sidx = r), a;
}
function lo (e, t, i) {
var n;
if (void 0 === i && (i = {}), !e.length) return {};
var r = e[0].attributes, a = r.sourceDuration, s = r.type, o = void 0 === s ? 'static' : s,
u = r.suggestedPresentationDelay, l = r.minimumUpdatePeriod, c = so(e.filter(function (e) {
var t = e.attributes;
return 'video/mp4' === t.mimeType || 'video' === t.contentType;
})).map(uo), d = so(e.filter(function (e) {
var t = e.attributes;
return 'audio/mp4' === t.mimeType || 'audio' === t.contentType;
})), h = e.filter(function (e) {
var t = e.attributes;
return 'text/vtt' === t.mimeType || 'text' === t.contentType;
}), p = {
allowCache: !0,
discontinuityStarts: [],
segments: [],
endList: !0,
mediaGroups: (n = {AUDIO: {}, VIDEO: {}}, n['CLOSED-CAPTIONS'] = {}, n.SUBTITLES = {}, n),
uri: '',
duration: a,
playlists: oo(c, i)
};
return 0 <= l && (p.minimumUpdatePeriod = 1e3 * l), t && (p.locations = t), 'dynamic' === o && (p.suggestedPresentationDelay = u), d.length && (p.mediaGroups.AUDIO.audio = function (e, s) {
var o;
void 0 === s && (s = {});
var t = e.reduce(function (e, t) {
var i = t.attributes.role && t.attributes.role.value || '', n = t.attributes.lang || '', r = 'main';
if (n) {
var a = i ? ' (' + i + ')' : '';
r = t.attributes.lang + a;
}
return e[r] && e[r].playlists[0].attributes.BANDWIDTH > t.attributes.bandwidth || (e[r] = {
language: n,
autoselect: !0,
default: 'main' === i,
playlists: oo([function (e) {
var t, i = e.attributes, n = e.segments, r = e.sidx, a = {
attributes: (t = {NAME: i.id, BANDWIDTH: i.bandwidth, CODECS: i.codecs}, t['PROGRAM-ID'] = 1, t),
uri: '',
endList: 'static' === (i.type || 'static'),
timeline: i.periodIndex,
resolvedUri: '',
targetDuration: i.duration,
segments: n,
mediaSequence: n.length ? n[0].number : 1
};
return i.contentProtection && (a.contentProtection = i.contentProtection), r && (a.sidx = r), a;
}(t)], s),
uri: ''
}, 'undefined' == typeof o && 'main' === i && ((o = t).default = !0)), e;
}, {});
o || (t[Object.keys(t)[0]].default = !0);
return t;
}(d, i)), h.length && (p.mediaGroups.SUBTITLES.subs = function (e, n) {
return void 0 === n && (n = {}), e.reduce(function (e, t) {
var i = t.attributes.lang || 'text';
return e[i] || (e[i] = {
language: i,
default: !1,
autoselect: !1,
playlists: oo([function (e) {
var t, i = e.attributes, n = e.segments;
'undefined' == typeof n && (n = [{
uri: i.baseUrl,
timeline: i.periodIndex,
resolvedUri: i.baseUrl || '',
duration: i.sourceDuration,
number: 0
}], i.duration = i.sourceDuration);
var r = ((t = {NAME: i.id, BANDWIDTH: i.bandwidth})['PROGRAM-ID'] = 1, t);
return i.codecs && (r.CODECS = i.codecs), {
attributes: r,
uri: '',
endList: 'static' === (i.type || 'static'),
timeline: i.periodIndex,
resolvedUri: i.baseUrl || '',
targetDuration: i.duration,
segments: n,
mediaSequence: n.length ? n[0].number : 1
};
}(t)], n),
uri: ''
}), e;
}, {});
}(h, i)), p;
}
function co (e, t) {
for (var i, n, r, a, s, o, u, l, c, d, h, p, f = e.type, m = void 0 === f ? 'static' : f, g = e.minimumUpdatePeriod, v = void 0 === g ? 0 : g, y = e.media, _ = void 0 === y ? '' : y, b = e.sourceDuration, T = e.timescale, S = void 0 === T ? 1 : T, k = e.startNumber, C = void 0 === k ? 1 : k, E = e.periodIndex, w = [], I = -1, A = 0; A < t.length; A++) {
var x = t[A], P = x.d, L = x.r || 0, O = x.t || 0;
I < 0 && (I = O), O && I < O && (I = O);
var D = void 0;
if (L < 0) {
var M = A + 1;
D = M === t.length ? 'dynamic' === m && 0 < v && 0 < _.indexOf('$Number$') ? (n = I, r = P, void 0, a = (i = e).NOW, s = i.clientOffset, o = i.availabilityStartTime, u = i.timescale, l = void 0 === u ? 1 : u, c = i.start, d = void 0 === c ? 0 : c, h = i.minimumUpdatePeriod, p = (a + s) / 1e3 + (void 0 === h ? 0 : h) - (o + d), Math.ceil((p * l - n) / r)) : (b * S - I) / P : (t[M].t - I) / P;
} else D = L + 1;
for (var R = C + w.length + D, N = C + w.length; N < R;) w.push({
number: N,
duration: P / S,
time: I,
timeline: E
}), I += P, N++;
}
return w;
}
function ho (e, t) {
return e.replace(Uo, function (a) {
return function (e, t, i, n) {
if ('$$' === e) return '$';
if ('undefined' == typeof a[t]) return e;
var r = '' + a[t];
return 'RepresentationID' === t ? r : (n = i ? parseInt(n, 10) : 1) <= r.length ? r : new Array(n - r.length + 1).join('0') + r;
};
}(t));
}
function po (i, e) {
var n = {RepresentationID: i.id, Bandwidth: i.bandwidth || 0}, t = i.initialization,
r = void 0 === t ? {sourceURL: '', range: ''} : t,
a = io({baseUrl: i.baseUrl, source: ho(r.sourceURL, n), range: r.range});
return function (e, t) {
return e.duration || t ? e.duration ? no(e) : co(e, t) : [{
number: e.startNumber || 1,
duration: e.sourceDuration,
time: 0,
timeline: e.periodIndex
}];
}(i, e).map(function (e) {
n.Number = e.number, n.Time = e.time;
var t = ho(i.media || '', n);
return {
uri: t,
timeline: e.timeline,
duration: e.duration,
resolvedUri: va(i.baseUrl || '', t),
map: a,
number: e.number
};
});
}
function fo (t, e) {
var i = t.duration, n = t.segmentUrls, r = void 0 === n ? [] : n;
if (!i && !e || i && e) throw new Error(Mo);
var a, s = r.map(function (e) {
return function (e, t) {
var i = e.baseUrl, n = e.initialization, r = void 0 === n ? {} : n,
a = io({baseUrl: i, source: r.sourceURL, range: r.range}),
s = io({baseUrl: i, source: t.media, range: t.mediaRange});
return s.map = a, s;
}(t, e);
});
return i && (a = no(t)), e && (a = co(t, e)), a.map(function (e, t) {
if (s[t]) {
var i = s[t];
return i.timeline = e.timeline, i.duration = e.duration, i.number = e.number, i;
}
}).filter(function (e) {return e;});
}
function mo (e) {
var t, i, n = e.attributes, r = e.segmentInfo;
r.template ? (i = po, t = Zs(n, r.template)) : r.base ? (i = ro, t = Zs(n, r.base)) : r.list && (i = fo, t = Zs(n, r.list));
var a = {attributes: n};
if (!i) return a;
var s = i(t, r.timeline);
if (t.duration) {
var o = t, u = o.duration, l = o.timescale, c = void 0 === l ? 1 : l;
t.duration = u / c;
} else s.length ? t.duration = s.reduce(function (e, t) {return Math.max(e, Math.ceil(t.duration));}, 0) : t.duration = 0;
return a.attributes = t, a.segments = s, r.base && t.indexRange && (a.sidx = s[0], a.segments = []), a;
}
function go (e, t) {return to(e.childNodes).filter(function (e) {return e.tagName === t;});}
function vo (e) {return e.textContent.trim();}
function yo (e) {
var t = /P(?:(\d*)Y)?(?:(\d*)M)?(?:(\d*)D)?(?:T(?:(\d*)H)?(?:(\d*)M)?(?:([\d.]*)S)?)?/.exec(e);
if (!t) return 0;
var i = t.slice(1), n = i[0], r = i[1], a = i[2], s = i[3], o = i[4], u = i[5];
return 31536e3 * parseFloat(n || 0) + 2592e3 * parseFloat(r || 0) + 86400 * parseFloat(a || 0) + 3600 * parseFloat(s || 0) + 60 * parseFloat(o || 0) + parseFloat(u || 0);
}
function _o (e) {
return e && e.attributes ? to(e.attributes).reduce(function (e, t) {
var i = Fo[t.name] || Fo.DEFAULT;
return e[t.name] = i(t.value), e;
}, {}) : {};
}
function bo (e, i) {return i.length ? eo(e.map(function (t) {return i.map(function (e) {return va(t, vo(e));});})) : e;}
function To (e) {
var t = go(e, 'SegmentTemplate')[0], i = go(e, 'SegmentList')[0],
n = i && go(i, 'SegmentURL').map(function (e) {return Zs({tag: 'SegmentURL'}, _o(e));}),
r = go(e, 'SegmentBase')[0], a = i || t, s = a && go(a, 'SegmentTimeline')[0], o = i || r || t,
u = o && go(o, 'Initialization')[0], l = t && _o(t);
l && u ? l.initialization = u && _o(u) : l && l.initialization && (l.initialization = {sourceURL: l.initialization});
var c = {
template: l,
timeline: s && go(s, 'S').map(function (e) {return _o(e);}),
list: i && Zs(_o(i), {segmentUrls: n, initialization: _o(u)}),
base: r && Zs(_o(r), {initialization: _o(u)})
};
return Object.keys(c).forEach(function (e) {c[e] || delete c[e];}), c;
}
function So (c, d, h) {
return function (e) {
var t = _o(e), i = bo(d, go(e, 'BaseURL')), n = go(e, 'Role')[0], r = {role: _o(n)}, a = Zs(c, t, r),
s = function (e) {
return e.reduce(function (e, t) {
var i = _o(t), n = Bo[i.schemeIdUri];
if (n) {
e[n] = {attributes: i};
var r = go(t, 'cenc:pssh')[0];
if (r) {
var a = vo(r), s = a && Sa(a);
e[n].pssh = s;
}
}
return e;
}, {});
}(go(e, 'ContentProtection'));
Object.keys(s).length && (a = Zs(a, {contentProtection: s}));
var o = To(e), u = go(e, 'Representation'), l = Zs(h, o);
return eo(u.map(function (a, s, o) {
return function (e) {
var t = go(e, 'BaseURL'), i = bo(s, t), n = Zs(a, _o(e)), r = To(e);
return i.map(function (e) {return {segmentInfo: Zs(o, r), attributes: Zs(n, {baseUrl: e})};});
};
}(a, i, l)));
};
}
function ko (e, t) {
void 0 === t && (t = {});
var i = t, n = i.manifestUri, r = void 0 === n ? '' : n, a = i.NOW, s = void 0 === a ? Date.now() : a,
o = i.clientOffset, u = void 0 === o ? 0 : o, l = go(e, 'Period');
if (!l.length) throw new Error(Po);
var c = go(e, 'Location'), d = _o(e), h = bo([r], go(e, 'BaseURL'));
return d.sourceDuration = d.mediaPresentationDuration || 0, d.NOW = s, d.clientOffset = u, c.length && (d.locations = c.map(vo)), {
locations: d.locations,
representationInfo: eo(l.map(function (l, c) {
return function (e, t) {
var i = bo(c, go(e, 'BaseURL')), n = _o(e), r = parseInt(n.id, 10), a = T.isNaN(r) ? t : r,
s = Zs(l, {periodIndex: a}), o = go(e, 'AdaptationSet'), u = To(e);
return eo(o.map(So(s, i, u)));
};
}(d, h)))
};
}
function Co (e) {
if ('' === e) throw new Error(Lo);
var t = (new xo).parseFromString(e, 'application/xml'),
i = t && 'MPD' === t.documentElement.tagName ? t.documentElement : null;
if (!i || i && 0 < i.getElementsByTagName('parsererror').length) throw new Error(Oo);
return i;
}
function Eo (e, t) {
void 0 === t && (t = {});
var i = ko(Co(e), t), n = function (e) {return e.map(mo);}(i.representationInfo);
return lo(n, i.locations, t.sidxMapping);
}
function wo (e) {
return function (e) {
var t = go(e, 'UTCTiming')[0];
if (!t) return null;
var i = _o(t);
switch (i.schemeIdUri) {
case'urn:mpeg:dash:utc:http-head:2014':
case'urn:mpeg:dash:utc:http-head:2012':
i.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':
i.method = 'GET';
break;
case'urn:mpeg:dash:utc:direct:2014':
case'urn:mpeg:dash:utc:direct:2012':
i.method = 'DIRECT', i.value = Date.parse(i.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(Ro);
}
return i;
}(Co(e));
}
var Io = {DOMImplementation: ws, XMLSerializer: Xs}, Ao = i(function (e, t) {
function i (e) {this.options = e || {locator: {}};}
function l () {this.cdata = !1;}
function c (e, t) {t.lineNumber = e.lineNumber, t.columnNumber = e.columnNumber;}
function d (e) {if (e) return '\n@' + (e.systemId || '') + '#[line:' + e.lineNumber + ',col:' + e.columnNumber + ']';}
function r (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 h (e, t) {e.currentElement ? e.currentElement.appendChild(t) : e.doc.appendChild(t);}
i.prototype.parseFromString = function (e, t) {
var i = this.options, n = new p, r = i.domBuilder || new l, a = i.errorHandler, s = i.locator, o = i.xmlns || {},
u = {lt: '<', gt: '>', amp: '&', quot: '"', apos: '\''};
return s && r.setDocumentLocator(s), n.errorHandler = function (n, e, r) {
if (!n) {
if (e instanceof l) 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 + d(r));} || function () {};
}
return r = r || {}, t('warning'), t('error'), t('fatalError'), a;
}(a, r, s), n.domBuilder = i.domBuilder || r, /\/x?html?$/.test(t) && (u.nbsp = ' ', u.copy = '©', o[''] = 'http://www.w3.org/1999/xhtml'), o.xml = o.xml || 'http://www.w3.org/XML/1998/namespace', e ? n.parse(e, o, u) : n.errorHandler.error('invalid doc source'), r.doc;
}, l.prototype = {
startDocument: function () {this.doc = (new n).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;
h(this, a), this.currentElement = a, this.locator && c(this.locator, a);
for (var o = 0; o < s; o++) {
e = n.getURI(o);
var u = n.getValue(o), l = (i = n.getQName(o), r.createAttributeNS(e, i));
this.locator && c(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) {
var i = this.doc.createProcessingInstruction(e, t);
this.locator && c(this.locator, i), h(this, i);
},
ignorableWhitespace: function (e, t, i) {},
characters: function (e, t, i) {
if (e = r.apply(this, arguments)) {
if (this.cdata) var n = this.doc.createCDATASection(e); else n = this.doc.createTextNode(e);
this.currentElement ? this.currentElement.appendChild(n) : /^\s*$/.test(e) && this.doc.appendChild(n), this.locator && c(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 = r.apply(this, arguments);
var n = this.doc.createComment(e);
this.locator && c(this.locator, n), h(this, n);
},
startCDATA: function () {this.cdata = !0;},
endCDATA: function () {this.cdata = !1;},
startDTD: function (e, t, i) {
var n = this.doc.implementation;
if (n && n.createDocumentType) {
var r = n.createDocumentType(e, t, i);
this.locator && c(this.locator, r), h(this, r);
}
},
warning: function (e) {},
error: function (e) {},
fatalError: function (e) {throw e;}
}, 'endDTD,startEntity,endEntity,attributeDecl,elementDecl,externalEntityDecl,internalEntityDecl,resolveEntity,getExternalSubset,notationDecl,unparsedEntityDecl'.replace(/\w+/g, function (e) {l.prototype[e] = function () {return null;};});
var p = $a.XMLReader, n = t.DOMImplementation = Io.DOMImplementation;
t.XMLSerializer = Io.XMLSerializer, t.DOMParser = i;
}), xo = (Ao.DOMImplementation, Ao.XMLSerializer, Ao.DOMParser), Po = 'INVALID_NUMBER_OF_PERIOD',
Lo = 'DASH_EMPTY_MANIFEST', Oo = 'DASH_INVALID_XML', Do = 'NO_BASE_URL', Mo = 'SEGMENT_TIME_UNSPECIFIED',
Ro = 'UNSUPPORTED_UTC_TIMING_SCHEME', No = {
static: function (e) {
var t = e.duration, i = e.timescale, n = void 0 === i ? 1 : i, r = e.sourceDuration;
return {start: 0, end: Math.ceil(r / (t / 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.start, u = void 0 === o ? 0 : o, l = e.minimumUpdatePeriod, c = void 0 === l ? 0 : l,
d = e.timeShiftBufferDepth, h = void 0 === d ? 1 / 0 : d, p = (t + i) / 1e3, f = n + u, m = p + c - f,
g = Math.ceil(m * a / s), v = Math.floor((p - f - h) * a / s), y = Math.floor((p - f) * a / s);
return {start: Math.max(0, v), end: Math.min(g, y)};
}
}, Uo = /\$([A-z]*)(?:(%0)([0-9]+)d)?\$/g, Fo = {
mediaPresentationDuration: function (e) {return yo(e);},
availabilityStartTime: function (e) {return function (e) {return /^\d+-\d+-\d+T\d+:\d+:\d+(\.\d+)?$/.test(e) && (e += 'Z'), Date.parse(e);}(e) / 1e3;},
minimumUpdatePeriod: function (e) {return yo(e);},
suggestedPresentationDelay: function (e) {return yo(e);},
type: function (e) {return e;},
timeShiftBufferDepth: function (e) {return yo(e);},
start: function (e) {return yo(e);},
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);},
duration: function (e) {
var t = parseInt(e, 10);
return isNaN(t) ? yo(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'
}, jo = function (e) {
var t, i = new DataView(e.buffer, e.byteOffset, e.byteLength), n = {
version: e[0],
flags: new Uint8Array(e.subarray(1, 4)),
references: [],
referenceId: i.getUint32(4),
timescale: i.getUint32(8),
earliestPresentationTime: i.getUint32(12),
firstOffset: i.getUint32(16)
}, r = i.getUint16(22);
for (t = 24; r; t += 12, r--) n.references.push({
referenceType: (128 & e[t]) >>> 7,
referencedSize: 2147483647 & i.getUint32(t),
subsegmentDuration: i.getUint32(t + 4),
startsWithSap: !!(128 & e[t + 8]),
sapType: (112 & e[t + 8]) >>> 4,
sapDeltaTime: 268435455 & i.getUint32(t + 8)
});
return n;
}, Vo = i(function (e, t) {
Object.defineProperty(t, '__esModule', {value: !0});
function n (e) {return e instanceof Uint8Array ? e : new Uint8Array(e && e.buffer || e, e && e.byteOffset || 0, e && e.byteLength || 0);}
function r (e) {
if (!e) return '';
e = Array.prototype.slice.call(e);
var t = String.fromCharCode.apply(null, n(e));
try {return decodeURIComponent(escape(t));} catch (e) {}
return t;
}
function i (e, t) {
void 0 === t && (t = 0);
var i = (e = n(e))[t + 6] << 21 | e[t + 7] << 14 | e[t + 8] << 7 | e[t + 9];
return (16 & e[t + 5]) >> 4 ? 20 + i : 10 + i;
}
function a (e, t) {return void 0 === t && (t = 0), (e = n(e)).length - t < 10 || 'ID3' !== r(e.subarray(t, t + 3)) ? t : a(e, t += i(e, t));}
var s = {
aac: function (e) {
var t = a(e);
return e.length >= t + 2 && 255 == (255 & e[t]) && 224 == (224 & e[t + 1]) && 16 == (22 & e[t + 1]);
},
mp3: function (e) {
var t = a(e);
return e.length >= t + 2 && 255 == (255 & e[t]) && 224 == (224 & e[t + 1]) && 2 == (6 & e[t + 1]);
},
webm: function (e) {return 4 <= e.length && 26 == (255 & e[0]) && 69 == (255 & e[1]) && 223 == (255 & e[2]) && 163 == (255 & e[3]);},
mp4: function (e) {return 8 <= e.length && /^(f|s)typ$/.test(r(e.subarray(4, 8))) && !/^ftyp3g$/.test(r(e.subarray(4, 10)));},
'3gp': function (e) {return 10 <= e.length && /^ftyp3g$/.test(r(e.subarray(4, 10)));},
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) {return 4 <= e.length && /^fLaC$/.test(r(e.subarray(0, 4)));},
ogg: function (e) {return 4 <= e.length && /^OggS$/.test(r(e.subarray(0, 4)));}
}, o = Object.keys(s).filter(function (e) {return 'ts' !== e;}).concat('ts');
o.forEach(function (e) {
var t = s[e];
s[e] = function (e) {return t(n(e));};
});
t.detectContainerForBytes = function (e) {
e = n(e);
for (var t = 0; t < o.length; t++) {
var i = o[t];
if (s[i](e)) return i;
}
return '';
}, t.getId3Offset = a, t.id3Size = i, t.isLikely = s, t.isLikelyFmp4MediaSegment = function (e) {
e = n(e);
for (var t = 0; t < e.length;) {
var i = (e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3]) >>> 0;
if ('moof' === r(e.subarray(t + 4, t + 8))) return !0;
0 == i || i + t > e.length ? t = e.length : t += i;
}
return !1;
};
});
t(Vo);
var qo = Vo.detectContainerForBytes, Ho = Vo.getId3Offset,
Wo = (Vo.id3Size, Vo.isLikely, Vo.isLikelyFmp4MediaSegment), zo = i(function (e, t) {
Object.defineProperty(t, '__esModule', {value: !0});
function s (e) {return e instanceof Uint8Array ? e : new Uint8Array(e && e.buffer || e, e && e.byteOffset || 0, e && e.byteLength || 0);}
t.bytesToString = function (e) {
if (!e) return '';
e = Array.prototype.slice.call(e);
var t = String.fromCharCode.apply(null, s(e));
try {return decodeURIComponent(escape(t));} catch (e) {}
return t;
}, t.concatTypedArrays = function () {
for (var e = arguments.length, t = new Array(e), i = 0; i < e; i++) t[i] = arguments[i];
var n = t.reduce(function (e, t) {return e += t && (t.byteLength || t.length) || 0;}, 0), r = new Uint8Array(n),
a = 0;
return t.forEach(function (e) {e = s(e), r.set(e, a), a += e.byteLength;}), r;
}, t.isTypedArray = function (e) {return ArrayBuffer.isView(e);}, t.stringToBytes = function (e, t) {
void 0 === t && (t = !1);
return 'string' != typeof e && e && 'function' == typeof e.toString && (e = e.toString()), 'string' != typeof e ? [] : (t || (e = unescape(encodeURIComponent(e))), e.split('').map(function (e) {return 255 & e.charCodeAt(0);}));
}, t.toUint8 = s;
});
t(zo);
zo.bytesToString;
function Go () {
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) {
var i;
return !!a[e] && (i = a[e].indexOf(t), a[e] = a[e].slice(), a[e].splice(i, 1), -1 < i);
}, this.trigger = function (e) {
var t, i, n, r;
if (t = a[e]) if (2 === arguments.length) for (n = t.length, i = 0; i < n; ++i) t[i].call(this, arguments[1]); else {
for (r = [], i = arguments.length, i = 1; i < arguments.length; ++i) r.push(arguments[i]);
for (n = t.length, i = 0; i < n; ++i) t[i].apply(this, r);
}
}, this.dispose = function () {a = {};};
};
}
var Xo = zo.concatTypedArrays, Ko = (zo.isTypedArray, zo.stringToBytes), Yo = zo.toUint8, $o = 27, Qo = 15, Jo = 21;
Go.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;}, Go.prototype.push = function (e) {this.trigger('data', e);}, Go.prototype.flush = function (e) {this.trigger('done', e);}, Go.prototype.partialFlush = function (e) {this.trigger('partialdone', e);}, Go.prototype.endTimeline = function (e) {this.trigger('endedtimeline', e);}, Go.prototype.reset = function (e) {this.trigger('reset', e);};
function Zo (e, t) {
var i = 1;
for (t < e && (i = -1); 4294967296 < Math.abs(t - e);) e += 8589934592 * i;
return e;
}
new Go;
function eu (e) {
var t = 31 & e[1];
return t <<= 8, t |= e[2];
}
function tu (e) {return !!(64 & e[1]);}
function iu (e) {
var t = 0;
return 1 < (48 & e[3]) >>> 4 && (t += e[4] + 1), t;
}
function nu (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;
}
}
function ru (e, t) {
var i = e[t + 6] << 21 | e[t + 7] << 14 | e[t + 8] << 7 | e[t + 9];
return i = 0 <= i ? i : 0, (16 & e[t + 5]) >> 4 ? i + 20 : i + 10;
}
function au (e) {return e[0] << 21 | e[1] << 14 | e[2] << 7 | e[3];}
var su, ou, uu, lu, cu = {
parseType: function (e, t) {
var i = eu(e);
return 0 === i ? 'pat' : i === t ? 'pmt' : t ? 'pes' : null;
},
parsePat: function (e) {
var t = tu(e), i = 4 + iu(e);
return t && (i += e[i] + 1), (31 & e[i + 10]) << 8 | e[i + 11];
},
parsePmt: function (e) {
var t = {}, i = tu(e), n = 4 + iu(e);
if (i && (n += e[n] + 1), 1 & e[n + 5]) {
var r;
r = 3 + ((15 & e[n + 1]) << 8 | e[n + 2]) - 4;
for (var 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: tu,
parsePesType: function (e, t) {
switch (t[eu(e)]) {
case $o:
return 'video';
case Qo:
return 'audio';
case Jo:
return 'timed-metadata';
default:
return null;
}
},
parsePesTime: function (e) {
if (!tu(e)) return null;
var t = 4 + iu(e);
if (t >= e.byteLength) return null;
var i, n = null;
return 192 & (i = e[t + 7]) && ((n = {}).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, n.pts *= 4, n.pts += (6 & e[t + 13]) >>> 1, n.dts = n.pts, 64 & i && (n.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, n.dts *= 4, n.dts += (6 & e[t + 18]) >>> 1)), n;
},
videoPacketContainsKeyFrame: function (e) {
for (var t = 4 + iu(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' === nu(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' === nu(31 & i[r + 3]) && (a = !0), r = n - 2, n += 3;
break;
default:
n += 3;
}
return i = i.subarray(r), n -= r, r = 0, i && 3 < i.byteLength && 'slice_layer_without_partitioning_rbsp_idr' === nu(31 & i[r + 3]) && (a = !0), a;
}
}, du = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350], hu = {
isLikelyAacData: function (e) {
var t = function e (t, i) {return t.length - i < 10 || t[i] !== 'I'.charCodeAt(0) || t[i + 1] !== 'D'.charCodeAt(0) || t[i + 2] !== '3'.charCodeAt(0) ? i : e(t, i += ru(t, i));}(e, 0);
return e.length >= t + 2 && 255 == (255 & e[t]) && 240 == (240 & e[t + 1]) && 16 == (22 & e[t + 1]);
},
parseId3TagSize: ru,
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 du[(60 & e[t + 2]) >>> 2];
t++;
}
return null;
},
parseAacTimestamp: function (e) {
var t, i, n;
t = 10, 64 & e[5] && (t += 4, t += au(e.subarray(10, 14)));
do {
if ((i = au(e.subarray(t + 4, t + 8))) < 1) return null;
if ('PRIV' === String.fromCharCode(e[t], e[t + 1], e[t + 2], e[t + 3])) {
n = e.subarray(t + 10, t + i + 10);
for (var r = 0; r < n.byteLength; r++) if (0 === n[r]) {
if ('com.apple.streaming.transportStreamTimestamp' !== unescape(function (e, t, i) {
var n, r = '';
for (n = t; n < i; n++) r += '%' + ('00' + e[n].toString(16)).slice(-2);
return r;
}(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];
}
}
t += 10, t += i;
} while (t < e.byteLength);
return null;
}
}, pu = 9e4,
fu = (su = function (e) {return 9e4 * e;}, ou = function (e, t) {return e * t;}, uu = function (e) {return e / 9e4;}, lu = function (e, t) {return e / t;}, pu),
mu = Zo, gu = {};
gu.ts = cu, gu.aac = hu;
function vu (e, t, i) {
for (var n, r, a, s, o = 0, u = Cu, l = !1; u <= e.byteLength;) if (71 !== e[o] || 71 !== e[u] && u !== e.byteLength) o++, u++; else {
switch (n = e.subarray(o, u), gu.ts.parseType(n, t.pid)) {
case'pes':
r = gu.ts.parsePesType(n, t.table), a = gu.ts.parsePayloadUnitStartIndicator(n), 'audio' === r && a && (s = gu.ts.parsePesTime(n)) && (s.type = 'audio', i.audio.push(s), l = !0);
}
if (l) break;
o += Cu, u += Cu;
}
for (o = (u = e.byteLength) - Cu, l = !1; 0 <= o;) if (71 !== e[o] || 71 !== e[u] && u !== e.byteLength) o--, u--; else {
switch (n = e.subarray(o, u), gu.ts.parseType(n, t.pid)) {
case'pes':
r = gu.ts.parsePesType(n, t.table), a = gu.ts.parsePayloadUnitStartIndicator(n), 'audio' === r && a && (s = gu.ts.parsePesTime(n)) && (s.type = 'audio', i.audio.push(s), l = !0);
}
if (l) break;
o -= Cu, u -= Cu;
}
}
function yu (e, t, i) {
for (var n, r, a, s, o, u, l, c = 0, d = Cu, h = !1, p = {
data: [],
size: 0
}; d < e.byteLength;) if (71 !== e[c] || 71 !== e[d]) c++, d++; else {
switch (n = e.subarray(c, d), gu.ts.parseType(n, t.pid)) {
case'pes':
if (r = gu.ts.parsePesType(n, t.table), a = gu.ts.parsePayloadUnitStartIndicator(n), 'video' === r && (a && !h && (s = gu.ts.parsePesTime(n)) && (s.type = 'video', i.video.push(s), h = !0), !i.firstKeyFrame)) {
if (a && 0 !== p.size) {
for (o = new Uint8Array(p.size), u = 0; p.data.length;) l = p.data.shift(), o.set(l, u), u += l.byteLength;
if (gu.ts.videoPacketContainsKeyFrame(o)) {
var f = gu.ts.parsePesTime(o);
f && (i.firstKeyFrame = f, i.firstKeyFrame.type = 'video');
}
p.size = 0;
}
p.data.push(n), p.size += n.byteLength;
}
}
if (h && i.firstKeyFrame) break;
c += Cu, d += Cu;
}
for (c = (d = e.byteLength) - Cu, h = !1; 0 <= c;) if (71 !== e[c] || 71 !== e[d]) c--, d--; else {
switch (n = e.subarray(c, d), gu.ts.parseType(n, t.pid)) {
case'pes':
r = gu.ts.parsePesType(n, t.table), a = gu.ts.parsePayloadUnitStartIndicator(n), 'video' === r && a && (s = gu.ts.parsePesTime(n)) && (s.type = 'video', i.video.push(s), h = !0);
}
if (h) break;
c -= Cu, d -= Cu;
}
}
function _u (e) {
var t = {pid: null, table: null}, i = {};
for (var n in function (e, t) {
for (var i, n = 0, r = Cu; r < e.byteLength;) if (71 !== e[n] || 71 !== e[r]) n++, r++; else {
switch (i = e.subarray(n, r), gu.ts.parseType(i, t.pid)) {
case'pat':
t.pid || (t.pid = gu.ts.parsePat(i));
break;
case'pmt':
t.table || (t.table = gu.ts.parsePmt(i));
}
if (t.pid && t.table) return;
n += Cu, r += Cu;
}
}(e, t), t.table) {
if (t.table.hasOwnProperty(n)) switch (t.table[n]) {
case $o:
i.video = [], yu(e, t, i), 0 === i.video.length && delete i.video;
break;
case Qo:
i.audio = [], vu(e, t, i), 0 === i.audio.length && delete i.audio;
}
}
return i;
}
var bu, Tu, Su, ku = pu, Cu = 188, Eu = function (e, t) {
var i;
return (i = gu.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 (gu.aac.parseType(e, o)) {
case'timed-metadata':
if (e.length - o < 10) {
i = !0;
break;
}
if ((s = gu.aac.parseId3TagSize(e, o)) > e.length) {
i = !0;
break;
}
null === a && (t = e.subarray(o, o + s), a = gu.aac.parseAacTimestamp(t)), o += s;
break;
case'audio':
if (e.length - o < 7) {
i = !0;
break;
}
if ((s = gu.aac.parseAdtsSize(e, o)) > e.length) {
i = !0;
break;
}
null === r && (t = e.subarray(o, o + s), r = gu.aac.parseSampleRate(t)), n++, o += s;
break;
default:
o++;
}
if (i) return null;
}
if (null === r || null === a) return null;
var u = ku / r;
return {audio: [{type: 'audio', dts: a, pts: a}, {type: 'audio', dts: a + 1024 * n * u, pts: a + 1024 * n * u}]};
}(e) : _u(e)) && (i.audio || i.video) ? (function (e, t) {
if (e.audio && e.audio.length) {
var i = t;
'undefined' == typeof i && (i = e.audio[0].dts), e.audio.forEach(function (e) {e.dts = mu(e.dts, i), e.pts = mu(e.pts, i), e.dtsTime = e.dts / ku, e.ptsTime = e.pts / ku;});
}
if (e.video && e.video.length) {
var n = t;
if ('undefined' == typeof n && (n = e.video[0].dts), e.video.forEach(function (e) {e.dts = mu(e.dts, n), e.pts = mu(e.pts, n), e.dtsTime = e.dts / ku, e.ptsTime = e.pts / ku;}), e.firstKeyFrame) {
var r = e.firstKeyFrame;
r.dts = mu(r.dts, n), r.pts = mu(r.pts, n), r.dtsTime = r.dts / ku, r.ptsTime = r.dts / ku;
}
}
}(i, t), i) : null;
}, wu = function (e) {return e >>> 0;}, Iu = 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]);
}, Au = wu, xu = function e (t, i) {
var n, r, a, s, o, u = [];
if (!i.length) return null;
for (n = 0; n < t.byteLength;) r = Au(t[n] << 24 | t[n + 1] << 16 | t[n + 2] << 8 | t[n + 3]), a = Iu(t.subarray(n + 4, n + 8)), s = 1 < r ? n + r : t.byteLength, a === i[0] && (1 === i.length ? u.push(t.subarray(n + 8, s)) : (o = e(t.subarray(n + 8, s), i.slice(1))).length && (u = u.concat(o))), n = s;
return u;
}, Pu = function (e) {
var t, i = new DataView(e.buffer, e.byteOffset, e.byteLength),
n = {version: e[0], flags: new Uint8Array(e.subarray(1, 4)), trackId: i.getUint32(4)}, r = 1 & n.flags[2],
a = 2 & n.flags[2], s = 8 & n.flags[2], o = 16 & n.flags[2], u = 32 & n.flags[2], l = 65536 & n.flags[0],
c = 131072 & n.flags[0];
return t = 8, r && (t += 4, n.baseDataOffset = i.getUint32(12), t += 4), a && (n.sampleDescriptionIndex = i.getUint32(t), t += 4), s && (n.defaultSampleDuration = i.getUint32(t), t += 4), o && (n.defaultSampleSize = i.getUint32(t), t += 4), u && (n.defaultSampleFlags = i.getUint32(t)), l && (n.durationIsEmpty = !0), !r && c && (n.baseDataOffsetIsMoof = !0), n;
}, Lu = 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]
};
}, Ou = 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: Lu(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 = Lu(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;
}, Du = wu, Mu = function (e) {
var t = {
version: e[0],
flags: new Uint8Array(e.subarray(1, 4)),
baseMediaDecodeTime: Du(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7])
};
return 1 === t.version && (t.baseMediaDecodeTime *= Math.pow(2, 32), t.baseMediaDecodeTime += Du(e[8] << 24 | e[9] << 16 | e[10] << 8 | e[11])), t;
}, Ru = wu, Nu = function (e) {return ('00' + e.toString(16)).slice(-2);};
bu = function (r, e) {
var t, i, n;
return t = xu(e, ['moof', 'traf']), i = [].concat.apply([], t.map(function (n) {
return xu(n, ['tfhd']).map(function (e) {
var t, i;
return t = Ru(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7]), i = r[t] || 9e4, (xu(n, ['tfdt']).map(function (e) {
var t, i;
return t = e[0], i = Ru(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7]), 1 === t && (i *= Math.pow(2, 32), i += Ru(e[8] << 24 | e[9] << 16 | e[10] << 8 | e[11])), i;
})[0] || 1 / 0) / i;
});
})), n = Math.min.apply(null, i), isFinite(n) ? n : 0;
}, Tu = function (e) {
var t = xu(e, ['moov', 'trak']), h = [];
return t.forEach(function (e) {
var t, i, n = {}, r = xu(e, ['tkhd'])[0];
r && (i = (t = new DataView(r.buffer, r.byteOffset, r.byteLength)).getUint8(0), n.id = 0 === i ? t.getUint32(12) : t.getUint32(20));
var a = xu(e, ['mdia', 'hdlr'])[0];
if (a) {
var s = Iu(a.subarray(8, 12));
n.type = 'vide' === s ? 'video' : 'soun' === s ? 'audio' : s;
}
var o = xu(e, ['mdia', 'minf', 'stbl', 'stsd'])[0];
if (o) {
var u = o.subarray(8);
n.codec = Iu(u.subarray(4, 8));
var l, c = xu(u, [n.codec])[0];
c && (/^[a-z]vc[1-9]$/i.test(n.codec) ? (l = c.subarray(78), 'avcC' === Iu(l.subarray(4, 8)) && 11 < l.length ? (n.codec += '.', n.codec += Nu(l[9]), n.codec += Nu(l[10]), n.codec += Nu(l[11])) : n.codec = 'avc1.4d400d') : /^mp4[a,v]$/i.test(n.codec) && (l = c.subarray(28), 'esds' === Iu(l.subarray(4, 8)) && 20 < l.length && 0 !== l[19] ? (n.codec += '.' + Nu(l[19]), n.codec += '.' + Nu(l[20] >>> 2 & 63).replace(/^0/, '')) : n.codec = 'mp4a.40.2'));
}
var d = xu(e, ['mdia', 'mdhd'])[0];
d && (n.timescale = Su(d)), h.push(n);
}), h;
};
var Uu = bu, Fu = Tu, Bu = (Su = function (e) {
var t = 0 === e[0] ? 12 : 20;
return Ru(e[t] << 24 | e[1 + t] << 16 | e[2 + t] << 8 | e[3 + t]);
}, i(function (e, t) {
function i (e) {return e && 'object' == typeof e && 'default' in e ? e : {default: e};}
Object.defineProperty(t, '__esModule', {value: !0});
function r (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);}) : e;}
function n (e) {return e.map(r);}
function a (e) {
void 0 === e && (e = '');
var t = e.split(','), a = {};
return t.forEach(function (r) {
r = r.trim(), ['video', 'audio'].forEach(function (e) {
var t = l[e].exec(r.toLowerCase());
if (t && !(t.length <= 1)) {
var i = r.substring(0, t[1].length), n = r.replace(i, '');
a[e] = {type: i, details: n};
}
});
}), a;
}
function s (e) {return void 0 === e && (e = ''), l.audio.test(e.trim().toLowerCase());}
function o (e) {
if (e && 'string' == typeof e) {
var t = e.toLowerCase().split(',').map(function (e) {return r(e.trim());}), i = 'video';
1 === t.length && s(t[0]) && (i = 'audio');
var n = 'mp4';
return t.every(function (e) {return l.mp4.test(e);}) ? n = 'mp4' : t.every(function (e) {return l.webm.test(e);}) ? n = 'webm' : t.every(function (e) {return l.ogg.test(e);}) && (n = 'ogg'), i + '/' + n + ';codecs="' + e + '"';
}
}
var u = i(T), l = {
mp4: /^(av0?1|avc0?[1234]|vp0?9|flac|opus|mp3|mp4a|mp4v)/,
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)/,
muxerVideo: /^(avc0?1)/,
muxerAudio: /^(mp4a)/
};
t.DEFAULT_AUDIO_CODEC = 'mp4a.40.2', t.DEFAULT_VIDEO_CODEC = 'avc1.4d400d', t.browserSupportsCodec = function (e) {return void 0 === e && (e = ''), u.default.MediaSource && u.default.MediaSource.isTypeSupported && u.default.MediaSource.isTypeSupported(o(e)) || !1;}, t.codecsFromDefault = function (e, t) {
if (!e.mediaGroups.AUDIO || !t) return null;
var i = e.mediaGroups.AUDIO[t];
if (!i) return null;
for (var n in i) {
var r = i[n];
if (r.default && r.playlists) return a(r.playlists[0].attributes.CODECS);
}
return null;
}, t.getMimeForCodec = o, t.isAudioCodec = s, t.isVideoCodec = function (e) {return void 0 === e && (e = ''), l.video.test(e.trim().toLowerCase());}, t.mapLegacyAvcCodecs = function (e) {return e.replace(/avc1\.(\d+)\.(\d+)/i, function (e) {return n([e])[0];});}, t.muxerSupportsCodec = function (e) {return void 0 === e && (e = ''), e.toLowerCase().split(',').every(function (e) {return e = e.trim(), l.muxerVideo.test(e) || l.muxerAudio.test(e);});}, t.parseCodecs = a, t.translateLegacyCodec = r, t.translateLegacyCodecs = n;
}));
t(Bu);
function ju (e, t, i) {return e && i && i.responseURL && t !== i.responseURL ? i.responseURL : t;}
function Vu (e, t) {return e + '-' + t;}
function qu (e) {
var t = e.manifestString, i = e.customTagParsers, n = void 0 === i ? [] : i, r = e.customTagMappers,
a = void 0 === r ? [] : r, s = new Ea;
return n.forEach(function (e) {return s.addParser(e);}), a.forEach(function (e) {return s.addTagMapper(e);}), s.push(t), s.end(), s.manifest;
}
function Hu (r, a) {
['AUDIO', 'SUBTITLES'].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);
}
});
}
function Wu (e) {
var t = e.playlist, i = e.uri, n = e.id;
t.id = n, i && (t.uri = i), t.attributes = t.attributes || {};
}
function zu (s, e) {
s.uri = e;
for (var t = 0; t < s.playlists.length; t++) if (!s.playlists[t].uri) {
var i = 'placeholder-uri-' + t;
s.playlists[t].uri = i;
}
Hu(s, function (e, t, i, n) {
if (e.playlists && e.playlists.length && !e.playlists[0].uri) {
var r = 'placeholder-uri-' + t + '-' + i + '-' + n, a = Vu(0, r);
e.playlists[0].uri = r, e.playlists[0].id = a, s.playlists[a] = e.playlists[0], s.playlists[r] = e.playlists[0];
}
}), function (e) {
for (var t = e.playlists.length; t--;) {
var i = e.playlists[t];
Wu({
playlist: i,
id: Vu(t, i.uri)
}), i.resolvedUri = $l(e.uri, i.uri), e.playlists[i.id] = i, (e.playlists[i.uri] = i).attributes.BANDWIDTH || Ql.warn('Invalid playlist STREAM-INF detected. Missing BANDWIDTH attribute.');
}
}(s), function (t) {Hu(t, function (e) {e.uri && (e.resolvedUri = $l(t.uri, e.uri));});}(s);
}
function Gu (e, t) {e.resolvedUri || (e.resolvedUri = $l(t, e.uri)), e.key && !e.key.resolvedUri && (e.key.resolvedUri = $l(t, e.key.uri)), e.map && !e.map.resolvedUri && (e.map.resolvedUri = $l(t, e.map.uri));}
function Xu (e, t) {
var i = Jl(e, {}), n = i.playlists[t.id];
if (!n) return null;
if (n.segments && t.segments && n.segments.length === t.segments.length && n.endList === t.endList && n.mediaSequence === t.mediaSequence) return null;
var r = Jl(n, t);
n.segments && (r.segments = function (e, t, i) {
var n = t.slice();
i = i || 0;
for (var r = Math.min(e.length, t.length + i), a = i; a < r; a++) n[a - i] = Jl(e[a], n[a - i]);
return n;
}(n.segments, t.segments, t.mediaSequence - n.mediaSequence)), r.segments.forEach(function (e) {Gu(e, r.resolvedUri);});
for (var a = 0; a < i.playlists.length; a++) i.playlists[a].id === t.id && (i.playlists[a] = r);
return i.playlists[t.id] = r, i.playlists[t.uri] = r, i;
}
function Ku (e, t) {
var i = e.segments[e.segments.length - 1];
return t && i && i.duration ? 1e3 * i.duration : 500 * (e.targetDuration || 10);
}
function Yu (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 da.createTimeRanges(n);
}
function $u (e, i) {return Yu(e, function (e, t) {return e - .1 <= i && i <= t + .1;});}
function Qu (e, t) {return Yu(e, function (e) {return t <= e - ec;});}
function Ju (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 Zu (e) {
for (var t = [], i = 0; i < e.length; i++) t.push({start: e.start(i), end: e.end(i)});
return t;
}
function el (e, t, i) {
if ('undefined' == typeof t && (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 += r.duration, 'undefined' != typeof r.start) return {result: i + r.start, precise: !0};
}
return {result: i, precise: !1};
}(e, t);
if (n.precise) return n.result;
var r = 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 += i.duration, 'undefined' != typeof i.end) return {result: i.end - n, precise: !0};
}
return {result: -1, precise: !1};
}(e, t);
return r.precise ? r.result : n.result + i;
}
function tl (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 T.Infinity;
}
return el(e, t, i);
}
function il (e, t, i) {
var n = 0;
if (i < t) {
var r = [i, t];
t = r[0], i = r[1];
}
if (t < 0) {
for (var a = t; a < Math.min(0, i); a++) n += e.targetDuration;
t = 0;
}
for (var s = t; s < i; s++) n += e.segments[s].duration;
return n;
}
function nl (e, t) {
if (!e.segments.length) return 0;
var i = e.segments.length, n = e.segments[i - 1].duration || e.targetDuration,
r = 'number' == typeof t ? t : n + 2 * e.targetDuration;
if (0 === r) return i;
for (var a = 0; i-- && !(r <= (a += e.segments[i].duration));) ;
return Math.max(0, i);
}
function rl (e, t, i, n) {
if (!e || !e.segments) return null;
if (e.endList) return tl(e);
if (null === t) return null;
t = t || 0;
var r = i ? nl(e, n) : e.segments.length;
return el(e, e.mediaSequence + r, t);
}
function al (e) {return e.excludeUntil && e.excludeUntil > Date.now();}
function sl (e) {return e.excludeUntil && e.excludeUntil === 1 / 0;}
function ol (e) {
var t = al(e);
return !e.disabled && !t;
}
function ul (e, t) {return t.attributes && t.attributes[e];}
function ll (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 !!ol(e) && (e.attributes.BANDWIDTH || 0) < i;}).length;
}
function cl (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), t || e.aborted || 200 === i.statusCode || 206 === i.statusCode || 0 === i.statusCode || (t = new Error('XHR Failed with a response of: ' + (e && (r || e.responseText)))), n(t, e);
}
function dl () {
return function e (t, i) {
t = rc({timeout: 45e3}, t);
var n = e.beforeRequest || da.Vhs.xhr.beforeRequest;
if (n && 'function' == typeof n) {
var r = n(t);
r && (t = r);
}
var a = nc(t, function (e, t) {return cl(a, e, t, i);}), s = a.abort;
return a.abort = function () {return a.aborted = !0, s.apply(a, arguments);}, a.uri = t.uri, a.requestTime = Date.now(), a;
};
}
function hl (e) {
var t = {};
return e.byterange && (t.Range = function (e) {
var t = e.offset + e.length - 1;
return 'bytes=' + e.offset + '-' + t;
}(e.byterange)), t;
}
function pl (e, t) {
var i = e.toString(16);
return '00'.substring(0, 2 - i.length) + i + (t % 2 ? ' ' : '');
}
function fl (e) {return 32 <= e && e < 126 ? String.fromCharCode(e) : '.';}
function ml (i) {
var n = {};
return Object.keys(i).forEach(function (e) {
var t = i[e];
ArrayBuffer.isView(t) ? n[e] = {bytes: t.buffer, byteOffset: t.byteOffset, byteLength: t.byteLength} : n[e] = t;
}), n;
}
function gl (e) {
var t = e.byterange || {length: 1 / 0, offset: 0};
return [t.length, t.offset, e.resolvedUri].join(',');
}
function vl (e) {return e.resolvedUri;}
function yl (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(pl).join('') + ' ' + t.slice(16 * n, 16 * n + 16).map(fl).join('') + '\n';
return i;
}
function _l (e) {
var t = e.playlist, i = e.time, n = void 0 === i ? void 0 : i, r = e.callback;
if (!r) throw new Error('getProgramTime: callback must be provided');
if (!t || void 0 === n) return r({message: 'getProgramTime: playlist and time must be provided'});
var a = 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 + .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);
if (!a) return r({message: 'valid programTime was not found'});
if ('estimate' === a.type) return r({
message: 'Accurate programTime could not be determined. Please seek to e.seekTime and try again',
seekTime: a.estimatedStart
});
var s = {mediaSeconds: n}, o = function (e, t) {
if (!t.dateTimeObject) return null;
var i = t.videoTimingInfo.transmuxerPrependedSeconds, n = e - (t.videoTimingInfo.transmuxedPresentationStart + i);
return new Date(t.dateTimeObject.getTime() + 1e3 * n);
}(n, a.segment);
return o && (s.programDateTime = o.toISOString()), r(null, s);
}
function bl (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');
if ('undefined' == typeof t || !i || !a) return l({message: 'seekToProgramTime: programTime, seekTo and playlist must be provided'});
if (!i.endList && !u.hasStarted_) return l({message: 'player must be playing a live stream to start buffering'});
if (!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)) return l({message: 'programDateTime tags must be provided in the manifest ' + i.resolvedUri});
var c = function (e, t) {
var i;
try {i = new Date(e);} catch (e) {return null;}
if (!t || !t.segments || 0 === t.segments.length) return null;
var n = t.segments[0];
if (i < n.dateTimeObject) return null;
for (var r = 0; r < t.segments.length - 1; r++) {if (n = t.segments[r], i < t.segments[r + 1].dateTimeObject) break;}
var a = t.segments[t.segments.length - 1], s = a.dateTimeObject,
o = a.videoTimingInfo ? function (e) {return e.transmuxedPresentationEnd - e.transmuxedPresentationStart - e.transmuxerPrependedSeconds;}(a.videoTimingInfo) : a.duration + .25 * a.duration;
return new Date(s.getTime() + 1e3 * o) < i ? null : (s < i && (n = a), {
segment: n,
estimatedStart: n.videoTimingInfo ? n.videoTimingInfo.transmuxedPresentationStart : ic.duration(t, t.mediaSequence + t.segments.indexOf(n)),
type: n.videoTimingInfo ? 'accurate' : 'estimate'
});
}(t, i);
if (!c) return l({message: t + ' was not found in the stream'});
var d = c.segment, h = function (e, t) {
var i, n;
try {i = new Date(e), n = new Date(t);} catch (e) {}
var r = i.getTime();
return (n.getTime() - r) / 1e3;
}(d.dateTimeObject, t);
if ('estimate' === c.type) return 0 === r ? l({message: t + ' is not buffered yet. Try again'}) : (a(c.estimatedStart + h), void u.one('seeked', function () {
bl({
programTime: t,
playlist: i,
retryCount: r - 1,
seekTo: a,
pauseAfterSeek: o,
tech: u,
callback: l
});
}));
var p = d.start + h;
u.one('seeked', function () {return l(null, u.currentTime());}), o && u.pause(), a(p);
}
function Tl (e, t) {if (4 === e.readyState) return t();}
function Sl (e) {
var t = e.masterXml, i = e.srcUrl, n = e.clientOffset, r = e.sidxMapping,
a = Eo(t, {manifestUri: i, clientOffset: n, sidxMapping: r});
return zu(a, i), a;
}
function kl (e, t) {
for (var s = !0, o = sc(e, {
duration: t.duration,
minimumUpdatePeriod: t.minimumUpdatePeriod
}), i = 0; i < t.playlists.length; i++) {
var n = Xu(o, t.playlists[i]);
n && (o = n, s = !1);
}
return Hu(t, function (e, t, i, n) {
if (e.playlists && e.playlists.length) {
var r = e.playlists[0].id, a = Xu(o, e.playlists[0]);
a && ((o = a).mediaGroups[t][i][n].playlists[0] = o.playlists[r], s = !1);
}
}), t.minimumUpdatePeriod !== e.minimumUpdatePeriod && (s = !1), s ? null : o;
}
function Cl (e) {
var t = e.byterange.offset + e.byterange.length - 1;
return e.uri + '-' + e.byterange.offset + '-' + t;
}
function El (e, t) {
var i, n, r = {};
for (var a in e) {
var s = e[a].sidx;
if (s) {
var o = Cl(s);
if (!t[o]) break;
var u = t[o].sidxInfo;
i = u, n = s, (Boolean(!i.map && !n.map) || Boolean(i.map && n.map && i.map.byterange.offset === n.map.byterange.offset && i.map.byterange.length === n.map.byterange.length)) && i.uri === n.uri && i.byterange.offset === n.byterange.offset && i.byterange.length === n.byterange.length && (r[o] = t[o]);
}
}
return r;
}
function wl (o, e, u, l, t, c) {
var d = {uri: ju(t.handleManifestRedirects, e.resolvedUri), byterange: e.byterange, playlist: u},
h = da.mergeOptions(d, {responseType: 'arraybuffer', headers: hl(d)});
return function (e, t, r) {
function a (e, t, i, n) {return t.abort(), u = !0, r(e, t, i, n);}
function i (e, t) {
if (!u) {
if (e) return a(e, t, '', o);
var i = t.responseText.substring(o && o.byteLength || 0, t.responseText.length);
if (o = Xo(o, Ko(i, !0)), s = s || Ho(o), o.length < 10 || s && o.length < s + 2) return Tl(t, function () {return a(e, t, '', o);});
var n = qo(o);
return 'ts' === n && o.length < 188 ? Tl(t, function () {return a(e, t, '', o);}) : !n && o.length < 376 ? Tl(t, function () {return a(e, t, '', o);}) : a(null, t, n, o);
}
}
var s, o = [], u = !1, n = t({
uri: e,
beforeSend: function (t) {
t.overrideMimeType('text/plain; charset=x-user-defined'), t.addEventListener('progress', function (e) {
e.total, e.loaded;
return cl(t, null, {statusCode: t.status}, i);
});
}
}, function (e, t) {return cl(n, e, t, i);});
return n;
}(d.uri, l, function (e, t, i, n) {
if (e) return c(e, t);
if (!i || 'mp4' !== i) return c({
status: t.status,
message: 'Unsupported ' + (i || 'unknown') + ' container type for sidx segment at URL: ' + d.uri,
response: '',
playlist: u,
internal: !0,
blacklistDuration: 1 / 0,
code: 2
}, t);
var r = d.byterange, a = r.offset, s = r.length;
if (n.length >= s + a) return c(e, {response: n.subarray(a, a + s), status: t.status, uri: t.uri});
o.request = l(h, c);
});
}
function Il (e) {
for (var t = new Uint8Array(new ArrayBuffer(e.length)), i = 0; i < e.length; i++) t[i] = e.charCodeAt(i);
return t.buffer;
}
function Al (e) {
var t = e.transmuxer, i = e.bytes, n = e.audioAppendStart, r = e.gopsToAlignWith, a = e.isPartial, s = e.remux,
o = e.onData, u = e.onTrackInfo, l = e.onAudioTimingInfo, c = e.onVideoTimingInfo, d = e.onVideoSegmentTimingInfo,
h = e.onId3, p = e.onCaptions, f = e.onDone, m = {isPartial: a, buffer: []};
if (t.onmessage = function (e) {
Bl && ('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, c = n.videoFramePtsTime;
t.buffer.push({captions: s, captionStreams: o, metadata: u});
var d = e.data.segment.boxes || {data: e.data.segment.data}, h = {
type: r,
data: new Uint8Array(d.data, d.data.byteOffset, d.data.byteLength),
initSegment: new Uint8Array(a.data, a.byteOffset, a.byteLength)
};
'undefined' != typeof l && (h.videoFrameDtsTime = l), 'undefined' != typeof c && (h.videoFramePtsTime = c), i(h);
}(e, m, o), 'trackinfo' === e.data.action && u(e.data.trackInfo), 'gopInfo' === e.data.action && function (e, t) {t.gopInfo = e.data.gopInfo;}(e, m), 'audioTimingInfo' === e.data.action && l(e.data.audioTimingInfo), 'videoTimingInfo' === e.data.action && c(e.data.videoTimingInfo), 'videoSegmentTimingInfo' === e.data.action && d(e.data.videoSegmentTimingInfo), 'id3Frame' === e.data.action && h([e.data.id3Frame], e.data.id3Frame.dispatchType), 'caption' === e.data.action && p(e.data.caption), 'transmuxed' === e.data.type && (t.onmessage = null, function (e) {
var t = e.transmuxedData, i = e.callback;
t.buffer = [], i(t);
}({transmuxedData: m, callback: f}), cc()));
}, n && t.postMessage({
action: 'setAudioAppendStart',
appendStart: n
}), Array.isArray(r) && t.postMessage({
action: 'alignGopsWith',
gopsToAlignWith: r
}), 'undefined' != typeof s && t.postMessage({
action: 'setRemux',
remux: s
}), i.byteLength) {
var g = i instanceof ArrayBuffer ? i : i.buffer, v = i instanceof ArrayBuffer ? 0 : i.byteOffset;
t.postMessage({action: 'push', data: g, byteOffset: v, byteLength: i.byteLength}, [g]);
}
t.postMessage({action: a ? 'partialFlush' : 'flush'});
}
function xl (e, t) {e.postMessage({action: t}), cc();}
function Pl (e, t) {Bl ? lc.push(xl.bind(null, t, e)) : xl(t, Bl = e);}
function Ll (e) {Bl ? lc.push(e) : Al(Bl = e);}
function Ol (e) {e.forEach(function (e) {e.abort();});}
function Dl (e, t) {
return t.timedout ? {
status: t.status,
message: 'HLS request timed-out at URL: ' + t.uri,
code: mc,
xhr: t
} : t.aborted ? {
status: t.status,
message: 'HLS request aborted at URL: ' + t.uri,
code: gc,
xhr: t
} : e ? {status: t.status, message: 'HLS request errored at URL: ' + t.uri, code: fc, xhr: t} : null;
}
function Ml (e) {
var i = e.segment, t = e.bytes, n = e.isPartial, r = e.trackInfoFn, a = e.timingInfoFn,
s = e.videoSegmentTimingInfoFn, o = e.id3Fn, u = e.captionsFn, l = e.dataFn, c = e.doneFn,
d = i.map && i.map.tracks || {}, h = Boolean(d.audio && d.video), p = a.bind(null, i, 'audio', 'start'),
f = a.bind(null, i, 'audio', 'end'), m = a.bind(null, i, 'video', 'start'), g = a.bind(null, i, 'video', 'end');
if (!n && !i.lastReachedChar) {
var v = function (e, t) {
var i = Eu(e, t * fu);
if (!i) return null;
var n = {hasVideo: i.video && 2 === i.video.length || !1, hasAudio: i.audio && 2 === i.audio.length || !1};
return n.hasVideo && (n.videoStart = i.video[0].ptsTime), n.hasAudio && (n.audioStart = i.audio[0].ptsTime), n;
}(t, i.baseStartTime);
v && (r(i, {
hasAudio: v.hasAudio,
hasVideo: v.hasVideo,
isMuxed: h
}), r = null, v.hasAudio && !h && p(v.audioStart), v.hasVideo && m(v.videoStart), m = p = null);
}
Ll({
bytes: t,
transmuxer: i.transmuxer,
audioAppendStart: i.audioAppendStart,
gopsToAlignWith: i.gopsToAlignWith,
isPartial: n,
remux: h,
onData: function (e) {e.type = 'combined' === e.type ? 'video' : e.type, l(i, e);},
onTrackInfo: function (e) {r && (h && (e.isMuxed = !0), r(i, e));},
onAudioTimingInfo: function (e) {p && 'undefined' != typeof e.start && (p(e.start), p = null), f && 'undefined' != typeof e.end && f(e.end);},
onVideoTimingInfo: function (e) {m && 'undefined' != typeof e.start && (m(e.start), m = null), g && 'undefined' != typeof e.end && g(e.end);},
onVideoSegmentTimingInfo: function (e) {s(e);},
onId3: function (e, t) {o(i, e, t);},
onCaptions: function (e) {u(i, [e]);},
onDone: function (e) {c && !n && (e.type = 'combined' === e.type ? 'video' : e.type, c(null, i, e));}
});
}
function Rl (e) {
var n = e.segment, r = e.bytes, t = e.isPartial, i = e.trackInfoFn, a = e.timingInfoFn,
s = e.videoSegmentTimingInfoFn, o = e.id3Fn, u = e.captionsFn, l = e.dataFn, c = e.doneFn, d = new Uint8Array(r);
if (Wo(d)) {
n.isFmp4 = !0;
var h = n.map.tracks, p = {isFmp4: !0, hasVideo: !!h.video, hasAudio: !!h.audio};
h.audio && h.audio.codec && 'enca' !== h.audio.codec && (p.audioCodec = h.audio.codec), h.video && h.video.codec && 'encv' !== h.video.codec && (p.videoCodec = h.video.codec), h.video && h.audio && (p.isMuxed = !0), i(n, p);
var f = Uu(n.map.timescales, d);
p.hasAudio && !p.isMuxed && a(n, 'audio', 'start', f), p.hasVideo && a(n, 'video', 'start', f);
var m = function (e) {
l(n, {
data: r,
type: p.hasAudio && !p.isMuxed ? 'audio' : 'video'
}), e && e.length && u(n, e), c(null, n, {});
};
if (!h.video || !r.byteLength || !n.transmuxer) return void m();
var g = r instanceof ArrayBuffer ? r : r.buffer, v = r instanceof ArrayBuffer ? 0 : r.byteOffset;
return n.transmuxer.addEventListener('message', function e (t) {
if ('mp4Captions' === t.data.action) {
n.transmuxer.removeEventListener('message', e);
var i = t.data.data;
n.bytes = r = new Uint8Array(i, i.byteOffset || 0, i.byteLength), m(t.data.captions);
}
}), void n.transmuxer.postMessage({
action: 'pushMp4Captions',
timescales: n.map.timescales,
trackIds: [h.video.id],
data: g,
byteOffset: v,
byteLength: r.byteLength
}, [g]);
}
if (n.transmuxer) {
if ('undefined' == typeof n.container && (n.container = qo(d)), 'ts' !== n.container && 'aac' !== n.container) return i(n, {
hasAudio: !1,
hasVideo: !1
}), void c(null, n, {});
Ml({
segment: n,
bytes: r,
isPartial: t,
trackInfoFn: i,
timingInfoFn: a,
videoSegmentTimingInfoFn: s,
id3Fn: o,
captionsFn: u,
dataFn: l,
doneFn: c
});
} else c(null, n, {});
}
function Nl (e) {
var i = e.activeXhrs, n = e.decryptionWorker, r = e.trackInfoFn, a = e.timingInfoFn, s = e.videoSegmentTimingInfoFn,
o = e.id3Fn, u = e.captionsFn, l = e.dataFn, c = e.doneFn, d = 0, h = !1;
return function (e, t) {
if (!h) {
if (e) return h = !0, Ol(i), c(e, t);
if ((d += 1) === i.length) {
if (t.endOfAllRequests = Date.now(), t.encryptedBytes) return function (e) {
var t, n = e.decryptionWorker, r = e.segment, a = e.trackInfoFn, s = e.timingInfoFn,
o = e.videoSegmentTimingInfoFn, u = e.id3Fn, l = e.captionsFn, c = e.dataFn, d = e.doneFn;
n.addEventListener('message', function e (t) {
if (t.data.source === r.requestId) {
n.removeEventListener('message', e);
var i = t.data.decrypted;
r.bytes = new Uint8Array(i.bytes, i.byteOffset, i.byteLength), Rl({
segment: r,
bytes: r.bytes,
isPartial: !1,
trackInfoFn: a,
timingInfoFn: s,
videoSegmentTimingInfoFn: o,
id3Fn: u,
captionsFn: l,
dataFn: c,
doneFn: d
});
}
}), t = r.key.bytes.slice ? r.key.bytes.slice() : new Uint32Array(Array.prototype.slice.call(r.key.bytes)), n.postMessage(ml({
source: r.requestId,
encrypted: r.encryptedBytes,
key: t,
iv: r.key.iv
}), [r.encryptedBytes.buffer, t.buffer]);
}({
decryptionWorker: n,
segment: t,
trackInfoFn: r,
timingInfoFn: a,
videoSegmentTimingInfoFn: s,
id3Fn: o,
captionsFn: u,
dataFn: l,
doneFn: c
});
Rl({
segment: t,
bytes: t.bytes,
isPartial: !1,
trackInfoFn: r,
timingInfoFn: a,
videoSegmentTimingInfoFn: s,
id3Fn: o,
captionsFn: u,
dataFn: l,
doneFn: c
});
}
}
};
}
function Ul (e) {
var n = e.segment, r = e.progressFn, a = e.trackInfoFn, s = e.timingInfoFn, o = e.videoSegmentTimingInfoFn,
u = e.id3Fn, l = e.captionsFn, c = e.dataFn, d = e.handlePartialData;
return function (e) {
var t = e.target;
if (!t.aborted) {
if (d && !n.key && t.responseText && 8 <= t.responseText.length) {
var i = Il(t.responseText.substring(n.lastReachedChar || 0));
!n.lastReachedChar && Wo(new Uint8Array(i)) || (n.lastReachedChar = t.responseText.length, Rl({
segment: n,
bytes: i,
isPartial: !0,
trackInfoFn: a,
timingInfoFn: s,
videoSegmentTimingInfoFn: o,
id3Fn: u,
captionsFn: l,
dataFn: c
}));
}
return n.stats = da.mergeOptions(n.stats, function (e) {
var t = e.target, i = {bandwidth: 1 / 0, bytesReceived: 0, roundTripTime: Date.now() - t.requestTime || 0};
return i.bytesReceived = e.loaded, i.bandwidth = Math.floor(i.bytesReceived / i.roundTripTime * 8 * 1e3), i;
}(e)), !n.stats.firstBytesReceivedAt && n.stats.bytesReceived && (n.stats.firstBytesReceivedAt = Date.now()), r(e, n);
}
};
}
function Fl (e) {
var t = e.xhr, i = e.xhrOptions, n = e.decryptionWorker, r = e.segment, a = e.abortFn, s = e.progressFn,
o = e.trackInfoFn, u = e.timingInfoFn, l = e.videoSegmentTimingInfoFn, c = e.id3Fn, d = e.captionsFn,
h = e.dataFn, p = e.doneFn, f = e.handlePartialData, m = [], g = Nl({
activeXhrs: m,
decryptionWorker: n,
trackInfoFn: o,
timingInfoFn: u,
videoSegmentTimingInfoFn: l,
id3Fn: c,
captionsFn: d,
dataFn: h,
doneFn: p
});
if (r.key && !r.key.bytes) {
var v = t(da.mergeOptions(i, {
uri: r.key.resolvedUri,
responseType: 'arraybuffer'
}), function (a, s) {
return function (e, t) {
var i = t.response, n = Dl(e, t);
if (n) return s(n, a);
if (16 !== i.byteLength) return s({
status: t.status,
message: 'Invalid HLS key at URL: ' + t.uri,
code: fc,
xhr: t
}, a);
var r = new DataView(i);
return a.key.bytes = new Uint32Array([r.getUint32(0), r.getUint32(4), r.getUint32(8), r.getUint32(12)]), s(null, a);
};
}(r, g));
m.push(v);
}
if (r.map && !r.map.bytes) {
var y = t(da.mergeOptions(i, {
uri: r.map.resolvedUri,
responseType: 'arraybuffer',
headers: hl(r.map)
}), function (e) {
var a = e.segment, s = e.finishProcessingFn;
return function (e, t) {
var i = t.response, n = Dl(e, t);
if (n) return s(n, a);
if (0 === i.byteLength) return s({
status: t.status,
message: 'Empty HLS segment content at URL: ' + t.uri,
code: fc,
xhr: t
}, a);
a.map.bytes = new Uint8Array(t.response);
var r = qo(a.map.bytes);
return 'mp4' !== r ? s({
status: t.status,
message: 'Found unsupported ' + (r || 'unknown') + ' container for initialization segment at URL: ' + t.uri,
code: fc,
internal: !0,
xhr: t
}, a) : (Fu(a.map.bytes).forEach(function (e) {a.map.tracks = a.map.tracks || {}, a.map.tracks[e.type] || (a.map.tracks[e.type] = e).id && e.timescale && (a.map.timescales = a.map.timescales || {}, a.map.timescales[e.id] = e.timescale);}), s(null, a));
};
}({segment: r, finishProcessingFn: g}));
m.push(y);
}
var _ = da.mergeOptions(i, {uri: r.resolvedUri, responseType: 'arraybuffer', headers: hl(r)});
f && (_.responseType = 'text', _.beforeSend = function (e) {e.overrideMimeType('text/plain; charset=x-user-defined');});
var b = t(_, function (e) {
var a = e.segment, s = e.finishProcessingFn, o = e.responseType;
return function (e, t) {
var i = t.response, n = Dl(e, t);
if (n) return s(n, a);
var r = 'arraybuffer' !== o && t.responseText ? Il(t.responseText.substring(a.lastReachedChar || 0)) : t.response;
return 0 === i.byteLength ? s({
status: t.status,
message: 'Empty HLS segment content at URL: ' + t.uri,
code: fc,
xhr: t
}, a) : (a.stats = function (e) {
return {
bandwidth: e.bandwidth,
bytesReceived: e.bytesReceived || 0,
roundTripTime: e.roundTripTime || 0
};
}(t), a.key ? a.encryptedBytes = new Uint8Array(r) : a.bytes = new Uint8Array(r), s(null, a));
};
}({segment: r, finishProcessingFn: g, responseType: _.responseType}));
b.addEventListener('progress', Ul({
segment: r,
progressFn: s,
trackInfoFn: o,
timingInfoFn: u,
videoSegmentTimingInfoFn: l,
id3Fn: c,
captionsFn: d,
dataFn: h,
handlePartialData: f
})), m.push(b);
var T = {};
return m.forEach(function (e) {
e.addEventListener('loadend', function (e) {
var t = e.loadendState, i = e.abortFn;
return function (e) {e.target.aborted && i && !t.calledAbortFn && (i(), t.calledAbortFn = !0);};
}({loadendState: T, abortFn: a}));
}), function () {return Ol(m);};
}
var Bl, jl = Bu.DEFAULT_AUDIO_CODEC, Vl = Bu.DEFAULT_VIDEO_CODEC, ql = Bu.browserSupportsCodec,
Hl = Bu.codecsFromDefault, Wl = Bu.getMimeForCodec, zl = Bu.isAudioCodec, Gl = Bu.isVideoCodec,
Xl = (Bu.mapLegacyAvcCodecs, Bu.muxerSupportsCodec), Kl = Bu.parseCodecs, Yl = Bu.translateLegacyCodec,
$l = (Bu.translateLegacyCodecs, va), Ql = da.log, Jl = da.mergeOptions, Zl = function (c) {
function e (e, t, i) {
var n;
if (void 0 === i && (i = {}), n = c.call(this) || this, !e) throw new Error('A non-empty playlist URL or object is required');
var r = i, a = r.withCredentials, s = void 0 !== a && a, o = r.handleManifestRedirects, u = void 0 !== o && o;
n.src = e, n.vhs_ = t, n.withCredentials = s, n.handleManifestRedirects = u;
var l = t.options_;
return n.customTagParsers = l && l.customTagParsers || [], n.customTagMappers = l && l.customTagMappers || [], n.state = 'HAVE_NOTHING', n.on('mediaupdatetimeout', function () {
'HAVE_METADATA' === n.state && (n.state = 'HAVE_CURRENT_METADATA', n.request = n.vhs_.xhr({
uri: $l(n.master.uri, n.media().uri),
withCredentials: n.withCredentials
}, function (e, t) {
if (n.request) return e ? n.playlistRequestError(n.request, n.media(), 'HAVE_METADATA') : void n.haveMetadata({
playlistString: n.request.responseText,
url: n.media().uri,
id: n.media().id
});
}));
}), n;
}
Ge(e, c);
var t = e.prototype;
return t.playlistRequestError = function (e, t, i) {
var n = t.uri, r = t.id;
this.request = null, i && (this.state = i), this.error = {
playlist: this.master.playlists[r],
status: e.status,
message: 'HLS playlist request error at URL: ' + n + '.',
responseText: e.responseText,
code: 500 <= e.status ? 4 : 2
}, this.trigger('error');
}, t.haveMetadata = function (e) {
var t = this, i = e.playlistString, n = e.playlistObject, r = e.url, a = e.id;
this.request = null, this.state = 'HAVE_METADATA';
var s = n || qu({
manifestString: i,
customTagParsers: this.customTagParsers,
customTagMappers: this.customTagMappers
});
Wu({playlist: s, uri: r, id: a});
var o = Xu(this.master, s);
this.targetDuration = s.targetDuration, o ? (this.master = o, this.media_ = this.master.playlists[a]) : this.trigger('playlistunchanged'), this.media().endList || (T.clearTimeout(this.mediaUpdateTimeout), this.mediaUpdateTimeout = T.setTimeout(function () {t.trigger('mediaupdatetimeout');}, Ku(this.media(), !!o))), this.trigger('loadedplaylist');
}, t.dispose = function () {this.trigger('dispose'), this.stopRequest(), T.clearTimeout(this.mediaUpdateTimeout), T.clearTimeout(this.finalRenditionTimeout), this.off();}, t.stopRequest = function () {
if (this.request) {
var 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 (T.clearTimeout(this.finalRenditionTimeout), e) {
var t = i.targetDuration / 2 * 1e3 || 5e3;
this.finalRenditionTimeout = T.setTimeout(this.media.bind(this, i, !1), t);
} else {
var r = this.state, a = !this.media_ || i.id !== this.media_.id;
if (this.master.playlists[i.id].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 (a && (this.trigger('mediachanging'), 'HAVE_MASTER' === r ? this.trigger('loadedmetadata') : this.trigger('mediachange')));
if (a) {
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.request = this.vhs_.xhr({
uri: i.resolvedUri,
withCredentials: this.withCredentials
}, function (e, t) {
if (n.request) {
if (i.resolvedUri = ju(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.stopRequest(), T.clearTimeout(this.mediaUpdateTimeout), '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;
T.clearTimeout(this.mediaUpdateTimeout);
var i = this.media();
if (e) {
var n = i ? i.targetDuration / 2 * 1e3 : 5e3;
this.mediaUpdateTimeout = T.setTimeout(function () {return t.load();}, n);
} else this.started ? i && !i.endList ? this.trigger('mediaupdatetimeout') : this.trigger('loadedplaylist') : this.start();
}, t.start = function () {
var n = this;
if (this.started = !0, 'object' == typeof this.src) return this.src.uri || (this.src.uri = T.location.href), this.src.resolvedUri = this.src.uri, void setTimeout(function () {n.setupInitialPlaylist(n.src);}, 0);
this.request = this.vhs_.xhr({
uri: this.src,
withCredentials: this.withCredentials
}, function (e, t) {
if (n.request) {
if (n.request = null, e) return n.error = {
status: t.status,
message: 'HLS playlist request error at URL: ' + n.src + '.',
responseText: t.responseText,
code: 2
}, 'HAVE_NOTHING' === n.state && (n.started = !1), n.trigger('error');
n.src = ju(n.handleManifestRedirects, n.src, t);
var i = qu({
manifestString: t.responseText,
customTagParsers: n.customTagParsers,
customTagMappers: n.customTagMappers
});
n.setupInitialPlaylist(i);
}
});
}, 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, zu(this.master, this.srcUri()), e.playlists.forEach(function (t) {t.segments && t.segments.forEach(function (e) {Gu(e, t.resolvedUri);});}), this.trigger('loadedplaylist'), void (this.request || this.media(this.master.playlists[0]));
var t = this.srcUri() || T.location.href;
this.master = function (e, t) {
var i = Vu(0, t), n = {
mediaGroups: {AUDIO: {}, VIDEO: {}, 'CLOSED-CAPTIONS': {}, SUBTITLES: {}},
uri: T.location.href,
resolvedUri: T.location.href,
playlists: [{uri: t, id: i, resolvedUri: t, attributes: {}}]
};
return n.playlists[i] = n.playlists[0], n.playlists[t] = n.playlists[0], n;
}(0, t), this.haveMetadata({
playlistObject: e,
url: t,
id: this.master.playlists[0].id
}), this.trigger('loadedmetadata');
}, e;
}(da.EventTarget), ec = 1 / 30, tc = da.createTimeRange, ic = {
duration: tl,
seekable: function (e, t, i) {
var n = t || 0, r = rl(e, t, !0, i);
return null === r ? tc() : tc(n, r);
},
safeLiveIndex: nl,
getMediaInfoForTime: function (e, t, i, n) {
var r, a = e.segments.length, s = t - n;
if (s < 0) {
if (0 < i) for (r = i - 1; 0 <= r; r--) if (0 < (s += e.segments[r].duration + ec)) return {
mediaIndex: r,
startTime: n - il(e, i, r)
};
return {mediaIndex: 0, startTime: t};
}
if (i < 0) {
for (r = i; r < 0; r++) if ((s -= e.targetDuration) < 0) return {mediaIndex: 0, startTime: t};
i = 0;
}
for (r = i; r < a; r++) if ((s -= e.segments[r].duration + ec) < 0) return {
mediaIndex: r,
startTime: n + il(e, i, r)
};
return {mediaIndex: a - 1, startTime: t};
},
isEnabled: ol,
isDisabled: function (e) {return e.disabled;},
isBlacklisted: al,
isIncompatible: sl,
playlistEnd: rl,
isAes: function (e) {
for (var t = 0; t < e.segments.length; t++) if (e.segments[t].key) return !0;
return !1;
},
hasAttribute: ul,
estimateSegmentRequestTime: function (e, t, i, n) {return void 0 === n && (n = 0), ul('BANDWIDTH', i) ? (e * i.attributes.BANDWIDTH - 8 * n) / t : NaN;},
isLowestEnabledRendition: ll
}, nc = da.xhr, rc = da.mergeOptions, ac = Object.freeze({
__proto__: null,
createTransferableMessage: ml,
initSegmentId: gl,
segmentKeyId: vl,
hexDump: yl,
tagDump: function (e) {
var t = e.bytes;
return yl(t);
},
textRanges: function (e) {
var t, i, n, r = '';
for (t = 0; t < e.length; t++) r += (n = t, (i = e).start(n) + '-' + i.end(n) + ' ');
return r;
}
}), sc = da.mergeOptions, oc = function (c) {
function e (e, t, i, n) {
var r;
void 0 === i && (i = {}), r = c.call(this) || this;
var a = i, s = a.withCredentials, o = void 0 !== s && s, u = a.handleManifestRedirects, l = void 0 !== u && u;
if (r.vhs_ = t, r.withCredentials = o, r.handleManifestRedirects = l, !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_ = {}, 'string' == typeof e ? (r.srcUrl = e, r.sidxMapping_ = {}, Ve(r)) : (r.setupChildLoader(n, e), r);
}
Ge(e, c);
var t = e.prototype;
return t.setupChildLoader = function (e, t) {this.masterPlaylistLoader_ = e, this.childPlaylist_ = t;}, t.dispose = function () {this.trigger('dispose'), this.stopRequest(), this.loadedPlaylists_ = {}, T.clearTimeout(this.minimumUpdatePeriodTimeout_), T.clearTimeout(this.mediaRequest_), T.clearTimeout(this.mediaUpdateTimeout), this.off();}, t.hasPendingRequest = function () {return this.request || this.mediaRequest_;}, t.stopRequest = function () {
if (this.request) {
var e = this.request;
this.request = null, e.onreadystatechange = null, e.abort();
}
}, t.sidxRequestFinished_ = function (r, a, s, o) {
var u = this;
return function (e, t) {
if (u.request) {
if (u.request = null, e) return u.error = 'object' == typeof e ? e : {
status: t.status,
message: 'DASH playlist request error at URL: ' + r.uri,
response: t.response,
code: 2
}, s && (u.state = s), void u.trigger('error');
var i = Yo(t.response), n = jo(i.subarray(8));
return o(a, n);
}
};
}, t.media = function (i) {
var n = this;
if (!i) return this.media_;
if ('HAVE_NOTHING' === this.state) throw new Error('Cannot switch media playlist from ' + this.state);
var r = this.state;
if ('string' == typeof i) {
if (!this.master.playlists[i]) throw new Error('Unknown playlist URI: ' + i);
i = this.master.playlists[i];
}
var e = !this.media_ || i.id !== this.media_.id;
if (e && this.loadedPlaylists_[i.id] && this.loadedPlaylists_[i.id].endList) return this.state = 'HAVE_METADATA', this.media_ = i, void (e && (this.trigger('mediachanging'), this.trigger('mediachange')));
if (e) if (this.media_ && this.trigger('mediachanging'), i.sidx) {
var t, a;
a = this.masterPlaylistLoader_ ? (t = this.masterPlaylistLoader_.master, this.masterPlaylistLoader_.sidxMapping_) : (t = this.master, this.sidxMapping_);
var s = Cl(i.sidx);
a[s] = {sidxInfo: i.sidx}, this.request = wl(this, i.sidx, i, this.vhs_.xhr, {handleManifestRedirects: this.handleManifestRedirects}, this.sidxRequestFinished_(i, t, r, function (e, t) {
if (!e || !t) throw new Error('failed to request sidx');
a[s].sidx = t, n.haveMetadata({startingState: r, playlist: e.playlists[i.id]});
}));
} else this.mediaRequest_ = T.setTimeout(this.haveMetadata.bind(this, {startingState: r, playlist: i}), 0);
}, t.haveMetadata = function (e) {
var t = e.startingState, i = e.playlist;
this.state = 'HAVE_METADATA', this.loadedPlaylists_[i.id] = i, this.mediaRequest_ = null, this.refreshMedia_(i.id), 'HAVE_MASTER' === t ? this.trigger('loadedmetadata') : this.trigger('mediachange');
}, t.pause = function () {this.stopRequest(), T.clearTimeout(this.mediaUpdateTimeout), T.clearTimeout(this.minimumUpdatePeriodTimeout_), 'HAVE_NOTHING' === this.state && (this.started = !1);}, t.load = function (e) {
var t = this;
T.clearTimeout(this.mediaUpdateTimeout), T.clearTimeout(this.minimumUpdatePeriodTimeout_);
var i = this.media();
if (e) {
var n = i ? i.targetDuration / 2 * 1e3 : 5e3;
this.mediaUpdateTimeout = T.setTimeout(function () {return t.load();}, n);
} else this.started ? i && !i.endList ? this.trigger('mediaupdatetimeout') : this.trigger('loadedplaylist') : this.start();
}, t.start = function () {
var i = this;
this.started = !0, this.masterPlaylistLoader_ ? this.mediaRequest_ = T.setTimeout(this.haveMaster_.bind(this), 0) : this.request = this.vhs_.xhr({
uri: this.srcUrl,
withCredentials: this.withCredentials
}, function (e, t) {
if (i.request) {
if (i.request = null, e) return i.error = {
status: t.status,
message: 'DASH playlist request error at URL: ' + i.srcUrl,
responseText: t.responseText,
code: 2
}, 'HAVE_NOTHING' === i.state && (i.started = !1), i.trigger('error');
i.masterXml_ = t.responseText, t.responseHeaders && t.responseHeaders.date ? i.masterLoaded_ = Date.parse(t.responseHeaders.date) : i.masterLoaded_ = Date.now(), i.srcUrl = ju(i.handleManifestRedirects, i.srcUrl, t), i.syncClientServerClock_(i.onClientServerClockSync_.bind(i));
}
});
}, t.syncClientServerClock_ = function (n) {
var r = this, a = wo(this.masterXml_);
return null === a ? (this.clientOffset_ = this.masterLoaded_ - Date.now(), n()) : 'DIRECT' === a.method ? (this.clientOffset_ = a.value - Date.now(), n()) : void (this.request = this.vhs_.xhr({
uri: $l(this.srcUrl, a.value),
method: a.method,
withCredentials: this.withCredentials
}, function (e, t) {
if (r.request) {
if (e) return r.clientOffset_ = r.masterLoaded_ - Date.now(), n();
var i;
i = 'HEAD' === a.method ? t.responseHeaders && t.responseHeaders.date ? Date.parse(t.responseHeaders.date) : r.masterLoaded_ : Date.parse(t.responseText), r.clientOffset_ = i - Date.now(), n();
}
}));
}, t.haveMaster_ = function () {
this.state = 'HAVE_MASTER', this.mediaRequest_ = null, this.masterPlaylistLoader_ ? this.media_ || this.media(this.childPlaylist_) : (this.updateMainManifest_(Sl({
masterXml: this.masterXml_,
srcUrl: this.srcUrl,
clientOffset: this.clientOffset_,
sidxMapping: this.sidxMapping_
})), this.trigger('loadedplaylist'));
}, t.updateMinimumUpdatePeriodTimeout_ = function () {
var t = this;
T.clearTimeout(this.minimumUpdatePeriodTimeout_);
function e (e) {t.minimumUpdatePeriodTimeout_ = T.setTimeout(function () {t.trigger('minimumUpdatePeriod');}, e);}
var i = this.master && this.master.minimumUpdatePeriod;
0 < i ? e(i) : 0 === i && (this.media() ? e(1e3 * this.media().targetDuration) : this.one('loadedplaylist', function () {e(1e3 * t.media().targetDuration);}));
}, t.onClientServerClockSync_ = function () {this.haveMaster_(), this.hasPendingRequest() || this.media_ || this.media(this.master.playlists[0]), this.updateMinimumUpdatePeriodTimeout_();}, t.updateMainManifest_ = function (e) {
if (this.master = e, this.master.locations && this.master.locations.length) {
var t = this.master.locations[0];
t !== this.srcUrl && (this.srcUrl = t);
}
}, t.refreshXml_ = function () {
var o = this;
this.request = this.vhs_.xhr({uri: this.srcUrl, withCredentials: this.withCredentials}, function (e, t) {
if (o.request) {
if (o.request = null, e) return o.error = {
status: t.status,
message: 'DASH playlist request error at URL: ' + o.srcUrl,
responseText: t.responseText,
code: 2
}, 'HAVE_NOTHING' === o.state && (o.started = !1), o.trigger('error');
o.masterXml_ = t.responseText, o.sidxMapping_ = function (e, t, i, a) {
var n = Eo(e, {
manifestUri: t,
clientOffset: i
}), s = El(n.playlists, a);
return Hu(n, function (e, t, i, n) {
if (e.playlists && e.playlists.length) {
var r = e.playlists;
s = sc(s, El(r, a));
}
}), s;
}(o.masterXml_, o.srcUrl, o.clientOffset_, o.sidxMapping_);
var i = Sl({
masterXml: o.masterXml_,
srcUrl: o.srcUrl,
clientOffset: o.clientOffset_,
sidxMapping: o.sidxMapping_
}), n = kl(o.master, i), r = o.media().sidx;
if (n) if (r) {
var a = Cl(r);
if (!o.sidxMapping_[a]) {
var s = o.media();
o.request = wl(o, s.sidx, s, o.vhs_.xhr, {handleManifestRedirects: o.handleManifestRedirects}, o.sidxRequestFinished_(s, i, o.state, function (e, t) {
if (!e || !t) throw new Error('failed to request sidx on minimumUpdatePeriod');
o.sidxMapping_[a].sidx = t, o.updateMinimumUpdatePeriodTimeout_(), o.refreshMedia_(o.media().id);
}));
}
} else o.updateMainManifest_(n), o.media_ && (o.media_ = o.master.playlists[o.media_.id]);
o.updateMinimumUpdatePeriodTimeout_();
}
});
}, t.refreshMedia_ = function (e) {
var t, i, n = this;
if (!e) throw new Error('refreshMedia_ must take a media id');
i = this.masterPlaylistLoader_ ? (t = this.masterPlaylistLoader_.master, Sl({
masterXml: this.masterPlaylistLoader_.masterXml_,
srcUrl: this.masterPlaylistLoader_.srcUrl,
clientOffset: this.masterPlaylistLoader_.clientOffset_,
sidxMapping: this.masterPlaylistLoader_.sidxMapping_
})) : (t = this.master, Sl({
masterXml: this.masterXml_,
srcUrl: this.srcUrl,
clientOffset: this.clientOffset_,
sidxMapping: this.sidxMapping_
}));
var r = kl(t, i);
r ? (this.masterPlaylistLoader_ ? this.masterPlaylistLoader_.master = r : this.master = r, this.media_ = r.playlists[e]) : (this.media_ = t.playlists[e], this.trigger('playlistunchanged')), this.media().endList || (this.mediaUpdateTimeout = T.setTimeout(function () {n.trigger('mediaupdatetimeout');}, Ku(this.media(), !!r))), this.trigger('loadedplaylist');
}, e;
}(da.EventTarget), uc = {
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,
BUFFER_LOW_WATER_LINE_RATE: 1
}, lc = [], cc = function () {Bl = null, lc.length && ('function' == typeof (Bl = lc.shift()) ? Bl() : Al(Bl));},
dc = function (e) {Pl('reset', e);}, hc = function () {Bl = null, lc.length = 0;},
pc = function (e) {Pl('endTimeline', e);}, fc = 2, mc = -101, gc = -102,
vc = 'undefined' != typeof window ? window : {}, yc = 'undefined' == typeof Symbol ? '__target' : Symbol(),
_c = 'application/javascript', bc = vc.BlobBuilder || vc.WebKitBlobBuilder || vc.MozBlobBuilder || vc.MSBlobBuilder,
Tc = vc.URL || vc.webkitURL || Tc && Tc.msURL, Sc = vc.Worker;
function kc (r, a) {
return function (e) {
var t = this;
if (!a) return new Sc(r);
if (Sc && !e) {
var i = Ic(a.toString().replace(/^function.+?{/, '').slice(0, -1));
return this[yc] = new Sc(i), function (e, t) {
if (!e || !t) return;
var i = e.terminate;
e.objURL = t, e.terminate = function () {e.objURL && Tc.revokeObjectURL(e.objURL), i.call(e);};
}(this[yc], i), this[yc];
}
var n = {postMessage: function (e) {t.onmessage && setTimeout(function () {t.onmessage({data: e, target: n});});}};
a.call(n), this.postMessage = function (e) {
setTimeout(function () {
n.onmessage({
data: e,
target: t
});
});
}, this.isThisThread = !0;
};
}
if (Sc) {
var Cc, Ec = Ic('self.onmessage = function () {}'), wc = new Uint8Array(1);
try {(Cc = new Sc(Ec)).postMessage(wc, [wc.buffer]);} catch (e) {Sc = null;} finally {Tc.revokeObjectURL(Ec), Cc && Cc.terminate();}
}
function Ic (t) {
try {return Tc.createObjectURL(new Blob([t], {type: _c}));} catch (e) {
var i = new bc;
return i.append(t), Tc.createObjectURL(i.getBlob(type));
}
}
function Ac (e, t) {
var i = t.attributes || {};
return e && e.mediaGroups && e.mediaGroups.AUDIO && i.AUDIO && e.mediaGroups.AUDIO[i.AUDIO];
}
function xc (e, t) {
var i = t.attributes || {}, n = function (e) {
var t = e.attributes || {};
if (t.CODECS) return Kl(t.CODECS);
}(t) || {};
if (Ac(e, t) && !n.audio && !function (e, t) {
if (!Ac(e, t)) return !0;
var i = t.attributes || {}, n = e.mediaGroups.AUDIO[i.AUDIO];
for (var r in n) if (!n[r].uri && !n[r].playlists) return !0;
return !1;
}(e, t)) {
var r = Hl(e, i.AUDIO);
r && (n.audio = r.audio);
}
var a = {};
return n.video && (a.video = Yl('' + n.video.type + n.video.details)), n.audio && (a.audio = Yl('' + n.audio.type + n.audio.details)), a;
}
function Pc (e) {return da.log.debug ? da.log.debug.bind(da, 'VHS:', e + ' >') : function () {};}
function Lc (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 Oc (e, t) {
if (!e) return '';
var i = T.getComputedStyle(e);
return i ? i[t] : '';
}
function Dc (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 Mc (e, t) {
var i, n;
return e.attributes.BANDWIDTH && (i = e.attributes.BANDWIDTH), i = i || T.Number.MAX_VALUE, t.attributes.BANDWIDTH && (n = t.attributes.BANDWIDTH), i - (n = n || T.Number.MAX_VALUE);
}
function Rc (e) {
var t = e.inbandTextTracks, i = e.metadataArray, n = e.timestampOffset, r = e.videoDuration;
if (i) {
var a = T.WebKitDataCue || T.VTTCue, s = t.metadataTrack_;
if (s && (i.forEach(function (e) {
var i = e.cueTime + n;
!('number' != typeof i || T.isNaN(i) || i < 0) && i < 1 / 0 && e.frames.forEach(function (e) {
var t = new a(i, i, e.value || e.url || e.data || '');
t.frame = e, t.value = e, function (e) {
Object.defineProperties(e.frame, {
id: {get: function () {return da.log.warn('cue.frame.id is deprecated. Use cue.value.key instead.'), e.value.key;}},
value: {get: function () {return da.log.warn('cue.frame.value is deprecated. Use cue.value.data instead.'), e.value.data;}},
privateData: {get: function () {return da.log.warn('cue.frame.privateData is deprecated. Use cue.value.data instead.'), e.value.data;}}
});
}(t), s.addCue(t);
});
}), 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 i = c[e], n = Number(d[t + 1]) || r;
i.forEach(function (e) {e.endTime = n;});
});
}
}
}
function Nc (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 Uc (e) {return 'number' == typeof e && isFinite(e);}
function Fc (e) {return e + 'TimingInfo';}
function Bc (e) {
var t = e.segmentTimeline, i = e.currentTimeline, n = e.startOfSegment, r = e.buffered;
return e.overrideCheck || t !== i ? r.length ? r.end(r.length - 1) : n : null;
}
function jc (e) {
var t = e.timelineChangeController, i = e.currentTimeline, n = e.segmentTimeline, r = e.loaderType,
a = e.audioDisabled;
if (i === n) return !1;
if ('audio' === r) {
var s = t.lastTimelineChange({type: 'main'});
return !s || s.to !== n;
}
if ('main' === r && a) {
var o = t.pendingTimelineChange({type: 'audio'});
return !o || o.to !== n;
}
return !1;
}
var Vc = new kc('./transmuxer-worker.worker.js', function (e, t) {
var Zt = this;
/*! @name @videojs/http-streaming @version 2.2.4 @license Apache-2.0 */
!function () {
function e () {
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) {
var i;
return !!a[e] && (i = a[e].indexOf(t), a[e] = a[e].slice(), a[e].splice(i, 1), -1 < i);
}, this.trigger = function (e) {
var t, i, n, r;
if (t = a[e]) if (2 === arguments.length) for (n = t.length, i = 0; i < n; ++i) t[i].call(this, arguments[1]); else {
for (r = [], i = arguments.length, i = 1; i < arguments.length; ++i) r.push(arguments[i]);
for (n = t.length, i = 0; i < n; ++i) t[i].apply(this, r);
}
}, 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 l, t, i, r, a, n, s, o, u, c, d, h, p, f, m, g, v, y, _, b, T, S, k, C, E, w, I, A, x, P, L, O, D, M, R, N, U,
F, B, j, V = e, q = Math.pow(2, 32) - 1;
!function () {
var e;
if (S = {
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 (e in S) S.hasOwnProperty(e) && (S[e] = [e.charCodeAt(0), e.charCodeAt(1), e.charCodeAt(2), e.charCodeAt(3)]);
k = 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)]), C = new Uint8Array([0, 0, 0, 1]), w = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 118, 105, 100, 101, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 86, 105, 100, 101, 111, 72, 97, 110, 100, 108, 101, 114, 0]), I = 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]), A = {
video: w,
audio: I
}, L = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1]), P = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), O = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), D = O, M = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), R = O, x = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]);
}
}(), l = function (e) {
var t, i, n = [], r = 0;
for (t = 1; t < arguments.length; t++) n.push(arguments[t]);
for (t = n.length; t--;) r += n[t].byteLength;
for (i = new Uint8Array(r + 8), new DataView(i.buffer, i.byteOffset, i.byteLength).setUint32(0, i.byteLength), i.set(e, 4), t = 0, r = 8; t < n.length; t++) i.set(n[t], r), r += n[t].byteLength;
return i;
}, t = function () {return l(S.dinf, l(S.dref, L));}, i = function (e) {return l(S.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]));}, m = function (e) {return l(S.hdlr, A[e]);}, f = 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), l(S.mdhd, t);
}, p = function (e) {return l(S.mdia, f(e), m(e.type), n(e));}, a = function (e) {return l(S.mfhd, new Uint8Array([0, 0, 0, 0, (4278190080 & e) >> 24, (16711680 & e) >> 16, (65280 & e) >> 8, 255 & e]));}, n = function (e) {return l(S.minf, 'video' === e.type ? l(S.vmhd, x) : l(S.smhd, P), t(), v(e));}, s = function (e, t) {
for (var i = [], n = t.length; n--;) i[n] = _(t[n]);
return l.apply(null, [S.moof, a(e)].concat(i));
}, o = function (e) {
for (var t = e.length, i = []; t--;) i[t] = d(e[t]);
return l.apply(null, [S.moov, c(4294967295)].concat(i).concat(u(e)));
}, u = function (e) {
for (var t = e.length, i = []; t--;) i[t] = b(e[t]);
return l.apply(null, [S.mvex].concat(i));
}, c = function (e) {
var t = 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 l(S.mvhd, t);
}, g = function (e) {
var t, i, n = e.samples || [], r = new Uint8Array(4 + n.length);
for (i = 0; i < n.length; i++) t = n[i].flags, r[i + 4] = t.dependsOn << 4 | t.isDependedOn << 2 | t.hasRedundancy;
return l(S.sdtp, r);
}, v = function (e) {return l(S.stbl, y(e), l(S.stts, R), l(S.stsc, D), l(S.stsz, M), l(S.stco, O));}, y = function (e) {return l(S.stsd, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]), 'video' === e.type ? N(e) : U(e));}, N = function (e) {
var t, i, n = e.sps || [], r = e.pps || [], a = [], s = [];
for (t = 0; t < n.length; t++) a.push((65280 & n[t].byteLength) >>> 8), a.push(255 & n[t].byteLength), a = a.concat(Array.prototype.slice.call(n[t]));
for (t = 0; t < r.length; t++) s.push((65280 & r[t].byteLength) >>> 8), s.push(255 & r[t].byteLength), s = s.concat(Array.prototype.slice.call(r[t]));
if (i = [S.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]), l(S.avcC, new Uint8Array([1, e.profileIdc, e.profileCompatibility, e.levelIdc, 255].concat([n.length], a, [r.length], s))), l(S.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192]))], e.sarRatio) {
var o = e.sarRatio[0], u = e.sarRatio[1];
i.push(l(S.pasp, new Uint8Array([(4278190080 & o) >> 24, (16711680 & o) >> 16, (65280 & o) >> 8, 255 & o, (4278190080 & u) >> 24, (16711680 & u) >> 16, (65280 & u) >> 8, 255 & u])));
}
return l.apply(null, i);
}, U = function (e) {return l(S.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));}, h = function (e) {
var t = 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 l(S.tkhd, t);
}, _ = function (e) {
var t, i, n, r, a, s;
return t = l(S.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])), a = Math.floor(e.baseMediaDecodeTime / (1 + q)), s = Math.floor(e.baseMediaDecodeTime % (1 + q)), i = l(S.tfdt, new Uint8Array([1, 0, 0, 0, a >>> 24 & 255, a >>> 16 & 255, a >>> 8 & 255, 255 & a, s >>> 24 & 255, s >>> 16 & 255, s >>> 8 & 255, 255 & s])), 92, 'audio' === e.type ? (n = T(e, 92), l(S.traf, t, i, n)) : (r = g(e), n = T(e, r.length + 92), l(S.traf, t, i, n, r));
}, d = function (e) {return e.duration = e.duration || 4294967295, l(S.trak, h(e), p(e));}, b = 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), l(S.trex, t);
}, j = 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, o;
for (t += 20 + 16 * (a = e.samples || []).length, r = j(a, t), (n = new Uint8Array(r.length + 16 * a.length)).set(r), i = r.length, o = 0; o < a.length; o++) s = a[o], n[i++] = (4278190080 & s.duration) >>> 24, n[i++] = (16711680 & s.duration) >>> 16, n[i++] = (65280 & s.duration) >>> 8, n[i++] = 255 & s.duration, n[i++] = (4278190080 & s.size) >>> 24, n[i++] = (16711680 & s.size) >>> 16, n[i++] = (65280 & s.size) >>> 8, n[i++] = 255 & s.size, n[i++] = s.flags.isLeading << 2 | s.flags.dependsOn, n[i++] = s.flags.isDependedOn << 6 | s.flags.hasRedundancy << 4 | s.flags.paddingValue << 1 | s.flags.isNonSyncSample, n[i++] = 61440 & s.flags.degradationPriority, n[i++] = 15 & s.flags.degradationPriority, n[i++] = (4278190080 & s.compositionTimeOffset) >>> 24, n[i++] = (16711680 & s.compositionTimeOffset) >>> 16, n[i++] = (65280 & s.compositionTimeOffset) >>> 8, n[i++] = 255 & s.compositionTimeOffset;
return l(S.trun, n);
}, F = function (e, t) {
var i, n, r, a, s, o;
for (t += 20 + 8 * (a = e.samples || []).length, r = j(a, t), (i = new Uint8Array(r.length + 8 * a.length)).set(r), n = r.length, o = 0; o < a.length; o++) s = a[o], i[n++] = (4278190080 & s.duration) >>> 24, i[n++] = (16711680 & s.duration) >>> 16, i[n++] = (65280 & s.duration) >>> 8, i[n++] = 255 & s.duration, i[n++] = (4278190080 & s.size) >>> 24, i[n++] = (16711680 & s.size) >>> 16, i[n++] = (65280 & s.size) >>> 8, i[n++] = 255 & s.size;
return l(S.trun, i);
}, T = function (e, t) {return 'audio' === e.type ? F(e, t) : B(e, t);};
r = function () {return l(S.ftyp, k, C, k, E);};
function H (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 W (e) {
for (var t = []; e--;) t.push(0);
return t;
}
function z () {
if (!X) {
var e = {
96e3: [ue, [227, 64], W(154), [56]],
88200: [ue, [231], W(170), [56]],
64e3: [ue, [248, 192], W(240), [56]],
48e3: [ue, [255, 192], W(268), [55, 148, 128], W(54), [112]],
44100: [ue, [255, 192], W(268), [55, 163, 128], W(84), [112]],
32e3: [ue, [255, 192], W(268), [55, 234], W(226), [112]],
24e3: [ue, [255, 192], W(268), [55, 255, 128], W(268), [111, 112], W(126), [224]],
16e3: [ue, [255, 192], W(268), [55, 255, 128], W(268), [111, 255], W(269), [223, 108], W(195), [1, 192]],
12e3: [le, W(268), [3, 127, 248], W(268), [6, 255, 240], W(268), [13, 255, 224], W(268), [27, 253, 128], W(259), [56]],
11025: [le, W(268), [3, 127, 248], W(268), [6, 255, 240], W(268), [13, 255, 224], W(268), [27, 255, 192], W(268), [55, 175, 128], W(108), [112]],
8e3: [le, W(268), [3, 121, 16], W(47), [7]]
};
X = function (i) {return Object.keys(i).reduce(function (e, t) {return e[t] = new Uint8Array(i[t].reduce(function (e, t) {return e.concat(t);}, [])), e;}, {});}(e);
}
return X;
}
function G () {G.prototype.init.call(this), this.captionPackets_ = [], this.ccStreams_ = [new Me(0, 0), new Me(0, 1), new Me(1, 0), new Me(1, 1)], 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);}
var X, K, Y, $, Q, J = function (e) {return l(S.mdat, e);}, Z = s, ee = function (e) {
var t, i = r(), n = o(e);
return (t = new Uint8Array(i.byteLength + n.byteLength)).set(i), t.set(n, i.byteLength), t;
}, te = 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;
}, ie = 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;
}, ne = 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;
}, re = function (e, t) {
var i, n, r, a, s, o = t || 0, u = [];
for (i = 0; i < e.length; i++) for (a = e[i], n = 0; n < a.length; n++) s = a[n], o += (r = H(s, o)).size, u.push(r);
return u;
}, ae = function (e) {
var t, i, n, r, a, s, o = 0, u = e.byteLength, l = e.nalCount, c = new Uint8Array(u + 4 * l),
d = new DataView(c.buffer);
for (t = 0; t < e.length; t++) for (r = e[t], i = 0; i < r.length; i++) for (a = r[i], n = 0; n < a.length; n++) s = a[n], d.setUint32(o, s.data.byteLength), o += 4, c.set(s.data, o), o += s.data.byteLength;
return c;
}, se = function (e, t) {
var i, n = [];
return i = H(e, t || 0), n.push(i), n;
}, oe = function (e) {
var t, i, n = 0, r = e.byteLength, a = e.length, s = new Uint8Array(r + 4 * a), o = new DataView(s.buffer);
for (t = 0; t < e.length; t++) i = e[t], o.setUint32(n, i.data.byteLength), n += 4, s.set(i.data, n), n += i.data.byteLength;
return s;
}, ue = [33, 16, 5, 32, 164, 27], le = [33, 65, 108, 84, 1, 2, 4, 8, 168, 2, 4, 8, 17, 191, 252], ce = 9e4,
de = (Y = function (e, t) {return e * t;}, $ = function (e) {return e / 9e4;}),
he = (Q = function (e, t) {return e / t;}, function (e, t) {return K(Q(e, t));}),
pe = function (e, t) {return Y($(e), t);}, fe = function (e, t, i) {return $(i ? e : e - t);},
me = K = function (e) {return 9e4 * e;}, ge = de, ve = function (e, t, i, n) {
var r, a, s, o, u, l = 0, c = 0, d = 0;
if (t.length && (r = he(e.baseMediaDecodeTime, e.samplerate), a = Math.ceil(ce / (e.samplerate / 1024)), i && n && (l = r - Math.max(i, n), d = (c = Math.floor(l / a)) * a), !(c < 1 || ce / 2 < d))) {
for (s = (s = z()[e.samplerate]) || t[0].data, o = 0; o < c; o++) u = t[0], t.splice(0, 0, {
data: s,
dts: u.dts - a,
pts: u.pts - a
});
e.baseMediaDecodeTime -= Math.floor(pe(d, e.samplerate));
}
},
ye = 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);}));},
_e = function (e) {
var t, i, n = [];
for (t = 0; t < e.length; t++) i = e[t], n.push({size: i.data.byteLength, duration: 1024});
return n;
}, be = function (e) {
var t, i, n = 0, r = new Uint8Array(function (e) {
var t, i = 0;
for (t = 0; t < e.length; t++) i += e[t].data.byteLength;
return i;
}(e));
for (t = 0; t < e.length; t++) i = e[t], r.set(i.data, n), n += i.data.byteLength;
return r;
}, Te = ce,
Se = function (e) {delete e.minSegmentDts, delete e.maxSegmentDts, delete e.minSegmentPts, delete e.maxSegmentPts;},
ke = function (e, t) {
var i, n = e.minSegmentDts;
return t || (n -= e.timelineStartInfo.dts), i = e.timelineStartInfo.baseMediaDecodeTime, i += n, i = Math.max(0, i), 'audio' === e.type && (i *= e.samplerate / Te, i = Math.floor(i)), i;
},
Ce = 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));},
Ee = 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] ? null : 49 != (e.payload[1] << 8 | e.payload[2]) ? null : 'GA94' !== String.fromCharCode(e.payload[3], e.payload[4], e.payload[5], e.payload[6]) ? null : 3 !== e.payload[7] ? null : e.payload.subarray(8, e.payload.length - 1);},
Ie = 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;
}, Ae = function (e) {
for (var t, i, n = e.byteLength, r = [], a = 1; a < n - 2;) 0 === e[a] && 0 === e[a + 1] && 3 === e[a + 2] ? (r.push(a + 2), a += 2) : a++;
if (0 === r.length) return e;
t = n - r.length, i = new Uint8Array(t);
var s = 0;
for (a = 0; a < t; s++, a++) s === r[0] && (s++, r.shift()), i[a] = e[s];
return i;
}, xe = 4;
(G.prototype = new V).push = function (e) {
var t, i, n;
if ('sei_rbsp' === e.nalUnitType && (t = Ee(e.escapedRBSP)).payloadType === xe && (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));
n = Ie(e.pts, i), this.captionPackets_ = this.captionPackets_.concat(n), this.latestDts_ !== e.dts && (this.numSameDts_ = 0), this.numSameDts_++, this.latestDts_ = e.dts;
}
}, G.prototype.flushCCStreams = function (t) {this.ccStreams_.forEach(function (e) {return 'flush' === t ? e.flush() : e.partialFlush();}, this);}, G.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), this.captionPackets_.length = 0), this.flushCCStreams(e);}, G.prototype.flush = function () {return this.flushStream('flush');}, G.prototype.partialFlush = function () {return this.flushStream('partialFlush');}, G.prototype.reset = function () {this.latestDts_ = null, this.ignoreNextEqualDts_ = !1, this.numSameDts_ = 0, this.activeCea608Channel_ = [null, null], this.ccStreams_.forEach(function (e) {e.reset();});}, G.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);}, G.prototype.setsChannel1Active = function (e) {return 4096 == (30720 & e.ccData);}, G.prototype.setsChannel2Active = function (e) {return 6144 == (30720 & e.ccData);}, G.prototype.setsTextOrXDSActive = function (e) {return 256 == (28928 & e.ccData) || 4138 == (30974 & e.ccData) || 6186 == (30974 & e.ccData);};
function Pe (e) {return null === e ? '' : (e = Oe[e] || e, String.fromCharCode(e));}
function Le () {
for (var e = [], t = 15; t--;) e.push('');
return e;
}
var Oe = {
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
}, De = [4352, 4384, 4608, 4640, 5376, 5408, 5632, 5664, 5888, 5920, 4096, 4864, 4896, 5120, 5152],
Me = 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;
if ((t = 32639 & e.ccData) !== this.lastControlCode_) {
if (4096 == (61440 & t) ? this.lastControlCode_ = t : t !== this.PADDING_ && (this.lastControlCode_ = null), n = t >>> 8, r = 255 & t, t !== this.PADDING_) if (t === this.RESUME_CAPTION_LOADING_) this.mode_ = 'popOn'; else if (t === this.END_OF_CAPTION_) this.mode_ = 'popOn', this.clearFormatting(e.pts), this.flushDisplayed(e.pts), i = this.displayed_, this.displayed_ = this.nonDisplayed_, this.nonDisplayed_ = i, this.startPts_ = e.pts; else if (t === this.ROLL_UP_2_ROWS_) this.rollUpRows_ = 2, this.setRollUp(e.pts); else if (t === this.ROLL_UP_3_ROWS_) this.rollUpRows_ = 3, this.setRollUp(e.pts); else if (t === this.ROLL_UP_4_ROWS_) this.rollUpRows_ = 4, this.setRollUp(e.pts); else if (t === this.CARRIAGE_RETURN_) this.clearFormatting(e.pts), this.flushDisplayed(e.pts), this.shiftRowsUp_(), this.startPts_ = e.pts; else if (t === 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); else if (t === this.ERASE_DISPLAYED_MEMORY_) this.flushDisplayed(e.pts), this.displayed_ = Le(); else if (t === this.ERASE_NON_DISPLAYED_MEMORY_) this.nonDisplayed_ = Le(); else if (t === this.RESUME_DIRECT_CAPTIONING_) 'paintOn' !== this.mode_ && (this.flushDisplayed(e.pts), this.displayed_ = Le()), this.mode_ = 'paintOn', this.startPts_ = e.pts; else if (this.isSpecialCharacter(n, r)) a = Pe((n = (3 & n) << 8) | r), this[this.mode_](e.pts, a), this.column_++; else if (this.isExtCharacter(n, r)) '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 = Pe((n = (3 & n) << 8) | r), this[this.mode_](e.pts, a), this.column_++; else if (this.isMidRowCode(n, r)) this.clearFormatting(e.pts), this[this.mode_](e.pts, ' '), this.column_++, 14 == (14 & r) && this.addFormatting(e.pts, ['i']), 1 == (1 & r) && this.addFormatting(e.pts, ['u']); else if (this.isOffsetControlCode(n, r)) this.column_ += 3 & r; else if (this.isPAC(n, r)) {
var s = De.indexOf(7968 & t);
'rollUp' === this.mode_ && (s - this.rollUpRows_ + 1 < 0 && (s = this.rollUpRows_ - 1), this.setRollUp(e.pts, s)), s !== this.row_ && (this.clearFormatting(e.pts), this.row_ = s), 1 & r && -1 === this.formatting_.indexOf('u') && this.addFormatting(e.pts, ['u']), 16 == (16 & t) && (this.column_ = 4 * ((14 & t) >> 1)), this.isColorPAC(r) && 14 == (14 & r) && this.addFormatting(e.pts, ['i']);
} else this.isNormalChar(n) && (0 === r && (r = null), a = Pe(n), a += Pe(r), this[this.mode_](e.pts, a), this.column_ += a.length);
} else this.lastControlCode_ = null;
};
};
Me.prototype = new V, Me.prototype.flushDisplayed = function (e) {
var t = this.displayed_.map(function (e) {try {return e.trim();} catch (e) {return '';}}).join('\n').replace(/^\n+|\n+$/g, '');
t.length && this.trigger('data', {startPts: this.startPts_, endPts: e, text: t, stream: this.name_});
}, Me.prototype.reset = function () {this.mode_ = 'popOn', this.topRow_ = 0, this.startPts_ = 0, this.displayed_ = Le(), this.nonDisplayed_ = Le(), this.lastControlCode_ = null, this.column_ = 0, this.row_ = 14, this.rollUpRows_ = 2, this.formatting_ = [];}, Me.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_;}, Me.prototype.isSpecialCharacter = function (e, t) {return e === this.EXT_ && 48 <= t && t <= 63;}, Me.prototype.isExtCharacter = function (e, t) {return (e === this.EXT_ + 1 || e === this.EXT_ + 2) && 32 <= t && t <= 63;}, Me.prototype.isMidRowCode = function (e, t) {return e === this.EXT_ && 32 <= t && t <= 47;}, Me.prototype.isOffsetControlCode = function (e, t) {return e === this.OFFSET_ && 33 <= t && t <= 35;}, Me.prototype.isPAC = function (e, t) {return e >= this.BASE_ && e < this.BASE_ + 8 && 64 <= t && t <= 127;}, Me.prototype.isColorPAC = function (e) {return 64 <= e && e <= 79 || 96 <= e && e <= 127;}, Me.prototype.isNormalChar = function (e) {return 32 <= e && e <= 127;}, Me.prototype.setRollUp = function (e, t) {
if ('rollUp' !== this.mode_ && (this.row_ = 14, this.mode_ = 'rollUp', this.flushDisplayed(e), this.nonDisplayed_ = Le(), this.displayed_ = Le()), 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;
}, Me.prototype.addFormatting = function (e, t) {
this.formatting_ = this.formatting_.concat(t);
var i = t.reduce(function (e, t) {return e + '<' + t + '>';}, '');
this[this.mode_](e, i);
}, Me.prototype.clearFormatting = function (e) {
if (this.formatting_.length) {
var t = this.formatting_.reverse().reduce(function (e, t) {return e + '</' + t + '>';}, '');
this.formatting_ = [], this[this.mode_](e, t);
}
}, Me.prototype.popOn = function (e, t) {
var i = this.nonDisplayed_[this.row_];
i += t, this.nonDisplayed_[this.row_] = i;
}, Me.prototype.rollUp = function (e, t) {
var i = this.displayed_[this.row_];
i += t, this.displayed_[this.row_] = i;
}, Me.prototype.shiftRowsUp_ = function () {
var e;
for (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_] = '';
}, Me.prototype.paintOn = function (e, t) {
var i = this.displayed_[this.row_];
i += t, this.displayed_[this.row_] = i;
};
function Re (e, t) {
var i = 1;
for (t < e && (i = -1); 4294967296 < Math.abs(t - e);) e += 8589934592 * i;
return e;
}
function Ne (e) {
var t, i;
Ne.prototype.init.call(this), this.type_ = e || 'shared', this.push = function (e) {'shared' !== this.type_ && e.type !== this.type_ || (void 0 === i && (i = e.dts), e.dts = Re(e.dts, i), e.pts = Re(e.pts, i), t = e.dts, this.trigger('data', e));}, this.flush = function () {i = t, this.trigger('done');}, this.endTimeline = function () {this.flush(), this.trigger('endedtimeline');}, this.discontinuity = function () {t = i = void 0;}, this.reset = function () {this.discontinuity(), this.trigger('reset');};
}
var Ue = {CaptionStream: G, Cea608Stream: Me},
Fe = {H264_STREAM_TYPE: 27, ADTS_STREAM_TYPE: 15, METADATA_STREAM_TYPE: 21};
Ne.prototype = new V;
function Be (e, t, i) {
var n, r = '';
for (n = t; n < i; n++) r += '%' + ('00' + e[n].toString(16)).slice(-2);
return r;
}
function je (e, t, i) {return decodeURIComponent(Be(e, t, i));}
function Ve (e) {return e[0] << 21 | e[1] << 14 | e[2] << 7 | e[3];}
var qe, He = Ne, We = {
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 = je(e.data, 1, t), e.value = je(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 = je(e.data, 1, t), e.url = je(e.data, t + 1, e.data.length);
break;
}
}, PRIV: function (e) {
var t, i;
for (t = 0; t < e.data.length; t++) if (0 === e.data[t]) {
e.owner = (i = e.data, unescape(Be(i, 0, t)));
break;
}
e.privateData = e.data.subarray(t + 1), e.data = e.privateData;
}
};
(qe = function (e) {
var t, u = {debug: !(!e || !e.debug), descriptor: e && e.descriptor}, l = 0, c = [], d = 0;
if (qe.prototype.init.call(this), this.dispatchType = Fe.METADATA_STREAM_TYPE.toString(16), u.descriptor) for (t = 0; t < u.descriptor.length; t++) this.dispatchType += ('00' + u.descriptor[t].toString(16)).slice(-2);
this.push = function (e) {
var t, i, n, r, a;
if ('timed-metadata' === e.type) if (e.dataAlignmentIndicator && (d = 0, c.length = 0), 0 === c.length && (e.data.length < 10 || e.data[0] !== 'I'.charCodeAt(0) || e.data[1] !== 'D'.charCodeAt(0) || e.data[2] !== '3'.charCodeAt(0))) u.debug; else if (c.push(e), d += e.data.byteLength, 1 === c.length && (l = Ve(e.data.subarray(6, 10)), l += 10), !(d < l)) {
for (t = {
data: new Uint8Array(l),
frames: [],
pts: c[0].pts,
dts: c[0].dts
}, a = 0; a < l;) t.data.set(c[0].data.subarray(0, l - a), a), a += c[0].data.byteLength, d -= c[0].data.byteLength, c.shift();
i = 10, 64 & t.data[5] && (i += 4, i += Ve(t.data.subarray(10, 14)), l -= Ve(t.data.subarray(16, 20)));
do {
if ((n = Ve(t.data.subarray(i + 4, i + 8))) < 1) return;
if ((r = {
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 = r.id, We[r.id] && (We[r.id](r), 'com.apple.streaming.transportStreamTimestamp' === r.owner)) {
var s = r.data, o = (1 & s[3]) << 30 | s[4] << 22 | s[5] << 14 | s[6] << 6 | s[7] >>> 2;
o *= 4, o += 3 & s[7], r.timeStamp = o, void 0 === t.pts && void 0 === t.dts && (t.pts = r.timeStamp, t.dts = r.timeStamp), this.trigger('timestamp', r);
}
t.frames.push(r), i += 10, i += n;
} while (i < l);
this.trigger('data', t);
}
};
}).prototype = new V;
var ze, Ge, Xe, Ke = qe, Ye = He;
(ze = function () {
var r = new Uint8Array(188), a = 0;
ze.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');};
}).prototype = new V, (Ge = function () {
var n, r, a, s;
Ge.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(e.subarray(i), t) : 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 === Fe.H264_STREAM_TYPE && null === s.programMapTable.video ? s.programMapTable.video = a : r === Fe.ADTS_STREAM_TYPE && null === s.programMapTable.audio ? s.programMapTable.audio = a : r === Fe.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 = Fe.H264_STREAM_TYPE : i.pid === this.programMapTable.audio ? i.streamType = Fe.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 V, Ge.STREAM_TYPES = {h264: 27, adts: 15}, (Xe = function () {
function n (e, t, i) {
var n, r, a = new Uint8Array(e.size), s = {type: t}, o = 0, u = 0;
if (e.data.length && !(e.size < 9)) {
for (s.trackId = e.data[0].pid, o = 0; o < e.data.length; o++) r = e.data[o], a.set(r.data, u), u += r.data.byteLength;
!function (e, t) {
var i;
t.packetLength = 6 + (e[4] << 8 | e[5]), t.dataAlignmentIndicator = 0 != (4 & e[6]), 192 & (i = e[7]) && (t.pts = (14 & e[9]) << 27 | (255 & e[10]) << 20 | (254 & e[11]) << 12 | (255 & e[12]) << 5 | (254 & e[13]) >>> 3, t.pts *= 4, t.pts += (6 & e[13]) >>> 1, t.dts = t.pts, 64 & i && (t.dts = (14 & e[14]) << 27 | (255 & e[15]) << 20 | (254 & e[16]) << 12 | (255 & e[17]) << 5 | (254 & e[18]) >>> 3, t.dts *= 4, t.dts += (6 & e[18]) >>> 1)), t.data = e.subarray(9 + e[8]);
}(a, s), n = 'video' === t || s.packetLength <= e.size, (i || n) && (e.size = 0, e.data.length = 0), n && l.trigger('data', s);
}
}
var t, l = this, r = {data: [], size: 0}, a = {data: [], size: 0}, s = {data: [], size: 0};
Xe.prototype.init.call(this), this.push = function (i) {
({
pat: function () {}, pes: function () {
var e, t;
switch (i.streamType) {
case Fe.H264_STREAM_TYPE:
e = r, t = 'video';
break;
case Fe.ADTS_STREAM_TYPE:
e = a, t = 'audio';
break;
case Fe.METADATA_STREAM_TYPE:
e = s, 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'
}), l.trigger('data', e);
}
})[i.type]();
}, this.reset = function () {r.size = 0, r.data.length = 0, a.size = 0, a.data.length = 0, this.trigger('reset');}, this.flushStreams_ = function () {n(r, 'video'), n(a, 'audio'), n(s, 'timed-metadata');}, this.flush = function () {this.flushStreams_(), this.trigger('done');};
}).prototype = new V;
var $e = {
PAT_PID: 0,
MP2T_PACKET_LENGTH: 188,
TransportPacketStream: ze,
TransportParseStream: Ge,
ElementaryStream: Xe,
TimestampRolloverStream: Ye,
CaptionStream: Ue.CaptionStream,
Cea608Stream: Ue.Cea608Stream,
MetadataStream: Ke
};
for (var Qe in Fe) Fe.hasOwnProperty(Qe) && ($e[Qe] = Fe[Qe]);
var Je, Ze = $e, et = ce, tt = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350];
(Je = function (u) {
var l, c = 0;
Je.prototype.init.call(this), this.push = function (e) {
var t, i, n, r, a, s, o = 0;
if (u || (c = 0), 'audio' === e.type) for (l ? (r = l, (l = new Uint8Array(r.byteLength + e.data.byteLength)).set(r), l.set(e.data, r.byteLength)) : l = e.data; o + 5 < l.length;) if (255 === l[o] && 240 == (246 & l[o + 1])) {
if (i = 2 * (1 & ~l[o + 1]), t = (3 & l[o + 3]) << 11 | l[o + 4] << 3 | (224 & l[o + 5]) >> 5, s = (a = 1024 * (1 + (3 & l[o + 6]))) * et / tt[(60 & l[o + 2]) >>> 2], n = o + t, l.byteLength < n) return;
if (this.trigger('data', {
pts: e.pts + c * s,
dts: e.dts + c * s,
sampleCount: a,
audioobjecttype: 1 + (l[o + 2] >>> 6 & 3),
channelcount: (1 & l[o + 2]) << 2 | (192 & l[o + 3]) >>> 6,
samplerate: tt[(60 & l[o + 2]) >>> 2],
samplingfrequencyindex: (60 & l[o + 2]) >>> 2,
samplesize: 16,
data: l.subarray(o + 7 + i, n)
}), c++, l.byteLength === n) return void (l = void 0);
l = l.subarray(n);
} else 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');};
}).prototype = new V;
var it, nt, rt, at = Je, st = 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 () {
var e;
for (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();
};
(nt = function () {
var n, r, a = 0;
nt.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');};
}).prototype = new V, rt = {
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, _, t = new nt;
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
};
switch (31 & e[0]) {
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();}, _ = function (e, t) {
var i, n = 8, r = 8;
for (i = 0; i < e; i++) 0 !== r && (r = (n + t.readExpGolomb() + 256) % 256), n = 0 === r ? n : r;
}, s = function (e) {
for (var t, i, n = e.byteLength, r = [], a = 1; a < n - 2;) 0 === e[a] && 0 === e[a + 1] && 3 === e[a + 2] ? (r.push(a + 2), a += 2) : a++;
if (0 === r.length) return e;
t = n - r.length, i = new Uint8Array(t);
var s = 0;
for (a = 0; a < t; s++, a++) s === r[0] && (s++, r.shift()), i[a] = e[s];
return i;
}, o = function (e) {
var t, i, n, r, a, s, o, u, l, c, d, h, p, f = 0, m = 0, g = 0, v = 0, y = 1;
if (i = (t = new st(e)).readUnsignedByte(), r = t.readUnsignedByte(), n = t.readUnsignedByte(), t.skipUnsignedExpGolomb(), rt[i] && (3 === (a = t.readUnsignedExpGolomb()) && t.skipBits(1), t.skipUnsignedExpGolomb(), t.skipUnsignedExpGolomb(), t.skipBits(1), t.readBoolean())) for (d = 3 !== a ? 8 : 12, p = 0; p < d; p++) t.readBoolean() && _(p < 6 ? 16 : 64, t);
if (t.skipUnsignedExpGolomb(), 0 === (s = t.readUnsignedExpGolomb())) t.readUnsignedExpGolomb(); else if (1 === s) for (t.skipBits(1), t.skipExpGolomb(), t.skipExpGolomb(), o = t.readUnsignedExpGolomb(), p = 0; p < o; p++) t.skipExpGolomb();
if (t.skipUnsignedExpGolomb(), t.skipBits(1), u = t.readUnsignedExpGolomb(), l = t.readUnsignedExpGolomb(), 0 === (c = t.readBits(1)) && t.skipBits(1), t.skipBits(1), t.readBoolean() && (f = t.readUnsignedExpGolomb(), m = t.readUnsignedExpGolomb(), g = t.readUnsignedExpGolomb(), v = t.readUnsignedExpGolomb()), t.readBoolean() && t.readBoolean()) {
switch (t.readUnsignedByte()) {
case 1:
h = [1, 1];
break;
case 2:
h = [12, 11];
break;
case 3:
h = [10, 11];
break;
case 4:
h = [16, 11];
break;
case 5:
h = [40, 33];
break;
case 6:
h = [24, 11];
break;
case 7:
h = [20, 11];
break;
case 8:
h = [32, 11];
break;
case 9:
h = [80, 33];
break;
case 10:
h = [18, 11];
break;
case 11:
h = [15, 11];
break;
case 12:
h = [64, 33];
break;
case 13:
h = [160, 99];
break;
case 14:
h = [4, 3];
break;
case 15:
h = [3, 2];
break;
case 16:
h = [2, 1];
break;
case 255:
h = [t.readUnsignedByte() << 8 | t.readUnsignedByte(), t.readUnsignedByte() << 8 | t.readUnsignedByte()];
}
h && (y = h[0] / h[1]);
}
return {
profileIdc: i,
levelIdc: n,
profileCompatibility: r,
width: Math.ceil((16 * (u + 1) - 2 * f - 2 * m) * y),
height: (2 - c) * (l + 1) * 16 - 2 * g - 2 * v,
sarRatio: h
};
};
}).prototype = new V;
function ot (e, t) {
var i = e[t + 6] << 21 | e[t + 7] << 14 | e[t + 8] << 7 | e[t + 9];
return i = 0 <= i ? i : 0, (16 & e[t + 5]) >> 4 ? i + 20 : i + 10;
}
var ut, lt = {H264Stream: it, NalByteStream: nt}, ct = function (e) {
var t = function e (t, i) {return t.length - i < 10 || t[i] !== 'I'.charCodeAt(0) || t[i + 1] !== 'D'.charCodeAt(0) || t[i + 2] !== '3'.charCodeAt(0) ? i : e(t, i += ot(t, i));}(e, 0);
return e.length >= t + 2 && 255 == (255 & e[t]) && 240 == (240 & e[t + 1]) && 16 == (22 & e[t + 1]);
}, dt = ot, ht = function (e, t) {
var i = (224 & e[t + 5]) >> 5, n = e[t + 4] << 3;
return 6144 & e[t + 3] | n | i;
};
(ut = function () {
var o = new Uint8Array, u = 0;
ut.prototype.init.call(this), this.setTimestamp = function (e) {u = e;}, this.push = function (e) {
var t, i, n, r, a = 0, s = 0;
for (o.length ? (r = o.length, (o = new Uint8Array(e.byteLength + r)).set(o.subarray(0, r)), o.set(e, r)) : o = e; 3 <= o.length - s;) if (o[s] !== 'I'.charCodeAt(0) || o[s + 1] !== 'D'.charCodeAt(0) || o[s + 2] !== '3'.charCodeAt(0)) if (255 != (255 & o[s]) || 240 != (240 & o[s + 1])) s++; else {
if (o.length - s < 7) break;
if (s + (a = ht(o, s)) > o.length) break;
n = {type: 'audio', data: o.subarray(s, s + a), pts: u, dts: u}, this.trigger('data', n), s += a;
} else {
if (o.length - s < 10) break;
if (s + (a = dt(o, s)) > o.length) break;
i = {type: 'timed-metadata', data: o.subarray(s, s + a)}, this.trigger('data', i), s += a;
}
t = o.length - s, o = 0 < t ? o.subarray(s) : new Uint8Array;
}, this.reset = function () {o = new Uint8Array, this.trigger('reset');}, this.endTimeline = function () {o = new Uint8Array, this.trigger('endedtimeline');};
}).prototype = new V;
function pt (e, t) {
var i;
if (e.length !== t.length) return !1;
for (i = 0; i < e.length; i++) if (e[i] !== t[i]) return !1;
return !0;
}
function ft (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 mt, gt, vt, yt, _t = ut,
bt = ['audioobjecttype', 'channelcount', 'samplerate', 'samplingfrequencyindex', 'samplesize'],
Tt = ['width', 'height', 'profileIdc', 'levelIdc', 'profileCompatibility', 'sarRatio'], St = lt.H264Stream,
kt = ct, Ct = ce;
(gt = function (a, s) {
var o = [], u = 0, l = 0, c = 0, d = 1 / 0;
s = s || {}, gt.prototype.init.call(this), this.push = function (t) {Ce(a, t), a && bt.forEach(function (e) {a[e] = t[e];}), o.push(t);}, this.setEarliestDts = function (e) {l = e;}, this.setVideoBaseMediaDecodeTime = function (e) {d = e;}, this.setAudioAppendStart = function (e) {c = e;}, this.flush = function () {
var e, t, i, n, r;
0 !== o.length && (e = ye(o, a, l), a.baseMediaDecodeTime = ke(a, s.keepOriginalTimestamps), ve(a, e, c, d), a.samples = _e(e), i = J(be(e)), o = [], t = Z(u, [a]), n = new Uint8Array(t.byteLength + i.byteLength), u++, n.set(t), n.set(i, t.byteLength), Se(a), r = Math.ceil(1024 * Ct / a.samplerate), e.length && this.trigger('timingInfo', {
start: e[0].pts,
end: e[0].pts + e.length * r
}), this.trigger('data', {track: a, boxes: n})), this.trigger('done', 'AudioSegmentStream');
}, this.reset = function () {Se(a), o = [], this.trigger('reset');};
}).prototype = new V, (mt = function (c, d) {
var t, i, h = 0, p = [], f = [];
d = d || {}, mt.prototype.init.call(this), delete c.minPTS, this.gopCache_ = [], this.push = function (e) {Ce(c, e), 'seq_parameter_set_rbsp' !== e.nalUnitType || t || (t = e.config, c.sps = [e.data], Tt.forEach(function (e) {c[e] = t[e];}, this)), 'pic_parameter_set_rbsp' !== e.nalUnitType || i || (i = e.data, c.pps = [e.data]), p.push(e);}, this.flush = function () {
for (var e, t, i, n, r, a, s, o, u = 0; p.length && "access_unit_delimiter_rbsp" !== p[0].nalUnitType;) p.shift();
if (0 === p.length) return this.resetStream_(), void this.trigger('done', 'VideoSegmentStream');
if (e = te(p), (i = ie(e))[0][0].keyFrame || ((t = this.getGopForFusion_(p[0], c)) ? (u = t.duration, i.unshift(t), i.byteLength += t.byteLength, i.nalCount += t.nalCount, i.pts = t.pts, i.dts = t.dts, i.duration += t.duration) : i = ne(i)), f.length) {
var l;
if (!(l = d.alignGopsAtEnd ? this.alignGopsAtEnd_(i) : this.alignGopsAtStart_(i))) return this.gopCache_.unshift({
gop: i.pop(),
pps: c.pps,
sps: c.sps
}), this.gopCache_.length = Math.min(6, this.gopCache_.length), p = [], this.resetStream_(), void this.trigger('done', 'VideoSegmentStream');
Se(c), i = l;
}
Ce(c, i), c.samples = re(i), r = J(ae(i)), c.baseMediaDecodeTime = ke(c, d.keepOriginalTimestamps), this.trigger('processedGopsInfo', i.map(function (e) {
return {
pts: e.pts,
dts: e.dts,
byteLength: e.byteLength
};
})), s = i[0], o = i[i.length - 1], this.trigger('segmentTimingInfo', ft(c.baseMediaDecodeTime, s.dts, s.pts, o.dts + o.duration, o.pts + o.duration, u)), this.trigger('timingInfo', {
start: i[0].pts,
end: i[i.length - 1].pts + i[i.length - 1].duration
}), this.gopCache_.unshift({
gop: i.pop(),
pps: c.pps,
sps: c.sps
}), this.gopCache_.length = Math.min(6, this.gopCache_.length), p = [], this.trigger('baseMediaDecodeTime', c.baseMediaDecodeTime), this.trigger('timelineStartInfo', c.timelineStartInfo), n = Z(h, [c]), a = new Uint8Array(n.byteLength + r.byteLength), h++, a.set(n), a.set(r, n.byteLength), this.trigger('data', {
track: c,
boxes: a
}), this.resetStream_(), this.trigger('done', 'VideoSegmentStream');
}, this.reset = function () {this.resetStream_(), p = [], this.gopCache_.length = 0, f.length = 0, this.trigger('reset');}, this.resetStream_ = function () {Se(c), i = t = void 0;}, this.getGopForFusion_ = function (e) {
var t, i, n, r, a, s = 1 / 0;
for (a = 0; a < this.gopCache_.length; a++) n = (r = this.gopCache_[a]).gop, c.pps && pt(c.pps[0], r.pps[0]) && c.sps && pt(c.sps[0], r.sps[0]) && (n.dts < c.timelineStartInfo.dts || -1e4 <= (t = e.dts - n.dts - n.duration) && t <= 45e3 && (!i || t < s) && (i = r, s = t));
return i ? i.gop : null;
}, this.alignGopsAtStart_ = function (e) {
var t, i, n, r, a, s, o, u;
for (a = e.byteLength, s = e.nalCount, o = e.duration, t = i = 0; t < f.length && i < e.length && (n = f[t], r = e[i], n.pts !== r.pts);) r.pts > n.pts ? t++ : (i++, a -= r.byteLength, s -= r.nalCount, o -= r.duration);
return 0 === i ? e : i === e.length ? null : ((u = e.slice(i)).byteLength = a, u.duration = o, u.nalCount = s, u.pts = u[0].pts, u.dts = u[0].dts, u);
}, this.alignGopsAtEnd_ = function (e) {
var t, i, n, r, a, s, o;
for (t = f.length - 1, i = e.length - 1, a = null, s = !1; 0 <= t && 0 <= i;) {
if (n = f[t], r = e[i], n.pts === r.pts) {
s = !0;
break;
}
n.pts > r.pts ? t-- : (t === f.length - 1 && (a = i), i--);
}
if (!s && null === a) return null;
if (0 === (o = s ? i : a)) return e;
var u = e.slice(o),
l = u.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 u.byteLength = l.byteLength, u.duration = l.duration, u.nalCount = l.nalCount, u.pts = u[0].pts, u.dts = u[0].dts, u;
}, this.alignGopsWith = function (e) {f = e;};
}).prototype = new V, (yt = 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, yt.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 V, yt.prototype.flush = function (e) {
var t, i, n, r, a = 0, s = {captions: [], captionStreams: {}, metadata: [], info: {}}, o = 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 ? (o = this.videoTrack.timelineStartInfo.pts, Tt.forEach(function (e) {s.info[e] = this.videoTrack[e];}, this)) : this.audioTrack && (o = this.audioTrack.timelineStartInfo.pts, bt.forEach(function (e) {s.info[e] = this.audioTrack[e];}, this)), this.videoTrack || this.audioTrack) {
for (1 === this.pendingTracks.length ? s.type = this.pendingTracks[0].type : s.type = 'combined', this.emittedTracks += this.pendingTracks.length, n = ee(this.pendingTracks), s.initSegment = new Uint8Array(n.byteLength), s.initSegment.set(n), s.data = new Uint8Array(this.pendingBytes), r = 0; r < this.pendingBoxes.length; r++) s.data.set(this.pendingBoxes[r], a), a += this.pendingBoxes[r].byteLength;
for (r = 0; r < this.pendingCaptions.length; r++) (t = this.pendingCaptions[r]).startTime = fe(t.startPts, o, this.keepOriginalTimestamps), t.endTime = fe(t.endPts, o, this.keepOriginalTimestamps), s.captionStreams[t.stream] = !0, s.captions.push(t);
for (r = 0; r < this.pendingMetadata.length; r++) (i = this.pendingMetadata[r]).cueTime = fe(i.pts, o, this.keepOriginalTimestamps), s.metadata.push(i);
for (s.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', s), r = 0; r < s.captions.length; r++) t = s.captions[r], this.trigger('caption', t);
for (r = 0; r < s.metadata.length; r++) i = s.metadata[r], this.trigger('id3Frame', i);
}
this.emittedTracks >= this.numberOfTracks && (this.trigger('done'), this.emittedTracks = 0);
}, yt.prototype.setRemux = function (e) {this.remuxTracks = e;}, (vt = function (n) {
var r, a, s = this, i = !0;
vt.prototype.init.call(this), n = n || {}, this.baseMediaDecodeTime = n.baseMediaDecodeTime || 0, this.transmuxPipeline_ = {}, this.setupAacPipeline = function () {
var t = {};
(this.transmuxPipeline_ = t).type = 'aac', t.metadataStream = new Ze.MetadataStream, t.aacStream = new _t, t.audioTimestampRolloverStream = new Ze.TimestampRolloverStream('audio'), t.timedMetadataTimestampRolloverStream = new Ze.TimestampRolloverStream('timed-metadata'), t.adtsStream = new at, t.coalesceStream = new yt(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 gt(a, n), 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'));
}, this.setupTsPipeline = function () {
var i = {};
(this.transmuxPipeline_ = i).type = 'ts', i.metadataStream = new Ze.MetadataStream, i.packetStream = new Ze.TransportPacketStream, i.parseStream = new Ze.TransportParseStream, i.elementaryStream = new Ze.ElementaryStream, i.timestampRolloverStream = new Ze.TimestampRolloverStream, i.adtsStream = new at, i.h264Stream = new St, i.captionStream = new Ze.CaptionStream, i.coalesceStream = new yt(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 mt(r, n), 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 gt(a, n), i.audioSegmentStream.on('timingInfo', s.trigger.bind(s, 'audioTimingInfo')), 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'));
}, this.setBaseMediaDecodeTime = function (e) {
var t = this.transmuxPipeline_;
n.keepOriginalTimestamps || (this.baseMediaDecodeTime = e), a && (a.timelineStartInfo.dts = void 0, a.timelineStartInfo.pts = void 0, Se(a), t.audioTimestampRolloverStream && t.audioTimestampRolloverStream.discontinuity()), r && (t.videoSegmentStream && (t.videoSegmentStream.gopCache_ = []), r.timelineStartInfo.dts = void 0, r.timelineStartInfo.pts = void 0, Se(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.push = function (e) {
if (i) {
var t = kt(e);
t && '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 V;
function Et (a, s) {
var o = [], u = 0, l = 0, c = 0, d = 1 / 0, h = null, p = null;
s = s || {}, Et.prototype.init.call(this), this.push = function (t) {Ce(a, t), a && bt.forEach(function (e) {a[e] = t[e];}), o.push(t);}, this.setEarliestDts = function (e) {l = e;}, this.setVideoBaseMediaDecodeTime = function (e) {d = e;}, this.setAudioAppendStart = function (e) {c = e;}, this.processFrames_ = function () {
var e, t, i, n, r;
0 !== o.length && 0 !== (e = ye(o, a, l)).length && (a.baseMediaDecodeTime = ke(a, s.keepOriginalTimestamps), ve(a, e, c, d), a.samples = _e(e), i = J(be(e)), o = [], t = Z(u, [a]), u++, a.initSegment = ee([a]), (n = new Uint8Array(t.byteLength + i.byteLength)).set(t), n.set(i, t.byteLength), Se(a), null === h && (p = h = e[0].pts), p += e.length * (1024 * At / a.samplerate), r = {start: h}, this.trigger('timingInfo', r), this.trigger('data', {
track: a,
boxes: n
}));
}, this.flush = function () {
this.processFrames_(), this.trigger('timingInfo', {
start: h,
end: p
}), this.resetTiming_(), this.trigger('done', 'AudioSegmentStream');
}, this.partialFlush = function () {this.processFrames_(), this.trigger('partialdone', 'AudioSegmentStream');}, this.endTimeline = function () {this.flush(), this.trigger('endedtimeline', 'AudioSegmentStream');}, this.resetTiming_ = function () {Se(a), p = h = null;}, this.reset = function () {this.resetTiming_(), o = [], this.trigger('reset');};
}
var wt = {
Transmuxer: vt,
VideoSegmentStream: mt,
AudioSegmentStream: gt,
AUDIO_PROPERTIES: bt,
VIDEO_PROPERTIES: Tt,
generateVideoSegmentTimingInfo: ft
}.Transmuxer, It = {Adts: at, h264: lt}, At = ce;
Et.prototype = new V;
function xt (o, u) {
var t, i, l, c = 0, d = [], h = [], p = null, f = null, m = !0;
u = u || {}, xt.prototype.init.call(this), this.push = function (e) {Ce(o, e), 'undefined' == typeof o.timelineStartInfo.dts && (o.timelineStartInfo.dts = e.dts), 'seq_parameter_set_rbsp' !== e.nalUnitType || t || (t = e.config, o.sps = [e.data], Tt.forEach(function (e) {o[e] = t[e];}, this)), 'pic_parameter_set_rbsp' !== e.nalUnitType || i || (i = e.data, o.pps = [e.data]), d.push(e);}, this.processNals_ = function (e) {
var t;
for (d = h.concat(d); d.length && "access_unit_delimiter_rbsp" !== d[0].nalUnitType;) d.shift();
if (0 !== d.length) {
var i = te(d);
if (i.length) if (h = i[i.length - 1], e && (i.pop(), i.duration -= h.duration, i.nalCount -= h.length, i.byteLength -= h.byteLength), i.length) {
if (this.trigger('timelineStartInfo', o.timelineStartInfo), m) {
if (!(l = ie(i))[0][0].keyFrame) {
if (!(l = ne(l))[0][0].keyFrame) return d = [].concat.apply([], i).concat(h), void (h = []);
(i = [].concat.apply([], l)).duration = l.duration;
}
m = !1;
}
for (null === p && (p = i[0].pts, f = p), f += i.duration, this.trigger('timingInfo', {
start: p,
end: f
}), t = 0; t < i.length; t++) {
var n = i[t];
o.samples = se(n);
var r = J(oe(n));
Se(o), Ce(o, n), o.baseMediaDecodeTime = ke(o, u.keepOriginalTimestamps);
var a = Z(c, [o]);
c++, o.initSegment = ee([o]);
var s = new Uint8Array(a.byteLength + r.byteLength);
s.set(a), s.set(r, a.byteLength), this.trigger('data', {
track: o,
boxes: s,
sequence: c,
videoFrameDts: n.dts,
videoFramePts: n.pts
});
}
d = [];
} else d = [];
}
}, this.resetTimingAndConfig_ = function () {i = t = void 0, f = p = null;}, this.partialFlush = function () {this.processNals_(!0), this.trigger('partialdone', 'VideoSegmentStream');}, this.flush = function () {this.processNals_(!1), this.resetTimingAndConfig_(), this.trigger('done', 'VideoSegmentStream');}, this.endTimeline = function () {this.flush(), this.trigger('endedtimeline', 'VideoSegmentStream');}, this.reset = function () {this.resetTimingAndConfig_(), h = [], d = [], m = !0, this.trigger('reset');};
}
var Pt = Et;
xt.prototype = new V;
function Lt (e) {return e.prototype = new V, e.prototype.init.call(e), e;}
function Ot (t, i) {t.on('data', i.trigger.bind(i, 'data')), t.on('done', i.trigger.bind(i, 'done')), t.on('partialdone', i.trigger.bind(i, 'partialdone')), t.on('endedtimeline', i.trigger.bind(i, 'endedtimeline')), t.on('audioTimingInfo', i.trigger.bind(i, 'audioTimingInfo')), t.on('videoTimingInfo', i.trigger.bind(i, 'videoTimingInfo')), t.on('trackinfo', i.trigger.bind(i, 'trackinfo')), t.on('id3Frame', function (e) {e.dispatchType = t.metadataStream.dispatchType, e.cueTime = de(e.pts), i.trigger('id3Frame', e);}), t.on('caption', function (e) {i.trigger('caption', e);});}
function Dt (i) {
var n = null, r = !0;
i = i || {}, Dt.prototype.init.call(this), i.baseMediaDecodeTime = i.baseMediaDecodeTime || 0, this.push = function (e) {
if (r) {
var t = Rt(e);
!t || n && 'aac' === n.type ? t || n && 'ts' === n.type || (n = function (i) {
var n = {
type: 'ts',
tracks: {audio: null, video: null},
packet: new Ze.TransportPacketStream,
parse: new Ze.TransportParseStream,
elementary: new Ze.ElementaryStream,
timestampRollover: new Ze.TimestampRolloverStream,
adts: new It.Adts,
h264: new It.h264.H264Stream,
captionStream: new Ze.CaptionStream,
metadataStream: new Ze.MetadataStream
};
return n.headOfPipeline = n.packet, n.packet.pipe(n.parse).pipe(n.elementary).pipe(n.timestampRollover), n.timestampRollover.pipe(n.h264), n.h264.pipe(n.captionStream), n.timestampRollover.pipe(n.metadataStream), n.timestampRollover.pipe(n.adts), n.elementary.on('data', function (e) {
if ('metadata' === e.type) {
for (var t = 0; t < e.tracks.length; t++) n.tracks[e.tracks[t].type] || (n.tracks[e.tracks[t].type] = e.tracks[t], n.tracks[e.tracks[t].type].timelineStartInfo.baseMediaDecodeTime = i.baseMediaDecodeTime);
n.tracks.video && !n.videoSegmentStream && (n.videoSegmentStream = new Mt(n.tracks.video, i), n.videoSegmentStream.on('timelineStartInfo', function (e) {n.tracks.audio && !i.keepOriginalTimestamps && n.audioSegmentStream.setEarliestDts(e.dts - i.baseMediaDecodeTime);}), n.videoSegmentStream.on('timingInfo', n.trigger.bind(n, 'videoTimingInfo')), n.videoSegmentStream.on('data', function (e) {
n.trigger('data', {
type: 'video',
data: e
});
}), n.videoSegmentStream.on('done', n.trigger.bind(n, 'done')), n.videoSegmentStream.on('partialdone', n.trigger.bind(n, 'partialdone')), n.videoSegmentStream.on('endedtimeline', n.trigger.bind(n, 'endedtimeline')), n.h264.pipe(n.videoSegmentStream)), n.tracks.audio && !n.audioSegmentStream && (n.audioSegmentStream = new Pt(n.tracks.audio, i), n.audioSegmentStream.on('data', function (e) {
n.trigger('data', {
type: 'audio',
data: e
});
}), n.audioSegmentStream.on('done', n.trigger.bind(n, 'done')), n.audioSegmentStream.on('partialdone', n.trigger.bind(n, 'partialdone')), n.audioSegmentStream.on('endedtimeline', n.trigger.bind(n, 'endedtimeline')), n.audioSegmentStream.on('timingInfo', n.trigger.bind(n, 'audioTimingInfo')), n.adts.pipe(n.audioSegmentStream)), n.trigger('trackinfo', {
hasAudio: !!n.tracks.audio,
hasVideo: !!n.tracks.video
});
}
}), n.captionStream.on('data', function (e) {
var t;
t = n.tracks.video && n.tracks.video.timelineStartInfo.pts || 0, e.startTime = fe(e.startPts, t, i.keepOriginalTimestamps), e.endTime = fe(e.endPts, t, i.keepOriginalTimestamps), n.trigger('caption', e);
}), (n = Lt(n)).metadataStream.on('data', n.trigger.bind(n, 'id3Frame')), n;
}(i), Ot(n, this)) : (n = function (t) {
var i = {
type: 'aac',
tracks: {audio: null},
metadataStream: new Ze.MetadataStream,
aacStream: new _t,
audioRollover: new Ze.TimestampRolloverStream('audio'),
timedMetadataRollover: new Ze.TimestampRolloverStream('timed-metadata'),
adtsStream: new at(!0)
};
return i.headOfPipeline = i.aacStream, i.aacStream.pipe(i.audioRollover).pipe(i.adtsStream), i.aacStream.pipe(i.timedMetadataRollover).pipe(i.metadataStream), i.metadataStream.on('timestamp', function (e) {i.aacStream.setTimestamp(e.timeStamp);}), i.aacStream.on('data', function (e) {
'timed-metadata' !== e.type && 'audio' !== e.type || i.audioSegmentStream || (i.tracks.audio = i.tracks.audio || {
timelineStartInfo: {baseMediaDecodeTime: t.baseMediaDecodeTime},
codec: 'adts',
type: 'audio'
}, i.audioSegmentStream = new Pt(i.tracks.audio, t), i.audioSegmentStream.on('data', function (e) {
i.trigger('data', {
type: 'audio',
data: e
});
}), i.audioSegmentStream.on('partialdone', i.trigger.bind(i, 'partialdone')), i.audioSegmentStream.on('done', i.trigger.bind(i, 'done')), i.audioSegmentStream.on('endedtimeline', i.trigger.bind(i, 'endedtimeline')), i.audioSegmentStream.on('timingInfo', i.trigger.bind(i, 'audioTimingInfo')), i.adtsStream.pipe(i.audioSegmentStream), i.trigger('trackinfo', {
hasAudio: !!i.tracks.audio,
hasVideo: !!i.tracks.video
}));
}), (i = Lt(i)).metadataStream.on('data', i.trigger.bind(i, 'id3Frame')), i;
}(i), Ot(n, this)), r = !1;
}
n.headOfPipeline.push(e);
}, this.flush = function () {n && (r = !0, n.headOfPipeline.flush());}, this.partialFlush = function () {n && n.headOfPipeline.partialFlush();}, this.endTimeline = function () {n && n.headOfPipeline.endTimeline();}, this.reset = function () {n && n.headOfPipeline.reset();}, this.setBaseMediaDecodeTime = function (e) {i.keepOriginalTimestamps || (i.baseMediaDecodeTime = e), n && (n.tracks.audio && (n.tracks.audio.timelineStartInfo.dts = void 0, n.tracks.audio.timelineStartInfo.pts = void 0, Se(n.tracks.audio), n.audioRollover && n.audioRollover.discontinuity()), n.tracks.video && (n.videoSegmentStream && (n.videoSegmentStream.gopCache_ = []), n.tracks.video.timelineStartInfo.dts = void 0, n.tracks.video.timelineStartInfo.pts = void 0, Se(n.tracks.video)), n.timestampRollover && n.timestampRollover.discontinuity());}, this.setRemux = function (e) {i.remux = e, n && n.coalesceStream && n.coalesceStream.setRemux(e);}, this.setAudioAppendStart = function (e) {n && n.tracks.audio && n.audioSegmentStream && n.audioSegmentStream.setAudioAppendStart(e);}, this.alignGopsWith = function (e) {};
}
var Mt = xt, Rt = ct;
Dt.prototype = new V;
function Nt (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;
}
function Ut (e, c) {
var n = Ht(e, ['moof', 'traf']), t = Ht(e, ['mdat']), d = {}, r = [];
return t.forEach(function (e, t) {
var i = n[t];
r.push({mdat: e, traf: i});
}), r.forEach(function (e) {
var t, i = e.mdat, n = e.traf, r = Ht(n, ['tfhd']), a = Kt(r[0]), s = a.trackId, o = Ht(n, ['tfdt']),
u = 0 < o.length ? zt(o[0]).baseMediaDecodeTime : 0, l = Ht(n, ['trun']);
c === s && 0 < l.length && (t = function (e, t, i) {
var n, r, a, s, o = new DataView(e.buffer, e.byteOffset, e.byteLength), u = [];
for (r = 0; r + 4 < e.length; r += a) if (a = o.getUint32(r), r += 4, !(a <= 0)) switch (31 & e[r]) {
case 6:
var l = e.subarray(r + 1, r + 1 + a), c = Nt(r, t);
if (n = {
nalUnitType: 'sei_rbsp',
size: a,
data: l,
escapedRBSP: Yt(l),
trackId: i
}, c) n.pts = c.pts, n.dts = c.dts, s = c; else {
if (!s) break;
n.pts = s.pts, n.dts = s.dts;
}
u.push(n);
}
return u;
}(i, function (e, t, i) {
var n = t, r = i.defaultSampleDuration || 0, a = i.defaultSampleSize || 0, s = i.trackId, o = [];
return e.forEach(function (e) {
var t = Xt(e).samples;
t.forEach(function (e) {void 0 === e.duration && (e.duration = r), void 0 === e.size && (e.size = a), e.trackId = s, e.dts = n, void 0 === e.compositionTimeOffset && (e.compositionTimeOffset = 0), e.pts = n + e.compositionTimeOffset, n += e.duration;}), o = o.concat(t);
}), o;
}(l, u, a), s), d[s] || (d[s] = []), d[s] = d[s].concat(t));
}), d;
}
function Ft (e) {return 'AudioSegmentStream' === e ? 'audio' : 'VideoSegmentStream' === e ? 'video' : '';}
var Bt = Dt, jt = function (e) {return e >>> 0;}, Vt = 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]);
}, qt = jt, Ht = function e (t, i) {
var n, r, a, s, o, u = [];
if (!i.length) return null;
for (n = 0; n < t.byteLength;) r = qt(t[n] << 24 | t[n + 1] << 16 | t[n + 2] << 8 | t[n + 3]), a = Vt(t.subarray(n + 4, n + 8)), s = 1 < r ? n + r : t.byteLength, a === i[0] && (1 === i.length ? u.push(t.subarray(n + 8, s)) : (o = e(t.subarray(n + 8, s), i.slice(1))).length && (u = u.concat(o))), n = s;
return u;
}, Wt = jt, zt = function (e) {
var t = {
version: e[0],
flags: new Uint8Array(e.subarray(1, 4)),
baseMediaDecodeTime: Wt(e[4] << 24 | e[5] << 16 | e[6] << 8 | e[7])
};
return 1 === t.version && (t.baseMediaDecodeTime *= Math.pow(2, 32), t.baseMediaDecodeTime += Wt(e[8] << 24 | e[9] << 16 | e[10] << 8 | e[11])), t;
}, Gt = 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]
};
}, Xt = 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: Gt(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 = Gt(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;
}, Kt = function (e) {
var t, i = new DataView(e.buffer, e.byteOffset, e.byteLength),
n = {version: e[0], flags: new Uint8Array(e.subarray(1, 4)), trackId: i.getUint32(4)}, r = 1 & n.flags[2],
a = 2 & n.flags[2], s = 8 & n.flags[2], o = 16 & n.flags[2], u = 32 & n.flags[2], l = 65536 & n.flags[0],
c = 131072 & n.flags[0];
return t = 8, r && (t += 4, n.baseDataOffset = i.getUint32(12), t += 4), a && (n.sampleDescriptionIndex = i.getUint32(t), t += 4), s && (n.defaultSampleDuration = i.getUint32(t), t += 4), o && (n.defaultSampleSize = i.getUint32(t), t += 4), u && (n.defaultSampleFlags = i.getUint32(t)), l && (n.durationIsEmpty = !0), !r && c && (n.baseDataOffsetIsMoof = !0), n;
}, Yt = Ae, $t = Ue.CaptionStream, Qt = function () {
var t, a, s, o, u, i, n = !1;
this.isInitialized = function () {return n;}, this.init = function (e) {t = new $t, n = !0, i = !!e && e.isPartial, t.on('data', function (e) {e.startTime = e.startPts / o, e.endTime = e.endPts / o, u.captions.push(e), u.captionStreams[e.stream] = !0;});}, this.isNewInit = function (e, t) {return !(e && 0 === e.length || t && 'object' == typeof t && 0 === Object.keys(t).length) && (s !== e[0] || o !== t[s]);}, this.parse = function (e, t, i) {
var n;
if (!this.isInitialized()) return null;
if (!t || !i) return null;
if (this.isNewInit(t, i)) s = t[0], o = i[s]; else if (null === s || !o) return a.push(e), null;
for (; 0 < a.length;) {
var r = a.shift();
this.parse(r, t, i);
}
return null !== (n = function (e, t, i) {
return null === t ? null : {
seiNals: Ut(e, t)[t],
timescale: i
};
}(e, s, o)) && n.seiNals ? (this.pushNals(n.seiNals), this.flushStream(), u) : 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 () {u.captions = [], u.captionStreams = {};}, this.resetCaptionStream = function () {
if (!this.isInitialized()) return null;
t.reset();
}, this.clearAllCaptions = function () {this.clearParsedCaptions(), this.resetCaptionStream();}, this.reset = function () {
a = [], o = s = null, u ? this.clearParsedCaptions() : u = {
captions: [],
captionStreams: {}
}, this.resetCaptionStream();
}, this.reset();
}, Jt = function () {
function e (e, t) {this.options = t || {}, this.self = e, this.init();}
var t = e.prototype;
return t.init = function () {
this.transmuxer && this.transmuxer.dispose(), this.transmuxer = this.options.handlePartialData ? new Bt(this.options) : new wt(this.options), this.options.handlePartialData ? function (n, e) {
e.on('data', function (e) {
var t = {
data: e.data.track.initSegment.buffer,
byteOffset: e.data.track.initSegment.byteOffset,
byteLength: e.data.track.initSegment.byteLength
}, i = {
boxes: {
data: e.data.boxes.buffer,
byteOffset: e.data.boxes.byteOffset,
byteLength: e.data.boxes.byteLength
}, initSegment: t, type: e.type, sequence: e.data.sequence
};
'undefined' != typeof e.data.videoFrameDts && (i.videoFrameDtsTime = ge(e.data.videoFrameDts)), 'undefined' != typeof e.data.videoFramePts && (i.videoFramePtsTime = ge(e.data.videoFramePts)), n.postMessage({
action: 'data',
segment: i
}, [i.boxes.data, i.initSegment.data]);
}), e.on('id3Frame', function (e) {
n.postMessage({
action: 'id3Frame',
id3Frame: e
});
}), e.on('caption', function (e) {
n.postMessage({
action: 'caption',
caption: e
});
}), e.on('done', function (e) {
n.postMessage({
action: 'done',
type: Ft(e)
});
}), e.on('partialdone', function (e) {
n.postMessage({
action: 'partialdone',
type: Ft(e)
});
}), e.on('endedsegment', function (e) {
n.postMessage({
action: 'endedSegment',
type: Ft(e)
});
}), e.on('trackinfo', function (e) {
n.postMessage({
action: 'trackinfo',
trackInfo: e
});
}), e.on('audioTimingInfo', function (e) {
if (null !== e.start) {
var t = {start: ge(e.start)};
e.end && (t.end = ge(e.end)), n.postMessage({action: 'audioTimingInfo', audioTimingInfo: t});
} else n.postMessage({action: 'audioTimingInfo', audioTimingInfo: e});
}), e.on('videoTimingInfo', function (e) {
var t = {start: ge(e.start)};
e.end && (t.end = ge(e.end)), n.postMessage({action: 'videoTimingInfo', videoTimingInfo: t});
});
}(this.self, this.transmuxer) : function (n, e) {
e.on('data', function (e) {
var t = e.initSegment;
e.initSegment = {data: t.buffer, byteOffset: t.byteOffset, byteLength: t.byteLength};
var i = e.data;
e.data = i.buffer, n.postMessage({
action: 'data',
segment: e,
byteOffset: i.byteOffset,
byteLength: i.byteLength
}, [e.data]);
}), e.on('done', function (e) {n.postMessage({action: 'done'});}), e.on('gopInfo', function (e) {
n.postMessage({
action: 'gopInfo',
gopInfo: e
});
}), e.on('videoSegmentTimingInfo', function (e) {
var t = {
start: {
decode: ge(e.start.dts),
presentation: ge(e.start.pts)
},
end: {decode: ge(e.end.dts), presentation: ge(e.end.pts)},
baseMediaDecodeTime: ge(e.baseMediaDecodeTime)
};
e.prependedContentDuration && (t.prependedContentDuration = ge(e.prependedContentDuration)), n.postMessage({
action: 'videoSegmentTimingInfo',
videoSegmentTimingInfo: t
});
}), e.on('id3Frame', function (e) {
n.postMessage({
action: 'id3Frame',
id3Frame: e
});
}), e.on('caption', function (e) {
n.postMessage({
action: 'caption',
caption: e
});
}), e.on('trackinfo', function (e) {
n.postMessage({
action: 'trackinfo',
trackInfo: e
});
}), e.on('audioTimingInfo', function (e) {
n.postMessage({
action: 'audioTimingInfo',
audioTimingInfo: {start: ge(e.start), end: ge(e.end)}
});
}), e.on('videoTimingInfo', function (e) {
n.postMessage({
action: 'videoTimingInfo',
videoTimingInfo: {start: ge(e.start), end: ge(e.end)}
});
});
}(this.self, this.transmuxer);
}, t.pushMp4Captions = function (e) {
this.captionParser || (this.captionParser = new Qt, this.captionParser.init());
var t = new Uint8Array(e.data, e.byteOffset, e.byteLength),
i = this.captionParser.parse(t, e.trackIds, e.timescales);
this.self.postMessage({action: 'mp4Captions', captions: i && i.captions || [], data: t.buffer}, [t.buffer]);
}, t.clearAllMp4Captions = function () {this.captionParser && this.captionParser.clearAllCaptions();}, t.clearParsedMp4Captions = function () {this.captionParser && this.captionParser.clearParsedCaptions();}, t.push = function (e) {
var t = new Uint8Array(e.data, e.byteOffset, e.byteLength);
this.transmuxer.push(t);
}, t.reset = function () {this.transmuxer.reset();}, t.setTimestampOffset = function (e) {
var t = e.timestampOffset || 0;
this.transmuxer.setBaseMediaDecodeTime(Math.round(me(t)));
}, t.setAudioAppendStart = function (e) {this.transmuxer.setAudioAppendStart(Math.ceil(me(e.appendStart)));}, t.setRemux = function (e) {this.transmuxer.setRemux(e.remux);}, t.flush = function (e) {
this.transmuxer.flush(), Zt.postMessage({
action: 'done',
type: 'transmuxed'
});
}, t.partialFlush = function (e) {
this.transmuxer.partialFlush(), Zt.postMessage({
action: 'partialdone',
type: 'transmuxed'
});
}, t.endTimeline = function () {
this.transmuxer.endTimeline(), Zt.postMessage({
action: 'endedtimeline',
type: 'transmuxed'
});
}, t.alignGopsWith = function (e) {this.transmuxer.alignGopsWith(e.gopsToAlignWith.slice());}, e;
}();
new function (t) {t.onmessage = function (e) {'init' === e.data.action && e.data.options ? this.messageHandlers = new Jt(t, e.data.options) : (this.messageHandlers || (this.messageHandlers = new Jt(t)), e.data && e.data.action && 'init' !== e.data.action && this.messageHandlers[e.data.action] && this.messageHandlers[e.data.action](e.data));};}(Zt);
}();
}), qc = Pc('PlaylistSelector'), Hc = function (n) {
function e (e, t) {
var i;
if (i = n.call(this) || this, !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.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.handlePartialData_ = e.handlePartialData, i.timelineChangeController_ = e.timelineChangeController, i.shouldSaveSegmentTimingInfo_ = !0, 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 <= da.browser.IE_VERSION, i.appendInitSegment_ = {
audio: !0,
video: !0
}, i.playlistOfLastInitSegment_ = {
audio: null,
video: null
}, i.callQueue_ = [], i.loadQueue_ = [], i.metadataQueue_ = {
id3: [],
caption: []
}, 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_ = Pc('SegmentLoader[' + i.loaderType_ + ']'), Object.defineProperty(Ve(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;
}
Ge(e, n);
var t = e.prototype;
return t.createTransmuxer_ = function () {
var e = new Vc;
return e.postMessage({
action: 'init',
options: {
remux: !1,
alignGopsAtEnd: this.safeAppend_,
keepOriginalTimestamps: !0,
handlePartialData: this.handlePartialData_
}
}), e;
}, t.resetStats_ = function () {this.mediaBytesTransferred = 0, this.mediaRequests = 0, this.mediaRequestsAborted = 0, this.mediaRequestsTimedout = 0, this.mediaRequestsErrored = 0, this.mediaTransferDuration = 0, this.mediaSecondsLoaded = 0;}, t.dispose = function () {this.trigger('dispose'), this.state = 'DISPOSED', this.pause(), this.abort_(), this.transmuxer_ && (this.transmuxer_.terminate(), hc()), this.resetStats_(), this.checkBufferTimeout_ && T.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_);}, 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_ && dc(this.transmuxer_), this.gopBuffer_.length = 0, this.pause(), this.trigger('ended');}, t.buffered_ = function () {
if (!this.sourceUpdater_ || !this.startingMediaInfo_) return da.createTimeRanges();
if ('main' === this.loaderType_) {
var e = this.startingMediaInfo_, t = e.hasAudio, i = e.hasVideo, n = e.isMuxed;
if (i && t && !this.audioDisabled_ && !n) 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 = gl(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 = vl(e), n = this.keyCache_[i];
this.cacheEncryptionKeys_ && t && !n && e.bytes && (this.keyCache_[i] = n = {
resolvedUri: e.resolvedUri,
bytes: e.bytes
});
var r = {resolvedUri: (n || e).resolvedUri};
return n && (r.bytes = n.bytes), r;
}, t.couldBeginLoading_ = function () {return this.playlist_ && !this.paused();}, t.load = function () {
if (this.monitorBuffer_(), this.playlist_) {
if (this.syncController_.setDateTimeMapping(this.playlist_), 'INIT' === this.state && this.couldBeginLoading_()) return this.init_();
!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
});
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 && !this.handlePartialData_ || this.resyncLoader(), this.currentMediaInfo_ = void 0, void this.trigger('playlistupdate');
var a = e.mediaSequence - i.mediaSequence;
this.logger_('live window shift [' + a + ']'), null !== this.mediaIndex && (this.mediaIndex -= a), n && (n.mediaIndex -= a, 0 <= n.mediaIndex && (n.segment = e.segments[n.mediaIndex])), this.syncController_.saveExpiredSegmentInfo(i, e);
}
}, t.pause = function () {this.checkBufferTimeout_ && (T.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'});
}, t.resetLoader = function () {this.fetchAtBuffer_ = !1, this.resyncLoader();}, t.resyncLoader = function () {this.transmuxer_ && dc(this.transmuxer_), this.mediaIndex = 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) {
if (void 0 === i && (i = function () {}), t === 1 / 0 && (t = this.duration_()), this.sourceUpdater_ && this.currentMediaInfo_) {
var n = 1, r = function () {0 === --n && i();};
for (var a in this.audioDisabled_ || (n++, this.sourceUpdater_.removeAudio(e, t, r)), 'main' === this.loaderType_ && this.currentMediaInfo_ && this.currentMediaInfo_.hasVideo && (this.gopBuffer_ = function (e, t, i, n) {
for (var r = Math.ceil((t - n) * fu), a = Math.ceil((i - n) * fu), s = e.slice(), o = e.length; o-- && !(e[o].pts <= a);) ;
if (-1 === o) return s;
for (var u = o + 1; u-- && !(e[u].pts <= r);) ;
return u = Math.max(u, 0), s.splice(u, o - u + 1), s;
}(this.gopBuffer_, e, t, this.timeMapping_), n++, this.sourceUpdater_.removeVideo(e, t, r)), this.inbandTextTracks_) Nc(e, t, this.inbandTextTracks_[a]);
Nc(e, t, this.segmentMetadataTrack_), r();
}
}, t.monitorBuffer_ = function () {this.checkBufferTimeout_ && T.clearTimeout(this.checkBufferTimeout_), this.checkBufferTimeout_ = T.setTimeout(this.monitorBufferTick_.bind(this), 1);}, t.monitorBufferTick_ = function () {'READY' === this.state && this.fillBuffer_(), this.checkBufferTimeout_ && T.clearTimeout(this.checkBufferTimeout_), this.checkBufferTimeout_ = T.setTimeout(this.monitorBufferTick_.bind(this), 500);}, t.fillBuffer_ = function () {
if (!this.sourceUpdater_.updating()) {
this.syncPoint_ || (this.syncPoint_ = this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_()));
var e = this.buffered_(),
t = this.checkBuffer_(e, this.playlist_, this.mediaIndex, this.hasPlayed_(), this.currentTime_(), this.syncPoint_);
t && (t.timestampOffset = Bc({
segmentTimeline: t.timeline,
currentTimeline: this.currentTimeline_,
startOfSegment: t.startOfSegment,
buffered: e,
overrideCheck: this.isPendingTimestampOffset_
}), this.isPendingTimestampOffset_ = !1, 'number' == typeof t.timestampOffset && this.timelineChangeController_.pendingTimelineChange({
type: this.loaderType_,
from: this.currentTimeline_,
to: t.timeline
}), this.loadSegment_(t));
}
}, t.isEndOfStream_ = function (e, t) {
if (void 0 === e && (e = this.mediaIndex), void 0 === t && (t = this.playlist_), !t || !this.mediaSource_) return !1;
var i = e + 1 === t.segments.length;
return t.endList && 'open' === this.mediaSource_.readyState && i;
}, t.checkBuffer_ = function (e, t, i, n, r, a) {
var s = 0;
e.length && (s = e.end(e.length - 1));
var o = Math.max(0, s - r);
if (!t.segments.length) return null;
if (o >= this.goalBufferLength_()) return null;
if (!n && 1 <= o) return null;
var u, l = null, c = !1;
if (null === a) l = this.getSyncSegmentCandidate_(t), c = !0; else if (null !== i) {
var d = t.segments[i];
u = d && d.end ? d.end : s, l = i + 1;
} else if (this.fetchAtBuffer_) {
var h = ic.getMediaInfoForTime(t, s, a.segmentIndex, a.time);
l = h.mediaIndex, u = h.startTime;
} else {
var p = ic.getMediaInfoForTime(t, r, a.segmentIndex, a.time);
l = p.mediaIndex, u = p.startTime;
}
var f = this.generateSegmentInfo_(t, l, u, c);
return !f || this.mediaSource_ && this.playlist_ && f.mediaIndex === this.playlist_.segments.length - 1 && 'ended' === this.mediaSource_.readyState && !this.seeking_() ? void 0 : (this.logger_('checkBuffer_ returning ' + f.uri, {
segmentInfo: f,
playlist: t,
currentMediaIndex: i,
nextMediaIndex: l,
startOfSegment: u,
isSyncRequest: c
}), f);
}, t.getSyncSegmentCandidate_ = function (e) {
var t = this;
if (-1 === this.currentTimeline_) return 0;
var i = e.segments.map(function (e, t) {
return {
timeline: e.timeline,
segmentIndex: t
};
}).filter(function (e) {return e.timeline === t.currentTimeline_;});
return i.length ? i[Math.min(i.length - 1, 1)].segmentIndex : Math.max(e.segments.length - 1, 0);
}, t.generateSegmentInfo_ = function (e, t, i, n) {
if (t < 0 || t >= e.segments.length) return null;
var r, a, s = e.segments[t], o = this.sourceUpdater_.audioBuffered(), u = this.sourceUpdater_.videoBuffered();
return o.length && (r = o.end(o.length - 1) - this.sourceUpdater_.audioTimestampOffset()), u.length && (a = function (e, t, i) {
if ('undefined' == typeof t || null === t || !e.length) return [];
var n, r = Math.ceil((t - i + 3) * fu);
for (n = 0; n < e.length && !(e[n].pts > r); n++) ;
return e.slice(n);
}(this.gopBuffer_, this.currentTime_() - this.sourceUpdater_.videoTimestampOffset(), this.timeMapping_)), {
requestId: 'segment-loader-' + Math.random(),
uri: s.resolvedUri,
mediaIndex: t,
isSyncRequest: n,
startOfSegment: i,
playlist: e,
bytes: null,
encryptedBytes: null,
timestampOffset: null,
timeline: s.timeline,
duration: s.duration,
segment: s,
byteLength: 0,
transmuxer: this.transmuxer_,
audioAppendStart: r,
gopsToAlignWith: a
};
}, t.abortRequestEarly_ = function (e) {
if (this.vhs_.tech_.paused() || !this.xhrOptions_.timeout || !this.playlist_.attributes.BANDWIDTH) return !1;
if (Date.now() - (e.firstBytesReceivedAt || Date.now()) < 1e3) return !1;
var t = this.currentTime_(), i = e.bandwidth, n = this.pendingSegment_.duration,
r = ic.estimateSegmentRequestTime(n, i, this.playlist_, e.bytesReceived),
a = function (e, t, i) {return void 0 === i && (i = 1), ((e.length ? e.end(e.length - 1) : 0) - t) / i;}(this.buffered_(), t, this.vhs_.tech_.playbackRate()) - 1;
if (r <= a) return !1;
var s = function (e) {
var t = e.master, i = e.currentTime, n = e.bandwidth, r = e.duration, a = e.segmentDuration,
s = e.timeUntilRebuffer, o = e.currentTimeline, u = e.syncController,
l = t.playlists.filter(function (e) {return !ic.isIncompatible(e);}), c = l.filter(ic.isEnabled);
c.length || (c = l.filter(function (e) {return !ic.isDisabled(e);}));
var d = c.filter(ic.hasAttribute.bind(null, 'BANDWIDTH')).map(function (e) {
var t = u.getSyncPoint(e, r, o, i) ? 1 : 2;
return {playlist: e, rebufferingImpact: ic.estimateSegmentRequestTime(a, n, e) * t - s};
}), h = d.filter(function (e) {return e.rebufferingImpact <= 0;});
return Dc(h, function (e, t) {return Mc(t.playlist, e.playlist);}), h.length ? h[0] : (Dc(d, function (e, t) {return e.rebufferingImpact - t.rebufferingImpact;}), d[0] || null);
}({
master: this.vhs_.playlists.master,
currentTime: t,
bandwidth: i,
duration: this.duration_(),
segmentDuration: n,
timeUntilRebuffer: a,
currentTimeline: this.currentTimeline_,
syncController: this.syncController_
});
if (s) {
var o = r - a - s.rebufferingImpact, u = .5;
return a <= ec && (u = 1), !s.playlist || s.playlist.uri === this.playlist_.uri || o < u ? !1 : (this.bandwidth = s.playlist.attributes.BANDWIDTH * uc.BANDWIDTH_VARIANCE + 1, this.abort(), this.trigger('earlyabort'), !0);
}
}, t.handleAbort_ = function () {this.mediaRequestsAborted += 1;}, t.handleProgress_ = function (e, t) {this.checkForAbort_(t.requestId) || this.abortRequestEarly_(t.stats) || this.trigger('progress');}, t.handleTrackInfo_ = function (e, t) {
this.checkForAbort_(e.requestId) || this.abortRequestEarly_(e.stats) || this.checkForIllegalMediaSwitch(t) || (t = 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) || (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.abortRequestEarly_(e.stats) || (this.pendingSegment_.trackInfo = t, this.hasEnoughInfoToAppend_() && this.processCallQueue_()));
}, t.handleTimingInfo_ = function (e, t, i, n) {
if (!this.checkForAbort_(e.requestId) && !this.abortRequestEarly_(e.stats)) {
var r = this.pendingSegment_, a = Fc(t);
r[a] = r[a] || {}, r[a][i] = n, this.logger_('timinginfo: ' + t + ' - ' + i + ' - ' + n), this.hasEnoughInfoToAppend_() && this.processCallQueue_();
}
}, t.handleCaptions_ = function (e, t) {
var s = this;
if (!this.checkForAbort_(e.requestId) && !this.abortRequestEarly_(e.stats)) if (0 !== t.length) if (this.pendingSegment_.hasAppendedData_) {
var o = null === this.sourceUpdater_.videoTimestampOffset() ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset(),
u = {};
t.forEach(function (e) {
u[e.stream] = u[e.stream] || {startTime: 1 / 0, captions: [], endTime: 0};
var t = u[e.stream];
t.startTime = Math.min(t.startTime, e.startTime + o), t.endTime = Math.max(t.endTime, e.endTime + o), t.captions.push(e);
}), Object.keys(u).forEach(function (e) {
var t = u[e], i = t.startTime, n = t.endTime, r = t.captions, a = s.inbandTextTracks_;
s.logger_('adding cues from ' + i + ' -> ' + n + ' for ' + e), function (e, t, i) {
if (!e[i]) {
t.trigger({
type: 'usage',
name: 'vhs-608'
}), t.trigger({type: 'usage', name: 'hls-608'});
var n = t.textTracks().getTrackById(i);
e[i] = n || t.addRemoteTextTrack({kind: 'captions', id: i, label: i}, !1).track;
}
}(a, s.vhs_.tech_, e), Nc(i, n, a[e]), function (e) {
var i = e.inbandTextTracks, t = e.captionArray, n = e.timestampOffset;
if (t) {
var r = T.WebKitDataCue || T.VTTCue;
t.forEach(function (e) {
var t = e.stream;
i[t].addCue(new r(e.startTime + n, e.endTime + n, e.text));
});
}
}({captionArray: r, inbandTextTracks: a, timestampOffset: o});
}), this.transmuxer_ && this.transmuxer_.postMessage({action: 'clearParsedMp4Captions'});
} else this.metadataQueue_.caption.push(this.handleCaptions_.bind(this, e, t)); else this.logger_('SegmentLoader received no captions from a caption event');
}, t.handleId3_ = function (e, t, i) {
if (!this.checkForAbort_(e.requestId) && !this.abortRequestEarly_(e.stats)) if (this.pendingSegment_.hasAppendedData_) {
var n = null === this.sourceUpdater_.videoTimestampOffset() ? this.sourceUpdater_.audioTimestampOffset() : this.sourceUpdater_.videoTimestampOffset();
!function (e, t, i) {
e.metadataTrack_ || (e.metadataTrack_ = i.addRemoteTextTrack({
kind: 'metadata',
label: 'Timed Metadata'
}, !1).track, e.metadataTrack_.inBandMetadataTrackDispatchType = t);
}(this.inbandTextTracks_, i, this.vhs_.tech_), Rc({
inbandTextTracks: this.inbandTextTracks_,
metadataArray: t,
timestampOffset: n,
videoDuration: this.duration_()
});
} else 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.currentMediaInfo_ || !jc({
timelineChangeController: this.timelineChangeController_,
currentTimeline: this.currentTimeline_,
segmentTimeline: e.timeline,
loaderType: this.loaderType_,
audioDisabled: this.audioDisabled_
}));
}, t.hasEnoughInfoToAppend_ = function () {
if (!this.sourceUpdater_.ready()) return !1;
var e = this.pendingSegment_;
if (!e || !e.trackInfo) return !1;
if (!this.handlePartialData_) {
var t = this.currentMediaInfo_, i = t.hasAudio, n = t.hasVideo, r = t.isMuxed;
if (n && !e.videoTimingInfo) return !1;
if (i && !this.audioDisabled_ && !r && !e.audioTimingInfo) return !1;
}
return !jc({
timelineChangeController: this.timelineChangeController_,
currentTimeline: this.currentTimeline_,
segmentTimeline: e.timeline,
loaderType: this.loaderType_,
audioDisabled: this.audioDisabled_
});
}, t.handleData_ = function (e, t) {
if (!this.checkForAbort_(e.requestId) && !this.abortRequestEarly_(e.stats)) if (!this.callQueue_.length && this.hasEnoughInfoToAppend_()) {
var i = this.pendingSegment_;
if (this.setTimeMapping_(i.timeline), this.updateMediaSecondsLoaded_(i.segment), 'closed' !== this.mediaSource_.readyState) {
if (e.map && (e.map = this.initSegmentForMap(e.map, !0), i.segment.map = e.map), e.key && this.segmentKey(e.key, !0), i.isFmp4 = e.isFmp4, i.timingInfo = i.timingInfo || {}, i.isFmp4) this.trigger('fmp4'), i.timingInfo.start = i[Fc(t.type)].start; else {
var n, r = 'main' === this.loaderType_ && this.currentMediaInfo_.hasVideo;
r && (n = this.handlePartialData_ ? t.videoFramePtsTime : i.videoTimingInfo.start), i.timingInfo.start = this.trueSegmentStart_({
currentStart: i.timingInfo.start,
playlist: i.playlist,
mediaIndex: i.mediaIndex,
currentVideoTimestampOffset: this.sourceUpdater_.videoTimestampOffset(),
useVideoTimingInfo: r,
firstVideoFrameTimeForData: n,
videoTimingInfo: i.videoTimingInfo,
audioTimingInfo: i.audioTimingInfo
});
}
this.updateAppendInitSegmentStatus(i, t.type), this.updateSourceBufferTimestampOffset_(i), i.hasAppendedData_ = !0, this.processMetadataQueue_(), this.appendData_(i, 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) {
var a = gl(n);
if (this.activeInitSegmentId_ === a) return null;
i = this.initSegmentForMap(n, !0).bytes, this.activeInitSegmentId_ = a;
}
return i && this.appendInitSegment_[t] ? (this.playlistOfLastInitSegment_[t] = r, this.appendInitSegment_[t] = !!n, this.activeInitSegmentId_ = null, i) : null;
}, t.appendToSourceBuffer_ = function (e) {
var t = this, i = e.segmentInfo, n = e.type, r = e.initSegment, a = e.data, s = [a], o = a.byteLength;
r && (s.unshift(r), o += r.byteLength);
var u = function (e) {
var t, i = 0;
return e.bytes && (t = new Uint8Array(e.bytes), e.segments.forEach(function (e) {t.set(e, i), i += e.byteLength;})), t;
}({bytes: o, segments: s});
this.sourceUpdater_.appendBuffer({
segmentInfo: i,
type: n,
bytes: u
}, function (e) {e && (t.error(n + ' append of ' + u.length + 'b failed for segment #' + i.mediaIndex + ' in playlist ' + i.playlist.id), t.trigger('appenderror'));});
}, t.handleVideoSegmentTimingInfo_ = function (e, t) {
if (this.pendingSegment_ && e === this.pendingSegment_.requestId) {
var i = this.pendingSegment_.segment;
i.videoTimingInfo || (i.videoTimingInfo = {}), i.videoTimingInfo.transmuxerPrependedSeconds = t.prependedContentDuration || 0, i.videoTimingInfo.transmuxedPresentationStart = t.start.presentation, i.videoTimingInfo.transmuxedPresentationEnd = t.end.presentation, i.videoTimingInfo.baseMediaDecodeTime = t.baseMediaDecodeTime;
}
}, t.appendData_ = function (e, t) {
var i = t.type, n = t.data;
if (n && n.byteLength && ('audio' !== i || !this.audioDisabled_)) {
var r = this.getInitSegmentAndUpdateState_({
type: i,
initSegment: t.initSegment,
playlist: e.playlist,
map: e.isFmp4 ? e.segment.map : null
});
this.appendToSourceBuffer_({segmentInfo: e, type: i, initSegment: r, data: n});
}
}, t.loadSegment_ = function (i) {
var n = this;
this.state = 'WAITING', this.pendingSegment_ = i, this.trimBackBuffer_(i), 'number' == typeof i.timestampOffset && this.transmuxer_ && this.transmuxer_.postMessage({action: 'clearAllMp4Captions'}), this.hasEnoughInfoToLoad_() ? this.updateTransmuxerAndRequestSegment_(i) : this.loadQueue_.push(function () {
var e = n.buffered_();
'number' == typeof i.timestampOffset && (i.timestampOffset = Bc({
segmentTimeline: i.timeline,
currentTimeline: n.currentTimeline_,
startOfSegment: i.startOfSegment,
buffered: e,
overrideCheck: !0
})), delete i.audioAppendStart;
var t = n.sourceUpdater_.audioBuffered();
t.length && (i.audioAppendStart = t.end(t.length - 1) - n.sourceUpdater_.audioTimestampOffset()), n.updateTransmuxerAndRequestSegment_(i);
});
}, t.updateTransmuxerAndRequestSegment_ = function (e) {
this.shouldUpdateTransmuxerTimestampOffset_(e.timestampOffset) && (this.gopBuffer_.length = 0, e.gopsToAlignWith = [], this.timeMapping_ = 0, this.transmuxer_.postMessage({action: 'reset'}), this.transmuxer_.postMessage({
action: 'setTimestampOffset',
timestampOffset: e.timestampOffset
}));
var t = this.createSimplifiedSegmentObj_(e);
e.abortRequests = Fl({
xhr: this.vhs_.xhr,
xhrOptions: this.xhrOptions_,
decryptionWorker: this.decrypter_,
segment: t,
handlePartialData: this.handlePartialData_,
abortFn: this.handleAbort_.bind(this),
progressFn: this.handleProgress_.bind(this),
trackInfoFn: this.handleTrackInfo_.bind(this),
timingInfoFn: this.handleTimingInfo_.bind(this),
videoSegmentTimingInfoFn: this.handleVideoSegmentTimingInfo_.bind(this, e.requestId),
captionsFn: this.handleCaptions_.bind(this),
id3Fn: this.handleId3_.bind(this),
dataFn: this.handleData_.bind(this),
doneFn: this.segmentRequestFinished_.bind(this)
});
}, t.trimBackBuffer_ = function (e) {
var t = function (e, t, i) {
var n = t - uc.BACK_BUFFER_LENGTH;
e.length && (n = Math.max(n, e.start(0)));
var r = t - i;
return Math.min(r, n);
}(this.seekable_(), this.currentTime_(), this.playlist_.targetDuration || 10);
0 < t && this.remove(0, t);
}, t.createSimplifiedSegmentObj_ = function (e) {
var t = e.segment, i = {
resolvedUri: t.resolvedUri,
byterange: t.byterange,
requestId: e.requestId,
transmuxer: e.transmuxer,
audioAppendStart: e.audioAppendStart,
gopsToAlignWith: e.gopsToAlignWith
}, n = e.playlist.segments[e.mediaIndex];
if (n && n.end && n.timeline === t.timeline && (i.baseStartTime = n.end + e.timestampOffset), t.key) {
var r = t.key.iv || new Uint32Array([0, 0, 0, e.mediaIndex + e.playlist.mediaSequence]);
i.key = this.segmentKey(t.key), i.key.iv = r;
}
return t.map && (i.map = this.initSegmentForMap(t.map)), i;
}, t.saveTransferStats_ = function (e) {this.mediaRequests += 1, e && (this.mediaBytesTransferred += e.bytesReceived, this.mediaTransferDuration += e.roundTripTime);}, t.saveBandwidthRelatedStats_ = function (e) {this.bandwidth = e.bandwidth, this.roundTrip = e.roundTripTime, this.pendingSegment_.byteLength = e.bytesReceived;}, 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) {
if (this.pendingSegment_ = null, this.state = 'READY', e.code === gc) return;
return this.pause(), e.code === mc ? void this.handleTimeout_() : (this.mediaRequestsErrored += 1, this.error(e), void this.trigger('error'));
}
this.saveBandwidthRelatedStats_(t.stats);
var n = this.pendingSegment_;
n.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';
var r = this.isEndOfStream_(n.mediaIndex, n.playlist), a = null !== this.mediaIndex,
s = n.timeline !== this.currentTimeline_ && 0 < n.timeline;
!n.isFmp4 && (r || a && s) && pc(this.transmuxer_), this.trigger('appending'), this.waitForAppendsToComplete_(n);
}
}, t.setTimeMapping_ = function (e) {
var t = this.syncController_.mappingForTimeline(e);
null !== t && (this.timeMapping_ = t);
}, 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, u = e.audioTimingInfo;
if ('undefined' != typeof t) return t;
if (!s) return u.start;
var l = i.segments[n - 1];
return 0 !== n && l && 'undefined' != typeof l.start && l.end === r + a ? o.start : r;
}, t.waitForAppendsToComplete_ = function (e) {
if (!this.currentMediaInfo_) return this.error({
message: 'No starting media returned, likely due to an unsupported media format.',
blacklistDuration: 1 / 0
}), void this.trigger('error');
var t = this.currentMediaInfo_, i = t.hasAudio, n = t.hasVideo, r = t.isMuxed,
a = 'main' === this.loaderType_ && n, s = !this.audioDisabled_ && i && !r;
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);
a && e.waitingOnAppends++, s && e.waitingOnAppends++, a && this.sourceUpdater_.videoQueueCallback(this.checkAppendsDone_.bind(this, e)), s && 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 = function (e, t, i) {return 'main' === e && t && i ? i.hasAudio || i.hasVideo ? t.hasVideo && !i.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.' : !t.hasVideo && i.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;}(this.loaderType_, this.currentMediaInfo_, e);
return !!t && (this.error({message: t, blacklistDuration: 1 / 0}), this.trigger('error'), !0);
}, t.updateSourceBufferTimestampOffset_ = function (e) {
if (null !== e.timestampOffset && 'number' == typeof e.timingInfo.start && !e.changedTimestampOffset && 'main' === this.loaderType_) {
var t = !1;
e.timestampOffset -= e.timingInfo.start, 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.updateTimingInfoEnd_ = function (e) {
e.timingInfo = e.timingInfo || {};
var t = 'main' === this.loaderType_ && this.currentMediaInfo_.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_;
if (this.updateTimingInfoEnd_(e), this.shouldSaveSegmentTimingInfo_ && this.syncController_.saveSegmentTimingInfo({
segmentInfo: e,
shouldSaveTimelineMapping: 'main' === this.loaderType_
}), this.logger_(function (e) {
var t = e.segment, i = t.start, n = t.end, r = e.playlist, a = r.mediaSequence, s = r.id, o = r.segments,
u = void 0 === o ? [] : o, l = e.mediaIndex, c = e.timeline;
return ['appending [' + l + '] of [' + a + ', ' + (a + u.length) + '] from playlist [' + s + ']', '[' + i + ' => ' + n + '] in timeline [' + c + ']'].join(' ');
}(e)), this.recordThroughput_(e), this.pendingSegment_ = null, this.state = 'READY', e.isSyncRequest) this.trigger('syncinfoupdate'); else {
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 t = e.segment;
if (t.end && this.currentTime_() - t.end > 3 * e.playlist.targetDuration) this.resetEverything(); else null !== this.mediaIndex && this.trigger('bandwidthupdate'), this.trigger('progress'), this.mediaIndex = e.mediaIndex, this.isEndOfStream_(e.mediaIndex, e.playlist) && this.endOfStream(), this.trigger('appended'), this.paused() || this.monitorBuffer_();
}
}, t.recordThroughput_ = function (e) {
var t = this.throughput.rate, i = Date.now() - e.endOfAllRequests + 1, n = Math.floor(e.byteLength / i * 8 * 1e3);
this.throughput.rate += (n - t) / ++this.throughput.count;
}, t.addSegmentMetadataCue_ = function (e) {
if (this.segmentMetadataTrack_) {
var t = e.segment, i = t.start, n = t.end;
if (Uc(i) && Uc(n)) {
Nc(i, n, this.segmentMetadataTrack_);
var r = T.WebKitDataCue || T.VTTCue, a = {
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: n
}, s = new r(i, n, JSON.stringify(a));
s.value = a, this.segmentMetadataTrack_.addCue(s);
}
}
}, e;
}(da.EventTarget);
function Wc () {}
function zc (e) {return 'string' != typeof e ? e : e.replace(/./, function (e) {return e.toUpperCase();});}
function Gc (e, t) {
var i = t[e + 'Buffer'];
return i && i.updating || t.queuePending[e];
}
function Xc (e, t) {
if (0 !== t.queue.length) {
var i = 0, n = t.queue[i];
if ('mediaSource' !== n.type) {
if ('mediaSource' !== e && t.started_ && 'closed' !== t.mediaSource.readyState && !Gc(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), n.action(e, t), n.doneFn ? t.queuePending[e] = n : Xc(e, t);
}
} else t.updating() || 'closed' === t.mediaSource.readyState || (t.queue.shift(), n.action(t), n.doneFn && n.doneFn(), Xc('audio', t), Xc('video', t));
}
}
function Kc (e, t) {
var i = t[e + 'Buffer'], n = zc(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 Yc (e, t) {return e && t && -1 !== Array.prototype.indexOf.call(e.sourceBuffers, t);}
function $c (e) {
var t = e.type, i = e.sourceUpdater, n = e.action, r = e.doneFn, a = e.name;
i.queue.push({type: t, action: n, doneFn: r, name: a}), Xc(t, i);
}
function Qc (i, n) {
return function (e) {
if (n.queuePending[i]) {
var t = n.queuePending[i].doneFn;
n.queuePending[i] = null, t && t(n[i + 'Error_']);
}
Xc(i, n);
};
}
function Jc (e) {return decodeURIComponent(escape(String.fromCharCode.apply(null, e)));}
function Zc (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;
}
function ed (e, t) {e.abort(), e.pause(), t && t.activePlaylistLoader && (t.activePlaylistLoader.pause(), t.activePlaylistLoader = null);}
function td (e, t) {(t.activePlaylistLoader = e).load();}
function id (t) {
['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(function (e) {wd[e](e, t);});
var i = t.mediaTypes, e = t.masterPlaylistLoader, n = t.tech, r = t.vhs;
['AUDIO', 'SUBTITLES'].forEach(function (e) {
i[e].activeGroup = function (a, s) {
return function (t) {
var e = s.masterPlaylistLoader, i = s.mediaTypes[a].groups, n = e.media();
if (!n) return null;
var r = null;
return n.attributes[a] && (r = i[n.attributes[a]]), r = r || i.main, 'undefined' == typeof t ? r : null === t ? null : r.filter(function (e) {return e.id === t.id;})[0] || null;
};
}(e, t), i[e].activeTrack = Id[e](e, t), i[e].onGroupChanged = function (o, u) {
return function () {
var e = u.segmentLoaders, t = e[o], i = e.main, n = u.mediaTypes[o], r = n.activeTrack(),
a = n.activeGroup(r), s = n.activePlaylistLoader;
ed(t, n), a && (a.playlistLoader ? (t.resyncLoader(), td(a.playlistLoader, n)) : s && i.resetEverything());
};
}(e, t), i[e].onGroupChanging = function (t, i) {
return function () {
var e = i.segmentLoaders[t];
e.abort(), e.pause();
};
}(e, t), i[e].onTrackChanged = function (o, u) {
return function () {
var e = u.segmentLoaders, t = e[o], i = e.main, n = u.mediaTypes[o], r = n.activeTrack(),
a = n.activeGroup(r), s = n.activePlaylistLoader;
if (ed(t, n), a) {
if ('AUDIO' === o) {
if (!a.playlistLoader) return i.setAudio(!0), void i.resetEverything();
t.setAudio(!0), i.setAudio(!1);
}
s !== a.playlistLoader && (t.track && t.track(r), t.resetEverything()), td(a.playlistLoader, n);
}
};
}(e, t);
});
var a = i.AUDIO.activeGroup();
if (a) {
var s = (a.filter(function (e) {return e.default;})[0] || a[0]).id;
i.AUDIO.tracks[s].enabled = !0, i.AUDIO.onTrackChanged();
}
function o () {
i.AUDIO.onTrackChanged(), n.trigger({
type: 'usage',
name: 'vhs-audio-change'
}), n.trigger({type: 'usage', name: 'hls-audio-change'});
}
for (var u in e.on('mediachange', function () {['AUDIO', 'SUBTITLES'].forEach(function (e) {return i[e].onGroupChanged();});}), e.on('mediachanging', function () {['AUDIO', 'SUBTITLES'].forEach(function (e) {return i[e].onGroupChanging();});}), n.audioTracks().addEventListener('change', o), n.remoteTextTracks().addEventListener('change', i.SUBTITLES.onTrackChanged), r.on('dispose', function () {n.audioTracks().removeEventListener('change', o), n.remoteTextTracks().removeEventListener('change', i.SUBTITLES.onTrackChanged);}), n.clearTracks('audio'), i.AUDIO.tracks) n.audioTracks().addTrack(i.AUDIO.tracks[u]);
}
function nd (e, t, i) {
var n = e.masterPlaylistController_,
r = n[(e.options_.smoothQualityChange ? 'smooth' : 'fast') + 'QualityChange_'].bind(n);
if (t.attributes.RESOLUTION) {
var a = t.attributes.RESOLUTION;
this.width = a.width, this.height = a.height;
}
this.bandwidth = t.attributes.BANDWIDTH, this.codecs = xc(n.master(), t), this.playlist = t, this.id = i, this.enabled = function (r, a, s) {
return function (e) {
var t = r.master.playlists[a], i = sl(t), n = ol(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);
};
}(e.playlists, t.id, r);
}
function rd (e) {
!function t (i, e) {
var n = 0, r = 0, a = da.mergeOptions(Od, e);
i.ready(function () {
i.trigger({type: 'usage', name: 'vhs-error-reload-initialized'}), i.trigger({
type: 'usage',
name: 'hls-error-reload-initialized'
});
});
function s () {r && i.currentTime(r);}
function o (e) {
null != e && (r = i.duration() !== 1 / 0 && i.currentTime() || 0, i.one('loadedmetadata', s), i.src(e), i.trigger({
type: 'usage',
name: 'vhs-error-reload'
}), i.trigger({type: 'usage', name: 'hls-error-reload'}), i.play());
}
function u () {
return Date.now() - n < 1e3 * a.errorInterval ? (i.trigger({
type: 'usage',
name: 'vhs-error-reload-canceled'
}), void i.trigger({
type: 'usage',
name: 'hls-error-reload-canceled'
})) : a.getSource && 'function' == typeof a.getSource ? (n = Date.now(), a.getSource.call(i, o)) : void da.log.error('ERROR: reloadSourceOnError - The option getSource must be a function!');
}
function l () {i.off('loadedmetadata', s), i.off('error', u), i.off('dispose', l);}
i.on('error', u), i.on('dispose', l), i.reloadSourceOnError = function (e) {l(), t(i, e);};
}(this, e);
}
var ad, sd = ['video', 'audio'], od = function (n, r) {
return function (e, t) {
var i = t[e + 'Buffer'];
Yc(t.mediaSource, i) && (t.logger_('Appending segment ' + r.mediaIndex + '\'s ' + n.length + ' bytes to ' + e + 'Buffer'), i.appendBuffer(n));
};
}, ud = function (n, r) {
return function (e, t) {
var i = t[e + 'Buffer'];
Yc(t.mediaSource, i) && (t.logger_('Removing ' + n + ' to ' + r + ' from ' + e + 'Buffer'), i.remove(n, r));
};
}, ld = function (n) {
return function (e, t) {
var i = t[e + 'Buffer'];
Yc(t.mediaSource, i) && (t.logger_('Setting ' + e + 'timestampOffset to ' + n), i.timestampOffset = n);
};
}, cd = function (i) {return function (e, t) {i();};}, dd = function (t) {
return function (e) {
if ('open' === e.mediaSource.readyState) {
e.logger_('Calling mediaSource endOfStream(' + (t || '') + ')');
try {e.mediaSource.endOfStream(t);} catch (e) {da.log.warn('Failed to call media source endOfStream', e);}
}
};
}, hd = function (t) {
return function (e) {
e.logger_('Setting mediaSource duration to ' + t);
try {e.mediaSource.duration = t;} catch (e) {da.log.warn('Failed to set media source duration', e);}
};
}, pd = function () {
return function (t, e) {
if ('open' === e.mediaSource.readyState) {
var i = e[t + 'Buffer'];
if (Yc(e.mediaSource, i)) {
e.logger_('calling abort on ' + t + 'Buffer');
try {i.abort();} catch (e) {da.log.warn('Failed to abort on ' + t + 'Buffer', e);}
}
}
};
}, fd = function (r, a) {
return function (e) {
var t = zc(r), i = Wl(a);
e.logger_('Adding ' + r + 'Buffer with codec ' + a + ' to mediaSource');
var n = e.mediaSource.addSourceBuffer(i);
n.addEventListener('updateend', e['on' + t + 'UpdateEnd_']), n.addEventListener('error', e['on' + t + 'Error_']), e.codecs[r] = a, e[r + 'Buffer'] = n;
};
}, md = function (i) {
return function (e) {
var t = e[i + 'Buffer'];
if (Kc(i, e), Yc(e.mediaSource, t)) {
e.logger_('Removing ' + i + 'Buffer with codec ' + e.codecs[i] + ' from mediaSource');
try {e.mediaSource.removeSourceBuffer(t);} catch (e) {da.log.warn('Failed to removeSourceBuffer ' + i + 'Buffer', e);}
}
};
}, gd = function (r) {
return function (e, t) {
var i = t[e + 'Buffer'], n = Wl(r);
Yc(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);
};
}, vd = function (i) {
function e (e) {
var t;
return (t = i.call(this) || this).mediaSource = e, t.sourceopenListener_ = function () {return Xc('mediaSource', Ve(t));}, t.mediaSource.addEventListener('sourceopen', t.sourceopenListener_), t.logger_ = Pc('SourceUpdater'), t.audioTimestampOffset_ = 0, t.videoTimestampOffset_ = 0, t.queue = [], t.queuePending = {
audio: null,
video: null
}, t.delayedAudioAppendQueue_ = [], t.videoAppendQueued_ = !1, t.codecs = {}, t.onVideoUpdateEnd_ = Qc('video', Ve(t)), t.onAudioUpdateEnd_ = Qc('audio', Ve(t)), t.onVideoError_ = function (e) {t.videoError_ = e;}, t.onAudioError_ = function (e) {t.audioError_ = e;}, t.started_ = !1, t;
}
Ge(e, i);
var t = e.prototype;
return t.ready = function () {return this.started_;}, t.createSourceBuffers = function (e) {this.ready() || (this.addOrChangeSourceBuffers(e), this.started_ = !0, this.trigger('ready'));}, t.addSourceBuffer = function (e, t) {
$c({
type: 'mediaSource',
sourceUpdater: this,
action: fd(e, t),
name: 'addSourceBuffer'
});
}, t.abort = function (e) {
$c({
type: e,
sourceUpdater: this,
action: pd(e),
name: 'abort'
});
}, t.removeSourceBuffer = function (e) {
this.canRemoveSourceBuffer() ? $c({
type: 'mediaSource',
sourceUpdater: this,
action: md(e),
name: 'removeSourceBuffer'
}) : da.log.error('removeSourceBuffer is not supported!');
}, t.canRemoveSourceBuffer = function () {return !da.browser.IE_VERSION && T.MediaSource && T.MediaSource.prototype && 'function' == typeof T.MediaSource.prototype.removeSourceBuffer;}, e.canChangeType = function () {return T.SourceBuffer && T.SourceBuffer.prototype && 'function' == typeof T.SourceBuffer.prototype.changeType;}, t.canChangeType = function () {return this.constructor.canChangeType();}, t.changeType = function (e, t) {
this.canChangeType() ? $c({
type: e,
sourceUpdater: this,
action: gd(t),
name: 'changeType'
}) : da.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.ready()) 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');
if ($c({
type: r,
sourceUpdater: this,
action: od(a, n || {mediaIndex: -1}),
doneFn: t,
name: 'appendBuffer'
}), 'video' === r) {
if (this.videoAppendQueued_ = !0, !this.delayedAudioAppendQueue_.length) return;
var s = this.delayedAudioAppendQueue_.slice();
this.logger_('queuing delayed audio ' + s.length + ' appendBuffers'), this.delayedAudioAppendQueue_.length = 0, s.forEach(function (e) {i.appendBuffer.apply(i, e);});
}
}, t.audioBuffered = function () {return Yc(this.mediaSource, this.audioBuffer) && this.audioBuffer.buffered ? this.audioBuffer.buffered : da.createTimeRange();}, t.videoBuffered = function () {return Yc(this.mediaSource, this.videoBuffer) && this.videoBuffer.buffered ? this.videoBuffer.buffered : da.createTimeRange();}, t.buffered = function () {
var e = Yc(this.mediaSource, this.videoBuffer) ? this.videoBuffer : null,
t = Yc(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 da.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 da.createTimeRanges(s);
}(this.audioBuffered(), this.videoBuffered());
}, t.setDuration = function (e, t) {
void 0 === t && (t = Wc), $c({
type: 'mediaSource',
sourceUpdater: this,
action: hd(e),
name: 'duration',
doneFn: t
});
}, t.endOfStream = function (e, t) {
void 0 === e && (e = null), void 0 === t && (t = Wc), 'string' != typeof e && (e = void 0), $c({
type: 'mediaSource',
sourceUpdater: this,
action: dd(e),
name: 'endOfStream',
doneFn: t
});
}, t.removeAudio = function (e, t, i) {
void 0 === i && (i = Wc), this.audioBuffered().length && 0 !== this.audioBuffered().end(0) ? $c({
type: 'audio',
sourceUpdater: this,
action: ud(e, t),
doneFn: i,
name: 'remove'
}) : i();
}, t.removeVideo = function (e, t, i) {
void 0 === i && (i = Wc), this.videoBuffered().length && 0 !== this.videoBuffered().end(0) ? $c({
type: 'video',
sourceUpdater: this,
action: ud(e, t),
doneFn: i,
name: 'remove'
}) : i();
}, t.updating = function () {return !(!Gc('audio', this) && !Gc('video', this));}, t.audioTimestampOffset = function (e) {
return 'undefined' != typeof e && this.audioBuffer && this.audioTimestampOffset_ !== e && ($c({
type: 'audio',
sourceUpdater: this,
action: ld(e),
name: 'timestampOffset'
}), this.audioTimestampOffset_ = e), this.audioTimestampOffset_;
}, t.videoTimestampOffset = function (e) {
return 'undefined' != typeof e && this.videoBuffer && this.videoTimestampOffset !== e && ($c({
type: 'video',
sourceUpdater: this,
action: ld(e),
name: 'timestampOffset'
}), this.videoTimestampOffset_ = e), this.videoTimestampOffset_;
}, t.audioQueueCallback = function (e) {
this.audioBuffer && $c({
type: 'audio',
sourceUpdater: this,
action: cd(e),
name: 'callback'
});
}, t.videoQueueCallback = function (e) {
this.videoBuffer && $c({
type: 'video',
sourceUpdater: this,
action: cd(e),
name: 'callback'
});
}, t.dispose = function () {
var t = this;
this.trigger('dispose'), sd.forEach(function (e) {t.abort(e), t.canRemoveSourceBuffer() ? t.removeSourceBuffer(e) : t[e + 'QueueCallback'](function () {return Kc(e, t);});}), this.videoAppendQueued_ = !1, this.delayedAudioAppendQueue_.length = 0, this.sourceopenListener_ && this.mediaSource.removeEventListener('sourceopen', this.sourceopenListener_), this.off();
}, e;
}(da.EventTarget), yd = new Uint8Array('\n\n'.split('').map(function (e) {return e.charCodeAt(0);})),
_d = function (n) {
function e (e, t) {
var i;
return void 0 === t && (t = {}), (i = n.call(this, e, t) || this).handlePartialData_ = !1, i.mediaSource_ = null, i.subtitlesTrack_ = null, i.loaderType_ = 'subtitle', i.featuresNativeTextTracks_ = e.featuresNativeTextTracks, i.shouldSaveSegmentTimingInfo_ = !1, i;
}
Ge(e, n);
var t = e.prototype;
return t.createTransmuxer_ = function () {return null;}, t.buffered_ = function () {
if (!this.subtitlesTrack_ || !this.subtitlesTrack_.cues.length) return da.createTimeRanges();
var e = this.subtitlesTrack_.cues, t = e[0].startTime, i = e[e.length - 1].startTime;
return da.createTimeRanges([[t, i]]);
}, t.initSegmentForMap = function (e, t) {
if (void 0 === t && (t = !1), !e) return null;
var i = gl(e), n = this.initSegments_[i];
if (t && !n && e.bytes) {
var r = yd.byteLength + e.bytes.byteLength, a = new Uint8Array(r);
a.set(e.bytes), a.set(yd, e.bytes.byteLength), this.initSegments_[i] = n = {
resolvedUri: e.resolvedUri,
byterange: e.byterange,
bytes: a
};
}
return 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) {Nc(e, t, this.subtitlesTrack_);}, t.fillBuffer_ = function () {
var e = this;
this.syncPoint_ || (this.syncPoint_ = this.syncController_.getSyncPoint(this.playlist_, this.duration_(), this.currentTimeline_, this.currentTime_()));
var t = this.checkBuffer_(this.buffered_(), this.playlist_, this.mediaIndex, this.hasPlayed_(), this.currentTime_(), this.syncPoint_);
if (t = this.skipEmptySegments_(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.skipEmptySegments_ = function (e) {
for (; e && e.segment.empty;) e = this.generateSegmentInfo_(e.playlist, e.mediaIndex + 1, e.startOfSegment + e.duration, 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 === mc && this.handleTimeout_(), e.code === gc ? this.mediaRequestsAborted += 1 : this.mediaRequestsErrored += 1, void this.stopForError(e);
this.saveBandwidthRelatedStats_(t.stats), this.state = 'APPENDING', this.trigger('appending');
var r = this.pendingSegment_, a = r.segment;
if (a.map && (a.map.bytes = t.map.bytes), r.bytes = t.bytes, 'function' != typeof T.WebVTT && this.subtitlesTrack_ && this.subtitlesTrack_.tech_) {
var s,
o = function () {n.subtitlesTrack_.tech_.off('vttjsloaded', s), n.stopForError({message: 'Error loading vtt.js'});};
return s = function () {n.subtitlesTrack_.tech_.off('vttjserror', o), n.segmentRequestFinished_(e, t, i);}, this.state = 'WAITING_ON_VTTJS', this.subtitlesTrack_.tech_.one('vttjsloaded', s), void this.subtitlesTrack_.tech_.one('vttjserror', o);
}
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.remove(e.startTime, e.endTime), n.subtitlesTrack_.addCue(n.featuresNativeTextTracks_ ? new T.VTTCue(e.startTime, e.endTime, e.text) : e);}), this.handleAppendsDone_();
} else this.state = 'READY';
}, t.handleData_ = function () {}, t.updateTimingInfoEnd_ = function () {}, t.parseVTTCues_ = function (t) {
var e, i = !1;
'function' == typeof T.TextDecoder ? e = new T.TextDecoder('utf8') : (e = T.WebVTT.StringDecoder(), i = !0);
var n = new T.WebVTT.Parser(T, T.vttjs, e);
if (t.cues = [], t.timestampmap = {
MPEGTS: 0,
LOCAL: 0
}, n.oncue = t.cues.push.bind(t.cues), n.ontimestampmap = function (e) {t.timestampmap = e;}, n.onparsingerror = function (e) {da.log.warn('Error encountered when parsing cues: ' + e.message);}, t.segment.map) {
var r = t.segment.map.bytes;
i && (r = Jc(r)), n.parse(r);
}
var a = t.bytes;
i && (a = Jc(a)), n.parse(a), n.flush();
}, t.updateTimeMapping_ = function (e, t, i) {
var n = e.segment;
if (t) if (e.cues.length) {
var r = e.timestampmap, a = r.MPEGTS / fu - r.LOCAL + t.mapping;
if (e.cues.forEach(function (e) {e.startTime += a, e.endTime += a;}), !i.syncInfo) {
var s = e.cues[0].startTime, o = e.cues[e.cues.length - 1].startTime;
i.syncInfo = {mediaSequence: i.mediaSequence + e.mediaIndex, time: Math.min(s, o - n.duration)};
}
} else n.empty = !0;
}, e;
}(Hc), bd = [{
name: 'VOD', run: function (e, t, i, n, r) {
if (i === 1 / 0) return null;
return {time: 0, segmentIndex: 0};
}
}, {
name: 'ProgramDateTime', run: function (e, t, i, n, r) {
if (!e.datetimeToDisplayTime) return null;
var a = t.segments || [], s = null, o = null;
r = r || 0;
for (var u = 0; u < a.length; u++) {
var l = a[u];
if (l.dateTimeObject) {
var c = l.dateTimeObject.getTime() / 1e3 + e.datetimeToDisplayTime, d = Math.abs(r - c);
if (null !== o && (0 === d || o < d)) break;
o = d, s = {time: c, segmentIndex: u};
}
}
return s;
}
}, {
name: 'Segment', run: function (e, t, i, n, r) {
var a = t.segments || [], s = null, o = null;
r = r || 0;
for (var u = 0; u < a.length; u++) {
var l = a[u];
if (l.timeline === n && 'undefined' != typeof l.start) {
var c = Math.abs(r - l.start);
if (null !== o && o < c) break;
(!s || null === o || c <= o) && (o = c, s = {time: l.start, segmentIndex: u});
}
}
return s;
}
}, {
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) {
var d = Math.abs(r - c.time);
if (null !== s && s < d) break;
(!a || null === s || d <= s) && (s = d, a = {time: c.time, segmentIndex: u});
}
}
return a;
}
}, {
name: 'Playlist',
run: function (e, t, i, n, r) {
return t.syncInfo ? {
time: t.syncInfo.time,
segmentIndex: t.syncInfo.mediaSequence - t.mediaSequence
} : null;
}
}], Td = function (i) {
function e (e) {
var t;
return (t = i.call(this) || this).timelines = [], t.discontinuities = [], t.datetimeToDisplayTime = null, t.logger_ = Pc('SyncController'), t;
}
Ge(e, i);
var t = e.prototype;
return t.getSyncPoint = function (e, t, i, n) {
var r = this.runStrategies_(e, t, i, n);
return r.length ? this.selectSyncPoint_(r, {key: 'time', value: n}) : null;
}, t.getExpiredTime = function (e, t) {
if (!e || !e.segments) return null;
var i = this.runStrategies_(e, t, e.discontinuitySequence, 0);
if (!i.length) return null;
var n = this.selectSyncPoint_(i, {key: 'segmentIndex', value: 0});
return 0 < n.segmentIndex && (n.time *= -1), Math.abs(n.time + il(e, n.segmentIndex, 0));
}, t.runStrategies_ = function (e, t, i, n) {
for (var r = [], a = 0; a < bd.length; a++) {
var s = bd[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 + ']'), i;
}, t.saveExpiredSegmentInfo = function (e, t) {
for (var i = t.mediaSequence - e.mediaSequence - 1; 0 <= i; i--) {
var n = e.segments[i];
if (n && 'undefined' != typeof n.start) {
t.syncInfo = {
mediaSequence: e.mediaSequence + i,
time: n.start
}, this.logger_('playlist refresh sync: [time:' + t.syncInfo.time + ', mediaSequence: ' + t.syncInfo.mediaSequence + ']'), this.trigger('syncinfoupdate');
break;
}
}
}, t.setDateTimeMapping = function (e) {
if (!this.datetimeToDisplayTime && e.segments && e.segments.length && e.segments[0].dateTimeObject) {
var t = e.segments[0].dateTimeObject.getTime() / 1e3;
this.datetimeToDisplayTime = -t;
}
}, t.saveSegmentTimingInfo = function (e) {
var t = e.segmentInfo, i = e.shouldSaveTimelineMapping;
this.calculateSegmentTimeMapping_(t, t.timingInfo, i) && (this.saveDiscontinuitySyncInfo_(t), t.playlist.syncInfo || (t.playlist.syncInfo = {
mediaSequence: t.playlist.mediaSequence + t.mediaIndex,
time: t.segment.start
}));
}, 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 = e.segment, r = this.timelines[e.timeline];
if (null !== e.timestampOffset) r = {
time: e.startOfSegment,
mapping: e.startOfSegment - t.start
}, i && (this.timelines[e.timeline] = r, this.trigger('timestampoffset'), this.logger_('time mapping for timeline ' + e.timeline + ': [time: ' + r.time + '] [mapping: ' + r.mapping + ']')), n.start = e.startOfSegment, n.end = t.end + r.mapping; else {
if (!r) return !1;
n.start = t.start + r.mapping, n.end = t.end + r.mapping;
}
return !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 = t.discontinuityStarts[n], a = t.discontinuitySequence + n + 1, s = r - e.mediaIndex, o = Math.abs(s);
if (!this.discontinuities[a] || this.discontinuities[a].accuracy > o) {
var u = void 0;
u = s < 0 ? i.start - il(t, e.mediaIndex, r) : i.end + il(t, e.mediaIndex + 1, r), this.discontinuities[a] = {
time: u,
accuracy: o
};
}
}
}, t.dispose = function () {this.trigger('dispose'), this.off();}, e;
}(da.EventTarget), Sd = function (t) {
function e () {
var e;
return (e = t.call(this) || this).pendingTimelineChanges_ = {}, e.lastTimelineChanges_ = {}, e;
}
Ge(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, n = e.to;
return 'number' == typeof i && 'number' == typeof n && (this.pendingTimelineChanges_[t] = {
type: t,
from: i,
to: n
}, this.trigger('pendingtimelinechange')), this.pendingTimelineChanges_[t];
}, i.lastTimelineChange = function (e) {
var t = e.type, i = e.from, n = e.to;
return 'number' == typeof i && 'number' == typeof n && (this.lastTimelineChanges_[t] = {
type: t,
from: i,
to: n
}, delete this.pendingTimelineChanges_[t], this.trigger('timelinechange')), this.lastTimelineChanges_[t];
}, i.dispose = function () {this.trigger('dispose'), this.pendingTimelineChanges_ = {}, this.lastTimelineChanges_ = {}, this.off();}, e;
}(da.EventTarget), kd = new kc('./decrypter-worker.worker.js', function (e, t) {
var i, n, r, c, g, l, s, a = this;
/*! @name @videojs/http-streaming @version 2.2.4 @license Apache-2.0 */
i = function (e, t, i) {return t && o(e.prototype, t), i && o(e, i), e;}, n = function (e, t) {e.prototype = Object.create(t.prototype), (e.prototype.constructor = e).__proto__ = t;}, r = 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;
var i = this.listeners[e].indexOf(t);
return this.listeners[e] = this.listeners[e].slice(0), this.listeners[e].splice(i, 1), -1 < i;
}, t.trigger = function (e, t) {
var i = this.listeners[e];
if (i) if (2 === arguments.length) for (var n = i.length, r = 0; r < n; ++r) i[r].call(this, t); else for (var a = Array.prototype.slice.call(arguments, 1), s = i.length, o = 0; o < s; ++o) i[o].apply(this, a);
}, t.dispose = function () {this.listeners = {};}, t.pipe = function (t) {this.on('data', function (e) {t.push(e);});}, e;
}(), c = null, g = function () {
function e (e) {
var t, i, n;
c = c || function () {
var e, t, i, n, r, a, s, o, u = [[[], [], [], [], []], [[], [], [], [], []]], l = u[0], c = u[1], d = l[4],
h = c[4], p = [], f = [];
for (e = 0; e < 256; e++) f[(p[e] = e << 1 ^ 283 * (e >> 7)) ^ e] = e;
for (t = i = 0; !d[t]; t ^= n || 1, i = f[i] || 1) for (a = (a = i ^ i << 1 ^ i << 2 ^ i << 3 ^ i << 4) >> 8 ^ 255 & a ^ 99, o = 16843009 * p[r = p[n = p[h[d[t] = a] = t]]] ^ 65537 * r ^ 257 * n ^ 16843008 * t, s = 257 * p[a] ^ 16843008 * a, e = 0; e < 4; e++) l[e][t] = s = s << 24 ^ s >>> 8, c[e][a] = o = o << 24 ^ o >>> 8;
for (e = 0; e < 5; e++) l[e] = l[e].slice(0), c[e] = c[e].slice(0);
return u;
}(), 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) {
var s, o, u, l, c = this._key[1], d = e ^ c[0], h = n ^ c[1], p = i ^ c[2], f = t ^ c[3], m = c.length / 4 - 2,
g = 4, v = this._tables[1], y = v[0], _ = v[1], b = v[2], T = v[3], S = v[4];
for (l = 0; l < m; l++) s = y[d >>> 24] ^ _[h >> 16 & 255] ^ b[p >> 8 & 255] ^ T[255 & f] ^ c[g], o = y[h >>> 24] ^ _[p >> 16 & 255] ^ b[f >> 8 & 255] ^ T[255 & d] ^ c[g + 1], u = y[p >>> 24] ^ _[f >> 16 & 255] ^ b[d >> 8 & 255] ^ T[255 & h] ^ c[g + 2], f = y[f >>> 24] ^ _[d >> 16 & 255] ^ b[h >> 8 & 255] ^ T[255 & p] ^ c[g + 3], g += 4, d = s, h = o, p = u;
for (l = 0; l < 4; l++) r[(3 & -l) + a] = S[d >>> 24] << 24 ^ S[h >> 16 & 255] << 16 ^ S[p >> 8 & 255] << 8 ^ S[255 & f] ^ c[g++], s = d, d = h, h = p, p = f, f = s;
}, e;
}(), l = function (t) {
function e () {
var e;
return (e = t.call(this, r) || this).jobs = [], e.delay = 1, e.timeout_ = null, e;
}
n(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;
}(r), 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([v(a[o - 4]), v(a[o - 3]), v(a[o - 2]), v(a[o - 1])]), this.asyncStream_.push(this.decryptChunk_(a.subarray(o, o + r), t, i, s));
this.asyncStream_.push(function () {
n(null,
/*! @name pkcs7 @version 1.0.4 @license Apache-2.0 */
function (e) {return e.subarray(0, e.byteLength - e[e.byteLength - 1]);}
/*! @name aes-decrypter @version 3.1.0 @license Apache-2.0 */(s));
});
}
return u.prototype.decryptChunk_ = function (t, i, n, r) {
return function () {
var e = function (e, t, i) {
var n, r, a, s, o, u, l, c, d, h = new Int32Array(e.buffer, e.byteOffset, e.byteLength >> 2),
p = new g(Array.prototype.slice.call(t)), f = new Uint8Array(e.byteLength), m = new Int32Array(f.buffer);
for (n = i[0], r = i[1], a = i[2], s = i[3], d = 0; d < h.length; d += 4) o = v(h[d]), u = v(h[d + 1]), l = v(h[d + 2]), c = v(h[d + 3]), p.decrypt(o, u, l, c, m, d), m[d] = v(m[d] ^ n), m[d + 1] = v(m[d + 1] ^ r), m[d + 2] = v(m[d + 2] ^ a), m[d + 3] = v(m[d + 3] ^ s), n = o, r = u, a = l, s = c;
return f;
}(t, i, n);
r.set(e, t.byteOffset);
};
}, i(u, null, [{key: 'STEP', get: function () {return 32e3;}}]), u;
}(), new function (a) {
a.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),
r = new Uint32Array(i.iv.bytes, i.iv.byteOffset, i.iv.byteLength / 4);
new s(t, n, r, function (e, t) {
a.postMessage(function (i) {
var n = {};
return Object.keys(i).forEach(function (e) {
var t = i[e];
ArrayBuffer.isView(t) ? n[e] = {
bytes: t.buffer,
byteOffset: t.byteOffset,
byteLength: t.byteLength
} : n[e] = t;
}), n;
}({source: i.source, decrypted: t}), [t.buffer]);
});
};
}(a);
function o (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);
}
}
function v (e) {return e << 24 | (65280 & e) << 8 | (16711680 & e) >> 8 | e >>> 24;}
}), Cd = {
AUDIO: function (u, l) {
return function () {
var e = l.segmentLoaders[u], t = l.mediaTypes[u], i = l.blacklistCurrentPlaylist;
ed(e, t);
var n = t.activeTrack(), r = t.activeGroup(), a = (r.filter(function (e) {return e.default;})[0] || r[0]).id,
s = t.tracks[a];
if (n !== s) {
for (var o in da.log.warn('Problem encountered loading the alternate audio track.Switching back to default.'), t.tracks) t.tracks[o].enabled = t.tracks[o] === s;
t.onTrackChanged();
} else i({message: 'Problem encountered loading the default audio track.'});
};
}, SUBTITLES: function (n, r) {
return function () {
var e = r.segmentLoaders[n], t = r.mediaTypes[n];
da.log.warn('Problem encountered loading the subtitle track.Disabling subtitle track.'), ed(e, t);
var i = t.activeTrack();
i && (i.mode = 'disabled'), t.onTrackChanged();
};
}
}, Ed = {
AUDIO: function (e, t, i) {
if (t) {
var 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', Cd[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', Cd[e](e, i));
}
}, wd = {
AUDIO: function (s, o) {
var u = o.vhs, l = o.sourceType, e = o.segmentLoaders[s], c = o.requestOptions, t = o.master, d = t.mediaGroups,
i = t.playlists, n = o.mediaTypes[s], h = n.groups, p = n.tracks, f = o.masterPlaylistLoader;
d[s] && 0 !== Object.keys(d[s]).length || (d[s] = {main: {default: {default: !0}}});
function r (r) {
function e (e) {
var t = d[s][r][e];
a.filter(function (e) {return e.resolvedUri === t.resolvedUri;}).length && delete t.resolvedUri;
var i = void 0;
if (i = 'vhs-json' === l && t.playlists ? new Zl(t.playlists[0], u, c) : t.resolvedUri ? new Zl(t.resolvedUri, u, c) : t.playlists && 'dash' === l ? new oc(t.playlists[0], u, c, f) : null, t = da.mergeOptions({
id: e,
playlistLoader: i
}, t), Ed[s](s, t.playlistLoader, o), h[r].push(t), 'undefined' == typeof p[e]) {
var n = new da.AudioTrack({
id: e,
kind: function (e) {
var t = e.default ? 'main' : 'alternative';
return e.characteristics && 0 <= e.characteristics.indexOf('public.accessibility.describes-video') && (t = 'main-desc'), t;
}(t),
enabled: !1,
language: t.language,
default: t.default,
label: e
});
p[e] = n;
}
}
h[r] || (h[r] = []);
var a = i.filter(function (e) {return e.attributes[s] === r;});
for (var t in d[s][r]) e(t);
}
for (var a in d[s]) r(a);
e.on('error', Cd[s](s, o));
},
SUBTITLES: function (e, t) {
var i = t.tech, n = t.vhs, r = t.sourceType, a = t.segmentLoaders[e], s = t.requestOptions,
o = t.master.mediaGroups, u = t.mediaTypes[e], l = u.groups, c = u.tracks, d = t.masterPlaylistLoader;
for (var h in o[e]) for (var p in l[h] || (l[h] = []), o[e][h]) if (!o[e][h][p].forced) {
var f = o[e][h][p], m = void 0;
if ('hls' === r ? m = new Zl(f.resolvedUri, n, s) : 'dash' === r ? m = new oc(f.playlists[0], n, s, d) : 'vhs-json' === r && (m = new Zl(f.playlists ? f.playlists[0] : f.resolvedUri, n, s)), f = da.mergeOptions({
id: p,
playlistLoader: m
}, f), Ed[e](e, f.playlistLoader, t), l[h].push(f), 'undefined' == typeof c[p]) {
var g = i.addRemoteTextTrack({
id: p,
kind: 'subtitles',
default: f.default && f.autoselect,
language: f.language,
label: p
}, !1).track;
c[p] = g;
}
}
a.on('error', Cd[e](e, t));
},
'CLOSED-CAPTIONS': function (e, t) {
var i = t.tech, n = t.master.mediaGroups, r = t.mediaTypes[e], a = r.groups, s = r.tracks;
for (var o in n[e]) for (var u in a[o] || (a[o] = []), n[e][o]) {
var l = n[e][o][u];
if (l.instreamId.match(/CC\d/) && (a[o].push(da.mergeOptions({id: u}, l)), 'undefined' == typeof s[u])) {
var c = i.addRemoteTextTrack({
id: l.instreamId,
kind: 'captions',
default: l.default && l.autoselect,
language: l.language,
label: u
}, !1).track;
s[u] = c;
}
}
}
}, Id = {
AUDIO: function (i, n) {
return function () {
var e = n.mediaTypes[i].tracks;
for (var t in e) if (e[t].enabled) return e[t];
return null;
};
}, SUBTITLES: function (i, n) {
return function () {
var e = n.mediaTypes[i].tracks;
for (var t in e) if ('showing' === e[t].mode || 'hidden' === e[t].mode) return e[t];
return null;
};
}
},
Ad = ['mediaRequests', 'mediaRequestsAborted', 'mediaRequestsTimedout', 'mediaRequestsErrored', 'mediaTransferDuration', 'mediaBytesTransferred'],
xd = function (m) {
function e (e) {
var t;
t = m.call(this) || this;
var 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.handlePartialData;
if (!i) throw new Error('A non-empty playlist URL or JSON manifest string is required');
ad = o, t.withCredentials = r, t.tech_ = a, t.vhs_ = a.vhs, t.sourceType_ = d, t.useCueTags_ = u, t.blacklistDuration = l, t.enableLowInitialPlaylist = c, t.useCueTags_ && (t.cueTagsTrack_ = t.tech_.addTextTrack('metadata', 'ad-cues'), t.cueTagsTrack_.inBandMetadataTrackDispatchType = ''), t.requestOptions_ = {
withCredentials: r,
handleManifestRedirects: n,
timeout: null
}, t.on('error', t.pauseLoading), t.mediaTypes_ = function () {
var t = {};
return ['AUDIO', 'SUBTITLES', 'CLOSED-CAPTIONS'].forEach(function (e) {
t[e] = {
groups: {},
tracks: {},
activePlaylistLoader: null,
activeGroup: Wc,
activeTrack: Wc,
onGroupChanged: Wc,
onTrackChanged: Wc
};
}), t;
}(), t.mediaSource = new T.MediaSource, t.handleDurationChange_ = t.handleDurationChange_.bind(Ve(t)), t.handleSourceOpen_ = t.handleSourceOpen_.bind(Ve(t)), t.handleSourceEnded_ = t.handleSourceEnded_.bind(Ve(t)), t.mediaSource.addEventListener('durationchange', t.handleDurationChange_), t.mediaSource.addEventListener('sourceopen', t.handleSourceOpen_), t.mediaSource.addEventListener('sourceended', t.handleSourceEnded_), t.seekable_ = da.createTimeRanges(), t.hasPlayed_ = !1, t.syncController_ = new Td(e), t.segmentMetadataTrack_ = a.addRemoteTextTrack({
kind: 'metadata',
label: 'segment-metadata'
}, !1).track, t.decrypter_ = new kd, t.sourceUpdater_ = new vd(t.mediaSource), t.inbandTextTracks_ = {}, t.timelineChangeController_ = new Sd;
var f = {
vhs: t.vhs_,
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,
handlePartialData: p,
sourceUpdater: t.sourceUpdater_,
timelineChangeController: t.timelineChangeController_
};
return t.masterPlaylistLoader_ = 'dash' === t.sourceType_ ? new oc(i, t.vhs_, t.requestOptions_) : new Zl(i, t.vhs_, t.requestOptions_), t.setupMasterPlaylistLoaderListeners_(), t.mainSegmentLoader_ = new Hc(da.mergeOptions(f, {
segmentMetadataTrack: t.segmentMetadataTrack_,
loaderType: 'main'
}), e), t.audioSegmentLoader_ = new Hc(da.mergeOptions(f, {loaderType: 'audio'}), e), t.subtitleSegmentLoader_ = new _d(da.mergeOptions(f, {
loaderType: 'vtt',
featuresNativeTextTracks: t.tech_.featuresNativeTextTracks
}), e), t.setupSegmentLoaderListeners_(), Ad.forEach(function (e) {t[e + '_'] = function (e) {return this.audioSegmentLoader_[e] + this.mainSegmentLoader_[e];}.bind(Ve(t), e);}), t.logger_ = Pc('MPC'), t.triggeredFmp4Usage = !1, t.masterPlaylistLoader_.load(), t;
}
Ge(e, m);
var t = e.prototype;
return t.setupMasterPlaylistLoaderListeners_ = function () {
var i = this;
this.masterPlaylistLoader_.on('loadedmetadata', function () {
var e = i.masterPlaylistLoader_.media(), t = 1.5 * e.targetDuration * 1e3;
ll(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()), id({
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 () {
var e = i.masterPlaylistLoader_.media();
if (!e) {
var t;
if (i.excludeUnsupportedVariants_(), i.enableLowInitialPlaylist && (t = i.selectInitialPlaylist()), t = t || i.selectPlaylist(), i.initialMedia_ = t, i.masterPlaylistLoader_.media(i.initialMedia_), !('vhs-json' === i.sourceType_ && i.initialMedia_.segments)) return;
e = i.initialMedia_;
}
i.handleUpdatedMediaPlaylist(e);
}), 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;
ll(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();
i.stuckAtPlaylistEnd_(e) && (i.blacklistCurrentPlaylist({message: 'Playlist no longer updating.'}), 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 = e.mediaGroups || {}, n = !0, r = Object.keys(i.AUDIO);
for (var a in i.AUDIO) for (var s in i.AUDIO[a]) {i.AUDIO[a][s].uri || (n = !1);}
n && (this.tech_.trigger({type: 'usage', name: 'vhs-demuxed'}), this.tech_.trigger({
type: 'usage',
name: 'hls-demuxed'
})), Object.keys(i.SUBTITLES).length && (this.tech_.trigger({
type: 'usage',
name: 'vhs-webvtt'
}), this.tech_.trigger({
type: 'usage',
name: 'hls-webvtt'
})), ad.Playlist.isAes(t) && (this.tech_.trigger({
type: 'usage',
name: 'vhs-aes'
}), this.tech_.trigger({
type: 'usage',
name: 'hls-aes'
})), r.length && 1 < Object.keys(i.AUDIO[r[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.setupSegmentLoaderListeners_ = function () {
var n = this;
this.mainSegmentLoader_.on('bandwidthupdate', function () {
var e = n.selectPlaylist(), t = n.masterPlaylistLoader_.media(), i = n.tech_.buffered();
!function (e) {
var t = e.currentPlaylist, i = e.nextPlaylist, n = e.forwardBuffer, r = e.bufferLowWaterLine,
a = e.duration;
e.log;
return i ? !t.endList || (a < uc.MAX_BUFFER_LOW_WATER_LINE || (i.attributes.BANDWIDTH < t.attributes.BANDWIDTH || r <= n)) : (da.log.warn('We received no playlist to switch to. Please check your stream.'), !1);
}({
currentPlaylist: t,
nextPlaylist: e,
forwardBuffer: i.length ? i.end(i.length - 1) - n.tech_.currentTime() : 0,
bufferLowWaterLine: n.bufferLowWaterLine(),
duration: n.duration(),
log: n.logger_
}) || n.masterPlaylistLoader_.media(e), n.tech_.trigger('bandwidthupdate');
}), this.mainSegmentLoader_.on('progress', function () {n.trigger('progress');}), this.mainSegmentLoader_.on('error', function () {n.blacklistCurrentPlaylist(n.mainSegmentLoader_.error());}), this.mainSegmentLoader_.on('appenderror', function () {n.error = n.mainSegmentLoader_.error_, n.trigger('error');}), this.mainSegmentLoader_.on('syncinfoupdate', function () {n.onSyncInfoUpdate_();}), this.mainSegmentLoader_.on('timestampoffset', function () {
n.tech_.trigger({
type: 'usage',
name: 'vhs-timestamp-offset'
}), n.tech_.trigger({type: 'usage', name: 'hls-timestamp-offset'});
}), this.audioSegmentLoader_.on('syncinfoupdate', function () {n.onSyncInfoUpdate_();}), this.audioSegmentLoader_.on('appenderror', function () {n.error = n.audioSegmentLoader_.error_, n.trigger('error');}), this.mainSegmentLoader_.on('ended', function () {n.logger_('main segment loader ended'), n.onEndOfStream();}), this.mainSegmentLoader_.on('earlyabort', function () {n.blacklistCurrentPlaylist({message: 'Aborted early because there isn\'t enough bandwidth to complete the request without rebuffering.'}, 120);});
function e () {
if (!n.sourceUpdater_.ready()) return n.tryToCreateSourceBuffers_();
var e = n.getCodecsOrExclude_();
e && n.sourceUpdater_.addOrChangeSourceBuffers(e);
}
this.mainSegmentLoader_.on('trackinfo', e), this.audioSegmentLoader_.on('trackinfo', e), this.mainSegmentLoader_.on('fmp4', function () {
n.triggeredFmp4Usage || (n.tech_.trigger({
type: 'usage',
name: 'vhs-fmp4'
}), n.tech_.trigger({type: 'usage', name: 'hls-fmp4'}), n.triggeredFmp4Usage = !0);
}), this.audioSegmentLoader_.on('fmp4', function () {
n.triggeredFmp4Usage || (n.tech_.trigger({
type: 'usage',
name: 'vhs-fmp4'
}), n.tech_.trigger({type: 'usage', name: 'hls-fmp4'}), n.triggeredFmp4Usage = !0);
}), this.audioSegmentLoader_.on('ended', function () {n.logger_('audioSegmentLoader ended'), n.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()), e !== this.masterPlaylistLoader_.media() && (this.masterPlaylistLoader_.media(e), this.mainSegmentLoader_.resetLoader());}, t.fastQualityChange_ = function (e) {
var t = this;
void 0 === e && (e = this.selectPlaylist()), e !== this.masterPlaylistLoader_.media() && (this.masterPlaylistLoader_.media(e), this.mainSegmentLoader_.resetEverything(function () {da.browser.IE_VERSION || da.browser.IS_EDGE ? t.tech_.setCurrentTime(t.tech_.currentTime() + .04) : t.tech_.setCurrentTime(t.tech_.currentTime());}));
}, 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 (da.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 () {
if (this.tryToCreateSourceBuffers_(), this.tech_.autoplay()) {
var e = this.tech_.play();
'undefined' != typeof e && 'function' == typeof e.then && e.then(null, function (e) {});
}
this.trigger('sourceopen');
}, t.handleSourceEnded_ = function () {
if (this.inbandTextTracks_.metadataTrack_) {
var e = this.inbandTextTracks_.metadataTrack_.cues;
if (e && e.length) {
var 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 = this.mainSegmentLoader_.ended_;
this.mediaTypes_.AUDIO.activePlaylistLoader && (e = !this.mainSegmentLoader_.currentMediaInfo_ || this.mainSegmentLoader_.currentMediaInfo_.hasVideo ? e && this.audioSegmentLoader_.ended_ : this.audioSegmentLoader_.ended_), e && 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 = ad.Playlist.playlistEnd(e, t), n = this.tech_.currentTime(), r = this.tech_.buffered();
if (!r.length) return i - n <= .1;
var a = r.end(r.length - 1);
return a - n <= .1 && i - a <= .1;
}, t.blacklistCurrentPlaylist = function (e, t) {
void 0 === e && (e = {});
var i = 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'));
var n = this.masterPlaylistLoader_.master.playlists, r = n.filter(ol), a = 1 === r.length && r[0] === i;
if (1 === n.length && t !== 1 / 0) return da.log.warn('Problem encountered with playlist ' + i.id + '. Trying again since it is the only playlist.'), this.tech_.trigger('retryplaylist'), this.masterPlaylistLoader_.load(a);
if (a) {
var s = !1;
n.forEach(function (e) {
if (e !== i) {
var t = e.excludeUntil;
'undefined' != typeof t && t !== 1 / 0 && (s = !0, delete e.excludeUntil);
}
}), s && (da.log.warn('Removing other playlists from the exclusion list because the last rendition is about to be excluded.'), this.tech_.trigger('retryplaylist'));
}
i.excludeUntil = Date.now() + 1e3 * t, this.tech_.trigger('blacklistplaylist'), this.tech_.trigger({
type: 'usage',
name: 'vhs-rendition-blacklisted'
}), this.tech_.trigger({type: 'usage', name: 'hls-rendition-blacklisted'});
var o = this.selectPlaylist();
if (!o) return this.error = 'Playback cannot continue. No available working or supported playlists.', void this.trigger('error');
var u = e.internal ? this.logger_ : da.log.warn, l = e.message ? ' ' + e.message : '';
return u((e.internal ? 'Internal problem' : 'Problem') + ' encountered with playlist ' + i.id + '.' + l + ' Switching to playlist ' + o.id + '.'), o.attributes.AUDIO !== i.attributes.AUDIO && this.delegateLoaders_('audio', ['abort', 'pause']), o.attributes.SUBTITLES !== i.attributes.SUBTITLES && this.delegateLoaders_('subtitle', ['abort', 'pause']), this.delegateLoaders_('main', ['abort', 'pause']), this.masterPlaylistLoader_.media(o, a);
}, t.pauseLoading = function () {this.delegateLoaders_('all', ['abort', 'pause']);}, 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) {
var t = n.mediaTypes_[e] && n.mediaTypes_[e].activePlaylistLoader;
t && r.push(t);
}), ['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 = $u(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 : ad.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 = this.masterPlaylistLoader_.master.suggestedPresentationDelay, r = ad.Playlist.seekable(t, i, n);
if (0 !== r.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 = ad.Playlist.seekable(t, i, n)).length) return;
}
var a, s;
this.seekable_ && this.seekable_.length && (a = this.seekable_.end(0), s = this.seekable_.start(0)), e ? e.start(0) > r.end(0) || r.start(0) > e.end(0) ? this.seekable_ = r : this.seekable_ = da.createTimeRanges([[e.start(0) > r.start(0) ? e.start(0) : r.start(0), e.end(0) < r.end(0) ? e.end(0) : r.end(0)]]) : this.seekable_ = r, this.seekable_ && this.seekable_.length && this.seekable_.end(0) === a && this.seekable_.start(0) === s || (this.logger_('seekable updated [' + Ju(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();
if (!t.length) return;
(isNaN(this.mediaSource.duration) || this.mediaSource.duration < t.end(t.length - 1)) && this.sourceUpdater_.setDuration(t.end(t.length - 1));
} else {
var i = this.tech_.buffered(), n = ad.Playlist.duration(this.masterPlaylistLoader_.media());
0 < i.length && (n = Math.max(n, i.end(i.length - 1))), this.mediaSource.duration !== n && this.sourceUpdater_.setDuration(n);
}
}, t.dispose = function () {
var n = this;
this.trigger('dispose'), this.decrypter_.terminate(), this.masterPlaylistLoader_.dispose(), this.mainSegmentLoader_.dispose(), ['AUDIO', 'SUBTITLES'].forEach(function (e) {
var t = n.mediaTypes_[e].groups;
for (var i in t) t[i].forEach(function (e) {e.playlistLoader && e.playlistLoader.dispose();});
}), this.audioSegmentLoader_.dispose(), this.subtitleSegmentLoader_.dispose(), this.sourceUpdater_.dispose(), this.timelineChangeController_.dispose(), 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;
return !(!this.mainSegmentLoader_.currentMediaInfo_ || e && !this.audioSegmentLoader_.currentMediaInfo_);
}, t.getCodecsOrExclude_ = function () {
var n = this, i = {
main: this.mainSegmentLoader_.currentMediaInfo_ || {},
audio: this.audioSegmentLoader_.currentMediaInfo_ || {}
};
i.video = i.main;
var e = xc(this.master(), this.media()), r = {}, t = !!this.mediaTypes_.AUDIO.activePlaylistLoader;
if (i.main.hasVideo && (r.video = e.video || i.main.videoCodec || Vl), i.main.isMuxed && (r.video += ',' + (e.audio || i.main.audioCodec || jl)), (i.main.hasAudio && !i.main.isMuxed || i.audio.hasAudio || t) && (r.audio = e.audio || i.main.audioCodec || i.audio.audioCodec || jl, i.audio.isFmp4 = i.main.hasAudio && !i.main.isMuxed ? i.main.isFmp4 : i.audio.isFmp4), r.audio || r.video) {
var a, s = {};
if (['video', 'audio'].forEach(function (e) {
if (r.hasOwnProperty(e) && !function (e, t) {return e ? ql(t) : Xl(t);}(i[e].isFmp4, r[e])) {
var t = i[e].isFmp4 ? 'browser' : 'muxer';
s[t] = s[t] || [], s[t].push(r[e]), 'audio' === e && (a = t);
}
}), t && a && this.media().attributes.AUDIO) {
var o = this.media().attributes.AUDIO;
this.master().playlists.forEach(function (e) {(e.attributes && e.attributes.AUDIO) === o && e !== n.media() && (e.excludeUntil = 1 / 0);}), this.logger_('excluding audio group ' + o + ' as ' + a + ' does not support codec(s): "' + r.audio + '"');
}
if (!Object.keys(s).length) {
if (this.sourceUpdater_.ready() && !this.sourceUpdater_.canChangeType()) {
var u = [];
if (['video', 'audio'].forEach(function (e) {
var t = (Kl(n.sourceUpdater_.codecs[e] || '')[e] || {}).type, i = (Kl(r[e] || '')[e] || {}).type;
t && i && t.toLowerCase() !== i.toLowerCase() && u.push('"' + n.sourceUpdater_.codecs[e] + '" -> "' + r[e] + '"');
}), u.length) return void this.blacklistCurrentPlaylist({
playlist: this.media(),
message: 'Codec switching not supported: ' + u.join(', ') + '.',
blacklistDuration: 1 / 0,
internal: !0
});
}
return r;
}
var l = Object.keys(s).reduce(function (e, t) {return e && (e += ', '), e += t + ' does not support codec(s): "' + s[t].join(',') + '"';}, '') + '.';
this.blacklistCurrentPlaylist({playlist: this.media(), internal: !0, message: l, blacklistDuration: 1 / 0});
} else this.blacklistCurrentPlaylist({
playlist: this.media(),
message: 'Could not determine codecs for playlist.',
blacklistDuration: 1 / 0
});
}, t.tryToCreateSourceBuffers_ = function () {
if ('open' === this.mediaSource.readyState && !this.sourceUpdater_.ready() && this.areMediaTypesKnown_()) {
var e = this.getCodecsOrExclude_();
if (e) {
this.sourceUpdater_.createSourceBuffers(e);
var t = [e.video, e.audio].filter(Boolean).join(',');
this.excludeIncompatibleVariants_(t);
}
}
}, t.excludeUnsupportedVariants_ = function () {
var i = this;
this.master().playlists.forEach(function (e) {
var t = xc(i.master, e);
!t.audio || Xl(t.audio) || ql(t.audio) || (e.excludeUntil = 1 / 0), !t.video || Xl(t.video) || ql(t.video) || (e.excludeUntil = 1 / 0);
});
}, t.excludeIncompatibleVariants_ = function (e) {
var s = this, o = Kl(e), u = Object.keys(o).length;
this.master().playlists.forEach(function (e) {
if (e.excludeUntil !== 1 / 0) {
var t = {}, i = 2, n = [], r = xc(s.masterPlaylistLoader_.master, e);
if (r.audio || r.video) {
var a = [r.video, r.audio].filter(Boolean).join(',');
t = Kl(a), i = Object.keys(t).length;
}
i !== u && (n.push('codec count "' + i + '" !== "' + u + '"'), e.excludeUntil = 1 / 0), s.sourceUpdater_.canChangeType() || (t.video && o.video && t.video.type.toLowerCase() !== o.video.type.toLowerCase() && (n.push('video codec "' + t.video.type + '" !== "' + o.video.type + '"'), e.excludeUntil = 1 / 0), t.audio && o.audio && t.audio.type.toLowerCase() !== o.audio.type.toLowerCase() && (e.excludeUntil = 1 / 0, n.push('audio codec "' + t.audio.type + '" !== "' + o.audio.type + '"'))), n.length && s.logger_('blacklisting ' + e.id + ': ' + n.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, r = i, a = 0; a < e.segments.length; a++) {
var s = e.segments[a];
if (n = n || Zc(t, r + s.duration / 2)) {
if ('cueIn' in s) {
n.endTime = r, n.adEndTime = r, r += s.duration, n = null;
continue;
}
if (r < n.endTime) {
r += s.duration;
continue;
}
n.endTime += s.duration;
} else if ('cueOut' in s && ((n = new T.VTTCue(r, r + s.duration, s.cueOut)).adStartTime = r, n.adEndTime = r + parseFloat(s.cueOut), t.addCue(n)), 'cueOutCont' in s) {
var o = s.cueOutCont.split('/').map(parseFloat), u = o[0], l = o[1];
(n = new T.VTTCue(r, r + s.duration, '')).adStartTime = r - u, n.adEndTime = n.adStartTime + l, t.addCue(n);
}
r += s.duration;
}
}(e, this.cueTagsTrack_, t);
}, t.goalBufferLength = function () {
var e = this.tech_.currentTime(), t = uc.GOAL_BUFFER_LENGTH, i = uc.GOAL_BUFFER_LENGTH_RATE,
n = Math.max(t, uc.MAX_GOAL_BUFFER_LENGTH);
return Math.min(t + e * i, n);
}, t.bufferLowWaterLine = function () {
var e = this.tech_.currentTime(), t = uc.BUFFER_LOW_WATER_LINE, i = uc.BUFFER_LOW_WATER_LINE_RATE,
n = Math.max(t, uc.MAX_BUFFER_LOW_WATER_LINE);
return Math.min(t + e * i, n);
}, e;
}(da.EventTarget), Pd = ['seeking', 'seeked', 'pause', 'playing', 'error'], Ld = function () {
function e (e) {
var t = this;
this.masterPlaylistController_ = e.masterPlaylistController, this.tech_ = e.tech, this.seekable = e.seekable, this.allowSeeksWithinUnsafeLiveWindow = e.allowSeeksWithinUnsafeLiveWindow, this.media = e.media, this.consecutiveUpdates = 0, this.lastRecordedTime = null, this.timer_ = null, this.checkCurrentTimeTimeout_ = null, this.logger_ = Pc('PlaybackWatcher'), this.logger_('initialize');
function i () {return t.monitorCurrentTime_();}
function n () {return t.techWaiting_();}
function r () {return t.cancelTimer_();}
function a () {return t.fixesBadSeeks_();}
var s = this.masterPlaylistController_, o = ['main', 'subtitle', 'audio'], u = {};
o.forEach(function (e) {
u[e] = {
reset: function () {return t.resetSegmentDownloads_(e);},
updateend: function () {return t.checkSegmentDownloads_(e);}
}, s[e + 'SegmentLoader_'].on('appendsdone', u[e].updateend), s[e + 'SegmentLoader_'].on('playlistupdate', u[e].reset), t.tech_.on(['seeked', 'seeking'], u[e].reset);
}), this.tech_.on('seekablechanged', a), this.tech_.on('waiting', n), this.tech_.on(Pd, r), this.tech_.on('canplay', i), this.dispose = function () {t.logger_('dispose'), t.tech_.off('seekablechanged', a), t.tech_.off('waiting', n), t.tech_.off(Pd, r), t.tech_.off('canplay', i), o.forEach(function (e) {s[e + 'SegmentLoader_'].off('appendsdone', u[e].updateend), s[e + 'SegmentLoader_'].off('playlistupdate', u[e].reset), t.tech_.off(['seeked', 'seeking'], u[e].reset);}), t.checkCurrentTimeTimeout_ && T.clearTimeout(t.checkCurrentTimeTimeout_), t.cancelTimer_();};
}
var t = e.prototype;
return t.monitorCurrentTime_ = function () {this.checkCurrentTime_(), this.checkCurrentTimeTimeout_ && T.clearTimeout(this.checkCurrentTimeTimeout_), this.checkCurrentTimeTimeout_ = T.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: Zu(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_.seeking() && this.fixesBadSeeks_()) return this.consecutiveUpdates = 0, void (this.lastRecordedTime = this.tech_.currentTime());
if (!this.tech_.paused() && !this.tech_.seeking()) {
var e = this.tech_.currentTime(), t = this.tech_.buffered();
if (this.lastRecordedTime === e && (!t.length || e + .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();
this.afterSeekableWindow_(t, i, this.media(), this.allowSeeksWithinUnsafeLiveWindow) && (e = t.end(t.length - 1));
if (this.beforeSeekableWindow_(t, i)) {
var n = t.start(0);
e = n + (n === t.end(0) ? 0 : .1);
}
if ('undefined' != typeof e) return this.logger_('Trying to seek outside of seekable at time ' + i + ' with seekable range ' + Ju(t) + '. Seeking to ' + e + '.'), this.tech_.setCurrentTime(e), !0;
var r = this.tech_.buffered();
return !!function (e) {
var t = e.buffered, i = e.targetDuration, n = e.currentTime;
return !!t.length && (!(t.end(0) - t.start(0) < 2 * i) && (!(n > t.start(0)) && t.start(0) - n < i));
}({
buffered: r,
targetDuration: this.media().targetDuration,
currentTime: i
}) && (e = r.start(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 () {
if (!this.techWaiting_()) {
var e = this.tech_.currentTime(), t = this.tech_.buffered(), i = $u(t, e);
return i.length && e + 3 <= i.end(0) ? (this.cancelTimer_(), this.tech_.setCurrentTime(e), this.logger_('Stopped at ' + e + ' while inside a buffered region [' + i.start(0) + ' -> ' + i.end(0) + ']. Attempting to resume playback by seeking to the current time.'), this.tech_.trigger({
type: 'usage',
name: 'vhs-unknown-waiting'
}), void this.tech_.trigger({type: 'usage', name: 'hls-unknown-waiting'})) : void 0;
}
}, t.techWaiting_ = function () {
var e = this.seekable(), t = this.tech_.currentTime();
if (this.tech_.seeking() && this.fixesBadSeeks_()) return !0;
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;
}
var n = this.tech_.vhs.masterPlaylistController_.sourceUpdater_, r = this.tech_.buffered();
if (this.videoUnderflow_({
audioBuffered: n.audioBuffered(),
videoBuffered: n.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;
var a = Qu(r, t);
if (0 < a.length) {
var s = a.start(0) - t;
return this.logger_('Stopped at ' + t + ', setting timer for ' + s + ', seeking to ' + a.start(0)), this.cancelTimer_(), this.timer_ = setTimeout(this.skipTheGap_.bind(this), 1e3 * s, 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) + .1;
return !i.endList && n && (r = 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) - .1);}, t.videoUnderflow_ = function (e) {
var t = e.videoBuffered, i = e.audioBuffered, n = e.currentTime;
if (t) {
var r;
if (t.length && i.length) {
var a = $u(t, n - 3), s = $u(t, n), o = $u(i, n);
o.length && !s.length && a.length && (r = {start: a.end(0), end: o.end(0)});
} else {Qu(t, n).length || (r = this.gapFromVideoUnderflow_(t, n));}
return !!r && (this.logger_('Encountered a gap in video from ' + r.start + ' to ' + r.end + '. Seeking to current time ' + n), !0);
}
}, t.skipTheGap_ = function (e) {
var t = this.tech_.buffered(), i = this.tech_.currentTime(), n = Qu(t, i);
this.cancelTimer_(), 0 !== n.length && i === e && (this.logger_('skipTheGap_:', 'currentTime:', i, 'scheduled currentTime:', e, 'nextRange start:', n.start(0)), this.tech_.setCurrentTime(n.start(0) + ec), 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 da.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 da.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;
}(), Od = {
errorInterval: 30,
getSource: function (e) {return e(this.tech({IWillNotUseThisInPlugins: !0}).currentSource_ || this.currentSource());}
}, Dd = {
PlaylistLoader: Zl, Playlist: ic, utils: ac, STANDARD_PLAYLIST_SELECTOR: function () {
var e = this.useDevicePixelRatio && T.devicePixelRatio || 1;
return function (e, t, i, n, r) {
var a = {bandwidth: t, width: i, height: n, limitRenditionByPlayerDimensions: r},
s = e.playlists.map(function (e) {
var t = e.attributes.RESOLUTION && e.attributes.RESOLUTION.width,
i = e.attributes.RESOLUTION && e.attributes.RESOLUTION.height;
return {bandwidth: e.attributes.BANDWIDTH || T.Number.MAX_VALUE, width: t, height: i, playlist: e};
});
Dc(s, function (e, t) {return e.bandwidth - t.bandwidth;});
var o = (s = s.filter(function (e) {return !ic.isIncompatible(e.playlist);})).filter(function (e) {return ic.isEnabled(e.playlist);});
o.length || (o = s.filter(function (e) {return !ic.isDisabled(e.playlist);}));
var u = o.filter(function (e) {return e.bandwidth * uc.BANDWIDTH_VARIANCE < t;}), l = u[u.length - 1],
c = u.filter(function (e) {return e.bandwidth === l.bandwidth;})[0];
if (!1 === r) {
var d = c || o[0] || s[0];
if (d && d.playlist) {
var h = 'sortedPlaylistReps';
return c && (h = 'bandwidthBestRep'), o[0] && (h = 'enabledPlaylistReps'), qc('choosing ' + Lc(d) + ' using ' + h + ' with options', a), d.playlist;
}
return qc('could not choose a playlist with options', a), null;
}
var p = u.filter(function (e) {return e.width && e.height;});
Dc(p, function (e, t) {return e.width - t.width;});
var f = p.filter(function (e) {return e.width === i && e.height === n;});
l = f[f.length - 1];
var m, g, v, y = f.filter(function (e) {return e.bandwidth === l.bandwidth;})[0];
y || (g = (m = p.filter(function (e) {return e.width > i || e.height > n;})).filter(function (e) {return e.width === m[0].width && e.height === m[0].height;}), l = g[g.length - 1], v = g.filter(function (e) {return e.bandwidth === l.bandwidth;})[0]);
var _ = v || y || c || o[0] || s[0];
if (_ && _.playlist) {
var b = 'sortedPlaylistReps';
return v ? b = 'resolutionPlusOneRep' : y ? b = 'resolutionBestRep' : c ? b = 'bandwidthBestRep' : o[0] && (b = 'enabledPlaylistReps'), qc('choosing ' + Lc(_) + ' using ' + b + ' with options', a), _.playlist;
}
return qc('could not choose a playlist with options', a), null;
}(this.playlists.master, this.systemBandwidth, parseInt(Oc(this.tech_.el(), 'width'), 10) * e, parseInt(Oc(this.tech_.el(), 'height'), 10) * e, this.limitRenditionByPlayerDimensions);
}, INITIAL_PLAYLIST_SELECTOR: function () {
var t = this, e = this.playlists.master.playlists.filter(ic.isEnabled);
return Dc(e, function (e, t) {return Mc(e, t);}), e.filter(function (e) {return !!xc(t.playlists.master, e).video;})[0] || null;
}, comparePlaylistBandwidth: Mc, comparePlaylistResolution: function (e, t) {
var i, n;
return e.attributes.RESOLUTION && e.attributes.RESOLUTION.width && (i = e.attributes.RESOLUTION.width), i = i || T.Number.MAX_VALUE, t.attributes.RESOLUTION && t.attributes.RESOLUTION.width && (n = t.attributes.RESOLUTION.width), i === (n = n || T.Number.MAX_VALUE) && e.attributes.BANDWIDTH && t.attributes.BANDWIDTH ? e.attributes.BANDWIDTH - t.attributes.BANDWIDTH : i - n;
}, xhr: dl()
};
['GOAL_BUFFER_LENGTH', 'MAX_GOAL_BUFFER_LENGTH', 'BACK_BUFFER_LENGTH', 'GOAL_BUFFER_LENGTH_RATE', 'BUFFER_LOW_WATER_LINE', 'MAX_BUFFER_LOW_WATER_LINE', 'BUFFER_LOW_WATER_LINE_RATE', 'BANDWIDTH_VARIANCE'].forEach(function (t) {
Object.defineProperty(Dd, t, {
get: function () {return da.log.warn('using Vhs.' + t + ' is UNSAFE be sure you know what you are doing'), uc[t];},
set: function (e) {da.log.warn('using Vhs.' + t + ' is UNSAFE be sure you know what you are doing'), 'number' != typeof e || e < 0 ? da.log.warn('value of Vhs.' + t + ' must be greater than or equal to 0') : uc[t] = e;}
});
});
function Md (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 Rd = 'videojs-vhs';
Dd.canPlaySource = function () {return da.log.warn('HLS is no longer a tech. Please remove it from your player\'s techOrder.');};
function Nd (e) {
var t = e.player, i = e.sourceKeySystems, n = e.media, r = e.audioMedia, a = e.mainPlaylists,
s = function (e, t, i) {
if (!e) return e;
var n = {video: t && t.attributes && t.attributes.CODECS, audio: i && i.attributes && i.attributes.CODECS};
!n.audio && n.video && 1 < n.video.split(',').length && n.video.split(',').forEach(function (e) {e = e.trim(), zl(e) ? n.audio = e : Gl(e) && (n.video = e);});
var r = n.video ? 'video/mp4;codecs="' + n.video + '"' : null,
a = n.audio ? 'audio/mp4;codecs="' + n.audio + '"' : null, s = {};
for (var o in e) s[o] = {
audioContentType: a,
videoContentType: r
}, t.contentProtection && t.contentProtection[o] && t.contentProtection[o].pssh && (s[o].pssh = t.contentProtection[o].pssh), 'string' == typeof e[o] && (s[o].url = e[o]);
return da.mergeOptions(e, s);
}(i, n, r);
s && (!(t.currentSource().keySystems = s) || t.eme ? 11 !== da.browser.IE_VERSION && t.eme.initializeMediaKeys && function (e, i) {
return e.reduce(function (e, n) {
if (!n.contentProtection) return e;
var t = i.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;
}, []);
}(r ? a.concat([r]) : a, Object.keys(i)).forEach(function (e) {t.eme.initializeMediaKeys({keySystems: e});}) : da.log.warn('DRM encrypted source cannot be decrypted without a DRM plugin'));
}
function Ud () {
if (!T.localStorage) return null;
var e = T.localStorage.getItem(Rd);
if (!e) return null;
try {return JSON.parse(e);} catch (e) {return null;}
}
Dd.supportsNativeHls = function () {
if (!d || !d.createElement) return !1;
var t = d.createElement('video');
if (!da.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));});
}(), Dd.supportsNativeDash = !!(d && d.createElement && da.getTech('Html5').isSupported()) && /maybe|probably/i.test(d.createElement('video').canPlayType('application/dash+xml')), Dd.supportsTypeNatively = function (e) {return 'hls' === e ? Dd.supportsNativeHls : 'dash' === e && Dd.supportsNativeDash;}, Dd.isSupported = function () {return da.log.warn('HLS is no longer a tech. Please remove it from your player\'s techOrder.');};
var Fd = function (a) {
function e (e, t, i) {
var n;
if (n = a.call(this, t, da.mergeOptions(i.hls, i.vhs)) || this, i.hls && Object.keys(i.hls).length && da.log.warn('Using hls options is deprecated. Use vhs instead.'), t.options_ && t.options_.playerId) {
var r = da(t.options_.playerId);
r.hasOwnProperty('hls') || Object.defineProperty(r, 'hls', {
get: function () {
return da.log.warn('player.hls is deprecated. Use player.tech().vhs instead.'), t.trigger({
type: 'usage',
name: 'hls-player-access'
}), Ve(n);
}, configurable: !0
}), r.hasOwnProperty('vhs') || Object.defineProperty(r, 'vhs', {
get: function () {
return da.log.warn('player.vhs is deprecated. Use player.tech().vhs instead.'), t.trigger({
type: 'usage',
name: 'vhs-player-access'
}), Ve(n);
}, configurable: !0
}), r.hasOwnProperty('dash') || Object.defineProperty(r, 'dash', {
get: function () {return da.log.warn('player.dash is deprecated. Use player.tech().vhs instead.'), Ve(n);},
configurable: !0
}), n.player_ = r;
}
if (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(d, ['fullscreenchange', 'webkitfullscreenchange', 'mozfullscreenchange', 'MSFullscreenChange'], function (e) {
var t = d.fullscreenElement || d.webkitFullscreenElement || d.mozFullScreenElement || d.msFullscreenElement;
t && t.contains(n.tech_.el()) && n.masterPlaylistController_.smoothQualityChange_();
}), 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;
}
Ge(e, a);
var t = e.prototype;
return t.setOptions_ = function () {
var t = this;
if (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_.customTagParsers = this.options_.customTagParsers || [], this.options_.customTagMappers = this.options_.customTagMappers || [], this.options_.cacheEncryptionKeys = this.options_.cacheEncryptionKeys || !1, this.options_.handlePartialData = this.options_.handlePartialData || !1, 'number' != typeof this.options_.blacklistDuration && (this.options_.blacklistDuration = 300), 'number' != typeof this.options_.bandwidth && this.options_.useBandwidthFromLocalStorage) {
var e = Ud();
e && 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 = uc.INITIAL_BANDWIDTH), this.options_.enableLowInitialPlaylist = this.options_.enableLowInitialPlaylist && this.options_.bandwidth === uc.INITIAL_BANDWIDTH, ['withCredentials', 'useDevicePixelRatio', 'limitRenditionByPlayerDimensions', 'bandwidth', 'smoothQualityChange', 'customTagParsers', 'customTagMappers', 'handleManifestRedirects', 'cacheEncryptionKeys', 'handlePartialData'].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 i = this;
e && (this.setOptions_(), this.options_.src = function (e) {return 0 === e.toLowerCase().indexOf('data:application/vnd.videojs.vhs+json,') ? JSON.parse(e.substring(e.indexOf(',') + 1)) : e;}(this.source_.src), this.options_.tech = this.tech_, this.options_.externVhs = Dd, this.options_.sourceType = Ia(t), this.options_.seekTo = function (e) {i.tech_.setCurrentTime(e);}, this.masterPlaylistController_ = new xd(this.options_), this.playbackWatcher_ = new Ld(da.mergeOptions(this.options_, {
seekable: function () {return i.seekable();},
media: function () {return i.masterPlaylistController_.media();},
masterPlaylistController: this.masterPlaylistController_
})), this.masterPlaylistController_.on('error', function () {
var e = da.players[i.tech_.options_.playerId], t = i.masterPlaylistController_.error;
'object' != typeof t || t.code ? 'string' == typeof t && (t = {message: t, code: 3}) : t.code = 3, e.error(t);
}), this.masterPlaylistController_.selectPlaylist = this.selectPlaylist ? this.selectPlaylist.bind(this) : Dd.STANDARD_PLAYLIST_SELECTOR.bind(this), this.masterPlaylistController_.selectInitialPlaylist = Dd.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 () {return this.masterPlaylistController_.mainSegmentLoader_.bandwidth;},
set: function (e) {
this.masterPlaylistController_.mainSegmentLoader_.bandwidth = e, this.masterPlaylistController_.mainSegmentLoader_.throughput = {
rate: 0,
count: 0
};
}
},
systemBandwidth: {
get: function () {
var e, t = 1 / (this.bandwidth || 1);
return e = 0 < this.throughput ? 1 / this.throughput : 0, Math.floor(1 / (t + e));
}, set: function () {da.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 i.bandwidth || 0;}, enumerable: !0},
mediaRequests: {get: function () {return i.masterPlaylistController_.mediaRequests_() || 0;}, enumerable: !0},
mediaRequestsAborted: {
get: function () {return i.masterPlaylistController_.mediaRequestsAborted_() || 0;},
enumerable: !0
},
mediaRequestsTimedout: {
get: function () {return i.masterPlaylistController_.mediaRequestsTimedout_() || 0;},
enumerable: !0
},
mediaRequestsErrored: {
get: function () {return i.masterPlaylistController_.mediaRequestsErrored_() || 0;},
enumerable: !0
},
mediaTransferDuration: {
get: function () {return i.masterPlaylistController_.mediaTransferDuration_() || 0;},
enumerable: !0
},
mediaBytesTransferred: {
get: function () {return i.masterPlaylistController_.mediaBytesTransferred_() || 0;},
enumerable: !0
},
mediaSecondsLoaded: {
get: function () {return i.masterPlaylistController_.mediaSecondsLoaded_() || 0;},
enumerable: !0
},
buffered: {get: function () {return Zu(i.tech_.buffered());}, enumerable: !0},
currentTime: {get: function () {return i.tech_.currentTime();}, enumerable: !0},
currentSource: {get: function () {return i.tech_.currentSource_;}, enumerable: !0},
currentTech: {get: function () {return i.tech_.name_;}, enumerable: !0},
duration: {get: function () {return i.tech_.duration();}, enumerable: !0},
master: {get: function () {return i.playlists.master;}, enumerable: !0},
playerDimensions: {get: function () {return i.tech_.currentDimensions();}, enumerable: !0},
seekable: {get: function () {return Zu(i.tech_.seekable());}, enumerable: !0},
timestamp: {get: function () {return Date.now();}, enumerable: !0},
videoPlaybackQuality: {get: function () {return i.tech_.getVideoPlaybackQuality();}, enumerable: !0}
}), this.tech_.one('canplay', this.masterPlaylistController_.setupFirstPlay.bind(this.masterPlaylistController_)), this.tech_.on('bandwidthupdate', function () {
i.options_.useBandwidthFromLocalStorage && function (e) {
if (!T.localStorage) return;
var t = Ud();
t = t ? da.mergeOptions(t, e) : e;
try {T.localStorage.setItem(Rd, JSON.stringify(t));} catch (e) {return;}
}({bandwidth: i.bandwidth, throughput: Math.round(i.throughput)});
}), this.masterPlaylistController_.on('selectedinitialmedia', function () {
!function (i) {
var e = i.playlists;
i.representations = function () {return e && e.master && e.master.playlists ? e.master.playlists.filter(function (e) {return !sl(e);}).map(function (e, t) {return new nd(i, e, e.id);}) : [];};
}(i);
}), this.masterPlaylistController_.sourceUpdater_.on('ready', function () {
var e = i.masterPlaylistController_.mediaTypes_.AUDIO.activePlaylistLoader;
Nd({
player: i.player_,
sourceKeySystems: i.source_.keySystems,
media: i.playlists.media(),
audioMedia: e && e.media(),
mainPlaylists: i.playlists.master.playlists
});
}), 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_ = T.URL.createObjectURL(this.masterPlaylistController_.mediaSource), this.tech_.src(this.mediaSourceUrl_)));
}, t.setupQualityLevels_ = function () {
var e = this, t = da.players[this.tech_.options_.playerId];
t && t.qualityLevels && !this.qualityLevels_ && (this.qualityLevels_ = t.qualityLevels(), this.masterPlaylistController_.on('selectedinitialmedia', function () {!function (t, e) {e.representations().forEach(function (e) {t.addQualityLevel(e);}), Md(t, e.playlists);}(e.qualityLevels_, e);}), this.playlists.on('mediachange', function () {Md(e.qualityLevels_, e.playlists);}));
}, e.version = function () {
return {
'@videojs/http-streaming': '2.2.4',
'mux.js': '5.6.7',
'mpd-parser': '0.14.0',
'm3u8-parser': '4.5.0',
'aes-decrypter': '3.1.0'
};
}, t.version = function () {return this.constructor.version();}, t.canChangeType = function () {return vd.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_ && T.URL.revokeObjectURL && (T.URL.revokeObjectURL(this.mediaSourceUrl_), this.mediaSourceUrl_ = null), a.prototype.dispose.call(this);}, t.convertToProgramTime = function (e, t) {
return _l({
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), bl({
programTime: e,
playlist: this.masterPlaylistController_.media(),
retryCount: n,
pauseAfterSeek: i,
seekTo: this.options_.seekTo,
tech: this.options_.tech,
callback: t
});
}, e;
}(da.getComponent('Component')), Bd = {
name: 'videojs-http-streaming', VERSION: '2.2.4', canHandleSource: function (e, t) {
void 0 === t && (t = {});
var i = da.mergeOptions(da.options, t);
return Bd.canPlayType(e.type, i);
}, handleSource: function (e, t, i) {
void 0 === i && (i = {});
var n = da.mergeOptions(da.options, i);
return t.vhs = new Fd(e, t, n), da.hasOwnProperty('hls') || Object.defineProperty(t, 'hls', {
get: function () {return da.log.warn('player.tech().hls is deprecated. Use player.tech().vhs instead.'), t.vhs;},
configurable: !0
}), t.vhs.xhr = dl(), t.vhs.src(e.src, e.type), t.vhs;
}, canPlayType: function (e, t) {
void 0 === t && (t = {});
var i = da.mergeOptions(da.options, t).vhs.overrideNative, n = void 0 === i ? !da.browser.IS_ANY_SAFARI : i,
r = Ia(e);
return r && (!Dd.supportsTypeNatively(r) || n) ? 'maybe' : '';
}
};
return ql('avc1.4d400d,mp4a.40.2') && da.getTech('Html5').registerSourceHandler(Bd, 0), da.VhsHandler = Fd, Object.defineProperty(da, 'HlsHandler', {
get: function () {return da.log.warn('videojs.HlsHandler is deprecated. Use videojs.VhsHandler instead.'), Fd;},
configurable: !0
}), da.VhsSourceHandler = Bd, Object.defineProperty(da, 'HlsSourceHandler', {
get: function () {return da.log.warn('videojs.HlsSourceHandler is deprecated. Use videojs.VhsSourceHandler instead.'), Bd;},
configurable: !0
}), da.Vhs = Dd, Object.defineProperty(da, 'Hls', {
get: function () {return da.log.warn('videojs.Hls is deprecated. Use videojs.Vhs instead.'), Dd;},
configurable: !0
}), da.use || (da.registerComponent('Hls', Dd), da.registerComponent('Vhs', Dd)), da.options.vhs = da.options.vhs || {}, da.options.hls = da.options.hls || {}, da.registerPlugin ? da.registerPlugin('reloadSourceOnError', rd) : da.plugin('reloadSourceOnError', rd), da;
});
!function () {
!function (a) {
var b = a && a.videojs;
b && (b.CDN_VERSION = '7.10.2');
}(window);
}();