Ezt a szkriptet nem ajánlott közvetlenül telepíteni. Ez egy könyvtár más szkriptek számára, amik tartalmazzák a // @require https://update.greasyfork.org/scripts/397845/780336/h5player.js
hivatkozást.
!function() {
var ctoplayer = function(e) {
this.isEmpty = !1,
this.debug = !1,
this.warm = !1,
this.isDestory = !1,
this.startH5Video = !1,
this.startVideoListerner = !1,
this.startPlay = !1,
this.suspend = !1,
this.isFirstSucess = !0,
this.isFirst = !0,
this.isStartSeek = !1,
this.isSeekEmpty = !1,
this.curAdType = "preroll",
this.curPlayState = "idle",
this.playStatus = 0,
this.curRole = "idle",
this.head = !1,
this.tail = !1,
this.hasTrack = !1,
this.headover = !1,
this.tailover = !1,
this.isTail = !1,
this.djsClosed = !1,
this.bufferTime = 0,
this.isKaTime = 0,
this.isKaLen = 0,
this.trackElement = [],
this.elementArr = [],
this.track = [],
this.trackOriginRate = 1,
this.trackIndex = 0,
this.nowTrackShow = {
sn: ""
},
this.bST = -1,
this.sbST = -1,
this.cbST = -1,
this.kbST = -1,
this.fontFamily = '"Microsoft YaHei"; YaHei; "FAE8F6F96C59ED1"; SimHei; "9ED1F53";Arial',
this.trackObj = {
type: "text",
color: "#FFFFFF",
font: '"SimSun","B8BF53"',
size: 28,
alpha: 1,
leading: 0,
lineHeight: 30
},
this.warmLaguage = ["当前浏览器版本过低,请使用火狐或者谷歌浏览器进行观看", "抱歉,连接失败,请您检查网络或进行刷新操作", "抱歉,连接失败,请您检查网络或切换线路尝试", "播放卡顿?建议您检查网络或切换线路尝试"],
this.videoErrorObj = [["411", "You aborted the video playback"], ["412", "A network error caused the video download to fail part-way"], ["413", "The video playback was aborted due to a corruption problem or because the video used features your browser did not support"], ["414", "The video could not be loaded, either because the server or network failed or because the format is not supported"]],
this.coreErrorObj = {
manifestLoadError: "421",
manifestLoadTimeOut: "422",
manifestParsingError: "423",
manifestNoKey: "424",
manifestLoadOverDue: "425",
keyLoadError: "426",
keyLoadTimeOut: "427",
binDecriptError: "428",
fragLoadError: "429",
fragLoadTimeOut: "430",
manifestIncompatibleCodecsError: "431",
fragDecryptError: "432",
fragParsingError: "433",
bufferAddCodecError: "434",
bufferAppendError: "435",
bufferAppendingError: "436",
bufferStalledError: "437",
bufferFullError: "438",
bufferSeekOverHole: "439",
bufferNudgeOnStall: "440",
remuxAllocError: "441",
internalException: "442"
},
e && this.embed(e)
};
ctoplayer.prototype = {
embed: function(e) {
null != e && e ? ("object" != typeof e && this.log("Variables type is not a object"),
this.vars = this.standardization({}, e),
this.parseVars(),
this.initialize()) : this.log("Object does not exist")
},
initialize: function() {
this.mainLoading(),
this.registerKeypress(),
this.loadIdApi()
},
parseVars: function() {
this.domId = this.vars.container,
this.dom = $("#" + this.domId),
this.version = "v2.1.0-20190709",
this.oriralConf = this.vars.conf ? this.vars.conf : "",
this.debug = !!this.vars.debug && this.vars.debug,
this.cs = this.vars.cs ? parseInt(this.vars.cs) : 0,
this.lid = this.vars.lid ? this.vars.lid : "",
this.cid = this.vars.cid ? this.vars.cid : "",
this.part = this.vars.part ? this.vars.part : "0",
this.uid = this.vars.userId ? this.vars.userId : "",
this.centerURL = this.vars.centerURL ? this.vars.centerURL : "",
this.emptyDelay = this.vars.emptyDelay ? parseInt(this.vars.emptyDelay) : "",
this.emptyCallback = this.vars.emptyCallback ? this.vars.emptyCallback : "",
this.Conf = JSON.parse(this.base64decode(this.oriralConf)),
this.oriralSign = "eDu_51Cto_siyuanTlw",
this.sign = this.MD5(this.lid + this.oriralSign).toString(),
this.Conf.controlsTrigger = this.Conf.controlsTrigger ? this.Conf.controlsTrigger : "click",
this.Conf.heartIntervalTime = this.Conf.heartIntervalTime ? parseInt(this.Conf.heartIntervalTime) : 3e4,
this.ht = 0,
this.pt = -1,
this.cdn = "auto",
this.playStatus = 0,
this.fs = 0,
this.uuid = this.MD5("" + (new Date).getTime() + this.uid + Math.random()).toString(),
this.timerF = "",
this.memTime = 0,
this.sd = 1,
this.netTest = !1,
this.isMute = this.getCookie("isMute") ? this.getCookie("isMute") : "0",
this.def = this.getCookie("playDEF") ? this.getCookie("playDEF") : "auto",
this.initHeart()
},
initHeart: function() {
var e = this;
this.Conf.kernel.statFlag && (this.heartTimer = setInterval(function() {
e.heart()
}, this.Conf.heartIntervalTime))
},
mainLoading: function() {
this.isLoading = !0,
this.loadingDom = $('<div class="error Loading"><p>课程加载中,请稍后...</p></div>'),
this.dom.append(this.loadingDom)
},
initSaver: function() {
this.Conf.skin.saver && this.Saver(this.Conf.skin.saverate)
},
loadIdApi: function() {
var t = this;
$.get(this.Conf.url_auth, {
sign: this.sign,
lesson_id: this.lid
}, function(e) {
t.setConfig(e)
}, "json")
},
setConfig: function(e) {
if (this.config = e,
this.initSaver(),
null != e && null != e.ad && (null != e.ad.head && null != e.ad.head[0].url && (this.head = !0,
this.headUrl = e.ad.head[0].url),
null != e.ad.tail && null != e.ad.tail[0].url && (this.tail = !0,
this.tailUrl = e.ad.tail[0].url)),
null != e && null != e.subtitleUrl && "" != e.subtitleUrl && (this.hasTrack = !0,
this.subtitleUrl = e.subtitleUrl,
this.loadTrack()),
this.supportVideo())
if (this.head && !this.headover)
if (this.curAdType = "preroll",
this.curRole = "head",
".mp4" == this.getFileExt(this.headUrl)) {
var t = this.processAdData(this.headUrl);
this.playheadtail(t)
} else
this.playmain();
else
this.playmain();
else
this.showWarm(0, null)
},
loadTrack: function() {
var t = this
, e = {
type: "GET",
url: this.subtitleUrl,
dataType: "text",
error: function(e) {
t.log("传输失败:" + e)
},
success: function(e) {
t.track = t.parseSrtSubtitles(e),
t.trackIndex = 0,
t.nowTrackShow = {
sn: ""
}
}
};
$.ajax(e)
},
parseSrtSubtitles: function(e) {
function t(e) {
return null != e ? e.replace(/<[^>]+>/g, "") : ""
}
var r = []
, i = []
, a = 0
, n = e.split("\n")
, s = [];
for (a = 0; a < n.length; a++)
0 < n[a].replace(/\s/g, "").length ? s.push(n[a]) : (0 < s.length && i.push(s),
s = []);
for (a = 0; a < i.length; ++a) {
var o = i[a];
if (2 <= o.length) {
var l = o[0]
, u = this.toSeconds(this.trim(o[1].split(" --\x3e ")[0]))
, d = this.toSeconds(this.trim(o[1].split(" --\x3e ")[1]))
, c = [t(o[2])];
if (2 < o.length)
for (var h = 3; h < o.length; h++)
c.push(t(o[h]));
var f = {
sn: l,
startTime: u,
endTime: d,
content: c
};
r.push(f)
}
}
return r
},
resetTrack: function() {
this.trackIndex = 0,
this.nowTrackShow = {
sn: ""
}
},
trackShowHandler: function() {
if ("main" == this.curRole && !(this.track.length < 1)) {
this.trackIndex >= this.track.length && (this.trackIndex = 0);
var e = this.track[this.trackIndex];
if (this.ht >= e.startTime && this.ht <= e.endTime)
this.nowTrackShow.sn != e.sn && (this.trackHide(),
this.trackShow(e));
else
this.trackHide(),
this.checkTrack()
}
},
trackShow: function(e) {
for (var t = (this.nowTrackShow = e).content, r = 0; r < t.length; r++) {
var i = {
text: t[r]
}
, a = this.addElement(i);
this.trackElement.push(a)
}
},
trackHide: function() {
for (var e = 0; e < this.trackElement.length; e++)
this.deleteElement(this.trackElement[e]);
this.trackElement = []
},
checkTrack: function() {
var e = this.trackIndex
, t = this.track
, r = 0;
for (r = e; r < t.length; r++)
if (this.ht >= t[r].startTime && this.ht <= t[r].endTime) {
this.trackIndex = r;
break
}
},
addElement: function(e) {
var t = this.standardization(this.trackObj, e);
this.trackEl = $("<div></div>"),
this.trackEl.attr("class", "subtitle"),
this.dom.append(this.trackEl);
parseInt(this.dom[0].offsetWidth);
this.trackEl.css({
position: "absolute",
filter: "alpha(opacity:" + this.trackObj.alpha + ")",
opacity: this.trackObj.alpha.toString(),
width: "800px",
zIndex: "20"
}),
this.isUndefined(this.trackObj) || "text" == this.trackObj.type && (this.trackElTxt = $('<div class="subtitle_text">' + t.text + "</div>")),
this.trackEl.append(this.trackElTxt),
this.trackElTxt.css({
filter: "alpha(opacity:" + t.alpha + ")",
opacity: t.alpha.toString(),
color: t.color.replace("0x", "#"),
lineHeight: 0 < t.leading ? t.leading + "px" : "",
"-webkit-text-stroke": "0.5px black",
"text-shadow": "3px 2px 3px #000000",
"white-space": "pre-wrap",
"font-weight": "900",
"word-reak": "break-all",
"font-family": '"SimSun","B8BF53"',
"text-align": "center",
position: "absolute",
zIndex: "2",
cursor: "pointer"
});
var r = this.trackElTxt.width() + 5
, i = this.dom[0].offsetWidth;
this.trackOriginRate = r / i,
this.resizeTrackEl(this.trackEl);
var a = this.calculationTrackCoor(this.trackEl);
return a.x && a.y && this.trackEl.css({
left: a.x + "px",
bottom: a.y + "px"
}),
this.elementArr.push(this.trackEl.attr("class")),
this.trackEl
},
changeElementCoor: function() {
for (var e = 0; e < this.elementArr.length; e++) {
var t = "." + this.elementArr[e]
, r = this.dom.find(t);
if (r != []) {
this.resizeTrackEl(r);
var i = this.calculationTrackCoor(r);
i.x && i.y && r.css({
left: i.x + "px",
bottom: i.y + "px"
})
}
}
},
resizeTrackEl: function(e, t) {
if (e != []) {
var r = parseInt(this.dom[0].offsetWidth - 100);
if (this.trackElTxt) {
var i = this.trackElTxt.height();
e.css({
width: r + "px",
height: i + "px"
})
}
}
},
calculationTrackCoor: function(e) {
if (e != []) {
var t = this.dom[0].offsetWidth
, r = (this.dom[0].offsetHeight,
e[0].offsetWidth);
e[0].offsetHeight;
return {
x: parseInt(.5 * (t - r)),
y: parseInt(70)
}
}
},
deleteElement: function(e) {
var t = this.arrIndexOf(this.elementArr, e.attr("class"));
-1 < t && this.elementArr.splice(t, 1),
e && e.remove()
},
randomString: function(e) {
e = e || 16;
var t = "abcdefghijklmnopqrstuvwxyz"
, r = t.length
, a = "";
for (i = 0; i < e; i++)
a += t.charAt(Math.floor(Math.random() * r));
return "ch" + a
},
checkLogin: function() {
var e = !1;
return "" != this.uid && (e = !0),
e
},
checkBuffer: function(e) {
var t = 0;
if (null != this.v && this.startPlay) {
var r = this.v.buffered
, i = r.length;
if (r)
for (var a = e, n = 0; n < i; n++) {
r.start(n),
r.end(n);
a >= r.start(n) && a < r.end(n) && (t = Math.round(r.end(n) - a))
}
}
return t
},
processAdData: function(e) {
var t = []
, r = []
, i = ""
, a = "";
return i = e.toLowerCase(),
a = "video/mp4",
r.push(e),
r.push("video/mp4"),
t.push(r),
r = [],
i = i.replace(".mp4", ".ogg"),
a = a.replace("video/mp4", "video/ogg"),
r.push(i),
r.push(a),
t.push(r),
r = [],
i = i.replace(".ogg", ".webm"),
a = a.replace("video/ogg", "video/webm"),
r.push(i),
r.push(a),
t.push(r),
t
},
playheadtail: function(e) {
var t = this
, r = "";
if (this.isLoading = !1,
this.dom.onselectstart = this.dom.ondrag = function() {
return !1
}
,
e) {
var a = e;
for (a = this.arrSort(a),
i = 0; i < a.length; i++) {
var n = ""
, s = a[i];
s[1] && (n = ' type="' + s[1] + '"'),
r += '<source src="' + s[0] + '"' + n + ">"
}
}
this.advideo = $('<video muted style="width:100%;height:100%;" muted>' + r + "</video>"),
this.dom.empty().append(this.advideo),
this.av && (this.av = null),
this.av = this.advideo[0];
var o = function(e) {
u()
};
this.addListener("ended", o);
var l = function(e) {
u(),
t.playmain()
};
function u() {
t.advideo.remove(),
t.removeListener("error", l),
t.removeListener("ended", o),
"preroll" == t.curAdType ? (t.headover = !0,
t.curAdType = "postroll",
t.playmain()) : t.video_Stop()
}
this.addListener("error", l),
this.av.play()
},
playmain: function() {
var r = this;
this.isLoading = !1,
this.curRole = "main";
var e = parseInt(this.getCookie("playTime" + r.lid));
this.playTime = e || (location.href.match(/playTime=(\d*)/) ? location.href.match(/playTime=(\d*)/)[1] : 0),
0 == this.playTime && this.config.htime && (this.playTime = this.config.htime);
var t = 1 < this.config.dispatch.length ? this.config.dispatch[1].url : this.config.dispatch[0].url
, i = this.getCookie("playDEF");
i && "auto" != i ? $.each(r.config.dispatch, function(e, t) {
t.name == i && r.switchDef(e, r.playTime)
}) : this.initMain(t, 0)
},
initMain: function(o, e) {
var l = this;
if (this.dom.empty(),
this.video = $('<video style="width:100%;height:100%;"></video>'),
this.pausedMask = $('<div class="pasue error"><button> </button></div>').click(function() {
l.video_Play()
}),
this.dom.append(this.video).append(this.pausedMask),
this.v && (this.v = null),
this.v = this.video[0],
this.v.canPlayType) {
var t = function(e) {
var t, r, i, a;
if (l.log("--------videoEventError-------"),
l.curPlayState = e.type,
"error" === e.type) {
var n = e.currentTarget.error;
switch (n.code) {
case 1:
i = l.videoErrorObj[0][0],
t = l.videoErrorObj[0][1];
break;
case 2:
i = l.videoErrorObj[1][0],
t = l.videoErrorObj[1][1];
break;
case 3:
i = l.videoErrorObj[2][0],
t = l.videoErrorObj[2][1],
a = !0;
break;
case 4:
i = l.videoErrorObj[3][0],
t = l.videoErrorObj[3][1]
}
}
var s = {
eType: "videoError",
content: t + "( " + i + " )"
};
try {
n.message && (r = n.message)
} catch (e) {
r = t
}
s.message = r,
l.repeatError(s),
a ? l.jumpCurErrorPos() : l.showWarm(1, i)
}
, r = function(e) {
l.isDestory ? h() : l.playStatus && (l.curPlayState = e.type,
$(".bufferLoading").hide(),
l.isEndStartSeek && (l.onPlayIngHandler(),
l.playStatus = 1,
l.ht = l.v.currentTime > l.dt ? l.dt : l.v.currentTime,
l.timeUpdateHandler(),
l.hasTrack && l.trackShowHandler()))
}
, i = function(e) {
l.log("--------eventWaiting-------"),
l.curPlayState = e.type,
l.emptyST && clearTimeout(l.emptyST),
$(".bufferLoading").show(),
l.isEmpty = !0,
l.bufferTime = l.checkBuffer(l.ht),
l.startPlay && (l.log("--------eventWaiting--startPlay=ture---111-------"),
3 != l.playStatus && (l.log("--------eventWaiting--startPlay=ture---222-------"),
5 != l.playStatus ? (l.log("--------eventWaiting--startPlay=ture---333-------"),
l.isSeekEmpty = !1,
l.bST = (new Date).getTime(),
"" != l.emptyDelay && (l.emptyST = setTimeout(function() {}
.bind(this), l.emptyDelay))) : (l.log("--------eventWaiting--startPlay=ture---444-------"),
l.isSeekEmpty = !0,
l.sST = (new Date).getTime()))),
l.log("-------- playstatus = 3 (eventWaiting) --------"),
l.playStatus = 3
}
, a = function(e) {
l.log("--------eventSeeked-------"),
l.isEndStartSeek = !0,
l.seekedHandler()
}
, n = function(e) {
l.log("--------eventSeeking-------"),
l.emptyST && clearTimeout(l.emptyST),
l.startPlay && (l.log("--------playstatus = 5 (eventSeeking) -------"),
l.playStatus = 5)
}
, s = function() {
l.log("--------canplay-------")
}
, u = function() {}
, d = function() {
l.isDestory ? h() : (l.log("--------playstatus = 1 videoEventPlaying -------"),
l.playStatus = 1,
l.isEndStartSeek && l.onPlayFullHandler(),
l.isStartSeek && (l.isEndStartSeek = !0))
}
, c = function(e) {
if (l.log("--------eventEnded-------"),
l.curPlayState = e.type,
l.emptyST && clearTimeout(l.emptyST),
l.tail && !l.tailover)
if (l.curAdType = "postroll",
l.curRole = "tail",
".mp4" == l.getFileExt(l.tailUrl)) {
var t = l.processAdData(l.tailUrl);
l.playheadtail(t)
} else
l.curRole = "idle",
l.tailover = !0,
l.video_Stop(),
h(),
l.nextJump();
else
l.curRole = "idle",
l.tailover = !0,
l.video_Stop(),
l.nextJump()
};
function h() {
l.removeListener("ended", c),
l.removeListener("waiting", i),
l.removeListener("emptied", i),
l.removeListener("progress", u),
l.removeListener("seeked", a),
l.removeListener("seeking", n),
l.removeListener("timeupdate", r),
l.removeListener("error", t),
l.removeListener("canplay", s),
l.removeListener("playing", d)
}
this.startH5Video = !0,
l.addListener("ended", c),
l.addListener("waiting", i),
l.addListener("emptied", i),
l.addListener("progress", u),
l.addListener("seeked", a),
l.addListener("seeking", n),
l.addListener("timeupdate", r),
l.addListener("error", t),
l.addListener("canplay", s),
l.addListener("playing", d),
this.initMainView(),
Hls.isSupported() ? (this.hls && (this.hls.destroy(),
this.hls = null),
this.hls = new Hls,
this.hls.attachMedia(this.v),
this.cST = (new Date).getTime(),
this.hls.loadSource(o, this.cid, this.lid, this.sign, this.part),
this.hls.on(Hls.Events.MANIFEST_PARSED, function(e, t) {
l.playerLoad(),
l.dt = parseInt(t.levels[0].details.totalduration);
var r = parseInt(l.getCookie("playTime" + l.lid));
l.playTime = parseInt(l.playTime) < r ? r : parseInt(l.playTime),
parseInt(l.playTime) == parseInt(l.dt) && (l.playTime = 0),
l.dt - parseInt(l.playTime) <= 10 && (l.playTime = 0),
l.heart(),
l.duration.find("span").eq(1).html(l.sTo(l.dt)),
l.getCookie("h5playersd") && (l.v.playbackRate = l.getCookie("h5playersd")),
l.dom.addClass("pause"),
l.playBtn.removeClass("ps"),
l.pausedMask.show(),
l.v.play(),
0 < l.errorTime ? l.video_seek(l.errorTime) : 0 < l.playTime ? (setTimeout(function() {
l.seekTipShow()
}, 1500),
l.video_seek(l.playTime)) : (l.isEndStartSeek = !0,
l.isStartSeek = !1)
}),
this.hls.on(Hls.Events.FRAG_DECRYPTED, function(e, t) {
t.type,
t.details
}),
this.hls.on(Hls.Events.FOUND_SIDX, function(e, t) {
var r = {
eType: "foundSidx",
content: "sidxUrl: = ( " + t.url + ")---【" + t.reason + "】"
};
l.repeatError(r)
}),
this.hls.on(Hls.Events.MP4_REGEX_SUFFIX, function(e, t) {
var r = {
eType: "mp4RegexSuffix",
content: "reurl: = ( " + t.url + ")---【" + t.reason + "】"
};
l.repeatError(r)
}),
this.hls.on(Hls.Events.PARSE_M3U8_RANGE, function(e, t) {
var r = {
eType: "parseM3u8Range",
content: "reason: = 【" + t.reason + "】"
};
l.repeatError(r)
}),
this.hls.on(Hls.Events.SET_RANGE_END, function(e, t) {
var r = t.rangeStart
, i = t.rangeEnd
, a = {
eType: "setRangeEnd",
content: "url: = ( " + t.url + ")---【rangeStart = " + r + "@rangeEnd" + i + "】"
};
l.repeatError(a)
}),
this.hls.on(Hls.Events.SET_SIDX_FRAG_RANGE_ONE, function(e, t) {
var r = {
eType: "setSidxFragRangeOne",
content: "reason: = 【" + t.reason + "】"
};
l.repeatError(r)
}),
this.hls.on(Hls.Events.SET_SIDX_FRAG_RANGE_TWO, function(e, t) {
var r = {
eType: "setSidxFragRangeTwo",
content: "reason: = 【" + t.reason + "】"
};
l.repeatError(r)
}),
this.hls.on(Hls.Events.SET_RAWBYTERANGE, function(e, t) {
var r = {
eType: "setRawByteRange",
content: "mapAttrsURI: = ( " + t.url + ")---【" + t.reason + "】"
};
l.repeatError(r)
}),
this.hls.on(Hls.Events.ERROR, function(e, t) {
t.type;
var r, i = t.details, a = (t.fatal,
""), n = l.justifyObjContains(i, l.coreErrorObj), s = {
eType: "kernelError",
content: t.details
};
switch (t.details) {
case Hls.ErrorDetails.MANIFEST_LOAD_ERROR:
l.log("error while loading manifest! CODE = " + t.response.code + "TExT =" + t.response.text);
try {
0 === t.response.code && (r = "this might be a CORS issue, consider installing Allow-Control-Allow-Origin Chrome Extension")
} catch (e) {
r = "cannot Load" + o + "Reason:Load " + t.response.text
}
r = t.response.text;
break;
case Hls.ErrorDetails.MANIFEST_LOAD_TIMEOUT:
r = "timeout while loading manifest";
break;
case Hls.ErrorDetails.BUFFER_STALLED_ERROR:
r = "由于缓冲区数据耗尽而导致播放停止时引发";
break;
case Hls.ErrorDetails.BUFFER_FULL_ERROR:
r = "当媒体缓冲区中没有数据可以再添加时,引发它,因为它已满。通过减少最大缓冲区长度来恢复此错误";
break;
case Hls.ErrorDetails.BUFFER_STALLED_ERROR:
r = "尽管currentTime位于缓冲区域,但在播放被卡住时引发";
break;
case Hls.ErrorDetails.MANIFEST_PARSING_ERROR:
r = t.reason,
s.url = t.url,
s.type = 2;
break;
case Hls.ErrorDetails.LEVEL_LOAD_ERROR:
r = "error while loading level playlist";
break;
case Hls.ErrorDetails.LEVEL_LOAD_TIMEOUT:
r = "timeout while loading level playlist";
break;
case Hls.ErrorDetails.LEVEL_SWITCH_ERROR:
r = "error while trying to switch to level " + t.level;
break;
case Hls.ErrorDetails.FRAG_LOAD_ERROR:
r = "error while loading fragment " + t.frag.url;
break;
case Hls.ErrorDetails.FRAG_LOAD_TIMEOUT:
r = "timeout while loading fragment " + t.frag.url;
break;
case Hls.ErrorDetails.FRAG_LOOP_LOADING_ERROR:
r = "Frag Loop Loading Error ";
break;
case Hls.ErrorDetails.FRAG_DECRYPT_ERROR:
r = "Decrypting Error:" + t.reason;
break;
case Hls.ErrorDetails.FRAG_PARSING_ERROR:
r = "Parsing Error:" + t.reason;
break;
case Hls.ErrorDetails.KEY_LOAD_ERROR:
r = "error while loading key " + t.frag.decryptdata.uri;
break;
case Hls.ErrorDetails.KEY_LOAD_TIMEOUT:
r = "timeout while loading key " + t.frag.decryptdata.uri;
break;
case Hls.ErrorDetails.BUFFER_APPEND_ERROR:
r = "Buffer Append Error ";
break;
case Hls.ErrorDetails.BUFFER_ADD_CODEC_ERROR:
thisTemp.log("Buffer Add Codec Error for " + t.mimeType + ":" + t.err.message),
r = "Buffer Add Codec Error for " + t.mimeType + ":" + t.err.message;
break;
case Hls.ErrorDetails.BUFFER_APPENDING_ERROR:
thisTemp.log("Buffer Appending Error"),
r = "Buffer Appending Error";
break;
default:
r = t.details
}
if (t.fatal)
switch (l.hls.destroy(),
t.type) {
case Hls.ErrorTypes.NETWORK_ERROR:
a = "fatal network error encountered --- ",
t.frag && (s.ts_url = t.frag.relurl,
s.type = 1),
l.showWarm(1, n);
break;
case Hls.ErrorTypes.MEDIA_ERROR:
a = "fatal media error encountered --- ",
l.showWarm(2, n);
break;
default:
a = "fatal unrecoverable error encountered --- ",
l.showWarm(2, n)
}
else
a = "非fatal error --- ";
r = a + ("" != r) ? r : i,
s.message = r,
s.fatal = t.fatal,
l.repeatError(s)
}),
this.hls.on(Hls.Events.FRAG_LOADED, function(e, t) {
setTimeout(function() {
l.memTime = Math.round(t.frag.endDTS);
var e = Math.round(l.memTime / l.dt * 100);
l.cts.find(".mem").width(e + "%")
}, 1e3)
})) : l.showWarm(0, 408)
} else
l.showWarm(0, 407)
},
initMainView: function() {
var s = this
, e = $('<div class="controls"></div>');
this.dom.append(e);
var t = $('<div class="bufferLoading"></div>');
this.dom.append(t),
this.cts = $('<div class="cts"><div class="mem"></div><div class="played"></div><div class="ps"><p></p></div></div>').mousemove(function(e) {
var t = e.clientX - $(this).offset().left;
$(this).find(".ps").css("left", t + "px").find("p").html(s.sTo(parseInt(s.dt * (t / $(this).width()))))
}).mousedown(function(e) {
e.clientX,
this.offsetLeft;
var t = $(this).find(".played")
, r = $(this).offset().left
, i = e.clientX - r
, a = $(this).width()
, n = i / a;
t.width(i),
document.onmousemove = function(e) {
i = e.clientX - r,
t.width(i),
(n = i / a) <= 0 && (n = 0),
1 <= n && (n = 1),
n = parseInt(1e4 * n) / 1e4
}
,
document.onmouseup = function() {
s.video_seek(parseInt(n * s.dt)),
document.onmousemove = null,
document.onmouseup = null
}
}),
e.append(this.cts),
this.playBtn = $('<div class="play icons fl"></div>'),
e.append(this.playBtn),
this.playBtn.click(function() {
0 === s.playStatus || 4 === s.playStatus ? s.video_Play() : 1 === s.playStatus && s.video_pause()
});
var r = $('<div class="prev icons fl"></div>').click(function() {
return s.jump(.1, !1),
!1
})
, i = $('<div class="next icons fl"></div>').click(function() {
return s.jump(.1, !0),
!1
});
function a(e) {
var t = s.voice.find(".sv").offset().top
, r = 0
, i = 110 - (e.clientY - t);
100 <= i && (i = 100),
i <= 0 && (i = 0),
1 <= (r = i / 100) && (r = 1),
r <= 0 && (r = 0),
r = parseInt(100 * r) / 100,
s.setCookie("h5playervoice", r, 31536e3),
n(r)
}
function n(e) {
s.voice.find(".a").height(100 * e + "%"),
0 == (s.v.volume = e) && (s.voice.addClass("ed"),
s.isMute),
0 < e && (s.voice.removeClass("ed"),
s.isMute)
}
this.config.prevurl && e.append(r),
this.config.nexturl && e.append(i),
this.duration = $('<div class="time fl"><span class="curTime">00:00</span> / <span class="allTime">00:00</span></div>'),
e.append(this.duration),
this.full = $('<div class="full icons fr"></div>').click(function() {
0 === s.fs ? s.fullScreen() : s.exitFullScreen()
}),
e.append(this.full),
this.ListenerFullScreen(),
this.voice = $('<div class="voice icons fr"><div class="vc" style="height:30px;width:30px;"> </div><div class="sv"><div class="c"><div class="b"></div><div class="a"></div></div></div></div>'),
e.append(this.voice),
this.getCookie("h5playervoice") && setTimeout(function() {
n(Math.abs(s.getCookie("h5playervoice")))
}, 100),
this.getCookie("isMute") && setTimeout(function() {
n(0)
}, 0),
this.voice.find(".sv").mousedown(function(e) {
a(e),
document.onmousemove = function(e) {
a(e)
}
,
document.onmouseup = function() {
document.onmousemove = null,
document.onmouseup = null
}
}).mouseleave(function() {
document.onmousemove = null,
document.onmouseup = null
}),
"click" == this.Conf.controlsTrigger ? (this.voice.find(".vc").click(function() {
s.voice.toggleClass("active")
}),
this.voice.on("mouseleave", function() {
s.voice.removeClass("active")
})) : s.voice.addClass("trigger-over"),
this.getCookie("h5playervoice") && n(parseFloat(this.getCookie("h5playervoice"))),
1 == this.Conf.skin.network && (this.route = $('<div class="route hl fr"><span>网络:自动</span><ul><li>点击测速</li></ul></div>').click(function(e) {
if ("LI" != e.target.tagName)
return !1;
if (0 === $(e.target).index())
return 1 == s.netTest || s.testSpeed(s.playStatus),
!1;
if (2 != s.netTest)
return !1;
var t = parseInt($(e.target).attr("val"))
, r = s.config.dispatch_list[t];
if (0 === r.sp)
return !1;
s.config.dispatch = r.value,
s.cdn = r.code,
s.switchDef("hd" == s.def ? 0 : 1, s.ht),
s.route.find("span").eq(0).text("网络:" + r.name)
}),
2 == this.netTest && (s.route.find("li").text("重新测速"),
$.each(s.config.dispatch_list, function(e, t) {
s.route.find("ul").append('<li val="' + e + '">' + t.name + ": " + t.sp + "K/s</li>")
})),
e.append(this.route)),
1 < this.config.dispatch.length && (this.defDom = $('<div class="def hl fr"><span>流畅</span><ul><li>高清</li><li>流畅</li></ul></div>').click(function(e) {
if ("LI" == e.target.tagName) {
var t = $(e.target).index();
s.def = 1 == t ? "low" : "hd",
s.switchDef(t, s.ht)
}
}),
e.append(this.defDom));
var o = "倍速"
, l = $("<ul></ul>");
if (this.getCookie("h5playersd")) {
var u = parseFloat(this.getCookie("h5playersd"));
o = 1 == (u = 2 == u ? u + ".0" : u) ? o : u + "x"
}
$.each(["2.0", "1.75", "1.5", "1.25", "1.0"], function(e, t) {
l.append("<li>" + t + "x</li>")
}),
this.speed = $('<div class="speed hl fr"><span>' + o + "</span></div>").append(l).click(function(e) {
if ("LI" == e.target.tagName) {
var t = $(e.target).text();
s.setSpeed(t)
}
}),
e.append(this.speed),
this.video.click(function() {
0 === s.playStatus ? s.video_Play() : 1 === s.playStatus && s.video_pause()
}),
this.Tips = $('<div class="Tips"></div>'),
this.dom.append(this.Tips);
var d = e.find("div.hl");
"click" == this.Conf.controlsTrigger ? (d.on("click", function(e) {
$(this).toggleClass("active")
}),
d.on("mouseleave", function(e) {
$(this).removeClass("active")
})) : d.addClass("trigger-over");
var c = setTimeout(function() {
h()
}, 5e3);
function h() {
e.hide(),
s.dom.addClass("noMouse")
}
this.dom.unbind().mousemove(function() {
e.show(),
s.dom.removeClass("noMouse"),
clearTimeout(c),
c = setTimeout(function() {
h()
}, 5e3)
}).mouseleave(function() {
h()
}).dblclick(function() {
0 === s.fs ? s.fullScreen() : s.exitFullScreen()
});
this.addListener("resize", function() {
s.changeElementCoor()
}, window)
},
video_Play: function() {
this.emptyST && clearTimeout(this.emptyST),
null != this.v && (this.video && this.video.show(),
this.v && this.v.play(),
this.log("----------- playstatus = 1 (video_Play) ---------------"),
this.playStatus = 1,
this.playStatusHandler())
},
playerLoad: function() {
var e = this;
this.isFirst && (this.isFirst = !1,
window.setTimeout(function() {
e.loadedHandler()
}, 1))
},
loadedHandler: function() {
if ("" != this.vars.loaded)
try {
eval(this.vars.loaded + "()")
} catch (e) {}
},
playStatusHandler: function() {
var e = !0
, t = this;
this.pausedMask && this.pausedMask.hide(),
this.playBtn.addClass("ps"),
this.dom.removeClass("pause"),
this.Conf.kernel.loginCheckFlag && (e = this.checkLogin()),
this.timerF && window.clearTimeout(this.timerF),
this.timerF = setTimeout(function() {
t.timer(e)
}, 1e3)
},
nextJump: function() {
window.playerFinishCallback ? playerFinishCallback() : this.config.nexturl && this.jump(.1, !0)
},
seekedHandler: function() {
this.resetTrack()
},
onPlayIngHandler: function() {
0 <= this.ht && !this.isFirstSucess && 0 < this.ht && (this.isFirstSucess = !0,
this.onPlayFullHandler())
},
onPlayFullHandler: function() {
if (this.startPlay) {
if ($(".bufferLoading").hide(),
!this.isEmpty)
return;
var e;
if (this.isEmpty)
if (this.isEmpty = !1,
e = (new Date).getTime(),
this.isSeekEmpty) {
if (-1 != this.sST) {
r = {
eType: "seekVideoBuffer",
content: e - this.sST,
bst: this.sST,
bet: e
};
this.repeatError(r),
this.sST = -1,
this.isStartSeek = !1
}
} else if (-1 != this.bST) {
r = {
eType: "VideoBuffer",
content: e - this.bST,
bst: this.bST,
bet: e
};
this.repeatError(r),
this.bST = -1
}
} else if (this.startPlay = !0,
this.isEmpty && (this.isEmpty = !1),
this.playStatusHandler(),
-1 != this.cST) {
var t = (new Date).getTime()
, r = {
eType: "connectBuffer",
content: t - this.cST,
bst: this.cST,
bet: t
};
this.repeatError(r)
}
this.emptyST && clearTimeout(this.emptyST)
},
playOrPause: function() {
null != this.v && (this.v.paused ? this.video_Play() : this.video_pause())
},
kernel_seek: function(e) {
this.hls && this.hls.startLoad(e)
},
video_seek: function(e) {
if (this.isStartSeek = !0,
this.isEndStartSeek = !1,
this.emptyST && clearTimeout(this.emptyST),
this.isFirstSucess || this.startPlay) {
var t = this.getMetaDate().duration;
0 < t && t < e && (e = t),
this.v && (this.v.currentTime = e,
this.ht = e)
}
},
video_Stop: function() {
this.emptyST && clearTimeout(this.emptyST),
this.log("----------- playstatus = 4 (video_Stop) ---------------"),
this.playStatus = 4,
this.dom.addClass("pause"),
this.playBtn.removeClass("ps"),
clearTimeout(this.timerF),
this.pausedMask.show(),
$(".saver").remove(),
this.heart()
},
video_pause: function() {
this.emptyST && clearTimeout(this.emptyST),
this.v && this.v.pause(),
this.log("----------- playstatus = 0 (video_pause) ---------------"),
this.playStatus = 0,
this.dom.addClass("pause"),
this.playBtn.removeClass("ps"),
this.pausedMask.show(),
clearTimeout(this.timerF)
},
timeUpdateHandler: function() {
if (!this.isUndefined(this.ht)) {
var e = parseInt(this.ht);
this.duration.find("span").eq(0).html(this.sTo(e)),
this.cts.find(".played").width(Math.round(e / this.dt * 1e4) / 100 + "%")
}
},
fullScreen: function(e) {
this.fs = 1,
this.dom.addClass("off"),
this.fontSize = 40;
var t = this.dom[0];
if (t)
if (t.requestFullscreen)
try {
t.requestFullscreen()
} catch (e) {}
else if (t.mozRequestFullScreen)
try {
t.mozRequestFullScreen()
} catch (e) {}
else if (t.webkitRequestFullScreen)
try {
t.webkitRequestFullScreen()
} catch (e) {}
else if (t.msRequestFullscreen)
try {
t.msRequestFullscreen()
} catch (e) {}
this.setCookie("playFullScreen", 1)
},
exitFullScreen: function() {
this.fs = 0,
this.dom.removeClass("off"),
this.fontSize = 28;
var e = document;
if (71 <= this.getChromeVersion()) {
var t;
if (e)
e.exitFullscreen ? t = e.exitFullscreen() : e.mozCancelFullScreen ? t = e.mozCancelFullScreen() : e.webkitExitFullscreen ? t = e.webkitExitFullscreen() : e.msExitFullscreen && (t = e.msExitFullscreen());
t.catch && t.catch(function() {})
} else if (e)
if (e.exitFullscreen)
try {
e.exitFullscreen()
} catch (e) {}
else if (e.mozCancelFullScreen)
try {
e.mozCancelFullScreen()
} catch (e) {}
else if (e.webkitExitFullscreen)
try {
e.webkitExitFullscreen()
} catch (e) {}
else if (e.msExitFullscreen)
try {
e.msExitFullscreen()
} catch (e) {}
this.removeCookie("playFullScreen")
},
ListenerFullScreen: function() {
var e = document
, t = this;
e.addEventListener("fullscreenchange", function() {
e.fullscreen || t.exitFullScreen()
}, !1),
e.addEventListener("mozfullscreenchange", function() {
e.mozFullScreen || t.exitFullScreen()
}, !1),
e.addEventListener("webkitfullscreenchange", function() {
e.webkitIsFullScreen || t.exitFullScreen()
}, !1),
e.addEventListener("msfullscreenchange", function() {
e.msFullscreenElement || t.exitFullScreen()
}, !1)
},
setSpeed: function(e) {
this.sd = parseFloat(e.replace("x", "")),
this.speed.find("span").html(e),
this.v.playbackRate = this.sd,
this.setCookie("h5playersd", this.sd, 259200)
},
destroy: function() {
this.warm = !1,
this.isDestory = !0,
this.dom.empty(),
this.destroyKernel(),
this.v = null,
this.log("----------- playstatus = 4 (destroy) ---------------"),
this.playStatus = 4
},
destroyKernel: function() {
this.startPlay = !1,
this.hls && (this.hls.destroy(),
this.hls.bufferTimer && (clearInterval(this.hls.bufferTimer),
this.hls.bufferTimer = void 0),
this.hls = null)
},
addListener: function(e, t, r, i) {
this.isUndefined(i) && (i = !1);
var a = this.v;
if (a = this.head ? this.headover ? "ended" == this.curPlayState ? this.av : this.v : this.av : this.v,
this.isUndefined(r) || (a = r),
a.addEventListener)
try {
a.addEventListener(e, t, i)
} catch (e) {}
else if (a.attachEvent)
try {
a.attachEvent("on" + e, t)
} catch (e) {}
else
a["on" + e] = t
},
removeListener: function(e, t, r, i) {
var a;
if (this.isUndefined(i) && (i = !1),
a = this.head ? this.headover ? "ended" == this.curPlayState ? this.av : this.v : this.av : this.v)
if (this.isUndefined(r) || (a = r),
a.removeEventListener)
try {
a.removeEventListener(e, t, i)
} catch (e) {}
else if (a.detachEvent)
try {
a.detachEvent("on" + e, t)
} catch (e) {}
else
a["on" + e] = null
},
isProcessSeek: function(e) {
var t;
e ? -1 != this.seekStartTime && e && (t = (new Date).getTime() - this.seekStartTime,
this.isSeekVideoBuffer = 1e3 < t) : this.seekStartTime = (new Date).getTime()
},
iska: function(e) {
if (-1 != e) {
if (!(e < 1e3)) {
var t = !1;
5e3 < e && (t = !0),
this.isKaTime++,
this.isKaLen += e;
var r = this.isKaLen / this.isKaTime;
if ((new Date).getTime() - this.kaStartTime < 6e5 && 3e3 < r && 5 <= this.isKaTime && (t = !0),
t) {
this.repeatError({
eType: "videoKa",
content: null,
message: null
})
}
}
} else
this.kaStartTime < 0 && (this.kaStartTime = (new Date).getTime())
},
jumpCurErrorPos: function() {
var e = "hd" == this.def ? 0 : 1;
this.errorTime = this.ht + 1,
this.switchDef(e, this.ht + 1)
},
showWarm: function(num, ecode) {
if (!this.warm) {
var me = this, txt;
this.warm = !0,
this.startH5Video && (this.video_Stop(),
this.destroyKernel());
var code = "", useFlash;
switch (num) {
case 0:
txt = this.warmLaguage[0];
break;
case 1:
txt = this.warmLaguage[1];
break;
case 2:
txt = this.warmLaguage[2];
break;
case 3:
txt = this.warmLaguage[3],
useFlash = !0;
break;
default:
txt = this.warmLaguage[2]
}
if (ecode && (code = " (" + ecode + " )"),
error = $('<div class="error cantPlay"><p>' + txt + code + "</p></div>"),
this.dom.empty().append(error),
this.cs) {
var _contactService = $('<div class="answer"><p>如果问题仍未解决,请<span class="blue service"> 联系客服</span></p></div>');
_contactService.find(".service").click(function() {
if (me.emptyCallback)
try {
eval(me.emptyCallback + "()")
} catch (e) {}
}),
error.append(_contactService)
}
}
},
registerKeypress: function() {
var t = this
, r = "";
$("body").keyup(function(e) {
if ("textarea" === (r = e.target.nodeName.toLocaleLowerCase()) || "input" === r)
return !1;
32 == e.keyCode && (0 === t.playStatus ? t.video_Play() : t.video_pause()),
37 == e.keyCode && t.video_seek(t.ht - 5),
39 == e.keyCode && t.video_seek(t.ht + 5)
})
},
switchDef: function(e, t) {
this.isFirstSucess = !0,
this.startPlay = !1,
this.isEmpty = !1,
this.initMain(this.config.dispatch[e].url, t),
this.defDom.find("span").text("hd" == this.def ? "高清" : "流畅"),
this.setCookie("playDEF", this.def, 31536e3)
},
seekTipShow: function() {
var e = this
, t = $('<span class="blue">从头观看</span>').click(function() {
r.remove(),
i.remove(),
e.video_seek(.1)
});
this.playTime = this.playTime > this.dt ? this.dt : this.playTime;
var r = $('<div class="lastLearn"><i>!</i>您上次学习到 ' + e.sTo(this.playTime) + " 已自动为您续播 </div>")
, i = $('<div class="closeTip"></div>').click(function() {
r.remove(),
i.remove(),
e.TipsHide()
});
r.append(t),
this.Tips.empty().append(r).append(i).show(),
setTimeout(function() {
r.remove(),
i.remove(),
e.TipsHide()
}, 5e3)
},
TipsHide: function() {
15 < this.dt - parseInt(this.ht) && this.Tips.hide()
},
Saver: function(e) {
var t = this;
setTimeout(function() {
t.SaverShow(e)
}, 1e3 * (parseInt(10 * Math.random()) + 5))
},
SaverShow: function(e) {
var t = this;
var r, i = parseInt(100 * Math.random()) / 100 * t.dom.height();
i > t.dom.height() - 20 && (i = t.dom.height() - 20),
r = $('<div class="saver" style="animation-duration:10s;top:' + i + "px;color:rgba(" + parseInt(100 * Math.random()) + "," + parseInt(100 * Math.random()) + "," + parseInt(100 * Math.random()) + ",1);width:" + 16 * t.config.saverText.length + 'px;">' + t.config.saverText + "</div>"),
1 == t.playStatus && t.dom.append(r),
setTimeout(function() {
r.addClass("overtime"),
1 == t.playStatus && (r.andSelf(),
r.remove())
}, 1e4),
setTimeout(function() {
t.SaverShow(e, 10)
}, 1e3 * (parseInt(21 * Math.random()) - 10 + e))
},
testSpeed: function(e) {
this.video_pause(),
this.dln = 0,
this.netTest = 1,
this.route.find("ul").find("li:gt(0)").remove(),
this.testSpeedIng(this.dln++, e)
},
testSpeedIng: function(i, a) {
var n = this
, s = this.route.find("ul")
, o = (new Date).getTime()
, l = this.config.dispatch_list[i];
s.children().eq(0).text("测速中"),
$.ajax({
url: l.test,
cache: !1,
complete: function(e) {
if (4 == e.readyState)
var t = (new Date).getTime()
, r = parseInt(2048e3 / (t - o));
else
r = 0;
l.sp = r,
s.append('<li val="' + i + '">' + l.name + ": " + r + "K/s</li>"),
s.children().eq(0).text("重新测速"),
i < n.config.dispatch_list.length - 1 ? n.testSpeedIng(n.dln++, a) : (n.netTest = 2,
1 == a && n.video_Play())
}
})
},
setUid: function(e) {
this.uid = e
},
getuuid: function() {
return this.uuid
},
timer: function(e) {
var t = this;
if (this.timerF && window.clearTimeout(this.timerF),
this.timerF = setTimeout(function() {
t.timer(e)
}, 1e3),
this.isLoading)
return !1;
1 == this.playStatus && (this.pt++,
this.Conf.kernel.loginCheckTime = 10,
"login" != e && 1 != e && 298 < this.ht && this.noLogin()),
this.setCookie("playTime" + this.lid, this.ht, 604800);
var r = this.dt - parseInt(this.ht);
if (this.Tips.show().find(".rest").remove(),
r < 16 && this.config.nexturl && !t.djsClosed) {
var i = $('<div class="rest"><i>!</i><span class="blue">' + r + "s</span>后为您播放下一节</div>")
, a = $('<div class="closeTip"></div>').click(function() {
i.remove(),
a.remove(),
t.TipsHide(),
t.djsClosed = !0
});
this.Tips.empty().append(i).append(a)
}
0 == this.Tips.children().length && this.TipsHide()
},
noLogin: function() {
this.video_Stop(),
this.dom.empty().append('<div class="error noLogin"><p>未登录用户只能试看5分钟,更多内容请登录后观看<a href="' + this.Conf.url_login + '">登录/注册</a></p></div>')
},
jump: function(e, t) {
var r = t ? this.config.nexturl : this.config.prevurl;
setTimeout(function() {
window.location = r
}, 1e3 * e)
},
heart: function(e) {
var t = window.navigator.userAgent;
var r, i = {
m: "time",
id: this.lid,
uid: this.uid,
uuid: this.uuid,
ref: location.href,
os: t.indexOf("Windows") ? "Windows" : "other",
br: (r = t,
-1 < r.indexOf("Opera") ? "Opera" : -1 < r.indexOf("Firefox") ? "FF" : -1 < r.indexOf("Chrome") ? "Chrome" : -1 < r.indexOf("Safari") ? "Safari" : -1 < r.indexOf("compatible") && -1 < r.indexOf("MSIE") && !isOpera ? "IE" : void 0),
fp: 0,
htime: this.ht,
dt: this.dt,
pt: this.pt,
t: (new Date).getTime(),
sgin: this.MD5("" + (new Date).getTime() + this.ht + this.dt + this.pt + "eDu_51Cto_siyuanTlw").toString(),
cdn: this.cdn,
def: this.def,
switchDef: this.def,
ver: this.version,
platform: 4
};
e && $.extend(i, e),
$.get(this.Conf.url_stat, i)
},
repeatError: function(e) {
var t = {
m: "time",
video_id: this.lid,
user_id: this.uid,
uuid: this.uuid,
type: 0,
speed: 0,
htime: this.ht,
btime: this.bufferTime,
dt: this.dt,
pt: this.pt,
time: (new Date).getTime(),
sign: this.MD5(this.uid + this.lid + this.ht + this.pt + (new Date).getTime() + "eDu_51Cto_siyuanTlw").toString(),
cdn: this.cdn,
warm: this.warm,
ts_url: "",
platform: 4
};
e && $.extend(t, e),
$.get(this.Conf.url_lag, t)
},
Barrage: function() {},
arrSort: function(e) {
for (var t = [], r = 0; r < e.length; r++)
for (var i = 0; i < e.length - r; i++)
!this.isUndefined(e[i + 1]) && e[i][3] < e[i + 1][3] && (t = e[i + 1],
e[i + 1] = e[i],
e[i] = t);
return e
},
isMsie: function() {
var e = navigator.appName
, t = navigator.appVersion.split(";")
, r = "";
return 1 < t.length && (r = t[1].replace(/[ ]/g, "")),
"Microsoft Internet Explorer" != e || "MSIE6.0" != r && "MSIE7.0" != r && "MSIE8.0" != r && "MSIE9.0" != r && "MSIE10.0" != r
},
supportVideo: function() {
if (!this.isMsie())
return !1;
if (document.createElement("video").canPlayType) {
var t, r, e = document.createElement("video");
try {
t = e.canPlayType('video/ogg; codecs="theora, vorbis"')
} catch (e) {
t = !1
}
if (t)
return "probably" == t;
try {
r = e.canPlayType('video/mp4; codecs="avc1.42E01E, mp4a.40.2"')
} catch (e) {
r = !1
}
return !!r && "probably" == r
}
return !1
},
isUndefined: function(e) {
try {
if ("undefined" == e || null == e)
return !0
} catch (e) {}
return !1
},
getMetaDate: function() {
if (!this.startPlay || null == this.v)
return !1;
var e = 0;
try {
e = isNaN(this.v.duration) ? 0 : this.v.duration
} catch (e) {}
return {
duration: e,
volume: this.v.volume,
width: this.dom.offsetWidth || this.v.offsetWidth || this.v.width,
height: this.dom.offsetHeight || this.v.offsetHeight || this.v.height,
videoWidth: this.v.videoWidth,
videoHeight: this.v.videoHeight,
paused: this.v.paused
}
},
getV: function() {
return this.v
},
getVersion: function() {
return this.version
},
sTo: function(e) {
if (e < 0)
return "00:00";
var t, r = 0 != (r = (r = Math.floor(e / 3600)) < 10 ? "0" + r : r) ? r + ":" : "", i = (i = Math.floor(e / 60 % 60)) < 10 ? "0" + i : i;
return r + (i += ":") + (t = (t = Math.floor(e % 60)) < 10 ? "0" + t : t)
},
MD5: function(e) {
var a = 0
, n = 8;
function t(e) {
return s(r(i(e), e.length * n))
}
function r(e, t) {
e[t >> 5] |= 128 << t % 32,
e[14 + (t + 64 >>> 9 << 4)] = t;
for (var r = 1732584193, i = -271733879, a = -1732584194, n = 271733878, s = 0; s < e.length; s += 16) {
var o = r
, l = i
, u = a
, d = n;
i = p(i = p(i = p(i = p(i = f(i = f(i = f(i = f(i = h(i = h(i = h(i = h(i = c(i = c(i = c(i = c(i, a = c(a, n = c(n, r = c(r, i, a, n, e[s + 0], 7, -680876936), i, a, e[s + 1], 12, -389564586), r, i, e[s + 2], 17, 606105819), n, r, e[s + 3], 22, -1044525330), a = c(a, n = c(n, r = c(r, i, a, n, e[s + 4], 7, -176418897), i, a, e[s + 5], 12, 1200080426), r, i, e[s + 6], 17, -1473231341), n, r, e[s + 7], 22, -45705983), a = c(a, n = c(n, r = c(r, i, a, n, e[s + 8], 7, 1770035416), i, a, e[s + 9], 12, -1958414417), r, i, e[s + 10], 17, -42063), n, r, e[s + 11], 22, -1990404162), a = c(a, n = c(n, r = c(r, i, a, n, e[s + 12], 7, 1804603682), i, a, e[s + 13], 12, -40341101), r, i, e[s + 14], 17, -1502002290), n, r, e[s + 15], 22, 1236535329), a = h(a, n = h(n, r = h(r, i, a, n, e[s + 1], 5, -165796510), i, a, e[s + 6], 9, -1069501632), r, i, e[s + 11], 14, 643717713), n, r, e[s + 0], 20, -373897302), a = h(a, n = h(n, r = h(r, i, a, n, e[s + 5], 5, -701558691), i, a, e[s + 10], 9, 38016083), r, i, e[s + 15], 14, -660478335), n, r, e[s + 4], 20, -405537848), a = h(a, n = h(n, r = h(r, i, a, n, e[s + 9], 5, 568446438), i, a, e[s + 14], 9, -1019803690), r, i, e[s + 3], 14, -187363961), n, r, e[s + 8], 20, 1163531501), a = h(a, n = h(n, r = h(r, i, a, n, e[s + 13], 5, -1444681467), i, a, e[s + 2], 9, -51403784), r, i, e[s + 7], 14, 1735328473), n, r, e[s + 12], 20, -1926607734), a = f(a, n = f(n, r = f(r, i, a, n, e[s + 5], 4, -378558), i, a, e[s + 8], 11, -2022574463), r, i, e[s + 11], 16, 1839030562), n, r, e[s + 14], 23, -35309556), a = f(a, n = f(n, r = f(r, i, a, n, e[s + 1], 4, -1530992060), i, a, e[s + 4], 11, 1272893353), r, i, e[s + 7], 16, -155497632), n, r, e[s + 10], 23, -1094730640), a = f(a, n = f(n, r = f(r, i, a, n, e[s + 13], 4, 681279174), i, a, e[s + 0], 11, -358537222), r, i, e[s + 3], 16, -722521979), n, r, e[s + 6], 23, 76029189), a = f(a, n = f(n, r = f(r, i, a, n, e[s + 9], 4, -640364487), i, a, e[s + 12], 11, -421815835), r, i, e[s + 15], 16, 530742520), n, r, e[s + 2], 23, -995338651), a = p(a, n = p(n, r = p(r, i, a, n, e[s + 0], 6, -198630844), i, a, e[s + 7], 10, 1126891415), r, i, e[s + 14], 15, -1416354905), n, r, e[s + 5], 21, -57434055), a = p(a, n = p(n, r = p(r, i, a, n, e[s + 12], 6, 1700485571), i, a, e[s + 3], 10, -1894986606), r, i, e[s + 10], 15, -1051523), n, r, e[s + 1], 21, -2054922799), a = p(a, n = p(n, r = p(r, i, a, n, e[s + 8], 6, 1873313359), i, a, e[s + 15], 10, -30611744), r, i, e[s + 6], 15, -1560198380), n, r, e[s + 13], 21, 1309151649), a = p(a, n = p(n, r = p(r, i, a, n, e[s + 4], 6, -145523070), i, a, e[s + 11], 10, -1120210379), r, i, e[s + 2], 15, 718787259), n, r, e[s + 9], 21, -343485551),
r = g(r, o),
i = g(i, l),
a = g(a, u),
n = g(n, d)
}
return Array(r, i, a, n)
}
function o(e, t, r, i, a, n) {
return g(function(e, t) {
return e << t | e >>> 32 - t
}(g(g(t, e), g(i, n)), a), r)
}
function c(e, t, r, i, a, n, s) {
return o(t & r | ~t & i, e, t, a, n, s)
}
function h(e, t, r, i, a, n, s) {
return o(t & i | r & ~i, e, t, a, n, s)
}
function f(e, t, r, i, a, n, s) {
return o(t ^ r ^ i, e, t, a, n, s)
}
function p(e, t, r, i, a, n, s) {
return o(r ^ (t | ~i), e, t, a, n, s)
}
function g(e, t) {
var r = (65535 & e) + (65535 & t);
return (e >> 16) + (t >> 16) + (r >> 16) << 16 | 65535 & r
}
function i(e) {
for (var t = Array(), r = (1 << n) - 1, i = 0; i < e.length * n; i += n)
t[i >> 5] |= (e.charCodeAt(i / n) & r) << i % 32;
return t
}
function s(e) {
for (var t = a ? "0123456789ABCDEF" : "0123456789abcdef", r = "", i = 0; i < 4 * e.length; i++)
r += t.charAt(e[i >> 2] >> i % 4 * 8 + 4 & 15) + t.charAt(e[i >> 2] >> i % 4 * 8 & 15);
return r
}
return t(e)
},
Base64: function() {
_keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",
this.encode = function(e) {
var t, r, i, a, n, s, o, l = "", u = 0;
for (e = _utf8_encode(e); u < e.length; )
a = (t = e.charCodeAt(u++)) >> 2,
n = (3 & t) << 4 | (r = e.charCodeAt(u++)) >> 4,
s = (15 & r) << 2 | (i = e.charCodeAt(u++)) >> 6,
o = 63 & i,
isNaN(r) ? s = o = 64 : isNaN(i) && (o = 64),
l = l + _keyStr.charAt(a) + _keyStr.charAt(n) + _keyStr.charAt(s) + _keyStr.charAt(o);
return l
}
,
this.decode = function(e) {
var t, r, i, a, n, s, o = "", l = 0;
for (e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""); l < e.length; )
t = _keyStr.indexOf(e.charAt(l++)) << 2 | (a = _keyStr.indexOf(e.charAt(l++))) >> 4,
r = (15 & a) << 4 | (n = _keyStr.indexOf(e.charAt(l++))) >> 2,
i = (3 & n) << 6 | (s = _keyStr.indexOf(e.charAt(l++))),
o += String.fromCharCode(t),
64 != n && (o += String.fromCharCode(r)),
64 != s && (o += String.fromCharCode(i));
return o = _utf8_decode(o)
}
,
_utf8_encode = function(e) {
e = e.replace(/\r\n/g, "\n");
for (var t = "", r = 0; r < e.length; r++) {
var i = e.charCodeAt(r);
i < 128 ? t += String.fromCharCode(i) : (127 < i && i < 2048 ? t += String.fromCharCode(i >> 6 | 192) : (t += String.fromCharCode(i >> 12 | 224),
t += String.fromCharCode(i >> 6 & 63 | 128)),
t += String.fromCharCode(63 & i | 128))
}
return t
}
,
_utf8_decode = function(e) {
for (var t = "", r = 0, i = c1 = c2 = 0; r < e.length; )
(i = e.charCodeAt(r)) < 128 ? (t += String.fromCharCode(i),
r++) : 191 < i && i < 224 ? (c2 = e.charCodeAt(r + 1),
t += String.fromCharCode((31 & i) << 6 | 63 & c2),
r += 2) : (c2 = e.charCodeAt(r + 1),
c3 = e.charCodeAt(r + 2),
t += String.fromCharCode((15 & i) << 12 | (63 & c2) << 6 | 63 & c3),
r += 3);
return t
}
},
base64decode: function(e) {
var t, r, i, a, n, s, o, l = new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);
for (s = e.length,
n = 0,
o = ""; n < s; ) {
for (; t = l[255 & e.charCodeAt(n++)],
n < s && -1 == t; )
;
if (-1 == t)
break;
for (; r = l[255 & e.charCodeAt(n++)],
n < s && -1 == r; )
;
if (-1 == r)
break;
o += String.fromCharCode(t << 2 | (48 & r) >> 4);
do {
if (61 == (i = 255 & e.charCodeAt(n++)))
return o;
i = l[i]
} while (n < s && -1 == i);if (-1 == i)
break;
o += String.fromCharCode((15 & r) << 4 | (60 & i) >> 2);
do {
if (61 == (a = 255 & e.charCodeAt(n++)))
return o;
a = l[a]
} while (n < s && -1 == a);if (-1 == a)
break;
o += String.fromCharCode((3 & i) << 6 | a)
}
return o
},
getFileExt: function(e) {
return "" == e ? "" : (-1 < e.indexOf("?") && (e = e.split("?")[0]),
"." + e.replace(/.+\./, ""))
},
standardization: function(e, t) {
var r, i = {};
for (r in e)
i[r] = e[r];
for (r in t) {
switch (typeof i[r]) {
case "number":
i[r] = parseFloat(t[r]);
break;
case "string":
"string" != typeof t[r] && void 0 !== t[r] ? i[r] = t[r].toString() : i[r] = t[r];
break;
default:
i[r] = t[r]
}
}
return i
},
request: function(e, t, r, i, a, n, s) {
var o = this;
$.ajax({
async: e,
cache: t,
type: r,
url: i,
dataType: a,
data: n,
beforSend: function() {},
error: function(e) {
o.log("传输失败:" + e)
},
success: function(e) {
s(e)
}
})
},
log: function(e) {
if (0 != this.debug)
try {
console.log("[" + this.getNowDate() + "] :" + e)
} catch (e) {}
},
getNowDate: function() {
var e = new Date
, t = e.getMonth() + 1
, r = e.getDate()
, i = e.getHours()
, a = e.getMinutes()
, n = e.getSeconds();
return (t < 10 ? "0" + t : t + "") + "/" + (r < 10 ? "0" + r : r + "") + " " + (i < 10 ? "0" + i : i + "") + ":" + (a < 10 ? "0" + a : a + "") + ":" + (n < 10 ? "0" + n : n + "")
},
justifyObjContains: function(e, t) {
return t[e] ? t[e] : -1
},
arrIndexOf: function(e, t) {
var r = new RegExp(t,[""]);
return e.toString().replace(r, "┢").replace(/[^,┢]/g, "").indexOf("┢")
},
getChromeVersion: function() {
for (var e = navigator.userAgent.split(" "), t = "", r = 0; r < e.length; r++)
/chrome/i.test(e[r]) && (t = e[r]);
return !!t && Number(t.split("/")[1].split(".")[0])
},
toSeconds: function(e) {
var t = 0;
if (e) {
var r = e.split(":");
for (i = 0; i < r.length; i++)
t = 60 * t + parseFloat(r[i].replace(",", "."))
}
return t
},
trim: function(e) {
return "" != e ? e.replace(/(^\s*)|(\s*$)/g, "") : ""
},
setCookie: function(e, t, r) {
var i = new Date;
i.setTime(i.getTime() + 1e3 * r);
var a = 0 == r ? "" : ";expires=" + i.toGMTString();
document.cookie = e + "=" + t + a + ";path=/"
},
getCookie: function(e) {
var t = document.cookie.split("; ")
, r = 0;
for (r = 0; r < t.length; r++) {
var i = t[r].split("=");
if (i[0] == e)
return i[1]
}
return ""
},
removeCookie: function(e) {
this.setCookie(e, "", -1)
}
},
window.ctoplayer = ctoplayer
}(),
"undefined" != typeof window && function(e, t) {
"object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.Hls = t() : e.Hls = t()
}(this, function() {
return function(r) {
var i = {};
function a(e) {
if (i[e])
return i[e].exports;
var t = i[e] = {
i: e,
l: !1,
exports: {}
};
return r[e].call(t.exports, t, t.exports, a),
t.l = !0,
t.exports
}
return a.m = r,
a.c = i,
a.d = function(e, t, r) {
a.o(e, t) || Object.defineProperty(e, t, {
enumerable: !0,
get: r
})
}
,
a.r = function(e) {
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
value: "Module"
}),
Object.defineProperty(e, "__esModule", {
value: !0
})
}
,
a.t = function(t, e) {
if (1 & e && (t = a(t)),
8 & e)
return t;
if (4 & e && "object" == typeof t && t && t.__esModule)
return t;
var r = Object.create(null);
if (a.r(r),
Object.defineProperty(r, "default", {
enumerable: !0,
value: t
}),
2 & e && "string" != typeof t)
for (var i in t)
a.d(r, i, function(e) {
return t[e]
}
.bind(null, i));
return r
}
,
a.n = function(e) {
var t = e && e.__esModule ? function() {
return e.default
}
: function() {
return e
}
;
return a.d(t, "a", t),
t
}
,
a.o = function(e, t) {
return Object.prototype.hasOwnProperty.call(e, t)
}
,
a.p = "/dist/",
a(a.s = 31)
}([function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = r(6);
function s() {}
var a = {
trace: s,
debug: s,
log: s,
warn: s,
info: s,
error: s
}
, o = a
, l = i.getSelfScope();
t.enableLogs = function(e) {
if (!0 === e || "object" == typeof e) {
!function(t) {
for (var e = [], r = 1; r < arguments.length; r++)
e[r - 1] = arguments[r];
e.forEach(function(e) {
var a, n;
o[e] = t[e] ? t[e].bind(t) : (a = e,
(n = l.console[a]) ? function() {
for (var e = [], t = 0; t < arguments.length; t++)
e[t] = arguments[t];
var r, i;
e[0] && (e[0] = (r = a,
i = e[0],
"[" + r + "] > " + i)),
n.apply(l.console, e)
}
: s)
})
}(e, "debug", "log", "info", "warn", "error");
try {
o.log()
} catch (e) {
o = a
}
} else
o = a
}
,
t.logger = o
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
}),
t.default = {
MEDIA_ATTACHING: "hlsMediaAttaching",
MEDIA_ATTACHED: "hlsMediaAttached",
MEDIA_DETACHING: "hlsMediaDetaching",
MEDIA_DETACHED: "hlsMediaDetached",
BUFFER_RESET: "hlsBufferReset",
BUFFER_CODECS: "hlsBufferCodecs",
BUFFER_CREATED: "hlsBufferCreated",
BUFFER_APPENDING: "hlsBufferAppending",
BUFFER_APPENDED: "hlsBufferAppended",
BUFFER_EOS: "hlsBufferEos",
BUFFER_FLUSHING: "hlsBufferFlushing",
BUFFER_FLUSHED: "hlsBufferFlushed",
MANIFEST_LOADING: "hlsManifestLoading",
MANIFEST_LOADED: "hlsManifestLoaded",
MANIFEST_PARSED: "hlsManifestParsed",
LEVEL_SWITCHING: "hlsLevelSwitching",
LEVEL_SWITCHED: "hlsLevelSwitched",
LEVEL_LOADING: "hlsLevelLoading",
LEVEL_LOADED: "hlsLevelLoaded",
LEVEL_UPDATED: "hlsLevelUpdated",
LEVEL_PTS_UPDATED: "hlsLevelPtsUpdated",
AUDIO_TRACKS_UPDATED: "hlsAudioTracksUpdated",
AUDIO_TRACK_SWITCHING: "hlsAudioTrackSwitching",
AUDIO_TRACK_SWITCHED: "hlsAudioTrackSwitched",
AUDIO_TRACK_LOADING: "hlsAudioTrackLoading",
AUDIO_TRACK_LOADED: "hlsAudioTrackLoaded",
SUBTITLE_TRACKS_UPDATED: "hlsSubtitleTracksUpdated",
SUBTITLE_TRACK_SWITCH: "hlsSubtitleTrackSwitch",
SUBTITLE_TRACK_LOADING: "hlsSubtitleTrackLoading",
SUBTITLE_TRACK_LOADED: "hlsSubtitleTrackLoaded",
SUBTITLE_FRAG_PROCESSED: "hlsSubtitleFragProcessed",
INIT_PTS_FOUND: "hlsInitPtsFound",
FRAG_LOADING: "hlsFragLoading",
FRAG_LOAD_PROGRESS: "hlsFragLoadProgress",
FRAG_LOAD_EMERGENCY_ABORTED: "hlsFragLoadEmergencyAborted",
FRAG_LOADED: "hlsFragLoaded",
FRAG_DECRYPTED: "hlsFragDecrypted",
FRAG_PARSING_INIT_SEGMENT: "hlsFragParsingInitSegment",
FRAG_PARSING_USERDATA: "hlsFragParsingUserdata",
FRAG_PARSING_METADATA: "hlsFragParsingMetadata",
FRAG_PARSING_DATA: "hlsFragParsingData",
FRAG_PARSED: "hlsFragParsed",
FRAG_BUFFERED: "hlsFragBuffered",
FRAG_CHANGED: "hlsFragChanged",
FPS_DROP: "hlsFpsDrop",
FPS_DROP_LEVEL_CAPPING: "hlsFpsDropLevelCapping",
ERROR: "hlsError",
FOUND_SIDX: "foundSidx",
MP4_REGEX_SUFFIX: "mp4_regex_suffix",
PARSE_M3U8_RANGE: "parse_m3u8_range",
SET_RANGE_END: "setRangeEnd",
SET_SIDX_FRAG_RANGE_ONE: "setSidxFragRangeOne",
SET_SIDX_FRAG_RANGE_TWO: "setSidxFragRangeTwo",
SET_RAWBYTERANGE: "setRawByteRange",
DESTROYING: "hlsDestroying",
KEY_LOADING: "hlsKeyLoading",
KEY_LOADED: "hlsKeyLoaded",
STREAM_STATE_TRANSITION: "hlsStreamStateTransition"
}
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = r(6).getSelfScope().Number;
(t.Number = i).isFinite = i.isFinite || function(e) {
return "number" == typeof e && isFinite(e)
}
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
}),
t.ErrorTypes = {
NETWORK_ERROR: "networkError",
MEDIA_ERROR: "mediaError",
KEY_SYSTEM_ERROR: "keySystemError",
MUX_ERROR: "muxError",
OTHER_ERROR: "otherError"
},
t.ErrorDetails = {
KEY_SYSTEM_NO_KEYS: "keySystemNoKeys",
KEY_SYSTEM_NO_ACCESS: "keySystemNoAccess",
KEY_SYSTEM_NO_SESSION: "keySystemNoSession",
KEY_SYSTEM_LICENSE_REQUEST_FAILED: "keySystemLicenseRequestFailed",
MANIFEST_LOAD_ERROR: "manifestLoadError",
MANIFEST_LOAD_TIMEOUT: "manifestLoadTimeOut",
MANIFEST_PARSING_ERROR: "manifestParsingError",
MANIFEST_INCOMPATIBLE_CODECS_ERROR: "manifestIncompatibleCodecsError",
LEVEL_LOAD_ERROR: "levelLoadError",
LEVEL_LOAD_TIMEOUT: "levelLoadTimeOut",
LEVEL_SWITCH_ERROR: "levelSwitchError",
AUDIO_TRACK_LOAD_ERROR: "audioTrackLoadError",
AUDIO_TRACK_LOAD_TIMEOUT: "audioTrackLoadTimeOut",
FRAG_LOAD_ERROR: "fragLoadError",
FRAG_LOAD_TIMEOUT: "fragLoadTimeOut",
FRAG_DECRYPT_ERROR: "fragDecryptError",
FRAG_PARSING_ERROR: "fragParsingError",
REMUX_ALLOC_ERROR: "remuxAllocError",
KEY_LOAD_ERROR: "keyLoadError",
KEY_LOAD_TIMEOUT: "keyLoadTimeOut",
BUFFER_ADD_CODEC_ERROR: "bufferAddCodecError",
BUFFER_APPEND_ERROR: "bufferAppendError",
BUFFER_APPENDING_ERROR: "bufferAppendingError",
BUFFER_STALLED_ERROR: "bufferStalledError",
BUFFER_FULL_ERROR: "bufferFullError",
BUFFER_SEEK_OVER_HOLE: "bufferSeekOverHole",
BUFFER_NUDGE_ON_STALL: "bufferNudgeOnStall",
INTERNAL_EXCEPTION: "internalException"
}
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = r(0)
, a = r(3)
, n = r(1)
, s = {
hlsEventGeneric: !0,
hlsHandlerDestroying: !0,
hlsHandlerDestroyed: !0
}
, o = function() {
function e(e) {
for (var t = [], r = 1; r < arguments.length; r++)
t[r - 1] = arguments[r];
this.hls = e,
this.onEvent = this.onEvent.bind(this),
this.handledEvents = t,
this.useGenericHandler = !0,
this.registerListeners()
}
return e.prototype.destroy = function() {
this.onHandlerDestroying(),
this.unregisterListeners(),
this.onHandlerDestroyed()
}
,
e.prototype.onHandlerDestroying = function() {}
,
e.prototype.onHandlerDestroyed = function() {}
,
e.prototype.isEventHandler = function() {
return "object" == typeof this.handledEvents && this.handledEvents.length && "function" == typeof this.onEvent
}
,
e.prototype.registerListeners = function() {
this.isEventHandler() && this.handledEvents.forEach(function(e) {
if (s[e])
throw new Error("Forbidden event-name: " + e);
this.hls.on(e, this.onEvent)
}, this)
}
,
e.prototype.unregisterListeners = function() {
this.isEventHandler() && this.handledEvents.forEach(function(e) {
this.hls.off(e, this.onEvent)
}, this)
}
,
e.prototype.onEvent = function(e, t) {
this.onEventGeneric(e, t)
}
,
e.prototype.onEventGeneric = function(e, t) {
try {
(function(e, t) {
var r = "on" + e.replace("hls", "");
if ("function" != typeof this[r])
throw new Error("Event " + e + " has no generic handler in this " + this.constructor.name + " class (tried " + r + ")");
return this[r].bind(this, t)
}
).call(this, e, t).call()
} catch (t) {
i.logger.error("An internal error happened while handling event " + e + '. Error message: "' + t.message + '". Here is a stacktrace:', t),
this.hls.trigger(n.default.ERROR, {
type: a.ErrorTypes.OTHER_ERROR,
details: a.ErrorDetails.INTERNAL_EXCEPTION,
fatal: !1,
event: e,
err: t
})
}
}
,
e
}();
t.default = o
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = function() {
function e() {}
return e.isBuffered = function(e, t) {
try {
if (e)
for (var r = e.buffered, i = 0; i < r.length; i++)
if (t >= r.start(i) && t <= r.end(i))
return !0
} catch (e) {}
return !1
}
,
e.bufferInfo = function(e, t, r) {
try {
if (e) {
var i = e.buffered
, a = []
, n = void 0;
for (n = 0; n < i.length; n++)
a.push({
start: i.start(n),
end: i.end(n)
});
return this.bufferedInfo(a, t, r)
}
} catch (e) {}
return {
len: 0,
start: t,
end: t,
nextStart: void 0
}
}
,
e.bufferedInfo = function(e, t, r) {
var i, a, n, s, o, l = [];
for (e.sort(function(e, t) {
return e.start - t.start || t.end - e.end
}),
o = 0; o < e.length; o++) {
var u = l.length;
if (u) {
var d = l[u - 1].end;
e[o].start - d < r ? e[o].end > d && (l[u - 1].end = e[o].end) : l.push(e[o])
} else
l.push(e[o])
}
for (i = o = 0,
a = n = t; o < l.length; o++) {
var c = l[o].start
, h = l[o].end;
if (c <= t + r && t < h)
a = c,
i = (n = h) - t;
else if (t + r < c) {
s = c;
break
}
}
return {
len: i,
start: a,
end: n,
nextStart: s
}
}
,
e
}();
t.BufferHelper = i
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
}),
t.getSelfScope = function() {
return "undefined" == typeof window ? self : window
}
}
, function(e, o, r) {
"use strict";
(function(i) {
var a, t = this && this.__extends || (a = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
a(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(o, "__esModule", {
value: !0
});
var n = r(4)
, s = r(1);
o.FragmentState = {
NOT_LOADED: "NOT_LOADED",
APPENDING: "APPENDING",
PARTIAL: "PARTIAL",
OK: "OK"
};
var e = function(r) {
function e(e) {
var t = r.call(this, e, s.default.BUFFER_APPENDED, s.default.FRAG_BUFFERED, s.default.FRAG_LOADED) || this;
return t.bufferPadding = .2,
t.fragments = Object.create(null),
t.timeRanges = Object.create(null),
t.config = e.config,
t
}
return t(e, r),
e.prototype.destroy = function() {
this.fragments = null,
this.timeRanges = null,
this.config = null,
n.default.prototype.destroy.call(this),
r.prototype.destroy.call(this)
}
,
e.prototype.getBufferedFrag = function(i, a) {
var n = this.fragments
, e = Object.keys(n).filter(function(e) {
var t = n[e];
if (t.body.type !== a)
return !1;
if (!t.buffered)
return !1;
var r = t.body;
return r.startPTS <= i && i <= r.endPTS
});
if (0 === e.length)
return null;
var t = e.pop();
return n[t].body
}
,
e.prototype.detectEvictedFragments = function(a, n) {
var s, o, l = this;
Object.keys(this.fragments).forEach(function(e) {
var t = l.fragments[e];
if (!0 === t.buffered) {
var r = t.range[a];
if (r) {
s = r.time;
for (var i = 0; i < s.length; i++)
if (o = s[i],
!1 === l.isTimeBuffered(o.startPTS, o.endPTS, n)) {
l.removeFragment(t.body);
break
}
}
}
})
}
,
e.prototype.detectPartialFragments = function(r) {
var i = this
, e = this.getFragmentKey(r)
, a = this.fragments[e];
a && (a.buffered = !0,
Object.keys(this.timeRanges).forEach(function(e) {
if (r.hasElementaryStream(e)) {
var t = i.timeRanges[e];
a.range[e] = i.getBufferedTimes(r.startPTS, r.endPTS, t)
}
}))
}
,
e.prototype.getBufferedTimes = function(e, t, r) {
for (var i, a, n = [], s = !1, o = 0; o < r.length; o++) {
if (i = r.start(o) - this.bufferPadding,
a = r.end(o) + this.bufferPadding,
i <= e && t <= a) {
n.push({
startPTS: Math.max(e, r.start(o)),
endPTS: Math.min(t, r.end(o))
});
break
}
if (e < a && i < t)
n.push({
startPTS: Math.max(e, r.start(o)),
endPTS: Math.min(t, r.end(o))
}),
s = !0;
else if (t <= i)
break
}
return {
time: n,
partial: s
}
}
,
e.prototype.getFragmentKey = function(e) {
return e.type + "_" + e.level + "_" + e.urlId + "_" + e.sn
}
,
e.prototype.getPartialFragment = function(r) {
var i, a, n, s = this, o = null, l = 0;
return Object.keys(this.fragments).forEach(function(e) {
var t = s.fragments[e];
s.isPartial(t) && (a = t.body.startPTS - s.bufferPadding,
n = t.body.endPTS + s.bufferPadding,
a <= r && r <= n && (i = Math.min(r - a, n - r),
l <= i && (o = t.body,
l = i)))
}),
o
}
,
e.prototype.getState = function(e) {
var t = this.getFragmentKey(e)
, r = this.fragments[t]
, i = o.FragmentState.NOT_LOADED;
return void 0 !== r && (i = r.buffered ? !0 === this.isPartial(r) ? o.FragmentState.PARTIAL : o.FragmentState.OK : o.FragmentState.APPENDING),
i
}
,
e.prototype.isPartial = function(e) {
return !0 === e.buffered && (void 0 !== e.range.video && !0 === e.range.video.partial || void 0 !== e.range.audio && !0 === e.range.audio.partial)
}
,
e.prototype.isTimeBuffered = function(e, t, r) {
for (var i, a, n = 0; n < r.length; n++) {
if (i = r.start(n) - this.bufferPadding,
a = r.end(n) + this.bufferPadding,
i <= e && t <= a)
return !0;
if (t <= i)
return !1
}
return !1
}
,
e.prototype.onFragLoaded = function(e) {
var t = e.frag;
i.isFinite(t.sn) && !t.bitrateTest && (this.fragments[this.getFragmentKey(t)] = {
body: t,
range: Object.create(null),
buffered: !1
})
}
,
e.prototype.onBufferAppended = function(e) {
var r = this;
this.timeRanges = e.timeRanges,
Object.keys(this.timeRanges).forEach(function(e) {
var t = r.timeRanges[e];
r.detectEvictedFragments(e, t)
})
}
,
e.prototype.onFragBuffered = function(e) {
this.detectPartialFragments(e.frag)
}
,
e.prototype.hasFragment = function(e) {
var t = this.getFragmentKey(e);
return void 0 !== this.fragments[t]
}
,
e.prototype.removeFragment = function(e) {
var t = this.getFragmentKey(e);
delete this.fragments[t]
}
,
e.prototype.removeAllFragments = function() {
this.fragments = Object.create(null)
}
,
e
}(n.default);
o.FragmentTracker = e
}
).call(this, r(2).Number)
}
, function(e, t, r) {
var i, d, a, n, c;
i = /^((?:[a-zA-Z0-9+\-.]+:)?)(\/\/[^\/?#]*)?((?:[^\/\?#]*\/)*.*?)??(;.*?)?(\?.*?)?(#.*?)?$/,
d = /^([^\/?#]*)(.*)$/,
a = /(?:\/|^)\.(?=\/)/g,
n = /(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g,
c = {
buildAbsoluteURL: function(e, t, r) {
if (r = r || {},
e = e.trim(),
!(t = t.trim())) {
if (!r.alwaysNormalize)
return e;
var i = c.parseURL(e);
if (!i)
throw new Error("Error trying to parse base URL.");
return i.path = c.normalizePath(i.path),
c.buildURLFromParts(i)
}
var a = c.parseURL(t);
if (!a)
throw new Error("Error trying to parse relative URL.");
if (a.scheme)
return r.alwaysNormalize ? (a.path = c.normalizePath(a.path),
c.buildURLFromParts(a)) : t;
var n = c.parseURL(e);
if (!n)
throw new Error("Error trying to parse base URL.");
if (!n.netLoc && n.path && "/" !== n.path[0]) {
var s = d.exec(n.path);
n.netLoc = s[1],
n.path = s[2]
}
n.netLoc && !n.path && (n.path = "/");
var o = {
scheme: n.scheme,
netLoc: a.netLoc,
path: null,
params: a.params,
query: a.query,
fragment: a.fragment
};
if (!a.netLoc && (o.netLoc = n.netLoc,
"/" !== a.path[0]))
if (a.path) {
var l = n.path
, u = l.substring(0, l.lastIndexOf("/") + 1) + a.path;
o.path = c.normalizePath(u)
} else
o.path = n.path,
a.params || (o.params = n.params,
a.query || (o.query = n.query));
return null === o.path && (o.path = r.alwaysNormalize ? c.normalizePath(a.path) : a.path),
c.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(a, ""); e.length !== (e = e.replace(n, "")).length; )
;
return e.split("").reverse().join("")
},
buildURLFromParts: function(e) {
return e.scheme + e.netLoc + e.path + e.params + e.query + e.fragment
}
},
e.exports = c
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
}),
t.default = {
search: function(e, t) {
for (var r = 0, i = e.length - 1, a = null, n = null; r <= i; ) {
var s = t(n = e[a = (r + i) / 2 | 0]);
if (0 < s)
r = a + 1;
else {
if (!(s < 0))
return n;
i = a - 1
}
}
return null
}
}
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = function() {
function o() {}
return o.isHeader = function(e, t) {
return t + 10 <= e.length && 73 === e[t] && 68 === e[t + 1] && 51 === e[t + 2] && e[t + 3] < 255 && e[t + 4] < 255 && e[t + 6] < 128 && e[t + 7] < 128 && e[t + 8] < 128 && e[t + 9] < 128
}
,
o.isFooter = function(e, t) {
return t + 10 <= e.length && 51 === e[t] && 68 === e[t + 1] && 73 === e[t + 2] && e[t + 3] < 255 && e[t + 4] < 255 && e[t + 6] < 128 && e[t + 7] < 128 && e[t + 8] < 128 && e[t + 9] < 128
}
,
o.getID3Data = function(e, t) {
for (var r = t, i = 0; o.isHeader(e, t); )
i += 10,
i += o._readSize(e, t + 6),
o.isFooter(e, t + 10) && (i += 10),
t += i;
if (0 < i)
return e.subarray(r, r + i)
}
,
o._readSize = function(e, t) {
var r = 0;
return r = (127 & e[t]) << 21,
r |= (127 & e[t + 1]) << 14,
(r |= (127 & e[t + 2]) << 7) | 127 & e[t + 3]
}
,
o.getTimeStamp = function(e) {
for (var t = o.getID3Frames(e), r = 0; r < t.length; r++) {
var i = t[r];
if (o.isTimeStampFrame(i))
return o._readTimeStamp(i)
}
}
,
o.isTimeStampFrame = function(e) {
return e && "PRIV" === e.key && "com.apple.streaming.transportStreamTimestamp" === e.info
}
,
o._getFrameData = function(e) {
var t = String.fromCharCode(e[0], e[1], e[2], e[3])
, r = o._readSize(e, 4);
return {
type: t,
size: r,
data: e.subarray(10, 10 + r)
}
}
,
o.getID3Frames = function(e) {
for (var t = 0, r = []; o.isHeader(e, t); ) {
for (var i = o._readSize(e, t + 6), a = (t += 10) + i; t + 8 < a; ) {
var n = o._getFrameData(e.subarray(t))
, s = o._decodeFrame(n);
s && r.push(s),
t += n.size + 10
}
o.isFooter(e, t) && (t += 10)
}
return r
}
,
o._decodeFrame = function(e) {
return "PRIV" === e.type ? o._decodePrivFrame(e) : "T" === e.type[0] ? o._decodeTextFrame(e) : "W" === e.type[0] ? o._decodeURLFrame(e) : void 0
}
,
o._readTimeStamp = function(e) {
if (8 === e.data.byteLength) {
var t = new Uint8Array(e.data)
, r = 1 & t[3]
, i = (t[4] << 23) + (t[5] << 15) + (t[6] << 7) + t[7];
return i /= 45,
r && (i += 47721858.84),
Math.round(i)
}
}
,
o._decodePrivFrame = function(e) {
if (!(e.size < 2)) {
var t = o._utf8ArrayToStr(e.data, !0)
, r = new Uint8Array(e.data.subarray(t.length + 1));
return {
key: e.type,
info: t,
data: r.buffer
}
}
}
,
o._decodeTextFrame = function(e) {
if (!(e.size < 2)) {
if ("TXXX" === e.type) {
var t = 1
, r = o._utf8ArrayToStr(e.data.subarray(t));
t += r.length + 1;
var i = o._utf8ArrayToStr(e.data.subarray(t));
return {
key: e.type,
info: r,
data: i
}
}
var a = o._utf8ArrayToStr(e.data.subarray(1));
return {
key: e.type,
data: a
}
}
}
,
o._decodeURLFrame = function(e) {
if ("WXXX" === e.type) {
if (e.size < 2)
return;
var t = 1
, r = o._utf8ArrayToStr(e.data.subarray(t));
t += r.length + 1;
var i = o._utf8ArrayToStr(e.data.subarray(t));
return {
key: e.type,
info: r,
data: i
}
}
var a = o._utf8ArrayToStr(e.data);
return {
key: e.type,
data: a
}
}
,
o._utf8ArrayToStr = function(e, t) {
void 0 === t && (t = !1);
for (var r, i, a, n = e.length, s = "", o = 0; o < n; ) {
if (0 === (r = e[o++]) && t)
return s;
if (0 !== r && 3 !== r)
switch (r >> 4) {
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:
case 7:
s += String.fromCharCode(r);
break;
case 12:
case 13:
i = e[o++],
s += String.fromCharCode((31 & r) << 6 | 63 & i);
break;
case 14:
i = e[o++],
a = e[o++],
s += String.fromCharCode((15 & r) << 12 | (63 & i) << 6 | (63 & a) << 0)
}
}
return s
}
,
o
}()
, a = i._utf8ArrayToStr;
t.utf8ArrayToStr = a,
t.default = i
}
, function(e, a, n) {
"use strict";
(function(r) {
Object.defineProperty(a, "__esModule", {
value: !0
});
var e = n(8)
, i = n(18)
, t = function() {
function t() {
var e;
this._url = null,
this._byteRange = null,
this._decryptdata = null,
this.tagList = [],
this.programDateTime = null,
this.rawProgramDateTime = null,
this._elementaryStreams = ((e = {})[t.ElementaryStreamTypes.AUDIO] = !1,
e[t.ElementaryStreamTypes.VIDEO] = !1,
e)
}
return Object.defineProperty(t, "ElementaryStreamTypes", {
get: function() {
return {
AUDIO: "audio",
VIDEO: "video"
}
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(t.prototype, "url", {
get: function() {
return !this._url && this.relurl && (this._url = e.buildAbsoluteURL(this.baseurl, this.relurl, {
alwaysNormalize: !0
})),
this._url
},
set: function(e) {
this._url = e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(t.prototype, "byteRange", {
get: function() {
if (!this._byteRange && !this.rawByteRange)
return [];
if (this._byteRange)
return this._byteRange;
var e = [];
if (this.rawByteRange) {
var t = this.rawByteRange.split("@", 2);
if (1 === t.length) {
var r = this.lastByteRangeEndOffset;
e[0] = r || 0
} else
e[0] = parseInt(t[1]);
e[1] = parseInt(t[0]) + e[0],
this._byteRange = e
}
return e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(t.prototype, "byteRangeStartOffset", {
get: function() {
return this.byteRange[0]
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(t.prototype, "byteRangeEndOffset", {
get: function() {
return this.byteRange[1]
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(t.prototype, "decryptdata", {
get: function() {
return this._decryptdata || (this._decryptdata = this.fragmentDecryptdataFromLevelkey(this.levelkey, this.sn)),
this._decryptdata
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(t.prototype, "endProgramDateTime", {
get: function() {
if (!r.isFinite(this.programDateTime))
return null;
var e = r.isFinite(this.duration) ? this.duration : 0;
return this.programDateTime + 1e3 * e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(t.prototype, "encrypted", {
get: function() {
return !(!this.decryptdata || null === this.decryptdata.uri || null !== this.decryptdata.key)
},
enumerable: !0,
configurable: !0
}),
t.prototype.addElementaryStream = function(e) {
this._elementaryStreams[e] = !0
}
,
t.prototype.hasElementaryStream = function(e) {
return !0 === this._elementaryStreams[e]
}
,
t.prototype.createInitializationVector = function(e) {
for (var t = new Uint8Array(16), r = 12; r < 16; r++)
t[r] = e >> 8 * (15 - r) & 255;
return t
}
,
t.prototype.fragmentDecryptdataFromLevelkey = function(e, t) {
var r = e;
return e && e.method && e.uri && !e.iv && ((r = new i.default).method = e.method,
r.baseuri = e.baseuri,
r.reluri = e.reluri,
r.iv = this.createInitializationVector(t)),
r
}
,
t
}();
a.default = t
}
).call(this, n(2).Number)
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var n = r(3)
, s = r(0)
, o = r(1)
, l = r(6).getSelfScope()
, u = r(39)
, i = r(40)
, d = i.base64ToArrayBuffer
, c = i.arrayBufferToBase64
, h = i.dec
, a = (i.eeb64,
i.bu,
i.base64decode,
i.MD5,
function() {
function e(e, t, r) {
var i = (void 0 === r ? {} : r).removePKCS7Padding
, a = void 0 === i || i;
if (this.logEnabled = !0,
this.observer = e,
this.config = t,
this.removePKCS7Padding = a)
try {
var n = l.crypto;
n && (this.subtle = n.subtle || n.webkitSubtle)
} catch (e) {}
this.disableWebCrypto = !this.subtle
}
return e.prototype.isSync = function() {
return this.disableWebCrypto && this.config.enableSoftwareAES
}
,
e.prototype.decrypt = function(e, t, r, i, a, n) {
var s = parseInt(n.match(/(\d*)\.ts$/)[0].replace(".ts", ""));
if ("0" == a.part || "1" == a.part && 30 <= s && s % 6 == 0) {
var o = {
mode: u.mode.ECB,
padding: u.pad.Pkcs7
};
t = u.lib.WordArray.create(new Uint8Array(t)).toString(u.enc.Utf8),
t = h(t, a._lid.replace(/_\d*/, "")),
t = u.enc.Utf8.parse(t),
e = u.AES.decrypt(c(e), t, o),
e = d(e.toString(u.enc.Base64))
}
i(e)
}
,
e.prototype.onWebCryptoError = function(e, t, r, i, a) {
this.config.enableSoftwareAES ? (s.logger.log("WebCrypto Error, disable WebCrypto API"),
this.disableWebCrypto = !0,
this.logEnabled = !0,
this.decrypt(t, r, i, a)) : (s.logger.error("decrypting error : " + e.message),
this.observer.trigger(o.default.ERROR, {
type: n.ErrorTypes.MEDIA_ERROR,
details: n.ErrorDetails.FRAG_DECRYPT_ERROR,
fatal: !0,
reason: e.message
}))
}
,
e.prototype.destroy = function() {
var e = this.decryptor;
e && (e.destroy(),
this.decryptor = void 0)
}
,
e
}());
t.default = a
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
}),
t.getMediaSource = function() {
if ("undefined" != typeof window)
return window.MediaSource || window.WebKitMediaSource
}
}
, function(e, t, r) {
"use strict";
(function(f) {
Object.defineProperty(t, "__esModule", {
value: !0
});
var p = r(0);
function g(e, t, r) {
var i = e[t]
, a = e[r]
, n = a.startPTS;
f.isFinite(n) ? t < r ? (i.duration = n - i.start,
i.duration < 0 && p.logger.warn("negative duration computed for frag " + i.sn + ",level " + i.level + ", there should be some duration drift between playlist and fragment!")) : (a.duration = i.start - n,
a.duration < 0 && p.logger.warn("negative duration computed for frag " + a.sn + ",level " + a.level + ", there should be some duration drift between playlist and fragment!")) : a.start = t < r ? i.start + i.duration : Math.max(i.start - a.duration, 0)
}
function v(e, t, r, i, a, n) {
var s = r;
if (f.isFinite(t.startPTS)) {
var o = Math.abs(t.startPTS - r);
f.isFinite(t.deltaPTS) ? t.deltaPTS = Math.max(o, t.deltaPTS) : t.deltaPTS = o,
s = Math.max(r, t.startPTS),
r = Math.min(r, t.startPTS),
i = Math.max(i, t.endPTS),
a = Math.min(a, t.startDTS),
n = Math.max(n, t.endDTS)
}
var l = r - t.start;
t.start = t.startPTS = r,
t.maxStartPTS = s,
t.endPTS = i,
t.startDTS = a,
t.endDTS = n,
t.duration = i - r;
var u, d, c, h = t.sn;
if (!e || h < e.startSN || h > e.endSN)
return 0;
for (u = h - e.startSN,
(d = e.fragments)[u] = t,
c = u; 0 < c; c--)
g(d, c, c - 1);
for (c = u; c < d.length - 1; c++)
g(d, c, c + 1);
return e.PTSKnown = !0,
l
}
t.addGroupId = function(e, t, r) {
switch (t) {
case "audio":
e.audioGroupIds || (e.audioGroupIds = []),
e.audioGroupIds.push(r);
break;
case "text":
e.textGroupIds || (e.textGroupIds = []),
e.textGroupIds.push(r)
}
}
,
t.updatePTS = g,
t.updateFragPTSDTS = v,
t.mergeDetails = function(e, t) {
var r, i = Math.max(e.startSN, t.startSN) - t.startSN, a = Math.min(e.endSN, t.endSN) - t.startSN, n = t.startSN - e.startSN, s = e.fragments, o = t.fragments, l = 0;
if (t.initSegment && e.initSegment && (t.initSegment = e.initSegment),
a < i)
t.PTSKnown = !1;
else {
for (var u = i; u <= a; u++) {
var d = s[n + u]
, c = o[u];
c && d && (l = d.cc - c.cc,
f.isFinite(d.startPTS) && (c.start = c.startPTS = d.startPTS,
c.endPTS = d.endPTS,
c.duration = d.duration,
c.backtracked = d.backtracked,
c.dropped = d.dropped,
r = c))
}
if (l)
for (p.logger.log("discontinuity sliding from playlist, take drift into account"),
u = 0; u < o.length; u++)
o[u].cc += l;
if (r)
v(t, r, r.startPTS, r.endPTS, r.startDTS, r.endDTS);
else if (0 <= n && n < s.length) {
var h = s[n].start;
for (u = 0; u < o.length; u++)
o[u].start += h
}
t.PTSKnown = e.PTSKnown
}
}
}
).call(this, r(2).Number)
}
, function(e, t, r) {
"use strict";
var i, n = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var a = function(a) {
function e(e) {
for (var t = [], r = 1; r < arguments.length; r++)
t[r - 1] = arguments[r];
var i = a.apply(this, [e].concat(t)) || this;
return i._tickInterval = null,
i._tickTimer = null,
i._tickCallCount = 0,
i._boundTick = i.tick.bind(i),
i
}
return n(e, a),
e.prototype.onHandlerDestroying = function() {
this.clearNextTick(),
this.clearInterval()
}
,
e.prototype.hasInterval = function() {
return !!this._tickInterval
}
,
e.prototype.hasNextTick = function() {
return !!this._tickTimer
}
,
e.prototype.setInterval = function(e) {
return !this._tickInterval && (this._tickInterval = setInterval(this._boundTick, e),
!0)
}
,
e.prototype.clearInterval = function() {
return !!this._tickInterval && (clearInterval(this._tickInterval),
!(this._tickInterval = null))
}
,
e.prototype.clearNextTick = function() {
return !!this._tickTimer && (clearTimeout(this._tickTimer),
!(this._tickTimer = null))
}
,
e.prototype.tick = function() {
this._tickCallCount++,
1 === this._tickCallCount && (this.doTick(),
1 < this._tickCallCount && (this.clearNextTick(),
this._tickTimer = setTimeout(this._boundTick, 0)),
this._tickCallCount = 0)
}
,
e.prototype.doTick = function() {}
,
e
}(r(4).default);
t.default = a
}
, function(e, n, o) {
"use strict";
(function(v) {
var i, e = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(n, "__esModule", {
value: !0
});
var m = o(1)
, t = o(4)
, l = o(3)
, h = o(0)
, s = o(17)
, y = o(32)
, _ = window.performance
, E = {
MANIFEST: "manifest",
LEVEL: "level",
AUDIO_TRACK: "audioTrack",
SUBTITLE_TRACK: "subtitleTrack"
}
, a = {
MAIN: "main",
AUDIO: "audio",
SUBTITLE: "subtitle"
}
, r = function(r) {
function g(e) {
var t = r.call(this, e, m.default.MANIFEST_LOADING, m.default.LEVEL_LOADING, m.default.AUDIO_TRACK_LOADING, m.default.SUBTITLE_TRACK_LOADING) || this;
return t.loaders = {},
t
}
return e(g, r),
Object.defineProperty(g, "ContextType", {
get: function() {
return E
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(g, "LevelType", {
get: function() {
return a
},
enumerable: !0,
configurable: !0
}),
g.canHaveQualityLevels = function(e) {
return e !== E.AUDIO_TRACK && e !== E.SUBTITLE_TRACK
}
,
g.mapContextToLevelType = function(e) {
switch (e.type) {
case E.AUDIO_TRACK:
return a.AUDIO;
case E.SUBTITLE_TRACK:
return a.SUBTITLE;
default:
return a.MAIN
}
}
,
g.getResponseUrl = function(e, t) {
var r = e.url;
return void 0 !== r && 0 !== r.indexOf("data:") || (r = t.url),
r
}
,
g.prototype.createInternalLoader = function(e) {
var t = this.hls.config
, r = t.pLoader
, i = t.loader
, a = new (r || i)(t);
return e.loader = a,
this.loaders[e.type] = a
}
,
g.prototype.getInternalLoader = function(e) {
return this.loaders[e.type]
}
,
g.prototype.resetInternalLoader = function(e) {
this.loaders[e] && delete this.loaders[e]
}
,
g.prototype.destroyInternalLoaders = function() {
for (var e in this.loaders) {
var t = this.loaders[e];
t && t.destroy(),
this.resetInternalLoader(e)
}
}
,
g.prototype.destroy = function() {
this.destroyInternalLoaders(),
r.prototype.destroy.call(this)
}
,
g.prototype.onManifestLoading = function(e) {
this.load(e.url, {
type: E.MANIFEST,
level: 0,
id: null
})
}
,
g.prototype.onLevelLoading = function(e) {
this.load(e.url, {
type: E.LEVEL,
level: e.level,
id: e.id
})
}
,
g.prototype.onAudioTrackLoading = function(e) {
this.load(e.url, {
type: E.AUDIO_TRACK,
level: null,
id: e.id
})
}
,
g.prototype.onSubtitleTrackLoading = function(e) {
this.load(e.url, {
type: E.SUBTITLE_TRACK,
level: null,
id: e.id
})
}
,
g.prototype.load = function(e, t) {
var r = this.hls.config;
h.logger.debug("Loading playlist of type " + t.type + ", level: " + t.level + ", id: " + t.id);
var i, a, n, s, o = this.getInternalLoader(t);
if (o) {
var l = o.context;
if (l && l.url === e)
return h.logger.trace("playlist request ongoing"),
!1;
h.logger.warn("aborting previous loader for type: " + t.type),
o.abort()
}
switch (t.type) {
case E.MANIFEST:
i = r.manifestLoadingMaxRetry,
a = r.manifestLoadingTimeOut,
n = r.manifestLoadingRetryDelay,
s = r.manifestLoadingMaxRetryTimeout;
break;
case E.LEVEL:
i = 0,
a = r.levelLoadingTimeOut;
break;
default:
i = r.levelLoadingMaxRetry,
a = r.levelLoadingTimeOut,
n = r.levelLoadingRetryDelay,
s = r.levelLoadingMaxRetryTimeout
}
o = this.createInternalLoader(t),
t.url = e,
t.responseType = t.responseType || "";
var u = {
timeout: a,
maxRetry: i,
retryDelay: n,
maxRetryDelay: s
}
, d = {
onSuccess: this.loadsuccess.bind(this),
onError: this.loaderror.bind(this),
onTimeout: this.loadtimeout.bind(this)
};
return h.logger.debug("Calling internal loader delegate for URL: " + e),
o.load(t, u, d),
!0
}
,
g.prototype.loadsuccess = function(e, t, r, i) {
if (void 0 === i && (i = null),
r.isSidxRequest)
return this._handleSidxRequest(e, r),
void this._handlePlaylistLoaded(e, t, r, i);
this.resetInternalLoader(r.type);
var a = e.data;
t.tload = _.now(),
0 === a.indexOf("#EXTM3U") ? 0 < a.indexOf("#EXTINF:") || 0 < a.indexOf("#EXT-X-TARGETDURATION:") ? this._handleTrackOrLevelPlaylist(e, t, r, i) : this._handleMasterPlaylist(e, t, r, i) : this._handleManifestParsingError(e, r, "no EXTM3U delimiter", i)
}
,
g.prototype.loaderror = function(e, t, r) {
void 0 === r && (r = null),
this._handleNetworkError(t, r, !1, e)
}
,
g.prototype.loadtimeout = function(e, t, r) {
void 0 === r && (r = null),
this._handleNetworkError(t, r, !0)
}
,
g.prototype._handleMasterPlaylist = function(e, t, r, i) {
var a = this.hls
, n = e.data
, s = g.getResponseUrl(e, r)
, o = y.default.parseMasterPlaylist(n, s);
if (o.length) {
var l = o.map(function(e) {
return {
id: e.attrs.AUDIO,
codec: e.audioCodec
}
})
, u = y.default.parseMasterPlaylistMedia(n, s, "AUDIO", l)
, d = y.default.parseMasterPlaylistMedia(n, s, "SUBTITLES");
if (u.length) {
var c = !1;
u.forEach(function(e) {
e.url || (c = !0)
}),
!1 === c && o[0].audioCodec && !o[0].attrs.AUDIO && (h.logger.log("audio codec signaled in quality level, but no embedded audio track signaled, create one"),
u.unshift({
type: "main",
name: "main"
}))
}
a.trigger(m.default.MANIFEST_LOADED, {
levels: o,
audioTracks: u,
subtitles: d,
url: s,
stats: t,
networkDetails: i
})
} else
this._handleManifestParsingError(e, r, "no level found in manifest", i)
}
,
g.prototype._handleTrackOrLevelPlaylist = function(e, t, r, i) {
var a = this.hls
, n = r.id
, s = r.level
, o = r.type
, l = g.getResponseUrl(e, r)
, u = v.isFinite(n) ? n : 0
, d = v.isFinite(s) ? s : u
, c = g.mapContextToLevelType(r)
, h = y.default.parseLevelPlaylist(e.data, l, d, c, u);
if (h.tload = t.tload,
o === E.MANIFEST) {
var f = {
url: l,
details: h
};
a.trigger(m.default.MANIFEST_LOADED, {
levels: [f],
audioTracks: [],
url: l,
stats: t,
networkDetails: i
})
}
if (t.tparsed = _.now(),
h.needSidxRanges) {
var p = h.initSegment.url;
return this.load(p, {
isSidxRequest: !0,
type: o,
level: s,
levelDetails: h,
id: n,
rangeStart: 0,
rangeEnd: 2048,
responseType: "arraybuffer"
}),
void a.trigger(m.default.FOUND_SIDX, {
url: p,
reason: "playlist-loader.js --- _handleTrackOrLevelPlaylistneed --- sidxUrl请求: 加载碎片的时候contentisSidxRequest置为true"
})
}
r.levelDetails = h,
this._handlePlaylistLoaded(e, t, r, i)
}
,
g.prototype._handleSidxRequest = function(e, t) {
var a = this
, r = s.default.parseSegmentIndex(new Uint8Array(e.data));
if (r) {
var i = r.references
, n = t.levelDetails;
i.forEach(function(e, t) {
var r = e.info
, i = n.fragments[t];
0 === i.byteRange.length && (i.rawByteRange = String(1 + r.end - r.start) + "@" + String(r.start),
a.hls.trigger(m.default.SET_SIDX_FRAG_RANGE_ONE, {
reason: i.rawByteRange
}))
}),
n.initSegment.rawByteRange = String(r.moovEndOffset) + "@0",
this.hls.trigger(m.default.SET_SIDX_FRAG_RANGE_TWO, {
reason: n.initSegment.rawByteRange
})
}
}
,
g.prototype._handleManifestParsingError = function(e, t, r, i) {
this.hls.trigger(m.default.ERROR, {
type: l.ErrorTypes.NETWORK_ERROR,
details: l.ErrorDetails.MANIFEST_PARSING_ERROR,
fatal: !0,
url: e.url,
reason: r,
networkDetails: i
})
}
,
g.prototype._handleNetworkError = function(e, t, r, i) {
var a, n;
void 0 === r && (r = !1),
void 0 === i && (i = null),
h.logger.info("A network error occured while loading a " + e.type + "-type playlist");
var s = this.getInternalLoader(e);
switch (e.type) {
case E.MANIFEST:
a = r ? l.ErrorDetails.MANIFEST_LOAD_TIMEOUT : l.ErrorDetails.MANIFEST_LOAD_ERROR,
n = !0;
break;
case E.LEVEL:
a = r ? l.ErrorDetails.LEVEL_LOAD_TIMEOUT : l.ErrorDetails.LEVEL_LOAD_ERROR,
n = !1;
break;
case E.AUDIO_TRACK:
a = r ? l.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT : l.ErrorDetails.AUDIO_TRACK_LOAD_ERROR,
n = !1;
break;
default:
n = !1
}
s && (s.abort(),
this.resetInternalLoader(e.type));
var o = {
type: l.ErrorTypes.NETWORK_ERROR,
details: a,
fatal: n,
url: s.url,
loader: s,
context: e,
networkDetails: t
};
i && (o.response = i),
this.hls.trigger(m.default.ERROR, o)
}
,
g.prototype._handlePlaylistLoaded = function(e, t, r, i) {
var a = r.type
, n = r.level
, s = r.id
, o = r.levelDetails;
if (o.targetduration)
if (g.canHaveQualityLevels(r.type))
this.hls.trigger(m.default.LEVEL_LOADED, {
details: o,
level: n || 0,
id: s || 0,
stats: t,
networkDetails: i
});
else
switch (a) {
case E.AUDIO_TRACK:
this.hls.trigger(m.default.AUDIO_TRACK_LOADED, {
details: o,
id: s,
stats: t,
networkDetails: i
});
break;
case E.SUBTITLE_TRACK:
this.hls.trigger(m.default.SUBTITLE_TRACK_LOADED, {
details: o,
id: s,
stats: t,
networkDetails: i
})
}
else
this._handleManifestParsingError(e, r, "invalid target duration", i)
}
,
g
}(t.default);
n.default = r
}
).call(this, o(2).Number)
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var h = r(0)
, l = r(1)
, o = Math.pow(2, 32) - 1
, i = function() {
function g(e, t) {
this.observer = e,
this.remuxer = t
}
return g.prototype.resetTimeStamp = function(e) {
this.initPTS = e
}
,
g.prototype.resetInitSegment = function(e, t, r, i) {
if (e && e.byteLength) {
var a = this.initData = g.parseInitSegment(e);
null == t && (t = "mp4a.40.5"),
null == r && (r = "avc1.42e01e");
var n = {};
a.audio && a.video ? n.audiovideo = {
container: "video/mp4",
codec: t + "," + r,
initSegment: i ? e : null
} : (a.audio && (n.audio = {
container: "audio/mp4",
codec: t,
initSegment: i ? e : null
}),
a.video && (n.video = {
container: "video/mp4",
codec: r,
initSegment: i ? e : null
})),
this.observer.trigger(l.default.FRAG_PARSING_INIT_SEGMENT, {
tracks: n
})
} else
t && (this.audioCodec = t),
r && (this.videoCodec = r)
}
,
g.probe = function(e) {
return 0 < g.findBox({
data: e,
start: 0,
end: Math.min(e.length, 16384)
}, ["moof"]).length
}
,
g.bin2str = function(e) {
return String.fromCharCode.apply(null, e)
}
,
g.readUint16 = function(e, t) {
e.data && (t += e.start,
e = e.data);
var r = e[t] << 8 | e[t + 1];
return r < 0 ? 65536 + r : r
}
,
g.readUint32 = function(e, t) {
e.data && (t += e.start,
e = e.data);
var r = e[t] << 24 | e[t + 1] << 16 | e[t + 2] << 8 | e[t + 3];
return r < 0 ? 4294967296 + r : r
}
,
g.writeUint32 = function(e, t, r) {
e.data && (t += e.start,
e = e.data),
e[t] = r >> 24,
e[t + 1] = r >> 16 & 255,
e[t + 2] = r >> 8 & 255,
e[t + 3] = 255 & r
}
,
g.findBox = function(e, t) {
var r, i, a, n, s, o, l = [];
if (e.data ? (s = e.start,
a = e.end,
e = e.data) : (s = 0,
a = e.byteLength),
!t.length)
return null;
for (r = s; r < a; )
o = 1 < (i = g.readUint32(e, r)) ? r + i : a,
g.bin2str(e.subarray(r + 4, r + 8)) === t[0] && (1 === t.length ? l.push({
data: e,
start: r + 8,
end: o
}) : (n = g.findBox({
data: e,
start: r + 8,
end: o
}, t.slice(1))).length && (l = l.concat(n))),
r = o;
return l
}
,
g.parseSegmentIndex = function(e) {
var t, r = g.findBox(e, ["moov"])[0], i = r ? r.end : null, a = 0, n = g.findBox(e, ["sidx"]);
if (!n || !n[0])
return null;
t = [];
var s = (n = n[0]).data[0]
, o = g.readUint32(n, a = 0 === s ? 8 : 16);
a += 4,
a += 0 === s ? 8 : 16,
a += 2;
var l = n.end + 0
, u = g.readUint16(n, a);
a += 2;
for (var d = 0; d < u; d++) {
var c = a
, h = g.readUint32(n, c);
c += 4;
var f = 2147483647 & h;
if (1 == (2147483648 & h) >>> 31)
return void console.warn("SIDX has hierarchical references (not supported)");
var p = g.readUint32(n, c);
c += 4,
t.push({
referenceSize: f,
subsegmentDuration: p,
info: {
duration: p / o,
start: l,
end: l + f - 1
}
}),
l += f,
a = c += 4
}
return {
earliestPresentationTime: 0,
timescale: o,
version: s,
referencesCount: u,
references: t,
moovEndOffset: i
}
}
,
g.parseInitSegment = function(e) {
var c = [];
return g.findBox(e, ["moov", "trak"]).forEach(function(e) {
var t = g.findBox(e, ["tkhd"])[0];
if (t) {
var r = t.data[t.start]
, i = 0 === r ? 12 : 20
, a = g.readUint32(t, i)
, n = g.findBox(e, ["mdia", "mdhd"])[0];
if (n) {
i = 0 === (r = n.data[n.start]) ? 12 : 20;
var s = g.readUint32(n, i)
, o = g.findBox(e, ["mdia", "hdlr"])[0];
if (o) {
var l = {
soun: "audio",
vide: "video"
}[g.bin2str(o.data.subarray(o.start + 8, o.start + 12))];
if (l) {
var u = g.findBox(e, ["mdia", "minf", "stbl", "stsd"]);
if (u.length) {
u = u[0];
var d = g.bin2str(u.data.subarray(u.start + 12, u.start + 16));
h.logger.log("MP4Demuxer:" + l + ":" + d + " found")
}
c[a] = {
timescale: s,
type: l
},
c[l] = {
timescale: s,
id: a
}
}
}
}
}
}),
c
}
,
g.getStartDTS = function(a, e) {
var t, r, i;
return t = g.findBox(e, ["moof", "traf"]),
r = [].concat.apply([], t.map(function(i) {
return g.findBox(i, ["tfhd"]).map(function(e) {
var t, r;
return t = g.readUint32(e, 4),
r = a[t].timescale || 9e4,
g.findBox(i, ["tfdt"]).map(function(e) {
var t, r;
return t = e.data[e.start],
r = g.readUint32(e, 4),
1 === t && (r *= Math.pow(2, 32),
r += g.readUint32(e, 8)),
r
})[0] / r
})
})),
i = Math.min.apply(null, r),
isFinite(i) ? i : 0
}
,
g.offsetStartDTS = function(i, e, s) {
g.findBox(e, ["moof", "traf"]).map(function(r) {
return g.findBox(r, ["tfhd"]).map(function(e) {
var t = g.readUint32(e, 4)
, n = i[t].timescale || 9e4;
g.findBox(r, ["tfdt"]).map(function(e) {
var t = e.data[e.start]
, r = g.readUint32(e, 4);
if (0 === t)
g.writeUint32(e, 4, r - s * n);
else {
r *= Math.pow(2, 32),
r += g.readUint32(e, 8),
r -= s * n,
r = Math.max(r, 0);
var i = Math.floor(r / (1 + o))
, a = Math.floor(r % (1 + o));
g.writeUint32(e, 4, i),
g.writeUint32(e, 8, a)
}
})
})
})
}
,
g.prototype.append = function(e, t, r, i) {
var a = this.initData;
a || (this.resetInitSegment(e, this.audioCodec, this.videoCodec, !1),
a = this.initData);
var n, s = this.initPTS;
if (void 0 === s) {
var o = g.getStartDTS(a, e);
this.initPTS = s = o - t,
this.observer.trigger(l.default.INIT_PTS_FOUND, {
initPTS: s
})
}
g.offsetStartDTS(a, e, s),
n = g.getStartDTS(a, e),
this.remuxer.remux(a.audio, a.video, null, null, n, r, i, e)
}
,
g.prototype.destroy = function() {}
,
g
}();
t.default = i
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = r(8)
, a = function() {
function e() {
this.method = null,
this.key = null,
this.iv = null,
this._uri = null
}
return Object.defineProperty(e.prototype, "uri", {
get: function() {
return !this._uri && this.reluri && (this._uri = i.buildAbsoluteURL(this.baseuri, this.reluri, {
alwaysNormalize: !0
})),
this._uri
},
enumerable: !0,
configurable: !0
}),
e
}();
t.default = a
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = {
audio: {
a3ds: !0,
"ac-3": !0,
"ac-4": !0,
alac: !0,
alaw: !0,
dra1: !0,
"dts+": !0,
"dts-": !0,
dtsc: !0,
dtse: !0,
dtsh: !0,
"ec-3": !0,
enca: !0,
g719: !0,
g726: !0,
m4ae: !0,
mha1: !0,
mha2: !0,
mhm1: !0,
mhm2: !0,
mlpa: !0,
mp4a: !0,
"raw ": !0,
Opus: !0,
samr: !0,
sawb: !0,
sawp: !0,
sevc: !0,
sqcp: !0,
ssmv: !0,
twos: !0,
ulaw: !0
},
video: {
avc1: !0,
avc2: !0,
avc3: !0,
avc4: !0,
avcp: !0,
drac: !0,
dvav: !0,
dvhe: !0,
encv: !0,
hev1: !0,
hvc1: !0,
mjp2: !0,
mp4v: !0,
mvc1: !0,
mvc2: !0,
mvc3: !0,
mvc4: !0,
resv: !0,
rv60: !0,
s263: !0,
svc1: !0,
svc2: !0,
"vc-1": !0,
vp08: !0,
vp09: !0
}
};
t.isCodecType = function(e, t) {
var r = i[t];
return !!r && !0 === r[e.slice(0, 4)]
}
,
t.isCodecSupportedInMp4 = function(e, t) {
return window.MediaSource.isTypeSupported((t || "video") + '/mp4;codecs="' + e + '"')
}
}
, function(e, i, a) {
"use strict";
(function(y) {
Object.defineProperty(i, "__esModule", {
value: !0
});
var u = a(38)
, d = a(1)
, c = a(21)
, _ = a(0)
, h = a(3)
, e = a(13)
, t = a(6)
, f = a(24)
, p = t.getSelfScope()
, g = e.getMediaSource()
, r = function() {
function e(r, e) {
var i = this;
this.hls = r,
this.id = e;
function t(e, t) {
(t = t || {}).frag = i.frag,
t.id = i.id,
r.trigger(e, t)
}
var a = this.observer = new f.Observer
, n = r.config;
a.on(d.default.FRAG_DECRYPTED, t),
a.on(d.default.FRAG_PARSING_INIT_SEGMENT, t),
a.on(d.default.FRAG_PARSING_DATA, t),
a.on(d.default.FRAG_PARSED, t),
a.on(d.default.ERROR, t),
a.on(d.default.FRAG_PARSING_METADATA, t),
a.on(d.default.FRAG_PARSING_USERDATA, t),
a.on(d.default.INIT_PTS_FOUND, t);
var s = {
mp4: g.isTypeSupported("video/mp4"),
mpeg: g.isTypeSupported("audio/mpeg"),
mp3: g.isTypeSupported('audio/mp4; codecs="mp3"')
}
, o = navigator.vendor;
if (n.enableWorker && "undefined" != typeof Worker) {
_.logger.log("demuxing in webworker");
var l = void 0;
try {
l = this.w = u(51),
this.onwmsg = this.onWorkerMessage.bind(this),
l.addEventListener("message", this.onwmsg),
l.onerror = function(e) {
r.trigger(d.default.ERROR, {
type: h.ErrorTypes.OTHER_ERROR,
details: h.ErrorDetails.INTERNAL_EXCEPTION,
fatal: !0,
event: "demuxerWorker",
err: {
message: e.message + " (" + e.filename + ":" + e.lineno + ")"
}
})
}
,
l.postMessage({
cmd: "init",
typeSupported: s,
vendor: o,
id: e,
config: JSON.stringify(n)
})
} catch (r) {
_.logger.warn("Error in worker:", r),
_.logger.error("Error while initializing DemuxerWorker, fallback on DemuxerInline"),
l && p.URL.revokeObjectURL(l.objectURL),
this.demuxer = new c.default(a,s,n,o),
this.w = void 0
}
} else
this.demuxer = new c.default(a,s,n,o)
}
return e.prototype.destroy = function() {
var e = this.w;
if (e)
e.removeEventListener("message", this.onwmsg),
e.terminate(),
this.w = null;
else {
var t = this.demuxer;
t && (t.destroy(),
this.demuxer = null)
}
var r = this.observer;
r && (r.removeAllListeners(),
this.observer = null)
}
,
e.prototype.push = function(e, t, r, i, a, n, s, o, l) {
var u = this.w
, d = y.isFinite(a.startPTS) ? a.startPTS : a.start
, c = a.decryptdata
, h = this.frag
, f = !(h && a.cc === h.cc)
, p = !(h && a.level === h.level)
, g = h && a.sn === h.sn + 1
, v = !p && g;
if (f && _.logger.log(this.id + ":discontinuity detected"),
p && _.logger.log(this.id + ":switch detected"),
this.frag = a,
u)
u.postMessage({
cmd: "demux",
data: e,
decryptdata: c,
initSegment: t,
audioCodec: r,
videoCodec: i,
timeOffset: d,
discontinuity: f,
trackSwitch: p,
contiguous: v,
duration: n,
accurateTimeOffset: s,
defaultInitPTS: o,
url: l
}, e instanceof ArrayBuffer ? [e] : []);
else {
var m = this.demuxer;
m && m.push(e, c, t, r, i, d, f, p, v, n, s, o, l)
}
}
,
e.prototype.onWorkerMessage = function(e) {
var t = e.data
, r = this.hls;
switch (t.event) {
case "init":
p.URL.revokeObjectURL(this.w.objectURL);
break;
case d.default.FRAG_PARSING_DATA:
t.data.data1 = new Uint8Array(t.data1),
t.data2 && (t.data.data2 = new Uint8Array(t.data2));
default:
t.data = t.data || {},
t.data.frag = this.frag,
t.data.id = this.id,
r.trigger(t.event, t.data)
}
}
,
e
}();
i.default = r
}
).call(this, a(2).Number)
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var v, A = r(1), R = r(3), m = r(12), D = r(41), k = r(17), w = r(42), L = r(45), O = r(46), C = r(49), i = r(6), a = r(0), n = i.getSelfScope();
try {
v = n.performance.now.bind(n.performance)
} catch (e) {
a.logger.debug("Unable to use Performance API on this environment"),
v = n.Date.now
}
var s = function() {
function e(e, t, r, i) {
this.observer = e,
this.typeSupported = t,
this.config = r,
this.vendor = i
}
return e.prototype.destroy = function() {
var e = this.demuxer;
e && e.destroy()
}
,
e.prototype.push = function(e, r, i, a, n, s, o, l, u, d, c, h, t) {
var f = this;
if (0 < e.byteLength && null != r && null != r.key && "AES-128" === r.method) {
var p = this.decrypter;
null == p && (p = this.decrypter = new m.default(this.observer,this.config));
var g = v();
p.decrypt(e, r.key, r.iv, function(e) {
var t = v();
f.observer.trigger(A.default.FRAG_DECRYPTED, {
stats: {
tstart: g,
tdecrypt: t
}
}),
f.pushDecrypted(new Uint8Array(e), r, new Uint8Array(i), a, n, s, o, l, u, d, c, h)
}, r, t)
} else
this.pushDecrypted(new Uint8Array(e), r, new Uint8Array(i), a, n, s, o, l, u, d, c, h)
}
,
e.prototype.pushDecrypted = function(e, t, r, i, a, n, s, o, l, u, d, c, h) {
var f = this.demuxer;
if (!f || (s || o) && !this.probe(e)) {
for (var p = this.observer, g = this.typeSupported, v = this.config, m = [{
demux: w.default,
remux: O.default
}, {
demux: k.default,
remux: C.default
}, {
demux: D.default,
remux: O.default
}, {
demux: L.default,
remux: O.default
}], y = 0, _ = m.length; y < _; y++) {
var E = m[y]
, S = E.demux.probe;
if (S(e)) {
var T = this.remuxer = new E.remux(p,v,g,this.vendor);
f = new E.demux(p,T,v,g),
this.probe = S;
break
}
}
if (!f)
return void p.trigger(A.default.ERROR, {
type: R.ErrorTypes.MEDIA_ERROR,
details: R.ErrorDetails.FRAG_PARSING_ERROR,
fatal: !0,
reason: "no demux matching with content found"
});
this.demuxer = f
}
var b = this.remuxer;
(s || o) && (f.resetInitSegment(r, i, a, u),
b.resetInitSegment()),
s && (f.resetTimeStamp(c),
b.resetTimeStamp(c)),
"function" == typeof f.setDecryptData && f.setDecryptData(t),
f.append(e, n, l, d)
}
,
e
}();
t.default = s
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var h = r(0)
, f = r(3)
, p = r(1);
function s(e, t, r, i) {
var a, n, s, o, l, u = navigator.userAgent.toLowerCase(), d = i, c = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350];
if (a = 1 + ((192 & t[r + 2]) >>> 6),
!((n = (60 & t[r + 2]) >>> 2) > c.length - 1))
return o = (1 & t[r + 2]) << 2,
o |= (192 & t[r + 3]) >>> 6,
h.logger.log("manifest codec:" + i + ",ADTS data:type:" + a + ",sampleingIndex:" + n + "[" + c[n] + "Hz],channelConfig:" + o),
s = /firefox/i.test(u) ? 6 <= n ? (a = 5,
l = new Array(4),
n - 3) : (a = 2,
l = new Array(2),
n) : -1 !== u.indexOf("android") ? (a = 2,
l = new Array(2),
n) : (a = 5,
l = new Array(4),
i && (-1 !== i.indexOf("mp4a.40.29") || -1 !== i.indexOf("mp4a.40.5")) || !i && 6 <= n ? n - 3 : ((i && -1 !== i.indexOf("mp4a.40.2") && (6 <= n && 1 == o || /vivaldi/i.test(u)) || !i && 1 == o) && (a = 2,
l = new Array(2)),
n)),
l[0] = a << 3,
l[0] |= (14 & n) >> 1,
l[1] |= (1 & n) << 7,
l[1] |= o << 3,
5 === a && (l[1] |= (14 & s) >> 1,
l[2] = (1 & s) << 7,
l[2] |= 8,
l[3] = 0),
{
config: l,
samplerate: c[n],
channelCount: o,
codec: "mp4a.40." + a,
manifestCodec: d
};
e.trigger(p.default.ERROR, {
type: f.ErrorTypes.MEDIA_ERROR,
details: f.ErrorDetails.FRAG_PARSING_ERROR,
fatal: !0,
reason: "invalid ADTS sampling index:" + n
})
}
function a(e, t) {
return 255 === e[t] && 240 == (246 & e[t + 1])
}
function l(e, t) {
return 1 & e[t + 1] ? 7 : 9
}
function u(e, t) {
return (3 & e[t + 3]) << 11 | e[t + 4] << 3 | (224 & e[t + 5]) >>> 5
}
function d(e) {
return 9216e4 / e
}
function c(e, t, r, i, a) {
var n, s, o = e.length;
if (n = l(e, t),
s = u(e, t),
0 < (s -= n) && t + n + s <= o)
return {
headerLength: n,
frameLength: s,
stamp: r + i * a
}
}
t.getAudioConfig = s,
t.isHeaderPattern = a,
t.getHeaderLength = l,
t.getFullFrameLength = u,
t.isHeader = function(e, t) {
return !!(t + 1 < e.length && a(e, t))
}
,
t.probe = function(e, t) {
if (t + 1 < e.length && a(e, t)) {
var r = l(e, t);
t + 5 < e.length && (r = u(e, t));
var i = t + r;
if (i === e.length || i + 1 < e.length && a(e, i))
return !0
}
return !1
}
,
t.initTrackConfig = function(e, t, r, i, a) {
if (!e.samplerate) {
var n = s(t, r, i, a);
e.config = n.config,
e.samplerate = n.samplerate,
e.channelCount = n.channelCount,
e.codec = n.codec,
e.manifestCodec = n.manifestCodec,
h.logger.log("parsed codec:" + e.codec + ",rate:" + n.samplerate + ",nb channel:" + n.channelCount)
}
}
,
t.getFrameDuration = d,
t.parseFrameHeader = c,
t.appendFrame = function(e, t, r, i, a) {
var n = c(t, r, i, a, d(e.samplerate));
if (n) {
var s = n.stamp
, o = n.headerLength
, l = n.frameLength
, u = {
unit: t.subarray(r + o, r + o + l),
pts: s,
dts: s
};
return e.samples.push(u),
e.len += l,
{
sample: u,
length: l + o
}
}
}
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var g = {
BitratesMap: [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160],
SamplingRateMap: [44100, 48e3, 32e3, 22050, 24e3, 16e3, 11025, 12e3, 8e3],
SamplesCoefficients: [[0, 72, 144, 12], [0, 0, 0, 0], [0, 72, 144, 12], [0, 144, 144, 12]],
BytesInSlot: [0, 1, 1, 4],
appendFrame: function(e, t, r, i, a) {
if (!(r + 24 > t.length)) {
var n = this.parseHeader(t, r);
if (n && r + n.frameLength <= t.length) {
var s = i + a * (9e4 * n.samplesPerFrame / n.sampleRate)
, o = {
unit: t.subarray(r, r + n.frameLength),
pts: s,
dts: s
};
return e.config = [],
e.channelCount = n.channelCount,
e.samplerate = n.sampleRate,
e.samples.push(o),
e.len += n.frameLength,
{
sample: o,
length: n.frameLength
}
}
}
},
parseHeader: function(e, t) {
var r = e[t + 1] >> 3 & 3
, i = e[t + 1] >> 1 & 3
, a = e[t + 2] >> 4 & 15
, n = e[t + 2] >> 2 & 3
, s = e[t + 2] >> 1 & 1;
if (1 != r && 0 != a && 15 != a && 3 != n) {
var o = 3 == r ? 3 - i : 3 == i ? 3 : 4
, l = 1e3 * g.BitratesMap[14 * o + a - 1]
, u = 3 == r ? 0 : 2 == r ? 1 : 2
, d = g.SamplingRateMap[3 * u + n]
, c = e[t + 3] >> 6 == 3 ? 1 : 2
, h = g.SamplesCoefficients[r][i]
, f = g.BytesInSlot[i]
, p = 8 * h * f;
return {
sampleRate: d,
channelCount: c,
frameLength: parseInt(h * l / d + s, 10) * f,
samplesPerFrame: p
}
}
},
isHeaderPattern: function(e, t) {
return 255 === e[t] && 224 == (224 & e[t + 1]) && 0 != (6 & e[t + 1])
},
isHeader: function(e, t) {
return !!(t + 1 < e.length && this.isHeaderPattern(e, t))
},
probe: function(e, t) {
if (t + 1 < e.length && this.isHeaderPattern(e, t)) {
var r = this.parseHeader(e, t)
, i = 4;
r && r.frameLength && (i = r.frameLength);
var a = t + i;
if (a === e.length || a + 1 < e.length && this.isHeaderPattern(e, a))
return !0
}
return !1
}
};
t.default = g
}
, function(e, t, r) {
"use strict";
var i, a = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var n = function(e) {
function t() {
return null !== e && e.apply(this, arguments) || this
}
return a(t, e),
t.prototype.trigger = function(e) {
for (var t = [], r = 1; r < arguments.length; r++)
t[r - 1] = arguments[r];
this.emit.apply(this, [e, e].concat(t))
}
,
t
}(r(50).EventEmitter);
t.Observer = n
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
}),
t.default = {
toString: function(e) {
for (var t = "", r = e.length, i = 0; i < r; i++)
t += "[" + e.start(i).toFixed(3) + "," + e.end(i).toFixed(3) + "]";
return t
}
}
}
, function(e, t, c) {
"use strict";
(function(a) {
Object.defineProperty(t, "__esModule", {
value: !0
});
var r = c(9)
, n = c(0);
function s(e, t) {
for (var r = null, i = 0; i < e.length; i += 1) {
var a = e[i];
if (a && a.cc === t) {
r = a;
break
}
}
return r
}
function o(e, t, r) {
var i = !1;
return t && t.details && r && (r.endCC > r.startCC || e && e.cc < r.startCC) && (i = !0),
i
}
function l(e, t) {
var r = e.fragments
, i = t.fragments;
if (i.length && r.length) {
var a = s(r, i[0].cc);
if (a && (!a || a.startPTS))
return a;
n.logger.log("No frag in previous level to align on")
} else
n.logger.log("No fragments to align")
}
function u(r, e) {
e.fragments.forEach(function(e) {
if (e) {
var t = e.start + r;
e.start = e.startPTS = t,
e.endPTS = t + e.duration
}
}),
e.PTSKnown = !0
}
function i(e, t, r) {
if (o(e, r, t)) {
var i = l(r.details, t);
i && (n.logger.log("Adjusting PTS using last level due to CC increase within current level"),
u(i.start, t))
}
}
function d(e, t) {
if (t && t.fragments.length) {
if (!e.hasProgramDateTime || !t.hasProgramDateTime)
return;
var r = t.fragments[0].programDateTime
, i = (e.fragments[0].programDateTime - r) / 1e3 + t.fragments[0].start;
a.isFinite(i) && (n.logger.log("adjusting PTS using programDateTime delta, sliding:" + i.toFixed(3)),
u(i, e))
}
}
t.findFirstFragWithCC = s,
t.findFragWithCC = function(e, t) {
return r.default.search(e, function(e) {
return e.cc < t ? 1 : e.cc > t ? -1 : 0
})
}
,
t.shouldAlignOnDiscontinuities = o,
t.findDiscontinuousReferenceFrag = l,
t.adjustPts = u,
t.alignStream = function(e, t, r) {
i(e, r, t),
!r.PTSKnown && t && d(r, t.details)
}
,
t.alignDiscontinuities = i,
t.alignPDT = d
}
).call(this, c(2).Number)
}
, function(e, t, r) {
"use strict";
(function(n) {
Object.defineProperty(t, "__esModule", {
value: !0
});
var s = r(9);
function o(e, t, r) {
void 0 === e && (e = 0),
void 0 === t && (t = 0);
var i = Math.min(t, r.duration + (r.deltaPTS ? r.deltaPTS : 0));
return r.start + r.duration - i <= e ? 1 : r.start - i > e && r.start ? -1 : 0
}
function l(e, t, r) {
var i = 1e3 * Math.min(t, r.duration + (r.deltaPTS ? r.deltaPTS : 0));
return r.endProgramDateTime - i > e
}
t.findFragmentByPDT = function(e, t, r) {
if (!Array.isArray(e) || !e.length || !n.isFinite(t))
return null;
if (t < e[0].programDateTime)
return null;
if (t >= e[e.length - 1].endProgramDateTime)
return null;
r = r || 0;
for (var i = 0; i < e.length; ++i) {
var a = e[i];
if (l(t, r, a))
return a
}
return null
}
,
t.findFragmentByPTS = function(e, t, r, i) {
void 0 === r && (r = 0),
void 0 === i && (i = 0);
var a = e ? t[e.sn - t[0].sn + 1] : null;
return a && !o(r, i, a) ? a : s.default.search(t, o.bind(null, r, i))
}
,
t.fragmentWithinToleranceTest = o,
t.pdtWithinToleranceTest = l
}
).call(this, r(2).Number)
}
, function(e, f, a) {
"use strict";
(function(d) {
var i, r = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(f, "__esModule", {
value: !0
});
var e = a(15)
, n = a(7)
, c = a(5)
, h = a(0);
f.State = {
STOPPED: "STOPPED",
STARTING: "STARTING",
IDLE: "IDLE",
PAUSED: "PAUSED",
KEY_LOADING: "KEY_LOADING",
FRAG_LOADING: "FRAG_LOADING",
FRAG_LOADING_WAITING_RETRY: "FRAG_LOADING_WAITING_RETRY",
WAITING_TRACK: "WAITING_TRACK",
PARSING: "PARSING",
PARSED: "PARSED",
BUFFER_FLUSHING: "BUFFER_FLUSHING",
ENDED: "ENDED",
ERROR: "ERROR",
WAITING_INIT_PTS: "WAITING_INIT_PTS",
WAITING_LEVEL: "WAITING_LEVEL"
};
var t = function(e) {
function t() {
return null !== e && e.apply(this, arguments) || this
}
return r(t, e),
t.prototype.doTick = function() {}
,
t.prototype._streamEnded = function(e, t) {
var r = this.fragCurrent
, i = this.fragmentTracker;
if (t.live || !r || r.backtracked || r.sn !== t.endSN || e.nextStart)
return !1;
var a = i.getState(r);
return a === n.FragmentState.PARTIAL || a === n.FragmentState.OK
}
,
t.prototype.onMediaSeeking = function() {
var e = this.config
, t = this.media
, r = this.mediaBuffer
, i = this.state
, a = t ? t.currentTime : null
, n = c.BufferHelper.bufferInfo(r || t, a, this.config.maxBufferHole);
if (d.isFinite(a) && h.logger.log("media seeking to " + a.toFixed(3)),
i === f.State.FRAG_LOADING) {
var s = this.fragCurrent;
if (0 === n.len && s) {
var o = e.maxFragLookUpTolerance
, l = s.start - o
, u = s.start + s.duration + o;
a < l || u < a ? (s.loader && (h.logger.log("seeking outside of buffer while fragment load in progress, cancel fragment load"),
s.loader.abort()),
this.fragCurrent = null,
this.fragPrevious = null,
this.state = f.State.IDLE) : h.logger.log("seeking outside of buffer but within currently loaded fragment range")
}
} else
i === f.State.ENDED && (0 === n.len && (this.fragPrevious = null,
this.fragCurrent = null),
this.state = f.State.IDLE);
t && (this.lastCurrentTime = a),
this.loadedmetadata || (this.nextLoadPosition = this.startPosition = a),
this.tick()
}
,
t.prototype.onMediaEnded = function() {
this.startPosition = this.lastCurrentTime = 0
}
,
t
}(e.default);
f.default = t
}
).call(this, a(2).Number)
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
}),
t.sendAddTrackEvent = function(e, t) {
var r = null;
try {
r = new window.Event("addtrack")
} catch (e) {
(r = document.createEvent("Event")).initEvent("addtrack", !1, !1)
}
r.track = e,
t.dispatchEvent(r)
}
,
t.clearCurrentCues = function(e) {
if (e && e.cues)
for (; 0 < e.cues.length; )
e.removeCue(e.cues[0])
}
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
function i() {
return {
decode: function(e) {
if (!e)
return "";
if ("string" != typeof e)
throw new Error("Error - expected string data.");
return decodeURIComponent(encodeURIComponent(e))
}
}
}
var o = r(68);
function a() {
this.window = window,
this.state = "INITIAL",
this.buffer = "",
this.decoder = new i,
this.regionList = []
}
function l() {
this.values = Object.create(null)
}
function u(e, t, r, i) {
var a = i ? e.split(i) : [e];
for (var n in a)
if ("string" == typeof a[n]) {
var s = a[n].split(r);
2 === s.length && t(s[0], s[1])
}
}
l.prototype = {
set: function(e, t) {
this.get(e) || "" === t || (this.values[e] = t)
},
get: function(e, t, r) {
return r ? this.has(e) ? this.values[e] : t[r] : this.has(e) ? this.values[e] : t
},
has: function(e) {
return e in this.values
},
alt: function(e, t, r) {
for (var i = 0; i < r.length; ++i)
if (t === r[i]) {
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 d = new o.default(0,0,0)
, c = "middle" === d.align ? "middle" : "center";
function h(i, e, s) {
var t = i;
function r() {
var e = function(e) {
function t(e, t, r, i) {
return 3600 * (0 | e) + 60 * (0 | t) + (0 | r) + (0 | i) / 1e3
}
var r = i.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/);
return r ? r[3] ? t(r[1], r[2], r[3].replace(":", ""), r[4]) : 59 < r[1] ? t(r[1], r[2], 0, r[4]) : t(0, r[1], r[2], r[4]) : null
}();
if (null === e)
throw new Error("Malformed timestamp: " + t);
return i = i.replace(/^[^\sa-zA-Z-]+/, ""),
e
}
function a() {
i = i.replace(/^\s+/, "")
}
if (a(),
e.startTime = r(),
a(),
"--\x3e" !== i.substr(0, 3))
throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): " + t);
i = i.substr(3),
a(),
e.endTime = r(),
a(),
function(e, t) {
var n = new l;
u(e, function(e, t) {
switch (e) {
case "region":
for (var r = s.length - 1; 0 <= r; r--)
if (s[r].id === t) {
n.set(e, s[r].region);
break
}
break;
case "vertical":
n.alt(e, t, ["rl", "lr"]);
break;
case "line":
var i = t.split(",")
, a = i[0];
n.integer(e, a),
n.percent(e, a) && n.set("snapToLines", !1),
n.alt(e, a, ["auto"]),
2 === i.length && n.alt("lineAlign", i[1], ["start", c, "end"]);
break;
case "position":
i = t.split(","),
n.percent(e, i[0]),
2 === i.length && n.alt("positionAlign", i[1], ["start", c, "end", "line-left", "line-right", "auto"]);
break;
case "size":
n.percent(e, t);
break;
case "align":
n.alt(e, t, ["start", c, "end", "left", "right"])
}
}, /:/, /\s/),
t.region = n.get("region", null),
t.vertical = n.get("vertical", "");
var r = n.get("line", "auto");
"auto" === r && -1 === d.line && (r = -1),
t.line = r,
t.lineAlign = n.get("lineAlign", "start"),
t.snapToLines = n.get("snapToLines", !0),
t.size = n.get("size", 100),
t.align = n.get("align", c);
var i = n.get("position", "auto");
"auto" === i && 50 === d.position && (i = "start" === t.align || "left" === t.align ? 0 : "end" === t.align || "right" === t.align ? 100 : 50),
t.position = i
}(i, e)
}
function f(e) {
return e.replace(/<br(?: \/)?>/gi, "\n")
}
t.fixLineBreaks = f,
a.prototype = {
parse: function(e) {
var i = this;
function t() {
var e = i.buffer
, t = 0;
for (e = f(e); t < e.length && "\r" !== e[t] && "\n" !== e[t]; )
++t;
var r = e.substr(0, t);
return "\r" === e[t] && ++t,
"\n" === e[t] && ++t,
i.buffer = e.substr(t),
r
}
e && (i.buffer += i.decoder.decode(e, {
stream: !0
}));
try {
var r = void 0;
if ("INITIAL" === i.state) {
if (!/\r\n|\n/.test(i.buffer))
return this;
var a = (r = t()).match(/^()?WEBVTT([ \t].*)?$/);
if (!a || !a[0])
throw new Error("Malformed WebVTT signature.");
i.state = "HEADER"
}
for (var n = !1; i.buffer; ) {
if (!/\r\n|\n/.test(i.buffer))
return this;
switch (n ? n = !1 : r = t(),
i.state) {
case "HEADER":
/:/.test(r) ? u(r, function(e, t) {}, /:/) : r || (i.state = "ID");
continue;
case "NOTE":
r || (i.state = "ID");
continue;
case "ID":
if (/^NOTE($|[ \t])/.test(r)) {
i.state = "NOTE";
break
}
if (!r)
continue;
if (i.cue = new o.default(0,0,""),
i.state = "CUE",
-1 === r.indexOf("--\x3e")) {
i.cue.id = r;
continue
}
case "CUE":
try {
h(r, i.cue, i.regionList)
} catch (e) {
i.cue = null,
i.state = "BADCUE";
continue
}
i.state = "CUETEXT";
continue;
case "CUETEXT":
var s = -1 !== r.indexOf("--\x3e");
if (!r || s && (n = !0)) {
i.oncue && i.oncue(i.cue),
i.cue = null,
i.state = "ID";
continue
}
i.cue.text && (i.cue.text += "\n"),
i.cue.text += r;
continue;
case "BADCUE":
r || (i.state = "ID");
continue
}
}
} catch (e) {
"CUETEXT" === i.state && i.cue && i.oncue && i.oncue(i.cue),
i.cue = null,
i.state = "INITIAL" === i.state ? "BADWEBVTT" : "BADCUE"
}
return this
},
flush: function() {
try {
if (this.buffer += this.decoder.decode(),
(this.cue || "HEADER" === this.state) && (this.buffer += "\n\n",
this.parse()),
"INITIAL" === this.state)
throw new Error("Malformed WebVTT signature.")
} catch (e) {
throw e
}
return this.onflush && this.onflush(),
this
}
},
t.default = a
}
, function(e, t, r) {
"use strict";
var i, a = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var n = r(8)
, s = r(3)
, T = r(16)
, b = r(35)
, A = r(36)
, R = r(7)
, D = r(37)
, k = r(54)
, w = r(55)
, o = r(56)
, L = r(0)
, l = r(57)
, u = r(1)
, d = function(E) {
function S(e) {
void 0 === e && (e = {});
var t = E.call(this) || this
, r = S.DefaultConfig;
if ((e.liveSyncDurationCount || e.liveMaxLatencyDurationCount) && (e.liveSyncDuration || e.liveMaxLatencyDuration))
throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration");
for (var i in r)
i in e || (e[i] = r[i]);
if (void 0 !== e.liveMaxLatencyDurationCount && e.liveMaxLatencyDurationCount <= e.liveSyncDurationCount)
throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"');
if (void 0 !== e.liveMaxLatencyDuration && (e.liveMaxLatencyDuration <= e.liveSyncDuration || void 0 === e.liveSyncDuration))
throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"');
L.enableLogs(e.debug),
t.config = e,
t._autoLevelCapping = -1;
var a = t.abrController = new e.abrController(t)
, n = new e.bufferController(t)
, s = new e.capLevelController(t)
, o = new e.fpsController(t)
, l = new T.default(t)
, u = new b.default(t)
, d = new A.default(t)
, c = new w.default(t)
, h = t.levelController = new k.default(t)
, f = new R.FragmentTracker(t)
, p = [h, t.streamController = new D.default(t,f)]
, g = e.audioStreamController;
g && p.push(new g(t,f)),
t.networkControllers = p;
var v = [l, u, d, a, n, s, o, c, f];
if (g = e.audioTrackController) {
var m = new g(t);
t.audioTrackController = m,
v.push(m)
}
if (g = e.subtitleTrackController) {
var y = new g(t);
t.subtitleTrackController = y,
v.push(y)
}
if (g = e.emeController) {
var _ = new g(t);
t.emeController = _,
v.push(_)
}
return (g = e.subtitleStreamController) && v.push(new g(t,f)),
(g = e.timelineController) && v.push(new g(t)),
t.coreComponents = v,
t
}
return a(S, E),
Object.defineProperty(S, "version", {
get: function() {
return "0.1.0-SNAPSHOT"
},
enumerable: !0,
configurable: !0
}),
S.isSupported = function() {
return o.isSupported()
}
,
Object.defineProperty(S, "Events", {
get: function() {
return u.default
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S, "ErrorTypes", {
get: function() {
return s.ErrorTypes
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S, "ErrorDetails", {
get: function() {
return s.ErrorDetails
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S, "DefaultConfig", {
get: function() {
return S.defaultConfig ? S.defaultConfig : l.hlsDefaultConfig
},
set: function(e) {
S.defaultConfig = e
},
enumerable: !0,
configurable: !0
}),
S.prototype.destroy = function() {
L.logger.log("destroy"),
this.trigger(u.default.DESTROYING),
this.detachMedia(),
this.coreComponents.concat(this.networkControllers).forEach(function(e) {
e.destroy()
}),
this.url = null,
this.removeAllListeners(),
this._autoLevelCapping = -1
}
,
S.prototype.attachMedia = function(e) {
L.logger.log("attachMedia"),
this.media = e,
this.trigger(u.default.MEDIA_ATTACHING, {
media: e
})
}
,
S.prototype.detachMedia = function() {
L.logger.log("detachMedia"),
this.trigger(u.default.MEDIA_DETACHING),
this.media = null
}
,
S.prototype.loadSource = function(e, t, r, i, a) {
e = n.buildAbsoluteURL(window.location.href, e, {
alwaysNormalize: !0
}),
L.logger.log("loadSource:" + e),
this.url = e,
this.cid = t,
this.lid = r,
this.sign = i,
this.part = a,
this.trigger(u.default.MANIFEST_LOADING, {
url: e
})
}
,
S.prototype.startLoad = function(t) {
void 0 === t && (t = -1),
L.logger.log("startLoad(" + t + ")"),
this.networkControllers.forEach(function(e) {
e.startLoad(t)
})
}
,
S.prototype.stopLoad = function() {
L.logger.log("stopLoad"),
this.networkControllers.forEach(function(e) {
e.stopLoad()
})
}
,
S.prototype.swapAudioCodec = function() {
L.logger.log("swapAudioCodec"),
this.streamController.swapAudioCodec()
}
,
S.prototype.recoverMediaError = function() {
L.logger.log("recoverMediaError");
var e = this.media;
this.detachMedia(),
this.attachMedia(e)
}
,
Object.defineProperty(S.prototype, "levels", {
get: function() {
return this.levelController.levels
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "currentLevel", {
get: function() {
return this.streamController.currentLevel
},
set: function(e) {
L.logger.log("set currentLevel:" + e),
this.loadLevel = e,
this.streamController.immediateLevelSwitch()
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "nextLevel", {
get: function() {
return this.streamController.nextLevel
},
set: function(e) {
L.logger.log("set nextLevel:" + e),
this.levelController.manualLevel = e,
this.streamController.nextLevelSwitch()
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "loadLevel", {
get: function() {
return this.levelController.level
},
set: function(e) {
L.logger.log("set loadLevel:" + e),
this.levelController.manualLevel = e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "nextLoadLevel", {
get: function() {
return this.levelController.nextLoadLevel
},
set: function(e) {
this.levelController.nextLoadLevel = e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "firstLevel", {
get: function() {
return Math.max(this.levelController.firstLevel, this.minAutoLevel)
},
set: function(e) {
L.logger.log("set firstLevel:" + e),
this.levelController.firstLevel = e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "startLevel", {
get: function() {
return this.levelController.startLevel
},
set: function(e) {
L.logger.log("set startLevel:" + e),
-1 !== e && (e = Math.max(e, this.minAutoLevel)),
this.levelController.startLevel = e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "autoLevelCapping", {
get: function() {
return this._autoLevelCapping
},
set: function(e) {
L.logger.log("set autoLevelCapping:" + e),
this._autoLevelCapping = e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "autoLevelEnabled", {
get: function() {
return -1 === this.levelController.manualLevel
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "manualLevel", {
get: function() {
return this.levelController.manualLevel
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "minAutoLevel", {
get: function() {
for (var e = this.levels, t = this.config.minAutoBitrate, r = e ? e.length : 0, i = 0; i < r; i++)
if ((e[i].realBitrate ? Math.max(e[i].realBitrate, e[i].bitrate) : e[i].bitrate) > t)
return i;
return 0
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "maxAutoLevel", {
get: function() {
var e = this.levels
, t = this.autoLevelCapping;
return -1 === t && e && e.length ? e.length - 1 : t
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "nextAutoLevel", {
get: function() {
return Math.min(Math.max(this.abrController.nextAutoLevel, this.minAutoLevel), this.maxAutoLevel)
},
set: function(e) {
this.abrController.nextAutoLevel = Math.max(this.minAutoLevel, e)
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "audioTracks", {
get: function() {
var e = this.audioTrackController;
return e ? e.audioTracks : []
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "audioTrack", {
get: function() {
var e = this.audioTrackController;
return e ? e.audioTrack : -1
},
set: function(e) {
var t = this.audioTrackController;
t && (t.audioTrack = e)
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "liveSyncPosition", {
get: function() {
return this.streamController.liveSyncPosition
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "subtitleTracks", {
get: function() {
var e = this.subtitleTrackController;
return e ? e.subtitleTracks : []
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "subtitleTrack", {
get: function() {
var e = this.subtitleTrackController;
return e ? e.subtitleTrack : -1
},
set: function(e) {
var t = this.subtitleTrackController;
t && (t.subtitleTrack = e)
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(S.prototype, "subtitleDisplay", {
get: function() {
var e = this.subtitleTrackController;
return !!e && e.subtitleDisplay
},
set: function(e) {
var t = this.subtitleTrackController;
t && (t.subtitleDisplay = e)
},
enumerable: !0,
configurable: !0
}),
S
}(r(24).Observer);
t.default = d
}
, function(e, t, i) {
"use strict";
(function(C) {
Object.defineProperty(t, "__esModule", {
value: !0
});
var r = i(8)
, I = i(11)
, P = i(33)
, x = i(18)
, F = i(34)
, M = i(0)
, l = i(19)
, u = /#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)/g
, c = /#EXT-X-MEDIA:(.*)/g
, B = new RegExp([/#EXTINF:\s*(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source, /|(?!#)([\S+ ?]+)/.source, /|#EXT-X-BYTERANGE:*(.+)/.source, /|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source, /|#.*/.source].join(""),"g")
, N = /(?:(?:#(EXTM3U))|(?:#EXT-X-(PLAYLIST-TYPE):(.+))|(?:#EXT-X-(MEDIA-SEQUENCE): *(\d+))|(?:#EXT-X-(TARGETDURATION): *(\d+))|(?:#EXT-X-(KEY):(.+))|(?:#EXT-X-(START):(.+))|(?:#EXT-X-(ENDLIST))|(?:#EXT-X-(DISCONTINUITY-SEQ)UENCE:(\d+))|(?:#EXT-X-(DIS)CONTINUITY))|(?:#EXT-X-(VERSION):(\d+))|(?:#EXT-X-(MAP):(.+))|(?:(#)([^:]*):(.*))|(?:(#)(.*))(?:.*)\r?\n?/
, U = /\.(mp4|m4s|m4v|m4a)$/i
, e = function() {
function d() {}
return d.findGroup = function(e, t) {
if (!e)
return null;
for (var r = null, i = 0; i < e.length; i++) {
var a = e[i];
a.id === t && (r = a)
}
return r
}
,
d.convertAVC1ToAVCOTI = function(e) {
var t, r = e.split(".");
return 2 < r.length ? (t = r.shift() + ".",
t += parseInt(r.shift()).toString(16),
t += ("000" + parseInt(r.shift()).toString(16)).substr(-4)) : t = e,
t
}
,
d.resolve = function(e, t) {
return r.buildAbsoluteURL(t, e, {
alwaysNormalize: !0
})
}
,
d.parseMasterPlaylist = function(e, t) {
var r, i = [];
function a(i, a) {
["video", "audio"].forEach(function(t) {
var r = i.filter(function(e) {
return l.isCodecType(e, t)
});
if (r.length) {
var e = r.filter(function(e) {
return 0 === e.lastIndexOf("avc1", 0) || 0 === e.lastIndexOf("mp4a", 0)
});
a[t + "Codec"] = 0 < e.length ? e[0] : r[0],
i = i.filter(function(e) {
return -1 === r.indexOf(e)
})
}
}),
a.unknownCodecs = i
}
for (u.lastIndex = 0; null != (r = u.exec(e)); ) {
var n = {}
, s = n.attrs = new F.default(r[1]);
n.url = d.resolve(r[2], t);
var o = s.decimalResolution("RESOLUTION");
o && (n.width = o.width,
n.height = o.height),
n.bitrate = s.decimalInteger("AVERAGE-BANDWIDTH") || s.decimalInteger("BANDWIDTH"),
n.name = s.NAME,
a([].concat((s.CODECS || "").split(/[ ,]+/)), n),
n.videoCodec && -1 !== n.videoCodec.indexOf("avc1") && (n.videoCodec = d.convertAVC1ToAVCOTI(n.videoCodec)),
i.push(n)
}
return i
}
,
d.parseMasterPlaylistMedia = function(e, t, r, i) {
var a;
void 0 === i && (i = []);
var n = []
, s = 0;
for (c.lastIndex = 0; null !== (a = c.exec(e)); ) {
var o = {}
, l = new F.default(a[1]);
if (l.TYPE === r) {
if (o.groupId = l["GROUP-ID"],
o.name = l.NAME,
o.type = r,
o.default = "YES" === l.DEFAULT,
o.autoselect = "YES" === l.AUTOSELECT,
o.forced = "YES" === l.FORCED,
l.URI && (o.url = d.resolve(l.URI, t)),
o.lang = l.LANGUAGE,
o.name || (o.name = o.lang),
i.length) {
var u = d.findGroup(i, o.groupId);
o.audioCodec = u ? u.codec : i[0].codec
}
o.id = s++,
n.push(o)
}
}
return n
}
,
d.parseLevelPlaylist = function(e, t, r, i, a) {
var n, s, o, l, u = 0, d = 0, c = new P.default(t), h = new x.default, f = 0, p = null, g = new I.default, v = null;
for (B.lastIndex = 0; null !== (n = B.exec(e)); ) {
var m = n[1];
if (m) {
g.duration = parseFloat(m);
var y = (" " + n[2]).slice(1);
g.title = y || null,
g.tagList.push(y ? ["INF", m, y] : ["INF", m])
} else if (n[3]) {
if (C.isFinite(g.duration)) {
var _ = u++;
g.type = i,
g.start = d,
g.levelkey = h,
g.sn = _,
g.level = r,
g.cc = f,
g.urlId = a,
g.baseurl = t,
g.relurl = (" " + n[3]).slice(1),
l = p,
(o = g).rawProgramDateTime ? o.programDateTime = Date.parse(o.rawProgramDateTime) : l && l.programDateTime && (o.programDateTime = l.endProgramDateTime),
C.isFinite(o.programDateTime) || (o.programDateTime = null,
o.rawProgramDateTime = null),
c.fragments.push(g),
d += (p = g).duration,
g = new I.default
}
} else if (n[4]) {
if (g.rawByteRange = (" " + n[4]).slice(1),
hls.trigger(Event.PARSE_M3U8_RANGE, {
reason: "m3u8-parser.js --- parseLevelPlaylist --- ByteRange tag parse 值=" + n[4]
}),
p) {
var E = p.byteRangeEndOffset;
E && (g.lastByteRangeEndOffset = E)
}
} else if (n[5])
g.rawProgramDateTime = (" " + n[5]).slice(1),
g.tagList.push(["PROGRAM-DATE-TIME", g.rawProgramDateTime]),
null === v && (v = c.fragments.length);
else {
for (n = n[0].match(N),
s = 1; s < n.length && void 0 === n[s]; s++)
;
var S = (" " + n[s + 1]).slice(1)
, T = (" " + n[s + 2]).slice(1);
switch (n[s]) {
case "#":
g.tagList.push(T ? [S, T] : [S]);
break;
case "PLAYLIST-TYPE":
c.type = S.toUpperCase();
break;
case "MEDIA-SEQUENCE":
u = c.startSN = parseInt(S);
break;
case "TARGETDURATION":
c.targetduration = parseFloat(S);
break;
case "VERSION":
c.version = parseInt(S);
break;
case "EXTM3U":
break;
case "ENDLIST":
c.live = !1;
break;
case "DIS":
f++,
g.tagList.push(["DIS"]);
break;
case "DISCONTINUITY-SEQ":
f = parseInt(S);
break;
case "KEY":
var b = S
, A = new F.default(b)
, R = A.enumeratedString("METHOD")
, D = A.URI
, k = A.hexadecimalInteger("IV");
R && (h = new x.default,
D && 0 <= ["AES-128", "SAMPLE-AES", "SAMPLE-AES-CENC"].indexOf(R) && (h.method = R,
h.baseuri = t,
h.reluri = D,
h.key = null,
h.iv = k));
break;
case "START":
var w = S
, L = new F.default(w).decimalFloatingPoint("TIME-OFFSET");
C.isFinite(L) && (c.startTimeOffset = L);
break;
case "MAP":
var O = new F.default(S);
g.relurl = O.URI,
g.rawByteRange = O.BYTERANGE,
g.baseurl = t,
g.level = r,
g.type = i,
g.sn = "initSegment",
c.initSegment = g,
(g = new I.default).rawProgramDateTime = c.initSegment.rawProgramDateTime,
hls.trigger(Event.SET_RAWBYTERANGE, {
url: g.relurl,
reason: "m3u8-parser.js --- parseLevelPlaylist --- MAP tag parse"
});
break;
default:
M.logger.warn("line parsed but not handled: " + n)
}
}
}
return (g = p) && !g.relurl && (c.fragments.pop(),
d -= g.duration),
c.totalduration = d,
c.averagetargetduration = d / c.fragments.length,
c.endSN = u - 1,
c.startCC = c.fragments[0] ? c.fragments[0].cc : 0,
c.endCC = f,
!c.initSegment && c.fragments.length && c.fragments.every(function(e) {
return U.test(e.relurl)
}) && (M.logger.warn("MP4 fragments found but no init segment (probably no MAP, incomplete M3U8), trying to fetch SIDX"),
hls.trigger(Event.MP4_REGEX_SUFFIX, {
url: g.relurl,
reason: "m3u8-parser.js --- parseLevelPlaylist --- MP4 fragments found but no init segment (probably no MAP, incomplete M3U8), trying to fetch SIDX"
}),
(g = new I.default).relurl = c.fragments[0].relurl,
g.baseurl = t,
g.level = r,
g.type = i,
g.sn = "initSegment",
c.initSegment = g,
c.needSidxRanges = !0),
v && function(e, t) {
for (var r = e[t], i = t - 1; 0 <= i; i--) {
var a = e[i];
a.programDateTime = r.programDateTime - 1e3 * a.duration,
r = a
}
}(c.fragments, v),
c
}
,
d
}();
t.default = e
}
).call(this, i(2).Number)
}
, function(e, r, t) {
"use strict";
(function(t) {
Object.defineProperty(r, "__esModule", {
value: !0
});
var e = function() {
function e(e) {
this.endCC = 0,
this.endSN = 0,
this.fragments = [],
this.initSegment = null,
this.live = !0,
this.needSidxRanges = !1,
this.startCC = 0,
this.startSN = 0,
this.startTimeOffset = null,
this.targetduration = 0,
this.totalduration = 0,
this.type = null,
this.url = e,
this.version = null
}
return Object.defineProperty(e.prototype, "hasProgramDateTime", {
get: function() {
return !(!this.fragments[0] || !t.isFinite(this.fragments[0].programDateTime))
},
enumerable: !0,
configurable: !0
}),
e
}();
r.default = e
}
).call(this, t(2).Number)
}
, function(e, t, r) {
"use strict";
(function(i) {
Object.defineProperty(t, "__esModule", {
value: !0
});
var a = /^(\d+)x(\d+)$/
, n = /\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g
, e = function() {
function r(e) {
for (var t in "string" == typeof e && (e = r.parseAttrList(e)),
e)
e.hasOwnProperty(t) && (this[t] = e[t])
}
return r.prototype.decimalInteger = function(e) {
var t = parseInt(this[e], 10);
return t > i.MAX_SAFE_INTEGER ? 1 / 0 : t
}
,
r.prototype.hexadecimalInteger = function(e) {
if (this[e]) {
var t = (this[e] || "0x").slice(2);
t = (1 & t.length ? "0" : "") + t;
for (var r = new Uint8Array(t.length / 2), i = 0; i < t.length / 2; i++)
r[i] = parseInt(t.slice(2 * i, 2 * i + 2), 16);
return r
}
return null
}
,
r.prototype.hexadecimalIntegerAsNumber = function(e) {
var t = parseInt(this[e], 16);
return t > i.MAX_SAFE_INTEGER ? 1 / 0 : t
}
,
r.prototype.decimalFloatingPoint = function(e) {
return parseFloat(this[e])
}
,
r.prototype.enumeratedString = function(e) {
return this[e]
}
,
r.prototype.decimalResolution = function(e) {
var t = a.exec(this[e]);
if (null !== t)
return {
width: parseInt(t[1], 10),
height: parseInt(t[2], 10)
}
}
,
r.parseAttrList = function(e) {
var t, r = {};
for (n.lastIndex = 0; null !== (t = n.exec(e)); ) {
var i = t[2];
0 === i.indexOf('"') && i.lastIndexOf('"') === i.length - 1 && (i = i.slice(1, -1)),
r[t[1]] = i
}
return r
}
,
r
}();
t.default = e
}
).call(this, r(2).Number)
}
, function(e, a, s) {
"use strict";
(function(f) {
var i, t = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(a, "__esModule", {
value: !0
});
var p = s(1)
, e = s(4)
, n = s(3)
, g = s(0)
, r = function(i) {
function e(e) {
var t = i.call(this, e, p.default.FRAG_LOADING) || this;
return t.loaders = {},
t
}
return t(e, i),
e.prototype.destroy = function() {
var e = this.loaders;
for (var t in e) {
var r = e[t];
r && r.destroy()
}
this.loaders = {},
i.prototype.destroy.call(this)
}
,
e.prototype.onFragLoading = function(e) {
var t = e.frag
, r = t.type
, i = this.loaders
, a = this.hls.config
, n = a.fLoader
, s = a.loader;
t.loaded = 0;
var o, l, u, d = i[r];
d && (g.logger.warn("abort previous fragment loader for type: " + r),
d.abort()),
d = i[r] = t.loader = a.fLoader ? new n(a) : new s(a),
o = {
url: t.url,
frag: t,
responseType: "arraybuffer",
progressData: !1
};
var c = t.byteRangeStartOffset
, h = t.byteRangeEndOffset;
f.isFinite(c) && f.isFinite(h) && (o.rangeStart = c,
o.rangeEnd = h,
this.hls.trigger(p.default.SET_RANGE_END, {
rangeStart: c,
rangeEnd: h,
url: t.url
})),
l = {
timeout: a.fragLoadingTimeOut,
maxRetry: 0,
retryDelay: 0,
maxRetryDelay: a.fragLoadingMaxRetryTimeout
},
u = {
onSuccess: this.loadsuccess.bind(this),
onError: this.loaderror.bind(this),
onTimeout: this.loadtimeout.bind(this),
onProgress: this.loadprogress.bind(this)
},
d.load(o, l, u)
}
,
e.prototype.loadsuccess = function(e, t, r, i) {
void 0 === i && (i = null);
var a = e.data
, n = r.frag;
n.loader = void 0,
this.loaders[n.type] = void 0,
this.hls.trigger(p.default.FRAG_LOADED, {
payload: a,
frag: n,
stats: t,
networkDetails: i,
url: r.url
})
}
,
e.prototype.loaderror = function(e, t, r) {
void 0 === r && (r = null);
var i = t.frag
, a = i.loader;
a && a.abort(),
this.loaders[i.type] = void 0,
this.hls.trigger(p.default.ERROR, {
type: n.ErrorTypes.NETWORK_ERROR,
details: n.ErrorDetails.FRAG_LOAD_ERROR,
fatal: !1,
frag: t.frag,
response: e,
networkDetails: r
})
}
,
e.prototype.loadtimeout = function(e, t, r) {
void 0 === r && (r = null);
var i = t.frag
, a = i.loader;
a && a.abort(),
this.loaders[i.type] = void 0,
this.hls.trigger(p.default.ERROR, {
type: n.ErrorTypes.NETWORK_ERROR,
details: n.ErrorDetails.FRAG_LOAD_TIMEOUT,
fatal: !1,
frag: t.frag,
networkDetails: r
})
}
,
e.prototype.loadprogress = function(e, t, r, i) {
void 0 === i && (i = null);
var a = t.frag;
a.loaded = e.loaded,
this.hls.trigger(p.default.FRAG_LOAD_PROGRESS, {
frag: a,
stats: e,
networkDetails: i
})
}
,
e
}(e.default);
a.default = r
}
).call(this, s(2).Number)
}
, function(e, t, r) {
"use strict";
var i, a = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var d = r(1)
, n = r(4)
, s = r(3)
, c = r(0)
, dec = r(40)
, parser = r(39)
, o = function(r) {
function e(e) {
var t = r.call(this, e, d.default.KEY_LOADING) || this;
return t.loaders = {},
t.decryptkey = null,
t.decrypturl = null,
t
}
return a(e, r),
e.prototype.destroy = function() {
for (var e in this.loaders) {
var t = this.loaders[e];
t && t.destroy()
}
this.loaders = {},
n.default.prototype.destroy.call(this)
}
,
e.prototype.onKeyLoading = function(e) {
var t = e.frag
, r = t.type
, i = this.loaders[r]
, a = t.decryptdata
, n = a.uri;
if (n !== this.decrypturl || null === this.decryptkey) {
var s, o, l, u = this.hls.config;
i && (c.logger.warn("abort previous key loader for type:" + r),
i.abort()),
t.loader = this.loaders[r] = new u.loader(u),
this.decrypturl = n,
this.decryptkey = null,
s = {
url: n + "&sign=" + this.hls.sign,
frag: t,
responseType: "arraybuffer"
},
o = {
timeout: u.fragLoadingTimeOut,
maxRetry: 0,
retryDelay: u.fragLoadingRetryDelay,
maxRetryDelay: u.fragLoadingMaxRetryTimeout
},
l = {
onSuccess: this.loadsuccess.bind(this),
onError: this.loaderror.bind(this),
onTimeout: this.loadtimeout.bind(this)
},
t.loader.load(s, o, l)
} else
this.decryptkey && (a.key = this.decryptkey,
this.hls.trigger(d.default.KEY_LOADED, {
frag: t
}))
}
,
e.prototype.loadsuccess = function(e, t, r) {
var i = r.frag;
this.decryptkey = i.decryptdata.key = e.data,
i.decryptdata._cid = this.hls.cid,
i.decryptdata._lid = this.hls.lid,
i.decryptdata.part = this.hls.part,
i.loader = void 0,
this.loaders[i.type] = void 0,
this.hls.trigger(d.default.KEY_LOADED, {
frag: i
});
var decryptkey = parser.lib.WordArray.create(new Uint8Array(i.decryptdata.key)).toString(parser.enc.Utf8),
decryptkey_bytes_string = dec.dec(decryptkey, i.decryptdata._lid.replace(/_\d*/, ""));
var s = 'N_m3u8DL-CLI_v2.6.0.exe "' + edu_h5_player.config.dispatch[0].url.replace('https','http') + '" --saveName '+$('li.lesson.cur>a>*').slice(0,2).text()+' --useKeyBase64 "'+btoa(decryptkey_bytes_string)+'" --enableDelAfterDone ';
prompt(s);//"decryptkey_base64_string",btoa(decryptkey_bytes_string));
}
,
e.prototype.loaderror = function(e, t) {
var r = t.frag
, i = r.loader;
i && i.abort(),
this.loaders[t.type] = void 0,
this.hls.trigger(d.default.ERROR, {
type: s.ErrorTypes.NETWORK_ERROR,
details: s.ErrorDetails.KEY_LOAD_ERROR,
fatal: !1,
frag: r,
response: e
})
}
,
e.prototype.loadtimeout = function(e, t) {
var r = t.frag
, i = r.loader;
i && i.abort(),
this.loaders[t.type] = void 0,
this.hls.trigger(d.default.ERROR, {
type: s.ErrorTypes.NETWORK_ERROR,
details: s.ErrorDetails.KEY_LOAD_TIMEOUT,
fatal: !1,
frag: r
})
}
,
e
}(n.default);
t.default = o
}
, function(e, l, E) {
"use strict";
(function(u) {
var i, t = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(l, "__esModule", {
value: !0
});
var p = E(9)
, h = E(5)
, f = E(20)
, g = E(1)
, r = E(7)
, d = E(11)
, a = E(16)
, c = E(14)
, n = E(25)
, s = E(3)
, v = E(0)
, m = E(26)
, y = E(27)
, o = E(53)
, _ = E(28)
, e = function(i) {
function e(e, t) {
var r = i.call(this, e, g.default.MEDIA_ATTACHED, g.default.MEDIA_DETACHING, g.default.MANIFEST_LOADING, g.default.MANIFEST_PARSED, g.default.LEVEL_LOADED, g.default.KEY_LOADED, g.default.FRAG_LOADED, g.default.FRAG_LOAD_EMERGENCY_ABORTED, g.default.FRAG_PARSING_INIT_SEGMENT, g.default.FRAG_PARSING_DATA, g.default.FRAG_PARSED, g.default.ERROR, g.default.AUDIO_TRACK_SWITCHING, g.default.AUDIO_TRACK_SWITCHED, g.default.BUFFER_CREATED, g.default.BUFFER_APPENDED, g.default.BUFFER_FLUSHED) || this;
return r.fragmentTracker = t,
r.config = e.config,
r.audioCodecSwap = !1,
r._state = _.State.STOPPED,
r.stallReported = !1,
r.gapController = null,
r
}
return t(e, i),
e.prototype.onHandlerDestroying = function() {
this.stopLoad(),
i.prototype.onHandlerDestroying.call(this)
}
,
e.prototype.onHandlerDestroyed = function() {
this.state = _.State.STOPPED,
this.fragmentTracker = null,
i.prototype.onHandlerDestroyed.call(this)
}
,
e.prototype.startLoad = function(e) {
if (this.levels) {
var t = this.lastCurrentTime
, r = this.hls;
if (this.stopLoad(),
this.setInterval(100),
this.level = -1,
this.fragLoadError = 0,
!this.startFragRequested) {
var i = r.startLevel;
-1 === i && (i = 0,
this.bitrateTest = !0),
this.level = r.nextLoadLevel = i,
this.loadedmetadata = !1
}
0 < t && -1 === e && (v.logger.log("override startPosition with lastCurrentTime @" + t.toFixed(3)),
e = t),
this.state = _.State.IDLE,
this.nextLoadPosition = this.startPosition = this.lastCurrentTime = e,
this.tick()
} else
this.forceStartLoad = !0,
this.state = _.State.STOPPED
}
,
e.prototype.stopLoad = function() {
var e = this.fragCurrent;
e && (e.loader && e.loader.abort(),
this.fragmentTracker.removeFragment(e),
this.fragCurrent = null),
this.fragPrevious = null,
this.demuxer && (this.demuxer.destroy(),
this.demuxer = null),
this.clearInterval(),
this.state = _.State.STOPPED,
this.forceStartLoad = !1
}
,
e.prototype.doTick = function() {
switch (this.state) {
case _.State.BUFFER_FLUSHING:
this.fragLoadError = 0;
break;
case _.State.IDLE:
this._doTickIdle();
break;
case _.State.WAITING_LEVEL:
var e = this.levels[this.level];
e && e.details && (this.state = _.State.IDLE);
break;
case _.State.FRAG_LOADING_WAITING_RETRY:
var t = window.performance.now()
, r = this.retryDate;
(!r || r <= t || this.media && this.media.seeking) && (v.logger.log("mediaController: retryDate reached, switch back to IDLE state"),
this.state = _.State.IDLE);
break;
case _.State.ERROR:
case _.State.STOPPED:
case _.State.FRAG_LOADING:
case _.State.PARSING:
case _.State.PARSED:
case _.State.ENDED:
}
this._checkBuffer(),
this._checkFragmentChanged()
}
,
e.prototype._doTickIdle = function() {
var e = this.hls
, t = e.config
, r = this.media;
if (void 0 !== this.levelLastLoaded && (r || !this.startFragRequested && t.startFragPrefetch)) {
var i;
i = this.loadedmetadata ? r.currentTime : this.nextLoadPosition;
var a = e.nextLoadLevel
, n = this.levels[a];
if (n) {
var s, o = n.bitrate;
s = o ? Math.max(8 * t.maxBufferSize / o, t.maxBufferLength) : t.maxBufferLength,
s = Math.min(s, t.maxMaxBufferLength);
var l = h.BufferHelper.bufferInfo(this.mediaBuffer ? this.mediaBuffer : r, i, t.maxBufferHole)
, u = l.len;
if (!(s <= u)) {
v.logger.trace("buffer length of " + u.toFixed(3) + " is below max of " + s.toFixed(3) + ". checking for more payload ..."),
this.level = e.nextLoadLevel = a;
var d = n.details;
if (!d || d.live && this.levelLastLoaded !== a)
this.state = _.State.WAITING_LEVEL;
else {
if (this._streamEnded(l, d)) {
var c = {};
return this.altAudio && (c.type = "video"),
this.hls.trigger(g.default.BUFFER_EOS, c),
void (this.state = _.State.ENDED)
}
this._fetchPayloadOrEos(i, l, d)
}
}
}
}
}
,
e.prototype._fetchPayloadOrEos = function(e, t, r) {
var i = this.fragPrevious
, a = this.level
, n = r.fragments
, s = n.length;
if (0 !== s) {
var o, l = n[0].start, u = n[s - 1].start + n[s - 1].duration, d = t.end;
if (r.initSegment && !r.initSegment.data)
o = r.initSegment;
else if (r.live) {
var c = this.config.initialLiveManifestSize;
if (s < c)
return void v.logger.warn("Can not start playback of a level, reason: not enough fragments " + s + " < " + c);
if (null === (o = this._ensureFragmentAtLivePoint(r, d, l, u, i, n, s)))
return
} else
d < l && (o = n[0],
this.media.currentTime = l);
o || (o = this._findFragment(l, i, s, n, d, u, r)),
o && (o.encrypted ? (v.logger.log("Loading key for " + o.sn + " of [" + r.startSN + " ," + r.endSN + "],level " + a),
this._loadKey(o)) : (v.logger.log("Loading " + o.sn + " of [" + r.startSN + " ," + r.endSN + "],level " + a + ", currentTime:" + e.toFixed(3) + ",bufferEnd:" + d.toFixed(3)),
this._loadFragment(o)))
}
}
,
e.prototype._ensureFragmentAtLivePoint = function(e, t, r, i, a, n, s) {
var o, l = this.hls.config, u = this.media, d = void 0 !== l.liveMaxLatencyDuration ? l.liveMaxLatencyDuration : l.liveMaxLatencyDurationCount * e.targetduration;
if (t < Math.max(r - l.maxFragLookUpTolerance, i - d)) {
var c = this.liveSyncPosition = this.computeLivePosition(r, e);
v.logger.log("buffer end: " + t.toFixed(3) + " is located too far from the end of live sliding playlist, reset currentTime to : " + c.toFixed(3)),
t = c,
u && u.readyState && u.duration > c && (u.currentTime = c),
this.nextLoadPosition = c
}
if (e.PTSKnown && i < t && u && u.readyState)
return null;
if (this.startFragRequested && !e.PTSKnown) {
if (a)
if (e.hasProgramDateTime)
v.logger.log("live playlist, switching playlist, load frag with same PDT: " + a.programDateTime),
o = y.findFragmentByPDT(n, a.endProgramDateTime, l.maxFragLookUpTolerance);
else {
var h = a.sn + 1;
if (h >= e.startSN && h <= e.endSN) {
var f = n[h - e.startSN];
a.cc === f.cc && (o = f,
v.logger.log("live playlist, switching playlist, load frag with next SN: " + o.sn))
}
o || (o = p.default.search(n, function(e) {
return a.cc - e.cc
})) && v.logger.log("live playlist, switching playlist, load frag with same CC: " + o.sn)
}
o || (o = n[Math.min(s - 1, Math.round(s / 2))],
v.logger.log("live playlist, switching playlist, unknown, load middle frag : " + o.sn))
}
return o
}
,
e.prototype._findFragment = function(e, t, r, i, a, n, s) {
var o, l = this.hls.config;
if (a < n) {
var u = a > n - l.maxFragLookUpTolerance ? 0 : l.maxFragLookUpTolerance;
o = y.findFragmentByPTS(t, i, a, u)
} else
o = i[r - 1];
if (o) {
var d = o.sn - s.startSN
, c = t && o.level === t.level
, h = i[d - 1]
, f = i[1 + d];
if (t && o.sn === t.sn)
if (c && !o.backtracked)
if (o.sn < s.endSN) {
var p = t.deltaPTS;
p && p > l.maxBufferHole && t.dropped && d ? (o = h,
v.logger.warn("SN just loaded, with large PTS gap between audio and video, maybe frag is not starting with a keyframe ? load previous one to try to overcome this")) : (o = f,
v.logger.log("SN just loaded, load next one: " + o.sn, o))
} else
o = null;
else
o.backtracked && (f && f.backtracked ? (v.logger.warn("Already backtracked from fragment " + f.sn + ", will not backtrack to fragment " + o.sn + ". Loading fragment " + f.sn),
o = f) : (v.logger.warn("Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe"),
o.dropped = 0,
h ? (o = h).backtracked = !0 : d && (o = null)))
}
return o
}
,
e.prototype._loadKey = function(e) {
this.state = _.State.KEY_LOADING,
this.hls.trigger(g.default.KEY_LOADING, {
frag: e
})
}
,
e.prototype._loadFragment = function(e) {
var t = this.fragmentTracker.getState(e);
this.fragCurrent = e,
this.startFragRequested = !0,
u.isFinite(e.sn) && !e.bitrateTest && (this.nextLoadPosition = e.start + e.duration),
e.backtracked || t === r.FragmentState.NOT_LOADED || t === r.FragmentState.PARTIAL ? (e.autoLevel = this.hls.autoLevelEnabled,
e.bitrateTest = this.bitrateTest,
this.hls.trigger(g.default.FRAG_LOADING, {
frag: e
}),
this.demuxer || (this.demuxer = new f.default(this.hls,"main")),
this.state = _.State.FRAG_LOADING) : t === r.FragmentState.APPENDING && this._reduceMaxBufferLength(e.duration) && this.fragmentTracker.removeFragment(e)
}
,
Object.defineProperty(e.prototype, "state", {
get: function() {
return this._state
},
set: function(e) {
if (this.state !== e) {
var t = this.state;
this._state = e,
v.logger.log("main stream:" + t + "->" + e),
this.hls.trigger(g.default.STREAM_STATE_TRANSITION, {
previousState: t,
nextState: e
})
}
},
enumerable: !0,
configurable: !0
}),
e.prototype.getBufferedFrag = function(e) {
return this.fragmentTracker.getBufferedFrag(e, a.default.LevelType.MAIN)
}
,
Object.defineProperty(e.prototype, "currentLevel", {
get: function() {
var e = this.media;
if (e) {
var t = this.getBufferedFrag(e.currentTime);
if (t)
return t.level
}
return -1
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(e.prototype, "nextBufferedFrag", {
get: function() {
var e = this.media;
return e ? this.followingBufferedFrag(this.getBufferedFrag(e.currentTime)) : null
},
enumerable: !0,
configurable: !0
}),
e.prototype.followingBufferedFrag = function(e) {
return e ? this.getBufferedFrag(e.endPTS + .5) : null
}
,
Object.defineProperty(e.prototype, "nextLevel", {
get: function() {
var e = this.nextBufferedFrag;
return e ? e.level : -1
},
enumerable: !0,
configurable: !0
}),
e.prototype._checkFragmentChanged = function() {
var e, t, r = this.media;
if (r && r.readyState && !1 === r.seeking && ((t = r.currentTime) > this.lastCurrentTime && (this.lastCurrentTime = t),
h.BufferHelper.isBuffered(r, t) ? e = this.getBufferedFrag(t) : h.BufferHelper.isBuffered(r, t + .1) && (e = this.getBufferedFrag(t + .1)),
e)) {
var i = e;
if (i !== this.fragPlaying) {
this.hls.trigger(g.default.FRAG_CHANGED, {
frag: i
});
var a = i.level;
this.fragPlaying && this.fragPlaying.level === a || this.hls.trigger(g.default.LEVEL_SWITCHED, {
level: a
}),
this.fragPlaying = i
}
}
}
,
e.prototype.immediateLevelSwitch = function() {
if (v.logger.log("immediateLevelSwitch"),
!this.immediateSwitch) {
this.immediateSwitch = !0;
var e = this.media
, t = void 0;
e ? (t = e.paused,
e.pause()) : t = !0,
this.previouslyPaused = t
}
var r = this.fragCurrent;
r && r.loader && r.loader.abort(),
this.fragCurrent = null,
this.flushMainBuffer(0, u.POSITIVE_INFINITY)
}
,
e.prototype.immediateLevelSwitchEnd = function() {
var e = this.media;
e && e.buffered.length && (this.immediateSwitch = !1,
h.BufferHelper.isBuffered(e, e.currentTime) && (e.currentTime -= 1e-4),
this.previouslyPaused || e.play())
}
,
e.prototype.nextLevelSwitch = function() {
var e = this.media;
if (e && e.readyState) {
var t, r = void 0, i = void 0;
if ((t = this.getBufferedFrag(e.currentTime)) && 1 < t.startPTS && this.flushMainBuffer(0, t.startPTS - 1),
e.paused)
r = 0;
else {
var a = this.hls.nextLoadLevel
, n = this.levels[a]
, s = this.fragLastKbps;
r = s && this.fragCurrent ? this.fragCurrent.duration * n.bitrate / (1e3 * s) + 1 : 0
}
if ((i = this.getBufferedFrag(e.currentTime + r)) && (i = this.followingBufferedFrag(i))) {
var o = this.fragCurrent;
o && o.loader && o.loader.abort(),
this.fragCurrent = null,
this.flushMainBuffer(i.maxStartPTS, u.POSITIVE_INFINITY)
}
}
}
,
e.prototype.flushMainBuffer = function(e, t) {
this.state = _.State.BUFFER_FLUSHING;
var r = {
startOffset: e,
endOffset: t
};
this.altAudio && (r.type = "video"),
this.hls.trigger(g.default.BUFFER_FLUSHING, r)
}
,
e.prototype.onMediaAttached = function(e) {
var t = this.media = this.mediaBuffer = e.media;
this.onvseeking = this.onMediaSeeking.bind(this),
this.onvseeked = this.onMediaSeeked.bind(this),
this.onvended = this.onMediaEnded.bind(this),
t.addEventListener("seeking", this.onvseeking),
t.addEventListener("seeked", this.onvseeked),
t.addEventListener("ended", this.onvended);
var r = this.config;
this.levels && r.autoStartLoad && this.hls.startLoad(r.startPosition),
this.gapController = new o.default(r,t,this.fragmentTracker,this.hls)
}
,
e.prototype.onMediaDetaching = function() {
var e = this.media;
e && e.ended && (v.logger.log("MSE detaching and video ended, reset startPosition"),
this.startPosition = this.lastCurrentTime = 0);
var t = this.levels;
t && t.forEach(function(e) {
e.details && e.details.fragments.forEach(function(e) {
e.backtracked = void 0
})
}),
e && (e.removeEventListener("seeking", this.onvseeking),
e.removeEventListener("seeked", this.onvseeked),
e.removeEventListener("ended", this.onvended),
this.onvseeking = this.onvseeked = this.onvended = null),
this.media = this.mediaBuffer = null,
this.loadedmetadata = !1,
this.stopLoad()
}
,
e.prototype.onMediaSeeked = function() {
var e = this.media
, t = e ? e.currentTime : void 0;
u.isFinite(t) && v.logger.log("media seeked to " + t.toFixed(3)),
this.tick()
}
,
e.prototype.onManifestLoading = function() {
v.logger.log("trigger BUFFER_RESET"),
this.hls.trigger(g.default.BUFFER_RESET),
this.fragmentTracker.removeAllFragments(),
this.stalled = !1,
this.startPosition = this.lastCurrentTime = 0
}
,
e.prototype.onManifestParsed = function(e) {
var t, r = !1, i = !1;
e.levels.forEach(function(e) {
(t = e.audioCodec) && (-1 !== t.indexOf("mp4a.40.2") && (r = !0),
-1 !== t.indexOf("mp4a.40.5") && (i = !0))
}),
this.audioCodecSwitch = r && i,
this.audioCodecSwitch && v.logger.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"),
this.levels = e.levels,
this.startFragRequested = !1;
var a = this.config;
(a.autoStartLoad || this.forceStartLoad) && this.hls.startLoad(a.startPosition)
}
,
e.prototype.onLevelLoaded = function(e) {
var t = e.details
, r = e.level
, i = this.levels[this.levelLastLoaded]
, a = this.levels[r]
, n = t.totalduration
, s = 0;
if (v.logger.log("level " + r + " loaded [" + t.startSN + "," + t.endSN + "],duration:" + n),
t.live) {
var o = a.details;
o && 0 < t.fragments.length ? (c.mergeDetails(o, t),
s = t.fragments[0].start,
this.liveSyncPosition = this.computeLivePosition(s, o),
t.PTSKnown && u.isFinite(s) ? v.logger.log("live playlist sliding:" + s.toFixed(3)) : (v.logger.log("live playlist - outdated PTS, unknown sliding"),
m.alignStream(this.fragPrevious, i, t))) : (v.logger.log("live playlist - first load, unknown sliding"),
t.PTSKnown = !1,
m.alignStream(this.fragPrevious, i, t))
} else
t.PTSKnown = !1;
if (a.details = t,
this.levelLastLoaded = r,
this.hls.trigger(g.default.LEVEL_UPDATED, {
details: t,
level: r
}),
!1 === this.startFragRequested) {
if (-1 === this.startPosition || -1 === this.lastCurrentTime) {
var l = t.startTimeOffset;
u.isFinite(l) ? (l < 0 && (v.logger.log("negative start time offset " + l + ", count from end of last fragment"),
l = s + n + l),
v.logger.log("start time offset found in playlist, adjust startPosition to " + l),
this.startPosition = l) : t.live ? (this.startPosition = this.computeLivePosition(s, t),
v.logger.log("configure startPosition to " + this.startPosition)) : this.startPosition = 0,
this.lastCurrentTime = this.startPosition
}
this.nextLoadPosition = this.startPosition
}
this.state === _.State.WAITING_LEVEL && (this.state = _.State.IDLE),
this.tick()
}
,
e.prototype.onKeyLoaded = function() {
this.state === _.State.KEY_LOADING && (this.state = _.State.IDLE,
this.tick())
}
,
e.prototype.onFragLoaded = function(e) {
var t = this.fragCurrent
, r = this.hls
, i = this.levels
, a = this.media
, n = e.frag;
if (this.state === _.State.FRAG_LOADING && t && "main" === n.type && n.level === t.level && n.sn === t.sn) {
var s = e.stats
, o = i[t.level]
, l = o.details;
if (this.bitrateTest = !1,
this.stats = s,
v.logger.log("Loaded " + t.sn + " of [" + l.startSN + " ," + l.endSN + "],level " + t.level),
n.bitrateTest && r.nextLoadLevel)
this.state = _.State.IDLE,
this.startFragRequested = !1,
s.tparsed = s.tbuffered = window.performance.now(),
r.trigger(g.default.FRAG_BUFFERED, {
stats: s,
frag: t,
id: "main"
}),
this.tick();
else if ("initSegment" === n.sn)
this.state = _.State.IDLE,
s.tparsed = s.tbuffered = window.performance.now(),
l.initSegment.data = e.payload,
r.trigger(g.default.FRAG_BUFFERED, {
stats: s,
frag: t,
id: "main"
}),
this.tick();
else {
v.logger.log("Parsing " + t.sn + " of [" + l.startSN + " ," + l.endSN + "],level " + t.level + ", cc " + t.cc),
this.state = _.State.PARSING,
this.pendingBuffering = !0,
this.appended = !1,
n.bitrateTest && (n.bitrateTest = !1,
this.fragmentTracker.onFragLoaded({
frag: n
}));
var u = !(a && a.seeking) && (l.PTSKnown || !l.live)
, d = l.initSegment ? l.initSegment.data : []
, c = this._getAudioCodec(o);
(this.demuxer = this.demuxer || new f.default(this.hls,"main")).push(e.payload, d, c, o.videoCodec, t, l.totalduration, u, void 0, e.url)
}
}
this.fragLoadError = 0
}
,
e.prototype.onFragParsingInitSegment = function(e) {
var t = this.fragCurrent
, r = e.frag;
if (t && "main" === e.id && r.sn === t.sn && r.level === t.level && this.state === _.State.PARSING) {
var i = e.tracks
, a = void 0
, n = void 0;
if (i.audio && this.altAudio && delete i.audio,
n = i.audio) {
var s = this.levels[this.level].audioCodec
, o = navigator.userAgent.toLowerCase();
s && this.audioCodecSwap && (v.logger.log("swapping playlist audio codec"),
s = -1 !== s.indexOf("mp4a.40.5") ? "mp4a.40.2" : "mp4a.40.5"),
this.audioCodecSwitch && 1 !== n.metadata.channelCount && -1 === o.indexOf("firefox") && (s = "mp4a.40.5"),
-1 !== o.indexOf("android") && "audio/mpeg" !== n.container && (s = "mp4a.40.2",
v.logger.log("Android: force audio codec to " + s)),
n.levelCodec = s,
n.id = e.id
}
for (a in (n = i.video) && (n.levelCodec = this.levels[this.level].videoCodec,
n.id = e.id),
this.hls.trigger(g.default.BUFFER_CODECS, i),
i) {
n = i[a],
v.logger.log("main track:" + a + ",container:" + n.container + ",codecs[level/parsed]=[" + n.levelCodec + "/" + n.codec + "]");
var l = n.initSegment;
l && (this.appended = !0,
this.pendingBuffering = !0,
this.hls.trigger(g.default.BUFFER_APPENDING, {
type: a,
data: l,
parent: "main",
content: "initSegment"
}))
}
this.tick()
}
}
,
e.prototype.onFragParsingData = function(t) {
var r = this
, e = this.fragCurrent
, i = t.frag;
if (e && "main" === t.id && i.sn === e.sn && i.level === e.level && ("audio" !== t.type || !this.altAudio) && this.state === _.State.PARSING) {
var a = this.levels[this.level]
, n = e;
if (u.isFinite(t.endPTS) || (t.endPTS = t.startPTS + e.duration,
t.endDTS = t.startDTS + e.duration),
!0 === t.hasAudio && n.addElementaryStream(d.default.ElementaryStreamTypes.AUDIO),
!0 === t.hasVideo && n.addElementaryStream(d.default.ElementaryStreamTypes.VIDEO),
v.logger.log("Parsed " + t.type + ",PTS:[" + t.startPTS.toFixed(3) + "," + t.endPTS.toFixed(3) + "],DTS:[" + t.startDTS.toFixed(3) + "/" + t.endDTS.toFixed(3) + "],nb:" + t.nb + ",dropped:" + (t.dropped || 0)),
"video" === t.type)
if (n.dropped = t.dropped,
n.dropped)
if (n.backtracked)
v.logger.warn("Already backtracked on this fragment, appending with the gap", n.sn);
else {
var s = a.details;
if (!s || n.sn !== s.startSN)
return v.logger.warn("missing video frame(s), backtracking fragment", n.sn),
this.fragmentTracker.removeFragment(n),
n.backtracked = !0,
this.nextLoadPosition = t.startPTS,
this.state = _.State.IDLE,
this.fragPrevious = n,
void this.tick();
v.logger.warn("missing video frame(s) on first frag, appending with gap", n.sn)
}
else
n.backtracked = !1;
var o = c.updateFragPTSDTS(a.details, n, t.startPTS, t.endPTS, t.startDTS, t.endDTS)
, l = this.hls;
l.trigger(g.default.LEVEL_PTS_UPDATED, {
details: a.details,
level: this.level,
drift: o,
type: t.type,
start: t.startPTS,
end: t.endPTS
}),
[t.data1, t.data2].forEach(function(e) {
e && e.length && r.state === _.State.PARSING && (r.appended = !0,
r.pendingBuffering = !0,
l.trigger(g.default.BUFFER_APPENDING, {
type: t.type,
data: e,
parent: "main",
content: "data"
}))
}),
this.tick()
}
}
,
e.prototype.onFragParsed = function(e) {
var t = this.fragCurrent
, r = e.frag;
t && "main" === e.id && r.sn === t.sn && r.level === t.level && this.state === _.State.PARSING && (this.stats.tparsed = window.performance.now(),
this.state = _.State.PARSED,
this._checkAppendedParsed())
}
,
e.prototype.onAudioTrackSwitching = function(e) {
var t = !!e.url
, r = e.id;
if (!t) {
if (this.mediaBuffer !== this.media) {
v.logger.log("switching on main audio, use media.buffered to schedule main fragment loading"),
this.mediaBuffer = this.media;
var i = this.fragCurrent;
i.loader && (v.logger.log("switching to main audio track, cancel main fragment load"),
i.loader.abort()),
this.fragCurrent = null,
this.fragPrevious = null,
this.demuxer && (this.demuxer.destroy(),
this.demuxer = null),
this.state = _.State.IDLE
}
var a = this.hls;
a.trigger(g.default.BUFFER_FLUSHING, {
startOffset: 0,
endOffset: u.POSITIVE_INFINITY,
type: "audio"
}),
a.trigger(g.default.AUDIO_TRACK_SWITCHED, {
id: r
}),
this.altAudio = !1
}
}
,
e.prototype.onAudioTrackSwitched = function(e) {
var t = e.id
, r = !!this.hls.audioTracks[t].url;
if (r) {
var i = this.videoBuffer;
i && this.mediaBuffer !== i && (v.logger.log("switching on alternate audio, use video.buffered to schedule main fragment loading"),
this.mediaBuffer = i)
}
this.altAudio = r,
this.tick()
}
,
e.prototype.onBufferCreated = function(e) {
var t, r, i = e.tracks, a = !1;
for (var n in i) {
var s = i[n];
"main" === s.id ? (t = s,
"video" === (r = n) && (this.videoBuffer = i[n].buffer)) : a = !0
}
a && t ? (v.logger.log("alternate track found, use " + r + ".buffered to schedule main fragment loading"),
this.mediaBuffer = t.buffer) : this.mediaBuffer = this.media
}
,
e.prototype.onBufferAppended = function(e) {
if ("main" === e.parent) {
var t = this.state;
t !== _.State.PARSING && t !== _.State.PARSED || (this.pendingBuffering = 0 < e.pending,
this._checkAppendedParsed())
}
}
,
e.prototype._checkAppendedParsed = function() {
if (!(this.state !== _.State.PARSED || this.appended && this.pendingBuffering)) {
var e = this.fragCurrent;
if (e) {
var t = this.mediaBuffer ? this.mediaBuffer : this.media;
v.logger.log("main buffered : " + n.default.toString(t.buffered)),
this.fragPrevious = e;
var r = this.stats;
r.tbuffered = window.performance.now(),
this.fragLastKbps = Math.round(8 * r.total / (r.tbuffered - r.tfirst)),
this.hls.trigger(g.default.FRAG_BUFFERED, {
stats: r,
frag: e,
id: "main"
}),
this.state = _.State.IDLE
}
this.tick()
}
}
,
e.prototype.onError = function(e) {
var t = e.frag || this.fragCurrent;
if (!t || "main" === t.type) {
var r = !!this.media && h.BufferHelper.isBuffered(this.media, this.media.currentTime) && h.BufferHelper.isBuffered(this.media, this.media.currentTime + .5);
switch (e.details) {
case s.ErrorDetails.FRAG_LOAD_ERROR:
case s.ErrorDetails.FRAG_LOAD_TIMEOUT:
case s.ErrorDetails.KEY_LOAD_ERROR:
case s.ErrorDetails.KEY_LOAD_TIMEOUT:
if (!e.fatal)
if (this.fragLoadError + 1 <= this.config.fragLoadingMaxRetry) {
var i = Math.min(Math.pow(2, this.fragLoadError) * this.config.fragLoadingRetryDelay, this.config.fragLoadingMaxRetryTimeout);
v.logger.warn("mediaController: frag loading failed, retry in " + i + " ms"),
this.retryDate = window.performance.now() + i,
this.loadedmetadata || (this.startFragRequested = !1,
this.nextLoadPosition = this.startPosition),
this.fragLoadError++,
this.state = _.State.FRAG_LOADING_WAITING_RETRY
} else
v.logger.error("mediaController: " + e.details + " reaches max retry, redispatch as fatal ..."),
e.fatal = !0,
this.state = _.State.ERROR;
break;
case s.ErrorDetails.LEVEL_LOAD_ERROR:
case s.ErrorDetails.LEVEL_LOAD_TIMEOUT:
this.state !== _.State.ERROR && (e.fatal ? (this.state = _.State.ERROR,
v.logger.warn("streamController: " + e.details + ",switch to " + this.state + " state ...")) : e.levelRetry || this.state !== _.State.WAITING_LEVEL || (this.state = _.State.IDLE));
break;
case s.ErrorDetails.BUFFER_FULL_ERROR:
"main" !== e.parent || this.state !== _.State.PARSING && this.state !== _.State.PARSED || (r ? (this._reduceMaxBufferLength(this.config.maxBufferLength),
this.state = _.State.IDLE) : (v.logger.warn("buffer full error also media.currentTime is not buffered, flush everything"),
this.fragCurrent = null,
this.flushMainBuffer(0, u.POSITIVE_INFINITY)))
}
}
}
,
e.prototype._reduceMaxBufferLength = function(e) {
var t = this.config;
return t.maxMaxBufferLength >= e && (t.maxMaxBufferLength /= 2,
v.logger.warn("main:reduce max buffer length to " + t.maxMaxBufferLength + "s"),
!0)
}
,
e.prototype._checkBuffer = function() {
var e = this.media;
if (e && 0 !== e.readyState) {
var t = (this.mediaBuffer ? this.mediaBuffer : e).buffered;
!this.loadedmetadata && t.length ? (this.loadedmetadata = !0,
this._seekToStartPos()) : this.immediateSwitch ? this.immediateLevelSwitchEnd() : this.gapController.poll(this.lastCurrentTime, t)
}
}
,
e.prototype.onFragLoadEmergencyAborted = function() {
this.state = _.State.IDLE,
this.loadedmetadata || (this.startFragRequested = !1,
this.nextLoadPosition = this.startPosition),
this.tick()
}
,
e.prototype.onBufferFlushed = function() {
var e = this.mediaBuffer ? this.mediaBuffer : this.media;
e && this.fragmentTracker.detectEvictedFragments(d.default.ElementaryStreamTypes.VIDEO, e.buffered),
this.state = _.State.IDLE,
this.fragPrevious = null
}
,
e.prototype.swapAudioCodec = function() {
this.audioCodecSwap = !this.audioCodecSwap
}
,
e.prototype.computeLivePosition = function(e, t) {
var r = void 0 !== this.config.liveSyncDuration ? this.config.liveSyncDuration : this.config.liveSyncDurationCount * t.targetduration;
return e + Math.max(0, t.totalduration - r)
}
,
e.prototype._seekToStartPos = function() {
var e = this.media
, t = e.currentTime
, r = e.seeking ? t : this.startPosition;
t !== r && (v.logger.log("target start position not buffered, seek to buffered.start(0) " + r + " from current time " + t + " "),
e.currentTime = r)
}
,
e.prototype._getAudioCodec = function(e) {
var t = this.config.defaultAudioCodec || e.audioCodec;
return this.audioCodecSwap && (v.logger.log("swapping playlist audio codec"),
t && (t = -1 !== t.indexOf("mp4a.40.5") ? "mp4a.40.2" : "mp4a.40.5")),
t
}
,
Object.defineProperty(e.prototype, "liveSyncPosition", {
get: function() {
return this._liveSyncPosition
},
set: function(e) {
this._liveSyncPosition = e
},
enumerable: !0,
configurable: !0
}),
e
}(_.default);
l.default = e
}
).call(this, E(2).Number)
}
, function(e, t, f) {
function o(r) {
var i = {};
function a(e) {
if (i[e])
return i[e].exports;
var t = i[e] = {
i: e,
l: !1,
exports: {}
};
return r[e].call(t.exports, t, t.exports, a),
t.l = !0,
t.exports
}
a.m = r,
a.c = i,
a.i = function(e) {
return e
}
,
a.d = function(e, t, r) {
a.o(e, t) || Object.defineProperty(e, t, {
configurable: !1,
enumerable: !0,
get: r
})
}
,
a.r = function(e) {
Object.defineProperty(e, "__esModule", {
value: !0
})
}
,
a.n = function(e) {
var t = e && e.__esModule ? function() {
return e.default
}
: function() {
return e
}
;
return a.d(t, "a", t),
t
}
,
a.o = function(e, t) {
return Object.prototype.hasOwnProperty.call(e, t)
}
,
a.p = "/",
a.oe = function(e) {
throw console.error(e),
e
}
;
var e = a(a.s = ENTRY_MODULE);
return e.default || e
}
var p = "[\\.|\\-|\\+|\\w|/|@]+"
, g = "\\((/\\*.*?\\*/)?s?.*?(" + p + ").*?\\)";
function v(e) {
return (e + "").replace(/[.?*+^$[\]\\(){}|-]/g, "\\$&")
}
function m(e, t, r) {
var i = {};
i[r] = [];
var a, n = t.toString(), s = n.match(/^function\s?\(\w+,\s*\w+,\s*(\w+)\)/);
if (!s)
return i;
for (var o, l = s[1], u = new RegExp("(\\\\n|\\W)" + v(l) + g,"g"); o = u.exec(n); )
"dll-reference" !== o[3] && i[r].push(o[3]);
for (u = new RegExp("\\(" + v(l) + '\\("(dll-reference\\s(' + p + '))"\\)\\)' + g,"g"); o = u.exec(n); )
e[o[2]] || (i[r].push(o[1]),
e[o[2]] = f(o[1]).m),
i[o[2]] = i[o[2]] || [],
i[o[2]].push(o[4]);
for (var d = Object.keys(i), c = 0; c < d.length; c++)
for (var h = 0; h < i[d[c]].length; h++)
a = i[d[c]][h],
!isNaN(1 * a) && (i[d[c]][h] = 1 * i[d[c]][h]);
return i
}
function y(r) {
return Object.keys(r).reduce(function(e, t) {
return e || 0 < r[t].length
}, !1)
}
e.exports = function(h, e) {
e = e || {};
var r = {
main: f.m
}
, i = e.all ? {
main: Object.keys(r.main)
} : function(e, t) {
for (var r = {
main: [h]
}, i = {
main: []
}, a = {
main: {}
}; y(r); )
for (var n = Object.keys(r), s = 0; s < n.length; s++) {
var o = n[s]
, l = r[o].pop();
if (a[o] = a[o] || {},
!a[o][l] && e[o][l]) {
a[o][l] = !0,
i[o] = i[o] || [],
i[o].push(l);
for (var u = m(e, e[o][l], o), d = Object.keys(u), c = 0; c < d.length; c++)
r[d[c]] = r[d[c]] || [],
r[d[c]] = r[d[c]].concat(u[d[c]])
}
}
return i
}(r)
, a = "";
Object.keys(i).filter(function(e) {
return "main" !== e
}).forEach(function(t) {
for (var e = 0; i[t][e]; )
e++;
i[t].push(e),
r[t][e] = "(function(module, exports, __webpack_require__) { module.exports = __webpack_require__; })",
a = a + "var " + t + " = (" + o.toString().replace("ENTRY_MODULE", JSON.stringify(e)) + ")({" + i[t].map(function(e) {
return JSON.stringify(e) + ": " + r[t][e].toString()
}).join(",") + "});\n"
}),
a = a + "new ((" + o.toString().replace("ENTRY_MODULE", JSON.stringify(h)) + ")({" + i.main.map(function(e) {
return JSON.stringify(e) + ": " + r.main[e].toString()
}).join(",") + "}))(self);";
var t = new window.Blob([a],{
type: "text/javascript"
});
if (e.bare)
return t;
var n = (window.URL || window.webkitURL || window.mozURL || window.msURL).createObjectURL(t)
, s = new window.Worker(n);
return s.objectURL = n,
s
}
}
, function(e, t, r) {
var d, i, a, n, s, c, o, l, u, h, f, p, g, v, m, y, _, E, S, T, b, A, R, D, k, w, L, O, C, I, P, x, F, M, B, N, U, G, H, j, K, W, z, V, Y, q, X, $, Q, J, Z, ee, te, re, ie, ae, ne, se, oe, le, ue, de, ce, he, fe, pe, ge, ve, me, ye, _e, Ee, Se, Te, be, Ae, Re, De, ke, we, Le, Oe;
e.exports = (Oe = Oe || (d = Math,
i = Object.create || function() {
function r() {}
return function(e) {
var t;
return r.prototype = e,
t = new r,
r.prototype = null,
t
}
}(),
n = (a = {}).lib = {},
s = n.Base = {
extend: function(e) {
var t = i(this);
return e && t.mixIn(e),
t.hasOwnProperty("init") && this.init !== t.init || (t.init = function() {
t.$super.init.apply(this, arguments)
}
),
(t.init.prototype = t).$super = this,
t
},
create: function() {
var e = this.extend();
return e.init.apply(e, arguments),
e
},
init: function() {},
mixIn: function(e) {
for (var t in e)
e.hasOwnProperty(t) && (this[t] = e[t]);
e.hasOwnProperty("toString") && (this.toString = e.toString)
},
clone: function() {
return this.init.prototype.extend(this)
}
},
c = n.WordArray = s.extend({
init: function(e, t) {
e = this.words = e || [],
this.sigBytes = null != t ? t : 4 * e.length
},
toString: function(e) {
return (e || l).stringify(this)
},
concat: function(e) {
var t = this.words
, r = e.words
, i = this.sigBytes
, a = e.sigBytes;
if (this.clamp(),
i % 4)
for (var n = 0; n < a; n++) {
var s = r[n >>> 2] >>> 24 - n % 4 * 8 & 255;
t[i + n >>> 2] |= s << 24 - (i + n) % 4 * 8
}
else
for (n = 0; n < a; n += 4)
t[i + n >>> 2] = r[n >>> 2];
return this.sigBytes += a,
this
},
clamp: function() {
var e = this.words
, t = this.sigBytes;
e[t >>> 2] &= 4294967295 << 32 - t % 4 * 8,
e.length = d.ceil(t / 4)
},
clone: function() {
var e = s.clone.call(this);
return e.words = this.words.slice(0),
e
},
random: function(e) {
function t(t) {
t = t;
var r = 987654321
, i = 4294967295;
return function() {
var e = ((r = 36969 * (65535 & r) + (r >> 16) & i) << 16) + (t = 18e3 * (65535 & t) + (t >> 16) & i) & i;
return e /= 4294967296,
(e += .5) * (.5 < d.random() ? 1 : -1)
}
}
for (var r, i = [], a = 0; a < e; a += 4) {
var n = t(4294967296 * (r || d.random()));
r = 987654071 * n(),
i.push(4294967296 * n() | 0)
}
return new c.init(i,e)
}
}),
o = a.enc = {},
l = o.Hex = {
stringify: function(e) {
for (var t = e.words, r = e.sigBytes, i = [], a = 0; a < r; a++) {
var n = t[a >>> 2] >>> 24 - a % 4 * 8 & 255;
i.push((n >>> 4).toString(16)),
i.push((15 & n).toString(16))
}
return i.join("")
},
parse: function(e) {
for (var t = e.length, r = [], i = 0; i < t; i += 2)
r[i >>> 3] |= parseInt(e.substr(i, 2), 16) << 24 - i % 8 * 4;
return new c.init(r,t / 2)
}
},
u = o.Latin1 = {
stringify: function(e) {
for (var t = e.words, r = e.sigBytes, i = [], a = 0; a < r; a++) {
var n = t[a >>> 2] >>> 24 - a % 4 * 8 & 255;
i.push(String.fromCharCode(n))
}
return i.join("")
},
parse: function(e) {
for (var t = e.length, r = [], i = 0; i < t; i++)
r[i >>> 2] |= (255 & e.charCodeAt(i)) << 24 - i % 4 * 8;
return new c.init(r,t)
}
},
h = o.Utf8 = {
stringify: function(e) {
try {
return decodeURIComponent(escape(u.stringify(e)))
} catch (e) {
throw new Error("Malformed UTF-8 data")
}
},
parse: function(e) {
return u.parse(unescape(encodeURIComponent(e)))
}
},
f = n.BufferedBlockAlgorithm = s.extend({
reset: function() {
this._data = new c.init,
this._nDataBytes = 0
},
_append: function(e) {
"string" == typeof e && (e = h.parse(e)),
this._data.concat(e),
this._nDataBytes += e.sigBytes
},
_process: function(e) {
var t = this._data
, r = t.words
, i = t.sigBytes
, a = this.blockSize
, n = i / (4 * a)
, s = (n = e ? d.ceil(n) : d.max((0 | n) - this._minBufferSize, 0)) * a
, o = d.min(4 * s, i);
if (s) {
for (var l = 0; l < s; l += a)
this._doProcessBlock(r, l);
var u = r.splice(0, s);
t.sigBytes -= o
}
return new c.init(u,o)
},
clone: function() {
var e = s.clone.call(this);
return e._data = this._data.clone(),
e
},
_minBufferSize: 0
}),
n.Hasher = f.extend({
cfg: s.extend(),
init: function(e) {
this.cfg = this.cfg.extend(e),
this.reset()
},
reset: function() {
f.reset.call(this),
this._doReset()
},
update: function(e) {
return this._append(e),
this._process(),
this
},
finalize: function(e) {
return e && this._append(e),
this._doFinalize()
},
blockSize: 16,
_createHelper: function(r) {
return function(e, t) {
return new r.init(t).finalize(e)
}
},
_createHmacHelper: function(r) {
return function(e, t) {
return new p.HMAC.init(r,t).finalize(e)
}
}
}),
p = a.algo = {},
a),
Le = (we = Oe).lib.WordArray,
we.enc.Base64 = {
stringify: function(e) {
var t = e.words
, r = e.sigBytes
, i = this._map;
e.clamp();
for (var a = [], n = 0; n < r; n += 3)
for (var s = (t[n >>> 2] >>> 24 - n % 4 * 8 & 255) << 16 | (t[n + 1 >>> 2] >>> 24 - (n + 1) % 4 * 8 & 255) << 8 | t[n + 2 >>> 2] >>> 24 - (n + 2) % 4 * 8 & 255, o = 0; o < 4 && n + .75 * o < r; o++)
a.push(i.charAt(s >>> 6 * (3 - o) & 63));
var l = i.charAt(64);
if (l)
for (; a.length % 4; )
a.push(l);
return a.join("")
},
parse: function(e) {
var t = e.length
, r = this._map
, i = this._reverseMap;
if (!i) {
i = this._reverseMap = [];
for (var a = 0; a < r.length; a++)
i[r.charCodeAt(a)] = a
}
var n = r.charAt(64);
if (n) {
var s = e.indexOf(n);
-1 !== s && (t = s)
}
return function(e, t, r) {
for (var i = [], a = 0, n = 0; n < t; n++)
if (n % 4) {
var s = r[e.charCodeAt(n - 1)] << n % 4 * 2
, o = r[e.charCodeAt(n)] >>> 6 - n % 4 * 2;
i[a >>> 2] |= (s | o) << 24 - a % 4 * 8,
a++
}
return Le.create(i, a)
}(e, t, i)
},
_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
},
function(d) {
var e = Oe
, t = e.lib
, r = t.WordArray
, i = t.Hasher
, a = e.algo
, D = [];
!function() {
for (var e = 0; e < 64; e++)
D[e] = 4294967296 * d.abs(d.sin(e + 1)) | 0
}();
var n = a.MD5 = i.extend({
_doReset: function() {
this._hash = new r.init([1732584193, 4023233417, 2562383102, 271733878])
},
_doProcessBlock: function(e, t) {
for (var r = 0; r < 16; r++) {
var i = t + r
, a = e[i];
e[i] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8)
}
var n = this._hash.words
, s = e[t + 0]
, o = e[t + 1]
, l = e[t + 2]
, u = e[t + 3]
, d = e[t + 4]
, c = e[t + 5]
, h = e[t + 6]
, f = e[t + 7]
, p = e[t + 8]
, g = e[t + 9]
, v = e[t + 10]
, m = e[t + 11]
, y = e[t + 12]
, _ = e[t + 13]
, E = e[t + 14]
, S = e[t + 15]
, T = n[0]
, b = n[1]
, A = n[2]
, R = n[3];
b = O(b = O(b = O(b = O(b = L(b = L(b = L(b = L(b = w(b = w(b = w(b = w(b = k(b = k(b = k(b = k(b, A = k(A, R = k(R, T = k(T, b, A, R, s, 7, D[0]), b, A, o, 12, D[1]), T, b, l, 17, D[2]), R, T, u, 22, D[3]), A = k(A, R = k(R, T = k(T, b, A, R, d, 7, D[4]), b, A, c, 12, D[5]), T, b, h, 17, D[6]), R, T, f, 22, D[7]), A = k(A, R = k(R, T = k(T, b, A, R, p, 7, D[8]), b, A, g, 12, D[9]), T, b, v, 17, D[10]), R, T, m, 22, D[11]), A = k(A, R = k(R, T = k(T, b, A, R, y, 7, D[12]), b, A, _, 12, D[13]), T, b, E, 17, D[14]), R, T, S, 22, D[15]), A = w(A, R = w(R, T = w(T, b, A, R, o, 5, D[16]), b, A, h, 9, D[17]), T, b, m, 14, D[18]), R, T, s, 20, D[19]), A = w(A, R = w(R, T = w(T, b, A, R, c, 5, D[20]), b, A, v, 9, D[21]), T, b, S, 14, D[22]), R, T, d, 20, D[23]), A = w(A, R = w(R, T = w(T, b, A, R, g, 5, D[24]), b, A, E, 9, D[25]), T, b, u, 14, D[26]), R, T, p, 20, D[27]), A = w(A, R = w(R, T = w(T, b, A, R, _, 5, D[28]), b, A, l, 9, D[29]), T, b, f, 14, D[30]), R, T, y, 20, D[31]), A = L(A, R = L(R, T = L(T, b, A, R, c, 4, D[32]), b, A, p, 11, D[33]), T, b, m, 16, D[34]), R, T, E, 23, D[35]), A = L(A, R = L(R, T = L(T, b, A, R, o, 4, D[36]), b, A, d, 11, D[37]), T, b, f, 16, D[38]), R, T, v, 23, D[39]), A = L(A, R = L(R, T = L(T, b, A, R, _, 4, D[40]), b, A, s, 11, D[41]), T, b, u, 16, D[42]), R, T, h, 23, D[43]), A = L(A, R = L(R, T = L(T, b, A, R, g, 4, D[44]), b, A, y, 11, D[45]), T, b, S, 16, D[46]), R, T, l, 23, D[47]), A = O(A, R = O(R, T = O(T, b, A, R, s, 6, D[48]), b, A, f, 10, D[49]), T, b, E, 15, D[50]), R, T, c, 21, D[51]), A = O(A, R = O(R, T = O(T, b, A, R, y, 6, D[52]), b, A, u, 10, D[53]), T, b, v, 15, D[54]), R, T, o, 21, D[55]), A = O(A, R = O(R, T = O(T, b, A, R, p, 6, D[56]), b, A, S, 10, D[57]), T, b, h, 15, D[58]), R, T, _, 21, D[59]), A = O(A, R = O(R, T = O(T, b, A, R, d, 6, D[60]), b, A, m, 10, D[61]), T, b, l, 15, D[62]), R, T, g, 21, D[63]),
n[0] = n[0] + T | 0,
n[1] = n[1] + b | 0,
n[2] = n[2] + A | 0,
n[3] = n[3] + R | 0
},
_doFinalize: function() {
var e = this._data
, t = e.words
, r = 8 * this._nDataBytes
, i = 8 * e.sigBytes;
t[i >>> 5] |= 128 << 24 - i % 32;
var a = d.floor(r / 4294967296)
, n = r;
t[15 + (64 + i >>> 9 << 4)] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8),
t[14 + (64 + i >>> 9 << 4)] = 16711935 & (n << 8 | n >>> 24) | 4278255360 & (n << 24 | n >>> 8),
e.sigBytes = 4 * (t.length + 1),
this._process();
for (var s = this._hash, o = s.words, l = 0; l < 4; l++) {
var u = o[l];
o[l] = 16711935 & (u << 8 | u >>> 24) | 4278255360 & (u << 24 | u >>> 8)
}
return s
},
clone: function() {
var e = i.clone.call(this);
return e._hash = this._hash.clone(),
e
}
});
function k(e, t, r, i, a, n, s) {
var o = e + (t & r | ~t & i) + a + s;
return (o << n | o >>> 32 - n) + t
}
function w(e, t, r, i, a, n, s) {
var o = e + (t & i | r & ~i) + a + s;
return (o << n | o >>> 32 - n) + t
}
function L(e, t, r, i, a, n, s) {
var o = e + (t ^ r ^ i) + a + s;
return (o << n | o >>> 32 - n) + t
}
function O(e, t, r, i, a, n, s) {
var o = e + (r ^ (t | ~i)) + a + s;
return (o << n | o >>> 32 - n) + t
}
e.MD5 = i._createHelper(n),
e.HmacMD5 = i._createHmacHelper(n)
}(Math),
be = (Te = Oe).lib,
Ae = be.WordArray,
Re = be.Hasher,
De = [],
ke = Te.algo.SHA1 = Re.extend({
_doReset: function() {
this._hash = new Ae.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
},
_doProcessBlock: function(e, t) {
for (var r = this._hash.words, i = r[0], a = r[1], n = r[2], s = r[3], o = r[4], l = 0; l < 80; l++) {
if (l < 16)
De[l] = 0 | e[t + l];
else {
var u = De[l - 3] ^ De[l - 8] ^ De[l - 14] ^ De[l - 16];
De[l] = u << 1 | u >>> 31
}
var d = (i << 5 | i >>> 27) + o + De[l];
d += l < 20 ? 1518500249 + (a & n | ~a & s) : l < 40 ? 1859775393 + (a ^ n ^ s) : l < 60 ? (a & n | a & s | n & s) - 1894007588 : (a ^ n ^ s) - 899497514,
o = s,
s = n,
n = a << 30 | a >>> 2,
a = i,
i = d
}
r[0] = r[0] + i | 0,
r[1] = r[1] + a | 0,
r[2] = r[2] + n | 0,
r[3] = r[3] + s | 0,
r[4] = r[4] + o | 0
},
_doFinalize: function() {
var e = this._data
, t = e.words
, r = 8 * this._nDataBytes
, i = 8 * e.sigBytes;
return t[i >>> 5] |= 128 << 24 - i % 32,
t[14 + (64 + i >>> 9 << 4)] = Math.floor(r / 4294967296),
t[15 + (64 + i >>> 9 << 4)] = r,
e.sigBytes = 4 * t.length,
this._process(),
this._hash
},
clone: function() {
var e = Re.clone.call(this);
return e._hash = this._hash.clone(),
e
}
}),
Te.SHA1 = Re._createHelper(ke),
Te.HmacSHA1 = Re._createHmacHelper(ke),
function(a) {
var e = Oe
, t = e.lib
, r = t.WordArray
, i = t.Hasher
, n = e.algo
, s = []
, _ = [];
!function() {
function e(e) {
for (var t = a.sqrt(e), r = 2; r <= t; r++)
if (!(e % r))
return !1;
return !0
}
function t(e) {
return 4294967296 * (e - (0 | e)) | 0
}
for (var r = 2, i = 0; i < 64; )
e(r) && (i < 8 && (s[i] = t(a.pow(r, .5))),
_[i] = t(a.pow(r, 1 / 3)),
i++),
r++
}();
var E = []
, o = n.SHA256 = i.extend({
_doReset: function() {
this._hash = new r.init(s.slice(0))
},
_doProcessBlock: function(e, t) {
for (var r = this._hash.words, i = r[0], a = r[1], n = r[2], s = r[3], o = r[4], l = r[5], u = r[6], d = r[7], c = 0; c < 64; c++) {
if (c < 16)
E[c] = 0 | e[t + c];
else {
var h = E[c - 15]
, f = (h << 25 | h >>> 7) ^ (h << 14 | h >>> 18) ^ h >>> 3
, p = E[c - 2]
, g = (p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10;
E[c] = f + E[c - 7] + g + E[c - 16]
}
var v = i & a ^ i & n ^ a & n
, m = (i << 30 | i >>> 2) ^ (i << 19 | i >>> 13) ^ (i << 10 | i >>> 22)
, y = d + ((o << 26 | o >>> 6) ^ (o << 21 | o >>> 11) ^ (o << 7 | o >>> 25)) + (o & l ^ ~o & u) + _[c] + E[c];
d = u,
u = l,
l = o,
o = s + y | 0,
s = n,
n = a,
a = i,
i = y + (m + v) | 0
}
r[0] = r[0] + i | 0,
r[1] = r[1] + a | 0,
r[2] = r[2] + n | 0,
r[3] = r[3] + s | 0,
r[4] = r[4] + o | 0,
r[5] = r[5] + l | 0,
r[6] = r[6] + u | 0,
r[7] = r[7] + d | 0
},
_doFinalize: function() {
var e = this._data
, t = e.words
, r = 8 * this._nDataBytes
, i = 8 * e.sigBytes;
return t[i >>> 5] |= 128 << 24 - i % 32,
t[14 + (64 + i >>> 9 << 4)] = a.floor(r / 4294967296),
t[15 + (64 + i >>> 9 << 4)] = r,
e.sigBytes = 4 * t.length,
this._process(),
this._hash
},
clone: function() {
var e = i.clone.call(this);
return e._hash = this._hash.clone(),
e
}
});
e.SHA256 = i._createHelper(o),
e.HmacSHA256 = i._createHmacHelper(o)
}(Math),
function() {
var e = Oe
, a = e.lib.WordArray
, t = e.enc;
function s(e) {
return e << 8 & 4278255360 | e >>> 8 & 16711935
}
t.Utf16 = t.Utf16BE = {
stringify: function(e) {
for (var t = e.words, r = e.sigBytes, i = [], a = 0; a < r; a += 2) {
var n = t[a >>> 2] >>> 16 - a % 4 * 8 & 65535;
i.push(String.fromCharCode(n))
}
return i.join("")
},
parse: function(e) {
for (var t = e.length, r = [], i = 0; i < t; i++)
r[i >>> 1] |= e.charCodeAt(i) << 16 - i % 2 * 16;
return a.create(r, 2 * t)
}
},
t.Utf16LE = {
stringify: function(e) {
for (var t = e.words, r = e.sigBytes, i = [], a = 0; a < r; a += 2) {
var n = s(t[a >>> 2] >>> 16 - a % 4 * 8 & 65535);
i.push(String.fromCharCode(n))
}
return i.join("")
},
parse: function(e) {
for (var t = e.length, r = [], i = 0; i < t; i++)
r[i >>> 1] |= s(e.charCodeAt(i) << 16 - i % 2 * 16);
return a.create(r, 2 * t)
}
}
}(),
function() {
if ("function" == typeof ArrayBuffer) {
var e = Oe.lib.WordArray
, a = e.init;
(e.init = function(e) {
if (e instanceof ArrayBuffer && (e = new Uint8Array(e)),
(e instanceof Int8Array || "undefined" != typeof Uint8ClampedArray && e instanceof Uint8ClampedArray || e instanceof Int16Array || e instanceof Uint16Array || e instanceof Int32Array || e instanceof Uint32Array || e instanceof Float32Array || e instanceof Float64Array) && (e = new Uint8Array(e.buffer,e.byteOffset,e.byteLength)),
e instanceof Uint8Array) {
for (var t = e.byteLength, r = [], i = 0; i < t; i++)
r[i >>> 2] |= e[i] << 24 - i % 4 * 8;
a.call(this, r, t)
} else
a.apply(this, arguments)
}
).prototype = e
}
}(),
function(e) {
var t = Oe
, r = t.lib
, i = r.WordArray
, a = r.Hasher
, n = t.algo
, b = i.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13])
, A = i.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11])
, R = i.create([11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6])
, D = i.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11])
, k = i.create([0, 1518500249, 1859775393, 2400959708, 2840853838])
, w = i.create([1352829926, 1548603684, 1836072691, 2053994217, 0])
, s = n.RIPEMD160 = a.extend({
_doReset: function() {
this._hash = i.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
},
_doProcessBlock: function(e, t) {
for (var r = 0; r < 16; r++) {
var i = t + r
, a = e[i];
e[i] = 16711935 & (a << 8 | a >>> 24) | 4278255360 & (a << 24 | a >>> 8)
}
var n, s, o, l, u, d, c, h, f, p, g, v = this._hash.words, m = k.words, y = w.words, _ = b.words, E = A.words, S = R.words, T = D.words;
for (d = n = v[0],
c = s = v[1],
h = o = v[2],
f = l = v[3],
p = u = v[4],
r = 0; r < 80; r += 1)
g = n + e[t + _[r]] | 0,
g += r < 16 ? L(s, o, l) + m[0] : r < 32 ? O(s, o, l) + m[1] : r < 48 ? C(s, o, l) + m[2] : r < 64 ? I(s, o, l) + m[3] : P(s, o, l) + m[4],
g = (g = x(g |= 0, S[r])) + u | 0,
n = u,
u = l,
l = x(o, 10),
o = s,
s = g,
g = d + e[t + E[r]] | 0,
g += r < 16 ? P(c, h, f) + y[0] : r < 32 ? I(c, h, f) + y[1] : r < 48 ? C(c, h, f) + y[2] : r < 64 ? O(c, h, f) + y[3] : L(c, h, f) + y[4],
g = (g = x(g |= 0, T[r])) + p | 0,
d = p,
p = f,
f = x(h, 10),
h = c,
c = g;
g = v[1] + o + f | 0,
v[1] = v[2] + l + p | 0,
v[2] = v[3] + u + d | 0,
v[3] = v[4] + n + c | 0,
v[4] = v[0] + s + h | 0,
v[0] = g
},
_doFinalize: function() {
var e = this._data
, t = e.words
, r = 8 * this._nDataBytes
, i = 8 * e.sigBytes;
t[i >>> 5] |= 128 << 24 - i % 32,
t[14 + (64 + i >>> 9 << 4)] = 16711935 & (r << 8 | r >>> 24) | 4278255360 & (r << 24 | r >>> 8),
e.sigBytes = 4 * (t.length + 1),
this._process();
for (var a = this._hash, n = a.words, s = 0; s < 5; s++) {
var o = n[s];
n[s] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8)
}
return a
},
clone: function() {
var e = a.clone.call(this);
return e._hash = this._hash.clone(),
e
}
});
function L(e, t, r) {
return e ^ t ^ r
}
function O(e, t, r) {
return e & t | ~e & r
}
function C(e, t, r) {
return (e | ~t) ^ r
}
function I(e, t, r) {
return e & r | t & ~r
}
function P(e, t, r) {
return e ^ (t | ~r)
}
function x(e, t) {
return e << t | e >>> 32 - t
}
t.RIPEMD160 = a._createHelper(s),
t.HmacRIPEMD160 = a._createHmacHelper(s)
}(Math),
Ee = (_e = Oe).lib.Base,
Se = _e.enc.Utf8,
_e.algo.HMAC = Ee.extend({
init: function(e, t) {
e = this._hasher = new e.init,
"string" == typeof t && (t = Se.parse(t));
var r = e.blockSize
, i = 4 * r;
t.sigBytes > i && (t = e.finalize(t)),
t.clamp();
for (var a = this._oKey = t.clone(), n = this._iKey = t.clone(), s = a.words, o = n.words, l = 0; l < r; l++)
s[l] ^= 1549556828,
o[l] ^= 909522486;
a.sigBytes = n.sigBytes = i,
this.reset()
},
reset: function() {
var e = this._hasher;
e.reset(),
e.update(this._iKey)
},
update: function(e) {
return this._hasher.update(e),
this
},
finalize: function(e) {
var t = this._hasher
, r = t.finalize(e);
return t.reset(),
t.finalize(this._oKey.clone().concat(r))
}
}),
he = (ce = Oe).lib,
fe = he.Base,
pe = he.WordArray,
ge = ce.algo,
ve = ge.SHA1,
me = ge.HMAC,
ye = ge.PBKDF2 = fe.extend({
cfg: fe.extend({
keySize: 4,
hasher: ve,
iterations: 1
}),
init: function(e) {
this.cfg = this.cfg.extend(e)
},
compute: function(e, t) {
for (var r = this.cfg, i = me.create(r.hasher, e), a = pe.create(), n = pe.create([1]), s = a.words, o = n.words, l = r.keySize, u = r.iterations; s.length < l; ) {
var d = i.update(t).finalize(n);
i.reset();
for (var c = d.words, h = c.length, f = d, p = 1; p < u; p++) {
f = i.finalize(f),
i.reset();
for (var g = f.words, v = 0; v < h; v++)
c[v] ^= g[v]
}
a.concat(d),
o[0]++
}
return a.sigBytes = 4 * l,
a
}
}),
ce.PBKDF2 = function(e, t, r) {
return ye.create(r).compute(e, t)
}
,
ne = (ae = Oe).lib,
se = ne.Base,
oe = ne.WordArray,
le = ae.algo,
ue = le.MD5,
de = le.EvpKDF = se.extend({
cfg: se.extend({
keySize: 4,
hasher: ue,
iterations: 1
}),
init: function(e) {
this.cfg = this.cfg.extend(e)
},
compute: function(e, t) {
for (var r = this.cfg, i = r.hasher.create(), a = oe.create(), n = a.words, s = r.keySize, o = r.iterations; n.length < s; ) {
l && i.update(l);
var l = i.update(e).finalize(t);
i.reset();
for (var u = 1; u < o; u++)
l = i.finalize(l),
i.reset();
a.concat(l)
}
return a.sigBytes = 4 * s,
a
}
}),
ae.EvpKDF = function(e, t, r) {
return de.create(r).compute(e, t)
}
,
ee = (Z = Oe).lib.WordArray,
te = Z.algo,
re = te.SHA256,
ie = te.SHA224 = re.extend({
_doReset: function() {
this._hash = new ee.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428])
},
_doFinalize: function() {
var e = re._doFinalize.call(this);
return e.sigBytes -= 4,
e
}
}),
Z.SHA224 = re._createHelper(ie),
Z.HmacSHA224 = re._createHmacHelper(ie),
X = (q = Oe).lib,
$ = X.Base,
Q = X.WordArray,
(J = q.x64 = {}).Word = $.extend({
init: function(e, t) {
this.high = e,
this.low = t
}
}),
J.WordArray = $.extend({
init: function(e, t) {
e = this.words = e || [],
this.sigBytes = null != t ? t : 8 * e.length
},
toX32: function() {
for (var e = this.words, t = e.length, r = [], i = 0; i < t; i++) {
var a = e[i];
r.push(a.high),
r.push(a.low)
}
return Q.create(r, this.sigBytes)
},
clone: function() {
for (var e = $.clone.call(this), t = e.words = this.words.slice(0), r = t.length, i = 0; i < r; i++)
t[i] = t[i].clone();
return e
}
}),
function(h) {
var e = Oe
, t = e.lib
, f = t.WordArray
, i = t.Hasher
, d = e.x64.Word
, r = e.algo
, L = []
, O = []
, C = [];
!function() {
for (var e = 1, t = 0, r = 0; r < 24; r++) {
L[e + 5 * t] = (r + 1) * (r + 2) / 2 % 64;
var i = (2 * e + 3 * t) % 5;
e = t % 5,
t = i
}
for (e = 0; e < 5; e++)
for (t = 0; t < 5; t++)
O[e + 5 * t] = t + (2 * e + 3 * t) % 5 * 5;
for (var a = 1, n = 0; n < 24; n++) {
for (var s = 0, o = 0, l = 0; l < 7; l++) {
if (1 & a) {
var u = (1 << l) - 1;
u < 32 ? o ^= 1 << u : s ^= 1 << u - 32
}
128 & a ? a = a << 1 ^ 113 : a <<= 1
}
C[n] = d.create(s, o)
}
}();
var I = [];
!function() {
for (var e = 0; e < 25; e++)
I[e] = d.create()
}();
var a = r.SHA3 = i.extend({
cfg: i.cfg.extend({
outputLength: 512
}),
_doReset: function() {
for (var e = this._state = [], t = 0; t < 25; t++)
e[t] = new d.init;
this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32
},
_doProcessBlock: function(e, t) {
for (var r = this._state, i = this.blockSize / 2, a = 0; a < i; a++) {
var n = e[t + 2 * a]
, s = e[t + 2 * a + 1];
n = 16711935 & (n << 8 | n >>> 24) | 4278255360 & (n << 24 | n >>> 8),
s = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8),
(A = r[a]).high ^= s,
A.low ^= n
}
for (var o = 0; o < 24; o++) {
for (var l = 0; l < 5; l++) {
for (var u = 0, d = 0, c = 0; c < 5; c++)
u ^= (A = r[l + 5 * c]).high,
d ^= A.low;
var h = I[l];
h.high = u,
h.low = d
}
for (l = 0; l < 5; l++) {
var f = I[(l + 4) % 5]
, p = I[(l + 1) % 5]
, g = p.high
, v = p.low;
for (u = f.high ^ (g << 1 | v >>> 31),
d = f.low ^ (v << 1 | g >>> 31),
c = 0; c < 5; c++)
(A = r[l + 5 * c]).high ^= u,
A.low ^= d
}
for (var m = 1; m < 25; m++) {
var y = (A = r[m]).high
, _ = A.low
, E = L[m];
d = E < 32 ? (u = y << E | _ >>> 32 - E,
_ << E | y >>> 32 - E) : (u = _ << E - 32 | y >>> 64 - E,
y << E - 32 | _ >>> 64 - E);
var S = I[O[m]];
S.high = u,
S.low = d
}
var T = I[0]
, b = r[0];
for (T.high = b.high,
T.low = b.low,
l = 0; l < 5; l++)
for (c = 0; c < 5; c++) {
var A = r[m = l + 5 * c]
, R = I[m]
, D = I[(l + 1) % 5 + 5 * c]
, k = I[(l + 2) % 5 + 5 * c];
A.high = R.high ^ ~D.high & k.high,
A.low = R.low ^ ~D.low & k.low
}
A = r[0];
var w = C[o];
A.high ^= w.high,
A.low ^= w.low
}
},
_doFinalize: function() {
var e = this._data
, t = e.words
, r = (this._nDataBytes,
8 * e.sigBytes)
, i = 32 * this.blockSize;
t[r >>> 5] |= 1 << 24 - r % 32,
t[(h.ceil((1 + r) / i) * i >>> 5) - 1] |= 128,
e.sigBytes = 4 * t.length,
this._process();
for (var a = this._state, n = this.cfg.outputLength / 8, s = n / 8, o = [], l = 0; l < s; l++) {
var u = a[l]
, d = u.high
, c = u.low;
d = 16711935 & (d << 8 | d >>> 24) | 4278255360 & (d << 24 | d >>> 8),
c = 16711935 & (c << 8 | c >>> 24) | 4278255360 & (c << 24 | c >>> 8),
o.push(c),
o.push(d)
}
return new f.init(o,n)
},
clone: function() {
for (var e = i.clone.call(this), t = e._state = this._state.slice(0), r = 0; r < 25; r++)
t[r] = t[r].clone();
return e
}
});
e.SHA3 = i._createHelper(a),
e.HmacSHA3 = i._createHmacHelper(a)
}(Math),
function() {
var e = Oe
, t = e.lib.Hasher
, r = e.x64
, i = r.Word
, a = r.WordArray
, n = e.algo;
function s() {
return i.create.apply(i, arguments)
}
var be = [s(1116352408, 3609767458), s(1899447441, 602891725), s(3049323471, 3964484399), s(3921009573, 2173295548), s(961987163, 4081628472), s(1508970993, 3053834265), s(2453635748, 2937671579), s(2870763221, 3664609560), s(3624381080, 2734883394), s(310598401, 1164996542), s(607225278, 1323610764), s(1426881987, 3590304994), s(1925078388, 4068182383), s(2162078206, 991336113), s(2614888103, 633803317), s(3248222580, 3479774868), s(3835390401, 2666613458), s(4022224774, 944711139), s(264347078, 2341262773), s(604807628, 2007800933), s(770255983, 1495990901), s(1249150122, 1856431235), s(1555081692, 3175218132), s(1996064986, 2198950837), s(2554220882, 3999719339), s(2821834349, 766784016), s(2952996808, 2566594879), s(3210313671, 3203337956), s(3336571891, 1034457026), s(3584528711, 2466948901), s(113926993, 3758326383), s(338241895, 168717936), s(666307205, 1188179964), s(773529912, 1546045734), s(1294757372, 1522805485), s(1396182291, 2643833823), s(1695183700, 2343527390), s(1986661051, 1014477480), s(2177026350, 1206759142), s(2456956037, 344077627), s(2730485921, 1290863460), s(2820302411, 3158454273), s(3259730800, 3505952657), s(3345764771, 106217008), s(3516065817, 3606008344), s(3600352804, 1432725776), s(4094571909, 1467031594), s(275423344, 851169720), s(430227734, 3100823752), s(506948616, 1363258195), s(659060556, 3750685593), s(883997877, 3785050280), s(958139571, 3318307427), s(1322822218, 3812723403), s(1537002063, 2003034995), s(1747873779, 3602036899), s(1955562222, 1575990012), s(2024104815, 1125592928), s(2227730452, 2716904306), s(2361852424, 442776044), s(2428436474, 593698344), s(2756734187, 3733110249), s(3204031479, 2999351573), s(3329325298, 3815920427), s(3391569614, 3928383900), s(3515267271, 566280711), s(3940187606, 3454069534), s(4118630271, 4000239992), s(116418474, 1914138554), s(174292421, 2731055270), s(289380356, 3203993006), s(460393269, 320620315), s(685471733, 587496836), s(852142971, 1086792851), s(1017036298, 365543100), s(1126000580, 2618297676), s(1288033470, 3409855158), s(1501505948, 4234509866), s(1607167915, 987167468), s(1816402316, 1246189591)]
, Ae = [];
!function() {
for (var e = 0; e < 80; e++)
Ae[e] = s()
}();
var o = n.SHA512 = t.extend({
_doReset: function() {
this._hash = new a.init([new i.init(1779033703,4089235720), new i.init(3144134277,2227873595), new i.init(1013904242,4271175723), new i.init(2773480762,1595750129), new i.init(1359893119,2917565137), new i.init(2600822924,725511199), new i.init(528734635,4215389547), new i.init(1541459225,327033209)])
},
_doProcessBlock: function(e, t) {
for (var r = this._hash.words, i = r[0], a = r[1], n = r[2], s = r[3], o = r[4], l = r[5], u = r[6], d = r[7], c = i.high, h = i.low, f = a.high, p = a.low, g = n.high, v = n.low, m = s.high, y = s.low, _ = o.high, E = o.low, S = l.high, T = l.low, b = u.high, A = u.low, R = d.high, D = d.low, k = c, w = h, L = f, O = p, C = g, I = v, P = m, x = y, F = _, M = E, B = S, N = T, U = b, G = A, H = R, j = D, K = 0; K < 80; K++) {
var W = Ae[K];
if (K < 16)
var z = W.high = 0 | e[t + 2 * K]
, V = W.low = 0 | e[t + 2 * K + 1];
else {
var Y = Ae[K - 15]
, q = Y.high
, X = Y.low
, $ = (q >>> 1 | X << 31) ^ (q >>> 8 | X << 24) ^ q >>> 7
, Q = (X >>> 1 | q << 31) ^ (X >>> 8 | q << 24) ^ (X >>> 7 | q << 25)
, J = Ae[K - 2]
, Z = J.high
, ee = J.low
, te = (Z >>> 19 | ee << 13) ^ (Z << 3 | ee >>> 29) ^ Z >>> 6
, re = (ee >>> 19 | Z << 13) ^ (ee << 3 | Z >>> 29) ^ (ee >>> 6 | Z << 26)
, ie = Ae[K - 7]
, ae = ie.high
, ne = ie.low
, se = Ae[K - 16]
, oe = se.high
, le = se.low;
z = (z = (z = $ + ae + ((V = Q + ne) >>> 0 < Q >>> 0 ? 1 : 0)) + te + ((V += re) >>> 0 < re >>> 0 ? 1 : 0)) + oe + ((V += le) >>> 0 < le >>> 0 ? 1 : 0),
W.high = z,
W.low = V
}
var ue, de = F & B ^ ~F & U, ce = M & N ^ ~M & G, he = k & L ^ k & C ^ L & C, fe = w & O ^ w & I ^ O & I, pe = (k >>> 28 | w << 4) ^ (k << 30 | w >>> 2) ^ (k << 25 | w >>> 7), ge = (w >>> 28 | k << 4) ^ (w << 30 | k >>> 2) ^ (w << 25 | k >>> 7), ve = (F >>> 14 | M << 18) ^ (F >>> 18 | M << 14) ^ (F << 23 | M >>> 9), me = (M >>> 14 | F << 18) ^ (M >>> 18 | F << 14) ^ (M << 23 | F >>> 9), ye = be[K], _e = ye.high, Ee = ye.low, Se = H + ve + ((ue = j + me) >>> 0 < j >>> 0 ? 1 : 0), Te = ge + fe;
H = U,
j = G,
U = B,
G = N,
B = F,
N = M,
F = P + (Se = (Se = (Se = Se + de + ((ue += ce) >>> 0 < ce >>> 0 ? 1 : 0)) + _e + ((ue += Ee) >>> 0 < Ee >>> 0 ? 1 : 0)) + z + ((ue += V) >>> 0 < V >>> 0 ? 1 : 0)) + ((M = x + ue | 0) >>> 0 < x >>> 0 ? 1 : 0) | 0,
P = C,
x = I,
C = L,
I = O,
L = k,
O = w,
k = Se + (pe + he + (Te >>> 0 < ge >>> 0 ? 1 : 0)) + ((w = ue + Te | 0) >>> 0 < ue >>> 0 ? 1 : 0) | 0
}
h = i.low = h + w,
i.high = c + k + (h >>> 0 < w >>> 0 ? 1 : 0),
p = a.low = p + O,
a.high = f + L + (p >>> 0 < O >>> 0 ? 1 : 0),
v = n.low = v + I,
n.high = g + C + (v >>> 0 < I >>> 0 ? 1 : 0),
y = s.low = y + x,
s.high = m + P + (y >>> 0 < x >>> 0 ? 1 : 0),
E = o.low = E + M,
o.high = _ + F + (E >>> 0 < M >>> 0 ? 1 : 0),
T = l.low = T + N,
l.high = S + B + (T >>> 0 < N >>> 0 ? 1 : 0),
A = u.low = A + G,
u.high = b + U + (A >>> 0 < G >>> 0 ? 1 : 0),
D = d.low = D + j,
d.high = R + H + (D >>> 0 < j >>> 0 ? 1 : 0)
},
_doFinalize: function() {
var e = this._data
, t = e.words
, r = 8 * this._nDataBytes
, i = 8 * e.sigBytes;
return t[i >>> 5] |= 128 << 24 - i % 32,
t[30 + (128 + i >>> 10 << 5)] = Math.floor(r / 4294967296),
t[31 + (128 + i >>> 10 << 5)] = r,
e.sigBytes = 4 * t.length,
this._process(),
this._hash.toX32()
},
clone: function() {
var e = t.clone.call(this);
return e._hash = this._hash.clone(),
e
},
blockSize: 32
});
e.SHA512 = t._createHelper(o),
e.HmacSHA512 = t._createHmacHelper(o)
}(),
j = (H = Oe).x64,
K = j.Word,
W = j.WordArray,
z = H.algo,
V = z.SHA512,
Y = z.SHA384 = V.extend({
_doReset: function() {
this._hash = new W.init([new K.init(3418070365,3238371032), new K.init(1654270250,914150663), new K.init(2438529370,812702999), new K.init(355462360,4144912697), new K.init(1731405415,4290775857), new K.init(2394180231,1750603025), new K.init(3675008525,1694076839), new K.init(1203062813,3204075428)])
},
_doFinalize: function() {
var e = V._doFinalize.call(this);
return e.sigBytes -= 16,
e
}
}),
H.SHA384 = V._createHelper(Y),
H.HmacSHA384 = V._createHmacHelper(Y),
Oe.lib.Cipher || (A = (b = Oe).lib,
R = A.Base,
D = A.WordArray,
k = A.BufferedBlockAlgorithm,
(w = b.enc).Utf8,
L = w.Base64,
O = b.algo.EvpKDF,
C = A.Cipher = k.extend({
cfg: R.extend(),
createEncryptor: function(e, t) {
return this.create(this._ENC_XFORM_MODE, e, t)
},
createDecryptor: function(e, t) {
return this.create(this._DEC_XFORM_MODE, e, t)
},
init: function(e, t, r) {
this.cfg = this.cfg.extend(r),
this._xformMode = e,
this._key = t,
this.reset()
},
reset: function() {
k.reset.call(this),
this._doReset()
},
process: function(e) {
return this._append(e),
this._process()
},
finalize: function(e) {
return e && this._append(e),
this._doFinalize()
},
keySize: 4,
ivSize: 4,
_ENC_XFORM_MODE: 1,
_DEC_XFORM_MODE: 2,
_createHelper: function() {
function a(e) {
return "string" == typeof e ? G : N
}
return function(i) {
return {
encrypt: function(e, t, r) {
return a(t).encrypt(i, e, t, r)
},
decrypt: function(e, t, r) {
return a(t).decrypt(i, e, t, r)
}
}
}
}()
}),
A.StreamCipher = C.extend({
_doFinalize: function() {
return this._process(!0)
},
blockSize: 1
}),
I = b.mode = {},
P = A.BlockCipherMode = R.extend({
createEncryptor: function(e, t) {
return this.Encryptor.create(e, t)
},
createDecryptor: function(e, t) {
return this.Decryptor.create(e, t)
},
init: function(e, t) {
this._cipher = e,
this._iv = t
}
}),
x = I.CBC = function() {
var e = P.extend();
function n(e, t, r) {
var i = this._iv;
if (i) {
var a = i;
this._iv = void 0
} else
a = this._prevBlock;
for (var n = 0; n < r; n++)
e[t + n] ^= a[n]
}
return e.Encryptor = e.extend({
processBlock: function(e, t) {
var r = this._cipher
, i = r.blockSize;
n.call(this, e, t, i),
r.encryptBlock(e, t),
this._prevBlock = e.slice(t, t + i)
}
}),
e.Decryptor = e.extend({
processBlock: function(e, t) {
var r = this._cipher
, i = r.blockSize
, a = e.slice(t, t + i);
r.decryptBlock(e, t),
n.call(this, e, t, i),
this._prevBlock = a
}
}),
e
}(),
F = (b.pad = {}).Pkcs7 = {
pad: function(e, t) {
for (var r = 4 * t, i = r - e.sigBytes % r, a = i << 24 | i << 16 | i << 8 | i, n = [], s = 0; s < i; s += 4)
n.push(a);
var o = D.create(n, i);
e.concat(o)
},
unpad: function(e) {
var t = 255 & e.words[e.sigBytes - 1 >>> 2];
e.sigBytes -= t
}
},
A.BlockCipher = C.extend({
cfg: C.cfg.extend({
mode: x,
padding: F
}),
reset: function() {
C.reset.call(this);
var e = this.cfg
, t = e.iv
, r = e.mode;
if (this._xformMode == this._ENC_XFORM_MODE)
var i = r.createEncryptor;
else
i = r.createDecryptor,
this._minBufferSize = 1;
this._mode && this._mode.__creator == i ? this._mode.init(this, t && t.words) : (this._mode = i.call(r, this, t && t.words),
this._mode.__creator = i)
},
_doProcessBlock: function(e, t) {
this._mode.processBlock(e, t)
},
_doFinalize: function() {
var e = this.cfg.padding;
if (this._xformMode == this._ENC_XFORM_MODE) {
e.pad(this._data, this.blockSize);
var t = this._process(!0)
} else
t = this._process(!0),
e.unpad(t);
return t
},
blockSize: 4
}),
M = A.CipherParams = R.extend({
init: function(e) {
this.mixIn(e)
},
toString: function(e) {
return (e || this.formatter).stringify(this)
}
}),
B = (b.format = {}).OpenSSL = {
stringify: function(e) {
var t = e.ciphertext
, r = e.salt;
if (r)
var i = D.create([1398893684, 1701076831]).concat(r).concat(t);
else
i = t;
return i.toString(L)
},
parse: function(e) {
var t = L.parse(e)
, r = t.words;
if (1398893684 == r[0] && 1701076831 == r[1]) {
var i = D.create(r.slice(2, 4));
r.splice(0, 4),
t.sigBytes -= 16
}
return M.create({
ciphertext: t,
salt: i
})
}
},
N = A.SerializableCipher = R.extend({
cfg: R.extend({
format: B
}),
encrypt: function(e, t, r, i) {
i = this.cfg.extend(i);
var a = e.createEncryptor(r, i)
, n = a.finalize(t)
, s = a.cfg;
return M.create({
ciphertext: n,
key: r,
iv: s.iv,
algorithm: e,
mode: s.mode,
padding: s.padding,
blockSize: e.blockSize,
formatter: i.format
})
},
decrypt: function(e, t, r, i) {
return i = this.cfg.extend(i),
t = this._parse(t, i.format),
e.createDecryptor(r, i).finalize(t.ciphertext)
},
_parse: function(e, t) {
return "string" == typeof e ? t.parse(e, this) : e
}
}),
U = (b.kdf = {}).OpenSSL = {
execute: function(e, t, r, i) {
i || (i = D.random(8));
var a = O.create({
keySize: t + r
}).compute(e, i)
, n = D.create(a.words.slice(t), 4 * r);
return a.sigBytes = 4 * t,
M.create({
key: a,
iv: n,
salt: i
})
}
},
G = A.PasswordBasedCipher = N.extend({
cfg: N.cfg.extend({
kdf: U
}),
encrypt: function(e, t, r, i) {
var a = (i = this.cfg.extend(i)).kdf.execute(r, e.keySize, e.ivSize);
i.iv = a.iv;
var n = N.encrypt.call(this, e, t, a.key, i);
return n.mixIn(a),
n
},
decrypt: function(e, t, r, i) {
i = this.cfg.extend(i),
t = this._parse(t, i.format);
var a = i.kdf.execute(r, e.keySize, e.ivSize, t.salt);
return i.iv = a.iv,
N.decrypt.call(this, e, t, a.key, i)
}
})),
Oe.mode.CFB = function() {
var e = Oe.lib.BlockCipherMode.extend();
function n(e, t, r, i) {
var a = this._iv;
if (a) {
var n = a.slice(0);
this._iv = void 0
} else
n = this._prevBlock;
i.encryptBlock(n, 0);
for (var s = 0; s < r; s++)
e[t + s] ^= n[s]
}
return e.Encryptor = e.extend({
processBlock: function(e, t) {
var r = this._cipher
, i = r.blockSize;
n.call(this, e, t, i, r),
this._prevBlock = e.slice(t, t + i)
}
}),
e.Decryptor = e.extend({
processBlock: function(e, t) {
var r = this._cipher
, i = r.blockSize
, a = e.slice(t, t + i);
n.call(this, e, t, i, r),
this._prevBlock = a
}
}),
e
}(),
Oe.mode.ECB = ((T = Oe.lib.BlockCipherMode.extend()).Encryptor = T.extend({
processBlock: function(e, t) {
this._cipher.encryptBlock(e, t)
}
}),
T.Decryptor = T.extend({
processBlock: function(e, t) {
this._cipher.decryptBlock(e, t)
}
}),
T),
Oe.pad.AnsiX923 = {
pad: function(e, t) {
var r = e.sigBytes
, i = 4 * t
, a = i - r % i
, n = r + a - 1;
e.clamp(),
e.words[n >>> 2] |= a << 24 - n % 4 * 8,
e.sigBytes += a
},
unpad: function(e) {
var t = 255 & e.words[e.sigBytes - 1 >>> 2];
e.sigBytes -= t
}
},
Oe.pad.Iso10126 = {
pad: function(e, t) {
var r = 4 * t
, i = r - e.sigBytes % r;
e.concat(Oe.lib.WordArray.random(i - 1)).concat(Oe.lib.WordArray.create([i << 24], 1))
},
unpad: function(e) {
var t = 255 & e.words[e.sigBytes - 1 >>> 2];
e.sigBytes -= t
}
},
Oe.pad.Iso97971 = {
pad: function(e, t) {
e.concat(Oe.lib.WordArray.create([2147483648], 1)),
Oe.pad.ZeroPadding.pad(e, t)
},
unpad: function(e) {
Oe.pad.ZeroPadding.unpad(e),
e.sigBytes--
}
},
Oe.mode.OFB = (E = Oe.lib.BlockCipherMode.extend(),
S = E.Encryptor = E.extend({
processBlock: function(e, t) {
var r = this._cipher
, i = r.blockSize
, a = this._iv
, n = this._keystream;
a && (n = this._keystream = a.slice(0),
this._iv = void 0),
r.encryptBlock(n, 0);
for (var s = 0; s < i; s++)
e[t + s] ^= n[s]
}
}),
E.Decryptor = S,
E),
Oe.pad.NoPadding = {
pad: function() {},
unpad: function() {}
},
y = (m = Oe).lib.CipherParams,
_ = m.enc.Hex,
m.format.Hex = {
stringify: function(e) {
return e.ciphertext.toString(_)
},
parse: function(e) {
var t = _.parse(e);
return y.create({
ciphertext: t
})
}
},
function() {
var e = Oe
, t = e.lib.BlockCipher
, r = e.algo
, u = []
, d = []
, c = []
, h = []
, f = []
, p = []
, g = []
, v = []
, m = []
, y = [];
!function() {
for (var e = [], t = 0; t < 256; t++)
e[t] = t < 128 ? t << 1 : t << 1 ^ 283;
var r = 0
, i = 0;
for (t = 0; t < 256; t++) {
var a = i ^ i << 1 ^ i << 2 ^ i << 3 ^ i << 4;
a = a >>> 8 ^ 255 & a ^ 99,
u[r] = a;
var n = e[d[a] = r]
, s = e[n]
, o = e[s]
, l = 257 * e[a] ^ 16843008 * a;
c[r] = l << 24 | l >>> 8,
h[r] = l << 16 | l >>> 16,
f[r] = l << 8 | l >>> 24,
p[r] = l,
l = 16843009 * o ^ 65537 * s ^ 257 * n ^ 16843008 * r,
g[a] = l << 24 | l >>> 8,
v[a] = l << 16 | l >>> 16,
m[a] = l << 8 | l >>> 24,
y[a] = l,
r ? (r = n ^ e[e[e[o ^ n]]],
i ^= e[e[i]]) : r = i = 1
}
}();
var _ = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54]
, i = r.AES = t.extend({
_doReset: function() {
if (!this._nRounds || this._keyPriorReset !== this._key) {
for (var e = this._keyPriorReset = this._key, t = e.words, r = e.sigBytes / 4, i = 4 * (1 + (this._nRounds = 6 + r)), a = this._keySchedule = [], n = 0; n < i; n++)
if (n < r)
a[n] = t[n];
else {
var s = a[n - 1];
n % r ? 6 < r && n % r == 4 && (s = u[s >>> 24] << 24 | u[s >>> 16 & 255] << 16 | u[s >>> 8 & 255] << 8 | u[255 & s]) : (s = u[(s = s << 8 | s >>> 24) >>> 24] << 24 | u[s >>> 16 & 255] << 16 | u[s >>> 8 & 255] << 8 | u[255 & s],
s ^= _[n / r | 0] << 24),
a[n] = a[n - r] ^ s
}
for (var o = this._invKeySchedule = [], l = 0; l < i; l++)
n = i - l,
s = l % 4 ? a[n] : a[n - 4],
o[l] = l < 4 || n <= 4 ? s : g[u[s >>> 24]] ^ v[u[s >>> 16 & 255]] ^ m[u[s >>> 8 & 255]] ^ y[u[255 & s]]
}
},
encryptBlock: function(e, t) {
this._doCryptBlock(e, t, this._keySchedule, c, h, f, p, u)
},
decryptBlock: function(e, t) {
var r = e[t + 1];
e[t + 1] = e[t + 3],
e[t + 3] = r,
this._doCryptBlock(e, t, this._invKeySchedule, g, v, m, y, d),
r = e[t + 1],
e[t + 1] = e[t + 3],
e[t + 3] = r
},
_doCryptBlock: function(e, t, r, i, a, n, s, o) {
for (var l = this._nRounds, u = e[t] ^ r[0], d = e[t + 1] ^ r[1], c = e[t + 2] ^ r[2], h = e[t + 3] ^ r[3], f = 4, p = 1; p < l; p++) {
var g = i[u >>> 24] ^ a[d >>> 16 & 255] ^ n[c >>> 8 & 255] ^ s[255 & h] ^ r[f++]
, v = i[d >>> 24] ^ a[c >>> 16 & 255] ^ n[h >>> 8 & 255] ^ s[255 & u] ^ r[f++]
, m = i[c >>> 24] ^ a[h >>> 16 & 255] ^ n[u >>> 8 & 255] ^ s[255 & d] ^ r[f++]
, y = i[h >>> 24] ^ a[u >>> 16 & 255] ^ n[d >>> 8 & 255] ^ s[255 & c] ^ r[f++];
u = g,
d = v,
c = m,
h = y
}
g = (o[u >>> 24] << 24 | o[d >>> 16 & 255] << 16 | o[c >>> 8 & 255] << 8 | o[255 & h]) ^ r[f++],
v = (o[d >>> 24] << 24 | o[c >>> 16 & 255] << 16 | o[h >>> 8 & 255] << 8 | o[255 & u]) ^ r[f++],
m = (o[c >>> 24] << 24 | o[h >>> 16 & 255] << 16 | o[u >>> 8 & 255] << 8 | o[255 & d]) ^ r[f++],
y = (o[h >>> 24] << 24 | o[u >>> 16 & 255] << 16 | o[d >>> 8 & 255] << 8 | o[255 & c]) ^ r[f++],
e[t] = g,
e[t + 1] = v,
e[t + 2] = m,
e[t + 3] = y
},
keySize: 8
});
e.AES = t._createHelper(i)
}(),
function() {
var e = Oe
, t = e.lib
, r = t.WordArray
, i = t.BlockCipher
, a = e.algo
, u = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4]
, d = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47, 55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32]
, c = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28]
, h = [{
0: 8421888,
268435456: 32768,
536870912: 8421378,
805306368: 2,
1073741824: 512,
1342177280: 8421890,
1610612736: 8389122,
1879048192: 8388608,
2147483648: 514,
2415919104: 8389120,
2684354560: 33280,
2952790016: 8421376,
3221225472: 32770,
3489660928: 8388610,
3758096384: 0,
4026531840: 33282,
134217728: 0,
402653184: 8421890,
671088640: 33282,
939524096: 32768,
1207959552: 8421888,
1476395008: 512,
1744830464: 8421378,
2013265920: 2,
2281701376: 8389120,
2550136832: 33280,
2818572288: 8421376,
3087007744: 8389122,
3355443200: 8388610,
3623878656: 32770,
3892314112: 514,
4160749568: 8388608,
1: 32768,
268435457: 2,
536870913: 8421888,
805306369: 8388608,
1073741825: 8421378,
1342177281: 33280,
1610612737: 512,
1879048193: 8389122,
2147483649: 8421890,
2415919105: 8421376,
2684354561: 8388610,
2952790017: 33282,
3221225473: 514,
3489660929: 8389120,
3758096385: 32770,
4026531841: 0,
134217729: 8421890,
402653185: 8421376,
671088641: 8388608,
939524097: 512,
1207959553: 32768,
1476395009: 8388610,
1744830465: 2,
2013265921: 33282,
2281701377: 32770,
2550136833: 8389122,
2818572289: 514,
3087007745: 8421888,
3355443201: 8389120,
3623878657: 0,
3892314113: 33280,
4160749569: 8421378
}, {
0: 1074282512,
16777216: 16384,
33554432: 524288,
50331648: 1074266128,
67108864: 1073741840,
83886080: 1074282496,
100663296: 1073758208,
117440512: 16,
134217728: 540672,
150994944: 1073758224,
167772160: 1073741824,
184549376: 540688,
201326592: 524304,
218103808: 0,
234881024: 16400,
251658240: 1074266112,
8388608: 1073758208,
25165824: 540688,
41943040: 16,
58720256: 1073758224,
75497472: 1074282512,
92274688: 1073741824,
109051904: 524288,
125829120: 1074266128,
142606336: 524304,
159383552: 0,
176160768: 16384,
192937984: 1074266112,
209715200: 1073741840,
226492416: 540672,
243269632: 1074282496,
260046848: 16400,
268435456: 0,
285212672: 1074266128,
301989888: 1073758224,
318767104: 1074282496,
335544320: 1074266112,
352321536: 16,
369098752: 540688,
385875968: 16384,
402653184: 16400,
419430400: 524288,
436207616: 524304,
452984832: 1073741840,
469762048: 540672,
486539264: 1073758208,
503316480: 1073741824,
520093696: 1074282512,
276824064: 540688,
293601280: 524288,
310378496: 1074266112,
327155712: 16384,
343932928: 1073758208,
360710144: 1074282512,
377487360: 16,
394264576: 1073741824,
411041792: 1074282496,
427819008: 1073741840,
444596224: 1073758224,
461373440: 524304,
478150656: 0,
494927872: 16400,
511705088: 1074266128,
528482304: 540672
}, {
0: 260,
1048576: 0,
2097152: 67109120,
3145728: 65796,
4194304: 65540,
5242880: 67108868,
6291456: 67174660,
7340032: 67174400,
8388608: 67108864,
9437184: 67174656,
10485760: 65792,
11534336: 67174404,
12582912: 67109124,
13631488: 65536,
14680064: 4,
15728640: 256,
524288: 67174656,
1572864: 67174404,
2621440: 0,
3670016: 67109120,
4718592: 67108868,
5767168: 65536,
6815744: 65540,
7864320: 260,
8912896: 4,
9961472: 256,
11010048: 67174400,
12058624: 65796,
13107200: 65792,
14155776: 67109124,
15204352: 67174660,
16252928: 67108864,
16777216: 67174656,
17825792: 65540,
18874368: 65536,
19922944: 67109120,
20971520: 256,
22020096: 67174660,
23068672: 67108868,
24117248: 0,
25165824: 67109124,
26214400: 67108864,
27262976: 4,
28311552: 65792,
29360128: 67174400,
30408704: 260,
31457280: 65796,
32505856: 67174404,
17301504: 67108864,
18350080: 260,
19398656: 67174656,
20447232: 0,
21495808: 65540,
22544384: 67109120,
23592960: 256,
24641536: 67174404,
25690112: 65536,
26738688: 67174660,
27787264: 65796,
28835840: 67108868,
29884416: 67109124,
30932992: 67174400,
31981568: 4,
33030144: 65792
}, {
0: 2151682048,
65536: 2147487808,
131072: 4198464,
196608: 2151677952,
262144: 0,
327680: 4198400,
393216: 2147483712,
458752: 4194368,
524288: 2147483648,
589824: 4194304,
655360: 64,
720896: 2147487744,
786432: 2151678016,
851968: 4160,
917504: 4096,
983040: 2151682112,
32768: 2147487808,
98304: 64,
163840: 2151678016,
229376: 2147487744,
294912: 4198400,
360448: 2151682112,
425984: 0,
491520: 2151677952,
557056: 4096,
622592: 2151682048,
688128: 4194304,
753664: 4160,
819200: 2147483648,
884736: 4194368,
950272: 4198464,
1015808: 2147483712,
1048576: 4194368,
1114112: 4198400,
1179648: 2147483712,
1245184: 0,
1310720: 4160,
1376256: 2151678016,
1441792: 2151682048,
1507328: 2147487808,
1572864: 2151682112,
1638400: 2147483648,
1703936: 2151677952,
1769472: 4198464,
1835008: 2147487744,
1900544: 4194304,
1966080: 64,
2031616: 4096,
1081344: 2151677952,
1146880: 2151682112,
1212416: 0,
1277952: 4198400,
1343488: 4194368,
1409024: 2147483648,
1474560: 2147487808,
1540096: 64,
1605632: 2147483712,
1671168: 4096,
1736704: 2147487744,
1802240: 2151678016,
1867776: 4160,
1933312: 2151682048,
1998848: 4194304,
2064384: 4198464
}, {
0: 128,
4096: 17039360,
8192: 262144,
12288: 536870912,
16384: 537133184,
20480: 16777344,
24576: 553648256,
28672: 262272,
32768: 16777216,
36864: 537133056,
40960: 536871040,
45056: 553910400,
49152: 553910272,
53248: 0,
57344: 17039488,
61440: 553648128,
2048: 17039488,
6144: 553648256,
10240: 128,
14336: 17039360,
18432: 262144,
22528: 537133184,
26624: 553910272,
30720: 536870912,
34816: 537133056,
38912: 0,
43008: 553910400,
47104: 16777344,
51200: 536871040,
55296: 553648128,
59392: 16777216,
63488: 262272,
65536: 262144,
69632: 128,
73728: 536870912,
77824: 553648256,
81920: 16777344,
86016: 553910272,
90112: 537133184,
94208: 16777216,
98304: 553910400,
102400: 553648128,
106496: 17039360,
110592: 537133056,
114688: 262272,
118784: 536871040,
122880: 0,
126976: 17039488,
67584: 553648256,
71680: 16777216,
75776: 17039360,
79872: 537133184,
83968: 536870912,
88064: 17039488,
92160: 128,
96256: 553910272,
100352: 262272,
104448: 553910400,
108544: 0,
112640: 553648128,
116736: 16777344,
120832: 262144,
124928: 537133056,
129024: 536871040
}, {
0: 268435464,
256: 8192,
512: 270532608,
768: 270540808,
1024: 268443648,
1280: 2097152,
1536: 2097160,
1792: 268435456,
2048: 0,
2304: 268443656,
2560: 2105344,
2816: 8,
3072: 270532616,
3328: 2105352,
3584: 8200,
3840: 270540800,
128: 270532608,
384: 270540808,
640: 8,
896: 2097152,
1152: 2105352,
1408: 268435464,
1664: 268443648,
1920: 8200,
2176: 2097160,
2432: 8192,
2688: 268443656,
2944: 270532616,
3200: 0,
3456: 270540800,
3712: 2105344,
3968: 268435456,
4096: 268443648,
4352: 270532616,
4608: 270540808,
4864: 8200,
5120: 2097152,
5376: 268435456,
5632: 268435464,
5888: 2105344,
6144: 2105352,
6400: 0,
6656: 8,
6912: 270532608,
7168: 8192,
7424: 268443656,
7680: 270540800,
7936: 2097160,
4224: 8,
4480: 2105344,
4736: 2097152,
4992: 268435464,
5248: 268443648,
5504: 8200,
5760: 270540808,
6016: 270532608,
6272: 270540800,
6528: 270532616,
6784: 8192,
7040: 2105352,
7296: 2097160,
7552: 0,
7808: 268435456,
8064: 268443656
}, {
0: 1048576,
16: 33555457,
32: 1024,
48: 1049601,
64: 34604033,
80: 0,
96: 1,
112: 34603009,
128: 33555456,
144: 1048577,
160: 33554433,
176: 34604032,
192: 34603008,
208: 1025,
224: 1049600,
240: 33554432,
8: 34603009,
24: 0,
40: 33555457,
56: 34604032,
72: 1048576,
88: 33554433,
104: 33554432,
120: 1025,
136: 1049601,
152: 33555456,
168: 34603008,
184: 1048577,
200: 1024,
216: 34604033,
232: 1,
248: 1049600,
256: 33554432,
272: 1048576,
288: 33555457,
304: 34603009,
320: 1048577,
336: 33555456,
352: 34604032,
368: 1049601,
384: 1025,
400: 34604033,
416: 1049600,
432: 1,
448: 0,
464: 34603008,
480: 33554433,
496: 1024,
264: 1049600,
280: 33555457,
296: 34603009,
312: 1,
328: 33554432,
344: 1048576,
360: 1025,
376: 34604032,
392: 33554433,
408: 34603008,
424: 0,
440: 34604033,
456: 1049601,
472: 1024,
488: 33555456,
504: 1048577
}, {
0: 134219808,
1: 131072,
2: 134217728,
3: 32,
4: 131104,
5: 134350880,
6: 134350848,
7: 2048,
8: 134348800,
9: 134219776,
10: 133120,
11: 134348832,
12: 2080,
13: 0,
14: 134217760,
15: 133152,
2147483648: 2048,
2147483649: 134350880,
2147483650: 134219808,
2147483651: 134217728,
2147483652: 134348800,
2147483653: 133120,
2147483654: 133152,
2147483655: 32,
2147483656: 134217760,
2147483657: 2080,
2147483658: 131104,
2147483659: 134350848,
2147483660: 0,
2147483661: 134348832,
2147483662: 134219776,
2147483663: 131072,
16: 133152,
17: 134350848,
18: 32,
19: 2048,
20: 134219776,
21: 134217760,
22: 134348832,
23: 131072,
24: 0,
25: 131104,
26: 134348800,
27: 134219808,
28: 134350880,
29: 133120,
30: 2080,
31: 134217728,
2147483664: 131072,
2147483665: 2048,
2147483666: 134348832,
2147483667: 133152,
2147483668: 32,
2147483669: 134348800,
2147483670: 134217728,
2147483671: 134219808,
2147483672: 134350880,
2147483673: 134217760,
2147483674: 134219776,
2147483675: 0,
2147483676: 133120,
2147483677: 2080,
2147483678: 131104,
2147483679: 134350848
}]
, f = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679]
, n = a.DES = i.extend({
_doReset: function() {
for (var e = this._key.words, t = [], r = 0; r < 56; r++) {
var i = u[r] - 1;
t[r] = e[i >>> 5] >>> 31 - i % 32 & 1
}
for (var a = this._subKeys = [], n = 0; n < 16; n++) {
var s = a[n] = []
, o = c[n];
for (r = 0; r < 24; r++)
s[r / 6 | 0] |= t[(d[r] - 1 + o) % 28] << 31 - r % 6,
s[4 + (r / 6 | 0)] |= t[28 + (d[r + 24] - 1 + o) % 28] << 31 - r % 6;
for (s[0] = s[0] << 1 | s[0] >>> 31,
r = 1; r < 7; r++)
s[r] = s[r] >>> 4 * (r - 1) + 3;
s[7] = s[7] << 5 | s[7] >>> 27
}
var l = this._invSubKeys = [];
for (r = 0; r < 16; r++)
l[r] = a[15 - r]
},
encryptBlock: function(e, t) {
this._doCryptBlock(e, t, this._subKeys)
},
decryptBlock: function(e, t) {
this._doCryptBlock(e, t, this._invSubKeys)
},
_doCryptBlock: function(e, t, r) {
this._lBlock = e[t],
this._rBlock = e[t + 1],
p.call(this, 4, 252645135),
p.call(this, 16, 65535),
g.call(this, 2, 858993459),
g.call(this, 8, 16711935),
p.call(this, 1, 1431655765);
for (var i = 0; i < 16; i++) {
for (var a = r[i], n = this._lBlock, s = this._rBlock, o = 0, l = 0; l < 8; l++)
o |= h[l][((s ^ a[l]) & f[l]) >>> 0];
this._lBlock = s,
this._rBlock = n ^ o
}
var u = this._lBlock;
this._lBlock = this._rBlock,
this._rBlock = u,
p.call(this, 1, 1431655765),
g.call(this, 8, 16711935),
g.call(this, 2, 858993459),
p.call(this, 16, 65535),
p.call(this, 4, 252645135),
e[t] = this._lBlock,
e[t + 1] = this._rBlock
},
keySize: 2,
ivSize: 2,
blockSize: 2
});
function p(e, t) {
var r = (this._lBlock >>> e ^ this._rBlock) & t;
this._rBlock ^= r,
this._lBlock ^= r << e
}
function g(e, t) {
var r = (this._rBlock >>> e ^ this._lBlock) & t;
this._lBlock ^= r,
this._rBlock ^= r << e
}
e.DES = i._createHelper(n);
var s = a.TripleDES = i.extend({
_doReset: function() {
var e = this._key.words;
this._des1 = n.createEncryptor(r.create(e.slice(0, 2))),
this._des2 = n.createEncryptor(r.create(e.slice(2, 4))),
this._des3 = n.createEncryptor(r.create(e.slice(4, 6)))
},
encryptBlock: function(e, t) {
this._des1.encryptBlock(e, t),
this._des2.decryptBlock(e, t),
this._des3.encryptBlock(e, t)
},
decryptBlock: function(e, t) {
this._des3.decryptBlock(e, t),
this._des2.encryptBlock(e, t),
this._des1.decryptBlock(e, t)
},
keySize: 6,
ivSize: 2,
blockSize: 2
});
e.TripleDES = i._createHelper(s)
}(),
function() {
var e = Oe
, t = e.lib.StreamCipher
, r = e.algo
, i = r.RC4 = t.extend({
_doReset: function() {
for (var e = this._key, t = e.words, r = e.sigBytes, i = this._S = [], a = 0; a < 256; a++)
i[a] = a;
for (var n = a = 0; a < 256; a++) {
var s = a % r
, o = t[s >>> 2] >>> 24 - s % 4 * 8 & 255;
n = (n + i[a] + o) % 256;
var l = i[a];
i[a] = i[n],
i[n] = l
}
this._i = this._j = 0
},
_doProcessBlock: function(e, t) {
e[t] ^= a.call(this)
},
keySize: 8,
ivSize: 0
});
function a() {
for (var e = this._S, t = this._i, r = this._j, i = 0, a = 0; a < 4; a++) {
r = (r + e[t = (t + 1) % 256]) % 256;
var n = e[t];
e[t] = e[r],
e[r] = n,
i |= e[(e[t] + e[r]) % 256] << 24 - 8 * a
}
return this._i = t,
this._j = r,
i
}
e.RC4 = t._createHelper(i);
var n = r.RC4Drop = i.extend({
cfg: i.cfg.extend({
drop: 192
}),
_doReset: function() {
i._doReset.call(this);
for (var e = this.cfg.drop; 0 < e; e--)
a.call(this)
}
});
e.RC4Drop = t._createHelper(n)
}(),
Oe.mode.CTRGladman = function() {
var e = Oe.lib.BlockCipherMode.extend();
function u(e) {
if (255 == (e >> 24 & 255)) {
var t = e >> 16 & 255
, r = e >> 8 & 255
, i = 255 & e;
255 === t ? (t = 0,
255 === r ? (r = 0,
255 === i ? i = 0 : ++i) : ++r) : ++t,
e = 0,
e += t << 16,
e += r << 8,
e += i
} else
e += 1 << 24;
return e
}
var t = e.Encryptor = e.extend({
processBlock: function(e, t) {
var r, i = this._cipher, a = i.blockSize, n = this._iv, s = this._counter;
n && (s = this._counter = n.slice(0),
this._iv = void 0),
0 === ((r = s)[0] = u(r[0])) && (r[1] = u(r[1]));
var o = s.slice(0);
i.encryptBlock(o, 0);
for (var l = 0; l < a; l++)
e[t + l] ^= o[l]
}
});
return e.Decryptor = t,
e
}(),
function() {
var e = Oe
, t = e.lib.StreamCipher
, a = []
, l = []
, u = []
, r = e.algo.Rabbit = t.extend({
_doReset: function() {
for (var e = this._key.words, t = this.cfg.iv, r = 0; r < 4; r++)
e[r] = 16711935 & (e[r] << 8 | e[r] >>> 24) | 4278255360 & (e[r] << 24 | e[r] >>> 8);
var i = this._X = [e[0], e[3] << 16 | e[2] >>> 16, e[1], e[0] << 16 | e[3] >>> 16, e[2], e[1] << 16 | e[0] >>> 16, e[3], e[2] << 16 | e[1] >>> 16]
, a = this._C = [e[2] << 16 | e[2] >>> 16, 4294901760 & e[0] | 65535 & e[1], e[3] << 16 | e[3] >>> 16, 4294901760 & e[1] | 65535 & e[2], e[0] << 16 | e[0] >>> 16, 4294901760 & e[2] | 65535 & e[3], e[1] << 16 | e[1] >>> 16, 4294901760 & e[3] | 65535 & e[0]];
for (r = this._b = 0; r < 4; r++)
h.call(this);
for (r = 0; r < 8; r++)
a[r] ^= i[r + 4 & 7];
if (t) {
var n = t.words
, s = n[0]
, o = n[1]
, l = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8)
, u = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8)
, d = l >>> 16 | 4294901760 & u
, c = u << 16 | 65535 & l;
for (a[0] ^= l,
a[1] ^= d,
a[2] ^= u,
a[3] ^= c,
a[4] ^= l,
a[5] ^= d,
a[6] ^= u,
a[7] ^= c,
r = 0; r < 4; r++)
h.call(this)
}
},
_doProcessBlock: function(e, t) {
var r = this._X;
h.call(this),
a[0] = r[0] ^ r[5] >>> 16 ^ r[3] << 16,
a[1] = r[2] ^ r[7] >>> 16 ^ r[5] << 16,
a[2] = r[4] ^ r[1] >>> 16 ^ r[7] << 16,
a[3] = r[6] ^ r[3] >>> 16 ^ r[1] << 16;
for (var i = 0; i < 4; i++)
a[i] = 16711935 & (a[i] << 8 | a[i] >>> 24) | 4278255360 & (a[i] << 24 | a[i] >>> 8),
e[t + i] ^= a[i]
},
blockSize: 4,
ivSize: 2
});
function h() {
for (var e = this._X, t = this._C, r = 0; r < 8; r++)
l[r] = t[r];
for (t[0] = t[0] + 1295307597 + this._b | 0,
t[1] = t[1] + 3545052371 + (t[0] >>> 0 < l[0] >>> 0 ? 1 : 0) | 0,
t[2] = t[2] + 886263092 + (t[1] >>> 0 < l[1] >>> 0 ? 1 : 0) | 0,
t[3] = t[3] + 1295307597 + (t[2] >>> 0 < l[2] >>> 0 ? 1 : 0) | 0,
t[4] = t[4] + 3545052371 + (t[3] >>> 0 < l[3] >>> 0 ? 1 : 0) | 0,
t[5] = t[5] + 886263092 + (t[4] >>> 0 < l[4] >>> 0 ? 1 : 0) | 0,
t[6] = t[6] + 1295307597 + (t[5] >>> 0 < l[5] >>> 0 ? 1 : 0) | 0,
t[7] = t[7] + 3545052371 + (t[6] >>> 0 < l[6] >>> 0 ? 1 : 0) | 0,
this._b = t[7] >>> 0 < l[7] >>> 0 ? 1 : 0,
r = 0; r < 8; r++) {
var i = e[r] + t[r]
, a = 65535 & i
, n = i >>> 16
, s = ((a * a >>> 17) + a * n >>> 15) + n * n
, o = ((4294901760 & i) * i | 0) + ((65535 & i) * i | 0);
u[r] = s ^ o
}
e[0] = u[0] + (u[7] << 16 | u[7] >>> 16) + (u[6] << 16 | u[6] >>> 16) | 0,
e[1] = u[1] + (u[0] << 8 | u[0] >>> 24) + u[7] | 0,
e[2] = u[2] + (u[1] << 16 | u[1] >>> 16) + (u[0] << 16 | u[0] >>> 16) | 0,
e[3] = u[3] + (u[2] << 8 | u[2] >>> 24) + u[1] | 0,
e[4] = u[4] + (u[3] << 16 | u[3] >>> 16) + (u[2] << 16 | u[2] >>> 16) | 0,
e[5] = u[5] + (u[4] << 8 | u[4] >>> 24) + u[3] | 0,
e[6] = u[6] + (u[5] << 16 | u[5] >>> 16) + (u[4] << 16 | u[4] >>> 16) | 0,
e[7] = u[7] + (u[6] << 8 | u[6] >>> 24) + u[5] | 0
}
e.Rabbit = t._createHelper(r)
}(),
Oe.mode.CTR = (g = Oe.lib.BlockCipherMode.extend(),
v = g.Encryptor = g.extend({
processBlock: function(e, t) {
var r = this._cipher
, i = r.blockSize
, a = this._iv
, n = this._counter;
a && (n = this._counter = a.slice(0),
this._iv = void 0);
var s = n.slice(0);
r.encryptBlock(s, 0),
n[i - 1] = n[i - 1] + 1 | 0;
for (var o = 0; o < i; o++)
e[t + o] ^= s[o]
}
}),
g.Decryptor = v,
g),
function() {
var e = Oe
, t = e.lib.StreamCipher
, a = []
, l = []
, u = []
, r = e.algo.RabbitLegacy = t.extend({
_doReset: function() {
for (var e = this._key.words, t = this.cfg.iv, r = this._X = [e[0], e[3] << 16 | e[2] >>> 16, e[1], e[0] << 16 | e[3] >>> 16, e[2], e[1] << 16 | e[0] >>> 16, e[3], e[2] << 16 | e[1] >>> 16], i = this._C = [e[2] << 16 | e[2] >>> 16, 4294901760 & e[0] | 65535 & e[1], e[3] << 16 | e[3] >>> 16, 4294901760 & e[1] | 65535 & e[2], e[0] << 16 | e[0] >>> 16, 4294901760 & e[2] | 65535 & e[3], e[1] << 16 | e[1] >>> 16, 4294901760 & e[3] | 65535 & e[0]], a = this._b = 0; a < 4; a++)
h.call(this);
for (a = 0; a < 8; a++)
i[a] ^= r[a + 4 & 7];
if (t) {
var n = t.words
, s = n[0]
, o = n[1]
, l = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8)
, u = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8)
, d = l >>> 16 | 4294901760 & u
, c = u << 16 | 65535 & l;
for (i[0] ^= l,
i[1] ^= d,
i[2] ^= u,
i[3] ^= c,
i[4] ^= l,
i[5] ^= d,
i[6] ^= u,
i[7] ^= c,
a = 0; a < 4; a++)
h.call(this)
}
},
_doProcessBlock: function(e, t) {
var r = this._X;
h.call(this),
a[0] = r[0] ^ r[5] >>> 16 ^ r[3] << 16,
a[1] = r[2] ^ r[7] >>> 16 ^ r[5] << 16,
a[2] = r[4] ^ r[1] >>> 16 ^ r[7] << 16,
a[3] = r[6] ^ r[3] >>> 16 ^ r[1] << 16;
for (var i = 0; i < 4; i++)
a[i] = 16711935 & (a[i] << 8 | a[i] >>> 24) | 4278255360 & (a[i] << 24 | a[i] >>> 8),
e[t + i] ^= a[i]
},
blockSize: 4,
ivSize: 2
});
function h() {
for (var e = this._X, t = this._C, r = 0; r < 8; r++)
l[r] = t[r];
for (t[0] = t[0] + 1295307597 + this._b | 0,
t[1] = t[1] + 3545052371 + (t[0] >>> 0 < l[0] >>> 0 ? 1 : 0) | 0,
t[2] = t[2] + 886263092 + (t[1] >>> 0 < l[1] >>> 0 ? 1 : 0) | 0,
t[3] = t[3] + 1295307597 + (t[2] >>> 0 < l[2] >>> 0 ? 1 : 0) | 0,
t[4] = t[4] + 3545052371 + (t[3] >>> 0 < l[3] >>> 0 ? 1 : 0) | 0,
t[5] = t[5] + 886263092 + (t[4] >>> 0 < l[4] >>> 0 ? 1 : 0) | 0,
t[6] = t[6] + 1295307597 + (t[5] >>> 0 < l[5] >>> 0 ? 1 : 0) | 0,
t[7] = t[7] + 3545052371 + (t[6] >>> 0 < l[6] >>> 0 ? 1 : 0) | 0,
this._b = t[7] >>> 0 < l[7] >>> 0 ? 1 : 0,
r = 0; r < 8; r++) {
var i = e[r] + t[r]
, a = 65535 & i
, n = i >>> 16
, s = ((a * a >>> 17) + a * n >>> 15) + n * n
, o = ((4294901760 & i) * i | 0) + ((65535 & i) * i | 0);
u[r] = s ^ o
}
e[0] = u[0] + (u[7] << 16 | u[7] >>> 16) + (u[6] << 16 | u[6] >>> 16) | 0,
e[1] = u[1] + (u[0] << 8 | u[0] >>> 24) + u[7] | 0,
e[2] = u[2] + (u[1] << 16 | u[1] >>> 16) + (u[0] << 16 | u[0] >>> 16) | 0,
e[3] = u[3] + (u[2] << 8 | u[2] >>> 24) + u[1] | 0,
e[4] = u[4] + (u[3] << 16 | u[3] >>> 16) + (u[2] << 16 | u[2] >>> 16) | 0,
e[5] = u[5] + (u[4] << 8 | u[4] >>> 24) + u[3] | 0,
e[6] = u[6] + (u[5] << 16 | u[5] >>> 16) + (u[4] << 16 | u[4] >>> 16) | 0,
e[7] = u[7] + (u[6] << 8 | u[6] >>> 24) + u[5] | 0
}
e.RabbitLegacy = t._createHelper(r)
}(),
Oe.pad.ZeroPadding = {
pad: function(e, t) {
var r = 4 * t;
e.clamp(),
e.sigBytes += r - (e.sigBytes % r || r)
},
unpad: function(e) {
for (var t = e.words, r = e.sigBytes - 1; !(t[r >>> 2] >>> 24 - r % 4 * 8 & 255); )
r--;
e.sigBytes = r + 1
}
},
Oe)
}
, function(e, v) {
var s = ["s", "i", "y", "u", "a", "n", "t", "l", "w", "x"]
, o = [function(e) {
return e
}
, function(e, t, r) {
r = r || "eDu_51Cto_siyuanTlw";
for (var i = v.base64decode(e).split(""), a = v.MD5(t + r).toString(), n = a.length - 1; 0 <= n; n--) {
var s = a[n].charCodeAt() % (i.length - 1);
i.splice(s, 1)
}
return i.join("")
}
, function(e, t, r) {
for (var i = t % 7, a = e.length, n = "", s = 0; s < a / 2; s++) {
var o = 2 * s;
n += 0 == i || s % i == 0 ? e[o] + e[o + 1] : e[o + 1] ? e[o + 1] + e[o] : e[o]
}
var l = v.base64decode(n)
, u = (l.length - 1) / 2
, d = "";
for (s = 0; s < u; s++)
o = 2 * s,
i < s && o++,
d += s % 3 == 0 ? l[o] : l[o + 1];
return d
}
, function(e) {
return e
}
, function(e) {
return e
}
, function(e, t, r) {
var i, a, n, s, o, l, u, d = e.slice(0, 7) + e.slice(10, 12) + e.slice(15, -3), c = "", h = 0, f = 0, p = "";
d = d.split("").reverse().join(""),
i = v.eeb64(d),
a = parseInt(i.substr(0, 1)),
s = (n = i.slice(6, -3)).match(/^\d*/),
o = n.match(/\d*$/),
l = s[0],
u = o[0],
n = n.replace(/^\d*/, "").replace(/\d*$/, "");
for (var g = 0; g < u.length; g++)
c += v.bu(parseInt(u[g]).toString(2), 3);
for (c = c.substr(a),
g = 0; g < c.length; g++)
1 == c[g] ? (p += l[f],
f++) : (p += n[h],
h++);
return p
}
, function(e, t, r) {
for (var i, a = {
B: "0",
q: "1",
r: "2",
C: "3",
w: "4",
x: "5",
V: "6",
e: "7",
f: "8",
D: "9",
9: "a",
4: "b",
5: "c",
7: "d",
m: "e",
n: "f",
o: "g",
H: "h",
I: "i",
N: "j",
O: "k",
P: "l",
Q: "m",
R: "n",
S: "o",
U: "p",
X: "q",
L: "r",
M: "s",
a: "t",
b: "u",
F: "v",
c: "w",
d: "x",
g: "y",
h: "z",
i: "A",
j: "B",
y: "C",
z: "D",
k: "E",
l: "F",
6: "G",
G: "H",
A: "I",
p: "J",
s: "K",
t: "L",
u: "M",
J: "N",
K: "O",
v: "P",
W: "Q",
0: "R",
Y: "S",
Z: "T",
2: "U",
3: "V",
E: "W",
T: "X",
8: "Y",
1: "Z"
}, n = 5, s = "", o = 0, l = "", u = 0, d = 0; d < e.length; d++) {
var c = e[d];
s += a[c] ? a[c] : c
}
for (d = 0; d < 8; d++)
i = 7 == d ? 32 - u : Math.abs(8 - n++),
l += s.substr(o++, 1),
o += i,
u += i;
return l += s.substr(40),
v.eeb64(l.split("").reverse().join(""))
}
, function(e, t, r) {
r = r || "eDu_51Cto_siyuanTlw";
var i = v.eeb64(e)
, a = v.MD5(r + t).toString().slice(0, 16)
, n = i.indexOf(a)
, s = parseInt(i.slice(0, n), 16);
if (!n)
return !1;
var o = i.substr(16 + n);
return o.length == s && o
}
];
v.bu = function(e, t) {
for (var r = t - (e += "").length; 0 < r; r--)
e = "0" + e;
return e
}
,
v.MD5 = function(e) {
var t, a = 0, n = 8;
function o(e, t, r, i, a, n) {
return g((s = g(g(t, e), g(i, n))) << a | s >>> 32 - a, r);
var s
}
function c(e, t, r, i, a, n, s) {
return o(t & r | ~t & i, e, t, a, n, s)
}
function h(e, t, r, i, a, n, s) {
return o(t & i | r & ~i, e, t, a, n, s)
}
function f(e, t, r, i, a, n, s) {
return o(t ^ r ^ i, e, t, a, n, s)
}
function p(e, t, r, i, a, n, s) {
return o(r ^ (t | ~i), e, t, a, n, s)
}
function g(e, t) {
var r = (65535 & e) + (65535 & t);
return (e >> 16) + (t >> 16) + (r >> 16) << 16 | 65535 & r
}
return function(e) {
for (var t = a ? "0123456789ABCDEF" : "0123456789abcdef", r = "", i = 0; i < 4 * e.length; i++)
r += t.charAt(e[i >> 2] >> i % 4 * 8 + 4 & 15) + t.charAt(e[i >> 2] >> i % 4 * 8 & 15);
return r
}(function(e, t) {
e[t >> 5] |= 128 << t % 32,
e[14 + (t + 64 >>> 9 << 4)] = t;
for (var r = 1732584193, i = -271733879, a = -1732584194, n = 271733878, s = 0; s < e.length; s += 16) {
var o = r
, l = i
, u = a
, d = n;
i = p(i = p(i = p(i = p(i = f(i = f(i = f(i = f(i = h(i = h(i = h(i = h(i = c(i = c(i = c(i = c(i, a = c(a, n = c(n, r = c(r, i, a, n, e[s + 0], 7, -680876936), i, a, e[s + 1], 12, -389564586), r, i, e[s + 2], 17, 606105819), n, r, e[s + 3], 22, -1044525330), a = c(a, n = c(n, r = c(r, i, a, n, e[s + 4], 7, -176418897), i, a, e[s + 5], 12, 1200080426), r, i, e[s + 6], 17, -1473231341), n, r, e[s + 7], 22, -45705983), a = c(a, n = c(n, r = c(r, i, a, n, e[s + 8], 7, 1770035416), i, a, e[s + 9], 12, -1958414417), r, i, e[s + 10], 17, -42063), n, r, e[s + 11], 22, -1990404162), a = c(a, n = c(n, r = c(r, i, a, n, e[s + 12], 7, 1804603682), i, a, e[s + 13], 12, -40341101), r, i, e[s + 14], 17, -1502002290), n, r, e[s + 15], 22, 1236535329), a = h(a, n = h(n, r = h(r, i, a, n, e[s + 1], 5, -165796510), i, a, e[s + 6], 9, -1069501632), r, i, e[s + 11], 14, 643717713), n, r, e[s + 0], 20, -373897302), a = h(a, n = h(n, r = h(r, i, a, n, e[s + 5], 5, -701558691), i, a, e[s + 10], 9, 38016083), r, i, e[s + 15], 14, -660478335), n, r, e[s + 4], 20, -405537848), a = h(a, n = h(n, r = h(r, i, a, n, e[s + 9], 5, 568446438), i, a, e[s + 14], 9, -1019803690), r, i, e[s + 3], 14, -187363961), n, r, e[s + 8], 20, 1163531501), a = h(a, n = h(n, r = h(r, i, a, n, e[s + 13], 5, -1444681467), i, a, e[s + 2], 9, -51403784), r, i, e[s + 7], 14, 1735328473), n, r, e[s + 12], 20, -1926607734), a = f(a, n = f(n, r = f(r, i, a, n, e[s + 5], 4, -378558), i, a, e[s + 8], 11, -2022574463), r, i, e[s + 11], 16, 1839030562), n, r, e[s + 14], 23, -35309556), a = f(a, n = f(n, r = f(r, i, a, n, e[s + 1], 4, -1530992060), i, a, e[s + 4], 11, 1272893353), r, i, e[s + 7], 16, -155497632), n, r, e[s + 10], 23, -1094730640), a = f(a, n = f(n, r = f(r, i, a, n, e[s + 13], 4, 681279174), i, a, e[s + 0], 11, -358537222), r, i, e[s + 3], 16, -722521979), n, r, e[s + 6], 23, 76029189), a = f(a, n = f(n, r = f(r, i, a, n, e[s + 9], 4, -640364487), i, a, e[s + 12], 11, -421815835), r, i, e[s + 15], 16, 530742520), n, r, e[s + 2], 23, -995338651), a = p(a, n = p(n, r = p(r, i, a, n, e[s + 0], 6, -198630844), i, a, e[s + 7], 10, 1126891415), r, i, e[s + 14], 15, -1416354905), n, r, e[s + 5], 21, -57434055), a = p(a, n = p(n, r = p(r, i, a, n, e[s + 12], 6, 1700485571), i, a, e[s + 3], 10, -1894986606), r, i, e[s + 10], 15, -1051523), n, r, e[s + 1], 21, -2054922799), a = p(a, n = p(n, r = p(r, i, a, n, e[s + 8], 6, 1873313359), i, a, e[s + 15], 10, -30611744), r, i, e[s + 6], 15, -1560198380), n, r, e[s + 13], 21, 1309151649), a = p(a, n = p(n, r = p(r, i, a, n, e[s + 4], 6, -145523070), i, a, e[s + 11], 10, -1120210379), r, i, e[s + 2], 15, 718787259), n, r, e[s + 9], 21, -343485551),
r = g(r, o),
i = g(i, l),
a = g(a, u),
n = g(n, d)
}
return Array(r, i, a, n)
}(function(e) {
for (var t = Array(), r = (1 << n) - 1, i = 0; i < e.length * n; i += n)
t[i >> 5] |= (e.charCodeAt(i / n) & r) << i % 32;
return t
}(t = e), t.length * n))
}
,
v.eeb64 = function(e) {
for (var t = "", r = "", i = 0; i < e.length; i++)
t += v.bu("BqrCwxVefD9457mnoHINOPQRSUXLMabFcdghijyzkl6GApstuJKvW0YZ23ET81=_".indexOf(e[i]).toString(2), 6);
for (t = t.substring(t.length % 8),
i = 0; i < Math.ceil(t.length / 8); i++)
r += String.fromCharCode(parseInt(t.substr(8 * i, 8), 2));
return v.base64decode(r)
}
,
v.dec = function(e, t) {
function r(e) {
for (var t = 0; t < s.length; t++)
if (s[t] == e)
return t
}
e[1];
var i = [o[r(e[13])], o[r(e[8])], o[r(e[4])]]
, a = e.substr(0, 1) + e.substr(2, 2) + e.substr(5, 3) + e.substr(9, 4) + e.substr(14);
for (var n in i)
a = i[n](a, t);
return a
}
,
v.base64decode = function(e) {
var t, r, i, a, n, s, o, l = new Array(-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,62,-1,-1,-1,63,52,53,54,55,56,57,58,59,60,61,-1,-1,-1,-1,-1,-1,-1,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,-1,-1,-1,-1,-1,-1,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,-1,-1,-1,-1,-1);
for (s = e.length,
n = 0,
o = ""; n < s; ) {
for (; t = l[255 & e.charCodeAt(n++)],
n < s && -1 == t; )
;
if (-1 == t)
break;
for (; r = l[255 & e.charCodeAt(n++)],
n < s && -1 == r; )
;
if (-1 == r)
break;
o += String.fromCharCode(t << 2 | (48 & r) >> 4);
do {
if (61 == (i = 255 & e.charCodeAt(n++)))
return o;
i = l[i]
} while (n < s && -1 == i);if (-1 == i)
break;
o += String.fromCharCode((15 & r) << 4 | (60 & i) >> 2);
do {
if (61 == (a = 255 & e.charCodeAt(n++)))
return o;
a = l[a]
} while (n < s && -1 == a);if (-1 == a)
break;
o += String.fromCharCode((3 & i) << 6 | a)
}
return o
}
,
v.base64ToArrayBuffer = function(e) {
for (var t = atob(e), r = t.length, i = new Uint8Array(r), a = 0; a < r; a++)
i[a] = t.charCodeAt(a);
return i.buffer
}
,
v.arrayBufferToBase64 = function(e) {
for (var t = "", r = new Uint8Array(e), i = r.byteLength, a = 0; a < i; a++)
t += String.fromCharCode(r[a]);
return btoa(t)
}
}
, function(e, t, r) {
"use strict";
(function(p) {
Object.defineProperty(t, "__esModule", {
value: !0
});
var g = r(22)
, v = r(0)
, m = r(10)
, e = function() {
function e(e, t, r) {
this.observer = e,
this.config = r,
this.remuxer = t
}
return e.prototype.resetInitSegment = function(e, t, r, i) {
this._audioTrack = {
container: "audio/adts",
type: "audio",
id: 0,
sequenceNumber: 0,
isAAC: !0,
samples: [],
len: 0,
manifestCodec: t,
duration: i,
inputTimeScale: 9e4
}
}
,
e.prototype.resetTimeStamp = function() {}
,
e.probe = function(e) {
if (!e)
return !1;
for (var t = (m.default.getID3Data(e, 0) || []).length, r = e.length; t < r; t++)
if (g.probe(e, t))
return v.logger.log("ADTS sync word found !"),
!0;
return !1
}
,
e.prototype.append = function(e, t, r, i) {
for (var a = this._audioTrack, n = m.default.getID3Data(e, 0) || [], s = m.default.getTimeStamp(n), o = p.isFinite(s) ? 90 * s : 9e4 * t, l = 0, u = o, d = e.length, c = n.length, h = [{
pts: u,
dts: u,
data: n
}]; c < d - 1; )
if (g.isHeader(e, c) && c + 5 < d) {
g.initTrackConfig(a, this.observer, e, c, a.manifestCodec);
var f = g.appendFrame(a, e, c, o, l);
if (!f) {
v.logger.log("Unable to parse AAC frame");
break
}
c += f.length,
u = f.sample.pts,
l++
} else
m.default.isHeader(e, c) ? (n = m.default.getID3Data(e, c),
h.push({
pts: u,
dts: u,
data: n
}),
c += n.length) : c++;
this.remuxer.remux(a, {
samples: []
}, {
samples: h,
inputTimeScale: 9e4
}, {
samples: []
}, t, r, i)
}
,
e.prototype.destroy = function() {}
,
e
}();
t.default = e
}
).call(this, r(2).Number)
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var v = r(22)
, o = r(23)
, I = r(1)
, A = r(43)
, i = r(44)
, P = r(0)
, x = r(3)
, a = {
video: 1,
audio: 2,
id3: 3,
text: 4
}
, n = function() {
function C(e, t, r, i) {
this.observer = e,
this.config = r,
this.typeSupported = i,
this.remuxer = t,
this.sampleAes = null
}
return C.prototype.setDecryptData = function(e) {
null != e && null != e.key && "SAMPLE-AES" === e.method ? this.sampleAes = new i.default(this.observer,this.config,e,this.discardEPB) : this.sampleAes = null
}
,
C.probe = function(e) {
var t = C._syncOffset(e);
return !(t < 0 || (t && P.logger.warn("MPEG2-TS detected but first sync word found @ offset " + t + ", junk ahead ?"),
0))
}
,
C._syncOffset = function(e) {
for (var t = Math.min(1e3, e.length - 564), r = 0; r < t; ) {
if (71 === e[r] && 71 === e[r + 188] && 71 === e[r + 376])
return r;
r++
}
return -1
}
,
C.createTrack = function(e, t) {
return {
container: "video" === e || "audio" === e ? "video/mp2t" : void 0,
type: e,
id: a[e],
pid: -1,
inputTimeScale: 9e4,
sequenceNumber: 0,
samples: [],
len: 0,
dropped: "video" === e ? 0 : void 0,
isAAC: "audio" === e || void 0,
duration: "audio" === e ? t : void 0
}
}
,
C.prototype.resetInitSegment = function(e, t, r, i) {
this.pmtParsed = !1,
this._pmtId = -1,
this._avcTrack = C.createTrack("video", i),
this._audioTrack = C.createTrack("audio", i),
this._id3Track = C.createTrack("id3", i),
this._txtTrack = C.createTrack("text", i),
this.aacOverFlow = null,
this.aacLastPTS = null,
this.avcSample = null,
this.audioCodec = t,
this.videoCodec = r,
this._duration = i
}
,
C.prototype.resetTimeStamp = function() {}
,
C.prototype.append = function(e, t, r, i) {
var a, n, s, o, l, u = e.length, d = !1;
this.contiguous = r;
var c = this.pmtParsed
, h = this._avcTrack
, f = this._audioTrack
, p = this._id3Track
, g = h.pid
, v = f.pid
, m = p.pid
, y = this._pmtId
, _ = h.pesData
, E = f.pesData
, S = p.pesData
, T = this._parsePAT
, b = this._parsePMT
, A = this._parsePES
, R = this._parseAVCPES.bind(this)
, D = this._parseAACPES.bind(this)
, k = this._parseMPEGPES.bind(this)
, w = this._parseID3PES.bind(this)
, L = C._syncOffset(e);
for (u -= (u + L) % 188,
a = L; a < u; a += 188)
if (71 === e[a]) {
if (n = !!(64 & e[a + 1]),
s = ((31 & e[a + 1]) << 8) + e[a + 2],
1 < (48 & e[a + 3]) >> 4) {
if ((o = a + 5 + e[a + 4]) === a + 188)
continue
} else
o = a + 4;
switch (s) {
case g:
n && (_ && (l = A(_)) && void 0 !== l.pts && R(l, !1),
_ = {
data: [],
size: 0
}),
_ && (_.data.push(e.subarray(o, a + 188)),
_.size += a + 188 - o);
break;
case v:
n && (E && (l = A(E)) && void 0 !== l.pts && (f.isAAC ? D(l) : k(l)),
E = {
data: [],
size: 0
}),
E && (E.data.push(e.subarray(o, a + 188)),
E.size += a + 188 - o);
break;
case m:
n && (S && (l = A(S)) && void 0 !== l.pts && w(l),
S = {
data: [],
size: 0
}),
S && (S.data.push(e.subarray(o, a + 188)),
S.size += a + 188 - o);
break;
case 0:
n && (o += e[o] + 1),
y = this._pmtId = T(e, o);
break;
case y:
n && (o += e[o] + 1);
var O = b(e, o, !0 === this.typeSupported.mpeg || !0 === this.typeSupported.mp3, null != this.sampleAes);
0 < (g = O.avc) && (h.pid = g),
0 < (v = O.audio) && (f.pid = v,
f.isAAC = O.isAAC),
0 < (m = O.id3) && (p.pid = m),
d && !c && (P.logger.log("reparse from beginning"),
d = !1,
a = L - 188),
c = this.pmtParsed = !0;
break;
case 17:
case 8191:
break;
default:
d = !0
}
} else
this.observer.trigger(I.default.ERROR, {
type: x.ErrorTypes.MEDIA_ERROR,
details: x.ErrorDetails.FRAG_PARSING_ERROR,
fatal: !1,
reason: "TS packet did not start with 0x47"
});
_ && (l = A(_)) && void 0 !== l.pts ? (R(l, !0),
h.pesData = null) : h.pesData = _,
E && (l = A(E)) && void 0 !== l.pts ? (f.isAAC ? D(l) : k(l),
f.pesData = null) : (E && E.size && P.logger.log("last AAC PES packet truncated,might overlap between fragments"),
f.pesData = E),
S && (l = A(S)) && void 0 !== l.pts ? (w(l),
p.pesData = null) : p.pesData = S,
null == this.sampleAes ? this.remuxer.remux(f, h, p, this._txtTrack, t, r, i) : this.decryptAndRemux(f, h, p, this._txtTrack, t, r, i)
}
,
C.prototype.decryptAndRemux = function(e, t, r, i, a, n, s) {
if (e.samples && e.isAAC) {
var o = this;
this.sampleAes.decryptAacSamples(e.samples, 0, function() {
o.decryptAndRemuxAvc(e, t, r, i, a, n, s)
})
} else
this.decryptAndRemuxAvc(e, t, r, i, a, n, s)
}
,
C.prototype.decryptAndRemuxAvc = function(e, t, r, i, a, n, s) {
if (t.samples) {
var o = this;
this.sampleAes.decryptAvcSamples(t.samples, 0, 0, function() {
o.remuxer.remux(e, t, r, i, a, n, s)
})
} else
this.remuxer.remux(e, t, r, i, a, n, s)
}
,
C.prototype.destroy = function() {
this._initPTS = this._initDTS = void 0,
this._duration = 0
}
,
C.prototype._parsePAT = function(e, t) {
return (31 & e[t + 10]) << 8 | e[t + 11]
}
,
C.prototype._parsePMT = function(e, t, r, i) {
var a, n, s = {
audio: -1,
avc: -1,
id3: -1,
isAAC: !0
};
for (a = t + 3 + ((15 & e[t + 1]) << 8 | e[t + 2]) - 4,
t += 12 + ((15 & e[t + 10]) << 8 | e[t + 11]); t < a; ) {
switch (n = (31 & e[t + 1]) << 8 | e[t + 2],
e[t]) {
case 207:
if (!i) {
P.logger.log("unkown stream type:" + e[t]);
break
}
case 15:
-1 === s.audio && (s.audio = n);
break;
case 21:
-1 === s.id3 && (s.id3 = n);
break;
case 219:
if (!i) {
P.logger.log("unkown stream type:" + e[t]);
break
}
case 27:
-1 === s.avc && (s.avc = n);
break;
case 3:
case 4:
r ? -1 === s.audio && (s.audio = n,
s.isAAC = !1) : P.logger.log("MPEG audio found, not supported in this browser for now");
break;
case 36:
P.logger.warn("HEVC stream type found, not supported for now");
break;
default:
P.logger.log("unkown stream type:" + e[t])
}
t += 5 + ((15 & e[t + 3]) << 8 | e[t + 4])
}
return s
}
,
C.prototype._parsePES = function(e) {
var t, r, i, a, n, s, o, l, u = 0, d = e.data;
if (!e || 0 === e.size)
return null;
for (; d[0].length < 19 && 1 < d.length; ) {
var c = new Uint8Array(d[0].length + d[1].length);
c.set(d[0]),
c.set(d[1], d[0].length),
d[0] = c,
d.splice(1, 1)
}
if (1 !== ((t = d[0])[0] << 16) + (t[1] << 8) + t[2])
return null;
if ((i = (t[4] << 8) + t[5]) && i > e.size - 6)
return null;
192 & (r = t[7]) && (4294967295 < (s = 536870912 * (14 & t[9]) + 4194304 * (255 & t[10]) + 16384 * (254 & t[11]) + 128 * (255 & t[12]) + (254 & t[13]) / 2) && (s -= 8589934592),
64 & r ? (4294967295 < (o = 536870912 * (14 & t[14]) + 4194304 * (255 & t[15]) + 16384 * (254 & t[16]) + 128 * (255 & t[17]) + (254 & t[18]) / 2) && (o -= 8589934592),
54e5 < s - o && (P.logger.warn(Math.round((s - o) / 9e4) + "s delta between PTS and DTS, align them"),
s = o)) : o = s),
l = (a = t[8]) + 9,
e.size -= l,
n = new Uint8Array(e.size);
for (var h = 0, f = d.length; h < f; h++) {
var p = (t = d[h]).byteLength;
if (l) {
if (p < l) {
l -= p;
continue
}
t = t.subarray(l),
p -= l,
l = 0
}
n.set(t, u),
u += p
}
return i && (i -= a + 3),
{
data: n,
pts: s,
dts: o,
len: i
}
}
,
C.prototype.pushAccesUnit = function(e, t) {
if (e.units.length && e.frame) {
var r = t.samples
, i = r.length;
!this.config.forceKeyFrameOnDiscontinuity || !0 === e.key || t.sps && (i || this.contiguous) ? (e.id = i,
r.push(e)) : t.dropped++
}
e.debug.length && P.logger.log(e.pts + "/" + e.dts + ":" + e.debug)
}
,
C.prototype._parseAVCPES = function(p, e) {
function g(e, t, r, i) {
return {
key: e,
pts: t,
dts: r,
units: [],
debug: i
}
}
var v, m, y, _ = this, E = this._avcTrack, t = this._parseAVCNALu(p.data), S = this.avcSample, T = !1, b = this.pushAccesUnit.bind(this);
p.data = null,
S && t.length && !E.audFound && (b(S, E),
S = this.avcSample = g(!1, p.pts, p.dts, "")),
t.forEach(function(e) {
switch (e.type) {
case 1:
m = !0,
S || (S = _.avcSample = g(!0, p.pts, p.dts, "")),
S.frame = !0;
var t = e.data;
if (T && 4 < t.length) {
var r = new A.default(t).readSliceType();
2 !== r && 4 !== r && 7 !== r && 9 !== r || (S.key = !0)
}
break;
case 5:
m = !0,
S || (S = _.avcSample = g(!0, p.pts, p.dts, "")),
S.key = !0,
S.frame = !0;
break;
case 6:
m = !0,
(v = new A.default(_.discardEPB(e.data))).readUByte();
for (var i = 0, a = 0, n = !1, s = 0; !n && 1 < v.bytesAvailable; ) {
for (i = 0; i += s = v.readUByte(),
255 === s; )
;
for (a = 0; a += s = v.readUByte(),
255 === s; )
;
if (4 === i && 0 !== v.bytesAvailable) {
if (n = !0,
181 === v.readUByte() && 49 === v.readUShort() && 1195456820 === v.readUInt() && 3 === v.readUByte()) {
var o = v.readUByte()
, l = 31 & o
, u = [o, v.readUByte()];
for (y = 0; y < l; y++)
u.push(v.readUByte()),
u.push(v.readUByte()),
u.push(v.readUByte());
_._insertSampleInOrder(_._txtTrack.samples, {
type: 3,
pts: p.pts,
bytes: u
})
}
} else if (a < v.bytesAvailable)
for (y = 0; y < a; y++)
v.readUByte()
}
break;
case 7:
if (T = m = !0,
!E.sps) {
var d = (v = new A.default(e.data)).readSPS();
E.width = d.width,
E.height = d.height,
E.pixelRatio = d.pixelRatio,
E.sps = [e.data],
E.duration = _._duration;
var c = e.data.subarray(1, 4)
, h = "avc1.";
for (y = 0; y < 3; y++) {
var f = c[y].toString(16);
f.length < 2 && (f = "0" + f),
h += f
}
E.codec = h
}
break;
case 8:
m = !0,
E.pps || (E.pps = [e.data]);
break;
case 9:
m = !1,
E.audFound = !0,
S && b(S, E),
S = _.avcSample = g(!1, p.pts, p.dts, "");
break;
case 12:
m = !1;
break;
default:
m = !1,
S && (S.debug += "unknown NAL " + e.type + " ")
}
S && m && S.units.push(e)
}),
e && S && (b(S, E),
this.avcSample = null)
}
,
C.prototype._insertSampleInOrder = function(e, t) {
var r = e.length;
if (0 < r) {
if (t.pts >= e[r - 1].pts)
e.push(t);
else
for (var i = r - 1; 0 <= i; i--)
if (t.pts < e[i].pts) {
e.splice(i, 0, t);
break
}
} else
e.push(t)
}
,
C.prototype._getLastNalUnit = function() {
var e, t = this.avcSample;
if (!t || 0 === t.units.length) {
var r = this._avcTrack.samples;
t = r[r.length - 1]
}
if (t) {
var i = t.units;
e = i[i.length - 1]
}
return e
}
,
C.prototype._parseAVCNALu = function(e) {
var t, r, i, a, n = 0, s = e.byteLength, o = this._avcTrack, l = o.naluState || 0, u = l, d = [], c = -1;
for (-1 === l && (a = 31 & e[c = 0],
l = 0,
n = 1); n < s; )
if (t = e[n++],
l)
if (1 !== l)
if (t)
if (1 === t) {
var h, f;
0 <= c ? (i = {
data: e.subarray(c, n - l - 1),
type: a
},
d.push(i)) : (h = this._getLastNalUnit()) && (u && n <= 4 - u && h.state && (h.data = h.data.subarray(0, h.data.byteLength - u)),
0 < (r = n - l - 1) && ((f = new Uint8Array(h.data.byteLength + r)).set(h.data, 0),
f.set(e.subarray(0, r), h.data.byteLength),
h.data = f)),
l = n < s ? (a = 31 & e[c = n],
0) : -1
} else
l = 0;
else
l = 3;
else
l = t ? 0 : 2;
else
l = t ? 0 : 1;
return 0 <= c && 0 <= l && (i = {
data: e.subarray(c, s),
type: a,
state: l
},
d.push(i)),
0 === d.length && (h = this._getLastNalUnit()) && ((f = new Uint8Array(h.data.byteLength + e.byteLength)).set(h.data, 0),
f.set(e, h.data.byteLength),
h.data = f),
o.naluState = l,
d
}
,
C.prototype.discardEPB = function(e) {
for (var t, r, i = e.byteLength, a = [], n = 1; n < i - 2; )
0 === e[n] && 0 === e[n + 1] && 3 === e[n + 2] ? (a.push(n + 2),
n += 2) : n++;
if (0 === a.length)
return e;
t = i - a.length,
r = new Uint8Array(t);
var s = 0;
for (n = 0; n < t; s++,
n++)
s === a[0] && (s++,
a.shift()),
r[n] = e[s];
return r
}
,
C.prototype._parseAACPES = function(e) {
var t, r, i, a, n, s = this._audioTrack, o = e.data, l = e.pts, u = this.aacOverFlow, d = this.aacLastPTS;
if (u) {
var c = new Uint8Array(u.byteLength + o.byteLength);
c.set(u, 0),
c.set(o, u.byteLength),
o = c
}
for (i = 0,
n = o.length; i < n - 1 && !v.isHeader(o, i); i++)
;
if (i) {
var h = void 0
, f = void 0;
if (f = i < n - 1 ? (h = "AAC PES did not start with ADTS header,offset:" + i,
!1) : (h = "no ADTS header found in AAC PES",
!0),
P.logger.warn("parsing error:" + h),
this.observer.trigger(I.default.ERROR, {
type: x.ErrorTypes.MEDIA_ERROR,
details: x.ErrorDetails.FRAG_PARSING_ERROR,
fatal: f,
reason: h
}),
f)
return
}
if (v.initTrackConfig(s, this.observer, o, i, this.audioCodec),
r = 0,
t = v.getFrameDuration(s.samplerate),
u && d) {
var p = d + t;
1 < Math.abs(p - l) && (P.logger.log("AAC: align PTS for overlapping frames by " + Math.round((p - l) / 90)),
l = p)
}
for (; i < n; )
if (v.isHeader(o, i) && i + 5 < n) {
var g = v.appendFrame(s, o, i, l, r);
if (!g)
break;
i += g.length,
a = g.sample.pts,
r++
} else
i++;
u = i < n ? o.subarray(i, n) : null,
this.aacOverFlow = u,
this.aacLastPTS = a
}
,
C.prototype._parseMPEGPES = function(e) {
for (var t = e.data, r = t.length, i = 0, a = 0, n = e.pts; a < r; )
if (o.default.isHeader(t, a)) {
var s = o.default.appendFrame(this._audioTrack, t, a, n, i);
if (!s)
break;
a += s.length,
i++
} else
a++
}
,
C.prototype._parseID3PES = function(e) {
this._id3Track.samples.push(e)
}
,
C
}();
t.default = n
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = r(0)
, a = function() {
function e(e) {
this.data = e,
this.bytesAvailable = e.byteLength,
this.word = 0,
this.bitsAvailable = 0
}
return e.prototype.loadWord = function() {
var e = this.data
, t = this.bytesAvailable
, r = e.byteLength - t
, i = new Uint8Array(4)
, a = Math.min(4, t);
if (0 === a)
throw new Error("no bytes available");
i.set(e.subarray(r, r + a)),
this.word = new DataView(i.buffer).getUint32(0),
this.bitsAvailable = 8 * a,
this.bytesAvailable -= a
}
,
e.prototype.skipBits = function(e) {
var t;
this.bitsAvailable > e || (e -= this.bitsAvailable,
e -= (t = e >> 3) >> 3,
this.bytesAvailable -= t,
this.loadWord()),
this.word <<= e,
this.bitsAvailable -= e
}
,
e.prototype.readBits = function(e) {
var t = Math.min(this.bitsAvailable, e)
, r = this.word >>> 32 - t;
return 32 < e && i.logger.error("Cannot read more than 32 bits at a time"),
this.bitsAvailable -= t,
0 < this.bitsAvailable ? this.word <<= t : 0 < this.bytesAvailable && this.loadWord(),
0 < (t = e - t) && this.bitsAvailable ? r << t | this.readBits(t) : r
}
,
e.prototype.skipLZ = function() {
var e;
for (e = 0; e < this.bitsAvailable; ++e)
if (0 != (this.word & 2147483648 >>> e))
return this.word <<= e,
this.bitsAvailable -= e,
e;
return this.loadWord(),
e + this.skipLZ()
}
,
e.prototype.skipUEG = function() {
this.skipBits(1 + this.skipLZ())
}
,
e.prototype.skipEG = function() {
this.skipBits(1 + this.skipLZ())
}
,
e.prototype.readUEG = function() {
var e = this.skipLZ();
return this.readBits(e + 1) - 1
}
,
e.prototype.readEG = function() {
var e = this.readUEG();
return 1 & e ? 1 + e >>> 1 : -1 * (e >>> 1)
}
,
e.prototype.readBoolean = function() {
return 1 === this.readBits(1)
}
,
e.prototype.readUByte = function() {
return this.readBits(8)
}
,
e.prototype.readUShort = function() {
return this.readBits(16)
}
,
e.prototype.readUInt = function() {
return this.readBits(32)
}
,
e.prototype.skipScalingList = function(e) {
var t, r = 8, i = 8;
for (t = 0; t < e; t++)
0 !== i && (i = (r + this.readEG() + 256) % 256),
r = 0 === i ? r : i
}
,
e.prototype.readSPS = function() {
var e, t, r, i, a, n, s, o = 0, l = 0, u = 0, d = 0, c = this.readUByte.bind(this), h = this.readBits.bind(this), f = this.readUEG.bind(this), p = this.readBoolean.bind(this), g = this.skipBits.bind(this), v = this.skipEG.bind(this), m = this.skipUEG.bind(this), y = this.skipScalingList.bind(this);
if (c(),
e = c(),
h(5),
g(3),
c(),
m(),
100 === e || 110 === e || 122 === e || 244 === e || 44 === e || 83 === e || 86 === e || 118 === e || 128 === e) {
var _ = f();
if (3 === _ && g(1),
m(),
m(),
g(1),
p())
for (n = 3 !== _ ? 8 : 12,
s = 0; s < n; s++)
p() && y(s < 6 ? 16 : 64)
}
m();
var E = f();
if (0 === E)
f();
else if (1 === E)
for (g(1),
v(),
v(),
t = f(),
s = 0; s < t; s++)
v();
m(),
g(1),
r = f(),
i = f(),
0 === (a = h(1)) && g(1),
g(1),
p() && (o = f(),
l = f(),
u = f(),
d = f());
var S = [1, 1];
if (p() && p())
switch (c()) {
case 1:
S = [1, 1];
break;
case 2:
S = [12, 11];
break;
case 3:
S = [10, 11];
break;
case 4:
S = [16, 11];
break;
case 5:
S = [40, 33];
break;
case 6:
S = [24, 11];
break;
case 7:
S = [20, 11];
break;
case 8:
S = [32, 11];
break;
case 9:
S = [80, 33];
break;
case 10:
S = [18, 11];
break;
case 11:
S = [15, 11];
break;
case 12:
S = [64, 33];
break;
case 13:
S = [160, 99];
break;
case 14:
S = [4, 3];
break;
case 15:
S = [3, 2];
break;
case 16:
S = [2, 1];
break;
case 255:
S = [c() << 8 | c(), c() << 8 | c()]
}
return {
width: Math.ceil(16 * (r + 1) - 2 * o - 2 * l),
height: (2 - a) * (i + 1) * 16 - (a ? 2 : 4) * (u + d),
pixelRatio: S
}
}
,
e.prototype.readSliceType = function() {
return this.readUByte(),
this.readUEG(),
this.readUEG()
}
,
e
}();
t.default = a
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var a = r(12)
, i = function() {
function e(e, t, r, i) {
this.decryptdata = r,
this.discardEPB = i,
this.decrypter = new a.default(e,t,{
removePKCS7Padding: !1
})
}
return e.prototype.decryptBuffer = function(e, t) {
this.decrypter.decrypt(e, this.decryptdata.key.buffer, this.decryptdata.iv.buffer, t)
}
,
e.prototype.decryptAacSample = function(t, r, i, a) {
var n = t[r].unit
, e = n.subarray(16, n.length - n.length % 16)
, s = e.buffer.slice(e.byteOffset, e.byteOffset + e.length)
, o = this;
this.decryptBuffer(s, function(e) {
e = new Uint8Array(e),
n.set(e, 16),
a || o.decryptAacSamples(t, r + 1, i)
})
}
,
e.prototype.decryptAacSamples = function(e, t, r) {
for (; ; t++) {
if (t >= e.length)
return void r();
if (!(e[t].unit.length < 32)) {
var i = this.decrypter.isSync();
if (this.decryptAacSample(e, t, r, i),
!i)
return
}
}
}
,
e.prototype.getAvcEncryptedData = function(e) {
for (var t = 16 * Math.floor((e.length - 48) / 160) + 16, r = new Int8Array(t), i = 0, a = 32; a <= e.length - 16; a += 160,
i += 16)
r.set(e.subarray(a, a + 16), i);
return r
}
,
e.prototype.getAvcDecryptedUnit = function(e, t) {
t = new Uint8Array(t);
for (var r = 0, i = 32; i <= e.length - 16; i += 160,
r += 16)
e.set(t.subarray(r, r + 16), i);
return e
}
,
e.prototype.decryptAvcSample = function(t, r, i, a, n, s) {
var o = this.discardEPB(n.data)
, e = this.getAvcEncryptedData(o)
, l = this;
this.decryptBuffer(e.buffer, function(e) {
n.data = l.getAvcDecryptedUnit(o, e),
s || l.decryptAvcSamples(t, r, i + 1, a)
})
}
,
e.prototype.decryptAvcSamples = function(e, t, r, i) {
for (; ; t++,
r = 0) {
if (t >= e.length)
return void i();
for (var a = e[t].units; !(r >= a.length); r++) {
var n = a[r];
if (!(n.length <= 48 || 1 !== n.type && 5 !== n.type)) {
var s = this.decrypter.isSync();
if (this.decryptAvcSample(e, t, r, i, n, s),
!s)
return
}
}
}
}
,
e
}();
t.default = i
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var p = r(10)
, a = r(0)
, g = r(23)
, i = function() {
function e(e, t, r) {
this.observer = e,
this.config = r,
this.remuxer = t
}
return e.prototype.resetInitSegment = function(e, t, r, i) {
this._audioTrack = {
container: "audio/mpeg",
type: "audio",
id: -1,
sequenceNumber: 0,
isAAC: !1,
samples: [],
len: 0,
manifestCodec: t,
duration: i,
inputTimeScale: 9e4
}
}
,
e.prototype.resetTimeStamp = function() {}
,
e.probe = function(e) {
var t, r, i = p.default.getID3Data(e, 0);
if (i && void 0 !== p.default.getTimeStamp(i))
for (t = i.length,
r = Math.min(e.length - 1, t + 100); t < r; t++)
if (g.default.probe(e, t))
return a.logger.log("MPEG Audio sync word found !"),
!0;
return !1
}
,
e.prototype.append = function(e, t, r, i) {
for (var a = p.default.getID3Data(e, 0), n = p.default.getTimeStamp(a), s = n ? 90 * n : 9e4 * t, o = a.length, l = e.length, u = 0, d = 0, c = this._audioTrack, h = [{
pts: s,
dts: s,
data: a
}]; o < l; )
if (g.default.isHeader(e, o)) {
var f = g.default.appendFrame(c, e, o, s, u);
if (!f)
break;
o += f.length,
d = f.sample.pts,
u++
} else
p.default.isHeader(e, o) ? (a = p.default.getID3Data(e, o),
h.push({
pts: d,
dts: d,
data: a
}),
o += a.length) : o++;
this.remuxer.remux(c, {
samples: []
}, {
samples: h,
inputTimeScale: 9e4
}, {
samples: []
}, t, r, i)
}
,
e.prototype.destroy = function() {}
,
e
}();
t.default = i
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var K = r(47)
, X = r(48)
, $ = r(1)
, Q = r(3)
, J = r(0)
, i = function() {
function e(e, t, r, i) {
this.observer = e,
this.config = t,
this.typeSupported = r;
var a = navigator.userAgent;
this.isSafari = i && -1 < i.indexOf("Apple") && a && !a.match("CriOS"),
this.ISGenerated = !1
}
return e.prototype.destroy = function() {}
,
e.prototype.resetTimeStamp = function(e) {
this._initPTS = this._initDTS = e
}
,
e.prototype.resetInitSegment = function() {
this.ISGenerated = !1
}
,
e.prototype.remux = function(e, t, r, i, a, n, s) {
if (this.ISGenerated || this.generateIS(e, t, a),
this.ISGenerated) {
var o = e.samples.length
, l = t.samples.length
, u = a
, d = a;
if (o && l) {
var c = (e.samples[0].pts - t.samples[0].pts) / t.inputTimeScale;
u += Math.max(0, c),
d += Math.max(0, -c)
}
if (o) {
e.timescale || (J.logger.warn("regenerate InitSegment as audio detected"),
this.generateIS(e, t, a));
var h = this.remuxAudio(e, u, n, s);
if (l) {
var f = void 0;
h && (f = h.endPTS - h.startPTS),
t.timescale || (J.logger.warn("regenerate InitSegment as video detected"),
this.generateIS(e, t, a)),
this.remuxVideo(t, d, n, f, s)
}
} else if (l) {
var p = this.remuxVideo(t, d, n, 0, s);
p && e.codec && this.remuxEmptyAudio(e, u, n, p)
}
}
r.samples.length && this.remuxID3(r, a),
i.samples.length && this.remuxText(i, a),
this.observer.trigger($.default.FRAG_PARSED)
}
,
e.prototype.generateIS = function(e, t, r) {
var i, a, n = this.observer, s = e.samples, o = t.samples, l = this.typeSupported, u = "audio/mp4", d = {}, c = {
tracks: d
}, h = void 0 === this._initPTS;
if (h && (i = a = 1 / 0),
e.config && s.length && (e.timescale = e.samplerate,
J.logger.log("audio sampling rate : " + e.samplerate),
e.isAAC || (l.mpeg ? (u = "audio/mpeg",
e.codec = "") : l.mp3 && (e.codec = "mp3")),
d.audio = {
container: u,
codec: e.codec,
initSegment: !e.isAAC && l.mpeg ? new Uint8Array : X.default.initSegment([e]),
metadata: {
channelCount: e.channelCount
}
},
h && (i = a = s[0].pts - e.inputTimeScale * r)),
t.sps && t.pps && o.length) {
var f = t.inputTimeScale;
t.timescale = f,
d.video = {
container: "video/mp4",
codec: t.codec,
initSegment: X.default.initSegment([t]),
metadata: {
width: t.width,
height: t.height
}
},
h && (i = Math.min(i, o[0].pts - f * r),
a = Math.min(a, o[0].dts - f * r),
this.observer.trigger($.default.INIT_PTS_FOUND, {
initPTS: i
}))
}
Object.keys(d).length ? (n.trigger($.default.FRAG_PARSING_INIT_SEGMENT, c),
this.ISGenerated = !0,
h && (this._initPTS = i,
this._initDTS = a)) : n.trigger($.default.ERROR, {
type: Q.ErrorTypes.MEDIA_ERROR,
details: Q.ErrorDetails.FRAG_PARSING_ERROR,
fatal: !1,
reason: "no audio/video samples found"
})
}
,
e.prototype.remuxVideo = function(e, t, r, i, a) {
var n, s, o, l, u, d, c, h = 8, f = e.timescale, p = e.samples, g = [], v = p.length, m = this._PTSNormalize, y = this._initPTS, _ = this.nextAvcDts, E = this.isSafari;
if (0 !== v) {
E && (r |= p.length && _ && (a && Math.abs(t - _ / f) < .1 || Math.abs(p[0].pts - _ - y) < f / 5)),
r || (_ = t * f),
p.forEach(function(e) {
e.pts = m(e.pts - y, _),
e.dts = m(e.dts - y, _)
}),
p.sort(function(e, t) {
var r = e.dts - t.dts
, i = e.pts - t.pts;
return r || i || e.id - t.id
});
var S = p.reduce(function(e, t) {
return Math.max(Math.min(e, t.pts - t.dts), -18e3)
}, 0);
if (S < 0) {
J.logger.warn("PTS < DTS detected in video samples, shifting DTS by " + Math.round(S / 90) + " ms to overcome this issue");
for (var T = 0; T < p.length; T++)
p[T].dts += S
}
var b = p[0];
u = Math.max(b.dts, 0),
l = Math.max(b.pts, 0);
var A = Math.round((u - _) / 90);
r && A && (1 < A ? J.logger.log("AVC:" + A + " ms hole between fragments detected,filling it") : A < -1 && J.logger.log("AVC:" + -A + " ms overlapping between fragments detected"),
u = _,
p[0].dts = u,
l = Math.max(l - A, _),
p[0].pts = l,
J.logger.log("Video/PTS/DTS adjusted: " + Math.round(l / 90) + "/" + Math.round(u / 90) + ",delta:" + A + " ms")),
b = p[p.length - 1],
c = Math.max(b.dts, 0),
d = Math.max(b.pts, 0, c),
E && (n = Math.round((c - u) / (p.length - 1)));
var R = 0
, D = 0;
for (T = 0; T < v; T++) {
for (var k = p[T], w = k.units, L = w.length, O = 0, C = 0; C < L; C++)
O += w[C].data.length;
D += O,
R += L,
k.length = O,
k.dts = E ? u + T * n : Math.max(k.dts, u),
k.pts = Math.max(k.pts, k.dts)
}
var I = D + 4 * R + 8;
try {
s = new Uint8Array(I)
} catch (e) {
return void this.observer.trigger($.default.ERROR, {
type: Q.ErrorTypes.MUX_ERROR,
details: Q.ErrorDetails.REMUX_ALLOC_ERROR,
fatal: !1,
bytes: I,
reason: "fail allocating video mdat " + I
})
}
var P = new DataView(s.buffer);
for (P.setUint32(0, I),
s.set(X.default.types.mdat, 4),
T = 0; T < v; T++) {
var x = p[T]
, F = x.units
, M = 0
, B = void 0;
for (C = 0,
L = F.length; C < L; C++) {
var N = F[C]
, U = N.data
, G = N.data.byteLength;
P.setUint32(h, G),
h += 4,
s.set(U, h),
h += G,
M += 4 + G
}
if (E)
B = Math.max(0, n * Math.round((x.pts - x.dts) / n));
else {
if (T < v - 1)
n = p[T + 1].dts - x.dts;
else {
var H = this.config
, j = x.dts - p[0 < T ? T - 1 : T].dts;
if (H.stretchShortVideoTrack) {
var K = H.maxBufferHole
, W = Math.floor(K * f)
, z = (i ? l + i * f : this.nextAudioPts) - x.pts;
W < z ? ((n = z - j) < 0 && (n = j),
J.logger.log("It is approximately " + z / 90 + " ms to the next segment; using duration " + n / 90 + " ms for the last video frame.")) : n = j
} else
n = j
}
B = Math.round(x.pts - x.dts)
}
g.push({
size: M,
duration: n,
cts: B,
flags: {
isLeading: 0,
isDependedOn: 0,
hasRedundancy: 0,
degradPrio: 0,
dependsOn: x.key ? 2 : 1,
isNonSync: x.key ? 0 : 1
}
})
}
this.nextAvcDts = c + n;
var V = e.dropped;
if (e.len = 0,
e.nbNalu = 0,
e.dropped = 0,
g.length && -1 < navigator.userAgent.toLowerCase().indexOf("chrome")) {
var Y = g[0].flags;
Y.dependsOn = 2,
Y.isNonSync = 0
}
e.samples = g,
o = X.default.moof(e.sequenceNumber++, u, e),
e.samples = [];
var q = {
data1: o,
data2: s,
startPTS: l / f,
endPTS: (d + n) / f,
startDTS: u / f,
endDTS: this.nextAvcDts / f,
type: "video",
hasAudio: !1,
hasVideo: !0,
nb: g.length,
dropped: V
};
return this.observer.trigger($.default.FRAG_PARSING_DATA, q),
q
}
}
,
e.prototype.remuxAudio = function(e, t, r, i) {
var a, n, s, o, l, u, d, c = e.inputTimeScale, h = e.timescale, f = c / h, p = (e.isAAC ? 1024 : 1152) * f, g = this._PTSNormalize, v = this._initPTS, m = !e.isAAC && this.typeSupported.mpeg, y = e.samples, _ = [], E = this.nextAudioPts;
if (r |= y.length && E && (i && Math.abs(t - E / c) < .1 || Math.abs(y[0].pts - E - v) < 20 * p),
y.forEach(function(e) {
e.pts = e.dts = g(e.pts - v, t * c)
}),
0 !== (y = y.filter(function(e) {
return 0 <= e.pts
})).length) {
if (r || (E = i ? t * c : y[0].pts),
e.isAAC)
for (var S = this.config.maxAudioFramesDrift, T = 0, b = E; T < y.length; ) {
var A, R = y[T];
A = (P = R.pts) - b;
var D = Math.abs(1e3 * A / c);
if (A <= -S * p)
J.logger.warn("Dropping 1 audio frame @ " + (b / c).toFixed(3) + "s due to " + Math.round(D) + " ms overlap."),
y.splice(T, 1),
e.len -= R.unit.length;
else if (S * p <= A && D < 1e4 && b) {
var k = Math.round(A / p);
J.logger.warn("Injecting " + k + " audio frame @ " + (b / c).toFixed(3) + "s due to " + Math.round(1e3 * A / c) + " ms gap.");
for (var w = 0; w < k; w++) {
var L = Math.max(b, 0);
(s = K.default.getSilentFrame(e.manifestCodec || e.codec, e.channelCount)) || (J.logger.log("Unable to get silent frame for given audio codec; duplicating last frame instead."),
s = R.unit.subarray()),
y.splice(T, 0, {
unit: s,
pts: L,
dts: L
}),
e.len += s.length,
b += p,
T++
}
R.pts = R.dts = b,
b += p,
T++
} else
Math.abs(A),
R.pts = R.dts = b,
b += p,
T++
}
w = 0;
for (var O = y.length; w < O; w++) {
var C = y[w]
, I = C.unit
, P = C.pts;
if (void 0 !== d)
n.duration = Math.round((P - d) / f);
else {
var x = Math.round(1e3 * (P - E) / c)
, F = 0;
if (r && e.isAAC && x) {
if (0 < x && x < 1e4)
F = Math.round((P - E) / p),
J.logger.log(x + " ms hole between AAC samples detected,filling it"),
0 < F && ((s = K.default.getSilentFrame(e.manifestCodec || e.codec, e.channelCount)) || (s = I.subarray()),
e.len += F * s.length);
else if (x < -12) {
J.logger.log("drop overlapping AAC sample, expected/parsed/delta:" + (E / c).toFixed(3) + "s/" + (P / c).toFixed(3) + "s/" + -x + "ms"),
e.len -= I.byteLength;
continue
}
P = E
}
if (u = P,
!(0 < e.len))
return;
var M = m ? e.len : e.len + 8;
a = m ? 0 : 8;
try {
o = new Uint8Array(M)
} catch (e) {
return void this.observer.trigger($.default.ERROR, {
type: Q.ErrorTypes.MUX_ERROR,
details: Q.ErrorDetails.REMUX_ALLOC_ERROR,
fatal: !1,
bytes: M,
reason: "fail allocating audio mdat " + M
})
}
for (m || (new DataView(o.buffer).setUint32(0, M),
o.set(X.default.types.mdat, 4)),
T = 0; T < F; T++)
(s = K.default.getSilentFrame(e.manifestCodec || e.codec, e.channelCount)) || (J.logger.log("Unable to get silent frame for given audio codec; duplicating this frame instead."),
s = I.subarray()),
o.set(s, a),
a += s.byteLength,
n = {
size: s.byteLength,
cts: 0,
duration: 1024,
flags: {
isLeading: 0,
isDependedOn: 0,
hasRedundancy: 0,
degradPrio: 0,
dependsOn: 1
}
},
_.push(n)
}
o.set(I, a);
var B = I.byteLength;
a += B,
n = {
size: B,
cts: 0,
duration: 0,
flags: {
isLeading: 0,
isDependedOn: 0,
hasRedundancy: 0,
degradPrio: 0,
dependsOn: 1
}
},
_.push(n),
d = P
}
var N = 0
, U = _.length;
if (2 <= U && (N = _[U - 2].duration,
n.duration = N),
U) {
this.nextAudioPts = E = d + f * N,
e.len = 0,
e.samples = _,
l = m ? new Uint8Array : X.default.moof(e.sequenceNumber++, u / f, e),
e.samples = [];
var G = u / c
, H = E / c
, j = {
data1: l,
data2: o,
startPTS: G,
endPTS: H,
startDTS: G,
endDTS: H,
type: "audio",
hasAudio: !0,
hasVideo: !1,
nb: U
};
return this.observer.trigger($.default.FRAG_PARSING_DATA, j),
j
}
return null
}
}
,
e.prototype.remuxEmptyAudio = function(e, t, r, i) {
var a = e.inputTimeScale
, n = a / (e.samplerate ? e.samplerate : a)
, s = this.nextAudioPts
, o = (void 0 !== s ? s : i.startDTS * a) + this._initDTS
, l = i.endDTS * a + this._initDTS
, u = 1024 * n
, d = Math.ceil((l - o) / u)
, c = K.default.getSilentFrame(e.manifestCodec || e.codec, e.channelCount);
if (J.logger.warn("remux empty Audio"),
c) {
for (var h = [], f = 0; f < d; f++) {
var p = o + f * u;
h.push({
unit: c,
pts: p,
dts: p
}),
e.len += c.length
}
e.samples = h,
this.remuxAudio(e, t, r)
} else
J.logger.trace("Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!")
}
,
e.prototype.remuxID3 = function(e) {
var t, r = e.samples.length, i = e.inputTimeScale, a = this._initPTS, n = this._initDTS;
if (r) {
for (var s = 0; s < r; s++)
(t = e.samples[s]).pts = (t.pts - a) / i,
t.dts = (t.dts - n) / i;
this.observer.trigger($.default.FRAG_PARSING_METADATA, {
samples: e.samples
})
}
e.samples = []
}
,
e.prototype.remuxText = function(e) {
e.samples.sort(function(e, t) {
return e.pts - t.pts
});
var t, r = e.samples.length, i = e.inputTimeScale, a = this._initPTS;
if (r) {
for (var n = 0; n < r; n++)
(t = e.samples[n]).pts = (t.pts - a) / i;
this.observer.trigger($.default.FRAG_PARSING_USERDATA, {
samples: e.samples
})
}
e.samples = []
}
,
e.prototype._PTSNormalize = function(e, t) {
var r;
if (void 0 === t)
return e;
for (r = t < e ? -8589934592 : 8589934592; 4294967296 < Math.abs(e - t); )
e += r;
return e
}
,
e
}();
t.default = i
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = function() {
function e() {}
return e.getSilentFrame = function(e, t) {
switch (e) {
case "mp4a.40.2":
if (1 === t)
return new Uint8Array([0, 200, 0, 128, 35, 128]);
if (2 === t)
return new Uint8Array([33, 0, 73, 144, 2, 25, 0, 35, 128]);
if (3 === t)
return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 142]);
if (4 === t)
return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 128, 44, 128, 8, 2, 56]);
if (5 === t)
return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 56]);
if (6 === t)
return new Uint8Array([0, 200, 0, 128, 32, 132, 1, 38, 64, 8, 100, 0, 130, 48, 4, 153, 0, 33, 144, 2, 0, 178, 0, 32, 8, 224]);
break;
default:
if (1 === t)
return new Uint8Array([1, 64, 34, 128, 163, 78, 230, 128, 186, 8, 0, 0, 0, 28, 6, 241, 193, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);
if (2 === t)
return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94]);
if (3 === t)
return new Uint8Array([1, 64, 34, 128, 163, 94, 230, 128, 186, 8, 0, 0, 0, 0, 149, 0, 6, 241, 161, 10, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 90, 94])
}
return null
}
,
e
}();
t.default = i
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var o = Math.pow(2, 32) - 1
, i = function() {
function h() {}
return h.init = function() {
var e;
for (e in h.types = {
avc1: [],
avcC: [],
btrt: [],
dinf: [],
dref: [],
esds: [],
ftyp: [],
hdlr: [],
mdat: [],
mdhd: [],
mdia: [],
mfhd: [],
minf: [],
moof: [],
moov: [],
mp4a: [],
".mp3": [],
mvex: [],
mvhd: [],
pasp: [],
sdtp: [],
stbl: [],
stco: [],
stsc: [],
stsd: [],
stsz: [],
stts: [],
tfdt: [],
tfhd: [],
traf: [],
trak: [],
trun: [],
trex: [],
tkhd: [],
vmhd: [],
smhd: []
})
h.types.hasOwnProperty(e) && (h.types[e] = [e.charCodeAt(0), e.charCodeAt(1), e.charCodeAt(2), e.charCodeAt(3)]);
var t = 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])
, r = 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]);
h.HDLR_TYPES = {
video: t,
audio: r
};
var i = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1])
, a = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]);
h.STTS = h.STSC = h.STCO = a,
h.STSZ = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]),
h.VMHD = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]),
h.SMHD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]),
h.STSD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]);
var n = new Uint8Array([105, 115, 111, 109])
, s = new Uint8Array([97, 118, 99, 49])
, o = new Uint8Array([0, 0, 0, 1]);
h.FTYP = h.box(h.types.ftyp, n, o, n, s),
h.DINF = h.box(h.types.dinf, h.box(h.types.dref, i))
}
,
h.box = function(e) {
for (var t, r = Array.prototype.slice.call(arguments, 1), i = 8, a = r.length, n = a; a--; )
i += r[a].byteLength;
for ((t = new Uint8Array(i))[0] = i >> 24 & 255,
t[1] = i >> 16 & 255,
t[2] = i >> 8 & 255,
t[3] = 255 & i,
t.set(e, 4),
a = 0,
i = 8; a < n; a++)
t.set(r[a], i),
i += r[a].byteLength;
return t
}
,
h.hdlr = function(e) {
return h.box(h.types.hdlr, h.HDLR_TYPES[e])
}
,
h.mdat = function(e) {
return h.box(h.types.mdat, e)
}
,
h.mdhd = function(e, t) {
t *= e;
var r = Math.floor(t / (1 + o))
, i = Math.floor(t % (1 + o));
return h.box(h.types.mdhd, new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e, r >> 24, r >> 16 & 255, r >> 8 & 255, 255 & r, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, 85, 196, 0, 0]))
}
,
h.mdia = function(e) {
return h.box(h.types.mdia, h.mdhd(e.timescale, e.duration), h.hdlr(e.type), h.minf(e))
}
,
h.mfhd = function(e) {
return h.box(h.types.mfhd, new Uint8Array([0, 0, 0, 0, e >> 24, e >> 16 & 255, e >> 8 & 255, 255 & e]))
}
,
h.minf = function(e) {
return "audio" === e.type ? h.box(h.types.minf, h.box(h.types.smhd, h.SMHD), h.DINF, h.stbl(e)) : h.box(h.types.minf, h.box(h.types.vmhd, h.VMHD), h.DINF, h.stbl(e))
}
,
h.moof = function(e, t, r) {
return h.box(h.types.moof, h.mfhd(e), h.traf(r, t))
}
,
h.moov = function(e) {
for (var t = e.length, r = []; t--; )
r[t] = h.trak(e[t]);
return h.box.apply(null, [h.types.moov, h.mvhd(e[0].timescale, e[0].duration)].concat(r).concat(h.mvex(e)))
}
,
h.mvex = function(e) {
for (var t = e.length, r = []; t--; )
r[t] = h.trex(e[t]);
return h.box.apply(null, [h.types.mvex].concat(r))
}
,
h.mvhd = function(e, t) {
t *= e;
var r = Math.floor(t / (1 + o))
, i = Math.floor(t % (1 + o))
, a = new Uint8Array([1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, e >> 24 & 255, e >> 16 & 255, e >> 8 & 255, 255 & e, r >> 24, r >> 16 & 255, r >> 8 & 255, 255 & r, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255]);
return h.box(h.types.mvhd, a)
}
,
h.sdtp = function(e) {
var t, r, i = e.samples || [], a = new Uint8Array(4 + i.length);
for (r = 0; r < i.length; r++)
t = i[r].flags,
a[r + 4] = t.dependsOn << 4 | t.isDependedOn << 2 | t.hasRedundancy;
return h.box(h.types.sdtp, a)
}
,
h.stbl = function(e) {
return h.box(h.types.stbl, h.stsd(e), h.box(h.types.stts, h.STTS), h.box(h.types.stsc, h.STSC), h.box(h.types.stsz, h.STSZ), h.box(h.types.stco, h.STCO))
}
,
h.avc1 = function(e) {
var t, r, i, a = [], n = [];
for (t = 0; t < e.sps.length; t++)
i = (r = e.sps[t]).byteLength,
a.push(i >>> 8 & 255),
a.push(255 & i),
a = a.concat(Array.prototype.slice.call(r));
for (t = 0; t < e.pps.length; t++)
i = (r = e.pps[t]).byteLength,
n.push(i >>> 8 & 255),
n.push(255 & i),
n = n.concat(Array.prototype.slice.call(r));
var s = h.box(h.types.avcC, new Uint8Array([1, a[3], a[4], a[5], 255, 224 | e.sps.length].concat(a).concat([e.pps.length]).concat(n)))
, o = e.width
, l = e.height
, u = e.pixelRatio[0]
, d = e.pixelRatio[1];
return h.box(h.types.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, o >> 8 & 255, 255 & o, l >> 8 & 255, 255 & l, 0, 72, 0, 0, 0, 72, 0, 0, 0, 0, 0, 0, 0, 1, 18, 100, 97, 105, 108, 121, 109, 111, 116, 105, 111, 110, 47, 104, 108, 115, 46, 106, 115, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 17, 17]), s, h.box(h.types.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192])), h.box(h.types.pasp, new Uint8Array([u >> 24, u >> 16 & 255, u >> 8 & 255, 255 & u, d >> 24, d >> 16 & 255, d >> 8 & 255, 255 & d])))
}
,
h.esds = function(e) {
var t = e.config.length;
return new Uint8Array([0, 0, 0, 0, 3, 23 + t, 0, 1, 0, 4, 15 + t, 64, 21, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 5].concat([t]).concat(e.config).concat([6, 1, 2]))
}
,
h.mp4a = function(e) {
var t = e.samplerate;
return h.box(h.types.mp4a, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, e.channelCount, 0, 16, 0, 0, 0, 0, t >> 8 & 255, 255 & t, 0, 0]), h.box(h.types.esds, h.esds(e)))
}
,
h.mp3 = function(e) {
var t = e.samplerate;
return h.box(h.types[".mp3"], new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, e.channelCount, 0, 16, 0, 0, 0, 0, t >> 8 & 255, 255 & t, 0, 0]))
}
,
h.stsd = function(e) {
return "audio" === e.type ? e.isAAC || "mp3" !== e.codec ? h.box(h.types.stsd, h.STSD, h.mp4a(e)) : h.box(h.types.stsd, h.STSD, h.mp3(e)) : h.box(h.types.stsd, h.STSD, h.avc1(e))
}
,
h.tkhd = function(e) {
var t = e.id
, r = e.duration * e.timescale
, i = e.width
, a = e.height
, n = Math.floor(r / (1 + o))
, s = Math.floor(r % (1 + o));
return h.box(h.types.tkhd, new Uint8Array([1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, t >> 24 & 255, t >> 16 & 255, t >> 8 & 255, 255 & t, 0, 0, 0, 0, n >> 24, n >> 16 & 255, n >> 8 & 255, 255 & n, s >> 24, s >> 16 & 255, s >> 8 & 255, 255 & s, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 64, 0, 0, 0, i >> 8 & 255, 255 & i, 0, 0, a >> 8 & 255, 255 & a, 0, 0]))
}
,
h.traf = function(e, t) {
var r = h.sdtp(e)
, i = e.id
, a = Math.floor(t / (1 + o))
, n = Math.floor(t % (1 + o));
return h.box(h.types.traf, h.box(h.types.tfhd, new Uint8Array([0, 0, 0, 0, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i])), h.box(h.types.tfdt, new Uint8Array([1, 0, 0, 0, a >> 24, a >> 16 & 255, a >> 8 & 255, 255 & a, n >> 24, n >> 16 & 255, n >> 8 & 255, 255 & n])), h.trun(e, r.length + 16 + 20 + 8 + 16 + 8 + 8), r)
}
,
h.trak = function(e) {
return e.duration = e.duration || 4294967295,
h.box(h.types.trak, h.tkhd(e), h.mdia(e))
}
,
h.trex = function(e) {
var t = e.id;
return h.box(h.types.trex, new Uint8Array([0, 0, 0, 0, t >> 24, t >> 16 & 255, t >> 8 & 255, 255 & t, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1]))
}
,
h.trun = function(e, t) {
var r, i, a, n, s, o, l = e.samples || [], u = l.length, d = 12 + 16 * u, c = new Uint8Array(d);
for (t += 8 + d,
c.set([0, 0, 15, 1, u >>> 24 & 255, u >>> 16 & 255, u >>> 8 & 255, 255 & u, t >>> 24 & 255, t >>> 16 & 255, t >>> 8 & 255, 255 & t], 0),
r = 0; r < u; r++)
a = (i = l[r]).duration,
n = i.size,
s = i.flags,
o = i.cts,
c.set([a >>> 24 & 255, a >>> 16 & 255, a >>> 8 & 255, 255 & a, n >>> 24 & 255, n >>> 16 & 255, n >>> 8 & 255, 255 & n, s.isLeading << 2 | s.dependsOn, s.isDependedOn << 6 | s.hasRedundancy << 4 | s.paddingValue << 1 | s.isNonSync, 61440 & s.degradPrio, 15 & s.degradPrio, o >>> 24 & 255, o >>> 16 & 255, o >>> 8 & 255, 255 & o], 12 + 16 * r);
return h.box(h.types.trun, c)
}
,
h.initSegment = function(e) {
h.types || h.init();
var t, r = h.moov(e);
return (t = new Uint8Array(h.FTYP.byteLength + r.byteLength)).set(h.FTYP),
t.set(r, h.FTYP.byteLength),
t
}
,
h
}();
t.default = i
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var d = r(1)
, i = function() {
function e(e) {
this.observer = e
}
return e.prototype.destroy = function() {}
,
e.prototype.resetTimeStamp = function() {}
,
e.prototype.resetInitSegment = function() {}
,
e.prototype.remux = function(e, t, r, i, a, n, s, o) {
var l = this.observer
, u = "";
e && (u += "audio"),
t && (u += "video"),
l.trigger(d.default.FRAG_PARSING_DATA, {
data1: o,
startPTS: a,
startDTS: a,
type: u,
hasAudio: !!e,
hasVideo: !!t,
nb: 1,
dropped: 0
}),
l.trigger(d.default.FRAG_PARSED)
}
,
e
}();
t.default = i
}
, function(e, t, r) {
"use strict";
var i = Object.prototype.hasOwnProperty
, f = "~";
function a() {}
function n(e, t, r, i, a) {
if ("function" != typeof r)
throw new TypeError("The listener must be a function");
var n = new function(e, t, r) {
this.fn = e,
this.context = t,
this.once = r || !1
}
(r,i || e,a)
, s = f ? f + t : t;
return e._events[s] ? e._events[s].fn ? e._events[s] = [e._events[s], n] : e._events[s].push(n) : (e._events[s] = n,
e._eventsCount++),
e
}
function u(e, t) {
0 == --e._eventsCount ? e._events = new a : delete e._events[t]
}
function s() {
this._events = new a,
this._eventsCount = 0
}
Object.create && (a.prototype = Object.create(null),
(new a).__proto__ || (f = !1)),
s.prototype.eventNames = function() {
var e, t, r = [];
if (0 === this._eventsCount)
return r;
for (t in e = this._events)
i.call(e, t) && r.push(f ? t.slice(1) : t);
return Object.getOwnPropertySymbols ? r.concat(Object.getOwnPropertySymbols(e)) : r
}
,
s.prototype.listeners = function(e) {
var t = f ? f + e : e
, r = this._events[t];
if (!r)
return [];
if (r.fn)
return [r.fn];
for (var i = 0, a = r.length, n = new Array(a); i < a; i++)
n[i] = r[i].fn;
return n
}
,
s.prototype.listenerCount = function(e) {
var t = f ? f + e : e
, r = this._events[t];
return r ? r.fn ? 1 : r.length : 0
}
,
s.prototype.emit = function(e, t, r, i, a, n) {
var s = f ? f + e : e;
if (!this._events[s])
return !1;
var o, l, u = this._events[s], d = arguments.length;
if (u.fn) {
switch (u.once && this.removeListener(e, u.fn, void 0, !0),
d) {
case 1:
return u.fn.call(u.context),
!0;
case 2:
return u.fn.call(u.context, t),
!0;
case 3:
return u.fn.call(u.context, t, r),
!0;
case 4:
return u.fn.call(u.context, t, r, i),
!0;
case 5:
return u.fn.call(u.context, t, r, i, a),
!0;
case 6:
return u.fn.call(u.context, t, r, i, a, n),
!0
}
for (l = 1,
o = new Array(d - 1); l < d; l++)
o[l - 1] = arguments[l];
u.fn.apply(u.context, o)
} else {
var c, h = u.length;
for (l = 0; l < h; l++)
switch (u[l].once && this.removeListener(e, u[l].fn, void 0, !0),
d) {
case 1:
u[l].fn.call(u[l].context);
break;
case 2:
u[l].fn.call(u[l].context, t);
break;
case 3:
u[l].fn.call(u[l].context, t, r);
break;
case 4:
u[l].fn.call(u[l].context, t, r, i);
break;
default:
if (!o)
for (c = 1,
o = new Array(d - 1); c < d; c++)
o[c - 1] = arguments[c];
u[l].fn.apply(u[l].context, o)
}
}
return !0
}
,
s.prototype.on = function(e, t, r) {
return n(this, e, t, r, !1)
}
,
s.prototype.once = function(e, t, r) {
return n(this, e, t, r, !0)
}
,
s.prototype.removeListener = function(e, t, r, i) {
var a = f ? f + e : e;
if (!this._events[a])
return this;
if (!t)
return u(this, a),
this;
var n = this._events[a];
if (n.fn)
n.fn !== t || i && !n.once || r && n.context !== r || u(this, a);
else {
for (var s = 0, o = [], l = n.length; s < l; s++)
(n[s].fn !== t || i && !n[s].once || r && n[s].context !== r) && o.push(n[s]);
o.length ? this._events[a] = 1 === o.length ? o[0] : o : u(this, a)
}
return this
}
,
s.prototype.removeAllListeners = function(e) {
var t;
return e ? (t = f ? f + e : e,
this._events[t] && u(this, t)) : (this._events = new a,
this._eventsCount = 0),
this
}
,
s.prototype.off = s.prototype.removeListener,
s.prototype.addListener = s.prototype.on,
s.prefixed = f,
s.EventEmitter = s,
e.exports = s
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var s = r(21)
, o = r(1)
, l = r(0)
, u = r(52);
t.default = function(a) {
var i = new u.EventEmitter;
i.trigger = function(e) {
for (var t = [], r = 1; r < arguments.length; r++)
t[r - 1] = arguments[r];
i.emit.apply(i, [e, e].concat(t))
}
,
i.off = function(e) {
for (var t = [], r = 1; r < arguments.length; r++)
t[r - 1] = arguments[r];
i.removeListener.apply(i, [e].concat(t))
}
;
function n(e, t) {
a.postMessage({
event: e,
data: t
})
}
a.addEventListener("message", function(e) {
var t = e.data;
switch (t.cmd) {
case "init":
var r = JSON.parse(t.config);
a.demuxer = new s.default(i,t.typeSupported,r,t.vendor),
l.enableLogs(r.debug),
n("init", null);
break;
case "demux":
a.demuxer.push(t.data, t.decryptdata, t.initSegment, t.audioCodec, t.videoCodec, t.timeOffset, t.discontinuity, t.trackSwitch, t.contiguous, t.duration, t.accurateTimeOffset, t.defaultInitPTS, t.url)
}
}),
i.on(o.default.FRAG_DECRYPTED, n),
i.on(o.default.FRAG_PARSING_INIT_SEGMENT, n),
i.on(o.default.FRAG_PARSED, n),
i.on(o.default.ERROR, n),
i.on(o.default.FRAG_PARSING_METADATA, n),
i.on(o.default.FRAG_PARSING_USERDATA, n),
i.on(o.default.INIT_PTS_FOUND, n),
i.on(o.default.FRAG_PARSING_DATA, function(e, t) {
var r = []
, i = {
event: e,
data: t
};
t.data1 && (i.data1 = t.data1.buffer,
r.push(t.data1.buffer),
delete t.data1),
t.data2 && (i.data2 = t.data2.buffer,
r.push(t.data2.buffer),
delete t.data2),
a.postMessage(i, r)
})
}
}
, function(e, t) {
function i() {
this._events = this._events || {},
this._maxListeners = this._maxListeners || void 0
}
function l(e) {
return "function" == typeof e
}
function u(e) {
return "object" == typeof e && null !== e
}
function d(e) {
return void 0 === e
}
((e.exports = i).EventEmitter = i).prototype._events = void 0,
i.prototype._maxListeners = void 0,
i.defaultMaxListeners = 10,
i.prototype.setMaxListeners = function(e) {
if ("number" != typeof e || e < 0 || isNaN(e))
throw TypeError("n must be a positive number");
return this._maxListeners = e,
this
}
,
i.prototype.emit = function(e) {
var t, r, i, a, n, s;
if (this._events || (this._events = {}),
"error" === e && (!this._events.error || u(this._events.error) && !this._events.error.length)) {
if ((t = arguments[1])instanceof Error)
throw t;
var o = new Error('Uncaught, unspecified "error" event. (' + t + ")");
throw o.context = t,
o
}
if (d(r = this._events[e]))
return !1;
if (l(r))
switch (arguments.length) {
case 1:
r.call(this);
break;
case 2:
r.call(this, arguments[1]);
break;
case 3:
r.call(this, arguments[1], arguments[2]);
break;
default:
a = Array.prototype.slice.call(arguments, 1),
r.apply(this, a)
}
else if (u(r))
for (a = Array.prototype.slice.call(arguments, 1),
i = (s = r.slice()).length,
n = 0; n < i; n++)
s[n].apply(this, a);
return !0
}
,
i.prototype.on = i.prototype.addListener = function(e, t) {
var r;
if (!l(t))
throw TypeError("listener must be a function");
return this._events || (this._events = {}),
this._events.newListener && this.emit("newListener", e, l(t.listener) ? t.listener : t),
this._events[e] ? u(this._events[e]) ? this._events[e].push(t) : this._events[e] = [this._events[e], t] : this._events[e] = t,
u(this._events[e]) && !this._events[e].warned && (r = d(this._maxListeners) ? i.defaultMaxListeners : this._maxListeners) && 0 < r && this._events[e].length > r && (this._events[e].warned = !0,
console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.", this._events[e].length),
"function" == typeof console.trace && console.trace()),
this
}
,
i.prototype.once = function(e, t) {
if (!l(t))
throw TypeError("listener must be a function");
var r = !1;
function i() {
this.removeListener(e, i),
r || (r = !0,
t.apply(this, arguments))
}
return i.listener = t,
this.on(e, i),
this
}
,
i.prototype.removeListener = function(e, t) {
var r, i, a, n;
if (!l(t))
throw TypeError("listener must be a function");
if (!this._events || !this._events[e])
return this;
if (a = (r = this._events[e]).length,
i = -1,
r === t || l(r.listener) && r.listener === t)
delete this._events[e],
this._events.removeListener && this.emit("removeListener", e, t);
else if (u(r)) {
for (n = a; 0 < n--; )
if (r[n] === t || r[n].listener && r[n].listener === t) {
i = n;
break
}
if (i < 0)
return this;
1 === r.length ? (r.length = 0,
delete this._events[e]) : r.splice(i, 1),
this._events.removeListener && this.emit("removeListener", e, t)
}
return this
}
,
i.prototype.removeAllListeners = function(e) {
var t, r;
if (!this._events)
return this;
if (!this._events.removeListener)
return 0 === arguments.length ? this._events = {} : this._events[e] && delete this._events[e],
this;
if (0 === arguments.length) {
for (t in this._events)
"removeListener" !== t && this.removeAllListeners(t);
return this.removeAllListeners("removeListener"),
this._events = {},
this
}
if (l(r = this._events[e]))
this.removeListener(e, r);
else if (r)
for (; r.length; )
this.removeListener(e, r[r.length - 1]);
return delete this._events[e],
this
}
,
i.prototype.listeners = function(e) {
return this._events && this._events[e] ? l(this._events[e]) ? [this._events[e]] : this._events[e].slice() : []
}
,
i.prototype.listenerCount = function(e) {
if (this._events) {
var t = this._events[e];
if (l(t))
return 1;
if (t)
return t.length
}
return 0
}
,
i.listenerCount = function(e, t) {
return e.listenerCount(t)
}
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var l = r(5)
, o = r(3)
, u = r(1)
, d = r(0)
, i = function() {
function e(e, t, r, i) {
this.config = e,
this.media = t,
this.fragmentTracker = r,
this.hls = i,
this.stallReported = !1
}
return e.prototype.poll = function(e, t) {
var r = this.config
, i = this.media
, a = i.currentTime
, n = window.performance.now();
if (a !== e)
return this.stallReported && (d.logger.warn("playback not stuck anymore @" + a + ", after " + Math.round(n - this.stalled) + "ms"),
this.stallReported = !1),
this.stalled = null,
void (this.nudgeRetry = 0);
if (!(i.ended || !i.buffered.length || 2 < i.readyState || i.seeking && l.BufferHelper.isBuffered(i, a))) {
var s = n - this.stalled
, o = l.BufferHelper.bufferInfo(i, a, r.maxBufferHole);
this.stalled ? (1e3 <= s && this._reportStall(o.len),
this._tryFixBufferStall(o, s)) : this.stalled = n
}
}
,
e.prototype._tryFixBufferStall = function(e, t) {
var r = this.config
, i = this.fragmentTracker
, a = this.media.currentTime
, n = i.getPartialFragment(a);
n && this._trySkipBufferHole(n),
.5 < e.len && t > 1e3 * r.highBufferWatchdogPeriod && (this.stalled = null,
this._tryNudgeBuffer())
}
,
e.prototype._reportStall = function(e) {
var t = this.hls
, r = this.media;
this.stallReported || (this.stallReported = !0,
d.logger.warn("Playback stalling at @" + r.currentTime + " due to low buffer"),
t.trigger(u.default.ERROR, {
type: o.ErrorTypes.MEDIA_ERROR,
details: o.ErrorDetails.BUFFER_STALLED_ERROR,
fatal: !1,
buffer: e
}))
}
,
e.prototype._trySkipBufferHole = function(e) {
for (var t = this.hls, r = this.media, i = r.currentTime, a = 0, n = 0; n < r.buffered.length; n++) {
var s = r.buffered.start(n);
if (a <= i && i < s)
return r.currentTime = Math.max(s, r.currentTime + .1),
d.logger.warn("skipping hole, adjusting currentTime from " + i + " to " + r.currentTime),
this.stalled = null,
void t.trigger(u.default.ERROR, {
type: o.ErrorTypes.MEDIA_ERROR,
details: o.ErrorDetails.BUFFER_SEEK_OVER_HOLE,
fatal: !1,
reason: "fragment loaded with buffer holes, seeking from " + i + " to " + r.currentTime,
frag: e
});
a = r.buffered.end(n)
}
}
,
e.prototype._tryNudgeBuffer = function() {
var e = this.config
, t = this.hls
, r = this.media
, i = r.currentTime
, a = (this.nudgeRetry || 0) + 1;
if ((this.nudgeRetry = a) < e.nudgeMaxRetry) {
var n = i + a * e.nudgeOffset;
d.logger.log("adjust currentTime from " + i + " to " + n),
r.currentTime = n,
t.trigger(u.default.ERROR, {
type: o.ErrorTypes.MEDIA_ERROR,
details: o.ErrorDetails.BUFFER_NUDGE_ON_STALL,
fatal: !1
})
} else
d.logger.error("still stuck in high buffer @" + i + " after " + e.nudgeMaxRetry + ", raise fatal error"),
t.trigger(u.default.ERROR, {
type: o.ErrorTypes.MEDIA_ERROR,
details: o.ErrorDetails.BUFFER_STALLED_ERROR,
fatal: !0
})
}
,
e
}();
t.default = i
}
, function(e, t, r) {
"use strict";
var i, a = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var u, d = r(1), n = r(4), c = r(0), h = r(3), f = r(19), p = r(14), l = window.performance, s = function(r) {
function e(e) {
var t = r.call(this, e, d.default.MANIFEST_LOADED, d.default.LEVEL_LOADED, d.default.AUDIO_TRACK_SWITCHED, d.default.FRAG_LOADED, d.default.ERROR) || this;
return t.canload = !1,
t.currentLevelIndex = null,
t.manualLevelIndex = -1,
t.timer = null,
u = /chrome|firefox/.test(navigator.userAgent.toLowerCase()),
t
}
return a(e, r),
e.prototype.onHandlerDestroying = function() {
this.clearTimer(),
this.manualLevelIndex = -1
}
,
e.prototype.clearTimer = function() {
null !== this.timer && (clearTimeout(this.timer),
this.timer = null)
}
,
e.prototype.startLoad = function() {
var e = this._levels;
this.canload = !0,
this.levelRetryCount = 0,
e && e.forEach(function(e) {
e.loadError = 0;
var t = e.details;
t && t.live && (e.details = void 0)
}),
null !== this.timer && this.loadLevel()
}
,
e.prototype.stopLoad = function() {
this.canload = !1
}
,
e.prototype.onManifestLoaded = function(e) {
var t, r = [], i = [], a = {}, n = null, s = !1, o = !1;
if (e.levels.forEach(function(e) {
var t = e.attrs;
e.loadError = 0,
e.fragmentError = !1,
s = s || !!e.videoCodec,
o = o || !!e.audioCodec,
u && e.audioCodec && -1 !== e.audioCodec.indexOf("mp4a.40.34") && (e.audioCodec = void 0),
(n = a[e.bitrate]) ? n.url.push(e.url) : (e.url = [e.url],
e.urlId = 0,
a[e.bitrate] = e,
r.push(e)),
t && (t.AUDIO && (o = !0,
p.addGroupId(n || e, "audio", t.AUDIO)),
t.SUBTITLES && p.addGroupId(n || e, "text", t.SUBTITLES))
}),
s && o && (r = r.filter(function(e) {
return !!e.videoCodec
})),
r = r.filter(function(e) {
var t = e.audioCodec
, r = e.videoCodec;
return (!t || f.isCodecSupportedInMp4(t, "audio")) && (!r || f.isCodecSupportedInMp4(r, "video"))
}),
e.audioTracks && (i = e.audioTracks.filter(function(e) {
return !e.audioCodec || f.isCodecSupportedInMp4(e.audioCodec, "audio")
})).forEach(function(e, t) {
e.id = t
}),
0 < r.length) {
t = r[0].bitrate,
r.sort(function(e, t) {
return e.bitrate - t.bitrate
}),
this._levels = r;
for (var l = 0; l < r.length; l++)
if (r[l].bitrate === t) {
this._firstLevel = l,
c.logger.log("manifest loaded," + r.length + " level(s) found, first bitrate:" + t);
break
}
this.hls.trigger(d.default.MANIFEST_PARSED, {
levels: r,
audioTracks: i,
firstLevel: this._firstLevel,
stats: e.stats,
audio: o,
video: s,
altAudio: i.some(function(e) {
return !!e.url
})
})
} else
this.hls.trigger(d.default.ERROR, {
type: h.ErrorTypes.MEDIA_ERROR,
details: h.ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,
fatal: !0,
url: this.hls.url,
reason: "no level with compatible codecs found in manifest"
})
}
,
Object.defineProperty(e.prototype, "levels", {
get: function() {
return this._levels
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(e.prototype, "level", {
get: function() {
return this.currentLevelIndex
},
set: function(e) {
var t = this._levels;
t && (e = Math.min(e, t.length - 1),
this.currentLevelIndex === e && t[e].details || this.setLevelInternal(e))
},
enumerable: !0,
configurable: !0
}),
e.prototype.setLevelInternal = function(e) {
var t = this._levels
, r = this.hls;
if (0 <= e && e < t.length) {
if (this.clearTimer(),
this.currentLevelIndex !== e) {
c.logger.log("switching to level " + e);
var i = t[this.currentLevelIndex = e];
i.level = e,
r.trigger(d.default.LEVEL_SWITCHING, i)
}
var a = t[e]
, n = a.details;
if (!n || n.live) {
var s = a.urlId;
r.trigger(d.default.LEVEL_LOADING, {
url: a.url[s],
level: e,
id: s
})
}
} else
r.trigger(d.default.ERROR, {
type: h.ErrorTypes.OTHER_ERROR,
details: h.ErrorDetails.LEVEL_SWITCH_ERROR,
level: e,
fatal: !1,
reason: "invalid level idx"
})
}
,
Object.defineProperty(e.prototype, "manualLevel", {
get: function() {
return this.manualLevelIndex
},
set: function(e) {
this.manualLevelIndex = e,
void 0 === this._startLevel && (this._startLevel = e),
-1 !== e && (this.level = e)
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(e.prototype, "firstLevel", {
get: function() {
return this._firstLevel
},
set: function(e) {
this._firstLevel = e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(e.prototype, "startLevel", {
get: function() {
if (void 0 !== this._startLevel)
return this._startLevel;
var e = this.hls.config.startLevel;
return void 0 !== e ? e : this._firstLevel
},
set: function(e) {
this._startLevel = e
},
enumerable: !0,
configurable: !0
}),
e.prototype.onError = function(e) {
if (e.fatal)
e.type === h.ErrorTypes.NETWORK_ERROR && this.clearTimer();
else {
var t, r = !1, i = !1;
switch (e.details) {
case h.ErrorDetails.FRAG_LOAD_ERROR:
case h.ErrorDetails.FRAG_LOAD_TIMEOUT:
case h.ErrorDetails.KEY_LOAD_ERROR:
case h.ErrorDetails.KEY_LOAD_TIMEOUT:
t = e.frag.level,
i = !0;
break;
case h.ErrorDetails.LEVEL_LOAD_ERROR:
case h.ErrorDetails.LEVEL_LOAD_TIMEOUT:
t = e.context.level,
r = !0;
break;
case h.ErrorDetails.REMUX_ALLOC_ERROR:
t = e.level,
r = !0
}
void 0 !== t && this.recoverLevel(e, t, r, i)
}
}
,
e.prototype.recoverLevel = function(e, t, r, i) {
var a, n, s, o = this, l = this.hls.config, u = e.details, d = this._levels[t];
if (d.loadError++,
d.fragmentError = i,
r) {
if (!(this.levelRetryCount + 1 <= l.levelLoadingMaxRetry))
return c.logger.error("level controller, cannot recover from " + u + " error"),
this.currentLevelIndex = null,
this.clearTimer(),
void (e.fatal = !0);
n = Math.min(Math.pow(2, this.levelRetryCount) * l.levelLoadingRetryDelay, l.levelLoadingMaxRetryTimeout),
this.timer = setTimeout(function() {
return o.loadLevel()
}, n),
e.levelRetry = !0,
this.levelRetryCount++,
c.logger.warn("level controller, " + u + ", retry in " + n + " ms, current retry count is " + this.levelRetryCount)
}
(r || i) && (1 < (a = d.url.length) && d.loadError < a ? (d.urlId = (d.urlId + 1) % a,
d.details = void 0,
c.logger.warn("level controller, " + u + " for level " + t + ": switching to redundant URL-id " + d.urlId)) : -1 === this.manualLevelIndex ? (s = 0 === t ? this._levels.length - 1 : t - 1,
c.logger.warn("level controller, " + u + ": switch to " + s),
this.hls.nextAutoLevel = this.currentLevelIndex = s) : i && (c.logger.warn("level controller, " + u + ": reload a fragment"),
this.currentLevelIndex = null))
}
,
e.prototype.onFragLoaded = function(e) {
var t = e.frag;
if (void 0 !== t && "main" === t.type) {
var r = this._levels[t.level];
void 0 !== r && (r.fragmentError = !1,
r.loadError = 0,
this.levelRetryCount = 0)
}
}
,
e.prototype.onLevelLoaded = function(e) {
var t = this
, r = e.level;
if (r === this.currentLevelIndex) {
var i = this._levels[r];
i.fragmentError || (i.loadError = 0,
this.levelRetryCount = 0);
var a = e.details;
if (a.live) {
var n = 1e3 * (a.averagetargetduration ? a.averagetargetduration : a.targetduration)
, s = n
, o = i.details;
o && a.endSN === o.endSN && (s /= 2,
c.logger.log("same live playlist, reload twice faster")),
s -= l.now() - e.stats.trequest,
s = Math.max(n / 2, Math.round(s)),
c.logger.log("live playlist, reload in " + Math.round(s) + " ms"),
this.timer = setTimeout(function() {
return t.loadLevel()
}, s)
} else
this.clearTimer()
}
}
,
e.prototype.onAudioTrackSwitched = function(e) {
var t = this.hls.audioTracks[e.id].groupId
, r = this.hls.levels[this.currentLevelIndex];
if (r && r.audioGroupIds) {
var i = r.audioGroupIds.findIndex(function(e) {
return e === t
});
i !== r.urlId && (r.urlId = i,
this.startLoad())
}
}
,
e.prototype.loadLevel = function() {
if (c.logger.debug("call to loadLevel"),
null !== this.currentLevelIndex && this.canload) {
var e = this._levels[this.currentLevelIndex];
if ("object" == typeof e && 0 < e.url.length) {
var t = this.currentLevelIndex
, r = e.urlId
, i = e.url[r];
c.logger.log("Attempt loading level index " + t + " with URL-id " + r),
this.hls.trigger(d.default.LEVEL_LOADING, {
url: i,
level: t,
id: r
})
}
}
}
,
Object.defineProperty(e.prototype, "nextLoadLevel", {
get: function() {
return -1 !== this.manualLevelIndex ? this.manualLevelIndex : this.hls.nextAutoLevel
},
set: function(e) {
this.level = e,
-1 === this.manualLevelIndex && (this.hls.nextAutoLevel = e)
},
enumerable: !0,
configurable: !0
}),
e
}(n.default);
t.default = s
}
, function(e, t, r) {
"use strict";
var i, a = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var n = r(1)
, s = r(4)
, c = r(10)
, o = r(29)
, l = function(r) {
function e(e) {
var t = r.call(this, e, n.default.MEDIA_ATTACHED, n.default.MEDIA_DETACHING, n.default.FRAG_PARSING_METADATA) || this;
return t.id3Track = void 0,
t.media = void 0,
t
}
return a(e, r),
e.prototype.destroy = function() {
s.default.prototype.destroy.call(this)
}
,
e.prototype.onMediaAttached = function(e) {
this.media = e.media,
this.media
}
,
e.prototype.onMediaDetaching = function() {
o.clearCurrentCues(this.id3Track),
this.id3Track = void 0,
this.media = void 0
}
,
e.prototype.getID3Track = function(e) {
for (var t = 0; t < e.length; t++) {
var r = e[t];
if ("metadata" === r.kind && "id3" === r.label)
return o.sendAddTrackEvent(r, this.media),
r
}
return this.media.addTextTrack("metadata", "id3")
}
,
e.prototype.onFragParsingMetadata = function(e) {
var t = e.frag
, r = e.samples;
this.id3Track || (this.id3Track = this.getID3Track(this.media.textTracks),
this.id3Track.mode = "hidden");
for (var i = window.WebKitDataCue || window.VTTCue || window.TextTrackCue, a = 0; a < r.length; a++) {
var n = c.default.getID3Frames(r[a].data);
if (n) {
var s = r[a].pts
, o = a < r.length - 1 ? r[a + 1].pts : t.endPTS;
s === o && (o += 1e-4);
for (var l = 0; l < n.length; l++) {
var u = n[l];
if (!c.default.isTimeStampFrame(u)) {
var d = new i(s,o,"");
d.value = u,
this.id3Track.addCue(d)
}
}
}
}
}
,
e
}(s.default);
t.default = l
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var a = r(13);
t.isSupported = function() {
var e = a.getMediaSource()
, t = window.SourceBuffer || window.WebKitSourceBuffer
, r = e && "function" == typeof e.isTypeSupported && e.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"')
, i = !t || t.prototype && "function" == typeof t.prototype.appendBuffer && "function" == typeof t.prototype.remove;
return !!r && !!i
}
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = r(58)
, a = r(61)
, n = r(62)
, s = r(63)
, o = r(64)
, l = r(65)
, u = r(66)
, d = r(67)
, c = r(69)
, h = r(73)
, f = r(74)
, p = r(75)
, g = r(76);
t.hlsDefaultConfig = {
autoStartLoad: !0,
startPosition: -1,
defaultAudioCodec: void 0,
debug: !1,
capLevelOnFPSDrop: !1,
capLevelToPlayerSize: !1,
initialLiveManifestSize: 1,
maxBufferLength: 30,
maxBufferSize: 6e7,
maxBufferHole: .5,
lowBufferWatchdogPeriod: .5,
highBufferWatchdogPeriod: 3,
nudgeOffset: .1,
nudgeMaxRetry: 3,
maxFragLookUpTolerance: .25,
liveSyncDurationCount: 3,
liveMaxLatencyDurationCount: 1 / 0,
liveSyncDuration: void 0,
liveMaxLatencyDuration: void 0,
liveDurationInfinity: !1,
liveBackBufferLength: 1 / 0,
maxMaxBufferLength: 600,
enableWorker: !0,
enableSoftwareAES: !0,
manifestLoadingTimeOut: 1e4,
manifestLoadingMaxRetry: 1,
manifestLoadingRetryDelay: 1e3,
manifestLoadingMaxRetryTimeout: 64e3,
startLevel: void 0,
levelLoadingTimeOut: 1e4,
levelLoadingMaxRetry: 4,
levelLoadingRetryDelay: 1e3,
levelLoadingMaxRetryTimeout: 64e3,
fragLoadingTimeOut: 2e4,
fragLoadingMaxRetry: 6,
fragLoadingRetryDelay: 1e3,
fragLoadingMaxRetryTimeout: 64e3,
startFragPrefetch: !1,
fpsDroppedMonitoringPeriod: 5e3,
fpsDroppedMonitoringThreshold: .2,
appendErrorMaxRetry: 3,
loader: o.default,
fLoader: void 0,
pLoader: void 0,
xhrSetup: void 0,
licenseXhrSetup: void 0,
abrController: i.default,
bufferController: a.default,
capLevelController: n.default,
fpsController: s.default,
stretchShortVideoTrack: !1,
maxAudioFramesDrift: 1,
forceKeyFrameOnDiscontinuity: !0,
abrEwmaFastLive: 3,
abrEwmaSlowLive: 9,
abrEwmaFastVoD: 3,
abrEwmaSlowVoD: 9,
abrEwmaDefaultEstimate: 5e5,
abrBandWidthFactor: .95,
abrBandWidthUpFactor: .7,
abrMaxWithRealBitrate: !1,
maxStarvationDelay: 4,
maxLoadingDelay: 4,
minAutoBitrate: 0,
emeEnabled: !1,
widevineLicenseUrl: void 0,
requestMediaKeySystemAccessFunc: g.requestMediaKeySystemAccess
},
t.hlsDefaultConfig.subtitleStreamController = f.SubtitleStreamController,
t.hlsDefaultConfig.subtitleTrackController = h.default,
t.hlsDefaultConfig.timelineController = c.default,
t.hlsDefaultConfig.cueHandler = d,
t.hlsDefaultConfig.enableCEA708Captions = !0,
t.hlsDefaultConfig.enableWebVTT = !0,
t.hlsDefaultConfig.captionsTextTrack1Label = "English",
t.hlsDefaultConfig.captionsTextTrack1LanguageCode = "en",
t.hlsDefaultConfig.captionsTextTrack2Label = "Spanish",
t.hlsDefaultConfig.captionsTextTrack2LanguageCode = "es",
t.hlsDefaultConfig.audioStreamController = u.default,
t.hlsDefaultConfig.audioTrackController = l.default,
t.hlsDefaultConfig.emeController = p.default
}
, function(e, r, l) {
"use strict";
(function(s) {
var i, t = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(r, "__esModule", {
value: !0
});
var _ = l(1)
, a = l(4)
, E = l(5)
, n = l(3)
, S = l(0)
, o = l(59)
, T = window.performance
, e = function(r) {
function e(e) {
var t = r.call(this, e, _.default.FRAG_LOADING, _.default.FRAG_LOADED, _.default.FRAG_BUFFERED, _.default.ERROR) || this;
return t.lastLoadedFragLevel = 0,
t._nextAutoLevel = -1,
t.hls = e,
t.timer = null,
t._bwEstimator = null,
t.onCheck = t._abandonRulesCheck.bind(t),
t
}
return t(e, r),
e.prototype.destroy = function() {
this.clearTimer(),
a.default.prototype.destroy.call(this)
}
,
e.prototype.onFragLoading = function(e) {
var t = e.frag;
if ("main" === t.type && (this.timer || (this.fragCurrent = t,
this.timer = setInterval(this.onCheck, 100)),
!this._bwEstimator)) {
var r = this.hls
, i = r.config
, a = t.level
, n = void 0
, s = void 0;
s = r.levels[a].details.live ? (n = i.abrEwmaFastLive,
i.abrEwmaSlowLive) : (n = i.abrEwmaFastVoD,
i.abrEwmaSlowVoD),
this._bwEstimator = new o.default(r,s,n,i.abrEwmaDefaultEstimate)
}
}
,
e.prototype._abandonRulesCheck = function() {
var e = this.hls
, t = e.media
, r = this.fragCurrent;
if (r) {
var i = r.loader
, a = e.minAutoLevel;
if (!i || i.stats && i.stats.aborted)
return S.logger.warn("frag loader destroy or aborted, disarm abandonRules"),
this.clearTimer(),
void (this._nextAutoLevel = -1);
var n = i.stats;
if (t && n && (!t.paused && 0 !== t.playbackRate || !t.readyState) && r.autoLevel && r.level) {
var s = T.now() - n.trequest
, o = Math.abs(t.playbackRate);
if (s > 500 * r.duration / o) {
var l = e.levels
, u = Math.max(1, n.bw ? n.bw / 8 : 1e3 * n.loaded / s)
, d = l[r.level]
, c = d.realBitrate ? Math.max(d.realBitrate, d.bitrate) : d.bitrate
, h = n.total ? n.total : Math.max(n.loaded, Math.round(r.duration * c / 8))
, f = t.currentTime
, p = (h - n.loaded) / u
, g = (E.BufferHelper.bufferInfo(t, f, e.config.maxBufferHole).end - f) / o;
if (g < 2 * r.duration / o && g < p) {
var v = void 0
, m = void 0;
for (m = r.level - 1; a < m; m--) {
var y = l[m].realBitrate ? Math.max(l[m].realBitrate, l[m].bitrate) : l[m].bitrate;
if ((v = r.duration * y / (6.4 * u)) < g)
break
}
v < p && (S.logger.warn("loading too slow, abort fragment loading and switch to level " + m + ":fragLoadedDelay[" + m + "]<fragLoadedDelay[" + (r.level - 1) + "];bufferStarvationDelay:" + v.toFixed(1) + "<" + p.toFixed(1) + ":" + g.toFixed(1)),
e.nextLoadLevel = m,
this._bwEstimator.sample(s, n.loaded),
i.abort(),
this.clearTimer(),
e.trigger(_.default.FRAG_LOAD_EMERGENCY_ABORTED, {
frag: r,
stats: n
}))
}
}
}
}
}
,
e.prototype.onFragLoaded = function(e) {
var t = e.frag;
if ("main" === t.type && s.isFinite(t.sn)) {
if (this.clearTimer(),
this.lastLoadedFragLevel = t.level,
this._nextAutoLevel = -1,
this.hls.config.abrMaxWithRealBitrate) {
var r = this.hls.levels[t.level]
, i = (r.loaded ? r.loaded.bytes : 0) + e.stats.loaded
, a = (r.loaded ? r.loaded.duration : 0) + e.frag.duration;
r.loaded = {
bytes: i,
duration: a
},
r.realBitrate = Math.round(8 * i / a)
}
if (e.frag.bitrateTest) {
var n = e.stats;
n.tparsed = n.tbuffered = n.tload,
this.onFragBuffered(e)
}
}
}
,
e.prototype.onFragBuffered = function(e) {
var t = e.stats
, r = e.frag;
if (!0 !== t.aborted && "main" === r.type && s.isFinite(r.sn) && (!r.bitrateTest || t.tload === t.tbuffered)) {
var i = t.tparsed - t.trequest;
S.logger.log("latency/loading/parsing/append/kbps:" + Math.round(t.tfirst - t.trequest) + "/" + Math.round(t.tload - t.tfirst) + "/" + Math.round(t.tparsed - t.tload) + "/" + Math.round(t.tbuffered - t.tparsed) + "/" + Math.round(8 * t.loaded / (t.tbuffered - t.trequest))),
this._bwEstimator.sample(i, t.loaded),
t.bwEstimate = this._bwEstimator.getEstimate(),
r.bitrateTest ? this.bitrateTestDelay = i / 1e3 : this.bitrateTestDelay = 0
}
}
,
e.prototype.onError = function(e) {
switch (e.details) {
case n.ErrorDetails.FRAG_LOAD_ERROR:
case n.ErrorDetails.FRAG_LOAD_TIMEOUT:
this.clearTimer()
}
}
,
e.prototype.clearTimer = function() {
clearInterval(this.timer),
this.timer = null
}
,
Object.defineProperty(e.prototype, "nextAutoLevel", {
get: function() {
var e = this._nextAutoLevel
, t = this._bwEstimator;
if (!(-1 === e || t && t.canEstimate()))
return e;
var r = this._nextABRAutoLevel;
return -1 !== e && (r = Math.min(e, r)),
r
},
set: function(e) {
this._nextAutoLevel = e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(e.prototype, "_nextABRAutoLevel", {
get: function() {
var e = this.hls
, t = e.maxAutoLevel
, r = e.levels
, i = e.config
, a = e.minAutoLevel
, n = e.media
, s = this.lastLoadedFragLevel
, o = this.fragCurrent ? this.fragCurrent.duration : 0
, l = n ? n.currentTime : 0
, u = n && 0 !== n.playbackRate ? Math.abs(n.playbackRate) : 1
, d = this._bwEstimator ? this._bwEstimator.getEstimate() : i.abrEwmaDefaultEstimate
, c = (E.BufferHelper.bufferInfo(n, l, i.maxBufferHole).end - l) / u
, h = this._findBestLevel(s, o, d, a, t, c, i.abrBandWidthFactor, i.abrBandWidthUpFactor, r);
if (0 <= h)
return h;
S.logger.trace("rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering");
var f = o ? Math.min(o, i.maxStarvationDelay) : i.maxStarvationDelay
, p = i.abrBandWidthFactor
, g = i.abrBandWidthUpFactor;
if (0 == c) {
var v = this.bitrateTestDelay;
v && (f = (o ? Math.min(o, i.maxLoadingDelay) : i.maxLoadingDelay) - v,
S.logger.trace("bitrate test took " + Math.round(1e3 * v) + "ms, set first fragment max fetchDuration to " + Math.round(1e3 * f) + " ms"),
p = g = 1)
}
return h = this._findBestLevel(s, o, d, a, t, c + f, p, g, r),
Math.max(h, 0)
},
enumerable: !0,
configurable: !0
}),
e.prototype._findBestLevel = function(e, t, r, i, a, n, s, o, l) {
for (var u = a; i <= u; u--) {
var d = l[u];
if (d) {
var c, h = d.details, f = h ? h.totalduration / h.fragments.length : t, p = !!h && h.live;
c = u <= e ? s * r : o * r;
var g = l[u].realBitrate ? Math.max(l[u].realBitrate, l[u].bitrate) : l[u].bitrate
, v = g * f / c;
if (S.logger.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: " + u + "/" + Math.round(c) + "/" + g + "/" + f + "/" + n + "/" + v),
g < c && (!v || p && !this.bitrateTestDelay || v < n))
return u
}
}
return -1
}
,
e
}(a.default);
r.default = e
}
).call(this, l(2).Number)
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var a = r(60)
, i = function() {
function e(e, t, r, i) {
this.hls = e,
this.defaultEstimate_ = i,
this.minWeight_ = .001,
this.minDelayMs_ = 50,
this.slow_ = new a.default(t),
this.fast_ = new a.default(r)
}
return e.prototype.sample = function(e, t) {
var r = 8e3 * t / (e = Math.max(e, this.minDelayMs_))
, i = e / 1e3;
this.fast_.sample(i, r),
this.slow_.sample(i, r)
}
,
e.prototype.canEstimate = function() {
var e = this.fast_;
return e && e.getTotalWeight() >= this.minWeight_
}
,
e.prototype.getEstimate = function() {
return this.canEstimate() ? Math.min(this.fast_.getEstimate(), this.slow_.getEstimate()) : this.defaultEstimate_
}
,
e.prototype.destroy = function() {}
,
e
}();
t.default = i
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = function() {
function e(e) {
this.alpha_ = e ? Math.exp(Math.log(.5) / e) : 0,
this.estimate_ = 0,
this.totalWeight_ = 0
}
return e.prototype.sample = function(e, t) {
var r = Math.pow(this.alpha_, e);
this.estimate_ = t * (1 - r) + r * this.estimate_,
this.totalWeight_ += e
}
,
e.prototype.getTotalWeight = function() {
return this.totalWeight_
}
,
e.prototype.getEstimate = function() {
if (this.alpha_) {
var e = 1 - Math.pow(this.alpha_, this.totalWeight_);
return this.estimate_ / e
}
return this.estimate_
}
,
e
}();
t.default = i
}
, function(e, r, o) {
"use strict";
(function(i) {
var a, t = this && this.__extends || (a = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
a(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(r, "__esModule", {
value: !0
});
var l = o(1)
, n = o(4)
, u = o(0)
, d = o(3)
, s = o(13).getMediaSource()
, e = function(r) {
function e(e) {
var t = r.call(this, e, l.default.MEDIA_ATTACHING, l.default.MEDIA_DETACHING, l.default.MANIFEST_PARSED, l.default.BUFFER_RESET, l.default.BUFFER_APPENDING, l.default.BUFFER_CODECS, l.default.BUFFER_EOS, l.default.BUFFER_FLUSHING, l.default.LEVEL_PTS_UPDATED, l.default.LEVEL_UPDATED) || this;
return t._msDuration = null,
t._levelDuration = null,
t._levelTargetDuration = 10,
t._live = null,
t._objectUrl = null,
t.bufferCodecEventsExpected = 0,
t.onsbue = t.onSBUpdateEnd.bind(t),
t.onsbe = t.onSBUpdateError.bind(t),
t.pendingTracks = {},
t.tracks = {},
t
}
return t(e, r),
e.prototype.destroy = function() {
n.default.prototype.destroy.call(this)
}
,
e.prototype.onLevelPtsUpdated = function(e) {
var t = e.type
, r = this.tracks.audio;
if ("audio" === t && r && "audio/mpeg" === r.container) {
var i = this.sourceBuffer.audio;
if (.1 < Math.abs(i.timestampOffset - e.start)) {
var a = i.updating;
try {
i.abort()
} catch (e) {
u.logger.warn("can not abort audio buffer: " + e)
}
a ? this.audioTimestampOffset = e.start : (u.logger.warn("change mpeg audio timestamp offset from " + i.timestampOffset + " to " + e.start),
i.timestampOffset = e.start)
}
}
}
,
e.prototype.onManifestParsed = function(e) {
this.bufferCodecEventsExpected = e.altAudio ? 2 : 1,
u.logger.log(this.bufferCodecEventsExpected + " bufferCodec event(s) expected")
}
,
e.prototype.onMediaAttaching = function(e) {
var t = this.media = e.media;
if (t) {
var r = this.mediaSource = new s;
this.onmso = this.onMediaSourceOpen.bind(this),
this.onmse = this.onMediaSourceEnded.bind(this),
this.onmsc = this.onMediaSourceClose.bind(this),
r.addEventListener("sourceopen", this.onmso),
r.addEventListener("sourceended", this.onmse),
r.addEventListener("sourceclose", this.onmsc),
t.src = window.URL.createObjectURL(r),
this._objectUrl = t.src
}
}
,
e.prototype.onMediaDetaching = function() {
u.logger.log("media source detaching");
var e = this.mediaSource;
if (e) {
if ("open" === e.readyState)
try {
e.endOfStream()
} catch (e) {
u.logger.warn("onMediaDetaching:" + e.message + " while calling endOfStream")
}
e.removeEventListener("sourceopen", this.onmso),
e.removeEventListener("sourceended", this.onmse),
e.removeEventListener("sourceclose", this.onmsc),
this.media && (window.URL.revokeObjectURL(this._objectUrl),
this.media.src === this._objectUrl ? this.media.removeAttribute("src") : u.logger.warn("media.src was changed by a third party - skip cleanup")),
this.mediaSource = null,
this.media = null,
this._objectUrl = null,
this.pendingTracks = {},
this.tracks = {},
this.sourceBuffer = {},
this.flushRange = [],
this.segments = [],
this.appended = 0
}
this.onmso = this.onmse = this.onmsc = null,
this.hls.trigger(l.default.MEDIA_DETACHED)
}
,
e.prototype.onMediaSourceOpen = function() {
u.logger.log("media source opened"),
this.hls.trigger(l.default.MEDIA_ATTACHED, {
media: this.media
});
var e = this.mediaSource;
e && e.removeEventListener("sourceopen", this.onmso),
this.checkPendingTracks()
}
,
e.prototype.checkPendingTracks = function() {
var e = this.bufferCodecEventsExpected
, t = this.pendingTracks
, r = Object.keys(t).length;
(r && !e || 2 === r) && (this.createSourceBuffers(t),
this.pendingTracks = {},
this.doAppending())
}
,
e.prototype.onMediaSourceClose = function() {
u.logger.log("media source closed")
}
,
e.prototype.onMediaSourceEnded = function() {
u.logger.log("media source ended")
}
,
e.prototype.onSBUpdateEnd = function() {
if (this.audioTimestampOffset) {
var e = this.sourceBuffer.audio;
u.logger.warn("change mpeg audio timestamp offset from " + e.timestampOffset + " to " + this.audioTimestampOffset),
e.timestampOffset = this.audioTimestampOffset,
delete this.audioTimestampOffset
}
this._needsFlush && this.doFlush(),
this._needsEos && this.checkEos(),
this.appending = !1;
var r = this.parent
, t = this.segments.reduce(function(e, t) {
return t.parent === r ? e + 1 : e
}, 0)
, i = {}
, a = this.sourceBuffer;
for (var n in a)
i[n] = a[n].buffered;
this.hls.trigger(l.default.BUFFER_APPENDED, {
parent: r,
pending: t,
timeRanges: i
}),
this._needsFlush || this.doAppending(),
this.updateMediaElementDuration(),
0 === t && this.flushLiveBackBuffer()
}
,
e.prototype.onSBUpdateError = function(e) {
u.logger.error("sourceBuffer error:", e),
this.hls.trigger(l.default.ERROR, {
type: d.ErrorTypes.MEDIA_ERROR,
details: d.ErrorDetails.BUFFER_APPENDING_ERROR,
fatal: !1
})
}
,
e.prototype.onBufferReset = function() {
var e = this.sourceBuffer;
for (var t in e) {
var r = e[t];
try {
this.mediaSource.removeSourceBuffer(r),
r.removeEventListener("updateend", this.onsbue),
r.removeEventListener("error", this.onsbe)
} catch (e) {}
}
this.sourceBuffer = {},
this.flushRange = [],
this.segments = [],
this.appended = 0
}
,
e.prototype.onBufferCodecs = function(t) {
var r = this;
if (!Object.keys(this.sourceBuffer).length) {
Object.keys(t).forEach(function(e) {
r.pendingTracks[e] = t[e]
});
var e = this.mediaSource;
this.bufferCodecEventsExpected = Math.max(this.bufferCodecEventsExpected - 1, 0),
e && "open" === e.readyState && this.checkPendingTracks()
}
}
,
e.prototype.createSourceBuffers = function(e) {
var t = this.sourceBuffer
, r = this.mediaSource;
for (var i in e)
if (!t[i]) {
var a = e[i]
, n = a.levelCodec || a.codec
, s = a.container + ";codecs=" + n;
u.logger.log("creating sourceBuffer(" + s + ")");
try {
var o = t[i] = r.addSourceBuffer(s);
o.addEventListener("updateend", this.onsbue),
o.addEventListener("error", this.onsbe),
this.tracks[i] = {
codec: n,
container: a.container
},
a.buffer = o
} catch (e) {
u.logger.error("error while trying to add sourceBuffer:" + e.message),
this.hls.trigger(l.default.ERROR, {
type: d.ErrorTypes.MEDIA_ERROR,
details: d.ErrorDetails.BUFFER_ADD_CODEC_ERROR,
fatal: !1,
err: e,
mimeType: s
})
}
}
this.hls.trigger(l.default.BUFFER_CREATED, {
tracks: e
})
}
,
e.prototype.onBufferAppending = function(e) {
this._needsFlush || (this.segments ? this.segments.push(e) : this.segments = [e],
this.doAppending())
}
,
e.prototype.onBufferAppendFail = function(e) {
u.logger.error("sourceBuffer error:", e.event),
this.hls.trigger(l.default.ERROR, {
type: d.ErrorTypes.MEDIA_ERROR,
details: d.ErrorDetails.BUFFER_APPENDING_ERROR,
fatal: !1
})
}
,
e.prototype.onBufferEos = function(e) {
var t = this.sourceBuffer
, r = e.type;
for (var i in t)
r && i !== r || t[i].ended || (t[i].ended = !0,
u.logger.log(i + " sourceBuffer now EOS"));
this.checkEos()
}
,
e.prototype.checkEos = function() {
var e = this.sourceBuffer
, t = this.mediaSource;
if (t && "open" === t.readyState) {
for (var r in e) {
var i = e[r];
if (!i.ended)
return;
if (i.updating)
return void (this._needsEos = !0)
}
u.logger.log("all media data are available, signal endOfStream() to MediaSource and stop loading fragment");
try {
t.endOfStream()
} catch (e) {
u.logger.warn("exception while calling mediaSource.endOfStream()")
}
this._needsEos = !1
} else
this._needsEos = !1
}
,
e.prototype.onBufferFlushing = function(e) {
this.flushRange.push({
start: e.startOffset,
end: e.endOffset,
type: e.type
}),
this.flushBufferCounter = 0,
this.doFlush()
}
,
e.prototype.flushLiveBackBuffer = function() {
if (this._live) {
var e = this.hls.config.liveBackBufferLength;
if (isFinite(e) && !(e < 0))
for (var t = this.media.currentTime, r = this.sourceBuffer, i = Object.keys(r), a = t - Math.max(e, this._levelTargetDuration), n = i.length - 1; 0 <= n; n--) {
var s = i[n]
, o = r[s].buffered;
0 < o.length && a > o.start(0) && this.removeBufferRange(s, r[s], 0, a)
}
}
}
,
e.prototype.onLevelUpdated = function(e) {
var t = e.details;
0 < t.fragments.length && (this._levelDuration = t.totalduration + t.fragments[0].start,
this._levelTargetDuration = t.averagetargetduration || t.targetduration || 10,
this._live = t.live,
this.updateMediaElementDuration())
}
,
e.prototype.updateMediaElementDuration = function() {
var e, t = this.hls.config;
if (null !== this._levelDuration && this.media && this.mediaSource && this.sourceBuffer && 0 !== this.media.readyState && "open" === this.mediaSource.readyState) {
for (var r in this.sourceBuffer)
if (!0 === this.sourceBuffer[r].updating)
return;
e = this.media.duration,
null === this._msDuration && (this._msDuration = this.mediaSource.duration),
!0 === this._live && !0 === t.liveDurationInfinity ? (u.logger.log("Media Source duration is set to Infinity"),
this._msDuration = this.mediaSource.duration = 1 / 0) : (this._levelDuration > this._msDuration && this._levelDuration > e || !i.isFinite(e)) && (u.logger.log("Updating Media Source duration to " + this._levelDuration.toFixed(3)),
this._msDuration = this.mediaSource.duration = this._levelDuration)
}
}
,
e.prototype.doFlush = function() {
for (; this.flushRange.length; ) {
var e = this.flushRange[0];
if (!this.flushBuffer(e.start, e.end, e.type))
return void (this._needsFlush = !0);
this.flushRange.shift(),
this.flushBufferCounter = 0
}
if (0 === this.flushRange.length) {
this._needsFlush = !1;
var t = 0
, r = this.sourceBuffer;
try {
for (var i in r)
t += r[i].buffered.length
} catch (e) {
u.logger.error("error while accessing sourceBuffer.buffered")
}
this.appended = t,
this.hls.trigger(l.default.BUFFER_FLUSHED)
}
}
,
e.prototype.doAppending = function() {
var e = this.hls
, t = this.segments
, r = this.sourceBuffer;
if (Object.keys(r).length) {
if (this.media.error)
return this.segments = [],
void u.logger.error("trying to append although a media error occured, flush segment and abort");
if (this.appending)
return;
if (t && t.length) {
var i = t.shift();
try {
var a = r[i.type];
a ? a.updating ? t.unshift(i) : (a.ended = !1,
this.parent = i.parent,
a.appendBuffer(i.data),
this.appendError = 0,
this.appended++,
this.appending = !0) : this.onSBUpdateEnd()
} catch (r) {
u.logger.error("error while trying to append buffer:" + r.message),
t.unshift(i);
var n = {
type: d.ErrorTypes.MEDIA_ERROR,
parent: i.parent
};
22 !== r.code ? (this.appendError ? this.appendError++ : this.appendError = 1,
n.details = d.ErrorDetails.BUFFER_APPEND_ERROR,
this.appendError > e.config.appendErrorMaxRetry ? (u.logger.log("fail " + e.config.appendErrorMaxRetry + " times to append segment in sourceBuffer"),
this.segments = [],
n.fatal = !0) : n.fatal = !1) : (this.segments = [],
n.details = d.ErrorDetails.BUFFER_FULL_ERROR,
n.fatal = !1),
e.trigger(l.default.ERROR, n)
}
}
}
}
,
e.prototype.flushBuffer = function(e, t, r) {
var i, a = this.sourceBuffer;
if (Object.keys(a).length) {
if (u.logger.log("flushBuffer,pos/start/end: " + this.media.currentTime.toFixed(3) + "/" + e + "/" + t),
this.flushBufferCounter < this.appended) {
for (var n in a)
if (!r || n === r) {
if ((i = a[n]).ended = !1,
i.updating)
return u.logger.warn("cannot flush, sb updating in progress"),
!1;
if (this.removeBufferRange(n, i, e, t))
return this.flushBufferCounter++,
!1
}
} else
u.logger.warn("abort flushing too many retries");
u.logger.log("buffer flushed")
}
return !0
}
,
e.prototype.removeBufferRange = function(e, t, r, i) {
try {
for (var a = 0; a < t.buffered.length; a++) {
var n = t.buffered.start(a)
, s = t.buffered.end(a)
, o = Math.max(n, r)
, l = Math.min(s, i);
if (.5 < Math.min(l, s) - o)
return u.logger.log("sb remove " + e + " [" + o + "," + l + "], of [" + n + "," + s + "], pos:" + this.media.currentTime),
t.remove(o, l),
!0
}
} catch (e) {
u.logger.warn("removeBufferRange failed", e)
}
return !1
}
,
e
}(n.default);
r.default = e
}
).call(this, o(2).Number)
}
, function(e, r, s) {
"use strict";
(function(i) {
var a, e = this && this.__extends || (a = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
a(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(r, "__esModule", {
value: !0
});
var n = s(1)
, t = function(r) {
function a(e) {
var t = r.call(this, e, n.default.FPS_DROP_LEVEL_CAPPING, n.default.MEDIA_ATTACHING, n.default.MANIFEST_PARSED, n.default.BUFFER_CODECS, n.default.MEDIA_DETACHING) || this;
return t.autoLevelCapping = i.POSITIVE_INFINITY,
t.firstLevel = null,
t.levels = [],
t.media = null,
t.restrictedLevels = [],
t.timer = null,
t
}
return e(a, r),
a.prototype.destroy = function() {
this.hls.config.capLevelToPlayerSize && (this.media = null,
this._stopCapping())
}
,
a.prototype.onFpsDropLevelCapping = function(e) {
a.isLevelAllowed(e.droppedLevel, this.restrictedLevels) && this.restrictedLevels.push(e.droppedLevel)
}
,
a.prototype.onMediaAttaching = function(e) {
this.media = e.media instanceof window.HTMLVideoElement ? e.media : null
}
,
a.prototype.onManifestParsed = function(e) {
var t = this.hls;
this.restrictedLevels = [],
this.levels = e.levels,
this.firstLevel = e.firstLevel,
t.config.capLevelToPlayerSize && e.video && this._startCapping()
}
,
a.prototype.onBufferCodecs = function(e) {
this.hls.config.capLevelToPlayerSize && e.video && this._startCapping()
}
,
a.prototype.onLevelsUpdated = function(e) {
this.levels = e.levels
}
,
a.prototype.onMediaDetaching = function() {
this._stopCapping()
}
,
a.prototype.detectPlayerSize = function() {
if (this.media) {
var e = this.levels ? this.levels.length : 0;
if (e) {
var t = this.hls;
t.autoLevelCapping = this.getMaxLevel(e - 1),
t.autoLevelCapping > this.autoLevelCapping && t.streamController.nextLevelSwitch(),
this.autoLevelCapping = t.autoLevelCapping
}
}
}
,
a.prototype.getMaxLevel = function(r) {
var i = this;
if (!this.levels)
return -1;
var e = this.levels.filter(function(e, t) {
return a.isLevelAllowed(t, i.restrictedLevels) && t <= r
});
return a.getMaxLevelByMediaSize(e, this.mediaWidth, this.mediaHeight)
}
,
a.prototype._startCapping = function() {
this.timer || (this.autoLevelCapping = i.POSITIVE_INFINITY,
this.hls.firstLevel = this.getMaxLevel(this.firstLevel),
clearInterval(this.timer),
this.timer = setInterval(this.detectPlayerSize.bind(this), 1e3),
this.detectPlayerSize())
}
,
a.prototype._stopCapping = function() {
this.restrictedLevels = [],
this.firstLevel = null,
this.autoLevelCapping = i.POSITIVE_INFINITY,
this.timer && (this.timer = clearInterval(this.timer),
this.timer = null)
}
,
Object.defineProperty(a.prototype, "mediaWidth", {
get: function() {
var e, t = this.media;
return t && (e = t.width || t.clientWidth || t.offsetWidth,
e *= a.contentScaleFactor),
e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(a.prototype, "mediaHeight", {
get: function() {
var e, t = this.media;
return t && (e = t.height || t.clientHeight || t.offsetHeight,
e *= a.contentScaleFactor),
e
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(a, "contentScaleFactor", {
get: function() {
var e = 1;
try {
e = window.devicePixelRatio
} catch (e) {}
return e
},
enumerable: !0,
configurable: !0
}),
a.isLevelAllowed = function(e, t) {
return void 0 === t && (t = []),
-1 === t.indexOf(e)
}
,
a.getMaxLevelByMediaSize = function(e, t, r) {
if (!e || e && !e.length)
return -1;
for (var i = e.length - 1, a = 0; a < e.length; a += 1) {
var n = e[a];
if ((n.width >= t || n.height >= r) && (s = n,
!(o = e[a + 1]) || s.width !== o.width || s.height !== o.height)) {
i = a;
break
}
}
var s, o;
return i
}
,
a
}(s(4).default);
r.default = t
}
).call(this, s(2).Number)
}
, function(e, t, r) {
"use strict";
var i, a = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var d = r(1)
, n = r(4)
, c = r(0)
, h = window.performance
, s = function(t) {
function e(e) {
return t.call(this, e, d.default.MEDIA_ATTACHING) || this
}
return a(e, t),
e.prototype.destroy = function() {
this.timer && clearInterval(this.timer),
this.isVideoPlaybackQualityAvailable = !1
}
,
e.prototype.onMediaAttaching = function(e) {
var t = this.hls.config;
t.capLevelOnFPSDrop && ("function" == typeof (this.video = e.media instanceof window.HTMLVideoElement ? e.media : null).getVideoPlaybackQuality && (this.isVideoPlaybackQualityAvailable = !0),
clearInterval(this.timer),
this.timer = setInterval(this.checkFPSInterval.bind(this), t.fpsDroppedMonitoringPeriod))
}
,
e.prototype.checkFPS = function(e, t, r) {
var i = h.now();
if (t) {
if (this.lastTime) {
var a = i - this.lastTime
, n = r - this.lastDroppedFrames
, s = t - this.lastDecodedFrames
, o = 1e3 * n / a
, l = this.hls;
if (l.trigger(d.default.FPS_DROP, {
currentDropped: n,
currentDecoded: s,
totalDroppedFrames: r
}),
0 < o && n > l.config.fpsDroppedMonitoringThreshold * s) {
var u = l.currentLevel;
c.logger.warn("drop FPS ratio greater than max allowed value for currentLevel: " + u),
0 < u && (-1 === l.autoLevelCapping || l.autoLevelCapping >= u) && (u -= 1,
l.trigger(d.default.FPS_DROP_LEVEL_CAPPING, {
level: u,
droppedLevel: l.currentLevel
}),
l.autoLevelCapping = u,
l.streamController.nextLevelSwitch())
}
}
this.lastTime = i,
this.lastDroppedFrames = r,
this.lastDecodedFrames = t
}
}
,
e.prototype.checkFPSInterval = function() {
var e = this.video;
if (e)
if (this.isVideoPlaybackQualityAvailable) {
var t = e.getVideoPlaybackQuality();
this.checkFPS(e, t.totalVideoFrames, t.droppedVideoFrames)
} else
this.checkFPS(e, e.webkitDecodedFrameCount, e.webkitDroppedFrameCount)
}
,
e
}(n.default);
t.default = s
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var d = r(0)
, c = window.performance
, a = window.XMLHttpRequest
, i = function() {
function e(e) {
e && e.xhrSetup && (this.xhrSetup = e.xhrSetup)
}
return e.prototype.destroy = function() {
this.abort(),
this.loader = null
}
,
e.prototype.abort = function() {
var e = this.loader;
e && 4 !== e.readyState && (this.stats.aborted = !0,
e.abort()),
window.clearTimeout(this.requestTimeout),
this.requestTimeout = null,
window.clearTimeout(this.retryTimeout),
this.retryTimeout = null
}
,
e.prototype.load = function(e, t, r) {
this.context = e,
this.config = t,
this.callbacks = r,
this.stats = {
trequest: c.now(),
retry: 0
},
this.retryDelay = t.retryDelay,
this.loadInternal()
}
,
e.prototype.loadInternal = function() {
var e, t = this.context;
e = this.loader = new a;
var r = this.stats;
r.tfirst = 0,
r.loaded = 0;
var i = this.xhrSetup;
try {
if (i)
try {
i(e, t.url)
} catch (r) {
e.open("GET", t.url, !0),
i(e, t.url)
}
e.readyState || e.open("GET", t.url, !0)
} catch (r) {
return void this.callbacks.onError({
code: e.status,
text: r.message
}, t, e)
}
t.rangeEnd && e.setRequestHeader("Range", "bytes=" + t.rangeStart + "-" + (t.rangeEnd - 1)),
e.onreadystatechange = this.readystatechange.bind(this),
e.onprogress = this.loadprogress.bind(this),
e.responseType = t.responseType,
this.requestTimeout = window.setTimeout(this.loadtimeout.bind(this), this.config.timeout),
e.send()
}
,
e.prototype.readystatechange = function(e) {
var t = e.currentTarget
, r = t.readyState
, i = this.stats
, a = this.context
, n = this.config;
if (!i.aborted && 2 <= r)
if (window.clearTimeout(this.requestTimeout),
0 === i.tfirst && (i.tfirst = Math.max(c.now(), i.trequest)),
4 === r) {
var s = t.status;
if (200 <= s && s < 300) {
i.tload = Math.max(i.tfirst, c.now());
var o, l = void 0;
o = "arraybuffer" === a.responseType ? (l = t.response).byteLength : (l = t.responseText).length,
i.loaded = i.total = o;
var u = {
url: t.responseURL,
data: l
};
this.callbacks.onSuccess(u, i, a, t)
} else
i.retry >= n.maxRetry || 400 <= s && s < 499 ? (d.logger.error(s + " while loading " + a.url),
this.callbacks.onError({
code: s,
text: t.statusText
}, a, t)) : (d.logger.warn(s + " while loading " + a.url + ", retrying in " + this.retryDelay + "..."),
this.destroy(),
this.retryTimeout = window.setTimeout(this.loadInternal.bind(this), this.retryDelay),
this.retryDelay = Math.min(2 * this.retryDelay, n.maxRetryDelay),
i.retry++)
} else
this.requestTimeout = window.setTimeout(this.loadtimeout.bind(this), n.timeout)
}
,
e.prototype.loadtimeout = function() {
d.logger.warn("timeout while loading " + this.context.url),
this.callbacks.onTimeout(this.stats, this.context, null)
}
,
e.prototype.loadprogress = function(e) {
var t = e.currentTarget
, r = this.stats;
r.loaded = e.loaded,
e.lengthComputable && (r.total = e.total);
var i = this.callbacks.onProgress;
i && i(r, this.context, null, t)
}
,
e
}();
t.default = i
}
, function(e, t, r) {
"use strict";
var i, a = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var o = r(1)
, n = r(15)
, l = r(0)
, u = r(3)
, s = function(r) {
function e(e) {
var t = r.call(this, e, o.default.MANIFEST_LOADING, o.default.MANIFEST_PARSED, o.default.AUDIO_TRACK_LOADED, o.default.AUDIO_TRACK_SWITCHED, o.default.LEVEL_LOADED, o.default.ERROR) || this;
return t._trackId = -1,
t._selectDefaultTrack = !0,
t.tracks = [],
t.trackIdBlacklist = Object.create(null),
t.audioGroupId = null,
t
}
return a(e, r),
e.prototype.onManifestLoading = function() {
this.tracks = [],
this._trackId = -1,
this._selectDefaultTrack = !0
}
,
e.prototype.onManifestParsed = function(e) {
var t = this.tracks = e.audioTracks || [];
this.hls.trigger(o.default.AUDIO_TRACKS_UPDATED, {
audioTracks: t
})
}
,
e.prototype.onAudioTrackLoaded = function(e) {
if (e.id >= this.tracks.length)
l.logger.warn("Invalid audio track id:", e.id);
else {
if (l.logger.log("audioTrack " + e.id + " loaded"),
this.tracks[e.id].details = e.details,
e.details.live && !this.hasInterval()) {
var t = 1e3 * e.details.targetduration;
this.setInterval(t)
}
!e.details.live && this.hasInterval() && this.clearInterval()
}
}
,
e.prototype.onAudioTrackSwitched = function(e) {
var t = this.tracks[e.id].groupId;
t && this.audioGroupId !== t && (this.audioGroupId = t)
}
,
e.prototype.onLevelLoaded = function(e) {
var t = this.hls.levels[e.level];
if (t.audioGroupIds) {
var r = t.audioGroupIds[t.urlId];
this.audioGroupId !== r && (this.audioGroupId = r,
this._selectInitialAudioTrack())
}
}
,
e.prototype.onError = function(e) {
e.type === u.ErrorTypes.NETWORK_ERROR && (e.fatal && this.clearInterval(),
e.details === u.ErrorDetails.AUDIO_TRACK_LOAD_ERROR && (l.logger.warn("Network failure on audio-track id:", e.context.id),
this._handleLoadError()))
}
,
Object.defineProperty(e.prototype, "audioTracks", {
get: function() {
return this.tracks
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(e.prototype, "audioTrack", {
get: function() {
return this._trackId
},
set: function(e) {
this._setAudioTrack(e),
this._selectDefaultTrack = !1
},
enumerable: !0,
configurable: !0
}),
e.prototype._setAudioTrack = function(e) {
if (this._trackId === e && this.tracks[this._trackId].details)
l.logger.debug("Same id as current audio-track passed, and track details available -> no-op");
else if (e < 0 || e >= this.tracks.length)
l.logger.warn("Invalid id passed to audio-track controller");
else {
var t = this.tracks[e];
l.logger.log("Now switching to audio-track index " + e),
this.clearInterval(),
this._trackId = e;
var r = t.url
, i = t.type
, a = t.id;
this.hls.trigger(o.default.AUDIO_TRACK_SWITCHING, {
id: a,
type: i,
url: r
}),
this._loadTrackDetailsIfNeeded(t)
}
}
,
e.prototype.doTick = function() {
this._updateTrack(this._trackId)
}
,
e.prototype._selectInitialAudioTrack = function() {
var t = this
, e = this.tracks;
if (e.length) {
var r = this.tracks[this._trackId]
, i = null;
if (r && (i = r.name),
this._selectDefaultTrack) {
var a = e.filter(function(e) {
return e.default
});
a.length ? e = a : l.logger.warn("No default audio tracks defined")
}
var n = !1
, s = function() {
e.forEach(function(e) {
n || t.audioGroupId && e.groupId !== t.audioGroupId || i && i !== e.name || (t._setAudioTrack(e.id),
n = !0)
})
};
s(),
n || (i = null,
s()),
n || (l.logger.error("No track found for running audio group-ID: " + this.audioGroupId),
this.hls.trigger(o.default.ERROR, {
type: u.ErrorTypes.MEDIA_ERROR,
details: u.ErrorDetails.AUDIO_TRACK_LOAD_ERROR,
fatal: !0
}))
}
}
,
e.prototype._needsTrackLoading = function(e) {
var t = e.details
, r = e.url;
return !(t && !t.live || !r)
}
,
e.prototype._loadTrackDetailsIfNeeded = function(e) {
if (this._needsTrackLoading(e)) {
var t = e.url
, r = e.id;
l.logger.log("loading audio-track playlist for id: " + r),
this.hls.trigger(o.default.AUDIO_TRACK_LOADING, {
url: t,
id: r
})
}
}
,
e.prototype._updateTrack = function(e) {
if (!(e < 0 || e >= this.tracks.length)) {
this.clearInterval(),
this._trackId = e,
l.logger.log("trying to update audio-track " + e);
var t = this.tracks[e];
this._loadTrackDetailsIfNeeded(t)
}
}
,
e.prototype._handleLoadError = function() {
this.trackIdBlacklist[this._trackId] = !0;
var e = this._trackId
, t = this.tracks[e]
, r = t.name
, i = t.language
, a = t.groupId;
l.logger.warn("Loading failed on audio track id: " + e + ", group-id: " + a + ', name/language: "' + r + '" / "' + i + '"');
for (var n = e, s = 0; s < this.tracks.length; s++)
if (!this.trackIdBlacklist[s] && this.tracks[s].name === r) {
n = s;
break
}
n !== e ? (l.logger.log("Attempting audio-track fallback id:", n, "group-id:", this.tracks[n].groupId),
this._setAudioTrack(n)) : l.logger.warn('No fallback audio-track found for name/language: "' + r + '" / "' + i + '"')
}
,
e
}(n.default);
t.default = s
}
, function(e, r, n) {
"use strict";
(function(P) {
var i, t = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(r, "__esModule", {
value: !0
});
var x = n(9)
, F = n(5)
, f = n(20)
, M = n(1)
, h = n(14)
, a = n(25)
, p = n(3)
, B = n(0)
, N = n(26)
, U = n(7)
, g = n(11)
, G = n(28)
, H = window.performance
, e = function(i) {
function e(e, t) {
var r = i.call(this, e, M.default.MEDIA_ATTACHED, M.default.MEDIA_DETACHING, M.default.AUDIO_TRACKS_UPDATED, M.default.AUDIO_TRACK_SWITCHING, M.default.AUDIO_TRACK_LOADED, M.default.KEY_LOADED, M.default.FRAG_LOADED, M.default.FRAG_PARSING_INIT_SEGMENT, M.default.FRAG_PARSING_DATA, M.default.FRAG_PARSED, M.default.ERROR, M.default.BUFFER_RESET, M.default.BUFFER_CREATED, M.default.BUFFER_APPENDED, M.default.BUFFER_FLUSHED, M.default.INIT_PTS_FOUND) || this;
return r.fragmentTracker = t,
r.config = e.config,
r.audioCodecSwap = !1,
r._state = G.State.STOPPED,
r.initPTS = [],
r.waitingFragment = null,
r.videoTrackCC = null,
r
}
return t(e, i),
e.prototype.onHandlerDestroying = function() {
this.stopLoad(),
i.prototype.onHandlerDestroying.call(this)
}
,
e.prototype.onHandlerDestroyed = function() {
this.state = G.State.STOPPED,
this.fragmentTracker = null,
i.prototype.onHandlerDestroyed.call(this)
}
,
e.prototype.onInitPtsFound = function(e) {
var t = e.id
, r = e.frag.cc
, i = e.initPTS;
"main" === t && (this.initPTS[r] = i,
this.videoTrackCC = r,
B.logger.log("InitPTS for cc: " + r + " found from video track: " + i),
this.state === G.State.WAITING_INIT_PTS && this.tick())
}
,
e.prototype.startLoad = function(e) {
if (this.tracks) {
var t = this.lastCurrentTime;
this.stopLoad(),
this.setInterval(100),
(this.fragLoadError = 0) < t && -1 === e ? (B.logger.log("audio:override startPosition with lastCurrentTime @" + t.toFixed(3)),
this.state = G.State.IDLE) : (this.lastCurrentTime = this.startPosition ? this.startPosition : e,
this.state = G.State.STARTING),
this.nextLoadPosition = this.startPosition = this.lastCurrentTime,
this.tick()
} else
this.startPosition = e,
this.state = G.State.STOPPED
}
,
e.prototype.stopLoad = function() {
var e = this.fragCurrent;
e && (e.loader && e.loader.abort(),
this.fragmentTracker.removeFragment(e),
this.fragCurrent = null),
this.fragPrevious = null,
this.demuxer && (this.demuxer.destroy(),
this.demuxer = null),
this.state = G.State.STOPPED
}
,
Object.defineProperty(e.prototype, "state", {
get: function() {
return this._state
},
set: function(e) {
if (this.state !== e) {
var t = this.state;
this._state = e,
B.logger.log("audio stream:" + t + "->" + e)
}
},
enumerable: !0,
configurable: !0
}),
e.prototype.doTick = function() {
var e, t, r, i = this.hls, a = i.config;
switch (this.state) {
case G.State.ERROR:
case G.State.PAUSED:
case G.State.BUFFER_FLUSHING:
break;
case G.State.STARTING:
this.state = G.State.WAITING_TRACK,
this.loadedmetadata = !1;
break;
case G.State.IDLE:
var n = this.tracks;
if (!n)
break;
if (!this.media && (this.startFragRequested || !a.startFragPrefetch))
break;
if (this.loadedmetadata)
e = this.media.currentTime;
else if (void 0 === (e = this.nextLoadPosition))
break;
var s = this.mediaBuffer ? this.mediaBuffer : this.media
, o = this.videoBuffer ? this.videoBuffer : this.media
, l = F.BufferHelper.bufferInfo(s, e, a.maxBufferHole)
, u = F.BufferHelper.bufferInfo(o, e, a.maxBufferHole)
, d = l.len
, c = l.end
, h = this.fragPrevious
, f = Math.min(a.maxBufferLength, a.maxMaxBufferLength)
, p = Math.max(f, u.len)
, g = this.audioSwitch
, v = this.trackId;
if ((d < p || g) && v < n.length) {
if (void 0 === (r = n[v].details)) {
this.state = G.State.WAITING_TRACK;
break
}
if (!g && this._streamEnded(l, r))
return this.hls.trigger(M.default.BUFFER_EOS, {
type: "audio"
}),
void (this.state = G.State.ENDED);
var m = r.fragments
, y = m.length
, _ = m[0].start
, E = m[y - 1].start + m[y - 1].duration
, S = void 0;
if (g)
if (r.live && !r.PTSKnown)
B.logger.log("switching audiotrack, live stream, unknown PTS,load first fragment"),
c = 0;
else if (c = e,
r.PTSKnown && e < _) {
if (!(l.end > _ || l.nextStart))
return;
B.logger.log("alt audio track ahead of main track, seek to start of alt audio track"),
this.media.currentTime = _ + .05
}
if (r.initSegment && !r.initSegment.data)
S = r.initSegment;
else if (c <= _) {
if (S = m[0],
null !== this.videoTrackCC && S.cc !== this.videoTrackCC && (S = N.findFragWithCC(m, this.videoTrackCC)),
r.live && S.loadIdx && S.loadIdx === this.fragLoadIdx) {
var T = l.nextStart ? l.nextStart : _;
return B.logger.log("no alt audio available @currentTime:" + this.media.currentTime + ", seeking @" + (T + .05)),
void (this.media.currentTime = T + .05)
}
} else {
var b = void 0
, A = a.maxFragLookUpTolerance
, R = h ? m[h.sn - m[0].sn + 1] : void 0
, D = function(e) {
var t = Math.min(A, e.duration);
return e.start + e.duration - t <= c ? 1 : e.start - t > c && e.start ? -1 : 0
};
(b = c < E ? (E - A < c && (A = 0),
R && !D(R) ? R : x.default.search(m, D)) : m[y - 1]) && (_ = (S = b).start,
h && S.level === h.level && S.sn === h.sn && (S.sn < r.endSN ? (S = m[S.sn + 1 - r.startSN],
B.logger.log("SN just loaded, load next one: " + S.sn)) : S = null))
}
S && (S.encrypted ? (B.logger.log("Loading key for " + S.sn + " of [" + r.startSN + " ," + r.endSN + "],track " + v),
this.state = G.State.KEY_LOADING,
i.trigger(M.default.KEY_LOADING, {
frag: S
})) : (B.logger.log("Loading " + S.sn + ", cc: " + S.cc + " of [" + r.startSN + " ," + r.endSN + "],track " + v + ", currentTime:" + e + ",bufferEnd:" + c.toFixed(3)),
this.fragCurrent = S,
(g || this.fragmentTracker.getState(S) === U.FragmentState.NOT_LOADED) && (this.startFragRequested = !0,
P.isFinite(S.sn) && (this.nextLoadPosition = S.start + S.duration),
i.trigger(M.default.FRAG_LOADING, {
frag: S
}),
this.state = G.State.FRAG_LOADING)))
}
break;
case G.State.WAITING_TRACK:
(t = this.tracks[this.trackId]) && t.details && (this.state = G.State.IDLE);
break;
case G.State.FRAG_LOADING_WAITING_RETRY:
var k = H.now()
, w = this.retryDate
, L = (s = this.media) && s.seeking;
(!w || w <= k || L) && (B.logger.log("audioStreamController: retryDate reached, switch back to IDLE state"),
this.state = G.State.IDLE);
break;
case G.State.WAITING_INIT_PTS:
var O = this.videoTrackCC;
if (void 0 === this.initPTS[O])
break;
var C = this.waitingFragment;
if (C) {
var I = C.frag.cc;
O !== I ? (t = this.tracks[this.trackId]).details && t.details.live && (B.logger.warn("Waiting fragment CC (" + I + ") does not match video track CC (" + O + ")"),
this.waitingFragment = null,
this.state = G.State.IDLE) : (this.state = G.State.FRAG_LOADING,
this.onFragLoaded(this.waitingFragment),
this.waitingFragment = null)
} else
this.state = G.State.IDLE;
break;
case G.State.STOPPED:
case G.State.FRAG_LOADING:
case G.State.PARSING:
case G.State.PARSED:
case G.State.ENDED:
}
}
,
e.prototype.onMediaAttached = function(e) {
var t = this.media = this.mediaBuffer = e.media;
this.onvseeking = this.onMediaSeeking.bind(this),
this.onvended = this.onMediaEnded.bind(this),
t.addEventListener("seeking", this.onvseeking),
t.addEventListener("ended", this.onvended);
var r = this.config;
this.tracks && r.autoStartLoad && this.startLoad(r.startPosition)
}
,
e.prototype.onMediaDetaching = function() {
var e = this.media;
e && e.ended && (B.logger.log("MSE detaching and video ended, reset startPosition"),
this.startPosition = this.lastCurrentTime = 0),
e && (e.removeEventListener("seeking", this.onvseeking),
e.removeEventListener("ended", this.onvended),
this.onvseeking = this.onvseeked = this.onvended = null),
this.media = this.mediaBuffer = this.videoBuffer = null,
this.loadedmetadata = !1,
this.stopLoad()
}
,
e.prototype.onAudioTracksUpdated = function(e) {
B.logger.log("audio tracks updated"),
this.tracks = e.audioTracks
}
,
e.prototype.onAudioTrackSwitching = function(e) {
var t = !!e.url;
this.trackId = e.id,
this.fragCurrent = null,
this.state = G.State.PAUSED,
this.waitingFragment = null,
t ? this.setInterval(100) : this.demuxer && (this.demuxer.destroy(),
this.demuxer = null),
t && (this.audioSwitch = !0,
this.state = G.State.IDLE),
this.tick()
}
,
e.prototype.onAudioTrackLoaded = function(e) {
var t = e.details
, r = e.id
, i = this.tracks[r]
, a = t.totalduration
, n = 0;
if (B.logger.log("track " + r + " loaded [" + t.startSN + "," + t.endSN + "],duration:" + a),
t.live) {
var s = i.details;
s && 0 < t.fragments.length ? (h.mergeDetails(s, t),
n = t.fragments[0].start,
t.PTSKnown ? B.logger.log("live audio playlist sliding:" + n.toFixed(3)) : B.logger.log("live audio playlist - outdated PTS, unknown sliding")) : (t.PTSKnown = !1,
B.logger.log("live audio playlist - first load, unknown sliding"))
} else
t.PTSKnown = !1;
if (i.details = t,
!this.startFragRequested) {
if (-1 === this.startPosition) {
var o = t.startTimeOffset;
P.isFinite(o) ? (B.logger.log("start time offset found in playlist, adjust startPosition to " + o),
this.startPosition = o) : this.startPosition = 0
}
this.nextLoadPosition = this.startPosition
}
this.state === G.State.WAITING_TRACK && (this.state = G.State.IDLE),
this.tick()
}
,
e.prototype.onKeyLoaded = function() {
this.state === G.State.KEY_LOADING && (this.state = G.State.IDLE,
this.tick())
}
,
e.prototype.onFragLoaded = function(e) {
var t = this.fragCurrent
, r = e.frag;
if (this.state === G.State.FRAG_LOADING && t && "audio" === r.type && r.level === t.level && r.sn === t.sn) {
var i = this.tracks[this.trackId]
, a = i.details
, n = a.totalduration
, s = t.level
, o = t.sn
, l = t.cc
, u = this.config.defaultAudioCodec || i.audioCodec || "mp4a.40.2"
, d = this.stats = e.stats;
if ("initSegment" === o)
this.state = G.State.IDLE,
d.tparsed = d.tbuffered = H.now(),
a.initSegment.data = e.payload,
this.hls.trigger(M.default.FRAG_BUFFERED, {
stats: d,
frag: t,
id: "audio"
}),
this.tick();
else {
this.state = G.State.PARSING,
this.appended = !1,
this.demuxer || (this.demuxer = new f.default(this.hls,"audio"));
var c = this.initPTS[l]
, h = a.initSegment ? a.initSegment.data : [];
a.initSegment || void 0 !== c ? (this.pendingBuffering = !0,
B.logger.log("Demuxing " + o + " of [" + a.startSN + " ," + a.endSN + "],track " + s),
this.demuxer.push(e.payload, h, u, null, t, n, !1, c)) : (B.logger.log("unknown video PTS for continuity counter " + l + ", waiting for video PTS before demuxing audio frag " + o + " of [" + a.startSN + " ," + a.endSN + "],track " + s),
this.waitingFragment = e,
this.state = G.State.WAITING_INIT_PTS)
}
}
this.fragLoadError = 0
}
,
e.prototype.onFragParsingInitSegment = function(e) {
var t = this.fragCurrent
, r = e.frag;
if (t && "audio" === e.id && r.sn === t.sn && r.level === t.level && this.state === G.State.PARSING) {
var i = e.tracks
, a = void 0;
if (i.video && delete i.video,
a = i.audio) {
a.levelCodec = a.codec,
a.id = e.id,
this.hls.trigger(M.default.BUFFER_CODECS, i),
B.logger.log("audio track:audio,container:" + a.container + ",codecs[level/parsed]=[" + a.levelCodec + "/" + a.codec + "]");
var n = a.initSegment;
if (n) {
var s = {
type: "audio",
data: n,
parent: "audio",
content: "initSegment"
};
this.audioSwitch ? this.pendingData = [s] : (this.appended = !0,
this.pendingBuffering = !0,
this.hls.trigger(M.default.BUFFER_APPENDING, s))
}
this.tick()
}
}
}
,
e.prototype.onFragParsingData = function(t) {
var r = this
, e = this.fragCurrent
, i = t.frag;
if (e && "audio" === t.id && "audio" === t.type && i.sn === e.sn && i.level === e.level && this.state === G.State.PARSING) {
var a = this.trackId
, n = this.tracks[a]
, s = this.hls;
P.isFinite(t.endPTS) || (t.endPTS = t.startPTS + e.duration,
t.endDTS = t.startDTS + e.duration),
e.addElementaryStream(g.default.ElementaryStreamTypes.AUDIO),
B.logger.log("parsed " + t.type + ",PTS:[" + t.startPTS.toFixed(3) + "," + t.endPTS.toFixed(3) + "],DTS:[" + t.startDTS.toFixed(3) + "/" + t.endDTS.toFixed(3) + "],nb:" + t.nb),
h.updateFragPTSDTS(n.details, e, t.startPTS, t.endPTS);
var o = this.audioSwitch
, l = this.media
, u = !1;
if (o && l)
if (l.readyState) {
var d = l.currentTime;
B.logger.log("switching audio track : currentTime:" + d),
d >= t.startPTS && (B.logger.log("switching audio track : flushing all audio"),
this.state = G.State.BUFFER_FLUSHING,
s.trigger(M.default.BUFFER_FLUSHING, {
startOffset: 0,
endOffset: P.POSITIVE_INFINITY,
type: "audio"
}),
u = !0,
this.audioSwitch = !1,
s.trigger(M.default.AUDIO_TRACK_SWITCHED, {
id: a
}))
} else
this.audioSwitch = !1,
s.trigger(M.default.AUDIO_TRACK_SWITCHED, {
id: a
});
var c = this.pendingData;
if (!c)
return B.logger.warn("Apparently attempt to enqueue media payload without codec initialization data upfront"),
void s.trigger(M.default.ERROR, {
type: p.ErrorTypes.MEDIA_ERROR,
details: null,
fatal: !0
});
this.audioSwitch || ([t.data1, t.data2].forEach(function(e) {
e && e.length && c.push({
type: t.type,
data: e,
parent: "audio",
content: "data"
})
}),
!u && c.length && (c.forEach(function(e) {
r.state === G.State.PARSING && (r.pendingBuffering = !0,
r.hls.trigger(M.default.BUFFER_APPENDING, e))
}),
this.pendingData = [],
this.appended = !0)),
this.tick()
}
}
,
e.prototype.onFragParsed = function(e) {
var t = this.fragCurrent
, r = e.frag;
t && "audio" === e.id && r.sn === t.sn && r.level === t.level && this.state === G.State.PARSING && (this.stats.tparsed = H.now(),
this.state = G.State.PARSED,
this._checkAppendedParsed())
}
,
e.prototype.onBufferReset = function() {
this.mediaBuffer = this.videoBuffer = null,
this.loadedmetadata = !1
}
,
e.prototype.onBufferCreated = function(e) {
var t = e.tracks.audio;
t && (this.mediaBuffer = t.buffer,
this.loadedmetadata = !0),
e.tracks.video && (this.videoBuffer = e.tracks.video.buffer)
}
,
e.prototype.onBufferAppended = function(e) {
if ("audio" === e.parent) {
var t = this.state;
t !== G.State.PARSING && t !== G.State.PARSED || (this.pendingBuffering = 0 < e.pending,
this._checkAppendedParsed())
}
}
,
e.prototype._checkAppendedParsed = function() {
if (!(this.state !== G.State.PARSED || this.appended && this.pendingBuffering)) {
var e = this.fragCurrent
, t = this.stats
, r = this.hls;
if (e) {
this.fragPrevious = e,
t.tbuffered = H.now(),
r.trigger(M.default.FRAG_BUFFERED, {
stats: t,
frag: e,
id: "audio"
});
var i = this.mediaBuffer ? this.mediaBuffer : this.media;
B.logger.log("audio buffered : " + a.default.toString(i.buffered)),
this.audioSwitch && this.appended && (this.audioSwitch = !1,
r.trigger(M.default.AUDIO_TRACK_SWITCHED, {
id: this.trackId
})),
this.state = G.State.IDLE
}
this.tick()
}
}
,
e.prototype.onError = function(e) {
var t = e.frag;
if (!t || "audio" === t.type)
switch (e.details) {
case p.ErrorDetails.FRAG_LOAD_ERROR:
case p.ErrorDetails.FRAG_LOAD_TIMEOUT:
var r = e.frag;
if (r && "audio" !== r.type)
break;
if (!e.fatal) {
var i = this.fragLoadError;
if (i ? i++ : i = 1,
i <= (n = this.config).fragLoadingMaxRetry) {
this.fragLoadError = i;
var a = Math.min(Math.pow(2, i - 1) * n.fragLoadingRetryDelay, n.fragLoadingMaxRetryTimeout);
B.logger.warn("AudioStreamController: frag loading failed, retry in " + a + " ms"),
this.retryDate = H.now() + a,
this.state = G.State.FRAG_LOADING_WAITING_RETRY
} else
B.logger.error("AudioStreamController: " + e.details + " reaches max retry, redispatch as fatal ..."),
e.fatal = !0,
this.state = G.State.ERROR
}
break;
case p.ErrorDetails.AUDIO_TRACK_LOAD_ERROR:
case p.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:
case p.ErrorDetails.KEY_LOAD_ERROR:
case p.ErrorDetails.KEY_LOAD_TIMEOUT:
this.state !== G.State.ERROR && (this.state = e.fatal ? G.State.ERROR : G.State.IDLE,
B.logger.warn("AudioStreamController: " + e.details + " while loading frag, now switching to " + this.state + " state ..."));
break;
case p.ErrorDetails.BUFFER_FULL_ERROR:
if ("audio" === e.parent && (this.state === G.State.PARSING || this.state === G.State.PARSED)) {
var n, s = this.mediaBuffer, o = this.media.currentTime;
s && F.BufferHelper.isBuffered(s, o) && F.BufferHelper.isBuffered(s, o + .5) ? ((n = this.config).maxMaxBufferLength >= n.maxBufferLength && (n.maxMaxBufferLength /= 2,
B.logger.warn("AudioStreamController: reduce max buffer length to " + n.maxMaxBufferLength + "s")),
this.state = G.State.IDLE) : (B.logger.warn("AudioStreamController: buffer full error also media.currentTime is not buffered, flush audio buffer"),
this.fragCurrent = null,
this.state = G.State.BUFFER_FLUSHING,
this.hls.trigger(M.default.BUFFER_FLUSHING, {
startOffset: 0,
endOffset: P.POSITIVE_INFINITY,
type: "audio"
}))
}
}
}
,
e.prototype.onBufferFlushed = function() {
var t = this
, e = this.pendingData;
e && e.length ? (B.logger.log("AudioStreamController: appending pending audio data after buffer flushed"),
e.forEach(function(e) {
t.hls.trigger(M.default.BUFFER_APPENDING, e)
}),
this.appended = !0,
this.pendingData = [],
this.state = G.State.PARSED) : (this.state = G.State.IDLE,
this.fragPrevious = null,
this.tick())
}
,
e
}(G.default);
r.default = e
}
).call(this, n(2).Number)
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var h = r(30);
t.newCue = function(e, t, r, i) {
for (var a, n, s, o, l, u = window.VTTCue || window.TextTrackCue, d = 0; d < i.rows.length; d++)
if (s = !0,
o = 0,
l = "",
!(a = i.rows[d]).isEmpty()) {
for (var c = 0; c < a.chars.length; c++)
a.chars[c].uchar.match(/\s/) && s ? o++ : (l += a.chars[c].uchar,
s = !1);
(a.cueStartTime = t) === r && (r += 1e-4),
n = new u(t,r,h.fixLineBreaks(l.trim())),
16 <= o ? o-- : o++,
navigator.userAgent.match(/Firefox\//) ? n.line = d + 1 : n.line = 7 < d ? d - 2 : d + 1,
n.align = "left",
n.position = Math.max(0, Math.min(100, o / 32 * 100 + (navigator.userAgent.match(/Firefox\//) ? 50 : 0))),
e.addCue(n)
}
}
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
}),
t.default = function() {
if ("undefined" != typeof window && window.VTTCue)
return window.VTTCue;
var E = {
"": !0,
lr: !0,
rl: !0
}
, t = {
start: !0,
middle: !0,
end: !0,
left: !0,
right: !0
};
function S(e) {
return "string" == typeof e && !!t[e.toLowerCase()] && e.toLowerCase()
}
function T(e) {
for (var t = 1; t < arguments.length; t++) {
var r = arguments[t];
for (var i in r)
e[i] = r[i]
}
return e
}
function e(e, t, r) {
var i = this
, a = function() {
if ("undefined" != typeof navigator)
return /MSIE\s8\.0/.test(navigator.userAgent)
}()
, n = {};
a ? i = document.createElement("custom") : n.enumerable = !0,
i.hasBeenReset = !1;
var s = ""
, o = !1
, l = e
, u = t
, d = r
, c = null
, h = ""
, f = !0
, p = "auto"
, g = "start"
, v = 50
, m = "middle"
, y = 50
, _ = "middle";
if (Object.defineProperty(i, "id", T({}, n, {
get: function() {
return s
},
set: function(e) {
s = "" + e
}
})),
Object.defineProperty(i, "pauseOnExit", T({}, n, {
get: function() {
return o
},
set: function(e) {
o = !!e
}
})),
Object.defineProperty(i, "startTime", T({}, n, {
get: function() {
return l
},
set: function(e) {
if ("number" != typeof e)
throw new TypeError("Start time must be set to a number.");
l = e,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "endTime", T({}, n, {
get: function() {
return u
},
set: function(e) {
if ("number" != typeof e)
throw new TypeError("End time must be set to a number.");
u = e,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "text", T({}, n, {
get: function() {
return d
},
set: function(e) {
d = "" + e,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "region", T({}, n, {
get: function() {
return c
},
set: function(e) {
c = e,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "vertical", T({}, n, {
get: function() {
return h
},
set: function(e) {
var t, r = "string" == typeof (t = e) && !!E[t.toLowerCase()] && t.toLowerCase();
if (!1 === r)
throw new SyntaxError("An invalid or illegal string was specified.");
h = r,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "snapToLines", T({}, n, {
get: function() {
return f
},
set: function(e) {
f = !!e,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "line", T({}, n, {
get: function() {
return p
},
set: function(e) {
if ("number" != typeof e && "auto" !== e)
throw new SyntaxError("An invalid number or illegal string was specified.");
p = e,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "lineAlign", T({}, n, {
get: function() {
return g
},
set: function(e) {
var t = S(e);
if (!t)
throw new SyntaxError("An invalid or illegal string was specified.");
g = t,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "position", T({}, n, {
get: function() {
return v
},
set: function(e) {
if (e < 0 || 100 < e)
throw new Error("Position must be between 0 and 100.");
v = e,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "positionAlign", T({}, n, {
get: function() {
return m
},
set: function(e) {
var t = S(e);
if (!t)
throw new SyntaxError("An invalid or illegal string was specified.");
m = t,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "size", T({}, n, {
get: function() {
return y
},
set: function(e) {
if (e < 0 || 100 < e)
throw new Error("Size must be between 0 and 100.");
y = e,
this.hasBeenReset = !0
}
})),
Object.defineProperty(i, "align", T({}, n, {
get: function() {
return _
},
set: function(e) {
var t = S(e);
if (!t)
throw new SyntaxError("An invalid or illegal string was specified.");
_ = t,
this.hasBeenReset = !0
}
})),
i.displayState = void 0,
a)
return i
}
return e.prototype.getCueAsHTML = function() {
return window.WebVTT.convertCueToDOMTree(window, this.text)
}
,
e
}()
}
, function(e, a, h) {
"use strict";
(function(s) {
var i, t = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(a, "__esModule", {
value: !0
});
var o = h(1)
, r = h(4)
, n = h(70)
, l = h(71)
, u = h(72)
, d = h(0)
, c = h(29);
var e = function(a) {
function e(e) {
var t = a.call(this, e, o.default.MEDIA_ATTACHING, o.default.MEDIA_DETACHING, o.default.FRAG_PARSING_USERDATA, o.default.FRAG_DECRYPTED, o.default.MANIFEST_LOADING, o.default.MANIFEST_LOADED, o.default.FRAG_LOADED, o.default.LEVEL_SWITCHING, o.default.INIT_PTS_FOUND) || this;
if (t.hls = e,
t.config = e.config,
t.enabled = !0,
t.Cues = e.config.cueHandler,
t.textTracks = [],
t.tracks = [],
t.unparsedVttFrags = [],
t.initPTS = [],
t.cueRanges = [],
t.captionsTracks = {},
t.captionsProperties = {
textTrack1: {
label: t.config.captionsTextTrack1Label,
languageCode: t.config.captionsTextTrack1LanguageCode
},
textTrack2: {
label: t.config.captionsTextTrack2Label,
languageCode: t.config.captionsTextTrack2LanguageCode
}
},
t.config.enableCEA708Captions) {
var r = new l.default(t,"textTrack1")
, i = new l.default(t,"textTrack2");
t.cea608Parser = new n.default(0,r,i)
}
return t
}
return t(e, a),
e.prototype.addCues = function(e, t, r, i) {
for (var a = this.cueRanges, n = !1, s = a.length; s--; ) {
var o = a[s]
, l = (u = o[0],
d = o[1],
c = t,
h = r,
Math.min(d, h) - Math.max(u, c));
if (0 <= l && (o[0] = Math.min(o[0], t),
o[1] = Math.max(o[1], r),
n = !0,
.5 < l / (r - t)))
return
}
var u, d, c, h;
n || a.push([t, r]),
this.Cues.newCue(this.captionsTracks[e], t, r, i)
}
,
e.prototype.onInitPtsFound = function(e) {
var t = this;
if ("main" === e.id && (this.initPTS[e.frag.cc] = e.initPTS),
this.unparsedVttFrags.length) {
var r = this.unparsedVttFrags;
this.unparsedVttFrags = [],
r.forEach(function(e) {
t.onFragLoaded(e)
})
}
}
,
e.prototype.getExistingTrack = function(e) {
var t = this.media;
if (t)
for (var r = 0; r < t.textTracks.length; r++) {
var i = t.textTracks[r];
if (i[e])
return i
}
return null
}
,
e.prototype.createCaptionsTrack = function(e) {
var t = this.captionsProperties[e]
, r = t.label
, i = t.languageCode
, a = this.captionsTracks;
if (!a[e]) {
var n = this.getExistingTrack(e);
if (n)
a[e] = n,
c.clearCurrentCues(a[e]),
c.sendAddTrackEvent(a[e], this.media);
else {
var s = this.createTextTrack("captions", r, i);
s && (s[e] = !0,
a[e] = s)
}
}
}
,
e.prototype.createTextTrack = function(e, t, r) {
var i = this.media;
if (i)
return i.addTextTrack(e, t, r)
}
,
e.prototype.destroy = function() {
r.default.prototype.destroy.call(this)
}
,
e.prototype.onMediaAttaching = function(e) {
this.media = e.media,
this._cleanTracks()
}
,
e.prototype.onMediaDetaching = function() {
var t = this.captionsTracks;
Object.keys(t).forEach(function(e) {
c.clearCurrentCues(t[e]),
delete t[e]
})
}
,
e.prototype.onManifestLoading = function() {
this.lastSn = -1,
this.prevCC = -1,
this.vttCCs = {
ccOffset: 0,
presentationOffset: 0,
0: {
start: 0,
prevCC: -1,
new: !1
}
},
this._cleanTracks()
}
,
e.prototype._cleanTracks = function() {
var e = this.media;
if (e) {
var t = e.textTracks;
if (t)
for (var r = 0; r < t.length; r++)
c.clearCurrentCues(t[r])
}
}
,
e.prototype.onManifestLoaded = function(e) {
var a = this;
if (this.textTracks = [],
this.unparsedVttFrags = this.unparsedVttFrags || [],
this.initPTS = [],
this.cueRanges = [],
this.config.enableWebVTT) {
this.tracks = e.subtitles || [];
var n = this.media ? this.media.textTracks : [];
this.tracks.forEach(function(i, e) {
var t;
if (e < n.length) {
var r = [].slice.call(n).find(function(e) {
return r = i,
(t = e) && t.label === r.name && !(t.textTrack1 || t.textTrack2);
var t, r
});
r && (t = r)
}
t || (t = a.createTextTrack("subtitles", i.name, i.lang)),
i.default ? t.mode = a.hls.subtitleDisplay ? "showing" : "hidden" : t.mode = "disabled",
a.textTracks.push(t)
})
}
}
,
e.prototype.onLevelSwitching = function() {
this.enabled = "NONE" !== this.hls.currentLevel.closedCaptions
}
,
e.prototype.onFragLoaded = function(e) {
var t = e.frag
, r = e.payload;
if ("main" === t.type) {
var i = t.sn;
if (i !== this.lastSn + 1) {
var a = this.cea608Parser;
a && a.reset()
}
this.lastSn = i
} else if ("subtitle" === t.type)
if (r.byteLength) {
if (!s.isFinite(this.initPTS[t.cc]))
return this.unparsedVttFrags.push(e),
void (this.initPTS.length && this.hls.trigger(o.default.SUBTITLE_FRAG_PROCESSED, {
success: !1,
frag: t
}));
var n = t.decryptdata;
null != n && null != n.key && "AES-128" === n.method || this._parseVTTs(t, r)
} else
this.hls.trigger(o.default.SUBTITLE_FRAG_PROCESSED, {
success: !1,
frag: t
})
}
,
e.prototype._parseVTTs = function(t, e) {
var r = this.vttCCs;
r[t.cc] || (r[t.cc] = {
start: t.start,
prevCC: this.prevCC,
new: !0
},
this.prevCC = t.cc);
var a = this.textTracks
, n = this.hls;
u.default.parse(e, this.initPTS[t.cc], r, t.cc, function(e) {
var i = a[t.trackId];
"disabled" !== i.mode ? (e.forEach(function(t) {
if (!i.cues.getCueById(t.id))
try {
i.addCue(t)
} catch (e) {
var r = new window.TextTrackCue(t.startTime,t.endTime,t.text);
r.id = t.id,
i.addCue(r)
}
}),
n.trigger(o.default.SUBTITLE_FRAG_PROCESSED, {
success: !0,
frag: t
})) : n.trigger(o.default.SUBTITLE_FRAG_PROCESSED, {
success: !1,
frag: t
})
}, function(e) {
d.logger.log("Failed to parse VTT cue: " + e),
n.trigger(o.default.SUBTITLE_FRAG_PROCESSED, {
success: !1,
frag: t
})
})
}
,
e.prototype.onFragDecrypted = function(e) {
var t = e.payload
, r = e.frag;
if ("subtitle" === r.type) {
if (!s.isFinite(this.initPTS[r.cc]))
return void this.unparsedVttFrags.push(e);
this._parseVTTs(r, t)
}
}
,
e.prototype.onFragParsingUserdata = function(e) {
if (this.enabled && this.config.enableCEA708Captions)
for (var t = 0; t < e.samples.length; t++) {
var r = this.extractCea608Data(e.samples[t].bytes);
this.cea608Parser.addData(e.samples[t].pts, r)
}
}
,
e.prototype.extractCea608Data = function(e) {
for (var t, r, i, a = 31 & e[0], n = 2, s = [], o = 0; o < a; o++)
t = e[n++],
r = 127 & e[n++],
i = 127 & e[n++],
0 == r && 0 == i || 0 != (4 & t) && 0 == (3 & t) && (s.push(r),
s.push(i));
return s
}
,
e
}(r.default);
a.default = e
}
).call(this, h(2).Number)
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
function o(e) {
var t = e;
return i.hasOwnProperty(e) && (t = i[e]),
String.fromCharCode(t)
}
function l(e) {
for (var t = [], r = 0; r < e.length; r++)
t.push(e[r].toString(16));
return t
}
var i = {
42: 225,
92: 233,
94: 237,
95: 243,
96: 250,
123: 231,
124: 247,
125: 209,
126: 241,
127: 9608,
128: 174,
129: 176,
130: 189,
131: 191,
132: 8482,
133: 162,
134: 163,
135: 9834,
136: 224,
137: 32,
138: 232,
139: 226,
140: 234,
141: 238,
142: 244,
143: 251,
144: 193,
145: 201,
146: 211,
147: 218,
148: 220,
149: 252,
150: 8216,
151: 161,
152: 42,
153: 8217,
154: 9473,
155: 169,
156: 8480,
157: 8226,
158: 8220,
159: 8221,
160: 192,
161: 194,
162: 199,
163: 200,
164: 202,
165: 203,
166: 235,
167: 206,
168: 207,
169: 239,
170: 212,
171: 217,
172: 249,
173: 219,
174: 171,
175: 187,
176: 195,
177: 227,
178: 205,
179: 204,
180: 236,
181: 210,
182: 242,
183: 213,
184: 245,
185: 123,
186: 125,
187: 92,
188: 94,
189: 95,
190: 124,
191: 8764,
192: 196,
193: 228,
194: 214,
195: 246,
196: 223,
197: 165,
198: 164,
199: 9475,
200: 197,
201: 229,
202: 216,
203: 248,
204: 9487,
205: 9491,
206: 9495,
207: 9499
}
, n = {
17: 1,
18: 3,
21: 5,
22: 7,
23: 9,
16: 11,
19: 12,
20: 14
}
, s = {
17: 2,
18: 4,
21: 6,
22: 8,
23: 10,
19: 13,
20: 15
}
, u = {
25: 1,
26: 3,
29: 5,
30: 7,
31: 9,
24: 11,
27: 12,
28: 14
}
, d = {
25: 2,
26: 4,
29: 6,
30: 8,
31: 10,
27: 13,
28: 15
}
, c = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "black", "transparent"]
, h = {
verboseFilter: {
DATA: 3,
DEBUG: 3,
INFO: 2,
WARNING: 2,
TEXT: 1,
ERROR: 0
},
time: null,
verboseLevel: 0,
setTime: function(e) {
this.time = e
},
log: function(e, t) {
this.verboseFilter[e],
this.verboseLevel
}
}
, f = function() {
function e(e, t, r, i, a) {
this.foreground = e || "white",
this.underline = t || !1,
this.italics = r || !1,
this.background = i || "black",
this.flash = a || !1
}
return e.prototype.reset = function() {
this.foreground = "white",
this.underline = !1,
this.italics = !1,
this.background = "black",
this.flash = !1
}
,
e.prototype.setStyles = function(e) {
for (var t = ["foreground", "underline", "italics", "background", "flash"], r = 0; r < t.length; r++) {
var i = t[r];
e.hasOwnProperty(i) && (this[i] = e[i])
}
}
,
e.prototype.isDefault = function() {
return "white" === this.foreground && !this.underline && !this.italics && "black" === this.background && !this.flash
}
,
e.prototype.equals = function(e) {
return this.foreground === e.foreground && this.underline === e.underline && this.italics === e.italics && this.background === e.background && this.flash === e.flash
}
,
e.prototype.copy = function(e) {
this.foreground = e.foreground,
this.underline = e.underline,
this.italics = e.italics,
this.background = e.background,
this.flash = e.flash
}
,
e.prototype.toString = function() {
return "color=" + this.foreground + ", underline=" + this.underline + ", italics=" + this.italics + ", background=" + this.background + ", flash=" + this.flash
}
,
e
}()
, a = function() {
function e(e, t, r, i, a, n) {
this.uchar = e || " ",
this.penState = new f(t,r,i,a,n)
}
return e.prototype.reset = function() {
this.uchar = " ",
this.penState.reset()
}
,
e.prototype.setChar = function(e, t) {
this.uchar = e,
this.penState.copy(t)
}
,
e.prototype.setPenState = function(e) {
this.penState.copy(e)
}
,
e.prototype.equals = function(e) {
return this.uchar === e.uchar && this.penState.equals(e.penState)
}
,
e.prototype.copy = function(e) {
this.uchar = e.uchar,
this.penState.copy(e.penState)
}
,
e.prototype.isEmpty = function() {
return " " === this.uchar && this.penState.isDefault()
}
,
e
}()
, p = function() {
function e() {
this.chars = [];
for (var e = 0; e < 100; e++)
this.chars.push(new a);
this.pos = 0,
this.currPenState = new f
}
return e.prototype.equals = function(e) {
for (var t = !0, r = 0; r < 100; r++)
if (!this.chars[r].equals(e.chars[r])) {
t = !1;
break
}
return t
}
,
e.prototype.copy = function(e) {
for (var t = 0; t < 100; t++)
this.chars[t].copy(e.chars[t])
}
,
e.prototype.isEmpty = function() {
for (var e = !0, t = 0; t < 100; t++)
if (!this.chars[t].isEmpty()) {
e = !1;
break
}
return e
}
,
e.prototype.setCursor = function(e) {
this.pos !== e && (this.pos = e),
this.pos < 0 ? (h.log("ERROR", "Negative cursor position " + this.pos),
this.pos = 0) : 100 < this.pos && (h.log("ERROR", "Too large cursor position " + this.pos),
this.pos = 100)
}
,
e.prototype.moveCursor = function(e) {
var t = this.pos + e;
if (1 < e)
for (var r = this.pos + 1; r < t + 1; r++)
this.chars[r].setPenState(this.currPenState);
this.setCursor(t)
}
,
e.prototype.backSpace = function() {
this.moveCursor(-1),
this.chars[this.pos].setChar(" ", this.currPenState)
}
,
e.prototype.insertChar = function(e) {
144 <= e && this.backSpace();
var t = o(e);
100 <= this.pos ? h.log("ERROR", "Cannot insert " + e.toString(16) + " (" + t + ") at position " + this.pos + ". Skipping it!") : (this.chars[this.pos].setChar(t, this.currPenState),
this.moveCursor(1))
}
,
e.prototype.clearFromPos = function(e) {
var t;
for (t = e; t < 100; t++)
this.chars[t].reset()
}
,
e.prototype.clear = function() {
this.clearFromPos(0),
this.pos = 0,
this.currPenState.reset()
}
,
e.prototype.clearToEndOfRow = function() {
this.clearFromPos(this.pos)
}
,
e.prototype.getTextString = function() {
for (var e = [], t = !0, r = 0; r < 100; r++) {
var i = this.chars[r].uchar;
" " !== i && (t = !1),
e.push(i)
}
return t ? "" : e.join("")
}
,
e.prototype.setPenStyles = function(e) {
this.currPenState.setStyles(e),
this.chars[this.pos].setPenState(this.currPenState)
}
,
e
}()
, g = function() {
function e() {
this.rows = [];
for (var e = 0; e < 15; e++)
this.rows.push(new p);
this.currRow = 14,
this.nrRollUpRows = null,
this.reset()
}
return e.prototype.reset = function() {
for (var e = 0; e < 15; e++)
this.rows[e].clear();
this.currRow = 14
}
,
e.prototype.equals = function(e) {
for (var t = !0, r = 0; r < 15; r++)
if (!this.rows[r].equals(e.rows[r])) {
t = !1;
break
}
return t
}
,
e.prototype.copy = function(e) {
for (var t = 0; t < 15; t++)
this.rows[t].copy(e.rows[t])
}
,
e.prototype.isEmpty = function() {
for (var e = !0, t = 0; t < 15; t++)
if (!this.rows[t].isEmpty()) {
e = !1;
break
}
return e
}
,
e.prototype.backSpace = function() {
this.rows[this.currRow].backSpace()
}
,
e.prototype.clearToEndOfRow = function() {
this.rows[this.currRow].clearToEndOfRow()
}
,
e.prototype.insertChar = function(e) {
this.rows[this.currRow].insertChar(e)
}
,
e.prototype.setPen = function(e) {
this.rows[this.currRow].setPenStyles(e)
}
,
e.prototype.moveCursor = function(e) {
this.rows[this.currRow].moveCursor(e)
}
,
e.prototype.setCursor = function(e) {
h.log("INFO", "setCursor: " + e),
this.rows[this.currRow].setCursor(e)
}
,
e.prototype.setPAC = function(e) {
h.log("INFO", "pacData = " + JSON.stringify(e));
var t = e.row - 1;
if (this.nrRollUpRows && t < this.nrRollUpRows - 1 && (t = this.nrRollUpRows - 1),
this.nrRollUpRows && this.currRow !== t) {
for (var r = 0; r < 15; r++)
this.rows[r].clear();
var i = this.currRow + 1 - this.nrRollUpRows
, a = this.lastOutputScreen;
if (a) {
var n = a.rows[i].cueStartTime;
if (n && n < h.time)
for (r = 0; r < this.nrRollUpRows; r++)
this.rows[t - this.nrRollUpRows + r + 1].copy(a.rows[i + r])
}
}
this.currRow = t;
var s = this.rows[this.currRow];
if (null !== e.indent) {
var o = e.indent
, l = Math.max(o - 1, 0);
s.setCursor(e.indent),
e.color = s.chars[l].penState.foreground
}
var u = {
foreground: e.color,
underline: e.underline,
italics: e.italics,
background: "black",
flash: !1
};
this.setPen(u)
}
,
e.prototype.setBkgData = function(e) {
h.log("INFO", "bkgData = " + JSON.stringify(e)),
this.backSpace(),
this.setPen(e),
this.insertChar(32)
}
,
e.prototype.setRollUpRows = function(e) {
this.nrRollUpRows = e
}
,
e.prototype.rollUp = function() {
if (null !== this.nrRollUpRows) {
h.log("TEXT", this.getDisplayText());
var e = this.currRow + 1 - this.nrRollUpRows
, t = this.rows.splice(e, 1)[0];
t.clear(),
this.rows.splice(this.currRow, 0, t),
h.log("INFO", "Rolling up")
} else
h.log("DEBUG", "roll_up but nrRollUpRows not set yet")
}
,
e.prototype.getDisplayText = function(e) {
e = e || !1;
for (var t = [], r = "", i = -1, a = 0; a < 15; a++) {
var n = this.rows[a].getTextString();
n && (i = a + 1,
e ? t.push("Row " + i + ": '" + n + "'") : t.push(n.trim()))
}
return 0 < t.length && (r = e ? "[" + t.join(" | ") + "]" : t.join("\n")),
r
}
,
e.prototype.getTextAndFormat = function() {
return this.rows
}
,
e
}()
, v = function() {
function e(e, t) {
this.chNr = e,
this.outputFilter = t,
this.mode = null,
this.verbose = 0,
this.displayedMemory = new g,
this.nonDisplayedMemory = new g,
this.lastOutputScreen = new g,
this.currRollUpRow = this.displayedMemory.rows[14],
this.writeScreen = this.displayedMemory,
this.mode = null,
this.cueStartTime = null
}
return e.prototype.reset = function() {
this.mode = null,
this.displayedMemory.reset(),
this.nonDisplayedMemory.reset(),
this.lastOutputScreen.reset(),
this.currRollUpRow = this.displayedMemory.rows[14],
this.writeScreen = this.displayedMemory,
this.mode = null,
this.cueStartTime = null,
this.lastCueEndTime = null
}
,
e.prototype.getHandler = function() {
return this.outputFilter
}
,
e.prototype.setHandler = function(e) {
this.outputFilter = e
}
,
e.prototype.setPAC = function(e) {
this.writeScreen.setPAC(e)
}
,
e.prototype.setBkgData = function(e) {
this.writeScreen.setBkgData(e)
}
,
e.prototype.setMode = function(e) {
e !== this.mode && (this.mode = e,
h.log("INFO", "MODE=" + e),
"MODE_POP-ON" === this.mode ? this.writeScreen = this.nonDisplayedMemory : (this.writeScreen = this.displayedMemory,
this.writeScreen.reset()),
"MODE_ROLL-UP" !== this.mode && (this.displayedMemory.nrRollUpRows = null,
this.nonDisplayedMemory.nrRollUpRows = null),
this.mode = e)
}
,
e.prototype.insertChars = function(e) {
for (var t = 0; t < e.length; t++)
this.writeScreen.insertChar(e[t]);
var r = this.writeScreen === this.displayedMemory ? "DISP" : "NON_DISP";
h.log("INFO", r + ": " + this.writeScreen.getDisplayText(!0)),
"MODE_PAINT-ON" !== this.mode && "MODE_ROLL-UP" !== this.mode || (h.log("TEXT", "DISPLAYED: " + this.displayedMemory.getDisplayText(!0)),
this.outputDataUpdate())
}
,
e.prototype.ccRCL = function() {
h.log("INFO", "RCL - Resume Caption Loading"),
this.setMode("MODE_POP-ON")
}
,
e.prototype.ccBS = function() {
h.log("INFO", "BS - BackSpace"),
"MODE_TEXT" !== this.mode && (this.writeScreen.backSpace(),
this.writeScreen === this.displayedMemory && this.outputDataUpdate())
}
,
e.prototype.ccAOF = function() {}
,
e.prototype.ccAON = function() {}
,
e.prototype.ccDER = function() {
h.log("INFO", "DER- Delete to End of Row"),
this.writeScreen.clearToEndOfRow(),
this.outputDataUpdate()
}
,
e.prototype.ccRU = function(e) {
h.log("INFO", "RU(" + e + ") - Roll Up"),
this.writeScreen = this.displayedMemory,
this.setMode("MODE_ROLL-UP"),
this.writeScreen.setRollUpRows(e)
}
,
e.prototype.ccFON = function() {
h.log("INFO", "FON - Flash On"),
this.writeScreen.setPen({
flash: !0
})
}
,
e.prototype.ccRDC = function() {
h.log("INFO", "RDC - Resume Direct Captioning"),
this.setMode("MODE_PAINT-ON")
}
,
e.prototype.ccTR = function() {
h.log("INFO", "TR"),
this.setMode("MODE_TEXT")
}
,
e.prototype.ccRTD = function() {
h.log("INFO", "RTD"),
this.setMode("MODE_TEXT")
}
,
e.prototype.ccEDM = function() {
h.log("INFO", "EDM - Erase Displayed Memory"),
this.displayedMemory.reset(),
this.outputDataUpdate(!0)
}
,
e.prototype.ccCR = function() {
h.log("CR - Carriage Return"),
this.writeScreen.rollUp(),
this.outputDataUpdate(!0)
}
,
e.prototype.ccENM = function() {
h.log("INFO", "ENM - Erase Non-displayed Memory"),
this.nonDisplayedMemory.reset()
}
,
e.prototype.ccEOC = function() {
if (h.log("INFO", "EOC - End Of Caption"),
"MODE_POP-ON" === this.mode) {
var e = this.displayedMemory;
this.displayedMemory = this.nonDisplayedMemory,
this.nonDisplayedMemory = e,
this.writeScreen = this.nonDisplayedMemory,
h.log("TEXT", "DISP: " + this.displayedMemory.getDisplayText())
}
this.outputDataUpdate(!0)
}
,
e.prototype.ccTO = function(e) {
h.log("INFO", "TO(" + e + ") - Tab Offset"),
this.writeScreen.moveCursor(e)
}
,
e.prototype.ccMIDROW = function(e) {
var t = {
flash: !1
};
if (t.underline = e % 2 == 1,
t.italics = 46 <= e,
t.italics)
t.foreground = "white";
else {
var r = Math.floor(e / 2) - 16;
t.foreground = ["white", "green", "blue", "cyan", "red", "yellow", "magenta"][r]
}
h.log("INFO", "MIDROW: " + JSON.stringify(t)),
this.writeScreen.setPen(t)
}
,
e.prototype.outputDataUpdate = function(e) {
void 0 === e && (e = !1);
var t = h.time;
null !== t && this.outputFilter && (null !== this.cueStartTime || this.displayedMemory.isEmpty() ? this.displayedMemory.equals(this.lastOutputScreen) || (this.outputFilter.newCue && (this.outputFilter.newCue(this.cueStartTime, t, this.lastOutputScreen),
!0 === e && this.outputFilter.dispatchCue && this.outputFilter.dispatchCue()),
this.cueStartTime = this.displayedMemory.isEmpty() ? null : t) : this.cueStartTime = t,
this.lastOutputScreen.copy(this.displayedMemory))
}
,
e.prototype.cueSplitAtTime = function(e) {
this.outputFilter && (this.displayedMemory.isEmpty() || (this.outputFilter.newCue && this.outputFilter.newCue(this.cueStartTime, e, this.displayedMemory),
this.cueStartTime = e))
}
,
e
}()
, m = function() {
function e(e, t, r) {
this.field = e || 1,
this.outputs = [t, r],
this.channels = [new v(1,t), new v(2,r)],
this.currChNr = -1,
this.lastCmdA = null,
this.lastCmdB = null,
this.bufferedData = [],
this.startTime = null,
this.lastTime = null,
this.dataCounters = {
padding: 0,
char: 0,
cmd: 0,
other: 0
}
}
return e.prototype.getHandler = function(e) {
return this.channels[e].getHandler()
}
,
e.prototype.setHandler = function(e, t) {
this.channels[e].setHandler(t)
}
,
e.prototype.addData = function(e, t) {
var r, i, a, n = !1;
this.lastTime = e,
h.setTime(e);
for (var s = 0; s < t.length; s += 2)
i = 127 & t[s],
a = 127 & t[s + 1],
0 != i || 0 != a ? (h.log("DATA", "[" + l([t[s], t[s + 1]]) + "] -> (" + l([i, a]) + ")"),
(r = this.parseCmd(i, a)) || (r = this.parseMidrow(i, a)),
r || (r = this.parsePAC(i, a)),
r || (r = this.parseBackgroundAttributes(i, a)),
r || (n = this.parseChars(i, a)) && (this.currChNr && 0 <= this.currChNr ? this.channels[this.currChNr - 1].insertChars(n) : h.log("WARNING", "No channel found yet. TEXT-MODE?")),
r ? this.dataCounters.cmd += 2 : n ? this.dataCounters.char += 2 : (this.dataCounters.other += 2,
h.log("WARNING", "Couldn't parse cleaned data " + l([i, a]) + " orig: " + l([t[s], t[s + 1]])))) : this.dataCounters.padding += 2
}
,
e.prototype.parseCmd = function(e, t) {
var r;
if (!((20 === e || 28 === e) && 32 <= t && t <= 47 || (23 === e || 31 === e) && 33 <= t && t <= 35))
return !1;
if (e === this.lastCmdA && t === this.lastCmdB)
return this.lastCmdA = null,
this.lastCmdB = null,
h.log("DEBUG", "Repeated command (" + l([e, t]) + ") is dropped"),
!0;
r = 20 === e || 23 === e ? 1 : 2;
var i = this.channels[r - 1];
return 20 === e || 28 === e ? 32 === t ? i.ccRCL() : 33 === t ? i.ccBS() : 34 === t ? i.ccAOF() : 35 === t ? i.ccAON() : 36 === t ? i.ccDER() : 37 === t ? i.ccRU(2) : 38 === t ? i.ccRU(3) : 39 === t ? i.ccRU(4) : 40 === t ? i.ccFON() : 41 === t ? i.ccRDC() : 42 === t ? i.ccTR() : 43 === t ? i.ccRTD() : 44 === t ? i.ccEDM() : 45 === t ? i.ccCR() : 46 === t ? i.ccENM() : 47 === t && i.ccEOC() : i.ccTO(t - 32),
this.lastCmdA = e,
this.lastCmdB = t,
this.currChNr = r,
!0
}
,
e.prototype.parseMidrow = function(e, t) {
var r = null;
return (17 === e || 25 === e) && 32 <= t && t <= 47 && ((r = 17 === e ? 1 : 2) !== this.currChNr ? (h.log("ERROR", "Mismatch channel in midrow parsing"),
!1) : (this.channels[r - 1].ccMIDROW(t),
h.log("DEBUG", "MIDROW (" + l([e, t]) + ")"),
!0))
}
,
e.prototype.parsePAC = function(e, t) {
var r, i;
if (!((17 <= e && e <= 23 || 25 <= e && e <= 31) && 64 <= t && t <= 127 || (16 === e || 24 === e) && 64 <= t && t <= 95))
return !1;
if (e === this.lastCmdA && t === this.lastCmdB)
return this.lastCmdA = null,
!(this.lastCmdB = null);
r = e <= 23 ? 1 : 2,
i = 64 <= t && t <= 95 ? 1 == r ? n[e] : u[e] : 1 == r ? s[e] : d[e];
var a = this.interpretPAC(i, t);
return this.channels[r - 1].setPAC(a),
this.lastCmdA = e,
this.lastCmdB = t,
this.currChNr = r,
!0
}
,
e.prototype.interpretPAC = function(e, t) {
var r, i = {
color: null,
italics: !1,
indent: null,
underline: !1,
row: e
};
return r = 95 < t ? t - 96 : t - 64,
i.underline = 1 == (1 & r),
r <= 13 ? i.color = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "white"][Math.floor(r / 2)] : r <= 15 ? (i.italics = !0,
i.color = "white") : i.indent = 4 * Math.floor((r - 16) / 2),
i
}
,
e.prototype.parseChars = function(e, t) {
var r = null
, i = null
, a = null;
if (17 <= (a = 25 <= e ? (r = 2,
e - 8) : (r = 1,
e)) && a <= 19) {
var n;
n = 17 === a ? t + 80 : 18 === a ? t + 112 : t + 144,
h.log("INFO", "Special char '" + o(n) + "' in channel " + r),
i = [n]
} else
32 <= e && e <= 127 && (i = 0 === t ? [e] : [e, t]);
if (i) {
var s = l(i);
h.log("DEBUG", "Char codes = " + s.join(",")),
this.lastCmdA = null,
this.lastCmdB = null
}
return i
}
,
e.prototype.parseBackgroundAttributes = function(e, t) {
var r, i, a;
return ((16 === e || 24 === e) && 32 <= t && t <= 47 || (23 === e || 31 === e) && 45 <= t && t <= 47) && (r = {},
16 === e || 24 === e ? (i = Math.floor((t - 32) / 2),
r.background = c[i],
t % 2 == 1 && (r.background = r.background + "_semi")) : 45 === t ? r.background = "transparent" : (r.foreground = "black",
47 === t && (r.underline = !0)),
a = e < 24 ? 1 : 2,
this.channels[a - 1].setBkgData(r),
this.lastCmdA = null,
!(this.lastCmdB = null))
}
,
e.prototype.reset = function() {
for (var e = 0; e < this.channels.length; e++)
this.channels[e] && this.channels[e].reset();
this.lastCmdA = null,
this.lastCmdB = null
}
,
e.prototype.cueSplitAtTime = function(e) {
for (var t = 0; t < this.channels.length; t++)
this.channels[t] && this.channels[t].cueSplitAtTime(e)
}
,
e
}();
t.default = m
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = function() {
function e(e, t) {
this.timelineController = e,
this.trackName = t,
this.startTime = null,
this.endTime = null,
this.screen = null
}
return e.prototype.dispatchCue = function() {
null !== this.startTime && (this.timelineController.addCues(this.trackName, this.startTime, this.endTime, this.screen),
this.startTime = null)
}
,
e.prototype.newCue = function(e, t, r) {
(null === this.startTime || this.startTime > e) && (this.startTime = e),
this.endTime = t,
this.screen = r,
this.timelineController.createCaptionsTrack(this.trackName)
}
,
e
}();
t.default = i
}
, function(e, t, r) {
"use strict";
(function(v) {
Object.defineProperty(t, "__esModule", {
value: !0
});
function m(e, t, r) {
return e.substr(r || 0, t.length) === t
}
function n(e) {
for (var t = 5381, r = e.length; r; )
t = 33 * t ^ e.charCodeAt(--r);
return (t >>> 0).toString()
}
var y = r(30)
, _ = r(10)
, e = {
parse: function(e, s, o, l, t, r) {
var u, i = _.utf8ArrayToStr(new Uint8Array(e)).trim().replace(/\r\n|\n\r|\n|\r/g, "\n").split("\n"), d = "00:00.000", c = 0, h = 0, f = 0, a = [], p = !0, g = new y.default;
g.oncue = function(e) {
var t = o[l]
, r = o.ccOffset;
t && t.new && (void 0 !== h ? r = o.ccOffset = t.start : function(e, t, r) {
var i = e[l]
, a = e[i.prevCC];
if (!a || !a.new && i.new)
return e.ccOffset = e.presentationOffset = i.start,
i.new = !1;
for (; a && a.new; )
e.ccOffset += i.start - a.start,
i.new = !1,
a = e[(i = a).prevCC];
e.presentationOffset = r
}(o, 0, f)),
f && (r = f - o.presentationOffset),
e.startTime += r - h,
e.endTime += r - h,
e.id = n(e.startTime.toString()) + n(e.endTime.toString()) + n(e.text),
e.text = decodeURIComponent(encodeURIComponent(e.text)),
0 < e.endTime && a.push(e)
}
,
g.onparsingerror = function(e) {
u = e
}
,
g.onflush = function() {
u && r ? r(u) : t(a)
}
,
i.forEach(function(t) {
if (p) {
if (m(t, "X-TIMESTAMP-MAP=")) {
p = !1,
t.substr(16).split(",").forEach(function(e) {
m(e, "LOCAL:") ? d = e.substr(6) : m(e, "MPEGTS:") && (c = parseInt(e.substr(7)))
});
try {
s + (9e4 * o[l].start || 0) < 0 && (s += 8589934592),
c -= s,
e = d,
r = parseInt(e.substr(-3)),
i = parseInt(e.substr(-6, 2)),
a = parseInt(e.substr(-9, 2)),
n = 9 < e.length ? parseInt(e.substr(0, e.indexOf(":"))) : 0,
h = (v.isFinite(r) && v.isFinite(i) && v.isFinite(a) && v.isFinite(n) ? (r += 1e3 * i,
r += 6e4 * a,
r += 36e5 * n) : -1) / 1e3,
f = c / 9e4,
-1 === h && (u = new Error("Malformed X-TIMESTAMP-MAP: " + t))
} catch (e) {
u = new Error("Malformed X-TIMESTAMP-MAP: " + t)
}
return
}
"" === t && (p = !1)
}
var e, r, i, a, n;
g.parse(t + "\n")
}),
g.flush()
}
};
t.default = e
}
).call(this, r(2).Number)
}
, function(e, t, r) {
"use strict";
var i, a = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var n = r(1)
, s = r(4)
, o = r(0);
function l(e) {
for (var t = [], r = 0; r < e.length; r++)
"subtitles" === e[r].kind && t.push(e[r]);
return t
}
var u = function(r) {
function e(e) {
var t = r.call(this, e, n.default.MEDIA_ATTACHED, n.default.MEDIA_DETACHING, n.default.MANIFEST_LOADING, n.default.MANIFEST_LOADED, n.default.SUBTITLE_TRACK_LOADED) || this;
return t.tracks = [],
t.trackId = -1,
t.media = null,
t.subtitleDisplay = !0,
t
}
return a(e, r),
e.prototype._onTextTracksChanged = function() {
if (this.media) {
for (var e = -1, t = l(this.media.textTracks), r = 0; r < t.length; r++)
if ("hidden" === t[r].mode)
e = r;
else if ("showing" === t[r].mode) {
e = r;
break
}
this.subtitleTrack = e
}
}
,
e.prototype.destroy = function() {
s.default.prototype.destroy.call(this)
}
,
e.prototype.onMediaAttached = function(e) {
var t = this;
this.media = e.media,
this.media && (this.queuedDefaultTrack && (this.subtitleTrack = this.queuedDefaultTrack,
delete this.queuedDefaultTrack),
this.trackChangeListener = this._onTextTracksChanged.bind(this),
this.useTextTrackPolling = !(this.media.textTracks && "onchange"in this.media.textTracks),
this.useTextTrackPolling ? this.subtitlePollingInterval = setInterval(function() {
t.trackChangeListener()
}, 500) : this.media.textTracks.addEventListener("change", this.trackChangeListener))
}
,
e.prototype.onMediaDetaching = function() {
this.media && (this.useTextTrackPolling ? clearInterval(this.subtitlePollingInterval) : this.media.textTracks.removeEventListener("change", this.trackChangeListener),
this.media = null)
}
,
e.prototype.onManifestLoading = function() {
this.tracks = [],
this.trackId = -1
}
,
e.prototype.onManifestLoaded = function(e) {
var t = this
, r = e.subtitles || [];
this.tracks = r,
this.trackId = -1,
this.hls.trigger(n.default.SUBTITLE_TRACKS_UPDATED, {
subtitleTracks: r
}),
r.forEach(function(e) {
e.default && (t.media ? t.subtitleTrack = e.id : t.queuedDefaultTrack = e.id)
})
}
,
e.prototype.onTick = function() {
var e = this.trackId
, t = this.tracks[e];
if (t) {
var r = t.details;
r && !r.live || (o.logger.log("(re)loading playlist for subtitle track " + e),
this.hls.trigger(n.default.SUBTITLE_TRACK_LOADING, {
url: t.url,
id: e
}))
}
}
,
e.prototype.onSubtitleTrackLoaded = function(e) {
var t = this;
e.id < this.tracks.length && (o.logger.log("subtitle track " + e.id + " loaded"),
this.tracks[e.id].details = e.details,
e.details.live && !this.timer && (this.timer = setInterval(function() {
t.onTick()
}, 1e3 * e.details.targetduration, this)),
!e.details.live && this.timer && this._stopTimer())
}
,
Object.defineProperty(e.prototype, "subtitleTracks", {
get: function() {
return this.tracks
},
enumerable: !0,
configurable: !0
}),
Object.defineProperty(e.prototype, "subtitleTrack", {
get: function() {
return this.trackId
},
set: function(e) {
this.trackId !== e && (this._toggleTrackModes(e),
this.setSubtitleTrackInternal(e))
},
enumerable: !0,
configurable: !0
}),
e.prototype.setSubtitleTrackInternal = function(e) {
var t = this.hls
, r = this.tracks;
if (!("number" != typeof e || e < -1 || e >= r.length) && (this._stopTimer(),
this.trackId = e,
o.logger.log("switching to subtitle track " + e),
t.trigger(n.default.SUBTITLE_TRACK_SWITCH, {
id: e
}),
-1 !== e)) {
var i = r[e]
, a = i.details;
a && !a.live || (o.logger.log("(re)loading playlist for subtitle track " + e),
t.trigger(n.default.SUBTITLE_TRACK_LOADING, {
url: i.url,
id: e
}))
}
}
,
e.prototype._stopTimer = function() {
this.timer && (clearInterval(this.timer),
this.timer = null)
}
,
e.prototype._toggleTrackModes = function(e) {
var t = this.media
, r = this.subtitleDisplay
, i = this.trackId;
if (t) {
var a = l(t.textTracks);
if (-1 === e)
[].slice.call(a).forEach(function(e) {
e.mode = "disabled"
});
else {
var n = a[i];
n && (n.mode = "disabled")
}
var s = a[e];
s && (s.mode = r ? "showing" : "hidden")
}
}
,
e
}(s.default);
t.default = u
}
, function(e, t, r) {
"use strict";
var i, a = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var p = r(1)
, g = r(0)
, n = r(12)
, s = r(15)
, v = r(5)
, m = r(27)
, y = r(7)
, o = window.performance;
t.SubtitleStreamControllerState = {
STOPPED: "STOPPED",
IDLE: "IDLE",
KEY_LOADING: "KEY_LOADING",
FRAG_LOADING: "FRAG_LOADING"
};
var _ = t.SubtitleStreamControllerState
, l = function(i) {
function e(e, t) {
var r = i.call(this, e, p.default.MEDIA_ATTACHED, p.default.MEDIA_DETACHING, p.default.ERROR, p.default.KEY_LOADED, p.default.FRAG_LOADED, p.default.SUBTITLE_TRACKS_UPDATED, p.default.SUBTITLE_TRACK_SWITCH, p.default.SUBTITLE_TRACK_LOADED, p.default.SUBTITLE_FRAG_PROCESSED) || this;
return r.fragmentTracker = t,
r.config = e.config,
r.state = _.STOPPED,
r.tracks = [],
r.tracksBuffered = [],
r.currentTrackId = -1,
r.decrypter = new n.default(e,e.config),
r
}
return a(e, i),
e.prototype.onHandlerDestroyed = function() {
this.fragmentTracker = null,
this.state = _.STOPPED,
i.prototype.onHandlerDestroyed.call(this)
}
,
e.prototype.onSubtitleFragProcessed = function(e) {
if (this.state = _.IDLE,
e.success) {
var t = this.tracksBuffered[this.currentTrackId]
, r = e.frag;
if (this.fragPrevious = r,
t) {
for (var i, a = 0; a < t.length; a++)
if (r.start >= t[a].start && r.start <= t[a].end) {
i = t[a];
break
}
i ? i.end = r.start + r.duration : t.push({
start: r.start,
end: r.start + r.duration
})
}
}
}
,
e.prototype.onMediaAttached = function(e) {
this.media = e.media,
this.state = _.IDLE
}
,
e.prototype.onMediaDetaching = function() {
this.media = null,
this.state = _.STOPPED
}
,
e.prototype.onError = function(e) {
var t = e.frag;
t && "subtitle" === t.type && (this.state = _.IDLE)
}
,
e.prototype.onSubtitleTracksUpdated = function(e) {
var t = this;
g.logger.log("subtitle tracks updated"),
this.tracksBuffered = [],
this.tracks = e.subtitleTracks,
this.tracks.forEach(function(e) {
t.tracksBuffered[e.id] = []
})
}
,
e.prototype.onSubtitleTrackSwitch = function(e) {
if (this.currentTrackId = e.id,
this.tracks && -1 !== this.currentTrackId) {
var t = this.tracks[this.currentTrackId];
t && t.details && this.setInterval(500)
} else
this.clearInterval()
}
,
e.prototype.onSubtitleTrackLoaded = function(e) {
var t = e.id
, r = e.details;
this.tracks ? (this.tracks[t] && (g.logger.log("Updating subtitle track details"),
this.tracks[t].details = r),
this.setInterval(500)) : g.logger.warn("Can not update subtitle details, no tracks found")
}
,
e.prototype.onKeyLoaded = function() {
this.state === _.KEY_LOADING && (this.state = _.IDLE)
}
,
e.prototype.onFragLoaded = function(e) {
var t = this.fragCurrent
, r = e.frag.decryptdata
, i = e.frag
, a = this.hls;
if (this.state === _.FRAG_LOADING && t && "subtitle" === e.frag.type && t.sn === e.frag.sn && 0 < e.payload.byteLength && r && r.key && "AES-128" === r.method) {
var n = o.now();
this.decrypter.decrypt(e.payload, r.key.buffer, r.iv.buffer, function(e) {
var t = o.now();
a.trigger(p.default.FRAG_DECRYPTED, {
frag: i,
payload: e,
stats: {
tstart: n,
tdecrypt: t
}
})
})
}
}
,
e.prototype.doTick = function() {
if (this.media)
switch (this.state) {
case _.IDLE:
var e = this.tracks
, t = this.currentTrackId;
if (!e || !e[t] || !e[t].details)
break;
var r = e[t].details
, i = this.config
, a = i.maxBufferHole
, n = Math.min(i.maxBufferLength, i.maxMaxBufferLength)
, s = i.maxFragLookUpTolerance
, o = v.BufferHelper.bufferedInfo(this._getBuffered(), this.media.currentTime, a)
, l = o.end
, u = o.len
, d = r.fragments
, c = d.length
, h = d[c - 1].start + d[c - 1].duration
, f = void 0;
u < n && l < h ? f = m.findFragmentByPTS(this.fragPrevious, d, l, s) : r.hasProgramDateTime && this.fragPrevious && (f = m.findFragmentByPDT(d, this.fragPrevious.endProgramDateTime, s)),
f && f.encrypted ? (g.logger.log("Loading key for " + f.sn),
this.state = _.KEY_LOADING,
this.hls.trigger(p.default.KEY_LOADING, {
frag: f
})) : f && this.fragmentTracker.getState(f) === y.FragmentState.NOT_LOADED && (f.trackId = t,
this.fragCurrent = f,
this.state = _.FRAG_LOADING,
this.hls.trigger(p.default.FRAG_LOADING, {
frag: f
}))
}
else
this.state = _.IDLE
}
,
e.prototype._getBuffered = function() {
return this.tracksBuffered[this.currentTrackId] || []
}
,
e
}(s.default);
t.SubtitleStreamController = l
}
, function(e, t, r) {
"use strict";
var i, a = this && this.__extends || (i = Object.setPrototypeOf || {
__proto__: []
}instanceof Array && function(e, t) {
e.__proto__ = t
}
|| function(e, t) {
for (var r in t)
t.hasOwnProperty(r) && (e[r] = t[r])
}
,
function(e, t) {
function r() {
this.constructor = e
}
i(e, t),
e.prototype = null === t ? Object.create(t) : (r.prototype = t.prototype,
new r)
}
);
Object.defineProperty(t, "__esModule", {
value: !0
});
var n = r(4)
, s = r(1)
, o = r(3)
, l = r(0)
, u = window.XMLHttpRequest
, d = "com.widevine.alpha"
, c = function(r) {
function e(e) {
var t = r.call(this, e, s.default.MEDIA_ATTACHED, s.default.MANIFEST_PARSED) || this;
return t._widevineLicenseUrl = e.config.widevineLicenseUrl,
t._licenseXhrSetup = e.config.licenseXhrSetup,
t._emeEnabled = e.config.emeEnabled,
t._requestMediaKeySystemAccess = e.config.requestMediaKeySystemAccessFunc,
t._mediaKeysList = [],
t._media = null,
t._hasSetMediaKeys = !1,
t._isMediaEncrypted = !1,
t._requestLicenseFailureCount = 0,
t
}
return a(e, r),
e.prototype.getLicenseServerUrl = function(e) {
var t;
switch (e) {
case d:
t = this._widevineLicenseUrl;
break;
default:
t = null
}
return t || (l.logger.error('No license server URL configured for key-system "' + e + '"'),
this.hls.trigger(s.default.ERROR, {
type: o.ErrorTypes.KEY_SYSTEM_ERROR,
details: o.ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED,
fatal: !0
})),
t
}
,
e.prototype._attemptKeySystemAccess = function(t, e, r) {
var i = this
, a = function(e, t, r) {
switch (e) {
case d:
return i = {
videoCapabilities: []
},
r.forEach(function(e) {
i.videoCapabilities.push({
contentType: 'video/mp4; codecs="' + e + '"'
})
}),
[i];
default:
throw Error("Unknown key-system: " + e)
}
var i
}(t, 0, r);
a ? (l.logger.log("Requesting encrypted media key-system access"),
this.requestMediaKeySystemAccess(t, a).then(function(e) {
i._onMediaKeySystemAccessObtained(t, e)
}).catch(function(e) {
l.logger.error('Failed to obtain key-system "' + t + '" access:', e)
})) : l.logger.warn("Can not create config for key-system (maybe because platform is not supported):", t)
}
,
Object.defineProperty(e.prototype, "requestMediaKeySystemAccess", {
get: function() {
if (!this._requestMediaKeySystemAccess)
throw new Error("No requestMediaKeySystemAccess function configured");
return this._requestMediaKeySystemAccess
},
enumerable: !0,
configurable: !0
}),
e.prototype._onMediaKeySystemAccessObtained = function(t, e) {
var r = this;
l.logger.log('Access for key-system "' + t + '" obtained');
var i = {
mediaKeys: null,
mediaKeysSession: null,
mediaKeysSessionInitialized: !1,
mediaKeySystemAccess: e,
mediaKeySystemDomain: t
};
this._mediaKeysList.push(i),
e.createMediaKeys().then(function(e) {
i.mediaKeys = e,
l.logger.log('Media-keys created for key-system "' + t + '"'),
r._onMediaKeysCreated()
}).catch(function(e) {
l.logger.error("Failed to create media-keys:", e)
})
}
,
e.prototype._onMediaKeysCreated = function() {
var t = this;
this._mediaKeysList.forEach(function(e) {
e.mediaKeysSession || (e.mediaKeysSession = e.mediaKeys.createSession(),
t._onNewMediaKeySession(e.mediaKeysSession))
})
}
,
e.prototype._onNewMediaKeySession = function(t) {
var r = this;
l.logger.log("New key-system session " + t.sessionId),
t.addEventListener("message", function(e) {
r._onKeySessionMessage(t, e.message)
}, !1)
}
,
e.prototype._onKeySessionMessage = function(t, e) {
l.logger.log("Got EME message event, creating license request"),
this._requestLicense(e, function(e) {
l.logger.log("Received license data, updating key-session"),
t.update(e)
})
}
,
e.prototype._onMediaEncrypted = function(e, t) {
l.logger.log('Media is encrypted using "' + e + '" init data type'),
this._isMediaEncrypted = !0,
this._mediaEncryptionInitDataType = e,
this._mediaEncryptionInitData = t,
this._attemptSetMediaKeys(),
this._generateRequestWithPreferredKeySession()
}
,
e.prototype._attemptSetMediaKeys = function() {
if (!this._hasSetMediaKeys) {
var e = this._mediaKeysList[0];
if (!e || !e.mediaKeys)
return l.logger.error("Fatal: Media is encrypted but no CDM access or no keys have been obtained yet"),
void this.hls.trigger(s.default.ERROR, {
type: o.ErrorTypes.KEY_SYSTEM_ERROR,
details: o.ErrorDetails.KEY_SYSTEM_NO_KEYS,
fatal: !0
});
l.logger.log("Setting keys for encrypted media"),
this._media.setMediaKeys(e.mediaKeys),
this._hasSetMediaKeys = !0
}
}
,
e.prototype._generateRequestWithPreferredKeySession = function() {
var t = this
, e = this._mediaKeysList[0];
if (!e)
return l.logger.error("Fatal: Media is encrypted but not any key-system access has been obtained yet"),
void this.hls.trigger(s.default.ERROR, {
type: o.ErrorTypes.KEY_SYSTEM_ERROR,
details: o.ErrorDetails.KEY_SYSTEM_NO_ACCESS,
fatal: !0
});
if (e.mediaKeysSessionInitialized)
l.logger.warn("Key-Session already initialized but requested again");
else {
var r = e.mediaKeysSession;
r || (l.logger.error("Fatal: Media is encrypted but no key-session existing"),
this.hls.trigger(s.default.ERROR, {
type: o.ErrorTypes.KEY_SYSTEM_ERROR,
details: o.ErrorDetails.KEY_SYSTEM_NO_SESSION,
fatal: !0
}));
var i = this._mediaEncryptionInitDataType
, a = this._mediaEncryptionInitData;
l.logger.log('Generating key-session request for "' + i + '" init data type'),
e.mediaKeysSessionInitialized = !0,
r.generateRequest(i, a).then(function() {
l.logger.debug("Key-session generation succeeded")
}).catch(function(e) {
l.logger.error("Error generating key-session request:", e),
t.hls.trigger(s.default.ERROR, {
type: o.ErrorTypes.KEY_SYSTEM_ERROR,
details: o.ErrorDetails.KEY_SYSTEM_NO_SESSION,
fatal: !1
})
})
}
}
,
e.prototype._createLicenseXhr = function(e, t, r) {
var i = new u
, a = this._licenseXhrSetup;
try {
if (a)
try {
a(i, e)
} catch (t) {
i.open("POST", e, !0),
a(i, e)
}
i.readyState || i.open("POST", e, !0)
} catch (e) {
return l.logger.error("Error setting up key-system license XHR", e),
void this.hls.trigger(s.default.ERROR, {
type: o.ErrorTypes.KEY_SYSTEM_ERROR,
details: o.ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED,
fatal: !0
})
}
return i.responseType = "arraybuffer",
i.onreadystatechange = this._onLicenseRequestReadyStageChange.bind(this, i, e, t, r),
i
}
,
e.prototype._onLicenseRequestReadyStageChange = function(e, t, r, i) {
switch (e.readyState) {
case 4:
if (200 === e.status)
this._requestLicenseFailureCount = 0,
l.logger.log("License request succeeded"),
i(e.response);
else {
if (l.logger.error("License Request XHR failed (" + t + "). Status: " + e.status + " (" + e.statusText + ")"),
this._requestLicenseFailureCount++,
this._requestLicenseFailureCount <= 3) {
var a = 3 - this._requestLicenseFailureCount + 1;
return l.logger.warn("Retrying license request, " + a + " attempts left"),
void this._requestLicense(r, i)
}
this.hls.trigger(s.default.ERROR, {
type: o.ErrorTypes.KEY_SYSTEM_ERROR,
details: o.ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED,
fatal: !0
})
}
}
}
,
e.prototype._generateLicenseRequestChallenge = function(e, t) {
var r;
return "com.microsoft.playready" === e.mediaKeySystemDomain ? l.logger.error("PlayReady is not supported (yet)") : e.mediaKeySystemDomain === d ? r = t : l.logger.error("Unsupported key-system:", e.mediaKeySystemDomain),
r
}
,
e.prototype._requestLicense = function(e, t) {
l.logger.log("Requesting content license for key-system");
var r = this._mediaKeysList[0];
if (!r)
return l.logger.error("Fatal error: Media is encrypted but no key-system access has been obtained yet"),
void this.hls.trigger(s.default.ERROR, {
type: o.ErrorTypes.KEY_SYSTEM_ERROR,
details: o.ErrorDetails.KEY_SYSTEM_NO_ACCESS,
fatal: !0
});
var i = this.getLicenseServerUrl(r.mediaKeySystemDomain)
, a = this._createLicenseXhr(i, e, t);
l.logger.log("Sending license request to URL: " + i),
a.send(this._generateLicenseRequestChallenge(r, e))
}
,
e.prototype.onMediaAttached = function(e) {
var t = this;
if (this._emeEnabled) {
var r = e.media;
(this._media = r).addEventListener("encrypted", function(e) {
t._onMediaEncrypted(e.initDataType, e.initData)
})
}
}
,
e.prototype.onManifestParsed = function(e) {
if (this._emeEnabled) {
var t = e.levels.map(function(e) {
return e.audioCodec
})
, r = e.levels.map(function(e) {
return e.videoCodec
});
this._attemptKeySystemAccess(d, t, r)
}
}
,
e
}(n.default);
t.default = c
}
, function(e, t, r) {
"use strict";
Object.defineProperty(t, "__esModule", {
value: !0
});
var i = "undefined" != typeof window && window.navigator && window.navigator.requestMediaKeySystemAccess ? window.navigator.requestMediaKeySystemAccess.bind(window.navigator) : null;
t.requestMediaKeySystemAccess = i
}
]).default
});