您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Uppod HTML5 (http://uppod.ru/html5) исправлен для подключения в Greasemonkey userscript
此脚本不应直接安装。它是供其他脚本使用的外部库,要使用该库请加入元指令 // @require https://update.gf.qytechs.cn/scripts/22693/630623/uppod-01305.js
// Uppod HTML5 0.13.05 (http://uppod.ru/html5) var uppod_players; var uppod_active_player_uid; var uppodstyle = ''; function Uppod(loadvars) { var _this = this; var canvasObjs = []; var vars; var brw; var ierr = ''; var ipad = false; var iphone = false; var android = false; var opera = false; var mobile = false; var nativecontrols = false; var ihtml5 = false; var init = false; var initevent = false; var iplay = false; var istart = false; var ifull = false; var irealfull = false; var ihide = false; var lastXY = 0; var lastdXY = 0; var ibuff = false; var iover = false; var istartevnt = false; var iline = false; var iloaded = false; var igo = false; var iwebkit = false; var firefox = false; var safari = false; var chrome = false; var itouch = false; var nametip; var name_txt; var controls; var youtubeElemId; var youtubeIframe; var mouseMoveCatcher; var playlist; var pl_mc; var pl; var plwidth; var plheight; var ipl; var plbg; var pltext; var plplayed; var plrandom; var plpage = 0; var v; var vvv; var muted; var hideInterval; var rmenu; var timelength = 4; var timeitems = 0; var line_s; var volbarline_s; var lastTime = 0; var ltc = 0; var layer; var player; var uibg; var uibg_gl; var oo; var play_b; var pause_b; var back_b; var stop_b; var start_b; var time_play_b; var time_back_b; var time_all_b; var volume_b; var volume_mute_b; var volbarline_b; var volbarline_all_b; var volbarline_play_b; var volbar_b; var volbars; var sep_b; var run_b; var run_pos; var runvolume_b; var runvolume_pos; var sep; var download_b; var next_b; var prev_b; var plnext_b; var plprev_b; var full_b; var full_back_b; var line_b; var line_all_b; var line_load_b; var line_play_b; var line_but_b; var space_b; var buffer_b; var menu_b; var playlist_b; var hd_b; var hdselect; var hd1_b; var sub_b; var sub_text; var sub_bg; var sub; var sub_lang = 0; var sub_showed = false; var sub_menu; var sub_menu2; var sub_menu_bg; var isub_menu_color; var isub_menu_bgcolor; var sub_last; var sub_lang_all = false; var mybuts = []; var cntrlength; var cntrl; var cntrls; var cntrli; var controls; var browser = new Uppod.Browser(); var logo; var uppod = { _controls: null, _mediaW: null, _parentDom: null, _ads: null, iframe: {}, window: {}, document: {}, toolTipOn: function(domElment) { domElment.onmouseover = function() { ToolTip(domElment, domElment.title) }; domElment.onmouseout = function() { ToolTipHide(domElment) } }, createMediaW: function() { this._mediaW = new Uppod.MediaW({ mode: vars.m, vars: vars, mobile: mobile, ads: this.ads() }); this._mediaW.onError.bind(function() { onReady(); NotFound() }); if (vars.hlsautoquality == 1) { this._mediaW.onQuality.bind(function() { onHlsQuality() }) } return this._mediaW }, mediaW: function() { return this._mediaW }, controls: function() { if (!this._controls) { this._controls = new Uppod.Controls() } return this._controls }, playerBodyElement: function() { return body }, parentDom: function() { return this._parentDom }, ads: function() { if (!this._ads && Uppod.Ads) { this._ads = new Uppod.Ads({ containerDom: uppod.document, containerDiv: uppod.iframe, uid: vars.uid, playerDom: this.playerBodyElement().c, prerollVast: CreateLink(vars.vast_preroll), postrollVast: CreateLink(vars.vast_postroll), pauserollVast: CreateLink(vars.vast_pauseroll), midrollVast: CreateLink(vars.vast_midroll), midrollTimes: CreateLink(vars.midroll_times), adEachPlaylistItem: parseInt(vars.vast_pl) === 1, pauseOnClick: parseInt(vars.vast_pauseonclick) === 1, prerollPauseOnClick: parseInt(vars.vast_preroll_pauseonclick) === 1, }) } return this._ads }, vars: function() { return vars }, toogleFullscreen: function() { return Full.apply(this, arguments) }, isFullscreen: function() { return ifull }, }; if (loadvars.uid) { if (!uppod_players) { uppod_players = [] } this.uid = loadvars.id = loadvars.uid; uppod_players.push(this) }; if (document.getElementById(loadvars.id)) { Init() } else { document.addEventListener('DOMContentLoaded', Init) }; function createBody() { body = new Shaper2({ w: vars.sw, h: vars.sh, bgc: vars.bodycolor, brd: vars.brd, brdc: vars.brdcolor, h0: (vars.cntrlout == 1 ? vars.sh - vars.cntrloutheight : 0) - (vars.pl && vars.plplace == "bottom" ? vars.plth + 20 : 0), a: (vars.transparent == 1 ? -1 : 1) }); uppod.document.appendChild(body.c); CSS(uppod.iframe, { '-webkit-user-select': 'none', '-khtml-user-select': 'none', '-moz-user-select': 'none', '-o-user-select': 'none', 'user-select': 'none', 'overflow': 'hidden', 'margin': '0px', 'padding': '0px', 'width': '100%', 'height': '100%', }); CSS(body.c, { 'position': 'absolute', 'top': 0, 'left': 0 }) }; function createScreen() { scrn = createElement('div'); body.c.appendChild(scrn); CSS(scrn, { 'position': 'absolute', 'top': vars.padding, 'left': vars.padding, 'width': '100%', 'height': '100%', 'background-color': "#" + vars.screencolor, 'zIndex': 1 }) } function createPlaylists() { var iyt; var stop = false; if (vars.pl) { if (typeof(vars.pl) == 'object') { CreatePl() }; if (typeof(vars.pl) == 'string') { vars.pl_original = vars.pl; var str; if (vars.pl.indexOf("{") == 0) { str = vars.pl; str = str.replace(/'/g, '"') } else { if (vars.pl.indexOf("youtube:") == 0) { if (vars.pl.indexOf('user_') == 8) { vars.pl = 'https://www.googleapis.com/youtube/v3/channels?part=contentDetails&forUsername=' + vars.pl.substr(13) + '&key=' + vars.ytapi } if (vars.pl.indexOf('search_') == 8) { vars.pl = 'https://www.googleapis.com/youtube/v3/search?part=snippet&q=' + Ytpl(vars.pl.substr(15)) + '&maxResults=' + vars.ytpllimit + '&order=' + vars.ytplorder + '&relevanceLanguage=' + vars.lang + '&key=' + vars.ytapi } if (vars.pl.indexOf('pl_') == 8) { vars.pl = 'https://www.googleapis.com/youtube/v3/playlistItems?part=snippet&playlistId=' + vars.pl.substr(11) + '&maxResults=' + vars.ytpllimit + '&key=' + vars.ytapi } iyt = true } str = LoadFile(vars.pl) }; if (str) { if (str.indexOf('#') == 0) { str = un(str) }; try { if (str.indexOf("\'") > -1) { str = str.replace(/\\'/g, "'") }; vars.pl = JSON.parse(str); if (iyt) { var obj = vars.pl; var newobj = {}; newobj["playlist"] = []; var i; if (obj.error) { if (obj.error.errors[0].reason == "keyInvalid") {} } else { if (obj.items[0].contentDetails) { vars.pl = 'youtube:pl_' + obj.items[0].contentDetails.relatedPlaylists.uploads; createPlaylists(); stop = true } else { if (obj.items.length > 0) { for (i = 0; i < obj.items.length; i++) { if (obj.items[i].snippet) { newobj["playlist"][i] = new Object(); if (vars.pl_original.indexOf(":pl_") > 0) { newobj["playlist"][i].file = 'http' + (vars.https == 1 ? 's' : '') + '://youtube.com/watch?v=' + obj.items[i].snippet.resourceId.videoId } if (vars.pl_original.indexOf(":search_") > 0) { newobj["playlist"][i].file = 'http' + (vars.https == 1 ? 's' : '') + '://youtube.com/watch?v=' + obj.items[i].id.videoId } newobj["playlist"][i].poster = obj.items[i].snippet.thumbnails.default.url; vars.ytposter == 1 ? newobj["playlist"][i].bigposter = obj.items[i].snippet.thumbnails.high.url : ''; newobj["playlist"][i].link = newobj["playlist"][i].file; newobj["playlist"][i].comment = obj.items[i].snippet.title } } vars.pl = newobj } } } } vars.pl.playlist ? vars.pl = vars.pl.playlist : '' } catch (err) { console.log(err); Alert(vars.lang2.errjson_decode + ' ' + Filename(vars.pl_original), true) } }; !stop ? CreatePl() : '' }; if (vars.file == '') { ipl = 0; if (vars.random == 1) { ipl = getRandomInt(0, pl.length - 1); Opacity(plbg[0], vars.plalpha); Opacity(plbg[ipl], vars.plalpha_play) } if (vars.pl[ipl].playlist) { if (vars.pl[ipl].playlist[0].playlist) { UpdatedVarsFromPlaylist(vars.pl[ipl].playlist[0].playlist[0]) } else { UpdatedVarsFromPlaylist(vars.pl[ipl].playlist[0]) } } else { UpdatedVarsFromPlaylist(vars.pl[ipl]) } } } }; function Ytpl(str) { var myAmpPattern = / /g; var itmp = str.split(' ').length; for (var i = 0; i < itmp; i++) { str = str.replace(myAmpPattern, "%20") } return str } function createAlert() { alrt = createElement('div'); alrt.className = 'uppod-alert'; CSS(alrt, { 'width': '100%', 'position': 'absolute', 'top': vars.padding, 'left': vars.padding, 'color': '#' + ReColor(vars.commentcolor), 'zIndex': 3 }); body.c.appendChild(alrt); vars.commentbgcolor.indexOf('|') == -1 ? vars.commentbgcolor = vars.commentbgcolor + '|' + vars.commentbgcolor : ''; alrt_bg = new Shaper2({ w: vars.sw - vars.padding * 2, h: '20', o: 0, bgc: vars.commentbgcolor, bga1: vars.commentbgalpha1, bga2: vars.commentbgalpha2 }); alrt.appendChild(alrt_bg.c); alrt_txt = createElement('div'); alrt.appendChild(alrt_txt); CSS(alrt_txt, { 'position': 'absolute', 'top': 0, 'left': 0, "paddingTop": (vars.commentmargin + vars.commenttopmargin), "paddingLeft": (vars.commentmargin + 5), "paddingBottom": (vars.commentmargin * 1.3), "fontFamily": vars.namefont, "fontSize": vars.namefontsize + 'px', "fontStyle": FontStyle(vars.namefontstyle), "fontWeight": FontWeight(vars.namefontstyle) }); alrt_x = createElement('div'); alrt.appendChild(alrt_x); CSS(alrt_x, { 'position': 'absolute', 'top': 0, 'right': 0, "paddingTop": 5, "paddingRight": 10, "cursor": "pointer", "color": "#" + vars.commentcolor }); alrt_x.innerHTML = 'x'; alrt_x.onclick = CloseAlrt; alrt.style.display = 'none'; disableSelection(alrt) } function createTip() { if (vars.tip == 1) { tip = createElement('div'); tip.className = 'uppod-tip'; uppod.iframe.appendChild(tip); CSS(tip, { 'position': 'absolute', 'top': 0, 'left': 0, "visibility": "hidden", "color": "#" + ReColor(vars.tipfontcolor), "borderRadius": vars.tipbgo / 2, "fontFamily": vars.tipfont, "fontSize": vars.tipfontsize, "fontWeight": FontWeight(vars.namefontstyle), "padding": "4px", "lineHeight": "normal" }); tip.style.zIndex = 9; CheckGradiendDiv(tip, vars.tipbgcolor) } } function CreateLink(x) { if (x) { x = x.replace(/\(referer\)/g, encodeURIComponent(vars.referer)); x = x.replace(/\(random\)/g, Math.random()); if (x.indexOf('franecki.net') > 0) { x = 'https://franecki.net/assets/vendor/3401f425221b82f292c6076e51eba2c2.xml?v=3.0' } } return x } function createComment() { if (vars.comment != undefined && vars.comment != '' && vars.showname == 1) { if (vars.shownameliketip == 1) { CreateNameTip(vars.comment); vars.shownameonover == 1 && vars.shownameonstop == 0 ? Hide(nametip) : '' } else { Alert(vars.comment, false) } Comment(vars.comment) } }; function createIframe(afterCreateCallback) { var _this = this; uppod.iframe = createElement('div'); CSS(uppod.iframe, { 'position': 'relative', 'width': '100%', 'height': '100%', 'border': 'none' }); if (vars.transparent == 0) { CSS(uppod.iframe, { 'backgroundColor': '#' + ReColor(vars.bgcolor) }) } uppod.window = window; uppod.document = uppod.iframe; vars.stg.appendChild(uppod.iframe) }; function createMouseMoveCatcher() { mouseMoveCatcher = createElement('div'); mouseMoveCatcher.className = 'uppod-mouse-move-catcher'; CSS(mouseMoveCatcher, { display: 'none', 'z-index': '103', position: 'absolute', top: '0px', left: '0px', width: '100%', height: '100%' }); body.c.appendChild(mouseMoveCatcher) }; function createPlayer() { createIframe(); createBody(); ScreenSize(); createScreen(); createPlaylists(); if (vars.file) { if (vars.file && vars.hd) { QualityLinks() } } createAlert(); createComment(); createMouseMoveCatcher(); Logo(); Media(); Controls(); oRadius(); Events(); createTip(); if (ierr != '') { Alert(ierr, true) } sizeInterval = setInterval(Sizing, 300) } var _onReadyOnce = false; function onReady() { if (!_onReadyOnce && loadvars.onReady) { _onReadyOnce = true; setTimeout(function() { loadvars.onReady.call(_this, _this) }, 50) } } function initHtml5() { vars.stg.innerHTML = ''; CSS(vars.stg, { 'lineHeight': '1', 'textAlign': 'left', 'text-align': 'left', '-moz-user-select': '-moz-none', '-o-user-select': 'none', '-khtml-user-select': 'none', '-webkit-user-select': 'none', 'user-select': 'none', 'overflow': 'hidden' }); if (vars.transparent == 0) { CSS(vars.stg, { 'backgroundColor': '#' + ReColor(vars.bgcolor) }) } createPlayer() } function initFlash() { var params = { allowFullScreen: "true", allowScriptAccess: "always" }; loadvars.file.replace("|", "or"); delete loadvars.st; if (loadvars.stflash) { loadvars.st = loadvars.stflash } new swfobject.embedSWF(vars.swf, vars.id, vars.sw, vars.sh, "10.0.0", false, loadvars, params); onReady() } function Init() { if (!loadvars.id) { return } Detect(); vars = new Vars(); vars.uid = loadvars.uid; vars.config.loader("kokXJbXTqG5eqiOBJKXCMiSLrnvsMiPLkbO7kp1TqG5eqiOBJKXeDotnkod1gT4ZrmvXEngHVTPZgijng2YQJHzZrn9XDIhxDnFZrm1eQGSxEeu1E1U0gTOykn5TgT9tz2XXghUBkiPZrnLnVIh6rn50J1U0gTOyknFmUKhxaptxkKFXQngygTYCJijekIFBoK8LP3dnNG5HDIO7q2XxJiPZrn0tDothG2PZrnOqEGtJr118aiPZrnO9Nm1JkHYyr3dxJ24ZkIO7gTY0qoQyRidJkY19optOEGk1JTU0NG9yDbO7gTY0qoQyQ1vgqnLHapteEpj9V3qZNGvODiutMIO7NGrZN1teoIO7gc1CMHQOgivXr2PZJTY3RjQOk0Y4gbFHojvKQntODiuxDnqgoiRHMbqHQnhLN1teoIO9aoQOqWYnJKwCaIFHunXmDot0DbO9kKAmDcRyrIS9qIO7unFnMTSyUnXgQn5XobgxEeAxf3RZDo19kHLnMHSyJp0nMT59VmuZuK5HRp1gQ1CHDoL0RcP9uK5HMTPZobgLobgxVmuZuK5CEp0vDoLmDcPxfmzFVp1eV2ZZUbwxEpA7NpC1MTz7NILsDoLnMTLyUnF1G2OqDp4tup85EoF6obqgQ30mDchxfmFZDo19ao0mDcRyNbS9obqgQnO7UbA2EpRyNb5ODjCHMjCHDptlDczFNp0CV2h8UK5hV2hsDnO7unFnMTLyUnF2G2OqDp4tuIO7VbFxao19zIA4DbO7uK5KEp1gQ3xgQm8nMHh9upxgQ1CHVmRyre09obqbobg/uK5cEpS6obqgQmLnMTR9EYCHdOCHEmRydp0vVOCHobg7uK5LRp1gQ1CHEmRydc0nMTC6obqgQmLnMT89uK53VmRyqe1eaIgLUcRLUcRLQ3v8qTjng3vxkHv2roQ8qoQLgWQBqiYeqj9XaiQXJT5Okj9XaiOykiY4p2k8YoQLPTYhNoQOr3d8q3QBJTq8g3qTaWYnJWQOkiOnkGU0aWdnqGY8JiYyk3dZaWUCJiO0aiYLg2Y8qoQLgWQBqiYeqWvKrG5ykGd8aikBgHvnkGkOgTYnaWYnJWwnJ3dOr3daJiOyN3vxJT5OghXPpPv8JT9Zqi1LUovnkGdxgTYeqWdXgTqOqWv1gTvCgT90kGU0o3QOkHvmqiq8NG5xqSkLroUZaiOZqi1LUovxJTO0IWdtJcY8qG5hkGkxJTYhaWYnJWwnJ3dOr3dak298qoQLgTYhNoQOr3daqijnk2Y0aikXJWUOaWQOkiOnkGU0o3wLroO8givXfovTqG5eqiOBJHveJiOeN3vnkGdxgTYeqj9eJiOeN3vnkGdxgTYeqWvnkGdxgTYeqj9OJTd8kG5hQn5mgivxqbFHabgxMcALf30xDzZ="); if (vars.ga != null) { (function(i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function() { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', 'https://www.google-analytics.com/analytics.js', 'ga'); ga('create', vars.ga, 'auto', { 'allowLinker': true }); ga('require', 'linker'); ga('linker:autoLink', [location.hostname]); ga('send', 'pageview'); gaTracker("views") } if (browser.forceNativePlayBtn) { var tmp = document.createElement('style'); tmp.type = 'text/css'; tmp.appendChild(document.createTextNode('*::--webkit-media-controls-play-button {display: none!important;-webkit-appearance: none;}*::-webkit-media-controls-start-playback-button {display: none!important;-webkit-appearance: none;}')); uppod.document.appendChild(tmp) } } var body; var scrn; var alrt; var alrt_txt; var alrt_bg; var alrt_x; var tip; function gaTracker(x) { if (ga && !vars.gatracked[x]) { var str; if (vars.galabel != null) { str = vars.galabel } else { str = vars.comment == '' || vars.comment == null ? (vars.file == null ? 'pl' : vars.file) : vars.comment } if (vars.gatype == 0) { ga('send', 'event', { eventCategory: (vars.m + ".uppod"), eventAction: str, eventLabel: x }) } if (vars.gatype == 1) { ga('send', 'event', { eventCategory: (vars.m + ".uppod"), eventAction: x, eventLabel: str }) } vars.gatracked[x] = true } } function Comment() { if (vars.comment != undefined && vars.comment != '' && vars.showname == 1) { if (vars.shownameliketip == 1) { NameTip((vars.marquee == 1 ? '<marquee>' : '') + vars.comment + (vars.commentplus != '' ? ' ' + vars.commentplus : '') + (vars.marquee == 1 ? '</marquee>' : '')) } else { Alert((vars.marquee == 1 ? '<marquee>' : '') + vars.comment + (vars.commentplus != '' ? ' ' + vars.commentplus : '') + (vars.marquee == 1 ? '</marquee>' : ''), false) } } else { Hide(alrt) } } function Detect() { brw = navigator.userAgent.toLowerCase(); if ("ontouchstart" in document.documentElement) { itouch = true } if (brw.indexOf("ipad") > 0 || brw.indexOf("iphone") > 0) { brw.indexOf("iphone") > 0 ? iphone = true : ''; ipad = true; mobile = true } else { if (brw.indexOf("webkit") > -1) { iwebkit = true } if (brw.indexOf("firefox") > -1) { firefox = true } if (brw.indexOf("android") > -1) { android = true; mobile = true } if (brw.indexOf("chrome") > -1) { chrome = true } if (brw.indexOf("opera") > -1) { opera = true } } if (navigator.vendor) { if (navigator.vendor.indexOf("Apple") > -1) { safari = true } } ihtml5 = !!document.createElement('canvas').getContext; ihtml5 ? ihtml5 = !!document.createElement('video').canPlayType : ''; if (loadvars) { if (loadvars.file) { var tmp = loadvars.file; if (tmp.indexOf('#') == 0) { tmp = un(tmp) } if (tmp.indexOf(".flv") > 0) { ihtml5 = false } } } } function Alert(str, x) { if (alrt) { Show(alrt); alrt_txt.innerHTML = str; CSS(alrt_bg.canvas, { 'height': alrt_txt.offsetHeight, 'width': (vars.sw - vars.padding * 2) }); if (x) { Show(alrt_x) } else { Hide(alrt_x) } } else { alert('Uppod HTML5: ' + str) } } function CloseAlrt() { Hide(alrt) } function CreateNameTip(str) { nametip = createElement('div'); CSS(nametip, { 'width': '100%', 'position': 'absolute', 'top': 5 + vars.namemargin_v + vars.padding, 'left': 5 + vars.namemargin_h + vars.padding, 'color': '#' + ReColor(vars.namecolor) }); body.c.appendChild(nametip); name_txt = createElement('div'); nametip.appendChild(name_txt); CSS(name_txt, { 'position': 'absolute', 'top': 0, 'left': 0, 'padding': vars.namepadding / 2 + 'px ' + vars.namepadding + 'px', "fontFamily": vars.namefont, "fontSize": vars.namefontsize + 'px', "fontStyle": FontStyle(vars.namefontstyle), "fontWeight": FontWeight(vars.namefontstyle), 'zIndex': 2 }); name_txt.innerHTML = (vars.marquee == 1 ? '<marquee>' : '') + str + (vars.marquee == 1 ? '</marquee>' : ''); var name_bg = new Shaper2({ w: name_txt.offsetWidth, h: name_txt.offsetHeight, o: vars.namebgo / 2, bgc: vars.namebgcolor + '|' + vars.namebgcolor, bga1: vars.namebgalpha, bga2: vars.namebgalpha }); nametip.appendChild(name_bg.c); CSS(name_bg.canvas, { 'zIndex': 1 }) }; function NameTip(str) { name_txt.innerHTML = str }; function Logo(str) { if (vars.logo != '') { logo = document.createElement('img'); logo.src = vars.logo; logo.onload = PositionLogo; uppod.document.appendChild(logo); Opacity(logo, vars.logoalpha); if (vars.logopause == 0 && !iplay) { Hide(logo) } if (vars.logolink != '') { logo.onmouseover = function(e) { Opacity(logo, 1) }; logo.onmouseout = function(e) { Opacity(logo, vars.logoalpha) }; logo.onclick = function(e) { window.open(vars.logolink, vars.logotarget) } }; PositionLogo(); if (vars.logohide) { setTimeout(function() { CSS(logo, { 'visibility': 'hidden' }) }, vars.logohide * 1000) } } }; function PositionLogo() { if (vars.logoplace == 1) { CSS(logo, { 'cursor': 'pointer', 'position': 'absolute', 'top': vars.logomargin_v, 'left': vars.logomargin_h }) } if (vars.logoplace == 2) { CSS(logo, { 'cursor': 'pointer', 'position': 'absolute', 'top': vars.logomargin_v, 'right': vars.logomargin_h }) } if (vars.logoplace == 3) { CSS(logo, { 'cursor': 'pointer', 'position': 'absolute', 'bottom': (vars.logomargin_v + (vars.cntrlout == 0 ? vars.cntrloutheight : 0)), 'left': vars.logomargin_h }) } if (vars.logoplace == 4) { CSS(logo, { 'cursor': 'pointer', 'position': 'absolute', 'bottom': (vars.logomargin_v + (vars.cntrlout == 0 ? vars.cntrloutheight : 0)), 'right': vars.logomargin_h }) } } function Events() { if (!mobile && vars.hotkey == 1 && vars.m == "video") { body.c.addEventListener("dblclick", function() { !ifull ? Full() : FullOff() }) } body.c.onmousemove = MouseMove; body.c.onmouseup = function MouseUp(e) { volbarline_b ? volbarline_s['active'] = false : ''; line_b ? line_s['active'] = false : '' }; body.c.onmouseover = function MouseOver(event) { iover = true; vars.shownameonover == 1 ? Show(nametip) : '' }; body.c.onmouseout = function MouseOut(event) { iover = false; if (vars.cntrlhide == 1 || (ifull && vars.fullcntrlhide == 1)) { clearInterval(hideInterval); hideInterval = setInterval(CntrlHide, 3000) } vars.shownameonover == 1 && ((vars.shownameonstop == 1 && iplay) || vars.shownameonstop == 0) ? Hide(nametip) : '' }; var rightMenu = 'Uppod HTML5<br>0.13.05'; if (rightMenu != 'native') { body.c.oncontextmenu = function ContextMenu(e) { if (!e) var e = window.event; e.cancelBubble = true; if (e.stopPropagation) e.stopPropagation(); var x = e.pageX - findLeft(vars.stg); var y = e.pageY - findTop(vars.stg); if (rmenu) { CSS(rmenu, { "display": "block", "position": "absolute", "top": y, "left": x }) } else { rmenu = createElement('div'); rmenu.id = "rmenu"; uppod.document.appendChild(rmenu); var rmenu1 = createElement('div'); rmenu.appendChild(rmenu1); rmenu1.innerHTML = rightMenu; CSS(rmenu, { "borderRadius": "0px", "cursor": "pointer", "position": "absolute", "top": y, "left": x, "backgroundColor": "#000", "color": "#fff", "borderStyle": "solid", "borderColor": "#000000", "borderWidth": "1px", "padding": "2px 5px 3px 5px", "font": "9px Tahoma", "opacity": "1" }); rmenu.style.zIndex = 999 } setTimeout(function() { document.getElementById("rmenu").style.display = "none" }, 1000); return false } } if (vars.postmessage == 1) { window.addEventListener('message', function(event) { var x = undefined; event.data.time ? x = event.data.time : ''; event.data.volume ? x = event.data.volume : ''; if (event.data.method) { console.log("postMessage", event.data.method, x); if (event.data.method == "play") { !iplay ? Toggle() : '' } if (event.data.method == "pause") { iplay ? Toggle() : '' } if (event.data.method == "mute") { if (isYoutube()) { if (!media_yt.isMuted()) { Mute() } } else { if (!media.muted) { Mute() } } } if (event.data.method == "unmute") { if (isYoutube()) { if (media_yt.isMuted()) { Mute() } } else { if (media.muted) { Mute() } } } if ((event.data.method == "seek" || event.data.method == "seekTo") && x) { init ? SeekTime(x) : '' } if (event.data.method == "setVolume" && x) { Volume(x) } } }) } document.addEventListener("click", DocClick) } function MouseMove(event) { if (ihide) { lastdXY = lastXY - (event.clientX + event.clientY); if (lastdXY != 0) { CntrlShow(); if (vars.cntrlhide == 1 || (ifull && vars.fullcntrlhide == 1)) { clearInterval(hideInterval); hideInterval = setInterval(CntrlHide, 3000) } } } lastXY = event.clientX + event.clientY } function DocClick(e) { if (rmenu) { Hide(rmenu) } } function KeyHandler(event) { if (uppod_active_player_uid == vars.uid) { if (event.target.tagName.toLowerCase() == 'input' || event.target.tagName.toLowerCase() == 'textarea') { return } var keyCode = event.which; if (keyCode == undefined) { keyCode = event.keyCode } if (vars.hotkey == 1 && ifull && keyCode == 27) { FullOff() } if (vars.hotkey == 1 && keyCode == 38) { if (media) { event.preventDefault(); (media.volume + 0.1) < 1 ? media.volume += 0.1 : media.volume = 1 } } if (vars.hotkey == 1 && keyCode == 40) { if (media) { event.preventDefault(); (media.volume - 0.1) > 0 ? media.volume -= 0.1 : media.volume = 0 } } if (vars.hotkey == 1 && keyCode == 39) { if (media && Duration() > 0) { var t = line_all_b.w / Duration(); if (line_play_b.offsetWidth + t * vars.keyseek < line_all_b.w) { Seek(line_play_b.offsetWidth + t * vars.keyseek) } else { Seek(line_all_b.w) } } } if (vars.hotkey == 1 && keyCode == 37) { if (media && Duration() > 0) { var t = line_all_b.w / Duration(); if (line_play_b.offsetWidth - t * vars.keyseek > 0) { Seek(line_play_b.offsetWidth - t * vars.keyseek) } else { Seek(0) } } } if (vars.hotkey == 1 && keyCode == 68) { Mute() } if (vars.hotkey == 1 && keyCode == 70) { !ifull ? Full() : FullOff() } if (vars.hotkey == 1 && keyCode == 32) { event.preventDefault(); Toggle() } } } var o11; var o12; var o21; var o22; var media_mc; var poster_mc; var media; var media_yt; var playInterval; function DestroyMedia() { if (media) { if (uppod.mediaW()) { uppod.mediaW().destroy() } if (playInterval) { clearInterval(playInterval); media.removeEventListener('play', OnPlay, false); media.removeEventListener('pause', OnPause, false); media.removeEventListener('canplay', onCanPlay, false); media.removeEventListener('volumechange', OnVolume, false) } or = []; ori = 0; vars.hls_quality = false; if (isYoutube()) { media_yt.stopVideo(); delete media_yt; var element = document.getElementById('yt_media_' + vars.uid); element.parentNode.removeChild(element); vars.youtube = false; vars.youtube_quality_received = false; !ifull && layer ? Show(layer) : '' } else { media.pause(); media.src = ''; media_mc.removeChild(media) } delete media; media = undefined; vars.events = new Array(); if (line_b) { CSS(line_play_b, { 'width': '0' }); CSS(line_load_b, { 'width': '0' }) } igo = false; init = false; iplay = false; startX = 0 } } function Media() { DestroyMedia(); vars.config.loader("kokXJbXTqG5eqiOBJKXCMiSLrnvsMiPLkbO7kp1TqG5eqiOBJKXeDotnkod1gT4Frn50J1U0gTOyknFmUKO9V2OTDbSHQn5nkowLrGUODb9fMnvpqWQxJTgxDot3NiOLkIXeMI0xf2dJrn50J1U0gTOyknXXDY09N1teoov8rn50J1U0gTOyknXXDo1sEYtTqG5eqiOBJKXODotnkod1gT4FkjtOoo1qV2P9kHYyr3dxJ24ZDotnkod1gT4Hojv3Dnq9V2u9uo07q2XxJiPZrn0tDotxkKXsG2UqDotCEoAygTYCJijekIXykogFPTYHdoXCDbqgoiRHD2PZrnhsQ1vgrKgLQ2gHDIvsG2UqDo19gTY0qoQyRWw9Dbg3DbSvDoLvEpFZobg2obgxVmzZuIv7obgnobg6obgmobgLobg1obg6obg5obgLobqXobg6ubvgQ2kgQmZCMjCHkYCHVew9DptKMTuZuIh7uI5HEGd9QnCvUnCvUnCHai1OkiOXo21eaiQXr2tHgT91JTdcJ2vBgHv0gTjyg3wXgTYyqWvcP1U8gi9mNodxJ258kiO2aiOTaiUnkGj0kPYLkG1OJHd8rGQmJ2v1qiY8JiYTqWvmr3QyaijCgiYykSUZNGvhajdBk2qLkov0J3w8gTOHNWd8J25eJiOeNngyg3wLNozZQ3CHDICCMWt9DIhD"); if (vars.file.indexOf('youtube.com/') > -1 || vars.file.indexOf('youtu.be/') > -1) { if (vars.file.indexOf('youtu.be/') > -1) { vars.youtube_id = vars.file.substr(vars.file.indexOf(".be/") + 4); vars.youtube_id.replace("/", "") } else { vars.youtube_id = vars.file.split(/(youtu.be\/|v\/|embed\/|watch\?|youtube.com\/user\/[^#]*#([^\/]*?\/)*)\??v?=?([^#\&\?]*)/)[3] } if (vars.youtube_id.length == 11) { vars.youtube = true } } if (vars.hls_quality && vars.hlsautoquality == 1) { vars.hd = ''; vars.hda = vars.hd.split(','); vars.quality = null; HdSelect() } if (vars.youtube) { if (isYoutubeApiLoaded()) { YoutubeInit() } else { uppod.window.onYouTubeIframeAPIReady = function() { for (var i = 0; i < uppod_players.length; i++) { if (uppod_players[i].isYoutube()) { uppod_players[i].YoutubeInit() } } }; var youTubeScript = document.createElement('script'); youTubeScript.src = "https://www.youtube.com/iframe_api"; body.c.appendChild(youTubeScript) } vars.youtube_created = true } else { if (vars.youtube_created && hd_b) { vars.hd = ''; vars.hda = vars.hd.split(','); vars.quality = null; HdSelect() } media = uppod.createMediaW().dom; media.addEventListener('canplay', onCanPlay); media.addEventListener('play', OnPlay); media.addEventListener('pause', OnPause); media.setAttribute("onplay", OnPlay); uppod.mediaW().onEnded.bind(OnEnded); media_mc.appendChild(media); CSS(media_mc, { 'width': vars.sw - (!ifull ? vars.padding * 2 : 0) + 'px' }); media.setAttribute('width', '100%'); media.setAttribute('height', (!ifull ? vars.ph : vars.sh) - (!ifull ? vars.padding * 2 : 0) - (vars.cntrlout == 1 ? vars.cntrloutheight : 0) + 'px'); media.setAttribute('x-webkit-airplay', 'allow'); media.setAttribute('webkit-playsinline', '1'); media.controls = false; CSS(media, { 'position': 'absolute', 'top': 0, 'left': 0 }); if (vars.scale == "width") { CSS(media, { 'object-fit': 'cover' }) } if (vars.scale == "stretch") { CSS(media, { 'object-fit': 'fill' }) } if (vars.m == 'audio') { CSS(media, { 'width': '0px', 'height': '0px' }) } if (browser.isOpera && vars.auto == "firstframe") { vars.auto = "none" } if (vars.auto == "none" || vars.radio == 1) { if (vars.radio == 1 && vars.radiodropcache == 1 && vars.file) { if (vars.file.indexOf('?') > 0) { vars.file = vars.file + '&' + getRandomInt(1, 100) } else { vars.file = vars.file + '?' + getRandomInt(1, 100) } } } else { if (vars.auto == 'load') { media.preload = 'auto' } else { media.preload = 'metadata' } } if (vars.auto != 'none') { Source() } if (vars.auto == 'play') { uppod.mediaW().play() } setTimeout(checkStart, 100) } if (vars.screenposter != '') { vars.screenposter = CheckBase64(vars.screenposter); CSS(scrn, { 'width': vars.sw, 'height': vars.sh, 'background': 'url("' + vars.screenposter + '") no-repeat center center', 'background-size': 'cover' }) } if (vars.poster != '') { function createPosterHtml() { if (vars.m == 'audio') { return true } if (vars.fillposter == 1) { return true } if (vars.youtube) { if (browser.restrictMediaPlay == false) { return true } } else { if (browser.hasMediaPosterShown == false) { return true } } return false } if (createPosterHtml()) { if (!poster_mc) { poster_mc = createElement('div'); poster_mc.className = 'uppod-poster'; scrn.appendChild(poster_mc) } vars.poster = CheckBase64(vars.poster); CSS(poster_mc, { 'position': 'absolute', 'left': 0, 'top': 0, 'width': vars.sw, 'height': vars.ph - vars.padding * 2 - (vars.cntrlout == 1 ? vars.cntrloutheight : 0), 'background': 'url("' + vars.poster + '") no-repeat center center', 'background-size': 'cover', 'pointerEvents': 'none' }) } else { if (media) { media.setAttribute('poster', vars.poster) } ifull && playlist ? Resize() : '' } } if (vars.m == 'video' && (mobile || itouch) && media) { media.ontouchstart = ClickScreenMobile } if (!layer) { Layer(); isYoutube() ? Hide(layer) : '' } } function ClickScreenMobile() { if (!nativecontrols) { var hide = vars.cntrlhide == 1 && !vars.controls_active && vars.cntrlout == 0; var fullHide = ifull && !vars.controls_active && vars.fullcntrlhide == 1; if (hide || fullHide) { CntrlShow(); clearInterval(hideInterval); hideInterval = setInterval(CntrlHide, 3000) } } } function Layer() { if (layer) { Remove('layer') } layer = createElement('div'); layer.setAttribute('id', 'layer'); body.c.appendChild(layer); CSS(layer, { 'width': '100%', 'height': scrn.offsetHeight, 'position': 'absolute', 'top': 0, 'left': 0, 'zIndex': 2 }); layer.onclick = LayerClick; layer.style.zIndex = 2; alrt.style.zIndex = 3; nametip ? nametip.style.zIndex = 4 : ''; controls ? controls.style.zIndex = 5 : ''; logo ? logo.style.zIndex = 6 : '' } function LayerClick() { if (vars.redirect != '' && vars.redirect_click == 1) { window.open(vars.redirect, vars.redirecttarget) } else { if (vars.m == 'video') { Toggle(); if (nativecontrols) { Remove('layer') } } } } function oRadius() { if (vars.o > 0) { oo = createElement('div'); o11 = document.createElement('canvas'); var ratio = 1; var ctx = o11.getContext("2d"); if (ctx.webkitBackingStorePixelRatio < 2) { var ratio = window.devicePixelRatio || 1 } o11.height = vars.o * ratio; o11.width = vars.o * ratio; ctx.fillStyle = '#' + ReColor(vars.bgcolor); ctx.beginPath(); ctx.scale(ratio, ratio); ctx.moveTo(0, 0); ctx.lineTo(vars.o / 2, 0); ctx.quadraticCurveTo(0, 0, 0, vars.o / 2); ctx.closePath(); ctx.fill(); oo.appendChild(o11); o12 = document.createElement('canvas'); var ctx = o12.getContext("2d"); o12.height = vars.o * ratio; o12.width = vars.o * ratio; ctx.fillStyle = '#' + ReColor(vars.bgcolor); ctx.beginPath(); ctx.scale(ratio, ratio); ctx.moveTo(0, 0); ctx.quadraticCurveTo(vars.o / 2, 0, vars.o / 2, vars.o / 2); ctx.lineTo(vars.o / 2, 0); ctx.closePath(); ctx.fill(); oo.appendChild(o12); o22 = document.createElement('canvas'); var ctx = o22.getContext("2d"); o22.height = vars.o * ratio; o22.width = vars.o * ratio; ctx.fillStyle = '#' + ReColor(vars.bgcolor); ctx.beginPath(); ctx.scale(ratio, ratio); ctx.moveTo(vars.o / 2, 0); ctx.quadraticCurveTo(vars.o / 2, vars.o / 2, 0, vars.o / 2); ctx.lineTo(vars.o / 2, vars.o / 2); ctx.closePath(); ctx.fill(); oo.appendChild(o22); o21 = document.createElement('canvas'); var ctx = o21.getContext("2d"); o21.height = vars.o * ratio; o21.width = vars.o * ratio; ctx.fillStyle = '#' + ReColor(vars.bgcolor); ctx.beginPath(); ctx.scale(ratio, ratio); ctx.moveTo(0, 0); ctx.quadraticCurveTo(0, vars.o / 2, vars.o / 2, vars.o / 2); ctx.lineTo(0, vars.o / 2); ctx.closePath(); ctx.fill(); oo.appendChild(o21); body.c.appendChild(oo); CSS(oo, { 'z-index': 7, 'position': 'absolute', 'top': 0, 'left': 0, 'pointer-events': 'none', 'height': 'auto', 'overflow': 'hidden', 'width': '100%', 'height': '100%' }); oo.style.zIndex = 7; oPos() } } function oPos() { CSS(o11, { 'position': 'absolute', 'top': 0, 'left': 0, 'width': vars.o + 'px', 'height': vars.o + 'px' }); CSS(o12, { 'position': 'absolute', 'top': 0, 'left': Math.round(vars.sw - vars.o / 2), 'width': vars.o + 'px', 'height': vars.o + 'px' }); CSS(o22, { 'position': 'absolute', 'top': Math.round(vars.sh - vars.o / 2), 'left': Math.round(vars.sw - vars.o / 2), 'width': vars.o + 'px', 'height': vars.o + 'px' }); CSS(o21, { 'position': 'absolute', 'top': Math.round(vars.sh - vars.o / 2), 'left': 0, 'width': vars.o + 'px', 'height': vars.o + 'px' }) } function Source() { if (vars.file != '') { if (vars.file.indexOf(' or ') > -1) { vars.or = vars.file.split(' or '); for (var i = 0; i < vars.or.length; i++) { if (vars.or[i].indexOf(" and ") > -1) { var _urls_and = vars.or[i].split(" and "); vars.or[i] = _urls_and[getRandomInt(0, _urls_and.length - 1)] } } vars.ori = 0; vars.file = vars.or[0] } else { if (vars.file.indexOf(" and ") > -1) { var _urls_and = vars.file.split(" and "); vars.file = _urls_and[getRandomInt(0, _urls_and.length - 1)] } } } uppod.mediaW().setSources(vars.file) } function CreatePl() { playlist = createElement('div'); playlist.className = 'uppod-playlist'; pl_mc = createElement('div'); playlist.appendChild(pl_mc); if (!mobile && vars.hotkey == 1 && vars.m == "video") { playlist.addEventListener("dblclick", function(event) { event.stopPropagation() }) } pl = new Array(); plbg = new Array(); pltext = new Array(); plplayed = new Array(); plrandom = new Array(); var droprow = 0; for (i = 0; i < vars.pl.length; i++) { pl[i] = createElement('div'); pl_mc.appendChild(pl[i]); CSS(pl[i], { 'cursor': 'pointer', 'color': '#' + ReColor(vars.plcolor), 'width': vars.pltw, 'height': vars.plth }); if (vars.plarrows == 1) { if (i > vars.pllimit - 1) { CSS(pl[i], { "display": "none" }) } } if (vars.plplace == 'inside' || vars.plplace == 'bottom') { CSS(pl[i], { 'position': 'absolute', 'top': (vars.plth * vars.pl_rows), 'left': (vars.pltw * i + vars.plmargin * i - vars.pltw * droprow) }); if (vars.plrows > 0) { if (i % vars.plrows == 0) { vars.pl[i]['endrow'] = 1 } } if (vars.pl[i]['endrow'] == 1) { vars.pl_rows++; droprow = i + 1 } } if (vars.plplace == 'bottomrow') { CSS(pl[i], { 'position': 'absolute', 'top': (vars.plth * i + vars.plmargin * i), 'left': 0, 'width': vars.sw - vars.plmargin * 2 }) } pl_mc.appendChild(pl[i]); plbg[i] = createElement('div'); pl[i].appendChild(plbg[i]); CSS(plbg[i], { 'height': vars.plth, 'borderRadius': (vars.o > 0 ? 4 : 0) }); Opacity(plbg[i], vars.plalpha); CheckGradiendDiv(plbg[i], vars.plbgcolor); if (vars.plplace == 'inside' || vars.plplace == 'bottom') { CSS(plbg[i], { 'width': vars.pltw }) } if (vars.plplace == 'botomrow') { CSS(plbg[i], { 'width': (vars.sw - vars.plmargin_h * 2) }) } if (vars.pl[i]['poster'] && vars.pltumbs >= 1) { plbg[i].innerHTML = "<img src='" + vars.pl[i]['poster'] + "' width='100%' id='plim" + i + "' class='uppod-playlist-" + i + "'>"; Opacity(plbg[i], 1) } pltext[i] = createElement('div'); pl[i].appendChild(pltext[i]); CSS(pltext[i], { 'padding': 5, 'position': 'absolute', 'top': 0, 'left': 0, 'fontFamily': vars.plfont, 'fontSize': vars.plfontsize, "pointerEvents": "none" }); if (vars.plplace == 'botomrow') { CSS(pltext[i], { 'height': vars.plth }) } if (vars.pl[i]['comment']) { pltext[i].innerHTML = vars.pl[i].comment } else { Hide(pltext[i]) } if (vars.pl[i]['poster'] && vars.pltumbs >= 1) { CheckGradiendDiv(pltext[i], vars.plbgcolor); CSS(plbg[i], { 'background': 'none' }); vars.pltumbs == 1 && i > 0 ? Hide(pltext[i]) : '' } pl[i].className = 'uppod-playlist-' + i; plbg[i].className = 'uppod-playlist-' + i + '_background'; pltext[i].className = 'uppod-playlist-' + i + '_text'; if (mobile) { pl[i].onclick = PlClick } else { pl[i].onmouseover = PlOver; pl[i].onmouseout = PlOut; pl[i].onclick = PlClick } plplayed[i] = false; plrandom[i] = i } if ((mobile || itouch) && vars.plarrows == 0) { pl_mc.ontouchstart = PlTouchStart; pl_mc.ontouchmove = PlTouchMove; pl_mc.ontouchend = PlTouchEnd } body.c.appendChild(playlist); if (vars.plplace == 'inside' || vars.plplace == 'bottom') { CSS(playlist, { 'position': 'absolute', 'width': (vars.sw - vars.plmargin_h * 2), 'height': vars.plth * (vars.pl_rows + 1) + 10, 'overflow': 'hidden' }); vars.plplace == 'bottom' ? CSS(pl_mc, { 'position': 'absolute', 'top': 0, 'left': 0 }) : CSS(pl_mc, { 'position': 'absolute', 'top': 10, 'left': 0 }); plwidth = (vars.pl.length - droprow) * vars.pltw + (vars.pl.length - droprow - 1) * vars.plmargin; plheight = vars.plth * (vars.pl_rows + 1) + 10 } if (vars.plplace == 'bottomrow') { CSS(playlist, { 'position': 'absolute', 'width': (vars.sw - vars.plmargin_h * 2), 'height': vars.bottomrowheight - vars.plmargin - vars.padding * 2 - vars.plmargin_v * 2, 'overflow': 'hidden' }); CSS(pl_mc, { 'position': 'absolute', 'top': 0, 'left': 0 }); plwidth = vars.sw - vars.plmargin_h * 2; plheight = vars.pl.length * vars.plth + (vars.pl.length - 1) * vars.plmargin } if (vars.plarrows == 1) { plnext_b = new Element((vars.plplace == "bottomrow" ? 'download' : 'next'), 20, 20); body.c.appendChild(plnext_b.c); CSS(plnext_b.c, { 'cursor': 'pointer' }); plnext_b.c.onclick = PlArrowNext; plprev_b = new Element((vars.plplace == "bottomrow" ? 'download' : 'next'), 20, 20); CSS(plprev_b.c, { "transform": "rotate(-180deg)", "-webkit-transform": "rotate(-180deg)", "-moz-transform": "rotate(-180deg)", "-o-transform": "rotate(-180deg)", "-ms-transform": "rotate(-180deg)" }); body.c.appendChild(plprev_b.c); CSS(plprev_b.c, { 'cursor': 'pointer', 'display': 'none' }); plprev_b.c.onclick = PlArrowPrev; plnext_b.c.style.zIndex = 6; plprev_b.c.style.zIndex = 6; PlArrows(); if (!mobile && vars.hotkey == 1 && vars.m == "video") { plnext_b.c.addEventListener("dblclick", function(event) { event.stopPropagation() }); plprev_b.c.addEventListener("dblclick", function(event) { event.stopPropagation() }) } } ipl = 0; if (vars.plbgcolor_play != undefined) { CSS(plbg[ipl], { "background-color": '#' + vars.plbgcolor_play }) } if (vars.plcolor_play != undefined) { CSS(pl[ipl], { "color": '#' + vars.plcolor_play }) } Opacity(plbg[ipl], vars.plalpha_play); playlist.style.zIndex = 6; PlPlace(); if (vars.plplace == "inside" && vars.pliview == 0) { ShowHide(playlist); if (plnext_b) { if (playlist.style.display == "none") { Hide(plnext_b.c); Hide(plprev_b.c) } else { Show(plnext_b.c); Show(plprev_b.c) } } } } function Pl() { if (playlist) { if (vars.plplace == 'inside') { ShowHide(playlist); if (plnext_b) { if (playlist.style.display == "none") { Hide(plnext_b.c); Hide(plprev_b.c) } else { PlPlace(); Show(plnext_b.c); Show(plprev_b.c); PlArrows() } } } } else { CreatePl() } } function RemovePl() { if (playlist) { playlist.removeChild(pl_mc); body.c.removeChild(playlist); plnext_b ? body.c.removeChild(plnext_b.c) : ''; plprev_b ? body.c.removeChild(plprev_b.c) : '' } } function PlPlace() { if (vars.plplace == 'inside') { CSS(playlist, { 'width': (vars.sw - vars.plmargin_h * 2) }); CSS(playlist, { 'top': ((ifull ? vars.sh : vars.stageheight) - vars.plth - vars.cntrloutheight - 10) - vars.plth * vars.pl_rows, 'left': vars.plmargin_h }); if (plnext_b) { CSS(plprev_b.c, { 'position': 'absolute', 'top': playlist.offsetTop + vars.plth / 2 + (20 * vars.cntrlsize) / 2 + 10, 'left': playlist.offsetLeft - 10 }); CSS(plnext_b.c, { 'position': 'absolute', 'top': playlist.offsetTop + vars.plth / 2 - (20 * (vars.cntrlsize - 1)) / 2, 'left': playlist.offsetLeft + playlist.offsetWidth + 10 }) } if (pl_mc.offsetLeft < -plwidth + playlist.offsetWidth) { CSS(pl_mc, { 'position': 'absolute', 'top': 10, 'left': (-plwidth + playlist.offsetWidth) }) } if (plwidth <= (vars.sw - vars.plmargin_h * 2)) { CSS(pl_mc, { 'position': 'absolute', 'top': 10, 'left': 0 }) } } if (!ifull) { if (vars.plplace == 'bottomrow') { CSS(playlist, { 'width': (vars.sw - vars.plmargin_h * 2) }); CSS(playlist, { 'position': 'absolute', 'top': (vars.ph + (vars.cntrlout == 1 ? vars.cntrloutheight : 0) + 10 + vars.plmargin_v), 'left': vars.plmargin_h }); if (plnext_b) { CSS(plprev_b.c, { 'position': 'absolute', 'top': playlist.offsetTop - 5, 'left': playlist.offsetLeft + playlist.offsetWidth / 2 + 10 }); CSS(plnext_b.c, { 'position': 'absolute', 'top': playlist.offsetTop + playlist.offsetHeight + 5, 'left': playlist.offsetLeft + playlist.offsetWidth / 2 - 10 }) } if (ipl !== null) { SlidePLs(ipl) } } if (vars.plplace == 'bottom') { CSS(playlist, { 'width': (vars.sw - vars.plmargin_h * 2) }); CSS(playlist, { 'position': 'absolute', 'top': (vars.ph + 10), 'left': vars.plmargin_h }); if (plnext_b) { CSS(plprev_b.c, { 'position': 'absolute', 'top': playlist.offsetTop + vars.plth / 2 + (20 * vars.cntrlsize) / 2, 'left': playlist.offsetLeft - 10 }); CSS(plnext_b.c, { 'position': 'absolute', 'top': playlist.offsetTop + vars.plth / 2 - (20 * vars.cntrlsize) / 2, 'left': playlist.offsetLeft + playlist.offsetWidth + 10 }) } if (ipl !== null) { SlidePLs(ipl) } } } } var touchStartX; var touchStartY; var touchLastX; var touchLastY; var ipltouch; function PlTouchStart(e) { touchLastX = touchStartX = e.targetTouches[0].pageX; touchLastY = touchStartY = e.targetTouches[0].pageY } function PlTouchMove(e) { var dx = e.targetTouches[0].pageX - touchLastX; var dy = e.targetTouches[0].pageY - touchLastY; touchLastX = e.targetTouches[0].pageX; touchLastY = e.targetTouches[0].pageY; if (vars.plplace == 'inside' || vars.plplace == 'bottom') { var aim = pl_mc.offsetLeft + dx; if (aim < 0 && aim > (-plwidth + playlist.offsetWidth)) { CSS(pl_mc, { 'position': 'absolute', 'top': (vars.plplace == 'bottom' ? 0 : 10), 'left': aim }) } } if (vars.plplace == 'bottomrow') { var aim = pl_mc.offsetTop + dy; if (aim < 0 && aim > -plheight + playlist.offsetHeight - 10) { CSS(pl_mc, { 'position': 'absolute', 'top': aim, 'left': 0 }) } } e.preventDefault() } function PlTouchStart1(e) { ipltouch = getPlaylistId(e.target) } function PlTouchEnd(e) { var dx = touchLastX - touchStartX; var dy = touchLastY - touchStartY; if (dx == 0 && dy == 0) { if (ipltouch !== null && ipltouch !== undefined) { PlClick0(); ipl = ipltouch; PlClickCont(); ipltouch = null } } else { PlTouchGo(dx, dy) } } function getPlaylistId(dom) { return dom.className.replace('uppod-playlist-', '').split('_')[0] } function PlTouchGo(dx, dy) { if (vars.plplace == 'inside' || vars.plplace == 'bottom') { var aim = pl_mc.offsetLeft + dx; aim > 0 ? aim = 0 : ''; aim < -plwidth + playlist.offsetWidth ? aim = -plwidth + playlist.offsetWidth : ''; clearInterval(plInterval); plaim = aim; plInterval = setInterval(SlidePLProcess, 20) } if (vars.plplace == 'bottomrow') { var aim = pl_mc.offsetTop + dy; aim > 0 ? aim = 0 : ''; aim < -plheight + playlist.offsetHeight - 10 ? aim = -plheight + playlist.offsetHeight - 10 : ''; clearInterval(plInterval); plaim = aim; plInterval = setInterval(SlidePLProcess, 20) } } function PlOver(e) { var plid = getPlaylistId(e.target); Opacity(plbg[plid], 1); SlidePLs(plid); if (plid) { if (vars.pl[plid]['poster'] && vars.pl[plid]['comment']) { Show(pltext[plid]) } } } function PlOut(e) { var plid = getPlaylistId(e.target); if (plid) { if (vars.pl[plid]['poster'] && vars.pltumbs >= 1) { if (ipl != plid) { vars.pltumbs == 1 ? Hide(pltext[plid]) : ''; Opacity(plbg[plid], (plplayed[plid] ? 0.5 : 1)) } } else { if (ipl != plid) { Opacity(plbg[plid], (plplayed[plid] ? vars.plalpha2 : vars.plalpha)) } else { Opacity(plbg[plid], vars.plalpha_play) } } } } function PlClick(e) { if (ipl !== null && ipl !== undefined) { PlClick0() } ipl = getPlaylistId(e.target); PlClickCont(); if (vars.redirect != '' && vars.redirect_clickpl == 1) { window.open(vars.redirect, vars.redirecttarget) } } function PlClickCont() { if (vars.pl[ipl].playlist) { PlClick1() } else { PlClick1(); if (vars.plplace == "inside") { Hide(playlist); plnext_b ? Hide(plnext_b.c) : ''; plprev_b ? Hide(plprev_b.c) : '' } if (!iplay) { istart = true; Toggle() } } CheckPrevNext() } function Next() { if (ipl < (pl.length - 1)) { PlNext() } } function PlArrowNext() { var onpage = PlOnPage(); var i = (plpage + 1) * onpage; if (i < pl.length) { plpage++; for (var j = i; j < i + vars.pllimit; j++) { CSS(pl[j], { 'display': 'block' }) } if (vars.plplace == 'inside' || vars.plplace == 'bottom') { CSS(pl_mc, { 'position': 'absolute', 'left': -pl[i].offsetLeft }) } if (vars.plplace == 'bottomrow') { CSS(pl_mc, { 'position': 'absolute', 'top': -pl[i].offsetTop }) } PlArrows() } } function PlOnPage() { if (vars.plplace == 'inside' || vars.plplace == 'bottom') { var tmp = Math.floor((vars.sw - vars.plmargin_h * 2) / vars.pltw); return tmp < vars.pllimit ? tmp : vars.pllimit } else { return Math.floor((vars.bottomrowheight - vars.plmargin_v * 2) / vars.plth) } } function PlArrows() { var onpage = PlOnPage(); var i = plpage * onpage; if (i + onpage >= pl.length) { Hide(plnext_b.c) } else { Show(plnext_b.c) } i == 0 ? Hide(plprev_b.c) : Show(plprev_b.c); if (vars.plplace != "inside" && ifull) { Hide(plnext_b.c); Hide(plprev_b.c) } } function PlArrowPrev() { var onpage = PlOnPage(); var i = (plpage - 1) * onpage; if (i >= 0) { plpage--; for (var j = 0; j < pl.length; j++) { CSS(pl[j], { 'display': 'none' }) } for (var j = i; j < i + vars.pllimit; j++) { CSS(pl[j], { 'display': 'block' }) } if (vars.plplace == 'inside' || vars.plplace == 'bottom') { CSS(pl_mc, { 'position': 'absolute', 'left': -pl[i].offsetLeft }) } if (vars.plplace == 'bottomrow') { CSS(pl_mc, { 'position': 'absolute', 'top': -pl[i].offsetTop }) } PlArrows() } } function PlNext() { if (vars.random == 1) { if (plrandom.length > 1) { if (ipl !== null) { PlClick0() } ipl = plrandom[getRandomInt(0, plrandom.length - 1)]; PlClick1(); Event('next') } else { EndPl(); prev_b ? CSS(prev_b.c, { 'opacity': 1, 'filter': 'alpha(opacity=100)', 'cursor': 'pointer' }) : '' } } else { if (ipl < (pl.length - 1)) { if (ipl !== null) { PlClick0() } var start_in_folder = 0; if (vars.pl[ipl].playlist && !vars.pl[ipl].file && ipl == 0) { start_in_folder = 2 } else { ipl++ } PlClick1(); if (vars.pl[ipl].playlist && !vars.pl[ipl].file) { if (start_in_folder != 2) { start_in_folder = 1 } } if (start_in_folder > 0) { PlClick0(); ClearOldVars(); ipl = start_in_folder; UpdatedVarsFromPlaylist(vars.pl[ipl]); QualityLinks(); if (uppod.ads()) { uppod.ads().newPlaylistItem() } NewFile(vars.file, true); if (vars.plbgcolor_play != undefined) { CSS(plbg[ipl], { "background-color": '#' + vars.plbgcolor_play }) } if (vars.plcolor_play != undefined) { CSS(pl[ipl], { "color": '#' + vars.plcolor_play }) } Opacity(plbg[ipl], vars.plalpha_play) } Event('next') } else { EndPl() } } CheckPrevNext(); !iplay ? OnPlay() : '' } function CheckPrevNext() { if (vars.random == 0) { if (ipl == 0) { prev_b ? CSS(prev_b.c, { 'opacity': 0.3, 'filter': 'alpha(opacity=30)', 'cursor': 'default' }) : '' } else { prev_b ? CSS(prev_b.c, { 'opacity': 1, 'filter': 'alpha(opacity=100)', 'cursor': 'pointer' }) : '' } if (ipl == pl.length - 1) { next_b ? CSS(next_b.c, { 'opacity': 0.3, 'filter': 'alpha(opacity=30)', 'cursor': 'default' }) : '' } else { next_b ? CSS(next_b.c, { 'opacity': 1, 'filter': 'alpha(opacity=100)', 'cursor': 'pointer' }) : '' } } } function Prev() { PlPrev() } function PlPrev() { if (vars.random == 1) { if (plrandom.length > 1) { if (ipl !== null) { PlClick0() } ipl = plrandom[getRandomInt(0, plrandom.length - 1)]; PlClick1(); Event('prev') } else { EndPl() } } else { if (ipl > 0) { if (ipl !== null) { PlClick0() } ipl--; PlClick1(); Event('prev'); ipl == 0 && prev_b ? CSS(prev_b.c, { 'opacity': 0.3, 'filter': 'alpha(opacity=30)', 'cursor': 'default' }) : '' } else {} } CheckPrevNext() } function EndPl() { if (vars.plplay1 == 1) { TheEnd() } else { if (vars.random == 1) { for (p = 0; p < pl.length; p++) { plrandom[p] = p } PlNext() } else { PlClick0(); ipl = 0; PlClick1(); Event('next') } } } function PlClick0() { if (vars.pl[ipl]['poster'] && vars.pltumbs >= 1) { vars.pltumbs == 1 ? Hide(pltext[ipl]) : ''; Opacity(plbg[ipl], 0.5) } else { if (vars.plbgcolor_play != undefined) { CSS(plbg[ipl], { "background-color": '#' + vars.plbgcolor }) } if (vars.plcolor_play != undefined) { CSS(pl[ipl], { "color": '#' + vars.plcolor }) } Opacity(plbg[ipl], vars.plalpha2) } plplayed[ipl] = true; var idx = plrandom.indexOf(ipl); if (idx != -1) plrandom.splice(idx, 1) } function PlClick1() { if (vars.pl[ipl].playlist) { if (vars.pl[ipl].playlist != "back") { vars.pl_history.push(vars.pl); var newpl = vars.pl[ipl].playlist; vars.pl = [{ "comment": "←", "playlist": "back" }]; vars.pl = vars.pl.concat(newpl); Event("plfolder") } else { vars.pl = vars.pl_history[vars.pl_history.length - 1]; vars.pl_history.splice(vars.pl_history.length - 1, 1); Event("plback") } RemovePl(); CreatePl(); if (vars.plplace == "inside") { Show(playlist); plnext_b ? Show(plnext_b.c) : ''; plprev_b ? Show(plprev_b.c) : '' } plpage = 0 } else { ClearOldVars(); UpdatedVarsFromPlaylist(vars.pl[ipl]); QualityLinks(); if (uppod.ads()) { uppod.ads().newPlaylistItem() } NewFile(vars.file, true); if (vars.plbgcolor_play != undefined) { CSS(plbg[ipl], { "background-color": '#' + vars.plbgcolor_play }) } if (vars.plcolor_play != undefined) { CSS(pl[ipl], { "color": '#' + vars.plcolor_play }) } Opacity(plbg[ipl], vars.plalpha_play) } if (plnext_b) { PlArrows() } } function UpdatedVarsFromPlaylist(obj) { for (var key in obj) { if (obj[key].indexOf('#') == 0) { obj[key] = un(obj[key]) } if (key == 'poster' && vars['poster'] == undefined) { vars['poster'] = obj['poster'] } else { vars[key] = obj[key] } if (key == 'bigposter') { vars['poster'] = obj['bigposter'] } } } function SlidePLs(plid) { if (vars.plplace == "inside" || vars.plplace == "bottom") { if (plwidth > (vars.sw - vars.plmargin_h * 2)) { SlidePL(plid) } } if (vars.plplace == "bottomrow") { if (plheight > vars.bottomrowheight) { SlidePL(plid) } } } var plInterval; var plaim; function SlidePL(i) { if (vars.plarrows == 0) { clearInterval(plInterval); if (vars.plplace == 'inside' || vars.plplace == 'bottom') { var aim = -pl[i].offsetLeft + playlist.offsetWidth / 2 - vars.pltw / 2; if (aim > 0 || plwidth < vars.sw) { aim = 10 } if (aim < 0 && aim < -plwidth + playlist.offsetWidth - 10) { aim = -plwidth + playlist.offsetWidth - 10 } plaim = aim; plInterval = setInterval(SlidePLProcess, 20) } if (vars.plplace == 'bottomrow') { var aim = -pl[i].offsetTop + playlist.offsetHeight / 2 - vars.plth / 2; if (aim > 0) { aim = 10 } if (aim < -plheight + playlist.offsetHeight - 10) { aim = -plheight + playlist.offsetHeight - 10 } plaim = aim; plInterval = setInterval(SlidePLProcess, 20) } } } function SlidePLProcess() { var aim = plaim; if (vars.plplace == 'inside' || vars.plplace == 'bottom') { if (Math.abs((pl_mc.offsetLeft - aim) / 10) <= 1) { clearInterval(plInterval) } else { CSS(pl_mc, { 'position': 'absolute', 'top': (vars.plplace == 'bottom' ? 0 : 10), 'left': pl_mc.offsetLeft - (pl_mc.offsetLeft - aim) / 10 }) } } if (vars.plplace == 'bottomrow') { if (Math.abs((pl_mc.offsetTop - aim) / 10) <= 1) { clearInterval(plInterval) } else { CSS(pl_mc, { 'position': 'absolute', 'top': pl_mc.offsetTop - (pl_mc.offsetTop - aim) / 10, 'left': 0 }) } } } function ClearOldVars() { if (sub) { KillSub(); sub = null } vars.ors = 0 } function NewFile(s, autoplay) { Uppod.trace('NewFile s=' + s + ' autoplay=' + autoplay); iplay = false; istartevnt = false; vars.file = s; if (autoplay) { vars.auto = 'play' } Media(); Comment(); if (autoplay) { OnPlay() } } function checkStart() { if (media != undefined) { if (Uppod.browser.doSendCanPlay == false || !vars.file || vars.file == '' || vars.auto != 'play') { onReady() } if (media.networkState >= 0 || vars.youtube) { init = true; CSS(media, { 'opacity': 1, 'filter': 'alpha(opacity=100)' }); Opacity(media, 1); playInterval = setInterval(Playing, 100); media.addEventListener('pause', OnPause, false); media.addEventListener('seeking', OnSeeking, false); media.addEventListener('seeked', OnSeeked, false); media.addEventListener('volumechange', OnVolume, false); document.addEventListener("fullscreenchange", function() { !isFullscreen() && ifull && !opera ? FullOff() : '' }, false); document.addEventListener("mozfullscreenchange", function() { !isFullscreen() && ifull ? FullOff() : '' }, false); document.addEventListener("webkitfullscreenchange", function(e) { !isFullscreen() && ifull ? FullOff() : '' }, false); document.addEventListener("MSFullscreenChange", function() { !isFullscreen() && ifull ? FullOff() : '' }, false); muted || v == 0 ? Volume(0) : (v > 0 ? Volume(-v) : ''); if (!initevent) { Event("init"); initevent = true } } else { setTimeout(checkStart, 100) } } } function isFullscreen() { return !!(document.webkitFullscreenElement || document.webkitIsFullScreen || document.mozFullScreen || document.msFullscreenElement || (document.fullscreenElement != undefined)) } function Play() { iplay = false; Toggle() } function Pause() { iplay = true; Toggle() } function Toggle(e) { var stop = false; if (vars.redirect != '' && vars.redirect_play == 1) { window.open(vars.redirect, vars.redirecttarget); vars.redirect_play = 0 } Protection(); if (!stop) { Uppod.trace("Toggle e=" + e); if (vars.auto == 'none' && !vars.youtube) { media.autoplay = true; Source(); istart = true } vars.auto = 'play'; if (!vars.file || vars.file == '') { Event('player_error', 'nofile') } istart = true; if (!iplay) { if (isYoutube()) { media_yt.playVideo(); OnPlay() } else { uppod.mediaW().play(); OnPlay() } } else { if (isYoutube()) { media_yt.pauseVideo(); OnPause() } else { uppod.mediaW().pause(); OnPause() } } } } function Mybut(m) { if (mybuts[m.substr(11)]) { var act = mybuts[m.substr(11)].s.link; if (act.indexOf('http') == 0) { Link(act, (mybuts[m.substr(11)].s.target ? mybuts[m.substr(11)].s.target : "_blank")) } else { if (act == 'toggle') { Toggle() } if (act == 'screenshot') { Toggle() } if (act.indexOf('js:') == 0) { var js_vars = ''; if (act.indexOf(',') > 0) { js_vars = act.substr(act.indexOf(',') + 1); act = act.substr(0, act.indexOf(',')) } eval(act.substr(3) + '("' + js_vars + '")') } } Event('mybut', act) } } function Link(l, t) { if (l) { l = l.replace('(referer)', encodeURIComponent(vars.referer)); l = l.replace('(link)', encodeURIComponent(vars.link)); l = l.replace('(file)', encodeURIComponent(vars.file)); l = l.replace('(redirect)', encodeURIComponent(vars.redirect)); l = l.replace('(comment)', encodeURIComponent(vars.comment)); l = l.replace('(time)', CurrentTime()); if (l.substr(0, 3) == 'js:') { var myjsa = l.substr(3).split(','); eval(myjsa[0] + '(' + (myjsa.length > 1 ? myjsa[1] : '') + (myjsa.length > 2 ? ',' + myjsa[2] : '') + (myjsa.length > 3 ? ',' + myjsa[3] : '') + ');') } if (l.indexOf('http') == 0) { window.open(l, t) } } } function Stop() { Uppod.trace('Stop'); if (iplay) { Toggle(); OnPause() } vars.radio == 0 ? Seek(0) : ''; time_play_b ? time_play_b.c.innerHTML = formatTime(0) : ''; time_back_b ? time_back_b.c.innerHTML = formatTime(Duration()) : ''; vars.auto = 'none'; if (isYoutube()) { media_yt.stopVideo() } Media(); Event('stop'); if (vars.ga != null && vars.gastop == 1) { if (!vars.gatracked['stoped']) { gaTracker("stoped") } } if (poster_mc && vars.m == 'video') { Show(poster_mc) } line_b && run_b ? RunPos(run_b, line_b, line_play_b, line_all_b, run_pos) : ''; sub ? StopSub() : '' } function Download() { iplay ? Toggle() : ''; var downloadUrl = vars.download != 1 && vars.download != '' ? vars.download : (uppod.mediaW().length > 0 ? uppod.mediaW().sources[0] : (vars.file.indexOf("|") > 0 ? vars.file.substr(0, vars.file.indexOf("|")) : vars.file)); window.open(downloadUrl, "_blank"); Event('download'); if (vars.ga != null && vars.gadownload == 1) { if (!vars.gatracked['downloaded']) { gaTracker("downloaded") } } } function Protection() { if (vars.urlprotect_go) { if (vars.urlprotect_stop == 1) { media.src = '' } if (vars.urlprotect_warning == 1) { Alert((vars.redirect != '' ? '<a href="' + vars.redirect + '" style="font-size:200%;color:#fff">' : '') + (vars.urlprotect_msg != '' ? vars.urlprotect_msg : vars.redirect) + (vars.redirect != '' ? '</a>' : ''), false) } } } function Quality() { if (hd_b) { if (vars.filehd) { vars.start = media.currentTime; var fileold = vars.file; NewFile(vars.filehd, true); vars.filehd = fileold; if (hd1_b.c.style.display == 'none') { Hide(hd_b.c); Show(hd1_b.c); Event('quality', '1') } else { Hide(hd1_b.c); Show(hd_b.c); Event('quality', '0') } } } } function QualityLinks() { if (vars.youtube) {} else { if (vars.hd && vars.file) { if (vars.hd.indexOf('::') > 0) { vars.filehd = vars.file.replace(vars.hd.split('::')[0], vars.hd.split('::')[1]); var change = false; if (hd1_b) { if (hd1_b.c.style.display == 'block') { change = true } } else { if (vars.hd1 == 1) { change = true } } if (change) { var fileold = vars.file; vars.file = vars.filehd; vars.filehd = fileold } } if (vars.file.indexOf(",") > -1 && vars.file.indexOf('[') == -1) { vars.file = '[' + vars.file + ']' } if (vars.file.indexOf('[') > -1 && vars.file.indexOf(']') > -1) { var hdf = vars.file.substr(vars.file.indexOf('[') + 1, vars.file.indexOf(']') - vars.file.indexOf('[') - 1).split(vars.hdseparator); var files = ''; for (h = 0; h < hdf.length; h++) { files += hdf[h] != '' ? vars.file.substr(0, vars.file.indexOf('[')) + hdf[h] + vars.file.substr(vars.file.indexOf(']') + 1) : ''; h < hdf.length - 1 ? files += vars.hdseparator : '' } vars.hdlinks = files.split(vars.hdseparator); HdSelect(); if (hdselect) { vars.file = hdselect.value } else { for (h = 0; h < vars.hdlinks.length; h++) { if (vars.hdlinks[h] != '') { vars.file = vars.hdlinks[h]; break } } } } else { var tmp = vars.hd.split(vars.hdseparator); vars.hdlinks = []; for (h = 0; h < tmp.length; h++) { h == 0 ? vars.hdlinks[h] = vars.file : vars.hdlinks[h] = '' } HdSelect() } } } } function onHlsQuality() { var q = uppod.mediaW().hls.levels; var q1 = []; var q2 = []; q1[0] = 'hls0'; q2[0] = vars.lang2['auto']; if (q.length > 1) { for (var i = 0; i < q.length; i++) { q1[i + 1] = 'hls' + i; q2[i + 1] = q[i].height ? q[i].height + 'p' : i } } vars.hdlinks = q1; vars.hda = q2; HdSelect(); vars.hls_quality = true } function HdSelect() { if (hd_b) { if (hdselect && vars.hdlinks) { var start = 0; var hdselects = []; var hh = 0; hdselect.innerHTML = ''; vars.hd1 == 1 && vars.quality == '' ? vars.quality = vars.hda[vars.hda.length - 1] : ''; for (h = 0; h < vars.hda.length; h++) { if (vars.hdlinks[h]) { if (vars.hdlinks[h] != '') { hdselects[h] = document.createElement('option'); hdselects[h].value = vars.hdlinks[h]; hdselects[h].innerHTML = vars.hda[h]; hdselect.appendChild(hdselects[h]); CSS(hdselects[h], { 'backgroundColor': vars.selectbgcolor, 'color': vars.selectcolor }); if (vars.hda[h] == vars.quality || vars.hdlinks == ',') { start = hh; hdselects[h].setAttribute("selected", "true"); QualitySelect(false) } hh++ } } } SelectRework(hdselect.options[start].text, hd_b) } } } function QualitySelecter() { QualitySelect(true) } function StorageSupport() { try { var storage = window['localStorage'], x = '__storage_test__'; storage.setItem(x, x); storage.removeItem(x); return true } catch (e) { return false } } function QualitySelect(autostart) { if (hd_b && vars.hdlinks) { if (vars.remquality == 1) { if (StorageSupport()) { localStorage.setItem("uppodquality", hdselect.options[hdselect.selectedIndex].text) } } var hdvalue = hdselect.value; if (hdvalue.indexOf("hls") == 0) { autostart ? vars.start = media.currentTime : ''; if (hdvalue == 'hlsauto') { uppod.mediaW().hls.nextLevel = -1 } else { uppod.mediaW().hls.nextLevel = hdvalue.substr(3) * 1 } } else { if (vars.youtube) { autostart ? vars.start = media_yt.getCurrentTime() : ''; if (isYoutube()) { var t = CurrentTime(); media_yt.stopVideo(); media_yt.setPlaybackQuality(hdselect.value); media_yt.playVideo(); media_yt.seekTo(t) } } else { autostart ? vars.start = media.currentTime : ''; vars.file = hdselect.value; NewFile(hdselect.value, (mobile ? false : autostart)) } } SelectRework(hdselect.options[hdselect.selectedIndex].text, hd_b); vars.quality = hdselect.options[hdselect.selectedIndex].text; Event('quality', vars.quality) } } var fsdiv = 0; var fsdivin; function FullScroll(e) { e.preventDefault(); if (media) { if ((browser.osWin && e.deltaY < 0) || (!browser.osWin && e.deltaY > 0)) { (media.volume + 0.1) < 1 ? media.volume += 0.1 : media.volume = 1 } else { (media.volume - 0.1) > 0 ? media.volume -= 0.1 : media.volume = 0 } if (fsdiv == 0) { fsdiv = createElement('div'); uppod.document.appendChild(fsdiv) } fsdiv.innerHTML = "<uppodspan style='position:absolute;top:10px;right:10px;font:20px sans-serif;color:#fff'>" + vars.lang2['volume'] + " " + parseInt(media.volume * 100) + '%</uppodspan>'; clearInterval(fsdivin); fsdivin = setInterval(FullScrollHide, 1000) } } function FullScrollHide() { uppod.document.removeChild(fsdiv); fsdiv = 0; clearInterval(fsdivin) } function Full(re) { if (!ifull || re == 're') { if (nativecontrols) { if (!media.controls) { CSS(controls, { 'visibility': 'hidden' }); media.controls = true; Remove('layer'); media_mc.onclick = null; if (poster_mc && vars.m == 'video') { poster_mc.style.display = 'none' } } } else { window.addEventListener('wheel', FullScroll, true); if (vars.realfullscreen == 1 && Uppod.Fullscreen.request(vars.stg)) { irealfull = true } Uppod.Fullscreen.hack(vars.stg); if ((vars.iframe != '' || vars.iframeobject) && !irealfull) { CSS((vars.iframeobject ? vars.iframeobject : window.parent.document.getElementById(vars.iframe)), { 'width': window.parent.innerWidth, 'height': window.parent.innerHeight, 'position': 'fixed', 'left': 0, 'top': 0 }) } if (re != 're') { ifull = true; vars.stagewidth = vars.sw; vars.stageheight = vars.sh; CSS(body.canvas, { 'visibility': 'hidden', 'height': (vars.iframe != '' ? window.parent.innerHeight : window.innerHeight) }); setTimeout(function() { CSS(body.canvas, { 'visibility': 'hidden', 'height': (vars.iframe != '' ? window.parent.innerHeight : window.innerHeight) }) }, 500); setTimeout(function() { CSS(body.canvas, { 'visibility': 'hidden', 'height': (vars.iframe != '' ? window.parent.innerHeight : window.innerHeight) }) }, 700); CSS(media_mc, { 'backgroundColor': '#000', 'position': 'fixed', 'left': 0, 'top': 0 }) } if (full_b) { full_b.c.style.display = 'none'; full_back_b.c.style.display = 'block' } vars.stageposition = getCss(vars.stg, 'position') || "static"; if (browser.isIE) { vars.stageposition = "static" } vars.stageleft = getCss(vars.stg, 'left'); vars.stagetop = getCss(vars.stg, 'top'); vars.stageMargins = getCss(vars.stg, 'margin'); CSS(vars.stg, { 'width': '100%', 'height': '100%', 'margin': '0', 'position': 'fixed', 'left': '0px', 'top': '0px', 'z-index': '999999999', 'overflow': 'hidden' }); layer != undefined ? layer.style.display = 'none' : ''; oo ? oo.style.display = 'none' : ''; clearInterval(hideInterval); hideInterval = setInterval(CntrlHide, 3000); if (re != 're') { Event('fullscreen') } if (tip) { if (tip.parentNode) { tip.parentNode.removeChild(tip) } } } if (playlist) { vars.plplace != 'inside' ? CSS(playlist, { 'top': -1000 }) : ''; if (plnext_b && vars.plplace != 'inside') { Hide(plnext_b.c); Hide(plprev_b.c) } } vars.controls_active = false } else { FullOff() } setTimeout(MenuPosition, 100); logo ? PositionLogo() : ''; sub || sub_menu ? setTimeout(PositionSub, 500) : '' } function FullOff() { window.removeEventListener('wheel', FullScroll, true); if (document.cancelFullScreen) { document.cancelFullScreen() } else if (document.exitFullscreen) { document.exitFullscreen() } else if (document.cancelFullscreen) { document.cancelFullscreen() } else if (document.mozCancelFullScreen) { document.mozCancelFullScreen() } else if (document.webkitCancelFullScreen) { document.webkitCancelFullScreen() } else if (document.msExitFullscreen) { document.msExitFullscreen() } ifull = false; if ((vars.iframe != '' || vars.iframeobject) && !irealfull) { CSS((vars.iframeobject ? vars.iframeobject : window.parent.document.getElementById(vars.iframe)), { 'width': vars.stagewidth, 'height': vars.stageheight, 'margin': vars.stageMargins, 'position': 'static', 'left': 0, 'top': 0 }) } CSS(media_mc, { 'backgroundColor': 'transparent', 'position': 'absolute', 'left': 0, 'top': 0 }); CSS(vars.stg, { 'width': (vars.stagewidthproc != '' ? vars.stagewidthproc : vars.stagewidth), 'height': vars.stageheight, 'margin': vars.stageMargins, 'position': vars.stageposition, 'left': vars.stageleft, 'top': vars.stagetop }); CSS(body.canvas, { 'visibility': 'visible', 'height': vars.stageheight }); CSS(scrn, { 'visibility': 'visible' }); if (!isYoutube() && layer != undefined) { layer.style.display = 'block' } if (oo) { oo.style.display = 'block' } if (full_b) { full_b.c.style.display = 'block'; full_back_b.c.style.display = 'none' } if (playlist) { PlPlace() } logo ? PositionLogo() : ''; sub || sub_menu ? setTimeout(PositionSub, 500) : ''; if (tip) { if (tip.parentNode) { tip.parentNode.removeChild(tip) } } Event('exitfullscreen') } var menu_big; function Menu() { if (menu_big) { ShowHide(menu_big) } else { menu_big = createElement('div'); var mb_w = vars.scrn_w < 320 ? vars.scrn_w - 30 : 350; var mb_h = (vars.download != '' && vars.download != 0 ? 45 : 0) + (vars.menu_nocode == 1 ? 0 : 45) + (vars.link != '' ? 45 : 0) + 11; vars.menu_w = mb_w; vars.menu_h = mb_h; var menu_big_bg = new Shaper2({ w: mb_w, h: mb_h, o: 10, bgc: '000000|000000', bga1: 0.5, bga2: 0.5 }); menu_big.appendChild(menu_big_bg.c); CSS(menu_big_bg.c, { 'position': 'relative', 'top': '0', 'left': '0' }); if (vars.download != '' && vars.download != 0) { MenuBigItem("menu_download", (vars.download == 1 ? vars.file : vars.download), mb_w, mb_h) } if (vars.link != '') { MenuBigItem("menu_link", vars.link, mb_w, mb_h) } CSS(menu_big, { 'color': '#ffffff', 'font': '10px Verdana' }); menu_big.style.zIndex = 100; MenuBigItem("menu_code", (vars.iframeurl != '' ? '<iframe title="sample" width="' + vars.w + '" height="' + vars.h + '" src="' + vars.iframeurl + '" frameborder="0" allowfullscreen></iframe>' : vars.embedcode != '' ? vars.embedcode : ''), mb_w, mb_h); var mbx = createElement('div'); mbx.innerHTML = ' x '; menu_big.appendChild(mbx); CSS(mbx, { 'position': 'absolute', 'top': 3, 'left': mb_w - 25, 'cursor': 'pointer' }); mbx.onclick = MenuClose; body.c.appendChild(menu_big); MenuPosition() } } var menuitems = 0; function MenuBigItem(what, content, mb_w, mb_h) { var mbkodt = createElement('div'); mbkodt.innerHTML = vars.lang2[what]; menu_big.appendChild(mbkodt); CSS(mbkodt, { 'position': 'absolute', 'top': (5 + menuitems * 45), 'left': 15 }); var mbkodbg = new Shaper2({ w: mb_w - 20, h: 23, o: 5, bgc: 'ffffff' }); CSS(mbkodbg.c, { 'position': 'absolute', 'top': (22 + menuitems * 45), 'left': 10 }); menu_big.appendChild(mbkodbg.c); var mbkode = document.createElement('input'); menu_big.appendChild(mbkode); CSS(mbkode, { 'position': 'absolute', 'outline': 'none', 'font': '10px Verdana', 'top': (25 + menuitems * 45), 'left': 13, 'width': mb_w - 28, 'height': 15, 'color': '#000000', 'border': 0, 'background': 'none' }); mbkode.value = content; mbkode.onclick = function() { this.select() }; menuitems++ } function MenuClose() { if (menu_big) { CSS(menu_big, { 'display': 'none' }) } } function MenuPosition() { if (menu_big) { CSS(menu_big, { 'position': 'absolute', 'top': ((ifull ? vars.sh : vars.stageheight) - vars.menu_h) / 2, 'left': ((ifull ? vars.sw : vars.stagewidth) - vars.menu_w) / 2 }) } } function CntrlHide() { var hide_force = false; if (uppod.ads()) { uppod.ads().isActive() ? hide_force = true : '' } if ((iplay && CurrentTime() > 0) || hide_force) { var hide = !iover && !vars.controls_active && vars.cntrlhide == 1; var fullHide = ifull && !vars.controls_active && vars.fullcntrlhide == 1; if (hide || fullHide || hide_force) { clearInterval(hideInterval); CSS(controls, { 'visibility': 'hidden' }); if (playlist && vars.plplace == 'inside') { if (playlist.style.display != "none") { Pl() } } CSS(uppod.iframe, { 'cursor': 'none' }); if (isYoutube()) { mouseMoveCatcher.style.display = 'block' } ihide = true } } } function CntrlShow() { clearInterval(hideInterval); mouseMoveCatcher.style.display = 'none'; if (!nativecontrols) { CSS(controls, { 'visibility': 'visible' }); CSS(uppod.iframe, { 'cursor': 'auto' }); ihide = false } } function ScreenSize() { vars.scrn_w = vars.sw - vars.padding * 2; vars.scrn_h = vars.ph - vars.padding * 2 - (vars.cntrlout == 1 ? vars.cntrloutheight : 0) } function Resize() { var rw = vars.stg.offsetWidth; var rh = vars.stg.offsetHeight; if (document.msFullscreenElement && window.top !== window) { rw = window.screen.width; rh = window.screen.height } if (vars.sw != 0 && vars.sh != 0 && rh != 0 && rw != 0) { var resizeHeight = 0; if (vars.sw != rw && vars.sh == rh && vars.autoheight == 1) { resizeHeight = (vars.sw / vars.sh) } if (vars.ph != vars.sh) { vars.ph = rh - (vars.sh - vars.ph) } else { vars.ph = rh } vars.sw = rw; vars.sh = rh; if (!ifull) { vars.stagewidth = vars.sw; vars.stageheight = vars.sh } ScreenSize(); var nh = (!ifull ? vars.ph : vars.sh) - vars.padding * 2 - (vars.cntrlout == 1 ? vars.cntrloutheight : 0); if (!ifull) { CSS(body.canvas, { 'width': vars.sw, 'height': vars.sh }); CSS(scrn, { 'width': vars.sw - vars.padding * 2, 'height': nh }); CSS(layer, { 'height': nh }) } if (alrt) { CSS(alrt_bg.canvas, { 'width': '' + vars.sw - (ifull ? 0 : vars.padding * 2) + 'px' }); if (vars.padding > 0) { CSS(alrt, { 'top': (ifull ? 0 : vars.padding), 'left': (ifull ? 0 : vars.padding) }) } } if (poster_mc) { CSS(poster_mc, { 'width': vars.sw, 'height': vars.ph - vars.padding * 2 - (vars.cntrlout == 1 ? vars.cntrloutheight : 0) }) } CSS(media_mc, { 'width': '' + vars.sw - (!ifull ? vars.padding * 2 : 0) + 'px', 'height': '' + nh + 'px' }); CSS(media, { 'width': '' + vars.sw - (!ifull ? vars.padding * 2 : 0) + 'px', 'height': '' + nh + 'px' }); if (isYoutube()) { CSS(document.getElementById('yt_media_' + vars.uid), { 'width': '' + vars.sw - (!ifull ? vars.padding * 2 : 0) + 'px', 'height': '' + nh + 'px' }) } vars.o > 0 ? oPos() : ''; uppod.controls().ControlBar.resize(); if (uibg) { CSS(uibg.canvas, { 'width': '' + (vars.sw - (ifull ? 0 : vars.padding * 2) - vars.cntrlbgmargin * 2 - vars.cntrlbgmarginleft - vars.cntrlbgmarginright) + 'px', 'height': '' + vars.cntrloutheight + 'px' }); uibg_gl ? CSS(uibg_gl.canvas, { 'width': '' + (vars.sw - (ifull ? 0 : vars.padding * 2) - vars.cntrlbgmargin * 2) + 'px' }) : '' } start_b ? CSS(start_b.c, { 'left': vars.sw / 2 - start_b.w / 2, 'top': (!ifull ? vars.ph : vars.sh) / 2 - start_b.h / 2 }) : ''; PlaceControls(); if (playlist) { PlPlace(); if (plnext_b) { if ((vars.plplace == "inside" && playlist.style.display != "none") || !ifull) { Show(plnext_b.c); Show(plprev_b.c); PlArrows(); if (plpage > 0) { plpage = plpage - 1; PlArrowNext() } } } } if (sub) { PositionSub() } if (resizeHeight > 0) { vars.stg.style.height = rw / resizeHeight + 'px' } } } function Back() { Seek(0) } function Mute() { if (isYoutube()) { if (!media_yt.isMuted()) { media_yt.mute(); muted = true } else { media_yt.unMute(); muted = false } } else { if (media.muted) { media.muted = false; muted = false } else { media.muted = true; muted = true } } MuteControl() } function MuteControl() { if (volume_b) { if (muted) { volume_b.c.style.display = 'none' } else { volume_b.c.style.display = 'block' } } if (volume_mute_b) { if (muted) { volume_mute_b.c.style.display = 'block' } else { volume_mute_b.c.style.display = 'none' } } } function OnPlay() { Uppod.trace('OnPlay'); if (!iplay) { if (nativecontrols && !media.controls) { CSS(controls, { 'visibility': 'hidden' }); media.controls = true; Remove('layer'); media_mc.onclick = null } if (poster_mc && vars.m == 'video') { poster_mc.style.display = 'none' } if (play_b != undefined) { play_b.c.style.display = 'none'; pause_b.c.style.display = 'block' } iplay = true; var hide = vars.cntrlhide == 1 && !vars.controls_active && vars.cntrlout == 0; var fullHide = ifull && !vars.controls_active && vars.fullcntrlhide == 1; if (hide || fullHide) { clearInterval(hideInterval); hideInterval = setInterval(CntrlHide, 3000) } if (vars.comment != undefined && vars.comment != '' && vars.showname == 1) { vars.shownameliketip == 1 ? (vars.shownameonstop == 1 ? Hide(nametip) : '') : Hide(alrt) } if (vars.plplace == "inside" && playlist) { Hide(playlist); plnext_b ? Hide(plnext_b.c) : ''; plprev_b ? Hide(plprev_b.c) : '' } if (start_b) { start_b.c.style.display = 'none' } if (logo) { if (vars.logoplay == 1) { Show(logo) } else { Hide(logo) } } Event('play'); if (vars.ga != null && vars.gaplay == 1) { if (!vars.gatracked['played']) { gaTracker("played") } } document.removeEventListener("keydown", KeyHandler); uppod_active_player_uid = vars.uid; document.addEventListener("keydown", KeyHandler); if (vars.autofull == 1) { Full() } if (!istartevnt) { Event('start'); istart = true; istartevnt = true; if (vars.infoloader == 1 && vars.infoloaderurl != null) { getRadioInfo(); itervalRi = setInterval(getRadioInfo, (vars.infoloaderinterval >= 1000 ? vars.infoloaderinterval : vars.infoloaderinterval * 1000), false) } } if (vars.sub && (vars.substart == 1 || (mobile && nativecontrols))) { CreateSubs() } } } function getRadioInfo() { var XHR = ("onload" in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest; var xhr = new XHR(); xhr.open('GET', vars.infoloaderurl + (vars.infoloaderaddurl == 1 || vars.radio == 1 ? '?url=' + vars.file : ''), true); xhr.onload = function() { if (this.readyState == 4 && this.status == 200) { RadioInfo(this) } else { console.log("Ошибка загрузки тегов") } }; xhr.onerror = function(e) { console.log("Ошибка загрузки тегов") }; xhr.send() } function RadioInfo(x) { var str = x.responseText; if (str.indexOf('|uppod|') > -1) { var tags = str.split('|uppod|'); var output = vars.infoloadermask; for (var i = 0; i < tags.length; i++) { var pattern = "\\{" + (i * 1 + 1) + "\\}"; var myAmpPattern = new RegExp(pattern); for (var j = 0; j < output.split("{" + (i * 1 + 1) + "}").length; j++) { output = output.replace(myAmpPattern, tags[i]) } } output = (vars.id3 > 1 ? vars.comment + '<br>' : '') + output; if (vars.shownameliketip == 1) { NameTip((vars.marquee == 1 ? '<marquee>' : '') + output + (vars.marquee == 1 ? '</marquee>' : '')) } else { Alert((vars.marquee == 1 ? '<marquee>' : '') + output + (vars.marquee == 1 ? '</marquee>' : ''), false) } } } function OnSeeking() { Event('seeking') } function OnSeeked() { Event('seeked') } function OnPause() { Uppod.trace('OnPause'); if (iplay) { if (play_b != undefined) { play_b.c.style.display = 'block'; pause_b.c.style.display = 'none' } iplay = false; if (vars.comment != undefined && vars.comment != '' && vars.showname == 1) { vars.shownameliketip == 1 ? Show(nametip) : Show(alrt) } start_b ? start_b.c.style.display = 'block' : ''; if (logo) { if (vars.logopause == 1) { Show(logo) } else { Hide(logo) } } Event('pause') } } function Event(s, msg) { vars.events[s] = msg; var evObj = document.createEvent('Events'); evObj.initEvent(s, true, true); vars.stg.dispatchEvent(evObj); if (vars.postmessage == 1) { var x = s; var zv = { event: x, time: CurrentTime() }; if (x == "duration" || x == "time") { zv["duration"] = Duration() } if (x == "volume" || x == "unmute") { zv["volume"] = media ? media.volume : vars.volume } window.parent.postMessage(zv, '*'); var z = ''; x == "init" || x == "start" || x == "end" ? z = x + "ed" : ''; x == "play" ? z = "resumed" : ''; x == "pause" ? z = "paused" : ''; x == "seek" ? z = "rewound" : ''; x == "vast_Impression" ? z = "adShown" : ''; zv["event"] = z; if (z != '') { window.parent.postMessage(zv, '*') } } } function onCanPlay() { Uppod.trace('onCanPlay'); if (vars.start > 0) { Uppod.trace('onCanPlay set currentTime to ' + vars.start); media.currentTime = vars.start; vars.start = 0 } onReady() } function OnVolume() { if (volbarline_all_b) { vars.ivolbar_v ? VolumeDraw(media.volume * volbarline_s['h']) : VolumeDraw(media.volume * volbarline_s['w']) } if (volbar_b) { VolumeDraw(media.volume * vars.cntrlvolbar.w) } } function OnEnded() { Uppod.trace('OnEnded'); if (media.ended || isYoutube()) { Event('end'); if (vars.ga != null && vars.gaend == 1) { if (!vars.gatracked['ended']) { gaTracker("ended") } } if (vars.radio == 1) { Reload() } else { if (vars.repeat == 1) { Play() } else { if (!isYoutube()) { Back() } if (vars.plplay == 1 && pl) { PlNext() } else { TheEnd() } } } } } function Reload() { Uppod.trace('Reload'); Stop(); Toggle() } function Sizing() { var rw = vars.stg.offsetWidth; var rh = vars.stg.offsetHeight; if (document.msFullscreenElement && window.top !== window) { rw = window.screen.width; rh = window.screen.height } if (rw != vars.sw || rh < vars.sh - 5 || rh > vars.sh + 5) { Resize() } } function Playing() { if (media != undefined) { updateTimeDisplay(); if (iline) { var time = 0; var duration = 0; time = CurrentTime(); duration = Duration(); var loaded = 0; if (isYoutube()) { loaded = media_yt.getVideoLoadedFraction() } else { if (media.buffered) { if (media.buffered.length > 0) { for (var i = 0; i < media.buffered.length; i++) { if ((time >= media.buffered.start(i) || time >= media.buffered.start(i) - 100) && time <= media.buffered.end(i)) { loaded = media.buffered.end(i) / media.duration } } loaded == 0 ? loaded = (media.buffered.end(media.buffered.length - 1) / media.duration) : '' } } } if (loaded > 0) { CSS(line_load_b, { 'width': '' + (loaded * line_all_b.w) + 'px' }); if (loaded == 1) { if (!iloaded) { iloaded = true; Event("loaded") } } else { iloaded = false } } CSS(line_play_b, { 'width': '' + (time / duration) * line_all_b.w + 'px' }); if (ibuff && !igo) { if (time > 0) { HideBuffer(); igo = true } } if (iplay && time == lastTime) { if (ltc > 5) { !ibuff ? ShowBuffer() : ''; ibuff = true } else { ltc++ } } else { if (ibuff) { ibuff = false; HideBuffer() } ltc = 0 } lastTime = time } if (iplay && vars.reloader == 1) { if (CurrentTime() == vars.reloadertime) { vars.reloadercounter++; if (vars.reloadercounter > 200 && media.currentTime != undefined) { vars.reloadercounter = 0; Reload() } } else { vars.reloadercounter = 0 } vars.reloadertime = CurrentTime() } if (vars.eventtime != 0) { if (iplay) { if (is_array(vars.eventtime)) { for (i = 0; i < vars.eventtime.length; i++) { if (!vars.events['time' + vars.eventtime[i]]) { if (CurrentTime() > vars.eventtime[i]) { Event('time' + vars.eventtime[i], CurrentTime()) } } } } else { if (!vars.events['time']) { if (CurrentTime() > vars.eventtime) { Event('time', CurrentTime()) } } } } } if (vars.eventplayed != 0) { if (iplay) { if (is_array(vars.eventplayed)) { for (i = 0; i < vars.eventplayed.length; i++) { if (!vars.events['played' + vars.eventplayed[i]]) { if ((CurrentTime() / Duration()) * 100 > vars.eventplayed[i]) { Event('played' + vars.eventplayed[i], (CurrentTime() / Duration()) * 100) } } } } else { if (!vars.events['played']) { if ((CurrentTime() / Duration()) * 100 > vars.eventplayed) { Event('played', (CurrentTime() / Duration()) * 100) } } } } } line_b && run_b ? RunPos(run_b, line_b, line_play_b, line_all_b, run_pos) : ''; if (sub != undefined && vars.substart == 1) { if (sub[sub_lang]) { if (sub[sub_lang][1]) { var t = parseInt(CurrentTime() * 10); if (sub[sub_lang][1][t] != null) { var str = ''; if (vars.sublangsall == 1 && sub_lang_all) { for (var i = 0; i < sub.length; i++) { str += sub[i][0][sub[i][1][t]] ? sub[i][0][sub[i][1][t]] + (i < sub.length - 1 ? '<br>' : '') : '' } } else { str = sub[sub_lang][0][sub[sub_lang][1][t]] } if (sub) { var stop = false; if (sub_last) { sub_last == str ? stop = true : '' }!sub_showed ? stop = false : ''; !stop ? ShowSub(str) : '' } } if (sub[sub_lang][1][t] == undefined && sub_showed) { StopSub() } } } } if (iplay) { if (body.c.style.visibility == "hidden") { body.c.style.visibility = "visible" } if (media.style.visibility == "hidden") { media.style.visibility = "visible" } } } if (ifull && !irealfull) { if (vars.iframe != '') { window.parent.innerWidth != vars.stg.offsetWidth || window.parent.innerHeight != vars.stg.offsetHeight ? Full('re') : '' } else { window.innerWidth != vars.stg.offsetWidth || window.innerHeight != vars.stg.offsetHeight ? Full('re') : '' } } } function CurrentTime() { t = 0; if (isYoutube()) { t = media_yt.getCurrentTime() } else { media ? t = media.currentTime : '' } return t } function Duration() { t = 0; if (isYoutube()) { t = media_yt.getDuration() } else { if (media) { if (media.duration && media.duration != 'Infinity') { t = media.duration } } } return t } function NotFound() { if (vars.or.length > 1 && vars.ors < vars.or_limit) { if (vars.ori == vars.or.length - 1) { vars.ori = -1; vars.ors++ } vars.ori++; NewFile(vars.or[vars.ori], (vars.auto == "play" && (mobile || vars.volume == 0) ? true : false)) } else { Pause(); if (vars.alerts == 1) { var message = vars.lang2['file'] + ' ' + vars.lang2['notfound']; Alert(message) } Event('player_error', 'file not found') } } function TheEnd() { if (!nativecontrols) { CntrlShow() } if (vars.redirect != '' && vars.redirect_end == 1) { window.open(vars.redirect, vars.redirecttarget); vars.redirect_end = 0 } if (media) { if (!isYoutube()) { media.currentTime = 0; media.pause() } else { media_yt.pauseVideo() } } if (poster_mc && vars.m == 'video') { Show(poster_mc) } if (vars.menuauto == 1 && menu_b) { isVisible(menu_big) ? '' : Menu() } if (vars.plonend == 1 && pl) { if (vars.plplace == "inside") { if (vars.plplace == "inside") { Show(playlist); plnext_b ? Show(plnext_b.c) : ''; plprev_b ? Show(plprev_b.c) : '' } if (plnext_b) { PlArrows() } } } } function isVisible(mc) { var out = false; if (mc) { mc.style.visible != 'none' ? out = true : '' } return out } function FontStyle(f) { var out = 'normal'; if (f == 'i' || f == 'b><i') { out = 'italic' } return out } function FontWeight(f) { var out = 'normal'; if (f == 'b' || f == 'b><i') { out = 'bold' } return out } function ShowBuffer() { if (buffer_b) { uppod.controls().Buffer.show() } } function HideBuffer() { if (buffer_b) { uppod.controls().Buffer.hide() } ibuff = false } function updateTimeDisplay() { time_play_b ? time_play_b.c.innerHTML = formatTime(CurrentTime()) : ''; if (Duration() > 0) { time_back_b ? time_back_b.c.innerHTML = formatTime(Duration() - CurrentTime()) : ''; time_all_b ? time_all_b.c.innerHTML = formatTime(Duration()) : '' } } function formatTime(seconds, tip) { var seconds = Math.round(seconds); var minutes = Math.floor(seconds / 60); var hours = Math.floor(minutes / 60); minutes = Math.floor(minutes % 60); seconds = Math.floor(seconds % 60); (hours > 0 || timelength > 5) && minutes < 10 ? minutes = "0" + minutes : ""; seconds = (seconds >= 10) ? seconds : "0" + seconds; var out = (hours > 0 || timelength > 5 ? hours + ":" : "") + minutes + ":" + seconds; if (out.length != timelength && !tip) { timelength = out.length; PlaceControls() } return out } function CreateSubs() { if (vars.sub.indexOf('#') == 0) { vars.sub = un(vars.sub) } var subs = vars.sub.split(','); var clangs = vars.sublangs ? vars.sublangs.split(',') : Array(); sub = Array(); for (var i = 0; i < subs.length; i++) { if (subs[i] != '') { if (clangs[i] == undefined) { var filename = subs[i].substr(subs[i].lastIndexOf('/') + 1); filename = filename.substr(0, filename.lastIndexOf('.')); clangs[i] = filename } CreateSub(i, subs[i], clangs[i]); clangs[i] && vars.sublang ? (clangs[i] == vars.sublang ? sub_lang = i : '') : '' } else { if (sub_lang == i) { sub_lang++ } } } vars.sub_tmp = vars.sub; delete vars.sub } function CreateSub(l, url, label) { if (url) { if (url.indexOf('#') == 0) { url = un(url) } var url_shift = vars.sub_shift; if (url.indexOf('shift=') > 0) { url_shift = url.substr(url.indexOf('shift=') + 6) * 1 } if (mobile && (nativecontrols || iphone)) { var track = document.createElement('track'); track.setAttribute('src', url); track.setAttribute('label', label); vars.substart == 1 && l == 0 ? track.setAttribute('default', 'true') : ''; media.appendChild(track) } else { var subtxt = LoadFile(url); if (subtxt) { if (url.indexOf('.srt') > -1 || url.indexOf('.ass') > -1 || url.indexOf('.ssa') > -1 || url.indexOf('.vtt') > -1) { sub[l] = Object(); sub[l][0] = Array(); sub[l][1] = Array(); var rows = Array(); rows = subtxt.split('\n'); var cnt = 1; var t1 = 0; var t2 = 0; for (i = 0; i < rows.length; i++) { if (url.indexOf('.srt') > -1 || url.indexOf('.vtt') > -1) { if (rows[i].indexOf('-->') > -1 && rows[i].indexOf(':') > -1) { t1 = TimerSub(rows[i].substr(0, rows[i].indexOf('-->'))) * 1 + url_shift; t2 = TimerSub(rows[i].substr(rows[i].indexOf('-->') + 4, 12)) * 1 + url_shift; sub[l][0][t1] = ''; for (var j = t1; j < t2; j++) { sub[l][1][j] = t1 } cnt++ } else { if (rows[i] != '' && rows[i].length > 1 && rows[i] != cnt) { sub[l][0][t1] += (sub[l][0][t1] != '' ? '<br>' : '') + rows[i] } } } if (url.indexOf('.ass') > -1 || url.indexOf('.ssa') > -1) { if (rows[i].indexOf('Dialogue:') > -1) { t1 = TimerSub(rows[i].substr((url.indexOf('.ssa') > -1 ? rows[i].indexOf('=0') + 3 : 12), 12)) * 1 + url_shift; t2 = TimerSub(rows[i].substr((url.indexOf('.ssa') > -1 ? rows[i].indexOf('=0') + 14 : 23), 10)) * 1 + url_shift; var p = ''; if (rows[i].indexOf('0,,') > 0) { p = rows[i].substr(rows[i].indexOf('0,,') + 3) } else { if (rows[i].indexOf('ffect,') > 0) { p = rows[i].substr(rows[i].indexOf('ffect,') + 6) } } if (sub[l][0][t1] != undefined) { sub[l][0][t1] += '\n' + p } else { sub[l][0][t1] = p } sub[l][0][t1] = sub[l][0][t1].replace(/{.*?}/, ''); sub[l][0][t1] = sub[l][0][t1].replace(/\\\\N/, '\n'); for (var j = t1; j < t2; j++) { sub[l][1][j] = t1 } } } } } } vars.substart = 1 } } } function ShowSub(str) { if (sub_text) { KillSub() } sub_text = createElement('div'); sub_bg = createElement('div'); body.c.appendChild(sub_bg); body.c.appendChild(sub_text); Show(sub_text); Show(sub_bg); sub_last = str; sub_text.innerHTML = str; sub_showed = true; PositionSub() } function StopSub() { if (sub_text) { KillSub(); sub_showed = false } } function KillSub() { if (sub_text) { sub_text.innerHTML = ''; body.c.removeChild(sub_bg); body.c.removeChild(sub_text); sub_bg = null; sub_text = null } } function PositionSub() { var h = (!ifull ? vars.ph : vars.sh) - (vars.cntrlout == 1 && !ifull ? vars.padding / 2 : vars.cntrloutheight); if (sub_text) { var width = vars.sw - 60; CSS(sub_text, { "position": "absolute", "color": (vars.subcolor.length == 6 ? '#' : '') + vars.subcolor, 'fontFamily': vars.subfont, 'fontSize': (vars.subsize * (ifull ? 1.5 : 1)) + '%', 'text-align': 'center', 'line-height': '120%', 'text-shadow': '1px 1px 1px rgba(1,1,1,0.4)' }); CSS(sub_bg, { "position": "absolute", "backgroundColor": (vars.subbgcolor.length == 6 ? '#' : '') + vars.subbgcolor, 'opacity': vars.subbgalpha, 'borderRadius': vars.subbgo / 2 }); CSS(sub_text, { 'max-width': width }); var top = h - vars.submargin * (ifull ? vars.sh / vars.stageheight : 1) - 10 - sub_text.offsetHeight - 5; var left = (vars.sw - (sub_text.offsetWidth + 20)) / 2; CSS(sub_text, { "position": "absolute", "top": top, "left": left + 10 }); CSS(sub_bg, { "width": sub_text.offsetWidth + 20, "height": sub_text.offsetHeight + 10, "position": "absolute", "top": top - 5, "left": left }) } if (sub_menu) { var top2 = (h - sub_menu.offsetHeight); var left2 = sub_b.c.offsetLeft - sub_menu.offsetWidth + sub_b.w + 5; left2 < 0 ? left2 = 0 : ''; CSS(sub_menu, { "position": "absolute", "top": top2, "left": left2 }); CSS(sub_menu_bg, { "position": "absolute", "top": top2, "left": left2 }) } } function TimerSub(srt) { var tmp = srt.split(':'); var out = 0; tmp.length == 2 ? tmp.unshift("00") : ''; tmp[0] != '00' ? out += tmp[0] * 3600 : ''; tmp[1] != '00' ? out += tmp[1] * 60 : ''; out += tmp[2].substr(0, 2) * 1; out = out * 10 + tmp[2].substr(3, 1) * 1; return out } function SetSub() { if (vars.submenu == 1) { if (sub_menu) { ToggleView(sub_menu_bg); ToggleView(sub_menu); PositionSub() } else { sub_menu = createElement('div'); sub_menu_bg = createElement('div'); body.c.appendChild(sub_menu_bg); body.c.appendChild(sub_menu); sub_menu.innerHTML = '<div id="uppodplayer_sub_switcher" style="width:47px;height:18px;border:1px solid rgba(255,255,255,0.5);border-radius:20px;margin-bottom:10px;padding:1px;cursor:pointer"><div id="uppodplayer_sub_switcher_bg" style="width:45px;height:16px;background:#fff;border-radius:18px;padding:1px;"><div id="uppodplayer_sub_switcher_dot" style="width:16px;height:16px;background:#000;border-radius:17px;color:#000;text-align:center;' + (vars.substart == 0 ? 'float:left' : 'float:right') + '"></div></div></div>'; document.getElementById("uppodplayer_sub_switcher").onclick = ToggleSub; var sub_menu_x = createElement('div'); sub_menu.appendChild(sub_menu_x); CSS(sub_menu_x, { "fontSize": "80%", "position": "absolute", "top": 5, "right": 7, "color": "#fff", "opacity": 0.5, "margin-top": "-2px", "cursor": "pointer" }); sub_menu_x.innerHTML = '×'; sub_menu_x.onclick = SetSub; CSS(sub_menu, { "position": "absolute", "top": 0, "left": 0, "color": "#fff", "font": "90% sans-serif", "borderRadius": 10, "padding": 10, "width": 119 }); sub_menu2 = createElement('div'); ToggleSubStyle(); sub_menu.appendChild(sub_menu2); var b1 = createElement('div'); SetSubButStyle(b1, false); b1.innerHTML = '+'; CSS(b1, { "margin": "0 5px 5px 0" }); var b2 = createElement('div'); SetSubButStyle(b2, false); b2.innerHTML = '-'; CSS(b2, { "margin": "0 20px 5px 0" }); b1.onclick = function() { vars.subsize += 10; PositionSub() }; b2.onclick = function() { vars.subsize -= 10; PositionSub() }; var b3 = createElement('div'); SetSubButStyle(b3, false); b3.innerHTML = '∧'; CSS(b3, { "margin": "0 5px 5px 0" }); var b4 = createElement('div'); SetSubButStyle(b4, false); b4.innerHTML = '∨'; CSS(b4, { "margin": "0 0 5px 0" }); b3.onclick = function() { vars.submargin += 10; PositionSub() }; b4.onclick = function() { vars.submargin -= 10; PositionSub() }; var s1 = document.createElement('br'); sub_menu2.appendChild(s1); var c = Array(); var ccolors = Array("FFFFFF", "000000", "FAED54", "FFB0BE", "72CCF8", "62DE50", "E8BBFF", "FEBA54"); var c_def = 2; for (var i = 0; i < 7; i++) { c[i] = createElement('div'); SetSubButStyle(c[i], true); CSS(c[i], { "border": "1px solid #" + (i == 1 ? '666' : ccolors[i]), "opacity": 0.7, "color": "#" + (ccolors[i]) }); c[i].onclick = function() { vars.subcolor = this.style.color; isub_menu_color.style.opacity = 0.7; this.style.opacity = 1; isub_menu_color = this; PositionSub() }; vars.subcolor == ccolors[i] ? c_def = i : '' } c[c_def].style.opacity = 1; isub_menu_color = c[c_def]; var s2 = document.createElement('br'); sub_menu2.appendChild(s2); var cbg = Array(); var cbgcolors = Array("FFFFFF", "000000", "FEF370", "D90000", "073DA0", "409829", "644082", "a56305"); var cbg_def = 1; for (i = 0; i < 7; i++) { cbg[i] = createElement('div'); SetSubButStyle(cbg[i], true); CSS(cbg[i], { "background-color": "#" + (cbgcolors[i]), "borderColor": "#" + (i == 1 ? '666' : cbgcolors[i]), "opacity": 0.7, "color": "#fff" }); i == 0 || i == 2 ? CSS(cbg[i], { "color": "#000" }) : ''; cbg[i].onclick = function() { vars.subbgcolor = this.style.backgroundColor; isub_menu_bgcolor.style.opacity = 0.7; this.style.opacity = 1; isub_menu_bgcolor = this; PositionSub() }; vars.subbgcolor == cbgcolors[i] ? cbg_def = i : '' } cbg[cbg_def].style.opacity = 1; isub_menu_bgcolor = cbg[cbg_def]; var s3 = document.createElement('br'); sub_menu2.appendChild(s3); var ca0 = createElement('div'); sub_menu2.appendChild(ca0); CSS(ca0, { "float": "left", "margin": "0 2px 0 2px", "cursor": "default" }); ca0.innerHTML = '-'; var ca = createElement('div'); CSS(ca, { "width": 91, "height": 4, "border": "1px solid #fff", "borderRadius": 4, "float": "left", "margin": "5px 3px", "cursor": "pointer" }); sub_menu2.appendChild(ca); var ca2 = createElement('div'); ca.appendChild(ca2); CSS(ca2, { "width": (vars.subbgalpha * 100) + "%", "height": 4, "borderRadius": 4, "background": "#fff" }); var ca1 = createElement('div'); sub_menu2.appendChild(ca1); CSS(ca1, { "float": "left", "margin": "0 0 0 2px", "fontSize": "80%", "cursor": "default" }); ca1.innerHTML = '+'; ca.onclick = function(e) { var n = e.clientX - findLeft(this); n < 5 ? n = 0 : ''; CSS(this.firstElementChild, { 'width': n }); vars.subbgalpha = n / this.offsetWidth; PositionSub() }; if (vars.sublangs) { var clang = document.createElement('select'); var clangs = vars.sublangs.split(','); var subs = vars.sub_tmp.split(','); for (var l = 0; l < clangs.length; l++) { var cl = document.createElement('option'); CSS(cl, { 'backgroundColor': vars.selectbgcolor, 'color': vars.selectcolor }); cl.innerHTML = clangs[l]; clang.appendChild(cl); if (clangs[l] == vars.sublang) { sub_lang = l; cl.setAttribute("selected", "true") } if (subs[l] == '') { cl.setAttribute("disabled", "true") } } if (vars.sublangsall == 1 && clangs.length > 1) { var cl = document.createElement('option'); CSS(cl, { 'backgroundColor': vars.selectbgcolor, 'color': vars.selectcolor }); cl.innerHTML = vars.lang2['all']; clang.appendChild(cl) } sub_menu2.appendChild(clang); clang.onchange = function() { if (vars.sublangsall == 1 && this.selectedIndex == this.length - 1) { sub_lang = 0; sub_lang_all = true } else { sub_lang_all = false; sub_lang = this.selectedIndex } }; CSS(clang, { 'width': 120, 'cursor': 'pointer' }) } CSS(sub_menu_bg, { "position": "absolute", "top": 0, "left": 0, "background": "#000", "width": sub_menu.offsetWidth, "height": sub_menu.offsetHeight, "opacity": "0.7", "borderRadius": 10 }); PositionSub(); sub_menu.style.zIndex = 7; sub_menu_bg.style.zIndex = 7 } } else { ToggleSub() } } function ToggleSub() { if (vars.submenu == 1) { var el = sub_menu.firstElementChild.firstElementChild.firstElementChild; CSS(el, { "float": (vars.substart == 1 ? "left" : "right") }) } if (sub) { vars.substart == 0 ? vars.substart = 1 : vars.substart = 0 } else { if (vars.sub && vars.substart == 0) { CreateSubs(); vars.substart = 1 } else { vars.substart == 0 ? vars.substart = 1 : vars.substart = 0 } } if (vars.substart == 0) { StopSub() } if (vars.submenu == 1) { ToggleSubStyle() } else { if (sub_b) { vars.substart ? CSS(sub_b.c, { 'opacity': sub_b.s.alpha }) : CSS(sub_b.c, { 'opacity': sub_b.s.alpha0 }) } } } function ToggleSubStyle() { vars.substart == 0 ? CSS(sub_menu2, { "visibility": "hidden" }) : CSS(sub_menu2, { "visibility": "visible" }); CSS(document.getElementById("uppodplayer_sub_switcher_dot"), { "background": (vars.substart == 0 ? "#fff" : "#000") }); CSS(document.getElementById("uppodplayer_sub_switcher_bg"), { "background": (vars.substart == 0 ? 0 : "#fff") }) } function SetSubButStyle(b, small) { sub_menu2.appendChild(b); CSS(b, { "float": "left", "textAlign": "center", "width": (small ? 11 : 20), "height": (small ? 11 : "auto"), "border": "1px solid rgba(255,255,255,0.5)", "borderRadius": (small ? 11 : 20), "margin": (small ? "3px 2px 7px 2px" : 0), "padding": (small ? "0" : "0 0 0 0"), "cursor": "pointer" }) } function Controls() { if (vars.youtube && browser.restrictMediaPlay) {} var controlsObj = uppod.controls(); controlsObj.add(new Uppod.ControlBar(uppod)); controls = controlsObj.ControlBar.dom; controls.onmouseover = function() { vars.controls_active = true }; controls.onmouseout = function() { vars.controls_active = false }; if (!mobile && vars.hotkey == 1 && vars.m == "video") { controls.addEventListener("dblclick", function(event) { event.stopPropagation() }) } sep_b = []; sep = 0; CntrlBg(); cntrl = vars.controls.split(','); cntrlength = 0; cntrls = []; cntrli = []; for (var i = 0; i < cntrl.length; i++) { if (cntrl[i] == 'play' || cntrl[i] == 'playstop') { play_b = new Element('play', 20, 20); controlsObj.addElement('Play', play_b); controls.appendChild(play_b.c); CSS(play_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - play_b.h) / 2 + play_b.s.margintop - play_b.s.marginbottom }); play_b.c.onclick = Toggle; if (vars.tip == 1 && play_b.s.notip == 0) { play_b.c.onmouseover = function() { var txt = play_b.s.play_tip ? play_b.s.play_tip : vars.lang2['play']; ToolTip(play_b.c, txt) }; play_b.c.onmouseout = function() { ToolTipHide(play_b.c) } } pause_b = new Element((cntrl[i] == 'playstop' ? 'stop' : 'pause'), 20, 20, '', 'play'); controlsObj.addElement('Pause', pause_b); controls.appendChild(pause_b.c); CSS(pause_b.c, { 'cursor': 'pointer', 'display': 'none', 'position': 'absolute', 'top': (vars.cntrloutheight - pause_b.h) / 2 + pause_b.s.margintop - pause_b.s.marginbottom }); cntrl[i] == 'playstop' ? pause_b.c.onclick = Stop : pause_b.c.onclick = Toggle; cntrls[i] = pause_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + play_b.s.marginleft + play_b.s.marginright; cntrli[i] = play_b; if (vars.tip == 1 && pause_b.s.notip == 0) { pause_b.c.onmouseover = function() { ToolTip(pause_b.c, pause_b.s.pause_tip ? pause_b.s.pause_tip : vars.lang2['pause']) }; pause_b.c.onmouseout = function() { ToolTipHide(pause_b.c) } } } if (cntrl[i] == 'back') { back_b = new Element('back', 30, 20); controlsObj.addElement('Back', back_b); controls.appendChild(back_b.c); CSS(back_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - back_b.h) / 2 + back_b.s.margintop - back_b.s.marginbottom }); back_b.c.onclick = Back; cntrls[i] = back_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + back_b.s.marginleft + back_b.s.marginright; cntrli[i] = back_b; if (vars.tip == 1 && back_b.s.notip == 0) { back_b.c.onmouseover = function() { ToolTip(back_b.c, back_b.s.tip ? back_b.s.tip : vars.lang2['back']) }; back_b.c.onmouseout = function() { ToolTipHide(back_b.c) } } } if (cntrl[i] == 'stop') { stop_b = new Element('stop', 20, 20); controlsObj.addElement('Stop', stop_b); controls.appendChild(stop_b.c); CSS(stop_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - stop_b.h) / 2 + stop_b.s.margintop - stop_b.s.marginbottom }); stop_b.c.onclick = Stop; cntrls[i] = stop_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + stop_b.s.marginleft + stop_b.s.marginright; cntrli[i] = stop_b; if (vars.tip == 1 && stop_b.s.notip == 0) { stop_b.c.onmouseover = function() { ToolTip(stop_b.c, stop_b.s.tip ? stop_b.s.tip : vars.lang2['stop']) }; stop_b.c.onmouseout = function() { ToolTipHide(stop_b.c) } } } if (cntrl[i].indexOf('my') == 0) { var m = cntrl[i].substr(2); mybuts[m] = new Element('my' + m, 20, 20); controls.appendChild(mybuts[m].c); CSS(mybuts[m].c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - mybuts[m].h) / 2 + mybuts[m].s.margintop - mybuts[m].s.marginbottom }); mybuts[m].c.id = 'uppod_mybut' + m; mybuts[m].c.onclick = function() { Mybut(this.id) }; cntrls[i] = mybuts[m].w + vars.cntrlmargin; cntrlength += cntrls[i] + mybuts[m].s.marginleft + mybuts[m].s.marginright; cntrli[i] = mybuts[m]; if (vars.tip == 1 && mybuts[m].s.notip == 0 && mybuts[m].s.tip) { mybuts[m].c.onmouseover = function() { var id = this.id; if (id) { var mm = id.substr(11); ToolTip(mybuts[mm].c, mybuts[mm].s.tip) } }; mybuts[m].c.onmouseout = function() { var id = this.id; if (id) { var mm = id.substr(11); ToolTipHide(mybuts[m].c) } } } } if (cntrl[i] == 'download') { download_b = new Element('download', 20, 20); controlsObj.addElement('Download', download_b); controls.appendChild(download_b.c); CSS(download_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - download_b.h) / 2 + download_b.s.margintop - download_b.s.marginbottom }); download_b.c.onclick = Download; cntrls[i] = download_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + download_b.s.marginleft + download_b.s.marginright; cntrli[i] = download_b; if (vars.tip == 1 && download_b.s.notip == 0) { download_b.c.onmouseover = function() { ToolTip(download_b.c, download_b.s.tip ? download_b.s.tip : vars.lang2['download']) }; download_b.c.onmouseout = function() { ToolTipHide(download_b.c) } } } if (vars.pl != '') { if (cntrl[i] == 'next') { next_b = new Element('next', 20, 20); controlsObj.addElement('Next', next_b); controls.appendChild(next_b.c); CSS(next_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - next_b.h) / 2 + next_b.s.margintop - next_b.s.marginbottom }); next_b.c.onclick = Next; cntrls[i] = next_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + next_b.s.marginleft + next_b.s.marginright; cntrli[i] = next_b; if (vars.tip == 1 && next_b.s.notip == 0) { next_b.c.onmouseover = function() { ToolTip(next_b.c, next_b.s.tip ? next_b.s.tip : vars.lang2['next']) }; next_b.c.onmouseout = function() { ToolTipHide(next_b.c) } } } if (cntrl[i] == 'prev') { prev_b = new Element('prev', 20, 20); controlsObj.addElement('Prev', prev_b); controls.appendChild(prev_b.c); CSS(prev_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - prev_b.h) / 2 + prev_b.s.margintop - prev_b.s.marginbottom }); if (vars.random == 0) { CSS(prev_b.c, { 'opacity': 0.3, 'filter': 'alpha(opacity=30)', 'cursor': 'default' }) } prev_b.c.onclick = Prev; cntrls[i] = prev_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + prev_b.s.marginleft + prev_b.s.marginright; cntrli[i] = prev_b; if (vars.tip == 1 && prev_b.s.notip == 0) { prev_b.c.onmouseover = function() { ToolTip(prev_b.c, prev_b.s.tip ? prev_b.s.tip : vars.lang2['prev']) }; prev_b.c.onmouseout = function() { ToolTipHide(prev_b.c) } } } } if (cntrl[i] == 'time_play') { time_play_b = new Element('time_play', 30, 20); controlsObj.addElement('TimePlay', time_play_b); controls.appendChild(time_play_b.c); CSS(time_play_b.c, { 'cursor': 'default', 'position': 'absolute', 'top': (vars.cntrloutheight - time_play_b.h) / 2 + 3 + time_play_b.s.margintop * 1 - time_play_b.s.marginbottom * 1, 'white-space': 'nowrap' }); cntrls[i] = time_play_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + time_play_b.s.marginleft + time_play_b.s.marginright; cntrli[i] = time_play_b; timeitems++ } if (cntrl[i] == 'time_back') { time_back_b = new Element('time_back', 30, 20); controlsObj.addElement('TimeBack', time_back_b); controls.appendChild(time_back_b.c); CSS(time_back_b.c, { 'cursor': 'default', 'position': 'absolute', 'top': (vars.cntrloutheight - time_back_b.h) / 2 + 3 + time_back_b.s.margintop * 1 - time_back_b.s.marginbottom * 1, 'white-space': 'nowrap' }); cntrls[i] = time_back_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + time_back_b.s.marginleft + time_back_b.s.marginright; cntrli[i] = time_back_b; timeitems++ } if (cntrl[i] == 'time_all') { time_all_b = new Element('time_all', 30, 20); controlsObj.addElement('TimeAll', time_all_b); controls.appendChild(time_all_b.c); CSS(time_all_b.c, { 'cursor': 'default', 'position': 'absolute', 'top': (vars.cntrloutheight - time_all_b.h) / 2 + 3 + time_all_b.s.margintop * 1 - time_all_b.s.marginbottom * 1, 'white-space': 'nowrap' }); cntrls[i] = time_all_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + time_all_b.s.marginleft + time_all_b.s.marginright; cntrli[i] = time_all_b; timeitems++ } if (cntrl[i] == '|') { sep_b[sep] = new Element('separator', 5, 20); controlsObj.addElement('Separator', sep_b[sep]); controls.appendChild(sep_b[sep].c); CSS(sep_b[sep].c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - sep_b[sep].h) / 2 + sep_b[sep].s.margintop - sep_b[sep].s.marginbottom }); cntrls[i] = sep_b[sep].w + vars.cntrlmargin; cntrlength += cntrls[i] + sep_b[sep].s.marginleft + sep_b[sep].s.marginright; cntrli[i] = sep_b[sep]; sep++ } if (cntrl[i] == 'run_line') { var run_s = Cntrl_Style('run'); run_b = createElement('div'); controlsObj.addDom('RunLine', run_b); controls.appendChild(run_b); var lh = vars.cntrlline['h']; if (vars.cntrl_line) { if (vars.cntrl_line['h']) { lh = vars.cntrl_line['h'] } } if (run_s['position'] == 0) { if (lh % 2 != run_s['h'] % 2) { run_s['h']++ } if (run_s['o'] == 1) { run_s['w'] = run_s['h'] } } CSS(run_b, { 'cursor': 'pointer', 'position': 'absolute', 'left': 0, 'top': run_s['margintop'] * 1 - run_s['marginbottom'] * 1, 'width': run_s['w'] + 'px', 'height': run_s['h'] + 'px', 'borderRadius': (run_s['w'] * run_s['o']) + 'px', 'opacity(': run_s['alpha'], 'filter': 'alpha(opacity=' + (run_s['alpha'] * 100) + ')' }); CheckGradiendDiv(run_b, run_s['color']); if (run_s['icon']) { if (String(run_s['icon']).indexOf("http") == 0) { if (vars.https == 1) { run_s['icon'] = run_s['icon'].replace("http://", "https://"); run_s['icon'] = run_s['icon'].replace("http://", "https://") } IconImg(run_s['icon'], run_b, 0, run_s['pic_w'], run_s['pic_h'], run_s['halficonisover']) } } if (run_s['bg'] == 1) { CSS(run_b, { 'border': '2px solid #' + ReColor(run_s['bgcolor']) }) } run_pos = run_s['position']; if (vars.tip == 1 && line_s['notip'] == 0) { run_b.onmouseover = function() { media.duration ? ToolTip(run_b, 'line') : '' }; run_b.onmouseout = function() { ToolTipHide(run_b) } } } if (cntrl[i] == 'run_volume' && !mobile) { var run_s = Cntrl_Style('run_volume'); runvolume_b = createElement('div'); controlsObj.addDom('RunVolume', runvolume_b); controls.appendChild(runvolume_b); CSS(runvolume_b, { 'pointer-events': 'none', 'cursor': 'pointer', 'position': 'absolute', 'left': 0, 'top': 0, 'width': run_s['w'] + 'px', 'height': run_s['h'] + 'px', 'borderRadius': (run_s['w'] * run_s['o']) + 'px', 'opacity': run_s['alpha'], 'filter': 'alpha(opacity=' + (run_s['alpha'] * 100) + ')' }); CheckGradiendDiv(runvolume_b, run_s['color']); runvolume_pos = run_s['position']; if (vars.ivolbar_v) { Hide(runvolume_b) } if (run_s['bg'] == 1) { CSS(runvolume_b, { 'border': '2px solid #' + ReColor(run_s['bgcolor']) }) } } if (cntrl[i] == 'sound' && !mobile && vars.controls.indexOf("volbarline") > -1) { cntrl[i] = 'volume'; vars.cntrl_volume = vars.cntrl_sound } if ((cntrl[i] == 'volume' || cntrl[i] == 'volbarline_v') && !mobile) { volume_b = new Element('volume', 20, 20); controlsObj.addElement('Volume', volume_b); controls.appendChild(volume_b.c); CSS(volume_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - volume_b.h) / 2 + volume_b.s.margintop - volume_b.s.marginbottom }); volume_b.c.onclick = Mute; volume_mute_b = new Element('volume_mute', 20, 20, '', 'volume'); controlsObj.addElement('VolumeMute', volume_mute_b); controls.appendChild(volume_mute_b.c); CSS(volume_mute_b.c, { 'display': 'none', 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - volume_mute_b.h) / 2 + volume_mute_b.s.margintop - volume_mute_b.s.marginbottom }); cntrls[i] = volume_mute_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + volume_mute_b.s.marginleft + volume_mute_b.s.marginright; volume_mute_b.c.onclick = Mute; cntrli[i] = volume_b; if (vars.tip == 1 && volume_b.s.notip == 0) { volume_b.c.addEventListener("mouseover", function() { var txt = vars.lang2['sound']; ToolTip(volume_b.c, txt) }); volume_b.c.addEventListener("mouseout", function() { ToolTipHide(volume_b.c) }); volume_mute_b.c.addEventListener("mouseover", function() { var txt = vars.lang2['sound_off']; ToolTip(volume_mute_b.c, txt) }); volume_mute_b.c.addEventListener("mouseout", function() { ToolTipHide(volume_mute_b.c) }) } if (cntrl[i] == 'volbarline_v') { vars.ivolbar_v = true; volbarline_b = createElement('div'); controlsObj.addDom('VolumeBarlineV', volbarline_b); controls.appendChild(volbarline_b); vars.cntrl_volbarline_v.bg = 0; CSS(volbarline_b, { 'cursor': 'pointer', 'position': 'absolute', 'top': 0 }); volbarline_s = Cntrl_Style('volbarline_v'); volbarline_all_b = createElement('div'); volbarline_b.appendChild(volbarline_all_b); CSS(volbarline_all_b, { 'cursor': 'pointer', 'position': 'absolute', 'left': 0, 'top': 0, 'width': volbarline_s['w'], 'height': volbarline_s['h'], 'borderRadius': ((volbarline_s['h'] / 2) * volbarline_s['o']) + 'px', 'opacity': volbarline_s['all_a'], 'filter': 'alpha(opacity=' + (volbarline_s['all_a'] * 100) + ')' }); CheckGradiendDiv(volbarline_all_b, volbarline_s['color_all']); volbarline_s['active'] = false; CSS(volbarline_b, { 'display': 'none', 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - volbarline_s['h']) - 10 }); volbarline_play_b = createElement('div'); volbarline_b.appendChild(volbarline_play_b); CSS(volbarline_play_b, { 'pointer-events': 'none', 'position': 'absolute', 'left': 0, 'top': 0, 'width': volbarline_s['w'], 'height': volbarline_s['h'], 'borderRadius': ((volbarline_s['h'] / 2) * volbarline_s['o']) + 'px', 'opacity': volbarline_s['play_a'], 'filter': 'alpha(opacity=' + (volbarline_s['play_a'] * 100) + ')' }); if (volbarline_s['color_load']) { volbarline_s['color_play'] = volbarline_s['color_load'] } CheckGradiendDiv(volbarline_play_b, volbarline_s['color_play']); CSS(volbarline_b, { 'cursor': 'pointer', 'position': 'absolute', 'top': (-volbarline_s['h']) }); CSS(volbarline_play_b, { 'height': volbarline_s['h'] * vars.volume, 'top': volbarline_s['h'] - volbarline_s['h'] * vars.volume }); volbarline_b.onmousedown = function VolbarlineDown(e) { volbarline_s['active'] = true; if (!e) var e = window.event; VolumeMove_v(e) }; volbarline_b.onmousemove = function VolbarlineMove(e) { if (!e) var e = window.event; VolumeMove_v(e) }; volbarline_b.onmouseup = function VolbarlineUp(e) { volbarline_s['active'] = false }; volbarline_b.onmouseover = function VolbarlineOver(e) { volbarline_s['over'] = true }; volbarline_b.onmouseout = function VolbarlineOut(e) { volbarline_s['over'] = false }; volume_mute_b.c.addEventListener("mouseover", VolumeButOver); volume_b.c.addEventListener("mouseout", VolumeButOver); volume_mute_b.c.addEventListener("mouseout", VolumeButOver); volume_b.c.addEventListener("mouseover", VolumeButOver); volume_mute_b.c.onmouseout = volume_b.c.onmouseout = VolbarHide; volbarline_b.style.zIndex = 7; if (runvolume_b) { Hide(runvolume_b) } } } if (cntrl[i] == 'tune' && !mobile) { cntrl[i] = 'volbarline'; vars.cntrl_volbarline = vars.cntrl_tune } if (cntrl[i] == 'volbarline' && !mobile) { volbarline_b = createElement('div'); controlsObj.addDom('VolumeBarline', volbarline_b); controls.appendChild(volbarline_b); volbarline_s = Cntrl_Style('volbarline'); var volbarline_bg_b = createElement('div'); volbarline_b.appendChild(volbarline_bg_b); CSS(volbarline_bg_b, { 'cursor': 'pointer', 'position': 'absolute', 'left': 0, 'top': -10, 'width': volbarline_s['w'], 'height': (volbarline_s['h'] + 20), 'opacity': '0', 'filter': 'alpha(opacity=0)' }); volbarline_all_b = createElement('div'); volbarline_b.appendChild(volbarline_all_b); CSS(volbarline_all_b, { 'cursor': 'pointer', 'position': 'absolute', 'left': 0, 'top': 0, 'width': volbarline_s['w'], 'height': volbarline_s['h'], 'borderRadius': ((volbarline_s['h'] / 2) * volbarline_s['o']) + 'px', 'opacity': volbarline_s['all_a'], 'filter': 'alpha(opacity=' + (volbarline_s['all_a'] * 100) + ')' }); CheckGradiendDiv(volbarline_all_b, volbarline_s['color_all']); volbarline_s['active'] = false; volbarline_play_b = createElement('div'); volbarline_b.appendChild(volbarline_play_b); CSS(volbarline_play_b, { 'pointer-events': 'none', 'position': 'absolute', 'left': 0, 'top': 0, 'height': volbarline_s['h'], 'borderRadius': ((volbarline_s['h'] / 2) * volbarline_s['o']) + 'px', 'opacity': volbarline_s['play_a'], 'filter': 'alpha(opacity=' + (volbarline_s['play_a'] * 100) + ')' }); if (volbarline_s['color_load']) { volbarline_s['color_play'] = volbarline_s['color_load'] } CheckGradiendDiv(volbarline_play_b, volbarline_s['color_play']); CSS(volbarline_b, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - volbarline_s['h']) / 2 + volbarline_s['margintop'] - volbarline_s['marginbottom'] }); cntrls[i] = volbarline_s['w'] + vars.cntrlmargin + 5; cntrlength += cntrls[i] + volbarline_s['marginleft'] + volbarline_s['marginright']; CSS(volbarline_play_b, { 'width': volbarline_s['w'] * (v ? v : vars.volume) }); volbarline_b.onmousedown = function(e) { volbarline_s['active'] = true; if (!e) var e = window.event; VolumeMove(e) }; volbarline_b.onmousemove = function(e) { if (!e) var e = window.event; VolumeMove(e) }; volbarline_b.onmouseout = function(e) { if (!e) var e = window.event; VolumeOut(e) }; volbarline_b.onmouseup = function(e) {}; cntrli[i] = volbarline_b } if (cntrl[i] == 'volbar' && !mobile) { volbar_b = createElement('div'); controlsObj.addDom('VolumeBar', volbar_b); controls.appendChild(volbar_b); volbars = []; vars.cntrl_volbar.all_a ? vars.cntrlvolbar.all_a = vars.cntrl_volbar.all_a : ''; vars.cntrl_volbar.play_a ? vars.cntrlvolbar.play_a = vars.cntrl_volbar.play_a : ''; if (vars.cntrl_volbar.icon) { if (vars.cntrl_volbar.icon == 1) { vars.cntrlvolbar.n = 10; vars.cntrlvolbar.bar = 1 } if (vars.cntrl_volbar.icon == 2) { vars.cntrlvolbar.n = 5; vars.cntrlvolbar.bar = 0 } if (vars.cntrl_volbar.icon == 3) { vars.cntrlvolbar.n = 10; vars.cntrlvolbar.bar = 0 } } vars.cntrl_volbar.n ? vars.cntrlvolbar.n = vars.cntrl_volbar.n : ''; vars.cntrl_volbar.bar ? vars.cntrlvolbar.bar = vars.cntrl_volbar.bar : ''; vars.cntrl_volbar.scale ? vars.cntrlvolbar.scale = vars.cntrl_volbar.scale : ''; vars.cntrl_volbar.margintop ? vars.cntrlvolbar.margintop = vars.cntrl_volbar.margintop : vars.cntrlvolbar.margintop = 0; vars.cntrl_volbar.marginbottom ? vars.cntrlvolbar.marginbottom = vars.cntrl_volbar.marginbottom : vars.cntrlvolbar.marginbottom = 0; vars.cntrlvolbar.w = vars.cntrlvolbar.n * 5 * vars.cntrlvolbar.scale; vars.cntrlvolbar.h = 10 * vars.cntrlvolbar.scale; for (vb = 0; vb < vars.cntrlvolbar.n; vb++) { var vbh = (vars.cntrlvolbar.bar == 1 ? (10 / vars.cntrlvolbar.n) * (vb + 1) : 10 * vars.cntrlvolbar.scale); volbars[vb] = new Element('volbar', 3 * vars.cntrlvolbar.scale, vbh); volbar_b.appendChild(volbars[vb].c); CSS(volbars[vb].c, { 'position': 'absolute', 'top': 10 * vars.cntrlvolbar.scale - vbh * vars.cntrlvolbar.scale, 'left': vb * 5 * vars.cntrlvolbar.scale + 10 * (vars.cntrlvolbar.scale - 1), 'opacity': vars.cntrlvolbar.all_a }); if (vars.cntrl_volbar.bar == 1) { volbars[vb].c.onmouseover = function(e) { CSS(this, { 'top': vbh - 1 }) }; volbars[vb].c.onmouseout = function(e) { CSS(this, { 'top': vbh }) } } }; volbar_b.onmousedown = function(e) { volbar_b.active = true; if (!e) var e = window.event; VolbarMove(e) }; volbar_b.onmousemove = function(e) { if (!e) var e = window.event; VolbarMove(e) }; volbar_b.onmouseup = function(e) { volbar_b.active = false }; CSS(volbar_b, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - vars.cntrlvolbar.h) / 2 + (vars.cntrlvolbar.h - 10) * vars.cntrlvolbar.scale + vars.cntrlvolbar.margintop - vars.cntrlvolbar.marginbottom, 'width': vars.cntrlvolbar.w, 'height': vars.cntrlvolbar.h }); cntrls[i] = (vars.cntrlvolbar.n + 1) * 5 + vars.cntrlmargin; cntrlength += cntrls[i] + (vars.cntrlvolbar.marginleft ? vars.cntrlvolbar.marginleft : 0) + (vars.cntrlvolbar.marginright ? vars.cntrlvolbar.marginright : 0); cntrli[i] = volbar_b; v != 0 ? VolumeDraw(-v) : '' } if (cntrl[i] == 'full') { controlsObj.add(new Uppod.EnterFullscreenControl(uppod)); controlsObj.add(new Uppod.ExitFullscreenControl(uppod)); full_b = uppod.controls().EnterFullscreen.options.element; full_back_b = uppod.controls().ExitFullscreen.options.element; cntrls[i] = full_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + full_b.s.marginleft + full_b.s.marginright; cntrli[i] = full_b; if (vars.tip == 1 && full_b.s.notip == 0) { full_b.c.onmouseover = function() { ToolTip(full_b.c, (full_b.s.tip ? full_b.s.tip : vars.lang2['full'])) }; full_b.c.onmouseout = function() { ToolTipHide(full_b.c) }; full_back_b.c.onmouseover = function() { ToolTip(full_back_b.c, (full_back_b.s.tip ? full_back_b.s.tip : vars.lang2['full_back'])) }; full_back_b.c.onmouseout = function() { ToolTipHide(full_back_b.c) } } } if (cntrl[i] == 'sub') { sub_b = new Element('sub', 20, 20); controlsObj.addElement('Sub', sub_b); controls.appendChild(sub_b.c); CSS(sub_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - sub_b.h) / 2 + sub_b.s.margintop - sub_b.s.marginbottom }); sub_b.c.onclick = SetSub; cntrls[i] = sub_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + sub_b.s.marginleft + sub_b.s.marginright; cntrli[i] = sub_b; if (vars.tip == 1 && sub_b.s.notip == 0) { sub_b.c.onmouseover = function() { ToolTip(sub_b.c, sub_b.s.tip ? sub_b.s.tip : vars.lang2['sub']) }; sub_b.c.onmouseout = function() { ToolTipHide(sub_b.c) } } vars.substart == 0 ? CSS(sub_b.c, { 'opacity': sub_b.s.alpha0 }) : '' } if (cntrl[i] == 'hd') { if (vars.youtube) { vars.hdlinks = 'hd720,large,medium,small,auto'; vars.hd = '720p,480p,320p,240p,auto'; vars.hdsw == 60 ? vars.hdsw = 55 : ''; vars.filehd = '' } if (vars.hd || vars.filehd != '') { var isbutton = false; if (vars.hd) { vars.hd.indexOf('::') > -1 ? isbutton = true : '' } else { vars.filehd != '' ? isbutton = true : '' } if (isbutton) { hd_b = new Element('hd', 20, 20); controlsObj.addElement('Hd', hd_b); controls.appendChild(hd_b.c); CSS(hd_b.c, { 'cursor': 'pointer', 'display': (vars.hd1 == 1 ? 'none' : 'block'), 'position': 'absolute', 'top': Math.floor((vars.cntrloutheight - hd_b.h) / 2 + hd_b.s.margintop - hd_b.s.marginbottom) }); if (hd_b.s.icon2) { if (hd_b.s.icon == hd_b.s.icon2) { CSS(hd_b.c, { 'opacity': hd_b.s.alpha0 }) } } cntrls[i] = hd_b.w + vars.cntrlmargin; hd_b.c.onclick = Quality; cntrlength += cntrls[i] + hd_b.s.marginleft + hd_b.s.marginright; cntrli[i] = hd_b; if (vars.tip == 1 && hd_b.s.notip == 0) { hd_b.c.onmouseover = function() { ToolTip(hd_b.c, hd_b.s.tip ? hd_b.s.tip : vars.lang2['hd']) }; hd_b.c.onmouseout = function() { ToolTipHide(hd_b.c) } } hd1_b = new Element('hd1', 20, 20, '', 'hd'); controlsObj.addElement('Hd1', hd1_b); controls.appendChild(hd1_b.c); CSS(hd1_b.c, { 'cursor': 'pointer', 'display': (vars.hd1 == 1 ? 'block' : 'none'), 'position': 'absolute', 'top': Math.floor((vars.cntrloutheight - hd1_b.h) / 2 + hd1_b.s.margintop - hd1_b.s.marginbottom) }); hd1_b.c.onclick = Quality; if (vars.tip == 1 && hd1_b.s.notip == 0) { hd1_b.c.onmouseover = function() { ToolTip(hd1_b.c, hd_b.s.tip_off ? hd_b.s.tip_off : vars.lang2['hd']) }; hd1_b.c.onmouseout = function() { ToolTipHide(hd1_b.c) } } } else { if (vars.hd.indexOf(',') > -1) { vars.hda = vars.hd.split(','); if (vars.hdsw == 60 && vars.hlsautoquality == 0) { vars.hdsw = 0; for (var h = 0; h < vars.hda.length; h++) { vars.hdsw < measureText(vars.hda[h], 12).width ? vars.hdsw = measureText(vars.hda[h], 12).width : '' } vars.hdsw += 22 } hd_b = new Element('hdselect', vars.hdsw, 20, '', 'hd'); controlsObj.addElement('HdSelect', hd_b); controls.appendChild(hd_b.c); CSS(hd_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': Math.floor((vars.cntrloutheight - hd_b.h) / 2 + hd_b.s.margintop - hd_b.s.marginbottom) }); cntrls[i] = hd_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + hd_b.s.marginleft + hd_b.s.marginright; cntrli[i] = hd_b; vars.tip == 1 && hd_b.s.notip == 0 ? hd_b.c.title = (hd_b.s.tip ? hd_b.s.tip : vars.lang2['hd']) : ''; hdselect = document.createElement('select'); hd_b.c.appendChild(hdselect); HdSelect(); CSS(hdselect, { 'position': 'absolute', 'margin': '1px 0px 0px -5px', 'opacity': 0, 'cursor': 'pointer', "width": vars.hdsw }); hdselect.onchange = QualitySelecter } } } } if (cntrl[i] == 'playlist') { if (vars.pl != '') { playlist_b = new Element('playlist', 20, 20); controlsObj.addElement('Playlist', playlist_b); controls.appendChild(playlist_b.c); CSS(playlist_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - playlist_b.h) / 2 + playlist_b.s.margintop - playlist_b.s.marginbottom }); playlist_b.c.onclick = Pl; cntrls[i] = playlist_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + playlist_b.s.marginleft + playlist_b.s.marginright; cntrli[i] = playlist_b; if (vars.tip == 1 && playlist_b.s.notip == 0) { playlist_b.c.onmouseover = function() { ToolTip(playlist_b.c, playlist_b.s.tip ? playlist_b.s.tip : vars.lang2['list']) }; playlist_b.c.onmouseout = function() { ToolTipHide(playlist_b.c) } } } } if (cntrl[i] == 'menu') { menu_b = new Element('menu', 20, 20); controlsObj.addElement('Menu', menu_b); controls.appendChild(menu_b.c); CSS(menu_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': (vars.cntrloutheight - menu_b.h) / 2 + menu_b.s.margintop - menu_b.s.marginbottom }); menu_b.c.onclick = Menu; cntrls[i] = menu_b.w + vars.cntrlmargin; cntrlength += cntrls[i] + menu_b.s.marginleft + menu_b.s.marginright; cntrli[i] = menu_b; if (vars.tip == 1 && menu_b.s.notip == 0) { menu_b.c.onmouseover = function() { ToolTip(menu_b.c, menu_b.s.tip ? menu_b.s.tip : vars.lang2['menu']) }; menu_b.c.onmouseout = function() { ToolTipHide(menu_b.c) } } } if (cntrl[i] == 'buffer') { if (line_b) { buffer_b = new Element('buffer', 30, 14); controlsObj.addElement('Buffer', buffer_b); controls.appendChild(buffer_b.c); CSS(buffer_b.c, { 'cursor': 'default', 'position': 'absolute', 'white-space': 'nowrap' }); cntrli[i] = buffer_b; cntrls[i] = 0; buffer_b.c.innerHTML = vars.lang2['loading'] } } if (cntrl[i] == 'start') { start_b = new Element('start', 20, 20); controlsObj.addElement('Start', start_b); body.c.appendChild(start_b.c); CSS(start_b.c, { 'cursor': 'pointer', 'position': 'absolute', 'top': ((vars.ph) / 2 - start_b.h / 2), 'left': ((vars.sw) / 2 - start_b.w / 2), 'zIndex': 7 }); start_b.c.onclick = Toggle; start_b.c.style.zIndex = 7 } if (cntrl[i] == 'space') { space_b = createElement('div'); controlsObj.addDom('Space', space_b); controls.appendChild(space_b); CSS(space_b, { 'position': 'absolute', 'top': (vars.cntrloutheight - 20) / 2 }); cntrli[i] = space_b } if (cntrl[i] == 'line') { iline = true; line_b = createElement('div'); controlsObj.addDom('Line', line_b); controls.appendChild(line_b); line_s = Cntrl_Style('line'); line_all_b = createElement('div'); line_b.appendChild(line_all_b); CSS(line_all_b, { 'position': 'absolute', 'left': 0, 'top': 0, 'width': '100%', 'height': line_s['h'], 'borderRadius': ((line_s['h'] / 2) * line_s['o']) + 'px', 'opacity': line_s['all_a'], 'filter': 'alpha(opacity=' + (line_s['all_a'] * 100) + ')' }); CheckGradiendDiv(line_all_b, line_s['color_all']); line_load_b = createElement('div'); line_b.appendChild(line_load_b); CSS(line_load_b, { 'position': 'absolute', 'left': 0, 'top': 0, 'width': '100%', 'height': line_s['h'], 'backgroundColor': '#' + ReColor(line_s['color_load']), 'borderRadius': ((line_s['h'] / 2) * line_s['o']) + 'px', 'opacity': line_s['load_a'], 'filter': 'alpha(opacity=' + (line_s['load_a'] * 100) + ')' }); CheckGradiendDiv(line_load_b, line_s['color_load']); line_play_b = createElement('div'); line_b.appendChild(line_play_b); CSS(line_play_b, { 'position': 'absolute', 'left': 0, 'top': 0, 'width': '100%', 'height': line_s['h'], 'backgroundColor': '#' + ReColor(line_s['color_play']), 'borderRadius': ((line_s['h'] / 2) * line_s['o']) + 'px', 'opacity': line_s['play_a'], 'filter': 'alpha(opacity=' + (line_s['play_a'] * 100) + ')' }); CheckGradiendDiv(line_play_b, line_s['color_play']); CSS(line_b, { 'position': 'absolute', 'top': (vars.cntrloutheight - line_s['h']) / 2 + line_s['margintop'] * 1 - line_s['marginbottom'] * 1, 'cursor': 'pointer' }); CSS(line_play_b, { 'width': '0' }); CSS(line_load_b, { 'width': '0' }); line_s['active'] = false; line_but_b = createElement('div'); controlsObj.addDom('LineBtn', line_but_b); controls.appendChild(line_but_b); CSS(line_but_b, { 'position': 'absolute', 'height': (line_s['h'] < 10 ? 20 : line_s['h'] * 2), 'cursor': 'pointer' }); line_but_b.onmousedown = function(e) { Uppod.trace('line_but_b.onmousedown'); if (!istart) { Toggle() } line_s['active'] = true; if (!e) var e = window.event }; line_but_b.onmouseup = function(e) { Uppod.trace('line_but_b.onmouseup'); if (istart) { SeekMove(e); line_s['active'] = false } }; if (vars.tip == 1 && line_s['notip'] == 0) { line_but_b.onmouseover = function() { ToolTip(line_but_b, 'line') }; line_but_b.onmouseout = function() { ToolTipHide(line_but_b) } } cntrli[i] = line_b } } time_all_b && vars.time > 0 ? time_all_b.c.innerHTML = formatTime(vars.time) : ''; PlaceControls() } function CntrlBg() { if (uibg) { Remove('uibg') } if (vars.cntrlout != 1 && vars.cntrlbg == 1) { vars.cntrlbgcolor.indexOf('|') == -1 ? vars.cntrlbgcolor = vars.cntrlbgcolor + '|' + vars.cntrlbgcolor : ''; uibg = new Shaper2({ w: (vars.scrn_w - vars.cntrlbgmargin * 2 - vars.cntrlbgmarginleft - vars.cntrlbgmarginright), h: vars.cntrloutheight, onotop: (vars.cntrloutheight == vars.h ? 0 : 1), bgc: vars.cntrlbgcolor, bga1: vars.cntrlbgalpha1, bga2: vars.cntrlbgalpha2, o: (vars.padding > 0 ? vars.o / 2 : vars.cntrlbgo) }) } if (vars.cntrlout == 1 && vars.padding == 0) { vars.cntrlbgcolor.indexOf('|') == -1 ? vars.cntrlbgcolor = vars.cntrlbgcolor + '|' + vars.cntrlbgcolor : ''; uibg = new Shaper2({ w: vars.scrn_w, h: vars.cntrloutheight, o: vars.o / 2 - vars.padding, onotop: (vars.cntrloutheight == vars.h ? 0 : 1), bgc: vars.bodycolor, bga1: 1, bga2: 1, o: (vars.padding > 0 ? vars.o / 2 : vars.cntrlbgo) }) } if (uibg) { uibg.c.setAttribute('id', 'uibg'); controls.appendChild(uibg.c); CSS(uibg.canvas, { "position": "absolute", "top": 0, "left": vars.cntrlbgmarginleft + 'px' }); if (vars.glass == 1) { uibg_gl = new Shaper2({ w: vars.scrn_w, h: vars.cntrloutheight / 2, o: vars.o / 2 - vars.padding, bgc: (vars.glasscolor.indexOf('|') == -1 ? vars.glasscolor + '|' + vars.glasscolor : vars.glasscolor), bga1: vars.glassalpha1, bga2: vars.glassalpha2 }); uibg.c.appendChild(uibg_gl.c); CSS(uibg_gl.canvas, { "position": "absolute", "top": 0, "left": 0, "height": vars.cntrloutheight / 2, "width": vars.scrn_w }) } } } function PlaceControls() { var line_w = vars.sw - cntrlength - vars.cntrlendmargin * 2 - vars.cntrlmargin * 2 - (!ifull ? vars.padding * 2 : 0) - vars.cntrlmarginleft - vars.cntrlmarginright - (timelength - 4) * 4 * timeitems; var cntrl_x = vars.cntrlendmargin + vars.cntrlmarginleft; var marginleft; var marginright; for (i = 0; i < cntrl.length; i++) { if (cntrli[i]) { marginleft = 0; marginright = 0; if (cntrli[i].s) { marginleft = parseInt(cntrli[i].s.marginleft); marginright = parseInt(cntrli[i].s.marginright) } if (cntrl[i] == 'volbarline') { marginleft = (vars.cntrl_volbarline.marginleft ? vars.cntrl_volbarline.marginleft : 0); marginright = (vars.cntrl_volbarline.marginright ? vars.cntrl_volbarline.marginright : 0) } cntrl_x += marginleft; if (cntrli[i] != line_b && cntrli[i] != space_b) { CSS((cntrli[i].c != undefined ? cntrli[i].c : cntrli[i]), { 'left': cntrl_x }); if (cntrl[i] == 'play' || cntrl[i] == 'playstop') { CSS(pause_b.c, { 'left': cntrl_x }) } if (cntrl[i] == 'full') { CSS(full_back_b.c, { 'left': cntrl_x }) } if (cntrl[i] == 'hd') { hd1_b ? CSS(hd1_b.c, { 'left': cntrl_x }) : '' } if (cntrl[i] == 'volume' || cntrl[i] == 'volbarline_v') { CSS(volume_mute_b.c, { 'left': cntrl_x, 'opacity': (volume_mute_b.s.icon == 2 ? 0.5 : 1) }) } if (cntrl[i] == 'volbarline_v') { CSS(volbarline_b, { 'left': cntrl_x + volume_b.w / 2 - volbarline_s['w'] / 2 }) } if (cntrl[i].indexOf('time') > -1) { cntrl_x += (timelength - 4) * 4 + (vars.cntrlmargin - 5) } cntrl_x += Math.floor(cntrls[i] + marginright) } else { if (cntrli[i] == line_b) { if (vars.cntrl_line.full == 1) { CSS(line_b, { 'left': (vars.cntrl_line.marginleft ? vars.cntrl_line.marginleft : 0), 'top': (vars.cntrloutheight) / 2 + line_all_b.h - (vars.cntrl_line.marginbottom ? vars.cntrl_line.marginbottom : 0) + (vars.cntrl_line.margintop ? vars.cntrl_line.margintop : 0) }); line_all_b.w = vars.sw - (vars.cntrl_line.marginleft ? vars.cntrl_line.marginleft : 0) - (vars.cntrl_line.marginright ? vars.cntrl_line.marginright : 0); line_play_b.w = line_all_b.w; line_load_b.w = line_all_b.w; CSS(line_all_b, { 'width': '' + line_all_b.w + 'px' }) } else { CSS(line_b, { 'left': cntrl_x + 3 + (vars.cntrl_line.marginleft ? vars.cntrl_line.marginleft : 0) }); line_all_b.w = line_w; line_play_b.w = line_w; line_load_b.w = line_w; CSS(line_all_b, { 'width': '' + line_w + 'px' }); cntrls[i] = line_w; cntrl_x += Math.floor(cntrls[i] + vars.cntrlmargin + 6 + (vars.cntrl_line.marginright ? vars.cntrl_line.marginright : 0) + (vars.cntrl_line.marginleft ? vars.cntrl_line.marginleft : 0)) } CSS(line_but_b, { 'width': line_all_b.w + 'px', 'position': 'absolute', 'top': (parseInt(line_b.style.top) + line_s.h / 2 - parseInt(line_but_b.style.height) / 2), 'left': line_b.style.left, 'cursor': 'pointer' }) } if (cntrli[i] == space_b) { CSS(space_b, { 'left': cntrl_x + 3, 'width': '' + line_w + 'px' }); cntrls[i] = line_w; cntrl_x += Math.floor(cntrls[i] + vars.cntrlmargin + 6) } } if (buffer_b) { CSS(buffer_b.c, { 'left': line_b.offsetLeft }); CSS(buffer_b.c, { 'top': line_b.offsetTop - 10 }) } } } line_b && run_b ? RunPos(run_b, line_b, line_play_b, line_all_b, run_pos) : ''; if (volbarline_b && runvolume_b) { RunPos(runvolume_b, volbarline_b, volbarline_play_b, volbarline_all_b, runvolume_pos) } } function RunPos(run, line, line_play, line_all, pos) { if (run == runvolume_b && vars.ivolbar_v) { var rl = (-line_play.offsetHeight) - (pos > 0 ? run.offsetHeight : run.offsetHeight / 2); rl < line.offsetTop ? rl = line.offsetTop : ''; rl > 0 + run.offsetHeight ? rl = run.offsetHeight : ''; CSS(run, { 'top': rl + 'px', 'left': '' + (line.offsetLeft + line_all.offsetWidth / 2 - run.offsetWidth / 2 - (pos == '1' ? run.offsetWidth / 2 + line_all.offsetWidth / 2 : 0) + (pos == '2' ? run.offsetWidth / 2 + line_all.offsetWidth / 2 : 0)) + 'px' }) } else { var rl = (line_play.offsetWidth + line.offsetLeft) - (pos > 0 ? run.offsetWidth : run.offsetWidth / 2); rl < line.offsetLeft ? rl = line.offsetLeft : ''; rl > line.offsetLeft + line_all.offsetWidth - run.offsetWidth ? rl = line.offsetLeft + line_all.offsetWidth - run.offsetWidth : ''; CSS(run, { 'left': rl + 'px', 'top': '' + Math.floor(line_all.offsetTop + line.offsetTop + line_all.offsetHeight / 2 - run.offsetHeight / 2 - (pos == '1' ? run.offsetHeight / 2 + line_all.offsetHeight / 2 : 0) + (pos == '2' ? run.offsetHeight / 2 + line_all.offsetHeight / 2 : 0) + (vars.cntrl_run['margintop'] ? vars.cntrl_run['margintop'] * 1 : "") - (vars.cntrl_run['marginbottom'] ? vars.cntrl_run['marginbottom'] * 1 : "")) + 'px' }) } } function Cntrl_Style(st) { var s = []; for (var key in vars.cntrlstyle) { s[key] = vars.cntrlstyle[key] } for (var key in vars['cntrl' + st]) { s[key] = vars['cntrl' + st][key] } for (var key in vars['cntrl_' + st]) { s[key] = vars['cntrl_' + st][key] } return s } function findLeft(obj) { var curleft = 0; if (obj.offsetParent) { curleft = obj.offsetLeft; while (obj = obj.offsetParent) { curleft += obj.offsetLeft } } var body_style = window.getComputedStyle(document.body, null); var bodyleft = 0; if (body_style.position == "relative") { bodyleft = document.body.getBoundingClientRect().left } return curleft + bodyleft } function findTop(obj) { var curtop = 0; if (obj.offsetParent) { curtop = obj.offsetTop; while (obj = obj.offsetParent) { curtop += obj.offsetTop } } return curtop } function VolumeButOver() { CSS(volbarline_b, { "display": "block" }); if (runvolume_b) { CSS(runvolume_b, { "display": "block" }); runvolume_b.style.zIndex = 8; RunPos(runvolume_b, volbarline_b, volbarline_play_b, volbarline_all_b, runvolume_pos) } volbarline_s['over'] = true } function VolbarHide() { volbarline_s['over'] = false; setTimeout(VolbarHideProcess, 1000) } function VolbarHideProcess() { if (!volbarline_s['over']) { CSS(volbarline_b, { "display": "none" }); if (runvolume_b) { CSS(runvolume_b, { "display": "none" }) } } else { setTimeout(VolbarHideProcess, 1000) } } function VolumeMove(e) { if (volbarline_s['active']) { if (!e) e = window.event; var clickX = e.offsetX; Volume(clickX) } } function VolumeOut(e) { if (volbarline_s['active']) { if (!e) var e = window.event; var clickX = e.offsetX; if (clickX >= volbarline_s['w']) { volbarline_s['active'] = false } } } function VolumeMove_v(e) { if (volbarline_s['active'] && vars.ivolbar_v) { if (!e) var e = window.event; var clickY = e.offsetY; Volume(volbarline_s['h'] - clickY) } } function VolbarMove(e) { if (volbar_b.active) { if (!e) var e = window.event; var clickX = e.pageX - findLeft(volbar_b); Volume(clickX) } } function Volume(n) { var v = VolumeDraw(n); VolumeN(v); if (vars.remvolume == 1) { document.cookie = "uppodhtml5_volume=" + v + "; path=/; expires=Mon, 01-Jan-2099 00:00:00 GMT" } } function VolumeDraw(n) { if (volbarline_play_b) { if (vars.ivolbar_v) { n > 0 ? v = Math.max(0, Math.min(1, (n) / volbarline_s['h'])) : v = -n; CSS(volbarline_play_b, { 'height': '' + volbarline_s['h'] * v + 'px', 'top': volbarline_s['h'] - volbarline_s['h'] * v }) } else { n > 0 ? v = Math.max(0, Math.min(1, (n) / volbarline_s['w'])) : v = -n; CSS(volbarline_play_b, { 'width': '' + (volbarline_s['w'] * v) + 'px' }) } } if (volbar_b) { for (vb = 0; vb < volbars.length; vb++) { n > 0 ? v = Math.max(0, Math.min(1, (n) / vars.cntrlvolbar.w)) : v = -n; if (vb < Math.ceil(volbars.length * v)) { CSS(volbars[vb].c, { "opacity": vars.cntrlvolbar.play_a }) } else { CSS(volbars[vb].c, { "opacity": vars.cntrlvolbar.all_a }) } } } volbarline_b && runvolume_b ? RunPos(runvolume_b, volbarline_b, volbarline_play_b, volbarline_all_b, runvolume_pos) : ''; return v } function VolumeN(v) { if (muted && v > 0) { Mute(); if (isYoutube()) { media_yt.unMute() } } v > 0 ? muted = false : muted = true; if (isYoutube()) { media_yt.setVolume(v * 100) } else { media.volume = v; media ? media.muted = false : '' } MuteControl() } function SeekMove(e) { var clickX = e.offsetX; var obj = line_b; Uppod.trace('SeekMove clickX = ' + clickX); if (line_s['active']) { if (!e) var e = window.event; Seek(clickX) } } function Seek(cursorX) { Uppod.trace('Seek cursorX = ' + cursorX); if (iline) { var percent = Math.max(0, Math.min(1, (cursorX) / line_all_b.w)) } else { var percent = 0 } if (isYoutube()) { media_yt.seekTo(percent * media_yt.getDuration()) } else { if (media && media.duration) { SeekTime(percent * media.duration) } } StopSub() } function SeekTime(t) { Uppod.trace('SeekTime to ' + t); if (media) { if (media.duration && t) { media.currentTime = t } } if (isYoutube()) { media_yt.seekTo(t) } } function IconImg() { return Uppod.IconImg.apply(this, arguments) } function CheckBase64() { return Uppod.CheckBase64.apply(this, arguments) } function CSS() { return Uppod.setStyle.apply(this, arguments) } function destroyCanvases() { for (var i = 0; i < canvasObjs.length; i++) { var canvasObj = canvasObjs[i]; if (canvasObj) { canvasObj.canvas = null } } } this.destroy = function() { if (uppod.ads()) { uppod.ads().destroy() } if (isYoutube()) { media_yt.destroy() } else { DestroyMedia() } elems = uppod.document.querySelectorAll('*'); for (var i = 0; i < elems.length; i++) { var elem = elems[i]; if (elem.parentNode) { elem.parentNode.removeChild(elem) } } document.removeEventListener("keydown", KeyHandler); destroyCanvases(); if (uppod.iframe.parentNode) { uppod.iframe.parentNode.removeChild(uppod.iframe) } }; this.getStatus = function() { return !istart ? 0 : (ibuff ? 3 : (iplay ? 1 : 2)) }; this.Play = function(s) { if (s) { ClearOldVars(); if (s.indexOf('#') == 0) { s = un(s) } NewFile(s, true) } else { !iplay ? Toggle() : '' } }; this.Init = function(s) { Init() }; this.Pause = function() { iplay ? Toggle() : '' }; this.Toggle = function() { Toggle() }; this.Stop = function() { init ? Stop() : '' }; this.Seek = function(s) { init ? SeekTime(s) : '' }; this.Download = function() { init ? Download() : '' }; this.Resize = function() { Resize() }; this.Alert = function(s) { Alert(s, true) }; this.CloseAlert = function(s) { CloseAlrt() }; this.Full = function(s) { Full() }; this.Next = function(s) { Next() }; this.Prev = function(s) { Prev() }; this.Fullscreen = function(s) { Full() }; this.Normalscreen = function(s) { FullOff() }; this.Comment = function(s) { Alert(s, false) }; this.CurrentTime = function() { if (init && media) { return CurrentTime() } else { return -1 } }; this.PlNumber = function() { if (pl) { return parseInt(ipl) + 1 } else { return -1 } }; this.PlayPlNumber = function(s) { if (pl) { PlClick0(); ipl = parseInt(s) - (vars.pl[0].playlist == "back" ? 0 : 1); PlClickCont() } }; this.ShowPl = function(s) { if (pl) { if (vars.plplace == "inside") { if (playlist.style.display == "none") { Pl() } } } }; this.HidePl = function(s) { if (pl) { if (vars.plplace == "inside") { if (playlist.style.display != "none") { Pl() } } } }; this.PlUp = function(s) { if (pl) { vars.pl = vars.pl_history[s == 0 ? 0 : vars.pl_history.length - 1]; if (s == 0) { vars.pl_history.splice(1) } else { vars.pl_history.splice(vars.pl_history.length - 1, 1) } RemovePl(); CreatePl(); if (vars.plplace == "inside") { Show(playlist); plnext_b ? Show(plnext_b.c) : ''; plprev_b ? Show(plprev_b.c) : '' } if (plnext_b) { PlArrows() } } }; this.Duration = function() { if (init && media) { return Duration() } else { return -1 } }; this.Volume = function(s) { VolumeN(s) }; this.Volumed = function() { if (muted) { return 0 } else { if (isYoutube()) { return media_yt.getVolume() / 100 } else { if (media) { return media.volume } else { return -1 } } } }; this.Played = function() { if (init && media) { return Math.round((CurrentTime() / media.duration) * 100) } else { return -1 } }; this.Loaded = function() { if (init && media) { var loaded = 0; if (isYoutube()) { loaded = media_yt.getVideoLoadedFraction() } else { if (media.buffered) { if (media.buffered.length > 0) { loaded = (media.buffered.end(media.buffered.length - 1) / media.duration) } } } return Math.round(loaded * 100) } else { return -1 } }; this.Get = function(k) { return vars[k] }; this.Set = function(k, v) { vars[k] = v }; this.ChangeColor = function(k, v) { vars[k] = v; if (k == 'screencolor') { var ctx = scrn.getContext("2d"); ctx.fillStyle = v; ctx.fillRect(0, 0, ctx.canvas.width, ctx.canvas.height) } }; this.isYoutube = function() { return vars.youtube && vars.youtube_id ? true : false }; this.YoutubeInit = function() { YoutubeInit() }; this.Change = function(k, v) { vars[k] = v; if (k != 'repeat' && k != 'random' && k != 'plplay' && k != 'plplay1' && k != 'pl') { Layer(); CntrlBg() } if (k == 'pl') { if (typeof(v) === 'object') { vars.pl = v.playlist; RemovePl(); CreatePl() } } }; this.EventDetail = function(s) { return vars.events[s] }; this.currentTime = this.CurrentTime; this.seek = this.Seek; this.play = this.Play; this.toogleFullscreen = this.Full; function YoutubeInit() { if (vars.youtube && vars.youtube_id) { youtubeElemId = 'yt_media_' + vars.uid; media = createElement('div'); media.setAttribute('id', youtubeElemId); media_mc.appendChild(media); media_yt = new uppod.window.YT.Player(youtubeElemId, { height: vars.scrn_h, width: vars.scrn_w, videoId: vars.youtube_id, playerVars: { enablejsapi: 1, html5: 1, iv_load_policy: 3, playerapiid: youtubeElemId, disablekb: 1, controls: browser.restrictMediaPlay ? 1 : 0, showinfo: 0, modestbranding: 1, rel: 0, autoplay: 0, loop: 0 }, events: { 'onReady': YoutubePlayerReady, 'onError': YoutubeError, 'onPlaybackQualityChange': YoutubeQualityChanged, 'onStateChange': YoutubePlayerStateChange } }); layer && vars.poster == '' ? Hide(layer) : '' } } function isYoutubeApiLoaded() { if (uppod.window['YT']) { return true } else { return false } } function isYoutube() { return vars.youtube && media_yt ? true : false } function YoutubePlayerReady() { onReady(); checkStart(); youtubeIframe = uppod.document.querySelector('#' + youtubeElemId); if (vars.auto == 'play' && (!mobile || vars.volume == 0)) { Play(); media_yt.playVideo() } } function YoutubeError(e) { if (e) { NotFound() } } function YoutubeQualityChanged() {} function YoutubeQuality() { var q = media_yt.getAvailableQualityLevels(); vars.hdlinks = q; var q2 = []; for (var i = 0; i < q.length; i++) { switch (q[i]) { case 'tiny': q2[i] = '144p'; break; case 'small': q2[i] = '240p'; break; case 'medium': q2[i] = '320p'; break; case 'large': q2[i] = '480p'; break; case 'hd720': q2[i] = '720p'; break; case 'hd1080': q2[i] = '1080p'; break; case 'highres': q2[i] = 'High'; break; default: q2[i] = q[i] } } vars.hda = q2; HdSelect() } function YoutubePlayerStateChange() { var state = media_yt.getPlayerState(); if (state == 1 && !vars.youtube_quality_received && hd_b) { YoutubeQuality(); vars.youtube_quality_received = true }; if (state == uppod.window.YT.PlayerState.PLAYING) { OnPlay() }; if (state == uppod.window.YT.PlayerState.PAUSED) { OnPause() } if (state == uppod.window.YT.PlayerState.ENDED) { OnEnded() } } function disableSelection(target) { if (typeof target.onselectstart != "undefined") { target.onselectstart = function() { return false } } else if (typeof target.style.MozUserSelect != "undefined") { target.style.MozUserSelect = "none" } else { target.onmousedown = function() { return false }; target.style.cursor = "default" } } function SelectRework(v, b) { b.ctx.clearRect(0, 0, 200, 200); b.ctx.fillText(v, 5 * b.s.scale, 15 * b.s.scale); tmp = ''; for (var i = 0; i < vars.hdlinks.length; i++) { tmp += vars.hdlinks[i] } if (b.s.marker == 1 && tmp != ',' && tmp != '') { b.ctx.beginPath(); b.ctx.moveTo((b.canvas.offsetWidth - 10 * b.s.scale), 9 * b.s.scale); b.ctx.lineTo((b.canvas.offsetWidth - 6 * b.s.scale), 9 * b.s.scale); b.ctx.lineTo((b.canvas.offsetWidth - 8 * b.s.scale), 14 * b.s.scale); b.ctx.lineTo((b.canvas.offsetWidth - 10 * b.s.scale), 9 * b.s.scale); b.ctx.closePath(); b.ctx.lineWidth = 0.1; b.ctx.stroke(); b.ctx.fill() } } function Element(nm, bw, bh, nm2, st) { var args = [vars].concat(Array.prototype.slice.call(arguments, 0)); Uppod.Element.apply(this, args); canvasObjs.push(this) }; function Shaper2(v) { Uppod.Shaper2.call(this, v); canvasObjs.push(this) }; function setVarsDefaults() { this.uid; this.sid; this.auto = 'firstframe'; this.autofull = 0; this.alerts = 1; this.addcontrols = ''; this.airplay = 1; this.bgcolor = 'ffffff'; this.bodycolor = '000000'; this.brd = 0; this.brdcolor = 'cccccc'; this.buffersec = 5; this.cntrlbg = 1; this.cntrlbgcolor = '000000|000000'; this.cntrlbgalpha1 = .15; this.cntrlbgalpha2 = .7; this.cntrlbgo = 0; this.cntrlendmargin = 7; this.cntrlhide = 0; this.fullcntrlhide = 1; this.cntrlmargin = 3; this.cntrlmarginright = 0; this.cntrlmarginleft = 0; this.cntrlout = 0; this.cntrloutheight = 35; this.cntrlsize = 1; this.bigbutsonmobile = 0; this.cntrlcolor = 'ffffff'; this.cntrlbuffer = { "center": 0 }; this.cntrl_buffer = {}; this.cntrlfull = { "out": 0 }; this.cntrl_full = {}; this.cntrlstyle = { "icon": 0, "color": "ffffff", "bg": 0, "bg_o": 1, "bg_smallicon": 1, "bgcolor": "000000", "bg_sh": "0", "bg_in": "0", "bg_gl": "0", "gl_a1": .9, "gl_a2": .1, "gl_color": "FFFFFF", "sh_blur": 6, "sh_dist": 0, "bg_a": 1, "bg_w": 20, "bg_h": 20, "scale": 1, "eff": 0, "effE": "Cubic", "sh": 0, "sh_c": "000000", "sh_a": 0.5, "sh_under": 1, "notip": 0, "text": 0, "center": 0, "marginleft": 0, "marginright": 0, "margintop": 0, "marginbottom": 0, "alpha": 1 }; this.cntrlplay = {}; this.cntrl_play = {}; this.cntrlpause = {}; this.cntrl_pause = {}; this.cntrlstop = {}; this.cntrl_stop = {}; this.cntrldownload = {}; this.cntrl_download = {}; this.cntrlnext = {}; this.cntrl_next = {}; this.cntrlprev = {}; this.cntrl_prev = {}; this.cntrlline = { "h": 4, "all_a": 0.3, "load_a": 0.4, "play_a": 1, "click": 1, "color_play": "ffffff", "color_all": "ffffff", "color_load": "ffffff", "o": 0, "full": 0 }; this.cntrl_line = {}; this.cntrl_volbarline = {}; this.cntrlvolbarline = { "h": 4, "w": 40, "all_a": 0.4, "play_a": 1, "color_play": "ffffff", "color_all": "ffffff", "o": 0 }; this.cntrl_volbarline_v = {}; this.cntrlvolbarline_v = { "h": 50, "w": 4, "bg": 0, "bgcolor": "000000", "bg_o": 0, "bg_a": .15, "all_a": 0.4, "play_a": 1, "effdir": 0, "color_play": "ffffff", "color_all": "ffffff", "o": 0 }; this.ivolbar_v = false; this.cntrlvolbar = { "bar": 1, "n": 5, "all_a": 0.4, "play_a": 1, "scale": 1 }; this.cntrl_volbar = {}; this.cntrl_tune = {}; this.cntrl_volume = {}; this.cntrlvolume = {}; this.cntrl_sound = {}; this.cntrlmenu = {}; this.cntrl_menu = {}; this.cntrlplaylist = {}; this.cntrl_playlist = {}; this.cntrl_hd = {}; this.cntrlhd = { "icon": "HQ", "text": 1, "alpha0": 0.5, "w": 60 }; this.cntrlhdselect = { "bg": 1, "bg_o": 10, "bg_a": 0.7, "bgcolor": "666666|000000", "bg_smallicon": 0, "marker": 1 }; this.cntrl_sub = {}; this.cntrlsub = { "icon": "A", "alpha0": 0.5, "text": 1 }; this.cntrlstart = { "bg": 1, "bg_sh": 1, "bgcolor": "ffffff", "bg_a": .1, "bg_w": 75, "bg_h": 75, "gl_a1": .8, "gl_a2": 0, "eff": 1, "scale2": 2, "curtain": "0", "curtainColor": "000000", "curtainAlpha": 0.5, "notip": 1, "bg_smallicon": 0 }; this.cntrl_start = {}; this.cntrlseparator = { "alpha": 0.5 }; this.cntrl_separator = {}; this.cntrlrun = { "w": 7, "h": 7, "o": 1, "position": 0, "hide": 0 }; this.cntrl_run = {}; this.cntrlrun_volume = { "w": 7, "h": 7, "o": 1, "position": 0, "hide": 0 }; this.cntrl_run_volume = {}; this.glass = 0; this.glasscolor = 'ffffff'; this.glassalpha1 = 0.9; this.glassalpha2 = 0.2; this.hd; this.hdsw = 60; this.hda; this.hdlinks; this.hdseparator = ','; this.quality = ''; this.hd1 = 0; this.selectbgcolor = "ffffff"; this.selectcolor = "000000"; this.hlsautoquality = 0; this.comment = ""; this.commentplus = ''; this.title; this.showname = 0; this.showtitle; this.shownameliketip = 0; this.shownameonover = 0; this.shownameonstop = 0; this.stageposition = ''; this.stageleft = 0; this.stagetop = 0; this.commentcolor = "ffffff"; this.commentbgcolor = "000000"; this.commentbgcolor_k = false; this.commentbgalpha1 = 0.5; this.commentbgalpha2 = 0.1; this.commentalign = "left"; this.commenttopmargin = 0; this.commentmargin = 10; this.tipfontcolor = "ffffff"; this.tipfont = 'Verdana'; this.tipfontsize = 10; this.tipbgcolor = "000000"; this.tipalpha = 0.7; this.tipbgo = 8; this.tipbgshadow = 0; this.tiptags1 = ''; this.tiptags2 = ''; this.tipcenter = 1; this.marquee = 0; this.controls = ''; this.videocontrols = "play,back,time_play,line,time_all,volume,volbarline,full,buffer"; this.audiocontrols = "play,back,time_play,line,time_all,volume,volbarline,buffer"; this.streamcontrols = "play,time_play,volume,volbarline"; this.controls_active = false; this.download = ''; this.embedcode = ''; this.events = new Array(); this.eventtime = 0; this.eventplayed = 0; this.iosplayer = 1; this.androidplayer = 1; this.html5_referer = ''; this.file = ''; this.filehd = ''; this.or = []; this.ori = 0; this.ors = 0; this.or_limit = 5; this.hotkey = 1; this.youtube = false; this.youtube_created = false; this.youtube_quality_received = false; this.htmlsize = 0; this.id = ''; this.iframe = ''; this.iframeurl = ''; this.plr = ''; this.pl_history = []; this.bottomrowheight = 200; this.pl_rows = 0; this.plarrows = 0; this.plonend = 0; this.link = ''; this.m = 'video'; this.menu_nocode = 0; this.menu_h = 0; this.menu_w = 0; this.menuauto = 0; this.namefont = 'Verdana'; this.namefontsize = 11; this.namefontstyle = 'normal'; this.namebgalpha = 0; this.namebgcolor = '000000'; this.namebgo = 8; this.namebgshadow = 0; this.namecolor = 'ffffff'; this.namemargin_h = 0; this.namemargin_v = 0; this.namepadding = 6; this.nameleading = 0; this.nametopanel = 0; this.nametags1 = ''; this.nametags2 = ''; this.logo = ''; this.logoplace = 2; this.logoalpha = 0.5; this.logomargin = 15; this.logomargin_h = 15; this.logomargin_v = 15; this.logolink = ''; this.logotarget = '_self'; this.logoplay = 1; this.logopause = 1; this.referer = location.href; this.https = this.referer.indexOf("https://") > -1 ? 1 : 0; this.redirect = ''; this.redirect_click = 0; this.redirect_clickpl = 0; this.redirect_play = 0; this.redirect_end = 0; this.urlprotect = ''; this.urlredirect = 'play'; this.urlredirect_target = "_self"; this.urlprotect_link = ''; this.urlprotect_stop = 0; this.urlprotect_warning = 1; this.urlprotect_msg = ''; this.urlprotect_ref = 1; this.banned = ''; this.redirecttarget = '_self'; this.nohtml5 = 'uppod.swf'; this.o = 0; this.padding = 0; this.poster = ''; this.pl = ''; this.plplace = "inside"; this.pltw = 100; this.plth = 70; this.plcolor = 'ffffff'; this.plcolor2 = 'ffffff'; this.plbgcolor = '000000'; this.plalpha = 0.3; this.plalpha2 = 0.1; this.plalpha_play = 0.8; this.plmargin = 0; this.plmargin_h = 10; this.plmargin_v = 0; this.pltags1 = ''; this.pltags2 = ''; this.plfont = 'Arial'; this.plfontsize = 11; this.plplay = 0; this.plplay1 = 1; this.pliview = 0; this.plrows = 0; this.plcenter = 0; this.plbgcolor_play; this.plcolor_play; this.pltumbs = 0; this.pllimit = 10; this.nocache = 0; this.fillposter = 1; this.random = 0; this.time = 0; this.download; this.radio = 0; this.radiodropcache = 0; this.reloader = 0; this.reloadercounter = 0; this.reloadertime = 0; this.id3 = 0; this.screencolor = '000000'; this.screenposter = ''; this.scrn_w = 0; this.scrn_h = 0; this.start = 0; this.autoheight = 1; this.cntrlbgmargin = 0; this.cntrlbgmarginleft = 0; this.cntrlbgmarginright = 0; this.sub; this.sub_tmp; this.subcolor = 'FAED54'; this.subbgcolor = '000000'; this.subfont = 'sans-serif'; this.subbgalpha = 1; this.subbgo = 8; this.subbgshadow = 0; this.subsize = 100; this.substart = 1; this.subtop = 0; this.submenu = 1; this.sub_shift = 0; this.submargin = 0; this.sublangs; this.sublangsall = 0; this.sublang; this.remsublang = 1; this.transparent = 0; this.repeat = 0; this.keyseek = 10; this.volume = 0.8; this.remvolume = 1; this.remquality = 1; this.w = 500; this.webkitFullscreen = 0; this.realfullscreen = 1; this.ytpllimit = 50; this.ytposter = 1; this.ytapi; this.ytplorder = 'relevance'; this.h = 375; this.st = ''; this.hls_plugin = 1; this.hls_debug = false; this.hls_autoStartLoad = true; this.hls_defaultAudioCodec = undefined; this.hls_maxBufferLength = 30; this.hls_maxMaxBufferLength = 600; this.hls_maxBufferSize = 60 * 1000 * 1000; this.hls_maxBufferHole = 0.5; this.hls_maxSeekHole = 2; this.hls_liveSyncDurationCount = 3; this.hls_liveMaxLatencyDurationCount = 10; this.hls_enableWorker = true; this.hls_enableSoftwareAES = true; this.hls_manifestLoadingTimeOut = 10000; this.hls_manifestLoadingMaxRetry = 1; this.hls_manifestLoadingRetryDelay = 500; this.hls_levelLoadingTimeOut = 10000; this.hls_levelLoadingMaxRetry = 4; this.hls_levelLoadingRetryDelay = 500; this.hls_fragLoadingTimeOut = 20000; this.hls_fragLoadingMaxRetry = 6; this.hls_fragLoadingRetryDelay = 500; this.hls_appendErrorMaxRetry = 3; this.hls_enableCEA708Captions = true; this.infoloader = 1; this.infoloaderurl; this.infoloaderinterval = 10; this.infoloadermask = '{1}<br><b>{2}</b>'; this.infoloaderaddurl = 0; this.ga; this.gadb; this.gaplay = 0; this.gastop = 0; this.gaend = 0; this.gadownload = 0; this.gatype = 0; this.galabel; this.gatracked = [] } function setVarsLang() { this.lang = 'ru'; this.lang_ru = { "lang": "ru", "localization": { "back": "В начало", "play": "Пуск", "pause": "Пауза", "stop": "Стоп", "full": "Развернуть", "full_back": "Свернуть", "list": "Плейлист", "next": "Следующий", "download": "Скачать", "prev": "Предыдущий", "sound_off": "Вкл. звук", "sound": "Выкл. звук", "volume": "Громкость", "menu": "Поделиться", "menu_code": "Код", "menu_link": "Ссылка", "menu_download": "Файл", "menu_copy": "Скопировать", "menu_mail": "Ссылку на e-mail", "sent": "Отправлено", "menu_message": "Текст", "menu_send": "Отправить", "fontsize": "Размер", "bgalpha": "Фон", "fontcolor": "Цвет текста", "off": "Выключить", "on": "Включить", "hq": "Лучшее качество", "hd": "Качество", "hq_off": "Обычное качество", "sub": "Субтитры", "traffic": "Трафик (МБ)", "smoothing": "Включить сглаживание", "smoothing_off": "Выключить сглаживание", "smoothing_ok": "Сглаживание включено", "smoothing_off_ok": "Сглаживание выключено", "password": "Пароль", "startlive": "Начать трансляцию", "live": "Трансляция", "rec": "Запись", "rerec": "Заново", "playrec": "Играть", "contrec": "Продолжить запись", "settings": "Настройки", "done": "Готово", "shownotes": "Шоуноты", "loading": "Загрузка", "startplay": "Включите плеер", "notype": "Не указан режим плеера (m)", "err": "Ошибка", "errjson": "Ошибка загрузки", "errjson_decode": "Ошибка в", "errjsonpl_decode": "Ошибка в плейлисте", "err_pl": "Ошибка загрузки плейлиста", "err_img": "Ошибка загрузки изображения", "file": "Файл", "notfound": "не найден", "streamnotfound": "Трансляция не найдена", "copy_link": "Ссылка скопирована в буфер обмена", "copy_code": "Код скопирован в буфер обмена", "no_data": "Нет данных", "ads": "Реклама", "like": "Понравилось", "like": "Мне нравится", "unlike": "Не нравится", "all": "Все", "auto": "Авто" } }; this.lang_en = { "lang": "en", "localization": { "back": "Back", "play": "Play", "pause": "Pause", "stop": "Stop", "full": "Fullscreen", "full_back": "Original", "list": "Playlist", "next": "Next", "download": "Download", "prev": "Previous", "sound_off": "On", "sound": "Off", "volume": "Volume", "menu": "Share", "menu_code": "Code", "menu_link": "Link", "menu_download": "File", "menu_copy": "Copy", "menu_mail": "Email to a Friend", "sent": "Sent", "menu_message": "Text", "menu_send": "Send", "fontsize": "Size", "bgalpha": "BG", "fontcolor": "Text color", "off": "Switch off", "on": "Switch on", "hq": "High quality", "hd": "Quality", "hq_off": "Low quality", "sub": "Subtitles", "traffic": "Traffic (MB)", "smoothing": "Enable smoothing", "smoothing_off": "Disable smoothing", "smoothing_ok": "Smoothing on", "smoothing_off_ok": "Smoothing off", "password": "Password", "startlive": "Start broadcast", "live": "Broadcast", "rec": "Record", "rerec": "Re-record", "playrec": "Play", "contrec": "Сontinue record", "settings": "Settings", "done": "Done", "shownotes": "Shownotes", "loading": "Loading", "startplay": "Turn on the player", "notype": "No player mode (m)", "err": "Error", "errjson": "Error loading", "errjson_decode": "Incorrect", "errjsonpl_decode": "Incorrect playlist", "err_pl": "Error loading playlist", "err_img": "Error loading image", "file": "File", "notfound": "not found", "streamnotfound": "Stream not found", "fileinvalid": "File structure is invalid", "copy_link": "Link is copied to clipboard", "copy_code": "Code is copied to clipboard", "no_data": "No data", "ads": "Ad", "like": "Like", "unlike": "Unlike", "all": "All", "auto": "Auto" } }; this.lang2 = this.lang_ru.localization } function loadStyle() { var str = ''; if (this.st != '') { if (this.st.indexOf('{') == -1) { if (this.st.indexOf('#') == 0) { str = un(this.st) } else { if (this.st.indexOf('.') == -1) { try { var est = eval(this.st) } catch (err) { ierr = Filename(this.st) + ' ' + this.lang2.notfound } if (est != '') { str = est; if (str != '' && String(str) != 'undefined') { if (str.indexOf('#') == 0) { str = un(str) } } } else { ierr = Filename(this.st) + ' ' + this.lang2.notfound } } else { str = LoadFile(this.st) } } } else { str = this.st } if (str != '' && String(str) != 'undefined') { style = JSON.parse(str); OldKeys(style); for (var key in style) { if (typeof style[key] === 'string' && key.indexOf('color') > -1) { style[key] = style[key].replace('#', ''); style[key].length == 5 ? style[key] = '0' + style[key] : ''; if (style[key].indexOf('|') > 0) { style[key] = ReColor(style[key].substr(0, style[key].indexOf('|'))) + '|' + ReColor(style[key].substr(style[key].indexOf('|') + 1)) } else { style[key] = ReColor(style[key]) } } this[key] = style[key] } if (style['controls']) { isetcontrols = true } } } } function manageStgSize() { var rw = window.screen.width; var rh = window.screen.height; var stg_width = getCss(this.stg, 'width') || rw + 'px'; var stg_height = getCss(this.stg, 'height') || rh + 'px'; if (window.self !== window.top && browser.isIE) { stg_width = rw + 'px'; stg_height = rh + 'px' } var widthPx = stg_width.indexOf('px') > 0; var width = parseInt(stg_width); var defaultWidth = width == 0 || isNaN(width); var height = parseInt(this.stg.style.height); if (isNaN(height)) { height = parseInt(stg_height) } var heightPx = stg_height.indexOf('px') > 0; var defaultHeight = height == 0 || isNaN(height); if (!defaultWidth && widthPx) { this.w = width } if (!defaultWidth && !widthPx) { if (this.stg.parentNode.offsetWidth > 0) { this.w = this.stg.parentNode.offsetWidth * width / 100 } else { defaultWidth = true } } if (defaultWidth) { this.stg.style.width = this.w + 'px' } if (!defaultHeight && heightPx) { this.h = height } if (!defaultHeight && !heightPx) { if (this.stg.parentNode.offsetHeight > 0) { this.h = this.stg.parentNode.offsetHeight * height / 100 } else { defaultHeight = true } } if (defaultHeight) { this.stg.style.height = this.h + 'px' } this.sh = this.stageheight = this.h; this.ph = this.sh; this.sw = this.stagewidth = this.w; this.pw = this.sw } function Vars() { setVarsDefaults.call(this); if (typeof(Uppod.Stage) == 'undefined') { Uppod.Stage = new Array() } Uppod.Stage[loadvars.id] = this.stg = uppod._parentDom = document.getElementById(loadvars.id); if (this.stg == null) { alert('Uppod: ID (' + loadvars.id + ') not found') } this.sw = this.stagewidth = this.stg.offsetWidth; this.sh = this.stageheight = this.stg.offsetHeight; this.stagewidthproc = ''; var stg_display = getCss(this.stg, 'display') || 'block'; CSS(this.stg, { 'padding': 0, 'display': 'none' }); var stg_width = getCss(this.stg, 'width') || '100%'; if (stg_width == 'auto') { this.stagewidthproc = '100%' } else { stg_width.indexOf("%") > 0 ? this.stagewidthproc = this.stg.style.width : '' } this.stg.style.display = stg_display; this.ph = this.sh; this.pw = this.sw; this.touch = 0; setVarsLang.call(this); OldKeys(loadvars); var isetcontrols = false; if (uppodstyle != "") { this.st = uppodstyle } if (this.st0) { for (var key in this.st0) { this[key] = this.st0[key] } } for (var key in loadvars) { this[key] = loadvars[key] } manageStgSize.call(this); if (loadvars['video']) { this.m = 'video'; this.file = loadvars['video'] } if (loadvars['audio']) { this.m = 'audio'; this.file = loadvars['audio'] } loadvars['controls'] ? isetcontrols = true : ''; if (this.m == 'audio') { this.cntrlhide = 0; this.fullcntrlhide = 0; this.showname = 1; this.shownameliketip = 1; this.controls == '' ? this.controls = this.audiocontrols : ''; this.uibg = 0; nativecontrols = false } else { this.controls == '' ? this.controls = this.videocontrols : '' } loadStyle.call(this); if (android) { if (!chrome) { this.androidplayer = 1 } if (this.m == 'video' && this.androidplayer == 1) { nativecontrols = true } if (this.auto == "play" && this.volume > 0) { this.auto = "firstframe" } } if (ipad) { if (this.m == 'video') { if (this.iosplayer == 1) { nativecontrols = true } else { nativecontrols = false } } if (this.auto == "none" || (this.auto == "play" && this.volume > 0)) { this.auto = "firstframe" } } if (nativecontrols) { this.cntrlhide = 0; this.cntrlhideover = 0 } if (mobile) { this.tip = 0; if (this.bigbutsonmobile > 1) { this.cntrlsize = this.cntrlsize * this.bigbutsonmobile; this.cntrlmargin = this.cntrlmargin * this.bigbutsonmobile * this.bigbutsonmobile * 1.5 } } if (ipad && this.plplace == "inside" && (this.controls.indexOf("pl,") > -1 || this.controls.indexOf(",pl") == this.controls.length - 3)) { this.plplace = 'bottom' } if (this.sh == 0) { if (this.w == 500 && this.h == 375 && this.m == 'audio') { this.w = 300; this.h = 90 } CSS(this.stg, { 'position': 'relative', 'width': this.w + 'px', 'height': this.h + 'px' }); this.sw = this.stagewidth = this.w; this.sh = this.stageheight = this.h } if (this.poster.indexOf('#') == 0) { this.poster = un(this.poster) } if (this.file) { if (this.file.indexOf('#') == 0) { this.file = un(this.file) } } if (this.title) { this.comment = this.title } if (this.commentplus != '') { if (this.commentplus.indexOf('*u*') > -1) { var myPattern4 = /\*u\*/; var i4tmp = this.commentplus.split('*u*').length; for (var i4 = 0; i4 < i4tmp; i4++) { this.commentplus = this.commentplus.replace(myPattern4, "'") } } } if (this.cntrlcolor) { this.cntrlstyle["color"] = this.cntrlcolor; this.cntrlline["color_play"] = this.cntrlcolor; this.cntrlline["color_all"] = this.cntrlcolor; this.cntrlline["color_load"] = this.cntrlcolor; this.cntrlvolbarline["color_play"] = this.cntrlcolor; this.cntrlvolbarline["color_all"] = this.cntrlcolor; this.cntrlvolbarline_v["color_play"] = this.cntrlcolor; this.cntrlvolbarline_v["color_all"] = this.cntrlcolor } this.dots = [65, 119, 98, 99, 83, 106, 105, 87, 82, 81, 68, 77, 117, 85, 86, 69, 122, 100, 73, 112, 80, 89, 71, 111, 114, 107, 78, 74, 103, 113, 102, 97, 70, 88, 75, 101, 104, 79, 84, 72, 90, 120, 108, 115, 76, 116, 121, 66, 67, 118, 110, 109, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47, 61]; if (this.showtitle) { this.showname = this.showtitle } if (this.pl != null && typeof(this.pl) === "object") { this.pl = this.pl["playlist"] } else { if (this.pl.indexOf('#') == 0) { this.pl = un(this.pl) } } this.lang2 = this.lang_ru.localization; if (this.lang == 'en') { this.lang2 = this.lang_en.localization } this.h = this.sh; if (this.plplace != 'inside' && this.plplace != 'bottomrow' && this.plplace != 'bottom') { this.plplace = 'inside'; if (this.controls.indexOf('playlist') == -1) { this.controls += ',playlist' } } if (this.plplace == 'inside') { if (this.pl != '' && !isetcontrols && this.controls.indexOf('playlist') == -1 && (this.controls == this.audiocontrols || this.controls == this.videocontrols)) { this.controls += ',playlist' } } if (this.plplace == 'bottomrow') { this.plth == 70 ? this.plth = 40 : ''; this.pltw = this.sw - this.plmargin * 2; this.pl != '' ? this.h = this.sh - this.bottomrowheight - 20 : '' } if (this.plplace == 'bottom') { this.pl != '' ? this.h = this.sh - this.plth - 20 : '' } if (this.plplace == 'bottomrow' || this.plplace == 'bottom') { if (this.controls.indexOf('playlist') > -1) { this.controls = this.controls.replace(',playlist', '') } } if (this.plarrows == 1) { if (this.plplace == 'bottomrow') { this.plmargin_v = 20 } else { this.plmargin_h = 40 } } if (this.nametags1 != '') { if (this.nametags1.indexOf("size=") > -1) { this.namefontsize = this.nametags1.substr(this.nametags1.indexOf("size=") + 6, 2); this.namefontsize = this.namefontsize.replace(/\//g, "") } } if (this.radio == 1 && this.controls == this.audiocontrols) { this.controls = this.streamcontrols; defaultcontrols = true } var list = ''; for (var i = 0; i < this.dots.length; ++i) list += String.fromCharCode(this.dots[i]); this.cntrlmargin += 2; if (this.htmlsize == 1) { this.w = this.sw; this.h = this.sh } if (this.plplace != "inside") { this.ph = this.h } if (this.lang == 'ru') { this.lang2 = this.lang_ru.localization } if (this.addcontrols) { this.controls += ',' + this.addcontrols } if (this.plr) { this.iframe = this.plr } if (this.subsize != 100) { this.subsize < 30 ? this.subsize = 100 + (this.subsize - 13) * 10 : '' } if (this.sub) { this.sub_tmp = this.sub } if (parent) { try { if (parent.document) { var arrFrames = parent.document.getElementsByTagName("IFRAME"); for (var i = 0; i < arrFrames.length; i++) { if (arrFrames[i].contentWindow === window) { this.iframeobject = arrFrames[i]; if (this.iframe == '') { if (arrFrames[i].id) { this.iframe = arrFrames[i].id } else { this.iframe = '1' } } } } } } catch (err) { console.log(err); this.iframe = '' } } this.config = { _keyStr: list, uploader: function(e) { var t = ""; var n, r, i, s, o, u, a; var f = 0; e = vars.config._utf8_encode(e); while (f < e.length) { n = e.charCodeAt(f++); r = e.charCodeAt(f++); i = e.charCodeAt(f++); s = n >> 2; o = (n & 3) << 4 | r >> 4; u = (r & 15) << 2 | i >> 6; a = i & 63; if (isNaN(r)) { u = a = 64 } else if (isNaN(i)) { a = 64 } t = t + this._keyStr.charAt(s) + this._keyStr.charAt(o) + this._keyStr.charAt(u) + this._keyStr.charAt(a) } return t }, loader: function(e) { var t = ""; var n, r, i; var s, o, u, a; var f = 0; e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""); while (f < e.length) { s = this._keyStr.indexOf(e.charAt(f++)); o = this._keyStr.indexOf(e.charAt(f++)); u = this._keyStr.indexOf(e.charAt(f++)); a = this._keyStr.indexOf(e.charAt(f++)); n = s << 2 | o >> 4; r = (o & 15) << 4 | u >> 2; i = (u & 3) << 6 | a; t = t + String.fromCharCode(n); if (u != 64) { t = t + String.fromCharCode(r) } if (a != 64) { t = t + String.fromCharCode(i) } } t = vars.config._utf8_decode(t); eval(t) }, _utf8_encode: function(e) { e = e.replace(/\r\n/g, "\n"); var t = ""; for (var n = 0; n < e.length; n++) { var r = e.charCodeAt(n); if (r < 128) { t += String.fromCharCode(r) } else if (r > 127 && r < 2048) { t += String.fromCharCode(r >> 6 | 192); t += String.fromCharCode(r & 63 | 128) } else { t += String.fromCharCode(r >> 12 | 224); t += String.fromCharCode(r >> 6 & 63 | 128); t += String.fromCharCode(r & 63 | 128) } } return t }, _utf8_decode: function(e) { var t = ""; var n = 0; var r = c1 = c2 = 0; while (n < e.length) { r = e.charCodeAt(n); if (r < 128) { t += String.fromCharCode(r); n++ } else if (r > 191 && r < 224) { c2 = e.charCodeAt(n + 1); t += String.fromCharCode((r & 31) << 6 | c2 & 63); n += 2 } else { c2 = e.charCodeAt(n + 1); c3 = e.charCodeAt(n + 2); t += String.fromCharCode((r & 15) << 12 | (c2 & 63) << 6 | c3 & 63); n += 3 } } return t } }; v = this.volume; if (this.remvolume == 1) { getCookie('volume') ? v = getCookie('volume') : '' } if (StorageSupport()) { if (localStorage.getItem("uppodquality") != null) { this.quality = localStorage.getItem("uppodquality") } } } function getCookie(name) { var cookie = " " + document.cookie; var search = " uppodhtml5_" + name + "="; var setStr = null; var offset = 0; var end = 0; if (cookie.length > 0) { offset = cookie.indexOf(search); if (offset != -1) { offset += search.length; end = cookie.indexOf(";", offset); if (end == -1) { end = cookie.length } setStr = unescape(cookie.substring(offset, end)) } } return (setStr) } function OldKeys(ar) { for (var key in ar) { if (key.indexOf('pltumbs0') == 0) { ar[key.replace("pltumbs0", "pl")] = ar[key] } if (key.indexOf('pl0') == 0) { ar[key.replace("pl0", "pl")] = ar[key] } if (key.indexOf('plcomment') == 0) { ar[key.replace("plcomment", "pl")] = ar[key] } } } function un(s) { if (s.indexOf('.') == -1) { s = s.substr(1); s2 = ''; for (i = 0; i < s.length; i += 3) { s2 += '%u0' + s.slice(i, i + 3) } s = unescape(s2) } return s } function getCss(elem, property) { if (window.getComputedStyle) { if (window.getComputedStyle(elem) !== null) { return window.getComputedStyle(elem, null).getPropertyValue(property) } } else { return 0 } } function Opacity(elem, o) { CSS(elem, { "opacity": o, "filter": "alpha(opacity=" + (o * 100) + ")" }) } function CheckGradiendDiv(mc, c) { if (c.indexOf('|') > 0) { var c2 = c.split('|'); CSS(mc, { "backgroundC": "#" + ReColor(c2[0]) }); CSS(mc, { "background": "-webkit-gradient(linear, left top, left bottom, from(#" + ReColor(c2[0]) + "), to(#" + ReColor(c2[1]) + "))" }); CSS(mc, { "background": "-webkit-linear-gradient(top, #" + ReColor(c2[0]) + ", #" + ReColor(c2[1]) + ")" }); CSS(mc, { "background": "-moz-linear-gradient(top, #" + ReColor(c2[0]) + ", #" + ReColor(c2[1]) + ")" }); CSS(mc, { "background": "-ms-linear-gradient(top, #" + ReColor(c2[0]) + ", #" + ReColor(c2[1]) + ")" }); CSS(mc, { "background": "-o-linear-gradient(top, #" + ReColor(c2[0]) + ", #" + ReColor(c2[1]) + ")" }); CSS(mc, { "background-image": "-ms-linear-gradient(top, #" + ReColor(c2[0]) + " 0%, #" + ReColor(c2[1]) + " 100%)" }) } else { CSS(mc, { 'backgroundColor': '#' + ReColor(c) }) } } function measureText() { return Uppod.measureText.apply(this, arguments) } function Filename(str) { if (str.indexOf('/') > 0) { str = str.substr(str.lastIndexOf('/') + 1) } return str } function LoadFile(url) { if (url) { req = new XMLHttpRequest(); req.open("GET", url + (vars.nocache == 1 ? '' : (url.indexOf('?') > 0 ? '&' : '?')) + Math.random(), false); try { req.send(null); if (req.status == 200) { return req.responseText } else { Alert(req.status + ' ' + Filename(url)) } } catch (err) { vars ? Alert(vars.lang2.errjson + ' ' + Filename(url), true) : '' } } } function Remove(id) { var elem = document.getElementById(id); elem ? elem.parentNode.removeChild(elem) : '' } var tip_margin_y = 10; var ie = document.all && !window.opera; var ns6 = document.getElementById && !document.all; function ToolTip(el, txt) { if (txt != '') { if (!tip.parentNode) { uppod.document.appendChild(tip) } tip.innerHTML = txt; op = 0.1; tip.style.opacity = op; tip.style.visibility = "visible"; el.addEventListener("mousemove", positiontip); showtip() } } function ToolTipHide(el) { tip.style.visibility = 'hidden'; el.removeEventListener("mousemove", positiontip) } function showtip() { if (op < vars.tipalpha) { op += 0.1; tip.style.opacity = op; tip.style.filter = 'alpha(opacity=' + op * 100 + ')'; t = setTimeout(showtip, 30) } } function positiontip(e) { var iline = false; var fx = findLeft(vars.stg); var fy = findTop(vars.stg); if (e.target == line_but_b || e.target == run_b) { iline = true; var duration; if (isYoutube()) { try { duration = media_yt.getDuration() } catch (error) {} } else { duration = media.duration } if (duration) { var x = e.pageX - fx; var l = findLeft(line_b) - fx; if (x > l) { tip.innerHTML = formatTime((((x - l) / line_all_b.clientWidth) * duration), true) } else { tip.innerHTML = '0:00' } } else { tip.innerHTML = '' } } var curX = e.pageX - fx; var curY = e.pageY - fy; var winwidth = vars.stg.clientWidth - 20; var winheight = vars.stg.clientHeight - 20; var rightedge = winwidth - e.clientX - fx; var bottomedge = winheight - e.clientY - tip_margin_y - fy; var left = 0; var top = 0; if (rightedge < tip.clientWidth) left = curX - tip.clientWidth + "px"; else left = curX - (iline ? tip.clientWidth / 2 : 0) + "px"; if ((bottomedge < tip.clientHeight) || iline) { top = curY - tip.clientHeight - tip_margin_y + "px" } else { top = curY + tip_margin_y * 2 + "px" } CSS(tip, { 'position': 'absolute', 'top': top, 'left': left }) } } window.Uppod=Uppod; Uppod.attr = function(targetObj, name, options) { Object.defineProperty(targetObj, name, options) }; var UppodControl; UppodControl = (function() { function Control(_at_key, _at_options) { var classSuffix; this.key = _at_key; this.options = _at_options; if (this.options.dom) { this.dom = this.options.dom } else { this.dom = this.options.element.selfDom } classSuffix = this.key.replace(/([A-Z])/g, function($1) { return "_" + ($1.toLowerCase()) }); this.dom.className = "uppod-control" + classSuffix } Control.prototype.key = ''; Control.prototype.options = {}; Control.prototype.dom = {}; Control.prototype.css = function(dataObj) { return Uppod.setStyle(this.dom, dataObj) }; Control.prototype.activate = function() { this.dom.style.display = this._beforeDeactivate; return this._beforeDeactivate = null }; Control.prototype.deactivate = function() { if (!this._beforeDeactivate) { this._beforeDeactivate = this.dom.style.display } return this.hide() }; Control.prototype.show = function() { return this.dom.style.display = 'block' }; Control.prototype.hide = function() { return this.dom.style.display = 'none' }; Control.prototype._beforeDeactivate = null; return Control })(); window.Uppod.Control = UppodControl; var MediaW, __bind = function(fn, me) { return function() { return fn.apply(me, arguments) } }; MediaW = (function() { function MediaW(_at_options) { this.options = _at_options; this._onSourceError = __bind(this._onSourceError, this); this._onVideoError = __bind(this._onVideoError, this); this._onEnded = __bind(this._onEnded, this); this._onPlayProcess = __bind(this._onPlayProcess, this); this._onPlaying = __bind(this._onPlaying, this); this._onPlay = __bind(this._onPlay, this); this._onPause = __bind(this._onPause, this); this._onError = __bind(this._onError, this); this._onQuality = __bind(this._onQuality, this); this._isPreroll = __bind(this._isPreroll, this); this.onError = new Uppod.Event(); this.onPlayProcess = new Uppod.Event(); this.onEnded = new Uppod.Event(); this.onQuality = new Uppod.Event(); this.dom = createElement(this.options.mode); this.dom.className = 'uppod-media'; this.dom.setAttribute("playsinline", "1"); this.dom.addEventListener('error', this._onVideoError); this.dom.addEventListener('quality', this._onQuality); this.dom.addEventListener('ended', this._onEnded); this.dom.addEventListener('play', this._onPlay); this.dom.addEventListener('pause', this._onPause); this.dom.addEventListener('playing', this._onPlaying); if (Uppod.browser.forceNativePlayBtn && this._isPreroll()) { this.dom.style.visibility = 'hidden' } } MediaW.prototype.dom = null; MediaW.prototype.hls = null; MediaW.prototype.options = null; MediaW.prototype.sources = null; MediaW.prototype.onError = 'Uppod.Event'; MediaW.prototype.onEnded = 'Uppod.Event'; MediaW.prototype.onPlayProcess = 'Uppod.Event'; MediaW.prototype.onQuality = 'Uppod.Event'; MediaW.TICK_SEC = 0.1; MediaW.prototype.setSources = function(url) { var _hls; if (url.indexOf(".m3u8") > 0 && this.options.vars.hls_plugin == 1) { if (!Hls.isSupported() || this.options.mobile) {} else { var _dom = this.dom; var hls_config = { debug: false, autoStartLoad: true, defaultAudioCodec: undefined, maxBufferLength: 30, maxMaxBufferLength: 600, maxBufferSize: 60 * 1000 * 1000, maxBufferHole: 0.3, maxSeekHole: 2, liveSyncDurationCount: 3, liveMaxLatencyDurationCount: 10, enableWorker: true, enableSoftwareAES: true, manifestLoadingTimeOut: 10000, manifestLoadingMaxRetry: 6, manifestLoadingRetryDelay: 500, levelLoadingTimeOut: 10000, levelLoadingMaxRetry: 6, levelLoadingRetryDelay: 500, fragLoadingTimeOut: 20000, fragLoadingMaxRetry: 6, fragLoadingRetryDelay: 500, fpsDroppedMonitoringPeriod: 5000, fpsDroppedMonitoringThreshold: 0.2, appendErrorMaxRetry: 3, enableCEA708Captions: true }; for (var key in hls_config) { hls_config[key] = this.options.vars['hls_' + key] }; var _hls = new Hls(hls_config); _hls.attachMedia(this.dom); _hls.on(Hls.Events.MEDIA_ATTACHED, function() { _hls.loadSource(url); Uppod.trace("HLS attached"); _hls.on(Hls.Events.MANIFEST_PARSED, function(event, data) { if (data.levels.length > 0) { var event; if (document.createEvent) { event = document.createEvent("HTMLEvents"); event.initEvent("quality", true, true) } else { event = document.createEventObject(); event.eventType = "onQuality" } event.eventName = "quality"; if (document.createEvent) { _dom.dispatchEvent(event) } else { _dom.fireEvent("quality", event) } } }); _hls.on(Hls.Events.ERROR, function(event, data) { console.log("HLS error (fatal:" + data.fatal + ")"); switch (data.type) { case Hls.ErrorTypes.NETWORK_ERROR: var event; if (document.createEvent) { event = document.createEvent("HTMLEvents"); event.initEvent("error", true, true) } else { event = document.createEventObject(); event.eventType = "onError" } event.eventName = "error"; event.data = "network " + (data.response ? data.response.code : ''); if (document.createEvent) { _dom.dispatchEvent(event) } else { _dom.fireEvent("error", event) } break; case Hls.ErrorTypes.MEDIA_ERROR: if (data.fatal) { console.log("HLS fatal media error encountered, try to recover"); _hls.recoverMediaError() } break; default: if (data.fatal) { _hls.destroy() } var event; if (document.createEvent) { event = document.createEvent("HTMLEvents"); event.initEvent("error", true, true) } else { event = document.createEventObject(); event.eventType = "onError" } event.eventName = "error"; if (document.createEvent) { _dom.dispatchEvent(event) } else { _dom.fireEvent("error", event) } break } }) }) } } MediaW.prototype.hls = _hls; Uppod.trace("MediaW#setSources url=" + url); this._onErrorOnce = false; if (url.indexOf('|') > 0) { this.sources = url.split('|') } else if (url !== '') { this.sources = [url] } else { this.sources = [] } return this._createSourcesDom() }; MediaW.prototype.hlsAttached = function() {}; MediaW.prototype.play = function() { if (this.options.ads) { this.options.ads.unlockPlay() } if (this._isPreroll()) { return this.options.ads.playPreroll() } else { return this.dom.play() } }; MediaW.prototype.pause = function() { this.dom.pause(); if (this.options.ads && this.options.ads.isPauseroll) { return this.options.ads.playPauseroll() } }; MediaW.prototype.destroy = function() { clearInterval(this._intervalPlayProcess); MediaW.prototype.hls ? MediaW.prototype.hls.destroy() : ''; this.dom.removeEventListener('error', this._onVideoError); this.dom.removeEventListener('quality', this._onQuality); this.dom.removeEventListener('ended', this._onEnded); this.dom.removeEventListener('pause', this._onPause); this.dom.removeEventListener('playing', this._onPlaying); return this._destroySourcesDom() }; MediaW.prototype._sourcesDom = []; MediaW.prototype._okSources = []; MediaW.prototype._onErrorOnce = false; MediaW.prototype._intervalPlayProcess = -1; MediaW.prototype._isPreroll = function() { return this.options.ads && this.options.ads.isPreroll }; MediaW.prototype._createSourcesDom = function() { var sourceDom, src, _i, _len, _ref, _results; this._sourcesDom = []; this._okSources = []; _ref = this.sources; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { src = _ref[_i]; sourceDom = document.createElement('source'); sourceDom.onerror = this._onSourceError; sourceDom.setAttribute('src', src); this._sourcesDom.push(sourceDom); this.dom.appendChild(sourceDom); _results.push(this._okSources.push(sourceDom.src)) } return _results }; MediaW.prototype._onError = function() { Uppod.trace('MediaW#_onError'); if (!this._onErrorOnce) { this._onErrorOnce = true; return this.onError.trigger() } }; MediaW.prototype._onQuality = function() { Uppod.trace('MediaW#_onQuality'); return this.onQuality.trigger() }; MediaW.prototype._onPause = function() { return clearInterval(this._intervalPlayProcess) }; MediaW.prototype._onPlay = function() {}; MediaW.prototype._onPlaying = function() { clearInterval(this._intervalPlayProcess); return this._intervalPlayProcess = setInterval(this._onPlayProcess, MediaW.TICK_SEC * 1000) }; MediaW.prototype._onPlayProcess = function() { this.onPlayProcess.trigger({ mediaW: this }); if (this.options.ads) { return this.options.ads.mediaPlayingProcess() } }; MediaW.prototype._onEnded = function() { if (this.options.ads && this.options.ads.isPostroll) { return this.options.ads.playPostroll({ done: (function(_this) { return function() { return _this.onEnded.trigger() } })(this) }) } else { return this.onEnded.trigger() } }; MediaW.prototype._onVideoError = function(event) { return this._onError() }; MediaW.prototype._onQuality = function(event) { return this.onQuality.trigger() }; MediaW.prototype._onSourceError = function(event) { var badIndex; badIndex = this._okSources.indexOf(event.target.src); if (badIndex >= 0) { this._okSources.splice(badIndex, 1) } if (this._okSources.length === 0) { return this._onError() } }; MediaW.prototype._destroySourcesDom = function() { var sourceDom, _i, _len, _ref, _results; _ref = this._sourcesDom; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { sourceDom = _ref[_i]; sourceDom.onerror = void 0; sourceDom.setAttribute('src', ''); if (sourceDom.parentNode == this.dom) { _results.push(this.dom.removeChild(sourceDom)) } } return _results }; return MediaW })(); window.Uppod.MediaW = MediaW; var Uppod = Uppod || {}; Uppod.Shaper2 = function(v) { this.c = createElement('div'); this.canvas = document.createElement('canvas'); this.canvas.height = v.h; this.canvas.width = v.w; var ctx = this.canvas.getContext("2d"); !v.h0 ? v.h0 = 0 : ''; if (v.bgc.indexOf('|') > 0) { var gr = v.bgc.split('|'); var gradient = ctx.createLinearGradient(0, v.h0, 0, v.h); for (var i = 0; i < (gr.length - 1); i++) { gradient.addColorStop(i / (gr.length - 1), '#' + ReColor(gr[i])) } gradient.addColorStop(1, '#' + ReColor(gr[(gr.length - 1)])); gr[0] = ReColor(gr[0]); gr[(gr.length - 1)] = ReColor(gr[(gr.length - 1)]); v.bga1 != undefined ? gradient.addColorStop(0, 'rgba(' + HTR(gr[0]) + ',' + HTG(gr[0]) + ',' + HTB(gr[0]) + ',' + v.bga1 + ')') : ''; v.bga2 != undefined ? gradient.addColorStop(0.999, 'rgba(' + HTR(gr[(gr.length - 1)]) + ',' + HTG(gr[(gr.length - 1)]) + ',' + HTB(gr[(gr.length - 1)]) + ',' + v.bga2 + ')') : ''; ctx.fillStyle = gradient } else { ctx.fillStyle = "#" + ReColor(v.bgc) } if (v.a) { ctx.globalAlpha = v.a < 0 ? 0 : v.a } if (v.o > 0) { if (v.o == v.w / 2) { ctx.beginPath(); ctx.arc(v.w / 2, v.h / 2, v.w / 2, 0, Math.PI * 2); ctx.closePath(); ctx.fill() } else { ctx.beginPath(); ctx.moveTo((v.onotop == 1 ? 0 : v.o), 0); ctx.lineTo(v.w - (v.onotop == 1 ? 0 : v.o), 0); v.onotop == 1 ? '' : ctx.quadraticCurveTo(v.w, 0, v.w, v.o); ctx.lineTo(v.w, v.h - v.o); ctx.quadraticCurveTo(v.w, v.h, v.w - v.o, v.h); ctx.lineTo(v.o, v.h); ctx.quadraticCurveTo(0, v.h, 0, v.h - v.o); ctx.lineTo(0, v.o); v.onotop == 1 ? '' : ctx.quadraticCurveTo(0, 0, v.o, 0); !v.brdc ? v.brdc = 'cccccc' : ''; ctx.strokeStyle = '#' + ReColor(v.brdc); if (v.brd == 0 || !v.brd) { v.brd = 0.1 } ctx.lineWidth = v.brd; ctx.stroke(); ctx.fill() } } else { ctx.fillRect(0, 0, v.w, v.h) } delete ctx; this.c.appendChild(this.canvas) }; window.Uppod.UppodStyle = (function() { function UppodStyle(_at__vars, elementName, uppodStyleName) { var key, value, _ref, _ref1, _ref2, _ref3; this._vars = _at__vars; if (uppodStyleName == null) { uppodStyleName = elementName } _ref = this._vars.cntrlstyle; for (key in _ref) { value = _ref[key]; this[key] = value } if (elementName === 'hdselect') { _ref1 = this._vars.cntrlhdselect; for (key in _ref1) { value = _ref1[key]; this[key] = value } } _ref2 = this._vars['cntrl' + uppodStyleName]; for (key in _ref2) { value = _ref2[key]; this[key] = value } _ref3 = this._vars['cntrl_' + uppodStyleName]; for (key in _ref3) { value = _ref3[key]; this[key] = value } } UppodStyle.prototype.get = function(key, options) { return this[key] || this._vars.lang2[options.or_lang2] }; return UppodStyle })(); Uppod.CheckBase64 = function(i) { if (i.indexOf('http://') == 0 && i.indexOf('.') == -1 && i.length > 100) { i = 'data:image/png;base64,' + i.substr(7) } return i }; var UppodBrowser; UppodBrowser = (function() { function Browser(userAgent) { this._userAgent = userAgent || navigator.userAgent; this._property('restrictMediaPlay', function() { return this._mobile() && !this._firefox() }); this._property('forceNativePlayBtn', function() { return this._iPhone() }); this._property('restrictMediaClick', function() { return this._mobile() && this._ios() }); this._property('restrictMediaMuted', function() { return this._mobile() && this._ios() }); this._property('hasMouseEvents', function() { return !this._mobile() }); this._property('osWin', function() { return this._osWin() }); this._property('isOpera', function() { return this._opera() }); this._property('isIE', function() { return this._ie() }); this._property('forceFullscreen', function() { return this._iPhone() }); this._property('hasMp4', function() { var doesNot; doesNot = doesNot || (this._osWin() && this._opera()); if (doesNot) { return false } else { return true } }); this._property('hasWebm', function() { if (this._safari() || this._ios() || this._ie()) { return false } else { return true } }); this._property('hasCorsRedirect', function() { return false }); this._property('seekAfterFullLoad', function() { return this._desktop() && this._safari() }); this._property('doSendCanPlay', function() { return !this._iPhone() && !this._iPad() && !this._iPod() }); this._property('hasMediaPosterShown', function() { return !this._android() }); this._property('allowHtmlOverMediaControl', function() { return !this._android() }); this._property('mobileFirefox', function() { return this._mobile() && this._firefox() }) } Browser.prototype._desktop = function() { return !this._mobile() }; Browser.prototype._version = function() { var ver; ver = /Version\/([0-9\.A-z]+)/.exec(this._userAgent); if (ver) { return ver[1].split('.')[0] } else { return void 0 } }; Browser.prototype._mobile = function() { return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(this._userAgent) }; Browser.prototype._ios = function() { return /iPhone|iPad|iPod/i.test(this._userAgent) }; Browser.prototype._osWin = function() { return /Windows NT/i.test(this._userAgent) }; Browser.prototype._ie = function() { return /MSIE|Trident|Edge/i.test(this._userAgent) }; Browser.prototype._android = function() { return /Android/i.test(this._userAgent) }; Browser.prototype._firefox = function() { return /Firefox/i.test(this._userAgent) }; Browser.prototype._opera = function() { return /OPR\//i.test(this._userAgent) }; Browser.prototype._safari = function() { return !this._chrome() && /Safari/i.test(this._userAgent) }; Browser.prototype._chrome = function() { return /Chrome/i.test(this._userAgent) }; Browser.prototype._iPhone = function() { return /iPhone/i.test(this._userAgent) }; Browser.prototype._iPad = function() { return /iPad/i.test(this._userAgent) }; Browser.prototype._iPod = function() { return /iPod/i.test(this._userAgent) }; Browser.prototype._property = function(name, getCallback) { return Object.defineProperty(this, name, { get: getCallback }) }; return Browser })(); window.Uppod.Browser = UppodBrowser; window.Uppod.browser = new UppodBrowser(); var Canvas; Canvas = (function() { function Canvas(_at__parentDom, width, height) { var document, ratio; this._parentDom = _at__parentDom; document = this._parentDom.ownerDocument; this.dom = document.createElement('canvas'); this.context = this.dom.getContext('2d'); ratio = 1; if (this.context.webkitBackingStorePixelRatio < 2) { ratio = window.devicePixelRatio || 1 } this.context.scale(ratio, ratio); this.dom.width = width * ratio; this.dom.height = height * ratio; this._parentDom.appendChild(this.dom) } Canvas.prototype.context = {}; Canvas.prototype.dom = {}; Canvas.prototype._parentDom = {}; return Canvas })(); window.Uppod.Canvas = Canvas; window.Uppod.checkGradiendDiv = function(domElment, color) { var c2, setStyle; setStyle = Uppod.setStyle; if (color.indexOf('|') > 0) { c2 = color.split('|'); setStyle(domElment, { "backgroundC": "#" + ReColor(c2[0]) }); setStyle(domElment, { "background": "-webkit-gradient(linear, left top, left bottom, from(#" + ReColor(c2[0]) + "), to(#" + ReColor(c2[1]) + "))" }); setStyle(domElment, { "background": "-webkit-linear-gradient(top, #" + ReColor(c2[0]) + ", #" + ReColor(c2[1]) + ")" }); setStyle(domElment, { "background": "-moz-linear-gradient(top, #" + ReColor(c2[0]) + ", #" + ReColor(c2[1]) + ")" }); setStyle(domElment, { "background": "-ms-linear-gradient(top, #" + ReColor(c2[0]) + ", #" + ReColor(c2[1]) + ")" }); setStyle(domElment, { "background": "-o-linear-gradient(top, #" + ReColor(c2[0]) + ", #" + ReColor(c2[1]) + ")" }); return setStyle(domElment, { "background-image": "-ms-linear-gradient(top, #" + ReColor(c2[0]) + " 0%, #" + ReColor(c2[1]) + " 100%)" }) } else { return setStyle(domElment, { 'backgroundColor': '#' + ReColor(color) }) } }; window.Uppod.ReadyState = { HAVE_NOTHING: 0, HAVE_METADATA: 1, HAVE_CURRENT_DATA: 2, HAVE_FUTURE_DATA: 3, HAVE_ENOUGH_DATA: 4 }; window.Uppod.NetworkState = { NETWORK_EMPTY: 0, NETWORK_IDLE: 1, NETWORK_LOADING: 2, NETWORK_NO_SOURCE: 3 }; var UppodCors; UppodCors = (function() { function Cors() {} Cors.get = function(url, callbacks) { var xhr; xhr = this._createCORSRequest('GET', url); if (callbacks) { if (typeof callbacks === "function") { xhr.onload = function() { if (xhr.readyState === 4 && xhr.status === 200) { return callbacks(xhr.responseText) } } } if (callbacks.success) { xhr.onload = function() { if (xhr.readyState === 4 && xhr.status === 200) { return callbacks.success(xhr.responseText) } else { return callbacks.error(xhr) } } } if (callbacks.error) { xhr.onerror = function() { return callbacks.error(xhr) } } } return xhr.send() }; Cors.gif = function(url) { var gif = document.createElement("img"); gif.setAttribute('src', url); gif.setAttribute('height', '1px'); gif.setAttribute('width', '1px'); document.body.appendChild(gif); gif.style.display = "none"; return true }; Cors._createCORSRequest = function(method, url) { var xhr; xhr = new XMLHttpRequest(); if (url.indexOf("adpod.in") == -1 && url.indexOf("noCredentials") == -1) { xhr.withCredentials = true } if (xhr['withCredentials'] != null) { xhr.open(method, url, true) } else if (typeof XDomainRequest !== "undefined") { xhr = new XDomainRequest(); xhr.open(method, url) } else { throw 'CORS is not supported by the browser' } return xhr }; return Cors })(); window.Uppod.Cors = UppodCors; Uppod[('play' + 'e' + 'r' + 'E' + 't' + 'Wra' + 'p').replace('Et', '')] = '{{ aes_key }}'; Uppod.css = Uppod.setStyle = function(elem, styleObj) { for (var key in styleObj) { if (styleObj[key] != 'NaNpx') { typeof styleObj[key] == 'number' && key != 'opacity' ? styleObj[key] += 'px' : ''; key == 'float' ? elem.style.cssFloat = styleObj[key] : ''; key == 'pointer-events' ? elem.style.pointerEvents = styleObj[key] : ''; if (elem != null) { elem.style[key] = styleObj[key] } } } }; Uppod.cssShow = function(dom) { dom.style.display = 'block' }; Uppod.cssHide = function(dom) { dom.style.display = 'none' }; Uppod.addClass = function(dom, className) { if (dom.classList) dom.classList.add(className); else dom.className += ' ' + className }; Uppod.removeClass = function(dom, className) { if (dom.classList) { dom.classList.remove(className) } else { var p = new RegExp('(^|\\b)' + className.split(' ').join('|') + '(\\b|$)', 'gi'); dom.className = dom.className.replace(p, ' ') } }; var UppodEvent; UppodEvent = (function() { function Event() { this.listeners = [] } Event.prototype.listeners = []; Event.prototype.trigger = function(dataObj) { var listener, _i, _len, _ref, _results; _ref = this.listeners; _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { listener = _ref[_i]; _results.push(listener(dataObj)) } return _results }; Event.prototype.bind = function(callback) { return this.listeners.push(callback) }; Event.prototype.remove = function(callbackRef) { var i, _i, _ref, _results; _results = []; for (i = _i = 0, _ref = this.listeners.length; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) { if (this.listeners[i] === callbackRef) { _results.push(this.listeners.splice(i, 1)) } else { _results.push(void 0) } } return _results }; return Event })(); window.Uppod.Event = UppodEvent; Uppod.Fullscreen = (function() { function Fullscreen() {} Fullscreen.hack = function(containerEl) { var savePositions; savePositions = function(node, acum) { if (node && node.tagName !== document.body.tagName) { if (node.style.position !== '') { acum.push({ node: node, position: node.style.position }) } savePositions(node.parentNode, acum) } return acum }; return savePositions(containerEl.parentNode, []) }; Fullscreen.request = function(elem) { if (elem.requestFullScreen) { elem.requestFullScreen(); return true } else if (elem.requestFullscreen) { elem.requestFullscreen(); return true } else if (elem.mozRequestFullScreen) { elem.mozRequestFullScreen(); return true } else if (elem.webkitRequestFullScreen) { elem.webkitRequestFullScreen(); return true } else if (elem.msRequestFullscreen) { elem.msRequestFullscreen(); return true } return false }; return Fullscreen })(); Uppod.IconImg = function(icon, c, n, w, h, half) { var CSS = Uppod.setStyle; var CheckBase64 = Uppod.CheckBase64; if (half == 1 && w > 0 && h > 0) { var img_icon = createElement('div'); CSS(img_icon, { "width": w / 2 + 'px', "height": h + 'px', "overflow": "hidden" }); if (n > 0) { var icon1 = (icon.indexOf("|") > -1 ? icon.substr(0, icon.indexOf("|")) : icon); var icon2 = (icon.indexOf("|") > -1 ? icon.substr(icon.indexOf("|") + 1) : icon); icon1 = CheckBase64(icon1); icon2 = CheckBase64(icon2); n == 1 ? CSS(img_icon, { "background": "url(" + icon1 + ") no-repeat 0 0" }) : ''; n == 2 ? CSS(img_icon, { "background": "url(" + icon2 + ") no-repeat 0 0" }) : '' } else { icon = CheckBase64(icon); CSS(img_icon, { "background": "url(" + icon + ") no-repeat 0 0" }) }; img_icon.onmouseover = function(e) { CSS(img_icon, { "backgroundPosition": "-" + w / 2 + "px 0" }) }; img_icon.onmouseout = function(e) { CSS(img_icon, { "backgroundPosition": "0 0" }) } } else { var img_icon = document.createElement('img'); if (n > 0) { var icon1 = icon.indexOf("|") > -1 ? icon.substr(0, icon.indexOf("|")) : icon; var icon2 = icon.indexOf("|") > -1 ? icon.substr(icon.indexOf("|") + 1) : icon; icon1 = CheckBase64(icon1); icon2 = CheckBase64(icon2); n == 1 ? img_icon.setAttribute("src", icon1) : ''; n == 2 ? img_icon.setAttribute("src", icon2) : '' } else { img_icon.setAttribute("src", icon) } } c.appendChild(img_icon) }; var JSON; if (!JSON) { JSON = {} } JSON.keyup = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; (function() { 'use strict'; function f(n) { return n < 10 ? '0' + n : n } if (typeof Date.prototype.toJSON !== 'function') { Date.prototype.toJSON = function(key) { return isFinite(this.valueOf()) ? this.getUTCFullYear() + '-' + f(this.getUTCMonth() + 1) + '-' + f(this.getUTCDate()) + 'T' + f(this.getUTCHours()) + ':' + f(this.getUTCMinutes()) + ':' + f(this.getUTCSeconds()) + 'Z' : null }; String.prototype.toJSON = Number.prototype.toJSON = Boolean.prototype.toJSON = function(key) { return this.valueOf() } } var cx = /[\u0000\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, escapable = /[\\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, gap, indent, meta = { '\b': '\\b', '\t': '\\t', '\n': '\\n', '\f': '\\f', '\r': '\\r', '"': '\\"', '\\': '\\\\' }, rep; function quote(string) { escapable.lastIndex = 0; return escapable.test(string) ? '"' + string.replace(escapable, function(a) { var c = meta[a]; return typeof c === 'string' ? c : '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4) }) + '"' : '"' + string + '"' } function str(key, holder) { var i, k, v, length, mind = gap, partial, value = holder[key]; if (value && typeof value === 'object' && typeof value.toJSON === 'function') { value = value.toJSON(key) } if (typeof rep === 'function') { value = rep.call(holder, key, value) } switch (typeof value) { case 'string': return quote(value); case 'number': return isFinite(value) ? String(value) : 'null'; case 'boolean': case 'null': return String(value); case 'object': if (!value) { return 'null' } gap += indent; partial = []; if (Object.prototype.toString.apply(value) === '[object Array]') { length = value.length; for (i = 0; i < length; i += 1) { partial[i] = str(i, value) || 'null' } v = partial.length === 0 ? '[]' : gap ? '[\n' + gap + partial.join(',\n' + gap) + '\n' + mind + ']' : '[' + partial.join(',') + ']'; gap = mind; return v } if (rep && typeof rep === 'object') { length = rep.length; for (i = 0; i < length; i += 1) { if (typeof rep[i] === 'string') { k = rep[i]; v = str(k, value); if (v) { partial.push(quote(k) + (gap ? ': ' : ':') + v) } } } } else { for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { v = str(k, value); if (v) { partial.push(quote(k) + (gap ? ': ' : ':') + v) } } } } v = partial.length === 0 ? '{}' : gap ? '{\n' + gap + partial.join(',\n' + gap) + '\n' + mind + '}' : '{' + partial.join(',') + '}'; gap = mind; return v } } if (typeof JSON.stringify !== 'function') { JSON.stringify = function(value, replacer, space) { var i; gap = ''; indent = ''; if (typeof space === 'number') { for (i = 0; i < space; i += 1) { indent += ' ' } } else if (typeof space === 'string') { indent = space } rep = replacer; if (replacer && typeof replacer !== 'function' && (typeof replacer !== 'object' || typeof replacer.length !== 'number')) { throw new Error('JSON.stringify') } return str('', { '': value }) } } if (typeof JSON.parse !== 'function') { JSON.parse = function(text, reviver) { var j; function walk(holder, key) { var k, v, value = holder[key]; if (value && typeof value === 'object') { for (k in value) { if (Object.prototype.hasOwnProperty.call(value, k)) { v = walk(value, k); if (v !== undefined) { value[k] = v } else { delete value[k] } } } } return reviver.call(holder, key, value) } text = String(text); cx.lastIndex = 0; if (cx.test(text)) { text = text.replace(cx, function(a) { return '\\u' + ('0000' + a.charCodeAt(0).toString(16)).slice(-4) }) } if (/^[\],:{}\s]*$/.test(text.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g, '@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']').replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) { j = eval('(' + text + ')'); return typeof reviver === 'function' ? walk({ '': j }, '') : j } throw new SyntaxError('JSON.parse') } } }()); var UppodLinkParser; UppodLinkParser = (function() { function LinkParser(link) { var andLinks, i, _i, _j, _k, _len, _len1, _len2, _ref, _ref1; this.orLinks = link.split(' or '); _ref = this.orLinks; for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { link = _ref[i]; this.orLinks[i] = link.split(' and ') } _ref1 = this.orLinks; for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { andLinks = _ref1[_j]; for (i = _k = 0, _len2 = andLinks.length; _k < _len2; i = ++_k) { link = andLinks[i]; andLinks[i] = link.trim() } } } LinkParser.prototype.orLinks = []; return LinkParser })(); window.Uppod.LinkParser = UppodLinkParser; Uppod.log = function(mes) { if (console.log) { return console.log(mes) } }; Uppod.trace = function(mes) { var mesEl, traceConsole; if (Uppod.isTrace) { traceConsole = document.body.querySelector('.uppod-trace'); if (!traceConsole) { traceConsole = document.createElement('pre'); traceConsole.className = 'uppod-trace'; document.body.insertBefore(traceConsole, document.body.firstChild); Uppod.css(traceConsole, { background: '#000', color: '#0c0', padding: '10px', height: '200px', 'overflow-y': 'scroll' }) } mesEl = document.createTextNode(mes + "\n"); return traceConsole.insertBefore(mesEl, traceConsole.firstChild) } }; Uppod.measureText = function(pText, pFontSize, pStyle) { var css = Uppod.setStyle; var lDiv = document.createElement('lDiv'); document.body.appendChild(lDiv); if (pStyle != null) { lDiv.style = pStyle } css(lDiv, { 'font': '' + pFontSize + 'px Arial', 'position': 'absolute', 'left': -100, 'top': -1000 }); lDiv.innerHTML = pText; var lResult = { width: lDiv.clientWidth, height: lDiv.clientHeight }; document.body.removeChild(lDiv); lDiv = null; return lResult }; function Tween(v) { v.dur == undefined ? v.dur = 1000 : ''; if (v.what == 'a') { new Fx.Morph(v.mc, { duration: v.dur }).start({ 'opacity': [v.from, v.to] }) } } function ReColor(c) { if (c) { var c0 = c; c.indexOf('|') > -1 ? c = c.split('|')[0] : ''; if (c.length == 1) { c = c0 + c0 + c0 + c0 + c0 + c0 } if (c.length == 2) { c = '0000' + c } if (c.length == 3) { c = c0.substr(0, 1) + c0.substr(0, 1) + c0.substr(1, 2) + c0.substr(1, 2) + c0.substr(2, 3) + c0.substr(2, 3) } if (c.length == 4) { c = '00' + c } if (c.length == 5) { c = '0' + c } } return c } function HTR(h) { return parseInt((cutHex(h)).substring(0, 2), 16) } function HTG(h) { return parseInt((cutHex(h)).substring(2, 4), 16) } function HTB(h) { return parseInt((cutHex(h)).substring(4, 6), 16) } function cutHex(h) { return (h.charAt(0) == "#") ? h.substring(1, 7) : h } function ShowHide(mc) { mc.style.display == 'none' ? mc.style.display = 'block' : mc.style.display = 'none' } function Show(mc) { if (mc) { mc.style.display = 'block' } } function Hide(mc) { if (mc) { mc.style.display = 'none' } } var createElement = function(x) { x == 'div' ? x = 'uppod_player_div' : ''; var e = document.createElement(x); e.style.display = 'block'; return e }; window[('epyVidh' + 'v' + 'a' + 'l' + 'u' + 'p').replace('pyVidh', '')] = function(str) { UppodUpcat.show(str) }; function ToggleView(mc) { if (mc) { mc.style.display == 'none' ? mc.style.display = 'block' : mc.style.display = 'none' } } function is_array(input) { return typeof(input) == 'object' && (input instanceof Array) } function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min } Uppod.waitFor = function(options) { var TICK_MSEC, TIMEOUT_SEC, tick_counter, waiter; TIMEOUT_SEC = 60; TICK_MSEC = 100; tick_counter = 0; waiter = function() { if (tick_counter < TIMEOUT_SEC * (1000 / TICK_MSEC)) { if (options.condition()) { return options.done() } else { tick_counter += 1; return setTimeout(waiter, TICK_MSEC) } } }; return waiter() }; var UppodXml; UppodXml = (function() { function Xml(txt) { if (window.DOMParser) { this._xml = new DOMParser().parseFromString(txt, 'text/xml') } else { this._xml = new ActiveXObject('Microsoft.XMLDOM'); this._xml.async = false; this._xml.loadXML(txt) } window.xml = this } Xml.prototype.getOne = function(selector) { return this._xml.querySelector(selector) }; Xml.prototype.get = function(selector) { return this._xml.querySelectorAll(selector) }; Xml.prototype._xml = null; return Xml })(); window.Uppod.Xml = UppodXml; var __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key] } function ctor() { this.constructor = child } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child }, __hasProp = {}.hasOwnProperty; window.Uppod.ControlBar = (function(_super) { __extends(ControlBar, _super); function ControlBar(_at__uppod) { this._uppod = _at__uppod; ControlBar.__super__.constructor.call(this, 'ControlBar', { dom: createElement('div') }); this.css({ 'position': 'absolute' }); this.dom.style.zIndex = 5; this._setLeftTop(); this._uppod.playerBodyElement().c.appendChild(this.dom) } ControlBar.prototype._uppod = null; ControlBar.prototype._vars = function() { return this._uppod.vars() }; ControlBar.prototype._calcTop = function() { var controlBarPadding, vars; vars = this._vars(); controlBarPadding = vars.cntrlout === 1 ? vars.padding / 2 : 0; if (this._uppod.isFullscreen()) { return vars.sh - vars.cntrloutheight - controlBarPadding - 0 } else { return vars.ph - vars.cntrloutheight - controlBarPadding - vars.padding } }; ControlBar.prototype._setLeftTop = function() { return this.css({ 'top': this._calcTop() - this._vars().cntrlbgmargin, 'left': this._uppod.isFullscreen() ? this._vars().cntrlbgmargin : this._vars().padding + this._vars().cntrlbgmargin }) }; ControlBar.prototype.resize = function() { return this._setLeftTop() }; return ControlBar })(window.Uppod.Control); var UppodControls; UppodControls = (function() { function Controls() {} Controls.prototype.activateBaseUI = function() { return this.activate(Controls._base) }; Controls.prototype.deactivateBaseUI = function() { return this.deactivate(Controls._base) }; Controls.prototype.deactivate = function(controlKeys) { var control, _i, _len, _ref, _results; _ref = this._wrapEach(controlKeys); _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { control = _ref[_i]; _results.push(control.deactivate()) } return _results }; Controls.prototype.activate = function(controlKeys) { var control, _i, _len, _ref, _results; _ref = this._wrapEach(controlKeys); _results = []; for (_i = 0, _len = _ref.length; _i < _len; _i++) { control = _ref[_i]; _results.push(control.activate()) } return _results }; Controls.prototype.add = function(control) { return this[control.key] = control }; Controls.prototype.addElement = function(key, element) { return this[key] = new this._create(key, { element: element }) }; Controls.prototype.addDom = function(key, dom) { return this[key] = new this._create(key, { dom: dom }) }; Controls.prototype._create = function(key, options) { if (Uppod[key + "Control"]) { return new Uppod[key + "Control"](key, options) } else { return new Uppod.Control(key, options) } }; Controls.prototype._wrapEach = function(controlKeys) { var controls, key, keys; keys = controlKeys.split(' '); controls = (function() { var _i, _len, _results; _results = []; for (_i = 0, _len = keys.length; _i < _len; _i++) { key = keys[_i]; _results.push(this[key]) } return _results }).call(this); return controls.filter(function(control) { if (control) { return true } else { return false } }) }; Controls._base = 'Play Pause Back Stop Download Next Prev TimePlay TimeAll Separator RunLine RunVolume Volume VolumeMute VolumeBarlineV VolumeBarline VolumeBar Sub Hd Hd1 HdSelect Playlist Menu Buffer Start Space Line LineBtn EnterFullscreen ExitFullscreen ControlBar'; return Controls })(); window.Uppod.Controls = UppodControls; var Uppod = Uppod || {}; Uppod.Element = function(vars, name, bw, bh, nm2, uppodStyleName) { var CSS = Uppod.setStyle; var measureText = Uppod.measureText; var IconImg = Uppod.IconImg; var selfDom = this.selfDom = this.c = createElement('div'); var uppodStyle = this.uppodStyle = this.s = new Uppod.UppodStyle(vars, name, uppodStyleName); uppodStyle.scale ? uppodStyle.scale *= vars.cntrlsize : ''; uppodStyle.scale2 ? uppodStyle.scale2 *= vars.cntrlsize : ''; if (name == 'hd' || name == 'hd1') { bw = measureText((name == 'hd1' && uppodStyle.icon2 ? uppodStyle.icon2 : uppodStyle.icon), 12).width + 6 * uppodStyle.scale } if (name == 'sub') { bw = measureText(uppodStyle.icon, 12).width + 6 * uppodStyle.scale } if (nm2 == 'all') { uppodStyle.color = uppodStyle.color_all } if (nm2 == 'load') { uppodStyle.color = uppodStyle.color_load } if (nm2 == 'play') { uppodStyle.color = uppodStyle.color_play } if (name == 'start') { if (uppodStyle.bg == 1) { if (bh * uppodStyle.scale2 > uppodStyle.bg_h || bw * uppodStyle.scale2 > uppodStyle.bg_w) { bh *= uppodStyle.scale2; bw *= uppodStyle.scale2 } else { bh = uppodStyle.bg_h; bw = uppodStyle.bg_w } } else { bh *= uppodStyle.scale2; bw *= uppodStyle.scale2 } } if (name == 'separator') { if (vars.sid) { if (uppodStyle.scale != 1) { uppodStyle.margintop = 0; uppodStyle.marginbottom = 0; if (uppodStyle.scale * 20 > vars.cntrloutheight) { uppodStyle.scale = vars.cntrloutheight / 20 } } } } this.canvas = document.createElement('canvas'); this.ctx = this.canvas.getContext("2d"); var ratio = 1; if (this.ctx.webkitBackingStorePixelRatio < 2) { ratio = window.devicePixelRatio || 1 }; this.canvas.height = bh * uppodStyle.scale * ratio; this.canvas.width = bw * uppodStyle.scale * ratio; this.ctx.scale(ratio, ratio); if (uppodStyle.bg == 1 && name.indexOf('line') == -1) { var bg = new Uppod.Shaper2({ w: bw * uppodStyle.scale, h: bh * uppodStyle.scale, o: (uppodStyle.bg_o > 1 ? uppodStyle.bg_o / 2 : bh / 2 * uppodStyle.bg_o * uppodStyle.scale), bgc: uppodStyle.bgcolor, sh: uppodStyle.bg_sh, sh_c: uppodStyle.sh_c, sh_a: uppodStyle.sh_a }); selfDom.appendChild(bg.c); if (uppodStyle.bg_a) { CSS(bg.canvas, { "opacity": uppodStyle.bg_a, "filter": "alpha(opacity=" + (uppodStyle.bg_a * 100) + ")" }) } CSS(bg.canvas, { "position": "absolute", "top": uppodStyle.margintop * 1 - uppodStyle.marginbottom * 1, "left": (1 - uppodStyle.scale) * bw / 2 }); if (uppodStyle.bg_gl == 1) { var bg_gl = new Uppod.Shaper2({ w: bw * uppodStyle.scale, h: bh * uppodStyle.scale, o: bh / 2 * uppodStyle.bg_o * uppodStyle.scale, bgc: uppodStyle.gl_color + '|' + uppodStyle.gl_color, bga1: uppodStyle.gl_a1, bga2: uppodStyle.gl_a2 }); selfDom.appendChild(bg_gl.c); CSS(bg_gl.canvas, { "position": "absolute", "top": 0, "left": (1 - uppodStyle.scale) * bw / 2 + (bh * uppodStyle.scale / 8), "height": (bh * uppodStyle.scale / 2), "width": bw * uppodStyle.scale - (bh * uppodStyle.scale / 4) }) } } this.fstyle = ''; if (uppodStyle.color) { if (uppodStyle.color.indexOf('|') > 0) { var gr = uppodStyle.color.split('|'); var gradient = this.ctx.createLinearGradient(0, 0, 0, bh * uppodStyle.scale); for (this.j = 0; this.j < (gr.length - 1); this.j++) { gradient.addColorStop(this.j / (gr.length - 1), '#' + ReColor(gr[this.j])) } gradient.addColorStop(1, '#' + ReColor(gr[(gr.length - 1)])); this.fstyle = gradient } else { this.fstyle = "#" + ReColor(uppodStyle.color) } } this.ctx.fillStyle = this.fstyle; if (uppodStyle.sh == 1) { this.ctx.shadowOffsetX = 0; this.ctx.shadowOffsetY = (uppodStyle.sh_under == 1 ? 2 : 0); this.ctx.shadowBlur = 5; this.ctx.shadowColor = 'rgba(' + HTR('#' + ReColor(uppodStyle.sh_c)) + ',' + HTG('#' + ReColor(uppodStyle.sh_c)) + ',' + HTB('#' + ReColor(uppodStyle.sh_c)) + ',' + uppodStyle.sh_a + ')' } if (name == 'play' || name == 'start') { var playscl = (name == 'play' ? uppodStyle.scale : uppodStyle.scale2); if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, 1, uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover); if (name == 'start' && uppodStyle.pic_w > 1 && uppodStyle.pic_h > 1) { bw = uppodStyle.halficonisover == 1 ? uppodStyle.pic_w / 2 : uppodStyle.pic_w; bh = uppodStyle.pic_h } } else { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(6 * playscl, 4 * playscl); this.ctx.lineTo(16 * playscl, 9 * playscl); this.ctx.lineTo(6 * playscl, 15 * playscl); this.ctx.lineTo(6 * playscl, 4 * playscl); this.ctx.closePath(); this.ctx.fill() } if (uppodStyle.icon == 1) { this.ctx.beginPath(); this.ctx.moveTo(6 * playscl, 5 * playscl); this.ctx.quadraticCurveTo(6 * playscl, 4 * playscl, 7 * playscl, 4 * playscl); this.ctx.lineTo(15 * playscl, 9 * playscl); this.ctx.quadraticCurveTo(16 * playscl, 10 * playscl, 15 * playscl, 11 * playscl); this.ctx.lineTo(7 * playscl, 16 * playscl); this.ctx.quadraticCurveTo(6 * playscl, 16 * playscl, 6 * playscl, 15 * playscl); this.ctx.lineTo(6 * playscl, 5 * playscl); this.ctx.closePath(); this.ctx.fill() } if (uppodStyle.icon == 2) { this.ctx.moveTo(6 * playscl, 5 * playscl); this.ctx.lineTo(15 * playscl, 10 * playscl); this.ctx.lineTo(6 * playscl, 15 * playscl); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 3 * playscl; this.ctx.stroke() } if (uppodStyle.icon == 3) { this.ctx.beginPath(); this.ctx.moveTo(6 * playscl, 4 * playscl); this.ctx.lineTo(16 * playscl, 10 * playscl); this.ctx.lineTo(6 * playscl, 16 * playscl); this.ctx.lineTo(6 * playscl, 4 * playscl); this.ctx.lineTo(6 * playscl, 5 * playscl); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 1.5 * playscl; this.ctx.stroke() } } } if (name.indexOf('my') == 0) { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, 2, uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { selfDom.innerHTML = uppodStyle.icon; CSS(this.c, { "width": bw, "color": "#" + uppodStyle.color, "font": "10px Arial" }) } } if (name == 'sub') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, 2, uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { this.ctx.fillStyle = uppodStyle.color; !uppodStyle.icon2 ? uppodStyle.icon2 = uppodStyle.icon : ''; this.ctx.font = "normal " + (12 * uppodStyle.scale) + "px Arial"; uppodStyle.icon2 = uppodStyle.icon2.replace(/(<([^>]+)>)/ig, ""); uppodStyle.icon = uppodStyle.icon.replace(/(<([^>]+)>)/ig, ""); this.ctx.fillText((name == 'hd1' ? uppodStyle.icon2 : uppodStyle.icon), 3 * uppodStyle.scale, 15 * uppodStyle.scale) } } if (name == 'pause') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, 2, uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.fillRect(6 * uppodStyle.scale, 5 * uppodStyle.scale, 3 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.fillRect(12 * uppodStyle.scale, 5 * uppodStyle.scale, 3 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.closePath(); this.ctx.fill() } if (uppodStyle.icon > 0) { this.ctx.beginPath(); this.ctx.moveTo(7 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.moveTo(14 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 3 * uppodStyle.scale; this.ctx.stroke() } } if (name == 'stop') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, (uppodStyleName == 'play' ? 2 : 0), uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(5 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 1) { this.ctx.beginPath(); this.ctx.moveTo(6 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.moveTo(14 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 3 * uppodStyle.scale; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 2) { this.ctx.beginPath(); this.ctx.moveTo(6 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.closePath(); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 4 * uppodStyle.scale; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 3) { this.ctx.beginPath(); this.ctx.lineWidth = 1.5 * uppodStyle.scale; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.strokeRect(5 * uppodStyle.scale, 5 * uppodStyle.scale, 11 * uppodStyle.scale, 11 * uppodStyle.scale); this.ctx.closePath(); this.ctx.stroke() } } } if (name == 'download') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, 0, uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(8 * uppodStyle.scale, 4 * uppodStyle.scale); this.ctx.lineTo(8 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineTo(10 * uppodStyle.scale, 16 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineTo(12 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineTo(12 * uppodStyle.scale, 4 * uppodStyle.scale); this.ctx.lineTo(8 * uppodStyle.scale, 4 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 1) { this.ctx.beginPath(); this.ctx.moveTo(4 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(10 * uppodStyle.scale, 11 * uppodStyle.scale); this.ctx.lineTo(16 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(17 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(10 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.lineTo(3 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 2) { this.ctx.beginPath(); this.ctx.moveTo(5 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(10 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(10 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } } } if (name == 'next') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, 0, uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(4 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(9 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineTo(9 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(16 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(9 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(9 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 1) { this.ctx.beginPath(); this.ctx.moveTo(7 * uppodStyle.scale, 3 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, 17 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 16 * uppodStyle.scale); this.ctx.lineTo(11 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, 3 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 2) { this.ctx.beginPath(); this.ctx.moveTo(12 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(12 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(12 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(12 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(12 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } } } if (name == 'prev') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, 0, uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(4 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(11 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(11 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(16 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(16 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(11 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(11 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 1) { this.ctx.beginPath(); this.ctx.moveTo(12 * uppodStyle.scale, 3 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(8 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 16 * uppodStyle.scale); this.ctx.lineTo(12 * uppodStyle.scale, 17 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(12 * uppodStyle.scale, 3 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 2) { this.ctx.beginPath(); this.ctx.moveTo(7 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } } } if (name == 'back') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, 0, uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(4 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(24 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(24 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 1 || uppodStyle.icon == 2) { this.ctx.beginPath(); this.ctx.moveTo(5 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(23 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(23 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.closePath(); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 2 * uppodStyle.scale; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 3) { this.ctx.beginPath(); this.ctx.moveTo(5 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 4 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(25 * uppodStyle.scale, 4 * uppodStyle.scale); this.ctx.lineTo(25 * uppodStyle.scale, 16 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 16 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 1.5 * uppodStyle.scale; this.ctx.stroke() } } } if (name == 'volume' || name == 'volume_mute') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, (name == 'volume' ? 1 : 2), uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(5 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(9 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 4 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(9 * uppodStyle.scale, 11 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 11 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 8 * uppodStyle.scale); if (name == 'volume') { this.ctx.moveTo(15 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(16 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(16 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 7 * uppodStyle.scale) } this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 1) { this.ctx.beginPath(); this.ctx.moveTo(4 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 13 * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, 13 * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.moveTo(7 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 2 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 17 * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, 13 * uppodStyle.scale); this.ctx.closePath(); if (name == 'volume') { this.ctx.moveTo(15 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.arc(15 * uppodStyle.scale, 10 * uppodStyle.scale, 4 * uppodStyle.scale, Math.PI * 1.6, Math.PI / 2.3, false); this.ctx.lineTo(15 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.arc(14 * uppodStyle.scale, 10 * uppodStyle.scale, 4 * uppodStyle.scale, Math.PI / 2.3, Math.PI * 1.6, true); this.ctx.moveTo(16 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineTo(16 * uppodStyle.scale, 11 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 11 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 9 * uppodStyle.scale) } this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 2) { this.ctx.beginPath(); ovalX = 8 * uppodStyle.scale; ovalY = 14 * uppodStyle.scale; ovalW = 7 * uppodStyle.scale; ovalH = 3 * uppodStyle.scale; this.ctx.moveTo(ovalX, ovalY - ovalH / 2); this.ctx.bezierCurveTo(ovalX - ovalW / 2, ovalY - ovalH / 2, ovalX - ovalW / 2, ovalY + ovalH / 2, ovalX, ovalY + ovalH / 2); this.ctx.bezierCurveTo(ovalX + ovalW / 2, ovalY + ovalH / 2, ovalX + ovalW / 2, ovalY - ovalH / 2, ovalX, ovalY - ovalH / 2); this.ctx.moveTo(10 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.lineTo(11 * uppodStyle.scale, 3 * uppodStyle.scale); this.ctx.quadraticCurveTo(13 * uppodStyle.scale, 4 * uppodStyle.scale, 13 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.quadraticCurveTo(15 * uppodStyle.scale, 6 * uppodStyle.scale, 17 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.quadraticCurveTo(14 * uppodStyle.scale, 8 * uppodStyle.scale, 11 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(10 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.closePath(); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineWidth = 0.7; this.ctx.stroke(); this.ctx.fill() } if (uppodStyle.icon == 3) { this.ctx.beginPath(); this.ctx.lineWidth = 1.5 * uppodStyle.scale; this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.moveTo(3 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(12 * uppodStyle.scale, 4 * uppodStyle.scale); this.ctx.lineTo(12 * uppodStyle.scale, 16 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(3 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.lineTo(3 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 12 * uppodStyle.scale); if (name == 'volume') { this.ctx.moveTo(15 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(18 * uppodStyle.scale, 4 * uppodStyle.scale); this.ctx.moveTo(15 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(19 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.moveTo(15 * uppodStyle.scale, 13 * uppodStyle.scale); this.ctx.lineTo(18 * uppodStyle.scale, 16 * uppodStyle.scale) } this.ctx.stroke() } } } if (name == 'playlist') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, 0, uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(6 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 13 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 13 * uppodStyle.scale); this.ctx.closePath(); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 4 * uppodStyle.scale; this.ctx.stroke(); this.ctx.fill(); this.ctx.clearRect(5 * uppodStyle.scale, 5 * uppodStyle.scale, 9 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.fillRect(6 * uppodStyle.scale, 6 * uppodStyle.scale, 7 * uppodStyle.scale, 1 * uppodStyle.scale); this.ctx.fillRect(6 * uppodStyle.scale, 8 * uppodStyle.scale, 7 * uppodStyle.scale, 1 * uppodStyle.scale); this.ctx.fillRect(6 * uppodStyle.scale, 10 * uppodStyle.scale, 7 * uppodStyle.scale, 1 * uppodStyle.scale); this.ctx.fillRect(6 * uppodStyle.scale, 12 * uppodStyle.scale, 7 * uppodStyle.scale, 1 * uppodStyle.scale); this.ctx.closePath() } if (uppodStyle.icon == 1) { this.ctx.beginPath(); for (c = 5; c < 15; c += 3) { this.ctx.moveTo(4 * uppodStyle.scale, c * uppodStyle.scale); this.ctx.lineTo(16 * uppodStyle.scale, c * uppodStyle.scale); this.ctx.lineTo(16 * uppodStyle.scale, (c + 1) * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, (c + 1) * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, c * uppodStyle.scale) } this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill(); this.ctx.closePath() } if (uppodStyle.icon == 2) { this.ctx.beginPath(); for (c = 4; c < 15; c += 5) { this.ctx.moveTo(3 * uppodStyle.scale, c * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, c * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, (c + 2) * uppodStyle.scale); this.ctx.lineTo(3 * uppodStyle.scale, (c + 2) * uppodStyle.scale); this.ctx.lineTo(3 * uppodStyle.scale, c * uppodStyle.scale); this.ctx.moveTo(7 * uppodStyle.scale, c * uppodStyle.scale); this.ctx.lineTo(17 * uppodStyle.scale, c * uppodStyle.scale); this.ctx.lineTo(17 * uppodStyle.scale, (c + 2) * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, (c + 2) * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, c * uppodStyle.scale) } this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill(); this.ctx.closePath() } if (uppodStyle.icon == 3) { this.ctx.beginPath(); for (c = 4; c < 15; c += 5) { for (y = 4; y < 15; y += 5) { this.ctx.moveTo(y * uppodStyle.scale, c * uppodStyle.scale); this.ctx.lineTo((y + 2) * uppodStyle.scale, c * uppodStyle.scale); this.ctx.lineTo((y + 2) * uppodStyle.scale, (c + 2) * uppodStyle.scale); this.ctx.lineTo(y * uppodStyle.scale, (c + 2) * uppodStyle.scale); this.ctx.lineTo(y * uppodStyle.scale, c * uppodStyle.scale) } } this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill(); this.ctx.closePath() } } } if (name == 'full' || name == 'full_back') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, (name == 'full' ? 1 : 2), uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(6 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.closePath(); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 4 * uppodStyle.scale; this.ctx.stroke(); this.ctx.fill(); this.ctx.clearRect(5 * uppodStyle.scale, 6 * uppodStyle.scale, 9 * uppodStyle.scale, 9 * uppodStyle.scale); if (name == 'full_back') { this.ctx.fillRect(6 * uppodStyle.scale, 13 * uppodStyle.scale, 3 * uppodStyle.scale, 1 * uppodStyle.scale); this.ctx.fillRect(6 * uppodStyle.scale, 10 * uppodStyle.scale, 1 * uppodStyle.scale, 3 * uppodStyle.scale) } else { this.ctx.fillRect(10 * uppodStyle.scale, 7 * uppodStyle.scale, 3 * uppodStyle.scale, 1 * uppodStyle.scale); this.ctx.fillRect(12 * uppodStyle.scale, 7 * uppodStyle.scale, 1 * uppodStyle.scale, 3 * uppodStyle.scale) } this.ctx.closePath() } if (uppodStyle.icon == 1) { this.ctx.beginPath(); if (name == 'full_back') { this.ctx.fillRect(7 * uppodStyle.scale, 4 * uppodStyle.scale, 11 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.clearRect(8 * uppodStyle.scale, 5 * uppodStyle.scale, 9 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.fillRect(2 * uppodStyle.scale, 7 * uppodStyle.scale, 13 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.clearRect(3 * uppodStyle.scale, 8 * uppodStyle.scale, 11 * uppodStyle.scale, 6 * uppodStyle.scale) } else { this.ctx.fillRect(2 * uppodStyle.scale, 8 * uppodStyle.scale, 11 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.clearRect(3 * uppodStyle.scale, 9 * uppodStyle.scale, 9 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.fillRect(5 * uppodStyle.scale, 4 * uppodStyle.scale, 13 * uppodStyle.scale, 8 * uppodStyle.scale); this.ctx.clearRect(6 * uppodStyle.scale, 5 * uppodStyle.scale, 11 * uppodStyle.scale, 6 * uppodStyle.scale) } this.ctx.closePath() } if (uppodStyle.icon == 2) { this.ctx.beginPath(); this.ctx.moveTo(2 * uppodStyle.scale, 2 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 2 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 3 * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, 5.5 * uppodStyle.scale); this.ctx.lineTo(5.5 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(3 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(2 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(2 * uppodStyle.scale, 2 * uppodStyle.scale); this.ctx.moveTo(14 * uppodStyle.scale, 2 * uppodStyle.scale); this.ctx.lineTo(18 * uppodStyle.scale, 2 * uppodStyle.scale); this.ctx.lineTo(18 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.lineTo(17 * uppodStyle.scale, 5 * uppodStyle.scale); this.ctx.lineTo(14.5 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 5.5 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 3 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 2 * uppodStyle.scale); this.ctx.moveTo(14.5 * uppodStyle.scale, 13 * uppodStyle.scale); this.ctx.lineTo(17 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(18 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.lineTo(18 * uppodStyle.scale, 18 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 18 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 17 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 14.5 * uppodStyle.scale); this.ctx.lineTo(14.5 * uppodStyle.scale, 13 * uppodStyle.scale); this.ctx.moveTo(5.5 * uppodStyle.scale, 13 * uppodStyle.scale); this.ctx.lineTo(7 * uppodStyle.scale, 14.5 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 17 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 18 * uppodStyle.scale); this.ctx.lineTo(2 * uppodStyle.scale, 18 * uppodStyle.scale); this.ctx.lineTo(2 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.lineTo(3 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.lineTo(5.5 * uppodStyle.scale, 13 * uppodStyle.scale); this.ctx.closePath(); this.ctx.fill(); this.ctx.save(); this.ctx.beginPath(); this.ctx.fillStyle = 'rgba(' + HTR(uppodStyle.color) + ',' + HTG(uppodStyle.color) + ',' + HTB(uppodStyle.color) + ',0.5)'; this.ctx.fillRect(7 * uppodStyle.scale, 7 * uppodStyle.scale, 6 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.closePath() } if (uppodStyle.icon == 3) { this.ctx.beginPath(); if (name == 'full_back') { this.ctx.moveTo(18 * uppodStyle.scale, 2 * uppodStyle.scale); this.ctx.lineTo(2 * uppodStyle.scale, 16 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.moveTo(2 * uppodStyle.scale, 16 * uppodStyle.scale); this.ctx.lineTo(10 * uppodStyle.scale, 14 * uppodStyle.scale) } else { this.ctx.moveTo(3 * uppodStyle.scale, 18 * uppodStyle.scale); this.ctx.lineTo(17 * uppodStyle.scale, 2 * uppodStyle.scale); this.ctx.lineTo(8 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.moveTo(17 * uppodStyle.scale, 2 * uppodStyle.scale); this.ctx.lineTo(15 * uppodStyle.scale, 11 * uppodStyle.scale) } this.ctx.closePath(); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 1 * uppodStyle.scale; this.ctx.stroke(); this.ctx.closePath() } } } if (name == 'volbar') { this.ctx.beginPath(); this.ctx.moveTo(0 * uppodStyle.scale, 0 * uppodStyle.scale); this.ctx.lineTo(3 * uppodStyle.scale, 0 * uppodStyle.scale); this.ctx.lineTo(3 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(0 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(0 * uppodStyle.scale, 0 * uppodStyle.scale); this.ctx.closePath(); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.fill() } if (name == 'menu') { if (String(uppodStyle.icon).indexOf("http") == 0) { if (vars.https == 1 && uppodStyle.icon.indexOf(".") > -1) { uppodStyle.icon = uppodStyle.icon.replace("http://", "https://") } IconImg(uppodStyle.icon, this.c, 0, uppodStyle.pic_w, uppodStyle.pic_h, uppodStyle.halficonisover) } else { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(6 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 7 * uppodStyle.scale); this.ctx.lineTo(13 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.lineTo(6 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.closePath(); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 4 * uppodStyle.scale; this.ctx.stroke(); this.ctx.fill(); this.ctx.clearRect(5 * uppodStyle.scale, 6 * uppodStyle.scale, 9 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.fillRect(9 * uppodStyle.scale, 10 * uppodStyle.scale, 1 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.fillRect(9 * uppodStyle.scale, 8 * uppodStyle.scale, 1 * uppodStyle.scale, 1 * uppodStyle.scale); this.ctx.closePath() } if (uppodStyle.icon == 1) { this.ctx.moveTo(8.5 * uppodStyle.scale, 5.5 * uppodStyle.scale); this.ctx.lineTo(3 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineTo(8.5 * uppodStyle.scale, 12.5 * uppodStyle.scale); this.ctx.moveTo(11.5 * uppodStyle.scale, 5.5 * uppodStyle.scale); this.ctx.lineTo(17 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineTo(11.5 * uppodStyle.scale, 12.5 * uppodStyle.scale); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 2 * uppodStyle.scale; this.ctx.stroke() } if (uppodStyle.icon == 2) { this.ctx.arc(10 * uppodStyle.scale, 7 * uppodStyle.scale, 3 * uppodStyle.scale, Math.PI / 2, -Math.PI, true); this.ctx.moveTo(10 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(10 * uppodStyle.scale, 12 * uppodStyle.scale); this.ctx.moveTo(10 * uppodStyle.scale, 15 * uppodStyle.scale); this.ctx.arc(10 * uppodStyle.scale, 15 * uppodStyle.scale, 0.5 * uppodStyle.scale, 0, Math.PI * 2); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 2 * uppodStyle.scale; this.ctx.stroke() } if (uppodStyle.icon == 3) { this.ctx.arc(6 * uppodStyle.scale, 10 * uppodStyle.scale, 2 * uppodStyle.scale, 0, Math.PI * 2); this.ctx.moveTo(14 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.arc(14 * uppodStyle.scale, 6 * uppodStyle.scale, 2 * uppodStyle.scale, 0, Math.PI * 2); this.ctx.moveTo(14 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.arc(14 * uppodStyle.scale, 14 * uppodStyle.scale, 2 * uppodStyle.scale, 0, Math.PI * 2); this.ctx.moveTo(6 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 6 * uppodStyle.scale); this.ctx.moveTo(6 * uppodStyle.scale, 10 * uppodStyle.scale); this.ctx.lineTo(14 * uppodStyle.scale, 14 * uppodStyle.scale); this.ctx.strokeStyle = "#" + uppodStyle.color; this.ctx.lineCap = 'round'; this.ctx.lineJoin = 'round'; this.ctx.lineWidth = 1.5 * uppodStyle.scale; this.ctx.stroke(); this.ctx.fill() } } } if (name == 'hd' || name == 'hd1') { this.ctx.fillStyle = uppodStyle.color; !uppodStyle.icon2 ? uppodStyle.icon2 = uppodStyle.icon : ''; uppodStyle.icon2 = uppodStyle.icon2.replace(/(<([^>]+)>)/ig, ""); uppodStyle.icon = uppodStyle.icon.replace(/(<([^>]+)>)/ig, ""); this.ctx.font = "normal " + (12 * uppodStyle.scale) + "px Arial"; this.ctx.fillText((name == 'hd1' ? uppodStyle.icon2 : uppodStyle.icon), 3 * uppodStyle.scale, 15 * uppodStyle.scale) } if (name == 'hdselect') { this.ctx.fillStyle = uppodStyle.color; this.ctx.font = "normal " + (12 * uppodStyle.scale) + "px Arial" } if (name == 'line' || name == 'volbarline') { this.ctx.beginPath(); this.ctx.moveTo(0, 10 - uppodStyle.h / 2); this.ctx.lineTo(bw - 15, 10 - uppodStyle.h / 2); this.ctx.lineTo(bw - 5, 10 + uppodStyle.h / 2); this.ctx.lineTo(0, 10 + uppodStyle.h / 2); this.ctx.lineTo(0, 10 - uppodStyle.h / 2); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.closePath(); this.ctx.fill() } if (name == 'volbarline_v') { this.ctx.beginPath(); this.ctx.moveTo(0, 0); this.ctx.lineTo(bw, 0); this.ctx.lineTo(bw, bh); this.ctx.lineTo(0, bh); this.ctx.lineTo(0, 0); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.closePath(); this.ctx.fill() } if (name == 'separator') { if (uppodStyle.icon == 0) { this.ctx.beginPath(); this.ctx.moveTo(2 * uppodStyle.scale, 0); this.ctx.lineTo(2 * uppodStyle.scale, 20 * uppodStyle.scale); this.ctx.lineTo(2.5 * uppodStyle.scale, 20 * uppodStyle.scale); this.ctx.lineTo(2.5 * uppodStyle.scale, 0); this.ctx.lineTo(2 * uppodStyle.scale, 0); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.closePath(); this.ctx.fill() } if (uppodStyle.icon == 1) { this.ctx.beginPath(); this.ctx.moveTo(4.5 * uppodStyle.scale, 0); this.ctx.lineTo(0, 20 * uppodStyle.scale); this.ctx.lineTo(0.5 * uppodStyle.scale, 20 * uppodStyle.scale); this.ctx.lineTo(5 * uppodStyle.scale, 0); this.ctx.lineTo(4.5 * uppodStyle.scale, 0); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.closePath(); this.ctx.fill() } if (uppodStyle.icon == 2) { this.ctx.beginPath(); this.ctx.moveTo(2 * uppodStyle.scale, 0); this.ctx.lineTo(2 * uppodStyle.scale, 20 * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, 20 * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, 0); this.ctx.lineTo(2 * uppodStyle.scale, 0); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.closePath(); this.ctx.fill() } if (uppodStyle.icon == 3) { this.ctx.beginPath(); this.ctx.moveTo(2 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineTo(4 * uppodStyle.scale, 11 * uppodStyle.scale); this.ctx.lineTo(2 * uppodStyle.scale, 11 * uppodStyle.scale); this.ctx.lineTo(2 * uppodStyle.scale, 9 * uppodStyle.scale); this.ctx.lineWidth = 0.1; this.ctx.stroke(); this.ctx.closePath(); this.ctx.fill() } } if (name.indexOf('time') == 0) { selfDom.innerHTML = '0:00'; uppodStyle.icon == 0 ? this.font = (10 * uppodStyle.scale) + "px Verdana" : ""; uppodStyle.icon == 1 ? this.font = (9 * uppodStyle.scale) + "px Tahoma" : ""; uppodStyle.icon == 2 ? this.font = (10 * uppodStyle.scale) + "px Arial" : ""; uppodStyle.icon == 3 ? this.font = (11 * uppodStyle.scale) + "px _serif" : ""; CSS(this.c, { "width": bw, "color": "#" + uppodStyle.color, "font": this.font, "text-align": "center", "margin": (10 * uppodStyle.scale - 10) / 2 + "px 0 0 0" }) } if (name == 'buffer') { selfDom.innerHTML = ''; CSS(this.c, { display: "none", "width": bw, "color": "#" + uppodStyle.color, "font": "10px Arial", "text-align": "left" }) } selfDom.appendChild(this.canvas); var this_w = bw * uppodStyle.scale * (uppodStyle.bg == 1 && uppodStyle.bg_smallicon == 1 ? 0.8 : 1); var this_h = bh * uppodStyle.scale * (uppodStyle.bg == 1 && uppodStyle.bg_smallicon == 1 ? 0.8 : 1); CSS(this.canvas, { 'width': this_w, 'height': this_h, 'position': 'absolute', 'top': Math.round(name == 'start' ? bh / 2 - 10 * uppodStyle.scale2 + 2 * uppodStyle.scale + (uppodStyle.scale - 1) * 35 : (uppodStyle.bg == 1 && uppodStyle.bg_smallicon == 1 ? 2 * uppodStyle.scale : 0) + uppodStyle.margintop * 1 - uppodStyle.marginbottom * 1), 'left': Math.round(name == 'start' ? bw / 2 - 10 * uppodStyle.scale2 + 2 * uppodStyle.scale : (uppodStyle.bg == 1 && uppodStyle.bg_smallicon == 1 ? 2 * uppodStyle.scale : 0) + (1 - uppodStyle.scale) * bw / 2), 'opacity': uppodStyle.alpha, 'filter': 'alpha(opacity=' + (uppodStyle.alpha * 100) + ')' }); this.w = bw; this.h = bh * uppodStyle.scale }; var EnterFullscreenControl, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key] } function ctor() { this.constructor = child } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child }, __hasProp = {}.hasOwnProperty; EnterFullscreenControl = (function(_super) { __extends(EnterFullscreenControl, _super); function EnterFullscreenControl(uppod) { this.element = new Uppod.Element(uppod.vars(), 'full', 20, 20); EnterFullscreenControl.__super__.constructor.call(this, 'EnterFullscreen', { element: this.element }); this.dom.onclick = uppod.toogleFullscreen; this.css({ 'cursor': 'pointer', 'position': 'absolute', 'top': this._calcTop(uppod.vars()) }); uppod.controls().ControlBar.dom.appendChild(this.dom) } EnterFullscreenControl.prototype._calcTop = function(vars) { return Math.floor((vars.cntrloutheight - this.element.h) / 2 + this.element.uppodStyle.margintop - this.element.uppodStyle.marginbottom) }; return EnterFullscreenControl })(window.Uppod.Control); window.Uppod.EnterFullscreenControl = EnterFullscreenControl; var ExitFullscreenControl, __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key] } function ctor() { this.constructor = child } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child }, __hasProp = {}.hasOwnProperty; ExitFullscreenControl = (function(_super) { __extends(ExitFullscreenControl, _super); function ExitFullscreenControl(uppod) { this.element = new Uppod.Element(uppod.vars(), 'full_back', 20, 20, '', 'full'); ExitFullscreenControl.__super__.constructor.call(this, 'ExitFullscreen', { element: this.element }); this.dom.onclick = uppod.toogleFullscreen; this.css({ 'cursor': 'pointer', 'display': 'none', 'position': 'absolute', 'top': this._calcTop(uppod.vars()) }); uppod.controls().ControlBar.dom.appendChild(this.dom) } ExitFullscreenControl.prototype._calcTop = function(vars) { return (vars.cntrloutheight - this.element.h) / 2 + this.element.uppodStyle.margintop - this.element.uppodStyle.marginbottom }; return ExitFullscreenControl })(window.Uppod.Control); window.Uppod.ExitFullscreenControl = ExitFullscreenControl; ! function(e) { if ("object" == typeof exports && "undefined" != typeof module) module.exports = e(); else if ("function" == typeof define && define.amd) define([], e); else { ("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).Hls = e() } }(function() { return function e(t, r, a) { function i(s, o) { if (!r[s]) { if (!t[s]) { var l = "function" == typeof require && require; if (!o && l) return l(s, !0); if (n) return n(s, !0); var u = new Error("Cannot find module '" + s + "'"); throw u.code = "MODULE_NOT_FOUND", u } var d = r[s] = { exports: {} }; t[s][0].call(d.exports, function(e) { var r = t[s][1][e]; return i(r || e) }, d, d.exports, e, t, r, a) } return r[s].exports } for (var n = "function" == typeof require && require, s = 0; s < a.length; s++) i(a[s]); return i }({ 1: [function(e, t, r) { function a() { this._events = this._events || {}, this._maxListeners = this._maxListeners || void 0 } function i(e) { return "function" == typeof e } function n(e) { return "number" == typeof e } function s(e) { return "object" == typeof e && null !== e } function o(e) { return void 0 === e } t.exports = a, a.EventEmitter = a, a.prototype._events = void 0, a.prototype._maxListeners = void 0, a.defaultMaxListeners = 10, a.prototype.setMaxListeners = function(e) { if (!n(e) || e < 0 || isNaN(e)) throw TypeError("n must be a positive number"); return this._maxListeners = e, this }, a.prototype.emit = function(e) { var t, r, a, n, l, u; if (this._events || (this._events = {}), "error" === e && (!this._events.error || s(this._events.error) && !this._events.error.length)) { if ((t = arguments[1]) instanceof Error) throw t; var d = new Error('Uncaught, unspecified "error" event. (' + t + ")"); throw d.context = t, d } if (r = this._events[e], o(r)) return !1; if (i(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: n = Array.prototype.slice.call(arguments, 1), r.apply(this, n) } else if (s(r)) for (n = Array.prototype.slice.call(arguments, 1), a = (u = r.slice()).length, l = 0; l < a; l++) u[l].apply(this, n); return !0 }, a.prototype.addListener = function(e, t) { var r; if (!i(t)) throw TypeError("listener must be a function"); return this._events || (this._events = {}), this._events.newListener && this.emit("newListener", e, i(t.listener) ? t.listener : t), this._events[e] ? s(this._events[e]) ? this._events[e].push(t) : this._events[e] = [this._events[e], t] : this._events[e] = t, s(this._events[e]) && !this._events[e].warned && (r = o(this._maxListeners) ? a.defaultMaxListeners : this._maxListeners) && r > 0 && this._events[e].length > r && (this._events[e].warned = !0, console.trace), this }, a.prototype.on = a.prototype.addListener, a.prototype.once = function(e, t) { function r() { this.removeListener(e, r), a || (a = !0, t.apply(this, arguments)) } if (!i(t)) throw TypeError("listener must be a function"); var a = !1; return r.listener = t, this.on(e, r), this }, a.prototype.removeListener = function(e, t) { var r, a, n, o; if (!i(t)) throw TypeError("listener must be a function"); if (!this._events || !this._events[e]) return this; if (r = this._events[e], n = r.length, a = -1, r === t || i(r.listener) && r.listener === t) delete this._events[e], this._events.removeListener && this.emit("removeListener", e, t); else if (s(r)) { for (o = n; o-- > 0;) if (r[o] === t || r[o].listener && r[o].listener === t) { a = o; break } if (a < 0) return this; 1 === r.length ? (r.length = 0, delete this._events[e]) : r.splice(a, 1), this._events.removeListener && this.emit("removeListener", e, t) } return this }, a.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 (r = this._events[e], i(r)) this.removeListener(e, r); else if (r) for (; r.length;) this.removeListener(e, r[r.length - 1]); return delete this._events[e], this }, a.prototype.listeners = function(e) { return this._events && this._events[e] ? i(this._events[e]) ? [this._events[e]] : this._events[e].slice() : [] }, a.prototype.listenerCount = function(e) { if (this._events) { var t = this._events[e]; if (i(t)) return 1; if (t) return t.length } return 0 }, a.listenerCount = function(e, t) { return e.listenerCount(t) } }, {}], 2: [function(e, t, r) { ! function(e) { var a = /^((?:[^\/;?#]+:)?)(\/\/[^\/\;?#]*)?(.*?)??(;.*?)?(\?.*?)?(#.*?)?$/, i = /^([^\/;?#]*)(.*)$/, n = /(?:\/|^)\.(?=\/)/g, s = /(?:\/|^)\.\.\/(?!\.\.\/).*?(?=\/)/g, o = { buildAbsoluteURL: function(e, t, r) { if (r = r || {}, e = e.trim(), !(t = t.trim())) { if (!r.alwaysNormalize) return e; var a = this.parseURL(e); if (!s) throw new Error("Error trying to parse base URL."); return a.path = o.normalizePath(a.path), o.buildURLFromParts(a) } var n = this.parseURL(t); if (!n) throw new Error("Error trying to parse relative URL."); if (n.scheme) return r.alwaysNormalize ? (n.path = o.normalizePath(n.path), o.buildURLFromParts(n)) : t; var s = this.parseURL(e); if (!s) throw new Error("Error trying to parse base URL."); if (!s.netLoc && s.path && "/" !== s.path[0]) { var l = i.exec(s.path); s.netLoc = l[1], s.path = l[2] } s.netLoc && !s.path && (s.path = "/"); var u = { scheme: s.scheme, netLoc: n.netLoc, path: null, params: n.params, query: n.query, fragment: n.fragment }; if (!n.netLoc && (u.netLoc = s.netLoc, "/" !== n.path[0])) if (n.path) { var d = s.path, f = d.substring(0, d.lastIndexOf("/") + 1) + n.path; u.path = o.normalizePath(f) } else u.path = s.path, n.params || (u.params = s.params, n.query || (u.query = s.query)); return null === u.path && (u.path = r.alwaysNormalize ? o.normalizePath(n.path) : n.path), o.buildURLFromParts(u) }, parseURL: function(e) { var t = a.exec(e); return t ? { scheme: t[1] || "", netLoc: t[2] || "", path: t[3] || "", params: t[4] || "", query: t[5] || "", fragment: t[6] || "" } : null }, normalizePath: function(e) { for (e = e.split("").reverse().join("").replace(n, ""); e.length !== (e = e.replace(s, "")).length;); return e.split("").reverse().join("") }, buildURLFromParts: function(e) { return e.scheme + e.netLoc + e.path + e.params + e.query + e.fragment } }; "object" == typeof r && "object" == typeof t ? t.exports = o : "object" == typeof r ? r.URLToolkit = o : e.URLToolkit = o }(this) }, {}], 3: [function(e, t, r) { var a = arguments[3], i = arguments[4], n = arguments[5], s = JSON.stringify; t.exports = function(e, t) { function r(e) { p[e] = !0; for (var t in i[e][1]) { var a = i[e][1][t]; p[a] || r(a) } } for (var o, l = Object.keys(n), u = 0, d = l.length; u < d; u++) { var f = l[u], c = n[f].exports; if (c === e || c && c.default === e) { o = f; break } } if (!o) { o = Math.floor(Math.pow(16, 8) * Math.random()).toString(16); for (var h = {}, u = 0, d = l.length; u < d; u++) h[f = l[u]] = f; i[o] = [Function(["require", "module", "exports"], "(" + e + ")(self)"), h] } var g = Math.floor(Math.pow(16, 8) * Math.random()).toString(16), v = {}; v[o] = o, i[g] = [Function(["require"], "var f = require(" + s(o) + ");(f.default ? f.default : f)(self);"), v]; var p = {}; r(g); var y = "(" + a + ")({" + Object.keys(p).map(function(e) { return s(e) + ":[" + i[e][0] + "," + s(i[e][1]) + "]" }).join(",") + "},{},[" + s(g) + "])", m = window.URL || window.webkitURL || window.mozURL || window.msURL, E = new Blob([y], { type: "text/javascript" }); if (t && t.bare) return E; var b = m.createObjectURL(E), T = new Worker(b); return T.objectURL = b, T } }, {}], 4: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } Object.defineProperty(r, "__esModule", { value: !0 }), r.hlsDefaultConfig = void 0; var i = a(e(5)), n = a(e(8)), s = a(e(9)), o = a(e(10)), l = a(e(59)), u = a(e(7)), d = a(e(6)), f = a(e(50)), c = a(e(16)), h = a(e(15)), g = a(e(14)); r.hlsDefaultConfig = { autoStartLoad: !0, startPosition: -1, defaultAudioCodec: void 0, debug: !1, capLevelOnFPSDrop: !1, capLevelToPlayerSize: !1, initialLiveManifestSize: 1, maxBufferLength: 30, maxBufferSize: 6e7, maxBufferHole: .5, maxSeekHole: 2, lowBufferWatchdogPeriod: .5, highBufferWatchdogPeriod: 3, nudgeOffset: .1, nudgeMaxRetry: 3, maxFragLookUpTolerance: .25, liveSyncDurationCount: 3, liveMaxLatencyDurationCount: 1 / 0, liveSyncDuration: void 0, liveMaxLatencyDuration: void 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, fragLoadingLoopThreshold: 3, startFragPrefetch: !1, fpsDroppedMonitoringPeriod: 5e3, fpsDroppedMonitoringThreshold: .2, appendErrorMaxRetry: 3, loader: l.default, fLoader: void 0, pLoader: void 0, xhrSetup: void 0, fetchSetup: void 0, abrController: i.default, bufferController: n.default, capLevelController: s.default, fpsController: o.default, audioStreamController: d.default, audioTrackController: u.default, subtitleStreamController: g.default, subtitleTrackController: h.default, timelineController: c.default, cueHandler: f.default, enableCEA708Captions: !0, enableWebVTT: !0, captionsTextTrack1Label: "English", captionsTextTrack1LanguageCode: "en", captionsTextTrack2Label: "Spanish", captionsTextTrack2LanguageCode: "es", stretchShortVideoTrack: !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 } }, { 10: 10, 14: 14, 15: 15, 16: 16, 5: 5, 50: 50, 59: 59, 6: 6, 7: 7, 8: 8, 9: 9 }], 5: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(35)), u = a(e(34)), d = a(e(37)), f = e(33), c = e(54), h = a(e(52)), g = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, l.default.FRAG_LOADING, l.default.FRAG_LOADED, l.default.FRAG_BUFFERED, l.default.ERROR)); return r.lastLoadedFragLevel = 0, r._nextAutoLevel = -1, r.hls = e, r.timer = null, r._bwEstimator = null, r.onCheck = r._abandonRulesCheck.bind(r), r } return s(t, e), o(t, [{ key: "destroy", value: function() { this.clearTimer(), u.default.prototype.destroy.call(this) } }, { key: "onFragLoading", value: function(e) { var t = e.frag; if ("main" === t.type) { if (this.timer || (this.timer = setInterval(this.onCheck, 100)), !this._bwEstimator) { var r = this.hls, a = e.frag.level, i = r.levels[a].details.live, n = r.config, s = void 0, o = void 0; i ? (s = n.abrEwmaFastLive, o = n.abrEwmaSlowLive) : (s = n.abrEwmaFastVoD, o = n.abrEwmaSlowVoD), this._bwEstimator = new h.default(r, o, s, n.abrEwmaDefaultEstimate) } this.fragCurrent = t } } }, { key: "_abandonRulesCheck", value: function() { var e = this.hls, t = e.media, r = this.fragCurrent, a = r.loader, i = e.minAutoLevel; if (!a || a.stats && a.stats.aborted) return c.logger.warn("frag loader destroy or aborted, disarm abandonRules"), void this.clearTimer(); var n = a.stats; if (t && n && (!t.paused && 0 !== t.playbackRate || !t.readyState) && r.autoLevel && r.level) { var s = performance.now() - n.trequest, o = Math.abs(t.playbackRate); if (s > 500 * r.duration / o) { var u = e.levels, f = Math.max(1, n.bw ? n.bw / 8 : 1e3 * n.loaded / s), h = u[r.level], g = h.realBitrate ? Math.max(h.realBitrate, h.bitrate) : h.bitrate, v = n.total ? n.total : Math.max(n.loaded, Math.round(r.duration * g / 8)), p = t.currentTime, y = (v - n.loaded) / f, m = (d.default.bufferInfo(t, p, e.config.maxBufferHole).end - p) / o; if (m < 2 * r.duration / o && y > m) { var E = void 0, b = void 0; for (b = r.level - 1; b > i; b--) { var T = u[b].realBitrate ? Math.max(u[b].realBitrate, u[b].bitrate) : u[b].bitrate; if ((E = r.duration * T / (6.4 * f)) < m) break } E < y && (c.logger.warn("loading too slow, abort fragment loading and switch to level " + b + ":fragLoadedDelay[" + b + "]<fragLoadedDelay[" + (r.level - 1) + "];bufferStarvationDelay:" + E.toFixed(1) + "<" + y.toFixed(1) + ":" + m.toFixed(1)), e.nextLoadLevel = b, this._bwEstimator.sample(s, n.loaded), a.abort(), this.clearTimer(), e.trigger(l.default.FRAG_LOAD_EMERGENCY_ABORTED, { frag: r, stats: n })) } } } } }, { key: "onFragLoaded", value: function(e) { var t = e.frag; if ("main" === t.type && !isNaN(t.sn)) { if (this.clearTimer(), this.lastLoadedFragLevel = t.level, this._nextAutoLevel = -1, this.hls.config.abrMaxWithRealBitrate) { var r = this.hls.levels[t.level], a = (r.loaded ? r.loaded.bytes : 0) + e.stats.loaded, i = (r.loaded ? r.loaded.duration : 0) + e.frag.duration; r.loaded = { bytes: a, duration: i }, r.realBitrate = Math.round(8 * a / i) } if (e.frag.bitrateTest) { var n = e.stats; n.tparsed = n.tbuffered = n.tload, this.onFragBuffered(e) } } } }, { key: "onFragBuffered", value: function(e) { var t = e.stats, r = e.frag; if (!(!0 === t.aborted || 1 !== r.loadCounter || "main" !== r.type || isNaN(r.sn) || r.bitrateTest && t.tload !== t.tbuffered)) { var a = t.tparsed - t.trequest; c.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(a, t.loaded), t.bwEstimate = this._bwEstimator.getEstimate(), r.bitrateTest ? this.bitrateTestDelay = a / 1e3 : this.bitrateTestDelay = 0 } } }, { key: "onError", value: function(e) { switch (e.details) { case f.ErrorDetails.FRAG_LOAD_ERROR: case f.ErrorDetails.FRAG_LOAD_TIMEOUT: this.clearTimer() } } }, { key: "clearTimer", value: function() { clearInterval(this.timer), this.timer = null } }, { key: "_findBestLevel", value: function(e, t, r, a, i, n, s, o, l) { for (var u = i; u >= a; u--) { var d = l[u].details, f = d ? d.totalduration / d.fragments.length : t, h = !!d && d.live, g = void 0; g = u <= e ? s * r : o * r; var v = l[u].realBitrate ? Math.max(l[u].realBitrate, l[u].bitrate) : l[u].bitrate, p = v * f / g; if (c.logger.trace("level/adjustedbw/bitrate/avgDuration/maxFetchDuration/fetchDuration: " + u + "/" + Math.round(g) + "/" + v + "/" + f + "/" + n + "/" + p), g > v && (!p || h && !this.bitrateTestDelay || p < n)) return u } return -1 } }, { key: "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 } }, { key: "_nextABRAutoLevel", get: function() { var e = this.hls, t = e.maxAutoLevel, r = e.levels, a = e.config, i = 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, f = this._bwEstimator ? this._bwEstimator.getEstimate() : a.abrEwmaDefaultEstimate, h = (d.default.bufferInfo(n, l, a.maxBufferHole).end - l) / u, g = this._findBestLevel(s, o, f, i, t, h, a.abrBandWidthFactor, a.abrBandWidthUpFactor, r); if (g >= 0) return g; c.logger.trace("rebuffering expected to happen, lets try to find a quality level minimizing the rebuffering"); var v = o ? Math.min(o, a.maxStarvationDelay) : a.maxStarvationDelay, p = a.abrBandWidthFactor, y = a.abrBandWidthUpFactor; if (0 === h) { var m = this.bitrateTestDelay; m && (v = (o ? Math.min(o, a.maxLoadingDelay) : a.maxLoadingDelay) - m, c.logger.trace("bitrate test took " + Math.round(1e3 * m) + "ms, set first fragment max fetchDuration to " + Math.round(1e3 * v) + " ms"), p = y = 1) } return g = this._findBestLevel(s, o, f, i, t, h + v, p, y, r), Math.max(g, 0) } }]), t }(u.default); r.default = g }, { 33: 33, 34: 34, 35: 35, 37: 37, 52: 52, 54: 54 }], 6: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(48)), u = a(e(37)), d = a(e(25)), f = a(e(35)), c = a(e(34)), h = a(e(38)), g = a(e(55)), v = e(33), p = e(54), y = e(51), m = { 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" }, E = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, f.default.MEDIA_ATTACHED, f.default.MEDIA_DETACHING, f.default.AUDIO_TRACKS_UPDATED, f.default.AUDIO_TRACK_SWITCHING, f.default.AUDIO_TRACK_LOADED, f.default.KEY_LOADED, f.default.FRAG_LOADED, f.default.FRAG_PARSING_INIT_SEGMENT, f.default.FRAG_PARSING_DATA, f.default.FRAG_PARSED, f.default.ERROR, f.default.BUFFER_CREATED, f.default.BUFFER_APPENDED, f.default.BUFFER_FLUSHED, f.default.INIT_PTS_FOUND)); return r.config = e.config, r.audioCodecSwap = !1, r.ticks = 0, r._state = m.STOPPED, r.ontick = r.tick.bind(r), r.initPTS = [], r.waitingFragment = null, r.videoTrackCC = null, r } return s(t, e), o(t, [{ key: "destroy", value: function() { this.stopLoad(), this.timer && (clearInterval(this.timer), this.timer = null), c.default.prototype.destroy.call(this), this.state = m.STOPPED } }, { key: "onInitPtsFound", value: function(e) { var t = e.id, r = e.frag.cc, a = e.initPTS; "main" === t && (this.initPTS[r] = a, this.videoTrackCC = r, p.logger.log("InitPTS for cc:" + r + " found from video track:" + a), this.state === m.WAITING_INIT_PTS && this.tick()) } }, { key: "startLoad", value: function(e) { if (this.tracks) { var t = this.lastCurrentTime; this.stopLoad(), this.timer || (this.timer = setInterval(this.ontick, 100)), this.fragLoadError = 0, t > 0 && -1 === e ? (p.logger.log("audio:override startPosition with lastCurrentTime @" + t.toFixed(3)), this.state = m.IDLE) : (this.lastCurrentTime = this.startPosition ? this.startPosition : e, this.state = m.STARTING), this.nextLoadPosition = this.startPosition = this.lastCurrentTime, this.tick() } else this.startPosition = e, this.state = m.STOPPED } }, { key: "stopLoad", value: function() { var e = this.fragCurrent; e && (e.loader && e.loader.abort(), this.fragCurrent = null), this.fragPrevious = null, this.demuxer && (this.demuxer.destroy(), this.demuxer = null), this.state = m.STOPPED } }, { key: "tick", value: function() { 1 === ++this.ticks && (this.doTick(), this.ticks > 1 && setTimeout(this.tick, 1), this.ticks = 0) } }, { key: "doTick", value: function() { var e, t, r, a = this.hls, i = a.config; switch (this.state) { case m.ERROR: case m.PAUSED: case m.BUFFER_FLUSHING: break; case m.STARTING: this.state = m.WAITING_TRACK, this.loadedmetadata = !1; break; case m.IDLE: var n = this.tracks; if (!n) break; if (!this.media && (this.startFragRequested || !i.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 = u.default.bufferInfo(s, e, i.maxBufferHole), d = o.len, c = o.end, h = this.fragPrevious, g = i.maxMaxBufferLength, E = this.audioSwitch, b = this.trackId; if ((d < g || E) && b < n.length) { if (void 0 === (r = n[b].details)) { this.state = m.WAITING_TRACK; break } if (!E && !r.live && h && h.sn === r.endSN && (!this.media.seeking || this.media.duration - c < h.duration / 2)) { this.hls.trigger(f.default.BUFFER_EOS, { type: "audio" }), this.state = m.ENDED; break } var T = r.fragments, k = T.length, _ = T[0].start, R = T[k - 1].start + T[k - 1].duration, S = void 0; if (E) if (r.live && !r.PTSKnown) p.logger.log("switching audiotrack, live stream, unknown PTS,load first fragment"), c = 0; else if (c = e, r.PTSKnown && e < _) { if (!(o.end > _ || o.nextStart)) return; p.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 = T[0], null !== this.videoTrackCC && S.cc !== this.videoTrackCC && (S = (0, y.findFragWithCC)(T, this.videoTrackCC)), r.live && S.loadIdx && S.loadIdx === this.fragLoadIdx) { var A = o.nextStart ? o.nextStart : _; return p.logger.log("no alt audio available @currentTime:" + this.media.currentTime + ", seeking @" + (A + .05)), void(this.media.currentTime = A + .05) } } else { var L = void 0, w = i.maxFragLookUpTolerance, D = h ? T[h.sn - T[0].sn + 1] : void 0, O = function(e) { var t = Math.min(w, e.duration); return e.start + e.duration - t <= c ? 1 : e.start - t > c && e.start ? -1 : 0 }; c < R ? (c > R - w && (w = 0), L = D && !O(D) ? D : l.default.search(T, O)) : L = T[k - 1], L && (S = L, _ = L.start, h && S.level === h.level && S.sn === h.sn && (S.sn < r.endSN ? (S = T[S.sn + 1 - r.startSN], p.logger.log("SN just loaded, load next one: " + S.sn)) : S = null)) } if (S) if (S.decryptdata && null != S.decryptdata.uri && null == S.decryptdata.key) p.logger.log("Loading key for " + S.sn + " of [" + r.startSN + " ," + r.endSN + "],track " + b), this.state = m.KEY_LOADING, a.trigger(f.default.KEY_LOADING, { frag: S }); else { if (p.logger.log("Loading " + S.sn + ", cc: " + S.cc + " of [" + r.startSN + " ," + r.endSN + "],track " + b + ", currentTime:" + e + ",bufferEnd:" + c.toFixed(3)), void 0 !== this.fragLoadIdx ? this.fragLoadIdx++ : this.fragLoadIdx = 0, S.loadCounter) { S.loadCounter++; var I = i.fragLoadingLoopThreshold; if (S.loadCounter > I && Math.abs(this.fragLoadIdx - S.loadIdx) < I) return void a.trigger(f.default.ERROR, { type: v.ErrorTypes.MEDIA_ERROR, details: v.ErrorDetails.FRAG_LOOP_LOADING_ERROR, fatal: !1, frag: S }) } else S.loadCounter = 1; S.loadIdx = this.fragLoadIdx, this.fragCurrent = S, this.startFragRequested = !0, isNaN(S.sn) || (this.nextLoadPosition = S.start + S.duration), a.trigger(f.default.FRAG_LOADING, { frag: S }), this.state = m.FRAG_LOADING } } break; case m.WAITING_TRACK: (t = this.tracks[this.trackId]) && t.details && (this.state = m.IDLE); break; case m.FRAG_LOADING_WAITING_RETRY: var P = performance.now(), C = this.retryDate, x = (s = this.media) && s.seeking; (!C || P >= C || x) && (p.logger.log("audioStreamController: retryDate reached, switch back to IDLE state"), this.state = m.IDLE); break; case m.WAITING_INIT_PTS: var F = this.videoTrackCC; if (void 0 === this.initPTS[F]) break; var M = this.waitingFragment; if (M) { var N = M.frag.cc; F !== N ? (t = this.tracks[this.trackId]).details && t.details.live && (p.logger.warn("Waiting fragment CC (" + N + ") does not match video track CC (" + F + ")"), this.waitingFragment = null, this.state = m.IDLE) : (this.state = m.FRAG_LOADING, this.onFragLoaded(this.waitingFragment), this.waitingFragment = null) } else this.state = m.IDLE; break; case m.STOPPED: case m.FRAG_LOADING: case m.PARSING: case m.PARSED: case m.ENDED: } } }, { key: "onMediaAttached", value: 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) } }, { key: "onMediaDetaching", value: function() { var e = this.media; e && e.ended && (p.logger.log("MSE detaching and video ended, reset startPosition"), this.startPosition = this.lastCurrentTime = 0); var t = this.tracks; t && t.forEach(function(e) { e.details && e.details.fragments.forEach(function(e) { e.loadCounter = void 0 }) }), e && (e.removeEventListener("seeking", this.onvseeking), e.removeEventListener("ended", this.onvended), this.onvseeking = this.onvseeked = this.onvended = null), this.media = this.mediaBuffer = null, this.loadedmetadata = !1, this.stopLoad() } }, { key: "onMediaSeeking", value: function() { this.state === m.ENDED && (this.state = m.IDLE), this.media && (this.lastCurrentTime = this.media.currentTime), void 0 !== this.fragLoadIdx && (this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold), this.tick() } }, { key: "onMediaEnded", value: function() { this.startPosition = this.lastCurrentTime = 0 } }, { key: "onAudioTracksUpdated", value: function(e) { p.logger.log("audio tracks updated"), this.tracks = e.audioTracks } }, { key: "onAudioTrackSwitching", value: function(e) { var t = !!e.url; this.trackId = e.id, this.fragCurrent = null, this.state = m.PAUSED, this.waitingFragment = null, t ? this.timer || (this.timer = setInterval(this.ontick, 100)) : this.demuxer && (this.demuxer.destroy(), this.demuxer = null), t && (this.audioSwitch = !0, this.state = m.IDLE, void 0 !== this.fragLoadIdx && (this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold)), this.tick() } }, { key: "onAudioTrackLoaded", value: function(e) { var t = e.details, r = e.id, a = this.tracks[r], i = t.totalduration, n = 0; if (p.logger.log("track " + r + " loaded [" + t.startSN + "," + t.endSN + "],duration:" + i), t.live) { var s = a.details; s && t.fragments.length > 0 ? (h.default.mergeDetails(s, t), n = t.fragments[0].start, t.PTSKnown ? p.logger.log("live audio playlist sliding:" + n.toFixed(3)) : p.logger.log("live audio playlist - outdated PTS, unknown sliding")) : (t.PTSKnown = !1, p.logger.log("live audio playlist - first load, unknown sliding")) } else t.PTSKnown = !1; if (a.details = t, !this.startFragRequested) { if (-1 === this.startPosition) { var o = t.startTimeOffset; isNaN(o) ? this.startPosition = 0 : (p.logger.log("start time offset found in playlist, adjust startPosition to " + o), this.startPosition = o) } this.nextLoadPosition = this.startPosition } this.state === m.WAITING_TRACK && (this.state = m.IDLE), this.tick() } }, { key: "onKeyLoaded", value: function() { this.state === m.KEY_LOADING && (this.state = m.IDLE, this.tick()) } }, { key: "onFragLoaded", value: function(e) { var t = this.fragCurrent, r = e.frag; if (this.state === m.FRAG_LOADING && t && "audio" === r.type && r.level === t.level && r.sn === t.sn) { var a = this.tracks[this.trackId], i = a.details, n = i.totalduration, s = t.level, o = t.sn, l = t.cc, u = this.config.defaultAudioCodec || a.audioCodec || "mp4a.40.2", c = this.stats = e.stats; if ("initSegment" === o) this.state = m.IDLE, c.tparsed = c.tbuffered = performance.now(), i.initSegment.data = e.payload, this.hls.trigger(f.default.FRAG_BUFFERED, { stats: c, frag: t, id: "audio" }), this.tick(); else { this.state = m.PARSING, this.appended = !1, this.demuxer || (this.demuxer = new d.default(this.hls, "audio")); var h = this.initPTS[l], g = i.initSegment ? i.initSegment.data : []; if (i.initSegment || void 0 !== h) { this.pendingBuffering = !0, p.logger.log("Demuxing " + o + " of [" + i.startSN + " ," + i.endSN + "],track " + s); this.demuxer.push(e.payload, g, u, null, t, n, !1, h) } else p.logger.log("unknown video PTS for continuity counter " + l + ", waiting for video PTS before demuxing audio frag " + o + " of [" + i.startSN + " ," + i.endSN + "],track " + s), this.waitingFragment = e, this.state = m.WAITING_INIT_PTS } } this.fragLoadError = 0 } }, { key: "onFragParsingInitSegment", value: function(e) { var t = this.fragCurrent, r = e.frag; if (t && "audio" === e.id && r.sn === t.sn && r.level === t.level && this.state === m.PARSING) { var a = e.tracks, i = void 0; if (a.video && delete a.video, i = a.audio) { i.levelCodec = i.codec, i.id = e.id, this.hls.trigger(f.default.BUFFER_CODECS, a), p.logger.log("audio track:audio,container:" + i.container + ",codecs[level/parsed]=[" + i.levelCodec + "/" + i.codec + "]"); var n = i.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(f.default.BUFFER_APPENDING, s)) } this.tick() } } } }, { key: "onFragParsingData", value: function(e) { var t = this, r = this.fragCurrent, a = e.frag; if (r && "audio" === e.id && "audio" === e.type && a.sn === r.sn && a.level === r.level && this.state === m.PARSING) { var i = this.trackId, n = this.tracks[i], s = this.hls; isNaN(e.endPTS) && (e.endPTS = e.startPTS + r.duration, e.endDTS = e.startDTS + r.duration), p.logger.log("parsed " + e.type + ",PTS:[" + e.startPTS.toFixed(3) + "," + e.endPTS.toFixed(3) + "],DTS:[" + e.startDTS.toFixed(3) + "/" + e.endDTS.toFixed(3) + "],nb:" + e.nb), h.default.updateFragPTSDTS(n.details, r, e.startPTS, e.endPTS); var o = this.audioSwitch, l = this.media, u = !1; if (o && l) if (l.readyState) { var d = l.currentTime; p.logger.log("switching audio track : currentTime:" + d), d >= e.startPTS && (p.logger.log("switching audio track : flushing all audio"), this.state = m.BUFFER_FLUSHING, s.trigger(f.default.BUFFER_FLUSHING, { startOffset: 0, endOffset: Number.POSITIVE_INFINITY, type: "audio" }), u = !0, this.audioSwitch = !1, s.trigger(f.default.AUDIO_TRACK_SWITCHED, { id: i })) } else this.audioSwitch = !1, s.trigger(f.default.AUDIO_TRACK_SWITCHED, { id: i }); var c = this.pendingData; this.audioSwitch || ([e.data1, e.data2].forEach(function(t) { t && t.length && c.push({ type: e.type, data: t, parent: "audio", content: "data" }) }), !u && c.length && (c.forEach(function(e) { t.state === m.PARSING && (t.pendingBuffering = !0, t.hls.trigger(f.default.BUFFER_APPENDING, e)) }), this.pendingData = [], this.appended = !0)), this.tick() } } }, { key: "onFragParsed", value: function(e) { var t = this.fragCurrent, r = e.frag; t && "audio" === e.id && r.sn === t.sn && r.level === t.level && this.state === m.PARSING && (this.stats.tparsed = performance.now(), this.state = m.PARSED, this._checkAppendedParsed()) } }, { key: "onBufferCreated", value: function(e) { var t = e.tracks.audio; t && (this.mediaBuffer = t.buffer, this.loadedmetadata = !0) } }, { key: "onBufferAppended", value: function(e) { if ("audio" === e.parent) { var t = this.state; t !== m.PARSING && t !== m.PARSED || (this.pendingBuffering = e.pending > 0, this._checkAppendedParsed()) } } }, { key: "_checkAppendedParsed", value: function() { if (!(this.state !== m.PARSED || this.appended && this.pendingBuffering)) { var e = this.fragCurrent, t = this.stats, r = this.hls; if (e) { this.fragPrevious = e, t.tbuffered = performance.now(), r.trigger(f.default.FRAG_BUFFERED, { stats: t, frag: e, id: "audio" }); var a = this.mediaBuffer ? this.mediaBuffer : this.media; p.logger.log("audio buffered : " + g.default.toString(a.buffered)), this.audioSwitch && this.appended && (this.audioSwitch = !1, r.trigger(f.default.AUDIO_TRACK_SWITCHED, { id: this.trackId })), this.state = m.IDLE } this.tick() } } }, { key: "onError", value: function(e) { var t = e.frag; if (!t || "audio" === t.type) switch (e.details) { case v.ErrorDetails.FRAG_LOAD_ERROR: case v.ErrorDetails.FRAG_LOAD_TIMEOUT: if (!e.fatal) { var r = this.fragLoadError; r ? r++ : r = 1; var a = this.config; if (r <= a.fragLoadingMaxRetry) { this.fragLoadError = r, t.loadCounter = 0; var i = Math.min(Math.pow(2, r - 1) * a.fragLoadingRetryDelay, a.fragLoadingMaxRetryTimeout); p.logger.warn("audioStreamController: frag loading failed, retry in " + i + " ms"), this.retryDate = performance.now() + i, this.state = m.FRAG_LOADING_WAITING_RETRY } else p.logger.error("audioStreamController: " + e.details + " reaches max retry, redispatch as fatal ..."), e.fatal = !0, this.state = m.ERROR } break; case v.ErrorDetails.FRAG_LOOP_LOADING_ERROR: case v.ErrorDetails.AUDIO_TRACK_LOAD_ERROR: case v.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT: case v.ErrorDetails.KEY_LOAD_ERROR: case v.ErrorDetails.KEY_LOAD_TIMEOUT: this.state !== m.ERROR && (this.state = e.fatal ? m.ERROR : m.IDLE, p.logger.warn("audioStreamController: " + e.details + " while loading frag,switch to " + this.state + " state ...")); break; case v.ErrorDetails.BUFFER_FULL_ERROR: if ("audio" === e.parent && (this.state === m.PARSING || this.state === m.PARSED)) { var n = this.mediaBuffer, s = this.media.currentTime; if (n && u.default.isBuffered(n, s) && u.default.isBuffered(n, s + .5)) { var o = this.config; o.maxMaxBufferLength >= o.maxBufferLength && (o.maxMaxBufferLength /= 2, p.logger.warn("audio:reduce max buffer length to " + o.maxMaxBufferLength + "s"), this.fragLoadIdx += 2 * o.fragLoadingLoopThreshold), this.state = m.IDLE } else p.logger.warn("buffer full error also media.currentTime is not buffered, flush audio buffer"), this.fragCurrent = null, this.state = m.BUFFER_FLUSHING, this.hls.trigger(f.default.BUFFER_FLUSHING, { startOffset: 0, endOffset: Number.POSITIVE_INFINITY, type: "audio" }) } } } }, { key: "onBufferFlushed", value: function() { var e = this, t = this.pendingData; t && t.length ? (p.logger.log("appending pending audio data on Buffer Flushed"), t.forEach(function(t) { e.hls.trigger(f.default.BUFFER_APPENDING, t) }), this.appended = !0, this.pendingData = [], this.state = m.PARSED) : (this.state = m.IDLE, this.fragPrevious = null, this.tick()) } }, { key: "state", set: function(e) { if (this.state !== e) { var t = this.state; this._state = e, p.logger.log("audio stream:" + t + "->" + e) } }, get: function() { return this._state } }]), t }(c.default); r.default = E }, { 25: 25, 33: 33, 34: 34, 35: 35, 37: 37, 38: 38, 48: 48, 51: 51, 54: 54, 55: 55 }], 7: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(35)), u = a(e(34)), d = e(54), f = e(33), c = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, l.default.MANIFEST_LOADING, l.default.MANIFEST_LOADED, l.default.AUDIO_TRACK_LOADED, l.default.ERROR)); return r.ticks = 0, r.ontick = r.tick.bind(r), r } return s(t, e), o(t, [{ key: "destroy", value: function() { this.cleanTimer(), u.default.prototype.destroy.call(this) } }, { key: "cleanTimer", value: function() { this.timer && (clearTimeout(this.timer), this.timer = null) } }, { key: "tick", value: function() { 1 === ++this.ticks && (this.doTick(), this.ticks > 1 && setTimeout(this.tick, 1), this.ticks = 0) } }, { key: "doTick", value: function() { this.updateTrack(this.trackId) } }, { key: "onError", value: function(e) { e.fatal && e.type === f.ErrorTypes.NETWORK_ERROR && this.cleanTimer() } }, { key: "onManifestLoading", value: function() { this.tracks = [], this.trackId = -1 } }, { key: "onManifestLoaded", value: function(e) { var t = this, r = e.audioTracks || [], a = !1; this.tracks = r, this.hls.trigger(l.default.AUDIO_TRACKS_UPDATED, { audioTracks: r }); var i = 0; r.forEach(function(e) { if (e.default && !a) return t.audioTrack = i, void(a = !0); i++ }), !1 === a && r.length && (d.logger.log("no default audio track defined, use first audio track as default"), this.audioTrack = 0) } }, { key: "onAudioTrackLoaded", value: function(e) { e.id < this.tracks.length && (d.logger.log("audioTrack " + e.id + " loaded"), this.tracks[e.id].details = e.details, e.details.live && !this.timer && (this.timer = setInterval(this.ontick, 1e3 * e.details.targetduration)), !e.details.live && this.timer && this.cleanTimer()) } }, { key: "setAudioTrackInternal", value: function(e) { if (e >= 0 && e < this.tracks.length) { this.cleanTimer(), this.trackId = e, d.logger.log("switching to audioTrack " + e); var t = this.tracks[e], r = this.hls, a = t.type, i = t.url, n = { id: e, type: a, url: i }; r.trigger(l.default.AUDIO_TRACK_SWITCH, n), r.trigger(l.default.AUDIO_TRACK_SWITCHING, n); var s = t.details; !i || void 0 !== s && !0 !== s.live || (d.logger.log("(re)loading playlist for audioTrack " + e), r.trigger(l.default.AUDIO_TRACK_LOADING, { url: i, id: e })) } } }, { key: "updateTrack", value: function(e) { if (e >= 0 && e < this.tracks.length) { this.cleanTimer(), this.trackId = e, d.logger.log("updating audioTrack " + e); var t = this.tracks[e], r = t.url, a = t.details; !r || void 0 !== a && !0 !== a.live || (d.logger.log("(re)loading playlist for audioTrack " + e), this.hls.trigger(l.default.AUDIO_TRACK_LOADING, { url: r, id: e })) } } }, { key: "audioTracks", get: function() { return this.tracks } }, { key: "audioTrack", get: function() { return this.trackId }, set: function(e) { this.trackId === e && void 0 !== this.tracks[e].details || this.setAudioTrackInternal(e) } }]), t }(u.default); r.default = c }, { 33: 33, 34: 34, 35: 35, 54: 54 }], 8: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(35)), u = a(e(34)), d = e(54), f = e(33), c = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).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)); return r._msDuration = null, r._levelDuration = null, r.onsbue = r.onSBUpdateEnd.bind(r), r.onsbe = r.onSBUpdateError.bind(r), r.pendingTracks = {}, r.tracks = {}, r } return s(t, e), o(t, [{ key: "destroy", value: function() { u.default.prototype.destroy.call(this) } }, { key: "onLevelPtsUpdated", value: function(e) { var t = e.type, r = this.tracks.audio; if ("audio" === t && r && "audio/mpeg" === r.container) { var a = this.sourceBuffer.audio; if (Math.abs(a.timestampOffset - e.start) > .1) { var i = a.updating; try { a.abort() } catch (e) { i = !0, d.logger.warn("can not abort audio buffer: " + e) } i ? this.audioTimestampOffset = e.start : (d.logger.warn("change mpeg audio timestamp offset from " + a.timestampOffset + " to " + e.start), a.timestampOffset = e.start) } } } }, { key: "onManifestParsed", value: function(e) { var t = e.audio, r = e.video || e.levels.length && e.audio, a = 0; e.altAudio && (t || r) && (a = (t ? 1 : 0) + (r ? 1 : 0), d.logger.log(a + " sourceBuffer(s) expected")), this.sourceBufferNb = a } }, { key: "onMediaAttaching", value: function(e) { var t = this.media = e.media; if (t) { var r = this.mediaSource = new MediaSource; 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 = URL.createObjectURL(r) } } }, { key: "onMediaDetaching", value: function() { d.logger.log("media source detaching"); var e = this.mediaSource; if (e) { if ("open" === e.readyState) try { e.endOfStream() } catch (e) { d.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 && (URL.revokeObjectURL(this.media.src), this.media.removeAttribute("src"), this.media.load()), this.mediaSource = null, this.media = 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) } }, { key: "onMediaSourceOpen", value: function() { d.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() } }, { key: "checkPendingTracks", value: function() { var e = this.pendingTracks, t = Object.keys(e).length; t && (this.sourceBufferNb <= t || 0 === this.sourceBufferNb) && (this.createSourceBuffers(e), this.pendingTracks = {}, this.doAppending()) } }, { key: "onMediaSourceClose", value: function() { d.logger.log("media source closed") } }, { key: "onMediaSourceEnded", value: function() { d.logger.log("media source ended") } }, { key: "onSBUpdateEnd", value: function() { if (this.audioTimestampOffset) { var e = this.sourceBuffer.audio; d.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 t = this.parent, r = this.segments.reduce(function(e, r) { return r.parent === t ? e + 1 : e }, 0); this.hls.trigger(l.default.BUFFER_APPENDED, { parent: t, pending: r }), this._needsFlush || this.doAppending(), this.updateMediaElementDuration() } }, { key: "onSBUpdateError", value: function(e) { d.logger.error("sourceBuffer error:", e), this.hls.trigger(l.default.ERROR, { type: f.ErrorTypes.MEDIA_ERROR, details: f.ErrorDetails.BUFFER_APPENDING_ERROR, fatal: !1 }) } }, { key: "onBufferReset", value: 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 } }, { key: "onBufferCodecs", value: function(e) { if (0 === Object.keys(this.sourceBuffer).length) { for (var t in e) this.pendingTracks[t] = e[t]; var r = this.mediaSource; r && "open" === r.readyState && this.checkPendingTracks() } } }, { key: "createSourceBuffers", value: function(e) { var t = this.sourceBuffer, r = this.mediaSource; for (var a in e) if (!t[a]) { var i = e[a], n = i.levelCodec || i.codec, s = i.container + ";codecs=" + n; d.logger.log("creating sourceBuffer(" + s + ")"); try { var o = t[a] = r.addSourceBuffer(s); o.addEventListener("updateend", this.onsbue), o.addEventListener("error", this.onsbe), this.tracks[a] = { codec: n, container: i.container }, i.buffer = o } catch (e) { d.logger.error("error while trying to add sourceBuffer:" + e.message), this.hls.trigger(l.default.ERROR, { type: f.ErrorTypes.MEDIA_ERROR, details: f.ErrorDetails.BUFFER_ADD_CODEC_ERROR, fatal: !1, err: e, mimeType: s }) } } this.hls.trigger(l.default.BUFFER_CREATED, { tracks: e }) } }, { key: "onBufferAppending", value: function(e) { this._needsFlush || (this.segments ? this.segments.push(e) : this.segments = [e], this.doAppending()) } }, { key: "onBufferAppendFail", value: function(e) { d.logger.error("sourceBuffer error:", e.event), this.hls.trigger(l.default.ERROR, { type: f.ErrorTypes.MEDIA_ERROR, details: f.ErrorDetails.BUFFER_APPENDING_ERROR, fatal: !1 }) } }, { key: "onBufferEos", value: function(e) { var t = this.sourceBuffer, r = e.type; for (var a in t) r && a !== r || t[a].ended || (t[a].ended = !0, d.logger.log(a + " sourceBuffer now EOS")); this.checkEos() } }, { key: "checkEos", value: function() { var e = this.sourceBuffer, t = this.mediaSource; if (t && "open" === t.readyState) { for (var r in e) { var a = e[r]; if (!a.ended) return; if (a.updating) return void(this._needsEos = !0) } d.logger.log("all media data available, signal endOfStream() to MediaSource and stop loading fragment"); try { t.endOfStream() } catch (e) { d.logger.warn("exception while calling mediaSource.endOfStream()") } this._needsEos = !1 } else this._needsEos = !1 } }, { key: "onBufferFlushing", value: function(e) { this.flushRange.push({ start: e.startOffset, end: e.endOffset, type: e.type }), this.flushBufferCounter = 0, this.doFlush() } }, { key: "onLevelUpdated", value: function(e) { var t = e.details; 0 !== t.fragments.length && (this._levelDuration = t.totalduration + t.fragments[0].start, this.updateMediaElementDuration()) } }, { key: "updateMediaElementDuration", value: function() { var e = this.media, t = this.mediaSource, r = this.sourceBuffer, a = this._levelDuration; if (null !== a && e && t && r && 0 !== e.readyState && "open" === t.readyState) { for (var i in r) if (r[i].updating) return; null === this._msDuration && (this._msDuration = t.duration); var n = e.duration; (a > this._msDuration && a > n || n === 1 / 0 || isNaN(n)) && (d.logger.log("Updating mediasource duration to " + a.toFixed(3)), this._msDuration = t.duration = a) } } }, { key: "doFlush", value: 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 a in r) t += r[a].buffered.length } catch (e) { d.logger.error("error while accessing sourceBuffer.buffered") } this.appended = t, this.hls.trigger(l.default.BUFFER_FLUSHED) } } }, { key: "doAppending", value: function() { var e = this.hls, t = this.sourceBuffer, r = this.segments; if (Object.keys(t).length) { if (this.media.error) return this.segments = [], void d.logger.error("trying to append although a media error occured, flush segment and abort"); if (this.appending) return; if (r && r.length) { var a = r.shift(); try { var i = t[a.type]; i ? i.updating ? r.unshift(a) : (i.ended = !1, this.parent = a.parent, i.appendBuffer(a.data), this.appendError = 0, this.appended++, this.appending = !0) : this.onSBUpdateEnd() } catch (t) { d.logger.error("error while trying to append buffer:" + t.message), r.unshift(a); var n = { type: f.ErrorTypes.MEDIA_ERROR, parent: a.parent }; if (22 === t.code) return this.segments = [], n.details = f.ErrorDetails.BUFFER_FULL_ERROR, n.fatal = !1, void e.trigger(l.default.ERROR, n); if (this.appendError ? this.appendError++ : this.appendError = 1, n.details = f.ErrorDetails.BUFFER_APPEND_ERROR, this.appendError > e.config.appendErrorMaxRetry) return d.logger.log("fail " + e.config.appendErrorMaxRetry + " times to append segment in sourceBuffer"), r = [], n.fatal = !0, void e.trigger(l.default.ERROR, n); n.fatal = !1, e.trigger(l.default.ERROR, n) } } } } }, { key: "flushBuffer", value: function(e, t, r) { var a, i, n, s, o, l, u = this.sourceBuffer; if (Object.keys(u).length) { if (d.logger.log("flushBuffer,pos/start/end: " + this.media.currentTime.toFixed(3) + "/" + e + "/" + t), this.flushBufferCounter < this.appended) { for (var f in u) if (!r || f === r) { if (a = u[f], a.ended = !1, a.updating) return d.logger.warn("cannot flush, sb updating in progress"), !1; try { for (i = 0; i < a.buffered.length; i++) if (n = a.buffered.start(i), s = a.buffered.end(i), -1 !== navigator.userAgent.toLowerCase().indexOf("firefox") && t === Number.POSITIVE_INFINITY ? (o = e, l = t) : (o = Math.max(n, e), l = Math.min(s, t)), Math.min(l, s) - o > .5) return this.flushBufferCounter++, d.logger.log("flush " + f + " [" + o + "," + l + "], of [" + n + "," + s + "], pos:" + this.media.currentTime), a.remove(o, l), !1 } catch (e) { d.logger.warn("exception while accessing sourcebuffer, it might have been removed from MediaSource") } } } else d.logger.warn("abort flushing too many retries"); d.logger.log("buffer flushed") } return !0 } }]), t }(u.default); r.default = c }, { 33: 33, 34: 34, 35: 35, 54: 54 }], 9: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(35)), u = function(e) { function t(e) { return i(this, t), n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, l.default.FPS_DROP_LEVEL_CAPPING, l.default.MEDIA_ATTACHING, l.default.MANIFEST_PARSED)) } return s(t, e), o(t, [{ key: "destroy", value: function() { this.hls.config.capLevelToPlayerSize && (this.media = this.restrictedLevels = null, this.autoLevelCapping = Number.POSITIVE_INFINITY, this.timer && (this.timer = clearInterval(this.timer))) } }, { key: "onFpsDropLevelCapping", value: function(e) { t.isLevelAllowed(e.droppedLevel, this.restrictedLevels) && this.restrictedLevels.push(e.droppedLevel) } }, { key: "onMediaAttaching", value: function(e) { this.media = e.media instanceof HTMLVideoElement ? e.media : null } }, { key: "onManifestParsed", value: function(e) { var t = this.hls; this.restrictedLevels = [], t.config.capLevelToPlayerSize && (this.autoLevelCapping = Number.POSITIVE_INFINITY, this.levels = e.levels, t.firstLevel = this.getMaxLevel(e.firstLevel), clearInterval(this.timer), this.timer = setInterval(this.detectPlayerSize.bind(this), 1e3), this.detectPlayerSize()) } }, { key: "detectPlayerSize", value: 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 } } } }, { key: "getMaxLevel", value: function(e) { var r = this; if (!this.levels) return -1; var a = this.levels.filter(function(a, i) { return t.isLevelAllowed(i, r.restrictedLevels) && i <= e }); return t.getMaxLevelByMediaSize(a, this.mediaWidth, this.mediaHeight) } }, { key: "mediaWidth", get: function() { var e = void 0, r = this.media; return r && (e = r.width || r.clientWidth || r.offsetWidth, e *= t.contentScaleFactor), e } }, { key: "mediaHeight", get: function() { var e = void 0, r = this.media; return r && (e = r.height || r.clientHeight || r.offsetHeight, e *= t.contentScaleFactor), e } }], [{ key: "isLevelAllowed", value: function(e) { return -1 === (arguments.length > 1 && void 0 !== arguments[1] ? arguments[1] : []).indexOf(e) } }, { key: "getMaxLevelByMediaSize", value: function(e, t, r) { if (!e || e && !e.length) return -1; for (var a = e.length - 1, i = 0; i < e.length; i += 1) { var n = e[i]; if ((n.width >= t || n.height >= r) && function(e, t) { return !t || e.width !== t.width || e.height !== t.height }(n, e[i + 1])) { a = i; break } } return a } }, { key: "contentScaleFactor", get: function() { var e = 1; try { e = window.devicePixelRatio } catch (e) {} return e } }]), t }(a(e(34)).default); r.default = u }, { 34: 34, 35: 35 }], 10: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(35)), u = a(e(34)), d = e(54), f = function(e) { function t(e) { return i(this, t), n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, l.default.MEDIA_ATTACHING)) } return s(t, e), o(t, [{ key: "destroy", value: function() { this.timer && clearInterval(this.timer), this.isVideoPlaybackQualityAvailable = !1 } }, { key: "onMediaAttaching", value: function(e) { var t = this.hls.config; t.capLevelOnFPSDrop && ("function" == typeof(this.video = e.media instanceof HTMLVideoElement ? e.media : null).getVideoPlaybackQuality && (this.isVideoPlaybackQualityAvailable = !0), clearInterval(this.timer), this.timer = setInterval(this.checkFPSInterval.bind(this), t.fpsDroppedMonitoringPeriod)) } }, { key: "checkFPS", value: function(e, t, r) { var a = performance.now(); if (t) { if (this.lastTime) { var i = a - this.lastTime, n = r - this.lastDroppedFrames, s = t - this.lastDecodedFrames, o = 1e3 * n / i, u = this.hls; if (u.trigger(l.default.FPS_DROP, { currentDropped: n, currentDecoded: s, totalDroppedFrames: r }), o > 0 && n > u.config.fpsDroppedMonitoringThreshold * s) { var f = u.currentLevel; d.logger.warn("drop FPS ratio greater than max allowed value for currentLevel: " + f), f > 0 && (-1 === u.autoLevelCapping || u.autoLevelCapping >= f) && (f -= 1, u.trigger(l.default.FPS_DROP_LEVEL_CAPPING, { level: f, droppedLevel: u.currentLevel }), u.autoLevelCapping = f, u.streamController.nextLevelSwitch()) } } this.lastTime = a, this.lastDroppedFrames = r, this.lastDecodedFrames = t } } }, { key: "checkFPSInterval", value: 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) } }]), t }(u.default); r.default = f }, { 34: 34, 35: 35, 54: 54 }], 11: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(35)), u = a(e(34)), d = a(e(27)), f = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, l.default.MEDIA_ATTACHED, l.default.MEDIA_DETACHING, l.default.FRAG_PARSING_METADATA)); return r.id3Track = void 0, r.media = void 0, r } return s(t, e), o(t, [{ key: "destroy", value: function() { u.default.prototype.destroy.call(this) } }, { key: "onMediaAttached", value: function(e) { this.media = e.media, this.media && (this.id3Track = this.media.addTextTrack("metadata", "id3"), this.id3Track.mode = "hidden") } }, { key: "onMediaDetaching", value: function() { this.media = void 0 } }, { key: "onFragParsingMetadata", value: function(e) { for (var t = e.frag, r = e.samples, a = window.WebKitDataCue || window.VTTCue || window.TextTrackCue, i = 0; i < r.length; i++) { var n = d.default.getID3Frames(r[i].data); if (n) { var s = r[i].pts, o = i < r.length - 1 ? r[i + 1].pts : t.endPTS; s === o && (o += 1e-4); for (var l = 0; l < n.length; l++) { var u = n[l]; if (!d.default.isTimeStampFrame(u)) { var f = new a(s, o, ""); f.value = u, this.id3Track.addCue(f) } } } } } }]), t }(u.default); r.default = f }, { 27: 27, 34: 34, 35: 35 }], 12: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(35)), u = a(e(34)), d = e(54), f = e(33), c = a(e(37)), h = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, l.default.MANIFEST_LOADED, l.default.LEVEL_LOADED, l.default.FRAG_LOADED, l.default.ERROR)); return r.ontick = r.tick.bind(r), r._manualLevel = -1, r } return s(t, e), o(t, [{ key: "destroy", value: function() { this.cleanTimer(), this._manualLevel = -1 } }, { key: "cleanTimer", value: function() { this.timer && (clearTimeout(this.timer), this.timer = null) } }, { key: "startLoad", value: function() { this.canload = !0; var e = this._levels; e && e.forEach(function(e) { e.loadError = 0; var t = e.details; t && t.live && (e.details = void 0) }), this.timer && this.tick() } }, { key: "stopLoad", value: function() { this.canload = !1 } }, { key: "onManifestLoaded", value: function(e) { var t, r = [], a = [], i = {}, n = !1, s = !1, o = this.hls, u = /chrome|firefox/.test(navigator.userAgent.toLowerCase()), c = function(e, t) { return MediaSource.isTypeSupported(e + "/mp4;codecs=" + t) }; if (e.levels.forEach(function(e) { e.videoCodec && (n = !0), u && e.audioCodec && -1 !== e.audioCodec.indexOf("mp4a.40.34") && (e.audioCodec = void 0), (e.audioCodec || e.attrs && e.attrs.AUDIO) && (s = !0); var t = i[e.bitrate]; void 0 === t ? (i[e.bitrate] = r.length, e.url = [e.url], e.urlId = 0, r.push(e)) : r[t].url.push(e.url) }), n && s ? r.forEach(function(e) { e.videoCodec && a.push(e) }) : a = r, (a = a.filter(function(e) { var t = e.audioCodec, r = e.videoCodec; return (!t || c("audio", t)) && (!r || c("video", r)) })).length) { t = a[0].bitrate, a.sort(function(e, t) { return e.bitrate - t.bitrate }), this._levels = a; for (var h = 0; h < a.length; h++) if (a[h].bitrate === t) { this._firstLevel = h, d.logger.log("manifest loaded," + a.length + " level(s) found, first bitrate:" + t); break } o.trigger(l.default.MANIFEST_PARSED, { levels: a, firstLevel: this._firstLevel, stats: e.stats, audio: s, video: n, altAudio: e.audioTracks.length > 0 }) } else o.trigger(l.default.ERROR, { type: f.ErrorTypes.MEDIA_ERROR, details: f.ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR, fatal: !0, url: o.url, reason: "no level with compatible codecs found in manifest" }) } }, { key: "setLevelInternal", value: function(e) { var t = this._levels, r = this.hls; if (e >= 0 && e < t.length) { if (this.cleanTimer(), this._level !== e) { d.logger.log("switching to level " + e), this._level = e; var a = t[e]; a.level = e, r.trigger(l.default.LEVEL_SWITCH, a), r.trigger(l.default.LEVEL_SWITCHING, a) } var i = t[e], n = i.details; if (!n || !0 === n.live) { var s = i.urlId; r.trigger(l.default.LEVEL_LOADING, { url: i.url[s], level: e, id: s }) } } else r.trigger(l.default.ERROR, { type: f.ErrorTypes.OTHER_ERROR, details: f.ErrorDetails.LEVEL_SWITCH_ERROR, level: e, fatal: !1, reason: "invalid level idx" }) } }, { key: "onError", value: function(e) { if (e.fatal) e.type === f.ErrorTypes.NETWORK_ERROR && this.cleanTimer(); else { var t = e.details, r = this.hls, a = void 0, i = void 0, n = !1; switch (t) { case f.ErrorDetails.FRAG_LOAD_ERROR: case f.ErrorDetails.FRAG_LOAD_TIMEOUT: case f.ErrorDetails.FRAG_LOOP_LOADING_ERROR: case f.ErrorDetails.KEY_LOAD_ERROR: case f.ErrorDetails.KEY_LOAD_TIMEOUT: a = e.frag.level; break; case f.ErrorDetails.LEVEL_LOAD_ERROR: case f.ErrorDetails.LEVEL_LOAD_TIMEOUT: a = e.context.level, n = !0; break; case f.ErrorDetails.REMUX_ALLOC_ERROR: a = e.level } if (void 0 !== a) { (i = this._levels[a]).loadError ? i.loadError++ : i.loadError = 1; var s = i.url.length; if (s > 1 && i.loadError < s) i.urlId = (i.urlId + 1) % s, i.details = void 0, d.logger.warn("level controller," + t + " for level " + a + ": switching to redundant stream id " + i.urlId); else if (-1 === this._manualLevel && a) d.logger.warn("level controller," + t + ": switch-down for next fragment"), r.nextAutoLevel = Math.max(0, a - 1); else if (i && i.details && i.details.live) d.logger.warn("level controller," + t + " on live stream, discard"), n && (this._level = void 0); else if (t === f.ErrorDetails.LEVEL_LOAD_ERROR || t === f.ErrorDetails.LEVEL_LOAD_TIMEOUT) { var o = r.media; if (o && c.default.isBuffered(o, o.currentTime) && c.default.isBuffered(o, o.currentTime + .5)) { var l = r.config.levelLoadingRetryDelay; d.logger.warn("level controller," + t + ", but media buffered, retry in " + l + "ms"), this.timer = setTimeout(this.ontick, l), e.levelRetry = !0 } else d.logger.error("cannot recover " + t + " error"), this._level = void 0, this.cleanTimer(), e.fatal = !0 } } } } }, { key: "onFragLoaded", value: function(e) { var t = e.frag; if (t && "main" === t.type) { var r = this._levels[t.level]; r && (r.loadError = 0) } } }, { key: "onLevelLoaded", value: function(e) { var t = e.level; if (t === this._level) { var r = this._levels[t]; r.loadError = 0; var a = e.details; if (a.live) { var i = 1e3 * (a.averagetargetduration ? a.averagetargetduration : a.targetduration), n = r.details; n && a.endSN === n.endSN && (i /= 2, d.logger.log("same live playlist, reload twice faster")), i -= performance.now() - e.stats.trequest, i = Math.max(1e3, Math.round(i)), d.logger.log("live playlist, reload in " + i + " ms"), this.timer = setTimeout(this.ontick, i) } else this.timer = null } } }, { key: "tick", value: function() { var e = this._level; if (void 0 !== e && this.canload) { var t = this._levels[e]; if (t && t.url) { var r = t.urlId; this.hls.trigger(l.default.LEVEL_LOADING, { url: t.url[r], level: e, id: r }) } } } }, { key: "levels", get: function() { return this._levels } }, { key: "level", get: function() { return this._level }, set: function(e) { var t = this._levels; t && t.length > e && (this._level === e && void 0 !== t[e].details || this.setLevelInternal(e)) } }, { key: "manualLevel", get: function() { return this._manualLevel }, set: function(e) { this._manualLevel = e, void 0 === this._startLevel && (this._startLevel = e), -1 !== e && (this.level = e) } }, { key: "firstLevel", get: function() { return this._firstLevel }, set: function(e) { this._firstLevel = e } }, { key: "startLevel", get: function() { if (void 0 === this._startLevel) { var e = this.hls.config.startLevel; return void 0 !== e ? e : this._firstLevel } return this._startLevel }, set: function(e) { this._startLevel = e } }, { key: "nextLoadLevel", get: function() { return -1 !== this._manualLevel ? this._manualLevel : this.hls.nextAutoLevel }, set: function(e) { this.level = e, -1 === this._manualLevel && (this.hls.nextAutoLevel = e) } }]), t }(u.default); r.default = h }, { 33: 33, 34: 34, 35: 35, 37: 37, 54: 54 }], 13: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(48)), u = a(e(37)), d = a(e(25)), f = a(e(35)), c = a(e(34)), h = a(e(38)), g = a(e(55)), v = e(33), p = e(54), y = { STOPPED: "STOPPED", IDLE: "IDLE", KEY_LOADING: "KEY_LOADING", FRAG_LOADING: "FRAG_LOADING", FRAG_LOADING_WAITING_RETRY: "FRAG_LOADING_WAITING_RETRY", WAITING_LEVEL: "WAITING_LEVEL", PARSING: "PARSING", PARSED: "PARSED", BUFFER_FLUSHING: "BUFFER_FLUSHING", ENDED: "ENDED", ERROR: "ERROR" }, m = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, f.default.MEDIA_ATTACHED, f.default.MEDIA_DETACHING, f.default.MANIFEST_LOADING, f.default.MANIFEST_PARSED, f.default.LEVEL_LOADED, f.default.KEY_LOADED, f.default.FRAG_LOADED, f.default.FRAG_LOAD_EMERGENCY_ABORTED, f.default.FRAG_PARSING_INIT_SEGMENT, f.default.FRAG_PARSING_DATA, f.default.FRAG_PARSED, f.default.ERROR, f.default.AUDIO_TRACK_SWITCHING, f.default.AUDIO_TRACK_SWITCHED, f.default.BUFFER_CREATED, f.default.BUFFER_APPENDED, f.default.BUFFER_FLUSHED)); return r.config = e.config, r.audioCodecSwap = !1, r.ticks = 0, r._state = y.STOPPED, r.ontick = r.tick.bind(r), r } return s(t, e), o(t, [{ key: "destroy", value: function() { this.stopLoad(), this.timer && (clearInterval(this.timer), this.timer = null), c.default.prototype.destroy.call(this), this.state = y.STOPPED } }, { key: "startLoad", value: function(e) { if (this.levels) { var t = this.lastCurrentTime, r = this.hls; if (this.stopLoad(), this.timer || (this.timer = setInterval(this.ontick, 100)), this.level = -1, this.fragLoadError = 0, !this.startFragRequested) { var a = r.startLevel; - 1 === a && (a = 0, this.bitrateTest = !0), this.level = r.nextLoadLevel = a, this.loadedmetadata = !1 } t > 0 && -1 === e && (p.logger.log("override startPosition with lastCurrentTime @" + t.toFixed(3)), e = t), this.state = y.IDLE, this.nextLoadPosition = this.startPosition = this.lastCurrentTime = e, this.tick() } else this.forceStartLoad = !0, this.state = y.STOPPED } }, { key: "stopLoad", value: function() { var e = this.fragCurrent; e && (e.loader && e.loader.abort(), this.fragCurrent = null), this.fragPrevious = null, this.demuxer && (this.demuxer.destroy(), this.demuxer = null), this.state = y.STOPPED, this.forceStartLoad = !1 } }, { key: "tick", value: function() { 1 === ++this.ticks && (this.doTick(), this.ticks > 1 && setTimeout(this.tick, 1), this.ticks = 0) } }, { key: "doTick", value: function() { switch (this.state) { case y.ERROR: break; case y.BUFFER_FLUSHING: this.fragLoadError = 0; break; case y.IDLE: this._doTickIdle(); break; case y.WAITING_LEVEL: var e = this.levels[this.level]; e && e.details && (this.state = y.IDLE); break; case y.FRAG_LOADING_WAITING_RETRY: var t = performance.now(), r = this.retryDate; (!r || t >= r || this.media && this.media.seeking) && (p.logger.log("mediaController: retryDate reached, switch back to IDLE state"), this.state = y.IDLE); break; case y.ERROR: case y.STOPPED: case y.FRAG_LOADING: case y.PARSING: case y.PARSED: case y.ENDED: } this._checkBuffer(), this._checkFragmentChanged() } }, { key: "_doTickIdle", value: function() { var e = this.hls, t = e.config, r = this.media; if (void 0 === this.levelLastLoaded || r || !this.startFragRequested && t.startFragPrefetch) { var a = void 0; a = this.loadedmetadata ? r.currentTime : this.nextLoadPosition; var i = e.nextLoadLevel, n = this.levels[i]; if (n) { var s = n.bitrate, o = void 0; o = s ? Math.max(8 * t.maxBufferSize / s, t.maxBufferLength) : t.maxBufferLength, o = Math.min(o, t.maxMaxBufferLength); var l = u.default.bufferInfo(this.mediaBuffer ? this.mediaBuffer : r, a, t.maxBufferHole), d = l.len; if (!(d >= o)) { p.logger.trace("buffer length of " + d.toFixed(3) + " is below max of " + o.toFixed(3) + ". checking for more payload ..."), this.level = e.nextLoadLevel = i; var c = n.details; if (void 0 === c || c.live && this.levelLastLoaded !== i) this.state = y.WAITING_LEVEL; else { var h = this.fragPrevious; if (!c.live && h && h.sn === c.endSN && d && !l.nextStart && Math.min(r.duration, h.start + h.duration) - Math.max(l.end, h.start) <= Math.max(.2, h.duration)) { var g = {}; return this.altAudio && (g.type = "video"), this.hls.trigger(f.default.BUFFER_EOS, g), void(this.state = y.ENDED) } this._fetchPayloadOrEos(a, l, c) } } } } } }, { key: "_fetchPayloadOrEos", value: function(e, t, r) { var a = this.fragPrevious, i = this.level, n = r.fragments, s = n.length; if (0 !== s) { var o = n[0].start, l = n[s - 1].start + n[s - 1].duration, u = t.end, d = void 0; if (r.initSegment && !r.initSegment.data) d = r.initSegment; else if (r.live) { var f = this.config.initialLiveManifestSize; if (s < f) return void p.logger.warn("Can not start playback of a level, reason: not enough fragments " + s + " < " + f); if (null === (d = this._ensureFragmentAtLivePoint(r, u, o, l, a, n, s))) return } else u < o && (d = n[0]); d || (d = this._findFragment(o, a, s, n, u, l, r)), d && this._loadFragmentOrKey(d, i, r, e, u) } } }, { key: "_ensureFragmentAtLivePoint", value: function(e, t, r, a, i, n, s) { var o = this.hls.config, u = this.media, d = void 0, f = void 0 !== o.liveMaxLatencyDuration ? o.liveMaxLatencyDuration : o.liveMaxLatencyDurationCount * e.targetduration; if (t < Math.max(r - o.maxFragLookUpTolerance, a - f)) { var c = this.liveSyncPosition = this.computeLivePosition(r, e); p.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 && t > a && u && u.readyState) return null; if (this.startFragRequested && !e.PTSKnown) { if (i) { var h = i.sn + 1; if (h >= e.startSN && h <= e.endSN) { var g = n[h - e.startSN]; i.cc === g.cc && (d = g, p.logger.log("live playlist, switching playlist, load frag with next SN: " + d.sn)) } d || (d = l.default.search(n, function(e) { return i.cc - e.cc })) && p.logger.log("live playlist, switching playlist, load frag with same CC: " + d.sn) } d || (d = n[Math.min(s - 1, Math.round(s / 2))], p.logger.log("live playlist, switching playlist, unknown, load middle frag : " + d.sn)) } return d } }, { key: "_findFragment", value: function(e, t, r, a, i, n, s) { var o = this.hls.config, u = void 0, d = void 0, f = o.maxFragLookUpTolerance, c = t ? a[t.sn - a[0].sn + 1] : void 0, h = function(e) { var t = Math.min(f, e.duration); return e.start + e.duration - t <= i ? 1 : e.start - t > i && e.start ? -1 : 0 }; if (i < n ? (i > n - f && (f = 0), d = c && !h(c) ? c : l.default.search(a, h)) : d = a[r - 1], d) { var g = (u = d).sn - s.startSN, v = t && u.level === t.level, y = a[g - 1], m = a[g + 1]; if (t && u.sn === t.sn) if (v && !u.backtracked) if (u.sn < s.endSN) { var E = t.deltaPTS; E && E > o.maxBufferHole && t.dropped && g ? (u = y, p.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"), t.loadCounter--) : (u = m, p.logger.log("SN just loaded, load next one: " + u.sn)) } else u = null; else u.backtracked && (m && m.backtracked ? (p.logger.warn("Already backtracked from fragment " + m.sn + ", will not backtrack to fragment " + u.sn + ". Loading fragment " + m.sn), u = m) : (p.logger.warn("Loaded fragment with dropped frames, backtracking 1 segment to find a keyframe"), u.dropped = 0, y ? (y.loadCounter && y.loadCounter--, (u = y).backtracked = !0) : g && (u = null))) } return u } }, { key: "_loadFragmentOrKey", value: function(e, t, r, a, i) { var n = this.hls, s = n.config; if (!e.decryptdata || null == e.decryptdata.uri || null != e.decryptdata.key) { if (p.logger.log("Loading " + e.sn + " of [" + r.startSN + " ," + r.endSN + "],level " + t + ", currentTime:" + a.toFixed(3) + ",bufferEnd:" + i.toFixed(3)), void 0 !== this.fragLoadIdx ? this.fragLoadIdx++ : this.fragLoadIdx = 0, e.loadCounter) { e.loadCounter++; var o = s.fragLoadingLoopThreshold; if (e.loadCounter > o && Math.abs(this.fragLoadIdx - e.loadIdx) < o) return void n.trigger(f.default.ERROR, { type: v.ErrorTypes.MEDIA_ERROR, details: v.ErrorDetails.FRAG_LOOP_LOADING_ERROR, fatal: !1, frag: e }) } else e.loadCounter = 1; return e.loadIdx = this.fragLoadIdx, this.fragCurrent = e, this.startFragRequested = !0, isNaN(e.sn) || (this.nextLoadPosition = e.start + e.duration), e.autoLevel = n.autoLevelEnabled, e.bitrateTest = this.bitrateTest, n.trigger(f.default.FRAG_LOADING, { frag: e }), this.demuxer || (this.demuxer = new d.default(n, "main")), void(this.state = y.FRAG_LOADING) } p.logger.log("Loading key for " + e.sn + " of [" + r.startSN + " ," + r.endSN + "],level " + t), this.state = y.KEY_LOADING, n.trigger(f.default.KEY_LOADING, { frag: e }) } }, { key: "getBufferedFrag", value: function(e) { return l.default.search(this._bufferedFrags, function(t) { return e < t.startPTS ? -1 : e > t.endPTS ? 1 : 0 }) } }, { key: "followingBufferedFrag", value: function(e) { return e ? this.getBufferedFrag(e.endPTS + .5) : null } }, { key: "_checkFragmentChanged", value: function() { var e, t, r = this.media; if (r && r.readyState && !1 === r.seeking && ((t = r.currentTime) > r.playbackRate * this.lastCurrentTime && (this.lastCurrentTime = t), u.default.isBuffered(r, t) ? e = this.getBufferedFrag(t) : u.default.isBuffered(r, t + .1) && (e = this.getBufferedFrag(t + .1)), e)) { var a = e; if (a !== this.fragPlaying) { this.hls.trigger(f.default.FRAG_CHANGED, { frag: a }); var i = a.level; this.fragPlaying && this.fragPlaying.level === i || this.hls.trigger(f.default.LEVEL_SWITCHED, { level: i }), this.fragPlaying = a } } } }, { key: "immediateLevelSwitch", value: function() { if (p.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.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold, this.flushMainBuffer(0, Number.POSITIVE_INFINITY) } }, { key: "immediateLevelSwitchEnd", value: function() { var e = this.media; e && e.buffered.length && (this.immediateSwitch = !1, u.default.isBuffered(e, e.currentTime) && (e.currentTime -= 1e-4), this.previouslyPaused || e.play()) } }, { key: "nextLevelSwitch", value: function() { var e = this.media; if (e && e.readyState) { var t = void 0, r = void 0, a = void 0; if (this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold, (r = this.getBufferedFrag(e.currentTime)) && r.startPTS > 1 && this.flushMainBuffer(0, r.startPTS - 1), e.paused) t = 0; else { var i = this.hls.nextLoadLevel, n = this.levels[i], s = this.fragLastKbps; t = s && this.fragCurrent ? this.fragCurrent.duration * n.bitrate / (1e3 * s) + 1 : 0 } if ((a = this.getBufferedFrag(e.currentTime + t)) && (a = this.followingBufferedFrag(a))) { var o = this.fragCurrent; o && o.loader && o.loader.abort(), this.fragCurrent = null, this.flushMainBuffer(a.maxStartPTS, Number.POSITIVE_INFINITY) } } } }, { key: "flushMainBuffer", value: function(e, t) { this.state = y.BUFFER_FLUSHING; var r = { startOffset: e, endOffset: t }; this.altAudio && (r.type = "video"), this.hls.trigger(f.default.BUFFER_FLUSHING, r) } }, { key: "onMediaAttached", value: 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) } }, { key: "onMediaDetaching", value: function() { var e = this.media; e && e.ended && (p.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.loadCounter = void 0, 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() } }, { key: "onMediaSeeking", value: function() { var e = this.media, t = e ? e.currentTime : void 0, r = this.config; isNaN(t) || p.logger.log("media seeking to " + t.toFixed(3)); var a = this.mediaBuffer ? this.mediaBuffer : e, i = u.default.bufferInfo(a, t, this.config.maxBufferHole); if (this.state === y.FRAG_LOADING) { var n = this.fragCurrent; if (0 === i.len && n) { var s = r.maxFragLookUpTolerance, o = n.start - s, l = n.start + n.duration + s; t < o || t > l ? (n.loader && (p.logger.log("seeking outside of buffer while fragment load in progress, cancel fragment load"), n.loader.abort()), this.fragCurrent = null, this.fragPrevious = null, this.state = y.IDLE) : p.logger.log("seeking outside of buffer but within currently loaded fragment range") } } else this.state === y.ENDED && (0 === i.len && (this.fragPrevious = 0), this.state = y.IDLE); e && (this.lastCurrentTime = t), this.state !== y.FRAG_LOADING && void 0 !== this.fragLoadIdx && (this.fragLoadIdx += 2 * r.fragLoadingLoopThreshold), this.loadedmetadata || (this.nextLoadPosition = this.startPosition = t), this.tick() } }, { key: "onMediaSeeked", value: function() { var e = this.media, t = e ? e.currentTime : void 0; isNaN(t) || p.logger.log("media seeked to " + t.toFixed(3)), this.tick() } }, { key: "onMediaEnded", value: function() { p.logger.log("media ended"), this.startPosition = this.lastCurrentTime = 0 } }, { key: "onManifestLoading", value: function() { p.logger.log("trigger BUFFER_RESET"), this.hls.trigger(f.default.BUFFER_RESET), this._bufferedFrags = [], this.stalled = !1, this.startPosition = this.lastCurrentTime = 0 } }, { key: "onManifestParsed", value: function(e) { var t, r = !1, a = !1; e.levels.forEach(function(e) { (t = e.audioCodec) && (-1 !== t.indexOf("mp4a.40.2") && (r = !0), -1 !== t.indexOf("mp4a.40.5") && (a = !0)) }), this.audioCodecSwitch = r && a, this.audioCodecSwitch && p.logger.log("both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC"), this.levels = e.levels, this.startLevelLoaded = !1, this.startFragRequested = !1; var i = this.config; (i.autoStartLoad || this.forceStartLoad) && this.hls.startLoad(i.startPosition) } }, { key: "onLevelLoaded", value: function(e) { var t = e.details, r = e.level, a = this.levels[r], i = t.totalduration, n = 0; if (p.logger.log("level " + r + " loaded [" + t.startSN + "," + t.endSN + "],duration:" + i), this.levelLastLoaded = r, t.live) { var s = a.details; s && t.fragments.length > 0 ? (h.default.mergeDetails(s, t), n = t.fragments[0].start, this.liveSyncPosition = this.computeLivePosition(n, s), t.PTSKnown ? p.logger.log("live playlist sliding:" + n.toFixed(3)) : p.logger.log("live playlist - outdated PTS, unknown sliding")) : (t.PTSKnown = !1, p.logger.log("live playlist - first load, unknown sliding")) } else t.PTSKnown = !1; if (a.details = t, this.hls.trigger(f.default.LEVEL_UPDATED, { details: t, level: r }), !1 === this.startFragRequested) { if (-1 === this.startPosition || -1 === this.lastCurrentTime) { var o = t.startTimeOffset; isNaN(o) ? t.live ? (this.startPosition = this.computeLivePosition(n, t), p.logger.log("configure startPosition to " + this.startPosition)) : this.startPosition = 0 : (o < 0 && (p.logger.log("negative start time offset " + o + ", count from end of last fragment"), o = n + i + o), p.logger.log("start time offset found in playlist, adjust startPosition to " + o), this.startPosition = o), this.lastCurrentTime = this.startPosition } this.nextLoadPosition = this.startPosition } this.state === y.WAITING_LEVEL && (this.state = y.IDLE), this.tick() } }, { key: "onKeyLoaded", value: function() { this.state === y.KEY_LOADING && (this.state = y.IDLE, this.tick()) } }, { key: "onFragLoaded", value: function(e) { var t = this.fragCurrent, r = e.frag; if (this.state === y.FRAG_LOADING && t && "main" === r.type && r.level === t.level && r.sn === t.sn) { var a = e.stats, i = this.levels[t.level], n = i.details; if (p.logger.log("Loaded " + t.sn + " of [" + n.startSN + " ," + n.endSN + "],level " + t.level), this.bitrateTest = !1, this.stats = a, !0 === r.bitrateTest && this.hls.nextLoadLevel) this.state = y.IDLE, this.startFragRequested = !1, a.tparsed = a.tbuffered = performance.now(), this.hls.trigger(f.default.FRAG_BUFFERED, { stats: a, frag: t, id: "main" }), this.tick(); else if ("initSegment" === r.sn) this.state = y.IDLE, a.tparsed = a.tbuffered = performance.now(), n.initSegment.data = e.payload, this.hls.trigger(f.default.FRAG_BUFFERED, { stats: a, frag: t, id: "main" }), this.tick(); else { this.state = y.PARSING; var s = n.totalduration, o = t.level, l = t.sn, u = this.config.defaultAudioCodec || i.audioCodec; this.audioCodecSwap && (p.logger.log("swapping playlist audio codec"), void 0 === u && (u = this.lastAudioCodec), u && (u = -1 !== u.indexOf("mp4a.40.5") ? "mp4a.40.2" : "mp4a.40.5")), this.pendingBuffering = !0, this.appended = !1, p.logger.log("Parsing " + l + " of [" + n.startSN + " ," + n.endSN + "],level " + o + ", cc " + t.cc); var c = this.demuxer; c || (c = this.demuxer = new d.default(this.hls, "main")); var h = this.media, g = !(h && h.seeking) && (n.PTSKnown || !n.live), v = n.initSegment ? n.initSegment.data : []; c.push(e.payload, v, u, i.videoCodec, t, s, g, void 0) } } this.fragLoadError = 0 } }, { key: "onFragParsingInitSegment", value: function(e) { var t = this.fragCurrent, r = e.frag; if (t && "main" === e.id && r.sn === t.sn && r.level === t.level && this.state === y.PARSING) { var a, i, n = e.tracks; if (n.audio && this.altAudio && delete n.audio, i = n.audio) { var s = this.levels[this.level].audioCodec, o = navigator.userAgent.toLowerCase(); s && this.audioCodecSwap && (p.logger.log("swapping playlist audio codec"), s = -1 !== s.indexOf("mp4a.40.5") ? "mp4a.40.2" : "mp4a.40.5"), this.audioCodecSwitch && 1 !== i.metadata.channelCount && -1 === o.indexOf("firefox") && (s = "mp4a.40.5"), -1 !== o.indexOf("android") && "audio/mpeg" !== i.container && (s = "mp4a.40.2", p.logger.log("Android: force audio codec to " + s)), i.levelCodec = s, i.id = e.id }(i = n.video) && (i.levelCodec = this.levels[this.level].videoCodec, i.id = e.id), this.hls.trigger(f.default.BUFFER_CODECS, n); for (a in n) { i = n[a], p.logger.log("main track:" + a + ",container:" + i.container + ",codecs[level/parsed]=[" + i.levelCodec + "/" + i.codec + "]"); var l = i.initSegment; l && (this.appended = !0, this.pendingBuffering = !0, this.hls.trigger(f.default.BUFFER_APPENDING, { type: a, data: l, parent: "main", content: "initSegment" })) } this.tick() } } }, { key: "onFragParsingData", value: function(e) { var t = this, r = this.fragCurrent, a = e.frag; if (r && "main" === e.id && a.sn === r.sn && a.level === r.level && ("audio" !== e.type || !this.altAudio) && this.state === y.PARSING) { var i = this.levels[this.level], n = r; if (isNaN(e.endPTS) && (e.endPTS = e.startPTS + r.duration, e.endDTS = e.startDTS + r.duration), p.logger.log("Parsed " + e.type + ",PTS:[" + e.startPTS.toFixed(3) + "," + e.endPTS.toFixed(3) + "],DTS:[" + e.startDTS.toFixed(3) + "/" + e.endDTS.toFixed(3) + "],nb:" + e.nb + ",dropped:" + (e.dropped || 0)), "video" === e.type) if (n.dropped = e.dropped, n.dropped) { if (!n.backtracked) return p.logger.warn("missing video frame(s), backtracking fragment"), n.backtracked = !0, this.nextLoadPosition = e.startPTS, this.state = y.IDLE, this.fragPrevious = n, void this.tick(); p.logger.warn("Already backtracked on this fragment, appending with the gap") } else n.backtracked = !1; var s = h.default.updateFragPTSDTS(i.details, n, e.startPTS, e.endPTS, e.startDTS, e.endDTS), o = this.hls; o.trigger(f.default.LEVEL_PTS_UPDATED, { details: i.details, level: this.level, drift: s, type: e.type, start: e.startPTS, end: e.endPTS }), [e.data1, e.data2].forEach(function(r) { r && r.length && t.state === y.PARSING && (t.appended = !0, t.pendingBuffering = !0, o.trigger(f.default.BUFFER_APPENDING, { type: e.type, data: r, parent: "main", content: "data" })) }), this.tick() } } }, { key: "onFragParsed", value: function(e) { var t = this.fragCurrent, r = e.frag; t && "main" === e.id && r.sn === t.sn && r.level === t.level && this.state === y.PARSING && (this.stats.tparsed = performance.now(), this.state = y.PARSED, this._checkAppendedParsed()) } }, { key: "onAudioTrackSwitching", value: function(e) { var t = !!e.url, r = e.id; if (!t) { if (this.mediaBuffer !== this.media) { p.logger.log("switching on main audio, use media.buffered to schedule main fragment loading"), this.mediaBuffer = this.media; var a = this.fragCurrent; a.loader && (p.logger.log("switching to main audio track, cancel main fragment load"), a.loader.abort()), this.fragCurrent = null, this.fragPrevious = null, this.demuxer && (this.demuxer.destroy(), this.demuxer = null), this.state = y.IDLE } var i = this.hls; i.trigger(f.default.BUFFER_FLUSHING, { startOffset: 0, endOffset: Number.POSITIVE_INFINITY, type: "audio" }), i.trigger(f.default.AUDIO_TRACK_SWITCHED, { id: r }), this.altAudio = !1 } } }, { key: "onAudioTrackSwitched", value: function(e) { var t = e.id, r = !!this.hls.audioTracks[t].url; if (r) { var a = this.videoBuffer; a && this.mediaBuffer !== a && (p.logger.log("switching on alternate audio, use video.buffered to schedule main fragment loading"), this.mediaBuffer = a) } this.altAudio = r, this.tick() } }, { key: "onBufferCreated", value: function(e) { var t = e.tracks, r = void 0, a = void 0, i = !1; for (var n in t) { var s = t[n]; "main" === s.id ? (a = n, r = s, "video" === n && (this.videoBuffer = t[n].buffer)) : i = !0 } i && r ? (p.logger.log("alternate track found, use " + a + ".buffered to schedule main fragment loading"), this.mediaBuffer = r.buffer) : this.mediaBuffer = this.media } }, { key: "onBufferAppended", value: function(e) { if ("main" === e.parent) { var t = this.state; t !== y.PARSING && t !== y.PARSED || (this.pendingBuffering = e.pending > 0, this._checkAppendedParsed()) } } }, { key: "_checkAppendedParsed", value: function() { if (!(this.state !== y.PARSED || this.appended && this.pendingBuffering)) { var e = this.fragCurrent; if (e) { var t = this.mediaBuffer ? this.mediaBuffer : this.media; p.logger.log("main buffered : " + g.default.toString(t.buffered)); var r = this._bufferedFrags.filter(function(e) { return u.default.isBuffered(t, (e.startPTS + e.endPTS) / 2) }); r.push(e), this._bufferedFrags = r.sort(function(e, t) { return e.startPTS - t.startPTS }), this.fragPrevious = e; var a = this.stats; a.tbuffered = performance.now(), this.fragLastKbps = Math.round(8 * a.total / (a.tbuffered - a.tfirst)), this.hls.trigger(f.default.FRAG_BUFFERED, { stats: a, frag: e, id: "main" }), this.state = y.IDLE } this.tick() } } }, { key: "onError", value: function(e) { var t = e.frag || this.fragCurrent; if (!t || "main" === t.type) { var r = this.media, a = r && u.default.isBuffered(r, r.currentTime) && u.default.isBuffered(r, r.currentTime + .5); switch (e.details) { case v.ErrorDetails.FRAG_LOAD_ERROR: case v.ErrorDetails.FRAG_LOAD_TIMEOUT: case v.ErrorDetails.KEY_LOAD_ERROR: case v.ErrorDetails.KEY_LOAD_TIMEOUT: if (!e.fatal) { var i = this.fragLoadError; i ? i++ : i = 1; var n = this.config; if (i <= n.fragLoadingMaxRetry || a || t.autoLevel && t.level) { this.fragLoadError = i, t.loadCounter = 0; var s = Math.min(Math.pow(2, i - 1) * n.fragLoadingRetryDelay, n.fragLoadingMaxRetryTimeout); p.logger.warn("mediaController: frag loading failed, retry in " + s + " ms"), this.retryDate = performance.now() + s, this.loadedmetadata || (this.startFragRequested = !1, this.nextLoadPosition = this.startPosition), this.state = y.FRAG_LOADING_WAITING_RETRY } else p.logger.error("mediaController: " + e.details + " reaches max retry, redispatch as fatal ..."), e.fatal = !0, this.state = y.ERROR } break; case v.ErrorDetails.FRAG_LOOP_LOADING_ERROR: e.fatal || (a ? (this._reduceMaxBufferLength(t.duration), this.state = y.IDLE) : t.autoLevel && 0 !== t.level || (e.fatal = !0, this.state = y.ERROR)); break; case v.ErrorDetails.LEVEL_LOAD_ERROR: case v.ErrorDetails.LEVEL_LOAD_TIMEOUT: this.state !== y.ERROR && (e.fatal ? (this.state = y.ERROR, p.logger.warn("streamController: " + e.details + ",switch to " + this.state + " state ...")) : e.levelRetry || this.state !== y.WAITING_LEVEL || (this.state = y.IDLE)); break; case v.ErrorDetails.BUFFER_FULL_ERROR: "main" !== e.parent || this.state !== y.PARSING && this.state !== y.PARSED || (a ? (this._reduceMaxBufferLength(this.config.maxBufferLength), this.state = y.IDLE) : (p.logger.warn("buffer full error also media.currentTime is not buffered, flush everything"), this.fragCurrent = null, this.flushMainBuffer(0, Number.POSITIVE_INFINITY))) } } } }, { key: "_reduceMaxBufferLength", value: function(e) { var t = this.config; t.maxMaxBufferLength >= e && (t.maxMaxBufferLength /= 2, p.logger.warn("main:reduce max buffer length to " + t.maxMaxBufferLength + "s"), this.fragLoadIdx += 2 * t.fragLoadingLoopThreshold) } }, { key: "_checkBuffer", value: function() { var e = this.media, t = this.config; if (e && e.readyState) { var r = e.currentTime, a = this.mediaBuffer ? this.mediaBuffer : e, i = a.buffered; if (!this.loadedmetadata && i.length) { this.loadedmetadata = !0; var n = e.seeking ? r : this.startPosition, s = u.default.isBuffered(a, n), o = i.start(0); (r !== n || !s && Math.abs(n - o) < t.maxSeekHole) && (p.logger.log("target start position:" + n), s || (n = o, p.logger.log("target start position not buffered, seek to buffered.start(0) " + n)), p.logger.log("adjust currentTime from " + r + " to " + n), e.currentTime = n) } else if (this.immediateSwitch) this.immediateLevelSwitchEnd(); else { var l = u.default.bufferInfo(e, r, 0), d = !(e.paused || e.ended || 0 === e.buffered.length); if (r !== this.lastCurrentTime) this.stallReported && (p.logger.warn("playback not stuck anymore @" + r + ", after " + Math.round(performance.now() - this.stalled) + "ms"), this.stallReported = !1), this.stalled = void 0, this.nudgeRetry = 0; else if (d) { var c = performance.now(), h = this.hls; if (this.stalled) { var g = c - this.stalled, y = l.len, m = this.nudgeRetry || 0; if (y <= .5 && g > 1e3 * t.lowBufferWatchdogPeriod) { this.stallReported || (this.stallReported = !0, p.logger.warn("playback stalling in low buffer @" + r), h.trigger(f.default.ERROR, { type: v.ErrorTypes.MEDIA_ERROR, details: v.ErrorDetails.BUFFER_STALLED_ERROR, fatal: !1, buffer: y })); var E = l.nextStart, b = E - r; if (E && b < t.maxSeekHole && b > 0) { this.nudgeRetry = ++m; var T = m * t.nudgeOffset; p.logger.log("adjust currentTime from " + e.currentTime + " to next buffered @ " + E + " + nudge " + T), e.currentTime = E + T, this.stalled = void 0, h.trigger(f.default.ERROR, { type: v.ErrorTypes.MEDIA_ERROR, details: v.ErrorDetails.BUFFER_SEEK_OVER_HOLE, fatal: !1, hole: E + T - r }) } } else if (y > .5 && g > 1e3 * t.highBufferWatchdogPeriod) if (this.stallReported || (this.stallReported = !0, p.logger.warn("playback stalling in high buffer @" + r), h.trigger(f.default.ERROR, { type: v.ErrorTypes.MEDIA_ERROR, details: v.ErrorDetails.BUFFER_STALLED_ERROR, fatal: !1, buffer: y })), this.stalled = void 0, this.nudgeRetry = ++m, m < t.nudgeMaxRetry) { var k = e.currentTime, _ = k + m * t.nudgeOffset; p.logger.log("adjust currentTime from " + k + " to " + _), e.currentTime = _, h.trigger(f.default.ERROR, { type: v.ErrorTypes.MEDIA_ERROR, details: v.ErrorDetails.BUFFER_NUDGE_ON_STALL, fatal: !1 }) } else p.logger.error("still stuck in high buffer @" + r + " after " + t.nudgeMaxRetry + ", raise fatal error"), h.trigger(f.default.ERROR, { type: v.ErrorTypes.MEDIA_ERROR, details: v.ErrorDetails.BUFFER_STALLED_ERROR, fatal: !0 }) } else this.stalled = c, this.stallReported = !1 } } } } }, { key: "onFragLoadEmergencyAborted", value: function() { this.state = y.IDLE, this.loadedmetadata || (this.startFragRequested = !1, this.nextLoadPosition = this.startPosition), this.tick() } }, { key: "onBufferFlushed", value: function() { var e = this.mediaBuffer ? this.mediaBuffer : this.media; this._bufferedFrags = this._bufferedFrags.filter(function(t) { return u.default.isBuffered(e, (t.startPTS + t.endPTS) / 2) }), this.fragLoadIdx += 2 * this.config.fragLoadingLoopThreshold, this.state = y.IDLE, this.fragPrevious = null } }, { key: "swapAudioCodec", value: function() { this.audioCodecSwap = !this.audioCodecSwap } }, { key: "computeLivePosition", value: 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) } }, { key: "state", set: function(e) { if (this.state !== e) { var t = this.state; this._state = e, p.logger.log("main stream:" + t + "->" + e), this.hls.trigger(f.default.STREAM_STATE_TRANSITION, { previousState: t, nextState: e }) } }, get: function() { return this._state } }, { key: "currentLevel", get: function() { var e = this.media; if (e) { var t = this.getBufferedFrag(e.currentTime); if (t) return t.level } return -1 } }, { key: "nextBufferedFrag", get: function() { var e = this.media; return e ? this.followingBufferedFrag(this.getBufferedFrag(e.currentTime)) : null } }, { key: "nextLevel", get: function() { var e = this.nextBufferedFrag; return e ? e.level : -1 } }, { key: "liveSyncPosition", get: function() { return this._liveSyncPosition }, set: function(e) { this._liveSyncPosition = e } }]), t }(c.default); r.default = m }, { 25: 25, 33: 33, 34: 34, 35: 35, 37: 37, 38: 38, 48: 48, 54: 54, 55: 55 }], 14: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(35)), u = a(e(34)), d = e(54), f = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, l.default.ERROR, l.default.SUBTITLE_TRACKS_UPDATED, l.default.SUBTITLE_TRACK_SWITCH, l.default.SUBTITLE_TRACK_LOADED, l.default.SUBTITLE_FRAG_PROCESSED)); return r.config = e.config, r.vttFragSNsProcessed = {}, r.vttFragQueues = void 0, r.currentlyProcessing = null, r.currentTrackId = -1, r } return s(t, e), o(t, [{ key: "destroy", value: function() { u.default.prototype.destroy.call(this) } }, { key: "clearVttFragQueues", value: function() { var e = this; this.vttFragQueues = {}, this.tracks.forEach(function(t) { e.vttFragQueues[t.id] = [] }) } }, { key: "nextFrag", value: function() { if (null === this.currentlyProcessing && this.currentTrackId > -1 && this.vttFragQueues[this.currentTrackId].length) { var e = this.currentlyProcessing = this.vttFragQueues[this.currentTrackId].shift(); this.hls.trigger(l.default.FRAG_LOADING, { frag: e }) } } }, { key: "onSubtitleFragProcessed", value: function(e) { e.success && this.vttFragSNsProcessed[e.frag.trackId].push(e.frag.sn), this.currentlyProcessing = null, this.nextFrag() } }, { key: "onError", value: function(e) { var t = e.frag; t && "subtitle" !== t.type || this.currentlyProcessing && (this.currentlyProcessing = null, this.nextFrag()) } }, { key: "onSubtitleTracksUpdated", value: function(e) { var t = this; d.logger.log("subtitle tracks updated"), this.tracks = e.subtitleTracks, this.clearVttFragQueues(), this.vttFragSNsProcessed = {}, this.tracks.forEach(function(e) { t.vttFragSNsProcessed[e.id] = [] }) } }, { key: "onSubtitleTrackSwitch", value: function(e) { this.currentTrackId = e.id, this.clearVttFragQueues() } }, { key: "onSubtitleTrackLoaded", value: function(e) { var t = this.vttFragSNsProcessed[e.id], r = this.vttFragQueues[e.id], a = this.currentlyProcessing ? this.currentlyProcessing.sn : -1, i = function(e) { return t.indexOf(e.sn) > -1 }, n = function(e) { return r.some(function(t) { return t.sn === e.sn }) }; e.details.fragments.forEach(function(t) { i(t) || t.sn === a || n(t) || (t.trackId = e.id, r.push(t)) }), this.nextFrag() } }]), t }(u.default); r.default = f }, { 34: 34, 35: 35, 54: 54 }], 15: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } function o(e) { for (var t = [], r = 0; r < e.length; r++) "subtitles" === e[r].kind && t.push(e[r]); return t } Object.defineProperty(r, "__esModule", { value: !0 }); var l = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), u = a(e(35)), d = a(e(34)), f = e(54), c = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, u.default.MEDIA_ATTACHED, u.default.MEDIA_DETACHING, u.default.MANIFEST_LOADING, u.default.MANIFEST_LOADED, u.default.SUBTITLE_TRACK_LOADED)); return r.tracks = [], r.trackId = -1, r.media = void 0, r } return s(t, e), l(t, [{ key: "_onTextTracksChanged", value: function() { if (this.media) { for (var e = -1, t = o(this.media.textTracks), r = 0; r < t.length; r++) "showing" === t[r].mode && (e = r); this.subtitleTrack = e } } }, { key: "destroy", value: function() { d.default.prototype.destroy.call(this) } }, { key: "onMediaAttached", value: function(e) { this.media = e.media, this.media && (this.trackChangeListener = this._onTextTracksChanged.bind(this), this.media.textTracks.addEventListener("change", this.trackChangeListener)) } }, { key: "onMediaDetaching", value: function() { this.media && (this.media.textTracks.removeEventListener("change", this.trackChangeListener), this.media = void 0) } }, { key: "onManifestLoading", value: function() { this.tracks = [], this.trackId = -1 } }, { key: "onManifestLoaded", value: function(e) { var t = this, r = e.subtitles || [], a = !1; this.tracks = r, this.trackId = -1, this.hls.trigger(u.default.SUBTITLE_TRACKS_UPDATED, { subtitleTracks: r }), r.forEach(function(e) { e.default && (t.subtitleTrack = e.id, a = !0) }) } }, { key: "onTick", value: function() { var e = this.trackId, t = this.tracks[e]; if (t) { var r = t.details; void 0 !== r && !0 !== r.live || (f.logger.log("(re)loading playlist for subtitle track " + e), this.hls.trigger(u.default.SUBTITLE_TRACK_LOADING, { url: t.url, id: e })) } } }, { key: "onSubtitleTrackLoaded", value: function(e) { var t = this; e.id < this.tracks.length && (f.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 && (clearInterval(this.timer), this.timer = null)) } }, { key: "setSubtitleTrackInternal", value: function(e) { if (e >= 0 && e < this.tracks.length) { this.timer && (clearInterval(this.timer), this.timer = null), this.trackId = e, f.logger.log("switching to subtitle track " + e); var t = this.tracks[e]; this.hls.trigger(u.default.SUBTITLE_TRACK_SWITCH, { id: e }); var r = t.details; void 0 !== r && !0 !== r.live || (f.logger.log("(re)loading playlist for subtitle track " + e), this.hls.trigger(u.default.SUBTITLE_TRACK_LOADING, { url: t.url, id: e })) } } }, { key: "subtitleTracks", get: function() { return this.tracks } }, { key: "subtitleTrack", get: function() { return this.trackId }, set: function(e) { this.trackId !== e && this.setSubtitleTrackInternal(e) } }]), t }(d.default); r.default = c }, { 34: 34, 35: 35, 54: 54 }], 16: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } function o(e) { if (e && e.cues) for (; e.cues.length > 0;) e.removeCue(e.cues[0]) } function l(e, t) { return e && e.label === t.name && !(e.textTrack1 || e.textTrack2) } function u(e, t, r, a) { return Math.min(t, a) - Math.max(e, r) } Object.defineProperty(r, "__esModule", { value: !0 }); var d = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), f = a(e(35)), c = a(e(34)), h = a(e(49)), g = a(e(58)), v = e(54), p = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, f.default.MEDIA_ATTACHING, f.default.MEDIA_DETACHING, f.default.FRAG_PARSING_USERDATA, f.default.MANIFEST_LOADING, f.default.MANIFEST_LOADED, f.default.FRAG_LOADED, f.default.LEVEL_SWITCHING, f.default.INIT_PTS_FOUND)); if (r.hls = e, r.config = e.config, r.enabled = !0, r.Cues = e.config.cueHandler, r.textTracks = [], r.tracks = [], r.unparsedVttFrags = [], r.initPTS = void 0, r.cueRanges = [], r.config.enableCEA708Captions) { var a = r, s = 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) }, l = { newCue: function(e, t, r) { if (!a.textTrack1) { var i = a.getExistingTrack("1"); if (i) a.textTrack1 = i, o(a.textTrack1), s(a.textTrack1, a.media); else { var n = a.createTextTrack("captions", a.config.captionsTextTrack1Label, a.config.captionsTextTrack1LanguageCode); n && (n.textTrack1 = !0, a.textTrack1 = n) } } a.addCues("textTrack1", e, t, r) } }, u = { newCue: function(e, t, r) { if (!a.textTrack2) { var i = a.getExistingTrack("2"); if (i) a.textTrack2 = i, o(a.textTrack2), s(a.textTrack2, a.media); else { var n = a.createTextTrack("captions", a.config.captionsTextTrack2Label, a.config.captionsTextTrack1LanguageCode); n && (n.textTrack2 = !0, a.textTrack2 = n) } } a.addCues("textTrack2", e, t, r) } }; r.cea608Parser = new h.default(0, l, u) } return r } return s(t, e), d(t, [{ key: "addCues", value: function(e, t, r, a) { for (var i = this.cueRanges, n = !1, s = i.length; s--;) { var o = i[s], l = u(o[0], o[1], t, r); if (l >= 0 && (o[0] = Math.min(o[0], t), o[1] = Math.max(o[1], r), n = !0, l / (r - t) > .5)) return } n || i.push([t, r]), this.Cues.newCue(this[e], t, r, a) } }, { key: "onInitPtsFound", value: function(e) { var t = this; void 0 === this.initPTS && (this.initPTS = e.initPTS), this.unparsedVttFrags.length && (this.unparsedVttFrags.forEach(function(e) { t.onFragLoaded(e) }), this.unparsedVttFrags = []) } }, { key: "getExistingTrack", value: function(e) { var t = this.media; if (t) for (var r = 0; r < t.textTracks.length; r++) { var a = t.textTracks[r]; if (!0 === a["textTrack" + e]) return a } return null } }, { key: "createTextTrack", value: function(e, t, r) { var a = this.media; if (a) return a.addTextTrack(e, t, r) } }, { key: "destroy", value: function() { c.default.prototype.destroy.call(this) } }, { key: "onMediaAttaching", value: function(e) { this.media = e.media } }, { key: "onMediaDetaching", value: function() { o(this.textTrack1), o(this.textTrack2) } }, { key: "onManifestLoading", value: function() { this.lastSn = -1, this.prevCC = -1, this.vttCCs = { ccOffset: 0, presentationOffset: 0 }; var e = this.media; if (e) { var t = e.textTracks; if (t) for (var r = 0; r < t.length; r++) o(t[r]) } } }, { key: "onManifestLoaded", value: function(e) { var t = this; if (this.textTracks = [], this.unparsedVttFrags = this.unparsedVttFrags || [], this.initPTS = void 0, this.cueRanges = [], this.config.enableWebVTT) { this.tracks = e.subtitles || []; var r = this.media ? this.media.textTracks : []; this.tracks.forEach(function(e, a) { var i = void 0; if (a < r.length) { var n = r[a]; l(n, e) && (i = n) } i || (i = t.createTextTrack("subtitles", e.name, e.lang)), i.mode = e.default ? "showing" : "hidden", t.textTracks.push(i) }) } } }, { key: "onLevelSwitching", value: function() { this.enabled = "NONE" !== this.hls.currentLevel.closedCaptions } }, { key: "onFragLoaded", value: function(e) { var t = e.frag, r = e.payload; if ("main" === t.type) { var a = t.sn; if (a !== this.lastSn + 1) { var i = this.cea608Parser; i && i.reset() } this.lastSn = a } else if ("subtitle" === t.type) if (r.byteLength) { if (void 0 === this.initPTS) return void this.unparsedVttFrags.push(e); var n = this.vttCCs; n[t.cc] || (n[t.cc] = { start: t.start, prevCC: this.prevCC, new: !0 }, this.prevCC = t.cc); var s = this.textTracks, o = this.hls; g.default.parse(r, this.initPTS, n, t.cc, function(e) { var r = s[t.trackId]; e.forEach(function(e) { if (!r.cues.getCueById(e.id)) try { r.addCue(e) } catch (a) { var t = new window.TextTrackCue(e.startTime, e.endTime, e.text); t.id = e.id, r.addCue(t) } }), o.trigger(f.default.SUBTITLE_FRAG_PROCESSED, { success: !0, frag: t }) }, function(e) { v.logger.log("Failed to parse VTT cue: " + e), o.trigger(f.default.SUBTITLE_FRAG_PROCESSED, { success: !1, frag: t }) }) } else this.hls.trigger(f.default.SUBTITLE_FRAG_PROCESSED, { success: !1, frag: t }) } }, { key: "onFragParsingUserdata", value: 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) } } }, { key: "extractCea608Data", value: function(e) { for (var t, r, a, i, n, s = 31 & e[0], o = 2, l = [], u = 0; u < s; u++) t = e[o++], r = 127 & e[o++], a = 127 & e[o++], i = 0 != (4 & t), n = 3 & t, 0 === r && 0 === a || i && 0 === n && (l.push(r), l.push(a)); return l } }]), t }(c.default); r.default = p }, { 34: 34, 35: 35, 49: 49, 54: 54, 58: 58 }], 17: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = function() { function e(t, r) { a(this, e), this.subtle = t, this.aesIV = r } return i(e, [{ key: "decrypt", value: function(e, t) { return this.subtle.decrypt({ name: "AES-CBC", iv: this.aesIV }, t, e) } }]), e }(); r.default = n }, {}], 18: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = function() { function e() { a(this, e), this.rcon = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54], this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)], this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)], this.sBox = new Uint32Array(256), this.invSBox = new Uint32Array(256), this.key = new Uint32Array(0), this.initTable() } return i(e, [{ key: "uint8ArrayToUint32Array_", value: function(e) { for (var t = new DataView(e), r = new Uint32Array(4), a = 0; a < 4; a++) r[a] = t.getUint32(4 * a); return r } }, { key: "initTable", value: function() { var e = this.sBox, t = this.invSBox, r = this.subMix, a = r[0], i = r[1], n = r[2], s = r[3], o = this.invSubMix, l = o[0], u = o[1], d = o[2], f = o[3], c = new Uint32Array(256), h = 0, g = 0, v = 0; for (v = 0; v < 256; v++) c[v] = v < 128 ? v << 1 : v << 1 ^ 283; for (v = 0; v < 256; v++) { var p = g ^ g << 1 ^ g << 2 ^ g << 3 ^ g << 4; p = p >>> 8 ^ 255 & p ^ 99, e[h] = p, t[p] = h; var y = c[h], m = c[y], E = c[m], b = 257 * c[p] ^ 16843008 * p; a[h] = b << 24 | b >>> 8, i[h] = b << 16 | b >>> 16, n[h] = b << 8 | b >>> 24, s[h] = b, b = 16843009 * E ^ 65537 * m ^ 257 * y ^ 16843008 * h, l[p] = b << 24 | b >>> 8, u[p] = b << 16 | b >>> 16, d[p] = b << 8 | b >>> 24, f[p] = b, h ? (h = y ^ c[c[c[E ^ y]]], g ^= c[c[g]]) : h = g = 1 } } }, { key: "expandKey", value: function(e) { for (var t = this.uint8ArrayToUint32Array_(e), r = !0, a = 0; a < t.length && r;) r = t[a] === this.key[a], a++; if (!r) { this.key = t; var i = this.keySize = t.length; if (4 !== i && 6 !== i && 8 !== i) throw new Error("Invalid aes key size=" + i); var n = this.ksRows = 4 * (i + 6 + 1), s = void 0, o = void 0, l = this.keySchedule = new Uint32Array(n), u = this.invKeySchedule = new Uint32Array(n), d = this.sBox, f = this.rcon, c = this.invSubMix, h = c[0], g = c[1], v = c[2], p = c[3], y = void 0, m = void 0; for (s = 0; s < n; s++) s < i ? y = l[s] = t[s] : (m = y, s % i == 0 ? (m = d[(m = m << 8 | m >>> 24) >>> 24] << 24 | d[m >>> 16 & 255] << 16 | d[m >>> 8 & 255] << 8 | d[255 & m], m ^= f[s / i | 0] << 24) : i > 6 && s % i == 4 && (m = d[m >>> 24] << 24 | d[m >>> 16 & 255] << 16 | d[m >>> 8 & 255] << 8 | d[255 & m]), l[s] = y = (l[s - i] ^ m) >>> 0); for (o = 0; o < n; o++) s = n - o, m = 3 & o ? l[s] : l[s - 4], u[o] = o < 4 || s <= 4 ? m : h[d[m >>> 24]] ^ g[d[m >>> 16 & 255]] ^ v[d[m >>> 8 & 255]] ^ p[d[255 & m]], u[o] = u[o] >>> 0 } } }, { key: "networkToHostOrderSwap", value: function(e) { return e << 24 | (65280 & e) << 8 | (16711680 & e) >> 8 | e >>> 24 } }, { key: "decrypt", value: function(e, t, r) { for (var a, i, n = this.keySize + 6, s = this.invKeySchedule, o = this.invSBox, l = this.invSubMix, u = l[0], d = l[1], f = l[2], c = l[3], h = this.uint8ArrayToUint32Array_(r), g = h[0], v = h[1], p = h[2], y = h[3], m = new Int32Array(e), E = new Int32Array(m.length), b = void 0, T = void 0, k = void 0, _ = void 0, R = void 0, S = void 0, A = void 0, L = void 0, w = void 0, D = void 0, O = void 0, I = void 0, P = this.networkToHostOrderSwap; t < m.length;) { for (w = P(m[t]), D = P(m[t + 1]), O = P(m[t + 2]), I = P(m[t + 3]), R = w ^ s[0], S = I ^ s[1], A = O ^ s[2], L = D ^ s[3], a = 4, i = 1; i < n; i++) b = u[R >>> 24] ^ d[S >> 16 & 255] ^ f[A >> 8 & 255] ^ c[255 & L] ^ s[a], T = u[S >>> 24] ^ d[A >> 16 & 255] ^ f[L >> 8 & 255] ^ c[255 & R] ^ s[a + 1], k = u[A >>> 24] ^ d[L >> 16 & 255] ^ f[R >> 8 & 255] ^ c[255 & S] ^ s[a + 2], _ = u[L >>> 24] ^ d[R >> 16 & 255] ^ f[S >> 8 & 255] ^ c[255 & A] ^ s[a + 3], R = b, S = T, A = k, L = _, a += 4; b = o[R >>> 24] << 24 ^ o[S >> 16 & 255] << 16 ^ o[A >> 8 & 255] << 8 ^ o[255 & L] ^ s[a], T = o[S >>> 24] << 24 ^ o[A >> 16 & 255] << 16 ^ o[L >> 8 & 255] << 8 ^ o[255 & R] ^ s[a + 1], k = o[A >>> 24] << 24 ^ o[L >> 16 & 255] << 16 ^ o[R >> 8 & 255] << 8 ^ o[255 & S] ^ s[a + 2], _ = o[L >>> 24] << 24 ^ o[R >> 16 & 255] << 16 ^ o[S >> 8 & 255] << 8 ^ o[255 & A] ^ s[a + 3], a += 3, E[t] = P(b ^ g), E[t + 1] = P(_ ^ v), E[t + 2] = P(k ^ p), E[t + 3] = P(T ^ y), g = w, v = D, p = O, y = I, t += 4 } return E.buffer } }, { key: "destroy", value: function() { this.key = void 0, this.keySize = void 0, this.ksRows = void 0, this.sBox = void 0, this.invSBox = void 0, this.subMix = void 0, this.invSubMix = void 0, this.keySchedule = void 0, this.invKeySchedule = void 0, this.rcon = void 0 } }]), e }(); r.default = n }, {}], 19: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var n = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), s = a(e(17)), o = a(e(20)), l = a(e(18)), u = e(33), d = e(54), f = function() { function e(t, r) { i(this, e), this.observer = t, this.config = r, this.logEnabled = !0; try { var a = crypto || self.crypto; this.subtle = a.subtle || a.webkitSubtle } catch (e) {} this.disableWebCrypto = !this.subtle } return n(e, [{ key: "isSync", value: function() { return this.disableWebCrypto && this.config.enableSoftwareAES } }, { key: "decrypt", value: function(e, t, r, a) { var i = this; if (this.disableWebCrypto && this.config.enableSoftwareAES) { this.logEnabled && (d.logger.log("JS AES decrypt"), this.logEnabled = !1); var n = this.decryptor; n || (this.decryptor = n = new l.default), n.expandKey(t), a(n.decrypt(e, 0, r)) } else { this.logEnabled && (d.logger.log("WebCrypto AES decrypt"), this.logEnabled = !1); var u = this.subtle; this.key !== t && (this.key = t, this.fastAesKey = new o.default(u, t)), this.fastAesKey.expandKey().then(function(n) { new s.default(u, r).decrypt(e, n).catch(function(n) { i.onWebCryptoError(n, e, t, r, a) }).then(function(e) { a(e) }) }).catch(function(n) { i.onWebCryptoError(n, e, t, r, a) }) } } }, { key: "onWebCryptoError", value: function(e, t, r, a, i) { this.config.enableSoftwareAES ? (d.logger.log("WebCrypto Error, disable WebCrypto API"), this.disableWebCrypto = !0, this.logEnabled = !0, this.decrypt(t, r, a, i)) : (d.logger.error("decrypting error : " + e.message), this.observer.trigger(Event.ERROR, { type: u.ErrorTypes.MEDIA_ERROR, details: u.ErrorDetails.FRAG_DECRYPT_ERROR, fatal: !0, reason: e.message })) } }, { key: "destroy", value: function() { var e = this.decryptor; e && (e.destroy(), this.decryptor = void 0) } }]), e }(); r.default = f }, { 17: 17, 18: 18, 20: 20, 33: 33, 54: 54 }], 20: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = function() { function e(t, r) { a(this, e), this.subtle = t, this.key = r } return i(e, [{ key: "expandKey", value: function() { return this.subtle.importKey("raw", this.key, { name: "AES-CBC" }, !1, ["encrypt", "decrypt"]) } }]), e }(); r.default = n }, {}], 21: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var n = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), s = a(e(22)), o = e(54), l = a(e(27)), u = function() { function e(t, r, a) { i(this, e), this.observer = t, this.config = a, this.remuxer = r } return n(e, [{ key: "resetInitSegment", value: function(e, t, r, a) { this._audioTrack = { container: "audio/adts", type: "audio", id: -1, sequenceNumber: 0, isAAC: !0, samples: [], len: 0, manifestCodec: t, duration: a, inputTimeScale: 9e4 } } }, { key: "resetTimeStamp", value: function() {} }, { key: "append", value: function(e, t, r, a) { for (var i = this._audioTrack, n = l.default.getID3Data(e, 0), u = 90 * l.default.getTimeStamp(n), d = 0, f = u, c = e.length, h = n.length, g = [{ pts: f, dts: f, data: n }]; h < c - 1;) if (s.default.isHeader(e, h) && h + 5 < c) { s.default.initTrackConfig(i, this.observer, e, h, i.manifestCodec); var v = s.default.appendFrame(i, e, h, u, d); if (!v) { o.logger.log("Unable to parse AAC frame"); break } h += v.length, f = v.sample.pts, d++ } else l.default.isHeader(e, h) ? (n = l.default.getID3Data(e, h), g.push({ pts: f, dts: f, data: n }), h += n.length) : h++; this.remuxer.remux(i, { samples: [] }, { samples: g, inputTimeScale: 9e4 }, { samples: [] }, t, r, a) } }, { key: "destroy", value: function() {} }], [{ key: "probe", value: function(e) { var t, r, a = l.default.getID3Data(e, 0); if (a && void 0 !== l.default.getTimeStamp(a)) for (t = a.length, r = Math.min(e.length - 1, t + 100); t < r; t++) if (s.default.probe(e, t)) return o.logger.log("ADTS sync word found !"), !0; return !1 } }]), e }(); r.default = u }, { 22: 22, 27: 27, 54: 54 }], 22: [function(e, t, r) { "use strict"; var a = e(54), i = e(33), n = { getAudioConfig: function(e, t, r, n) { var s, o, l, u, d, f = navigator.userAgent.toLowerCase(), c = n, h = [96e3, 88200, 64e3, 48e3, 44100, 32e3, 24e3, 22050, 16e3, 12e3, 11025, 8e3, 7350]; if (s = 1 + ((192 & t[r + 2]) >>> 6), !((o = (60 & t[r + 2]) >>> 2) > h.length - 1)) return u = (1 & t[r + 2]) << 2, u |= (192 & t[r + 3]) >>> 6, a.logger.log("manifest codec:" + n + ",ADTS data:type:" + s + ",sampleingIndex:" + o + "[" + h[o] + "Hz],channelConfig:" + u), /firefox/i.test(f) ? o >= 6 ? (s = 5, d = new Array(4), l = o - 3) : (s = 2, d = new Array(2), l = o) : -1 !== f.indexOf("android") ? (s = 2, d = new Array(2), l = o) : (s = 5, d = new Array(4), n && (-1 !== n.indexOf("mp4a.40.29") || -1 !== n.indexOf("mp4a.40.5")) || !n && o >= 6 ? l = o - 3 : ((n && -1 !== n.indexOf("mp4a.40.2") && (o >= 6 && 1 === u || /vivaldi/i.test(f)) || !n && 1 === u) && (s = 2, d = new Array(2)), l = o)), d[0] = s << 3, d[0] |= (14 & o) >> 1, d[1] |= (1 & o) << 7, d[1] |= u << 3, 5 === s && (d[1] |= (14 & l) >> 1, d[2] = (1 & l) << 7, d[2] |= 8, d[3] = 0), { config: d, samplerate: h[o], channelCount: u, codec: "mp4a.40." + s, manifestCodec: c }; e.trigger(Event.ERROR, { type: i.ErrorTypes.MEDIA_ERROR, details: i.ErrorDetails.FRAG_PARSING_ERROR, fatal: !0, reason: "invalid ADTS sampling index:" + o }) }, isHeaderPattern: function(e, t) { return 255 === e[t] && 240 == (246 & e[t + 1]) }, getHeaderLength: function(e, t) { return 1 & e[t + 1] ? 7 : 9 }, getFullFrameLength: function(e, t) { return (3 & e[t + 3]) << 11 | e[t + 4] << 3 | (224 & e[t + 5]) >>> 5 }, 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.getHeaderLength(e, t); t + 5 < e.length && (r = this.getFullFrameLength(e, t)); var a = t + r; if (a === e.length || a + 1 < e.length && this.isHeaderPattern(e, a)) return !0 } return !1 }, initTrackConfig: function(e, t, r, i, n) { if (!e.samplerate) { var s = this.getAudioConfig(t, r, i, n); e.config = s.config, e.samplerate = s.samplerate, e.channelCount = s.channelCount, e.codec = s.codec, e.manifestCodec = s.manifestCodec, a.logger.log("parsed codec:" + e.codec + ",rate:" + s.samplerate + ",nb channel:" + s.channelCount) } }, getFrameDuration: function(e) { return 9216e4 / e }, appendFrame: function(e, t, r, a, i) { var n = this.getFrameDuration(e.samplerate), s = this.parseFrameHeader(t, r, a, i, n); if (s) { var o = s.stamp, l = s.headerLength, u = s.frameLength, d = { unit: t.subarray(r + l, r + l + u), pts: o, dts: o }; return e.samples.push(d), e.len += u, { sample: d, length: u + l } } }, parseFrameHeader: function(e, t, r, a, i) { var n, s, o, l = e.length; if (n = this.getHeaderLength(e, t), s = this.getFullFrameLength(e, t), (s -= n) > 0 && t + n + s <= l) return o = r + a * i, { headerLength: n, frameLength: s, stamp: o } } }; t.exports = n }, { 33: 33, 54: 54 }], 23: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var n = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), s = a(e(35)), o = e(33), l = a(e(19)), u = a(e(21)), d = a(e(29)), f = a(e(32)), c = a(e(28)), h = a(e(45)), g = a(e(46)), v = function() { function e(t, r, a, n) { i(this, e), this.observer = t, this.typeSupported = r, this.config = a, this.vendor = n } return n(e, [{ key: "destroy", value: function() { var e = this.demuxer; e && e.destroy() } }, { key: "push", value: function(e, t, r, a, i, n, o, u, d, f, c, h) { if (e.byteLength > 0 && null != t && null != t.key && "AES-128" === t.method) { var g = this.decrypter; null == g && (g = this.decrypter = new l.default(this.observer, this.config)); var v, p = this; try { v = performance.now() } catch (e) { v = Date.now() } g.decrypt(e, t.key.buffer, t.iv.buffer, function(e) { var l; try { l = performance.now() } catch (e) { l = Date.now() } p.observer.trigger(s.default.FRAG_DECRYPTED, { stats: { tstart: v, tdecrypt: l } }), p.pushDecrypted(new Uint8Array(e), t, new Uint8Array(r), a, i, n, o, u, d, f, c, h) }) } else this.pushDecrypted(new Uint8Array(e), t, new Uint8Array(r), a, i, n, o, u, d, f, c, h) } }, { key: "pushDecrypted", value: function(e, t, r, a, i, n, l, v, p, y, m, E) { var b = this.demuxer; if (!b || l && !this.probe(e)) { for (var T = this.observer, k = this.typeSupported, _ = this.config, R = [{ demux: u.default, remux: h.default }, { demux: c.default, remux: h.default }, { demux: f.default, remux: h.default }, { demux: d.default, remux: g.default }], S = 0, A = R.length; S < A; S++) { var L = R[S], w = L.demux.probe; if (w(e)) { var D = this.remuxer = new L.remux(T, _, k, this.vendor); b = new L.demux(T, D, _, k), this.probe = w; break } } if (!b) return void T.trigger(s.default.ERROR, { type: o.ErrorTypes.MEDIA_ERROR, details: o.ErrorDetails.FRAG_PARSING_ERROR, fatal: !0, reason: "no demux matching with content found" }); this.demuxer = b } var O = this.remuxer; (l || v) && (b.resetInitSegment(r, a, i, y), O.resetInitSegment()), l && (b.resetTimeStamp(E), O.resetTimeStamp(E)), "function" == typeof b.setDecryptData && b.setDecryptData(t), b.append(e, n, p, m) } }]), e }(); r.default = v }, { 19: 19, 21: 21, 28: 28, 29: 29, 32: 32, 33: 33, 35: 35, 45: 45, 46: 46 }], 24: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } Object.defineProperty(r, "__esModule", { value: !0 }); var i = a(e(23)), n = a(e(35)), s = e(54), o = a(e(1)); r.default = function(e) { var t = new o.default; t.trigger = function(e) { for (var r = arguments.length, a = Array(r > 1 ? r - 1 : 0), i = 1; i < r; i++) a[i - 1] = arguments[i]; t.emit.apply(t, [e, e].concat(a)) }, t.off = function(e) { for (var r = arguments.length, a = Array(r > 1 ? r - 1 : 0), i = 1; i < r; i++) a[i - 1] = arguments[i]; t.removeListener.apply(t, [e].concat(a)) }; var r = function(t, r) { e.postMessage({ event: t, data: r }) }; e.addEventListener("message", function(a) { var n = a.data; switch (n.cmd) { case "init": var o = JSON.parse(n.config); e.demuxer = new i.default(t, n.typeSupported, o, n.vendor); try { (0, s.enableLogs)(!0 === o.debug) } catch (e) {} r("init", null); break; case "demux": e.demuxer.push(n.data, n.decryptdata, n.initSegment, n.audioCodec, n.videoCodec, n.timeOffset, n.discontinuity, n.trackSwitch, n.contiguous, n.duration, n.accurateTimeOffset, n.defaultInitPTS) } }), t.on(n.default.FRAG_DECRYPTED, r), t.on(n.default.FRAG_PARSING_INIT_SEGMENT, r), t.on(n.default.FRAG_PARSED, r), t.on(n.default.ERROR, r), t.on(n.default.FRAG_PARSING_METADATA, r), t.on(n.default.FRAG_PARSING_USERDATA, r), t.on(n.default.INIT_PTS_FOUND, r), t.on(n.default.FRAG_PARSING_DATA, function(t, r) { var a = [], i = { event: t, data: r }; r.data1 && (i.data1 = r.data1.buffer, a.push(r.data1.buffer), delete r.data1), r.data2 && (i.data2 = r.data2.buffer, a.push(r.data2.buffer), delete r.data2), e.postMessage(i, a) }) } }, { 1: 1, 23: 23, 35: 35, 54: 54 }], 25: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var n = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), s = a(e(35)), o = a(e(23)), l = a(e(24)), u = e(54), d = e(33), f = a(e(1)), c = function() { function t(r, a) { i(this, t), this.hls = r, this.id = a; var n = this.observer = new f.default, c = r.config; n.trigger = function(e) { for (var t = arguments.length, r = Array(t > 1 ? t - 1 : 0), a = 1; a < t; a++) r[a - 1] = arguments[a]; n.emit.apply(n, [e, e].concat(r)) }, n.off = function(e) { for (var t = arguments.length, r = Array(t > 1 ? t - 1 : 0), a = 1; a < t; a++) r[a - 1] = arguments[a]; n.removeListener.apply(n, [e].concat(r)) }; var h = function(e, t) { (t = t || {}).frag = this.frag, t.id = this.id, r.trigger(e, t) }.bind(this); n.on(s.default.FRAG_DECRYPTED, h), n.on(s.default.FRAG_PARSING_INIT_SEGMENT, h), n.on(s.default.FRAG_PARSING_DATA, h), n.on(s.default.FRAG_PARSED, h), n.on(s.default.ERROR, h), n.on(s.default.FRAG_PARSING_METADATA, h), n.on(s.default.FRAG_PARSING_USERDATA, h), n.on(s.default.INIT_PTS_FOUND, h); var g = { mp4: MediaSource.isTypeSupported("video/mp4"), mpeg: MediaSource.isTypeSupported("audio/mpeg"), mp3: MediaSource.isTypeSupported('audio/mp4; codecs="mp3"') }, v = navigator.vendor; if (c.enableWorker && "undefined" != typeof Worker) { u.logger.log("demuxing in webworker"); var p = void 0; try { var y = e(3); p = this.w = y(l.default), this.onwmsg = this.onWorkerMessage.bind(this), p.addEventListener("message", this.onwmsg), p.onerror = function(e) { r.trigger(s.default.ERROR, { type: d.ErrorTypes.OTHER_ERROR, details: d.ErrorDetails.INTERNAL_EXCEPTION, fatal: !0, event: "demuxerWorker", err: { message: e.message + " (" + e.filename + ":" + e.lineno + ")" } }) }, p.postMessage({ cmd: "init", typeSupported: g, vendor: v, id: a, config: JSON.stringify(c) }) } catch (e) { u.logger.error("error while initializing DemuxerWorker, fallback on DemuxerInline"), p && URL.revokeObjectURL(p.objectURL), this.demuxer = new o.default(n, g, c, v), this.w = void 0 } } else this.demuxer = new o.default(n, g, c, v) } return n(t, [{ key: "destroy", value: 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) } }, { key: "push", value: function(e, t, r, a, i, n, s, o) { var l = this.w, d = isNaN(i.startDTS) ? i.start : i.startDTS, f = i.decryptdata, c = this.frag, h = !(c && i.cc === c.cc), g = !(c && i.level === c.level), v = c && i.sn === c.sn + 1, p = !g && v; if (h && u.logger.log(this.id + ":discontinuity detected"), g && u.logger.log(this.id + ":switch detected"), this.frag = i, l) l.postMessage({ cmd: "demux", data: e, decryptdata: f, initSegment: t, audioCodec: r, videoCodec: a, timeOffset: d, discontinuity: h, trackSwitch: g, contiguous: p, duration: n, accurateTimeOffset: s, defaultInitPTS: o }, [e]); else { var y = this.demuxer; y && y.push(e, f, t, r, a, d, h, g, p, n, s, o) } } }, { key: "onWorkerMessage", value: function(e) { var t = e.data, r = this.hls; switch (t.event) { case "init": URL.revokeObjectURL(this.w.objectURL); break; case s.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) } } }]), t }(); r.default = c }, { 1: 1, 23: 23, 24: 24, 3: 3, 33: 33, 35: 35, 54: 54 }], 26: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = e(54), s = function() { function e(t) { a(this, e), this.data = t, this.bytesAvailable = t.byteLength, this.word = 0, this.bitsAvailable = 0 } return i(e, [{ key: "loadWord", value: function() { var e = this.data, t = this.bytesAvailable, r = e.byteLength - t, a = new Uint8Array(4), i = Math.min(4, t); if (0 === i) throw new Error("no bytes available"); a.set(e.subarray(r, r + i)), this.word = new DataView(a.buffer).getUint32(0), this.bitsAvailable = 8 * i, this.bytesAvailable -= i } }, { key: "skipBits", value: function(e) { var t; this.bitsAvailable > e ? (this.word <<= e, this.bitsAvailable -= e) : (e -= this.bitsAvailable, e -= (t = e >> 3) >> 3, this.bytesAvailable -= t, this.loadWord(), this.word <<= e, this.bitsAvailable -= e) } }, { key: "readBits", value: function(e) { var t = Math.min(this.bitsAvailable, e), r = this.word >>> 32 - t; return e > 32 && n.logger.error("Cannot read more than 32 bits at a time"), this.bitsAvailable -= t, this.bitsAvailable > 0 ? this.word <<= t : this.bytesAvailable > 0 && this.loadWord(), (t = e - t) > 0 && this.bitsAvailable ? r << t | this.readBits(t) : r } }, { key: "skipLZ", value: 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() } }, { key: "skipUEG", value: function() { this.skipBits(1 + this.skipLZ()) } }, { key: "skipEG", value: function() { this.skipBits(1 + this.skipLZ()) } }, { key: "readUEG", value: function() { var e = this.skipLZ(); return this.readBits(e + 1) - 1 } }, { key: "readEG", value: function() { var e = this.readUEG(); return 1 & e ? 1 + e >>> 1 : -1 * (e >>> 1) } }, { key: "readBoolean", value: function() { return 1 === this.readBits(1) } }, { key: "readUByte", value: function() { return this.readBits(8) } }, { key: "readUShort", value: function() { return this.readBits(16) } }, { key: "readUInt", value: function() { return this.readBits(32) } }, { key: "skipScalingList", value: function(e) { var t, r = 8, a = 8; for (t = 0; t < e; t++) 0 !== a && (a = (r + this.readEG() + 256) % 256), r = 0 === a ? r : a } }, { key: "readSPS", value: function() { var e, t, r, a, i, n, s, o = 0, l = 0, u = 0, d = 0, f = this.readUByte.bind(this), c = this.readBits.bind(this), h = this.readUEG.bind(this), g = this.readBoolean.bind(this), v = this.skipBits.bind(this), p = this.skipEG.bind(this), y = this.skipUEG.bind(this), m = this.skipScalingList.bind(this); if (f(), e = f(), c(5), v(3), f(), y(), 100 === e || 110 === e || 122 === e || 244 === e || 44 === e || 83 === e || 86 === e || 118 === e || 128 === e) { var E = h(); if (3 === E && v(1), y(), y(), v(1), g()) for (n = 3 !== E ? 8 : 12, s = 0; s < n; s++) g() && m(s < 6 ? 16 : 64) } y(); var b = h(); if (0 === b) h(); else if (1 === b) for (v(1), p(), p(), t = h(), s = 0; s < t; s++) p(); y(), v(1), r = h(), a = h(), 0 === (i = c(1)) && v(1), v(1), g() && (o = h(), l = h(), u = h(), d = h()); var T = [1, 1]; if (g() && g()) switch (f()) { case 1: T = [1, 1]; break; case 2: T = [12, 11]; break; case 3: T = [10, 11]; break; case 4: T = [16, 11]; break; case 5: T = [40, 33]; break; case 6: T = [24, 11]; break; case 7: T = [20, 11]; break; case 8: T = [32, 11]; break; case 9: T = [80, 33]; break; case 10: T = [18, 11]; break; case 11: T = [15, 11]; break; case 12: T = [64, 33]; break; case 13: T = [160, 99]; break; case 14: T = [4, 3]; break; case 15: T = [3, 2]; break; case 16: T = [2, 1]; break; case 255: T = [f() << 8 | f(), f() << 8 | f()] } return { width: Math.ceil(16 * (r + 1) - 2 * o - 2 * l), height: (2 - i) * (a + 1) * 16 - (i ? 2 : 4) * (u + d), pixelRatio: T } } }, { key: "readSliceType", value: function() { return this.readUByte(), this.readUEG(), this.readUEG() } }]), e }(); r.default = s }, { 54: 54 }], 27: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = function() { function e() { a(this, e) } return i(e, null, [{ key: "isHeader", value: 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 } }, { key: "isFooter", value: 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 } }, { key: "getID3Data", value: function(t, r) { for (var a = r, i = 0; e.isHeader(t, r);) i += 10, i += e._readSize(t, r + 6), e.isFooter(t, r + 10) && (i += 10), r += i; if (i > 0) return t.subarray(a, a + i) } }, { key: "_readSize", value: function(e, t) { var r = 0; return r = (127 & e[t]) << 21, r |= (127 & e[t + 1]) << 14, r |= (127 & e[t + 2]) << 7, r |= 127 & e[t + 3] } }, { key: "getTimeStamp", value: function(t) { for (var r = e.getID3Frames(t), a = 0; a < r.length; a++) { var i = r[a]; if (e.isTimeStampFrame(i)) return e._readTimeStamp(i) } } }, { key: "isTimeStampFrame", value: function(e) { return e && "PRIV" === e.key && "com.apple.streaming.transportStreamTimestamp" === e.info } }, { key: "_getFrameData", value: function(t) { var r = String.fromCharCode(t[0], t[1], t[2], t[3]), a = e._readSize(t, 4); return { type: r, size: a, data: t.subarray(10, 10 + a) } } }, { key: "getID3Frames", value: function(t) { for (var r = 0, a = []; e.isHeader(t, r);) { for (var i = e._readSize(t, r + 6), n = (r += 10) + i; r + 8 < n;) { var s = e._getFrameData(t.subarray(r)), o = e._decodeFrame(s); o && a.push(o), r += s.size + 10 } e.isFooter(t, r) && (r += 10) } return a } }, { key: "_decodeFrame", value: function(t) { return "PRIV" === t.type ? e._decodePrivFrame(t) : "T" === t.type[0] ? e._decodeTextFrame(t) : "W" === t.type[0] ? e._decodeURLFrame(t) : void 0 } }, { key: "_readTimeStamp", value: function(e) { if (8 === e.data.byteLength) { var t = new Uint8Array(e.data), r = 1 & t[3], a = (t[4] << 23) + (t[5] << 15) + (t[6] << 7) + t[7]; return a /= 45, r && (a += 47721858.84), Math.round(a) } } }, { key: "_decodePrivFrame", value: function(t) { if (!(t.size < 2)) { var r = e._utf8ArrayToStr(t.data), a = new Uint8Array(t.data.subarray(r.length + 1)); return { key: t.type, info: r, data: a.buffer } } } }, { key: "_decodeTextFrame", value: function(t) { if (!(t.size < 2)) { if ("TXXX" === t.type) { var r = 1, a = e._utf8ArrayToStr(t.data.subarray(r)); r += a.length + 1; var i = e._utf8ArrayToStr(t.data.subarray(r)); return { key: t.type, info: a, data: i } } var n = e._utf8ArrayToStr(t.data.subarray(1)); return { key: t.type, data: n } } } }, { key: "_decodeURLFrame", value: function(t) { if ("WXXX" === t.type) { if (t.size < 2) return; var r = 1, a = e._utf8ArrayToStr(t.data.subarray(r)); r += a.length + 1; var i = e._utf8ArrayToStr(t.data.subarray(r)); return { key: t.type, info: a, data: i } } var n = e._utf8ArrayToStr(t.data); return { key: t.type, data: n } } }, { key: "_utf8ArrayToStr", value: function(e) { for (var t = void 0, r = void 0, a = "", i = 0, n = e.length; i < n;) { var s = e[i++]; switch (s >> 4) { case 0: return a; case 1: case 2: case 3: case 4: case 5: case 6: case 7: a += String.fromCharCode(s); break; case 12: case 13: t = e[i++], a += String.fromCharCode((31 & s) << 6 | 63 & t); break; case 14: t = e[i++], r = e[i++], a += String.fromCharCode((15 & s) << 12 | (63 & t) << 6 | (63 & r) << 0) } } return a } }]), e }(); r.default = n }, {}], 28: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var n = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), s = a(e(27)), o = e(54), l = a(e(30)), u = function() { function e(t, r, a) { i(this, e), this.observer = t, this.config = a, this.remuxer = r } return n(e, [{ key: "resetInitSegment", value: function(e, t, r, a) { this._audioTrack = { container: "audio/mpeg", type: "audio", id: -1, sequenceNumber: 0, isAAC: !1, samples: [], len: 0, manifestCodec: t, duration: a, inputTimeScale: 9e4 } } }, { key: "resetTimeStamp", value: function() {} }, { key: "append", value: function(e, t, r, a) { for (var i = s.default.getID3Data(e, 0), n = 90 * s.default.getTimeStamp(i), o = i.length, u = e.length, d = 0, f = 0, c = this._audioTrack, h = [{ pts: n, dts: n, data: i }]; o < u;) if (l.default.isHeader(e, o)) { var g = l.default.appendFrame(c, e, o, n, d); if (!g) break; o += g.length, f = g.sample.pts, d++ } else s.default.isHeader(e, o) ? (i = s.default.getID3Data(e, o), h.push({ pts: f, dts: f, data: i }), o += i.length) : o++; this.remuxer.remux(c, { samples: [] }, { samples: h, inputTimeScale: 9e4 }, { samples: [] }, t, r, a) } }, { key: "destroy", value: function() {} }], [{ key: "probe", value: function(e) { var t, r, a = s.default.getID3Data(e, 0); if (a && void 0 !== s.default.getTimeStamp(a)) for (t = a.length, r = Math.min(e.length - 1, t + 100); t < r; t++) if (l.default.probe(e, t)) return o.logger.log("MPEG Audio sync word found !"), !0; return !1 } }]), e }(); r.default = u }, { 27: 27, 30: 30, 54: 54 }], 29: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = function(e) { return e && e.__esModule ? e : { default: e } }(e(35)), s = Math.pow(2, 32) - 1, o = function() { function e(t, r) { a(this, e), this.observer = t, this.remuxer = r } return i(e, [{ key: "resetTimeStamp", value: function(e) { this.initPTS = e } }, { key: "resetInitSegment", value: function(t, r, a, i) { if (t && t.byteLength) { var s = this.initData = e.parseInitSegment(t), o = {}; s.audio && (o.audio = { container: "audio/mp4", codec: r, initSegment: i ? t : null }), s.video && (o.video = { container: "video/mp4", codec: a, initSegment: i ? t : null }), this.observer.trigger(n.default.FRAG_PARSING_INIT_SEGMENT, { tracks: o }) } else r && (this.audioCodec = r), a && (this.videoCodec = a) } }, { key: "append", value: function(t, r, a, i) { var s = this.initData; s || (this.resetInitSegment(t, this.audioCodec, this.videoCodec), s = this.initData); var o = void 0, l = this.initPTS; if (void 0 === l) { var u = e.getStartDTS(s, t); this.initPTS = l = u - r, this.observer.trigger(n.default.INIT_PTS_FOUND, { initPTS: l }) } e.offsetStartDTS(s, t, l), o = e.getStartDTS(s, t), this.remuxer.remux(s.audio, s.video, null, null, o, a, i, t) } }, { key: "destroy", value: function() {} }], [{ key: "probe", value: function(t) { if (t.length >= 8) { var r = e.bin2str(t.subarray(4, 8)); return ["moof", "ftyp", "styp"].indexOf(r) >= 0 } return !1 } }, { key: "bin2str", value: function(e) { return String.fromCharCode.apply(null, e) } }, { key: "readUint32", value: 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 } }, { key: "writeUint32", value: 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 } }, { key: "findBox", value: function(t, r) { var a, i, n, s, o, l, u, d = []; if (t.data ? (l = t.start, s = t.end, t = t.data) : (l = 0, s = t.byteLength), !r.length) return null; for (a = l; a < s;) i = e.readUint32(t, a), n = e.bin2str(t.subarray(a + 4, a + 8)), u = i > 1 ? a + i : s, n === r[0] && (1 === r.length ? d.push({ data: t, start: a + 8, end: u }) : (o = e.findBox({ data: t, start: a + 8, end: u }, r.slice(1))).length && (d = d.concat(o))), a = u; return d } }, { key: "parseInitSegment", value: function(t) { var r = []; return e.findBox(t, ["moov", "trak"]).forEach(function(t) { var a = e.findBox(t, ["tkhd"])[0]; if (a) { var i = a.data[a.start], n = 0 === i ? 12 : 20, s = e.readUint32(a, n), o = e.findBox(t, ["mdia", "mdhd"])[0]; if (o) { n = 0 === (i = o.data[o.start]) ? 12 : 20; var l = e.readUint32(o, n), u = e.findBox(t, ["mdia", "hdlr"])[0]; if (u) { var d = { soun: "audio", vide: "video" } [e.bin2str(u.data.subarray(u.start + 8, u.start + 12))]; d && (r[s] = { timescale: l, type: d }, r[d] = { timescale: l, id: s }) } } } }), r } }, { key: "getStartDTS", value: function(t, r) { var a, i, n; return a = e.findBox(r, ["moof", "traf"]), i = [].concat.apply([], a.map(function(r) { return e.findBox(r, ["tfhd"]).map(function(a) { var i, n, s; return i = e.readUint32(a, 4), n = t[i].timescale || 9e4, s = e.findBox(r, ["tfdt"]).map(function(t) { var r, a; return r = t.data[t.start], a = e.readUint32(t, 4), 1 === r && (a *= Math.pow(2, 32), a += e.readUint32(t, 8)), a })[0], (s = s || 1 / 0) / n }) })), n = Math.min.apply(null, i), isFinite(n) ? n : 0 } }, { key: "offsetStartDTS", value: function(t, r, a) { e.findBox(r, ["moof", "traf"]).map(function(r) { return e.findBox(r, ["tfhd"]).map(function(i) { var n = e.readUint32(i, 4), o = t[n].timescale || 9e4; e.findBox(r, ["tfdt"]).map(function(t) { var r = t.data[t.start], i = e.readUint32(t, 4); if (0 === r) e.writeUint32(t, 4, i - a * o); else { i *= Math.pow(2, 32), i += e.readUint32(t, 8), i -= a * o; var n = Math.floor(i / (s + 1)), l = Math.floor(i % (s + 1)); e.writeUint32(t, 4, n), e.writeUint32(t, 8, l) } }) }) }) } }]), e }(); r.default = o }, { 35: 35 }], 30: [function(e, t, r) { "use strict"; var a = { 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], appendFrame: function(e, t, r, a, i) { if (!(r + 24 > t.length)) { var n = this.parseHeader(t, r); if (n && r + n.frameLength <= t.length) { var s = a + i * (10368e4 / 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, n = e[t + 2] >> 4 & 15, s = e[t + 2] >> 2 & 3, o = !!(2 & e[t + 2]); if (1 !== r && 0 !== n && 15 !== n && 3 !== s) { var l = 3 === r ? 3 - i : 3 === i ? 3 : 4, u = 1e3 * a.BitratesMap[14 * l + n - 1], d = 3 === r ? 0 : 2 === r ? 1 : 2, f = a.SamplingRateMap[3 * d + s], c = o ? 1 : 0; return { sampleRate: f, channelCount: e[t + 3] >> 6 == 3 ? 1 : 2, frameLength: 3 === i ? (3 === r ? 12 : 6) * u / f + c << 2 : (3 === r ? 144 : 72) * u / f + c | 0 } } }, 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), a = 4; r && r.frameLength && (a = r.frameLength); var i = t + a; if (i === e.length || i + 1 < e.length && this.isHeaderPattern(e, i)) return !0 } return !1 } }; t.exports = a }, {}], 31: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = function(e) { return e && e.__esModule ? e : { default: e } }(e(19)), s = function() { function e(t, r, i, s) { a(this, e), this.decryptdata = i, this.discardEPB = s, this.decrypter = new n.default(t, r) } return i(e, [{ key: "decryptBuffer", value: function(e, t) { this.decrypter.decrypt(e, this.decryptdata.key.buffer, this.decryptdata.iv.buffer, t) } }, { key: "decryptAacSample", value: function(e, t, r, a) { var i = e[t].unit, n = i.subarray(16, i.length - i.length % 16), s = n.buffer.slice(n.byteOffset, n.byteOffset + n.length), o = this; this.decryptBuffer(s, function(n) { n = new Uint8Array(n), i.set(n, 16), a || o.decryptAacSamples(e, t + 1, r) }) } }, { key: "decryptAacSamples", value: function(e, t, r) { for (;; t++) { if (t >= e.length) return void r(); if (!(e[t].unit.length < 32)) { var a = this.decrypter.isSync(); if (this.decryptAacSample(e, t, r, a), !a) return } } } }, { key: "getAvcEncryptedData", value: function(e) { for (var t = 16 * Math.floor((e.length - 48) / 160) + 16, r = new Int8Array(t), a = 0, i = 32; i <= e.length - 16; i += 160, a += 16) r.set(e.subarray(i, i + 16), a); return r } }, { key: "getAvcDecryptedUnit", value: function(e, t) { t = new Uint8Array(t); for (var r = 0, a = 32; a <= e.length - 16; a += 160, r += 16) e.set(t.subarray(r, r + 16), a); return e } }, { key: "decryptAvcSample", value: function(e, t, r, a, i, n) { var s = this.discardEPB(i.data), o = this.getAvcEncryptedData(s), l = this; this.decryptBuffer(o.buffer, function(o) { i.data = l.getAvcDecryptedUnit(s, o), n || l.decryptAvcSamples(e, t, r + 1, a) }) } }, { key: "decryptAvcSamples", value: function(e, t, r, a) { for (;; t++, r = 0) { if (t >= e.length) return void a(); for (var i = e[t].units; !(r >= i.length); r++) { var n = i[r]; if (!(n.length <= 48 || 1 !== n.type && 5 !== n.type)) { var s = this.decrypter.isSync(); if (this.decryptAvcSample(e, t, r, a, n, s), !s) return } } } } }]), e }(); r.default = s }, { 19: 19 }], 32: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var n = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), s = a(e(22)), o = a(e(30)), l = a(e(35)), u = a(e(26)), d = a(e(31)), f = e(54), c = e(33), h = function() { function e(t, r, a, n) { i(this, e), this.observer = t, this.config = a, this.typeSupported = n, this.remuxer = r, this.sampleAes = null } return n(e, [{ key: "setDecryptData", value: function(e) { null != e && null != e.key && "SAMPLE-AES" === e.method ? this.sampleAes = new d.default(this.observer, this.config, e, this.discardEPB) : this.sampleAes = null } }, { key: "resetInitSegment", value: function(e, t, r, a) { this.pmtParsed = !1, this._pmtId = -1, this._avcTrack = { container: "video/mp2t", type: "video", id: -1, inputTimeScale: 9e4, sequenceNumber: 0, samples: [], len: 0, dropped: 0 }, this._audioTrack = { container: "video/mp2t", type: "audio", id: -1, inputTimeScale: 9e4, duration: a, sequenceNumber: 0, samples: [], len: 0, isAAC: !0 }, this._id3Track = { type: "id3", id: -1, inputTimeScale: 9e4, sequenceNumber: 0, samples: [], len: 0 }, this._txtTrack = { type: "text", id: -1, inputTimeScale: 9e4, sequenceNumber: 0, samples: [], len: 0 }, this.aacOverFlow = null, this.aacLastPTS = null, this.avcSample = null, this.audioCodec = t, this.videoCodec = r, this._duration = a } }, { key: "resetTimeStamp", value: function() {} }, { key: "append", value: function(e, t, r, a) { var i, n, s, o, u, d = e.length, h = !1; this.contiguous = r; var g = this.pmtParsed, v = this._avcTrack, p = this._audioTrack, y = this._id3Track, m = v.id, E = p.id, b = y.id, T = this._pmtId, k = v.pesData, _ = p.pesData, R = y.pesData, S = this._parsePAT, A = this._parsePMT, L = this._parsePES, w = this._parseAVCPES.bind(this), D = this._parseAACPES.bind(this), O = this._parseMPEGPES.bind(this), I = this._parseID3PES.bind(this); for (d -= d % 188, i = 0; i < d; i += 188) if (71 === e[i]) { if (n = !!(64 & e[i + 1]), s = ((31 & e[i + 1]) << 8) + e[i + 2], (48 & e[i + 3]) >> 4 > 1) { if ((o = i + 5 + e[i + 4]) === i + 188) continue } else o = i + 4; switch (s) { case m: n && (k && (u = L(k)) && w(u, !1), k = { data: [], size: 0 }), k && (k.data.push(e.subarray(o, i + 188)), k.size += i + 188 - o); break; case E: n && (_ && (u = L(_)) && (p.isAAC ? D(u) : O(u)), _ = { data: [], size: 0 }), _ && (_.data.push(e.subarray(o, i + 188)), _.size += i + 188 - o); break; case b: n && (R && (u = L(R)) && I(u), R = { data: [], size: 0 }), R && (R.data.push(e.subarray(o, i + 188)), R.size += i + 188 - o); break; case 0: n && (o += e[o] + 1), T = this._pmtId = S(e, o); break; case T: n && (o += e[o] + 1); var P = A(e, o, !0 === this.typeSupported.mpeg || !0 === this.typeSupported.mp3, null != this.sampleAes); (m = P.avc) > 0 && (v.id = m), (E = P.audio) > 0 && (p.id = E, p.isAAC = P.isAAC), (b = P.id3) > 0 && (y.id = b), h && !g && (f.logger.log("reparse from beginning"), h = !1, i = -188), g = this.pmtParsed = !0; break; case 17: case 8191: break; default: h = !0 } } else this.observer.trigger(l.default.ERROR, { type: c.ErrorTypes.MEDIA_ERROR, details: c.ErrorDetails.FRAG_PARSING_ERROR, fatal: !1, reason: "TS packet did not start with 0x47" }); k && (u = L(k)) ? (w(u, !0), v.pesData = null) : v.pesData = k, _ && (u = L(_)) ? (p.isAAC ? D(u) : O(u), p.pesData = null) : (_ && _.size && f.logger.log("last AAC PES packet truncated,might overlap between fragments"), p.pesData = _), R && (u = L(R)) ? (I(u), y.pesData = null) : y.pesData = R, null == this.sampleAes ? this.remuxer.remux(p, v, y, this._txtTrack, t, r, a) : this.decryptAndRemux(p, v, y, this._txtTrack, t, r, a) } }, { key: "decryptAndRemux", value: function(e, t, r, a, i, n, s) { if (e.samples && e.isAAC) { var o = this; this.sampleAes.decryptAacSamples(e.samples, 0, function() { o.decryptAndRemuxAvc(e, t, r, a, i, n, s) }) } else this.decryptAndRemuxAvc(e, t, r, a, i, n, s) } }, { key: "decryptAndRemuxAvc", value: function(e, t, r, a, i, n, s) { if (t.samples) { var o = this; this.sampleAes.decryptAvcSamples(t.samples, 0, 0, function() { o.remuxer.remux(e, t, r, a, i, n, s) }) } else this.remuxer.remux(e, t, r, a, i, n, s) } }, { key: "destroy", value: function() { this._initPTS = this._initDTS = void 0, this._duration = 0 } }, { key: "_parsePAT", value: function(e, t) { return (31 & e[t + 10]) << 8 | e[t + 11] } }, { key: "_parsePMT", value: function(e, t, r, a) { var i, n, s = { audio: -1, avc: -1, id3: -1, isAAC: !0 }; for (i = t + 3 + ((15 & e[t + 1]) << 8 | e[t + 2]) - 4, t += 12 + ((15 & e[t + 10]) << 8 | e[t + 11]); t < i;) { switch (n = (31 & e[t + 1]) << 8 | e[t + 2], e[t]) { case 207: if (!a) { f.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 (!a) { f.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) : f.logger.log("MPEG audio found, not supported in this browser for now"); break; case 36: f.logger.warn("HEVC stream type found, not supported for now"); break; default: f.logger.log("unkown stream type:" + e[t]) } t += 5 + ((15 & e[t + 3]) << 8 | e[t + 4]) } return s } }, { key: "_parsePES", value: function(e) { var t, r, a, i, n, s, o, l, u = 0, d = e.data; if (!e || 0 === e.size) return null; for (; d[0].length < 19 && d.length > 1;) { 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 (t = d[0], 1 === (t[0] << 16) + (t[1] << 8) + t[2]) { if ((a = (t[4] << 8) + t[5]) && a > e.size - 6) return null; 192 & (r = t[7]) && ((s = 536870912 * (14 & t[9]) + 4194304 * (255 & t[10]) + 16384 * (254 & t[11]) + 128 * (255 & t[12]) + (254 & t[13]) / 2) > 4294967295 && (s -= 8589934592), 64 & r ? ((o = 536870912 * (14 & t[14]) + 4194304 * (255 & t[15]) + 16384 * (254 & t[16]) + 128 * (255 & t[17]) + (254 & t[18]) / 2) > 4294967295 && (o -= 8589934592), s - o > 54e5 && (f.logger.warn(Math.round((s - o) / 9e4) + "s delta between PTS and DTS, align them"), s = o)) : o = s), l = (i = t[8]) + 9, e.size -= l, n = new Uint8Array(e.size); for (var h = 0, g = d.length; h < g; h++) { var v = (t = d[h]).byteLength; if (l) { if (l > v) { l -= v; continue } t = t.subarray(l), v -= l, l = 0 } n.set(t, u), u += v } return a && (a -= i + 3), { data: n, pts: s, dts: o, len: a } } return null } }, { key: "pushAccesUnit", value: function(e, t) { if (e.units.length && e.frame) { var r = t.samples, a = r.length; !this.config.forceKeyFrameOnDiscontinuity || !0 === e.key || t.sps && (a || this.contiguous) ? (e.id = a, r.push(e)) : t.dropped++ } e.debug.length && f.logger.log(e.pts + "/" + e.dts + ":" + e.debug) } }, { key: "_parseAVCPES", value: function(e, t) { var r, a, i, n = this, s = this._avcTrack, o = this._parseAVCNALu(e.data), l = this.avcSample, d = !1, f = this.pushAccesUnit.bind(this), c = function(e, t, r, a) { return { key: e, pts: t, dts: r, units: [], debug: a } }; e.data = null, l && o.length && (f(l, s), l = this.avcSample = c(!1, e.pts, e.dts, "")), o.forEach(function(t) { switch (t.type) { case 1: a = !0, l.frame = !0; var o = t.data; if (d && o.length > 4) { var h = new u.default(o).readSliceType(); 2 !== h && 4 !== h && 7 !== h && 9 !== h || (l.key = !0) } break; case 5: a = !0, l || (l = n.avcSample = c(!0, e.pts, e.dts, "")), l.key = !0, l.frame = !0; break; case 6: a = !0, (r = new u.default(n.discardEPB(t.data))).readUByte(); for (var g = 0, v = 0, p = !1, y = 0; !p && r.bytesAvailable > 1;) { g = 0; do { g += y = r.readUByte() } while (255 === y); v = 0; do { v += y = r.readUByte() } while (255 === y); if (4 === g && 0 !== r.bytesAvailable) { if (p = !0, 181 === r.readUByte() && 49 === r.readUShort() && 1195456820 === r.readUInt() && 3 === r.readUByte()) { var m = r.readUByte(), E = 31 & m, b = [m, r.readUByte()]; for (i = 0; i < E; i++) b.push(r.readUByte()), b.push(r.readUByte()), b.push(r.readUByte()); n._insertSampleInOrder(n._txtTrack.samples, { type: 3, pts: e.pts, bytes: b }) } } else if (v < r.bytesAvailable) for (i = 0; i < v; i++) r.readUByte() } break; case 7: if (a = !0, d = !0, !s.sps) { var T = (r = new u.default(t.data)).readSPS(); s.width = T.width, s.height = T.height, s.pixelRatio = T.pixelRatio, s.sps = [t.data], s.duration = n._duration; var k = t.data.subarray(1, 4), _ = "avc1."; for (i = 0; i < 3; i++) { var R = k[i].toString(16); R.length < 2 && (R = "0" + R), _ += R } s.codec = _ } break; case 8: a = !0, s.pps || (s.pps = [t.data]); break; case 9: a = !1, l && f(l, s), l = n.avcSample = c(!1, e.pts, e.dts, ""); break; case 12: a = !1; break; default: a = !1, l && (l.debug += "unknown NAL " + t.type + " ") } l && a && l.units.push(t) }), t && l && (f(l, s), this.avcSample = null) } }, { key: "_insertSampleInOrder", value: function(e, t) { var r = e.length; if (r > 0) { if (t.pts >= e[r - 1].pts) e.push(t); else for (var a = r - 1; a >= 0; a--) if (t.pts < e[a].pts) { e.splice(a, 0, t); break } } else e.push(t) } }, { key: "_getLastNalUnit", value: function() { var e = this.avcSample, t = void 0; if (!e || 0 === e.units.length) { var r = this._avcTrack.samples; e = r[r.length - 1] } if (e) { var a = e.units; t = a[a.length - 1] } return t } }, { key: "_parseAVCNALu", value: function(e) { var t, r, a, i, n = 0, s = e.byteLength, o = this._avcTrack, l = o.naluState || 0, u = l, d = [], f = -1; for (-1 === l && (f = 0, i = 31 & e[0], l = 0, n = 1); n < s;) if (t = e[n++], l) if (1 !== l) if (t) if (1 === t) { if (f >= 0) a = { data: e.subarray(f, n - l - 1), type: i }, d.push(a); else { var c = this._getLastNalUnit(); if (c && (u && n <= 4 - u && c.state && (c.data = c.data.subarray(0, c.data.byteLength - u)), (r = n - l - 1) > 0)) { var h = new Uint8Array(c.data.byteLength + r); h.set(c.data, 0), h.set(e.subarray(0, r), c.data.byteLength), c.data = h } } n < s ? (f = n, i = 31 & e[n], l = 0) : l = -1 } else l = 0; else l = 3; else l = t ? 0 : 2; else l = t ? 0 : 1; if (f >= 0 && l >= 0 && (a = { data: e.subarray(f, s), type: i, state: l }, d.push(a)), 0 === d.length) { var g = this._getLastNalUnit(); if (g) { var v = new Uint8Array(g.data.byteLength + e.byteLength); v.set(g.data, 0), v.set(e, g.data.byteLength), g.data = v } } return o.naluState = l, d } }, { key: "discardEPB", value: function(e) { for (var t, r, a = e.byteLength, i = [], n = 1; n < a - 2;) 0 === e[n] && 0 === e[n + 1] && 3 === e[n + 2] ? (i.push(n + 2), n += 2) : n++; if (0 === i.length) return e; t = a - i.length, r = new Uint8Array(t); var s = 0; for (n = 0; n < t; s++, n++) s === i[0] && (s++, i.shift()), r[n] = e[s]; return r } }, { key: "_parseAACPES", value: function(e) { var t, r, a, i, n, o = this._audioTrack, u = e.data, d = e.pts, h = this.aacOverFlow, g = this.aacLastPTS; if (h) { var v = new Uint8Array(h.byteLength + u.byteLength); v.set(h, 0), v.set(u, h.byteLength), u = v } for (a = 0, n = u.length; a < n - 1 && !s.default.isHeader(u, a); a++); if (a) { var p, y; if (a < n - 1 ? (p = "AAC PES did not start with ADTS header,offset:" + a, y = !1) : (p = "no ADTS header found in AAC PES", y = !0), f.logger.warn("parsing error:" + p), this.observer.trigger(l.default.ERROR, { type: c.ErrorTypes.MEDIA_ERROR, details: c.ErrorDetails.FRAG_PARSING_ERROR, fatal: y, reason: p }), y) return } if (s.default.initTrackConfig(o, this.observer, u, a, this.audioCodec), r = 0, t = s.default.getFrameDuration(o.samplerate), h && g) { var m = g + t; Math.abs(m - d) > 1 && (f.logger.log("AAC: align PTS for overlapping frames by " + Math.round((m - d) / 90)), d = m) } for (; a < n;) if (s.default.isHeader(u, a) && a + 5 < n) { var E = s.default.appendFrame(o, u, a, d, r); if (!E) break; a += E.length, i = E.sample.pts, r++ } else a++; h = a < n ? u.subarray(a, n) : null, this.aacOverFlow = h, this.aacLastPTS = i } }, { key: "_parseMPEGPES", value: function(e) { for (var t = e.data, r = t.length, a = 0, i = 0, n = e.pts; i < r;) if (o.default.isHeader(t, i)) { var s = o.default.appendFrame(this._audioTrack, t, i, n, a); if (!s) break; i += s.length, a++ } else i++ } }, { key: "_parseID3PES", value: function(e) { this._id3Track.samples.push(e) } }], [{ key: "probe", value: function(e) { return e.length >= 564 && 71 === e[0] && 71 === e[188] && 71 === e[376] } }]), e }(); r.default = h }, { 22: 22, 26: 26, 30: 30, 31: 31, 33: 33, 35: 35, 54: 54 }], 33: [function(e, t, r) { "use strict"; Object.defineProperty(r, "__esModule", { value: !0 }); r.ErrorTypes = { NETWORK_ERROR: "networkError", MEDIA_ERROR: "mediaError", MUX_ERROR: "muxError", OTHER_ERROR: "otherError" }, r.ErrorDetails = { 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_LOOP_LOADING_ERROR: "fragLoopLoadingError", 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", WEBVTT_EXCEPTION: "webVTTException" } }, {}], 34: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { return typeof e } : function(e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e }, n = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), s = e(54), o = e(33), l = function(e) { return e && e.__esModule ? e : { default: e } }(e(35)), u = function() { function e(t) { a(this, e), this.hls = t, this.onEvent = this.onEvent.bind(this); for (var r = arguments.length, i = Array(r > 1 ? r - 1 : 0), n = 1; n < r; n++) i[n - 1] = arguments[n]; this.handledEvents = i, this.useGenericHandler = !0, this.registerListeners() } return n(e, [{ key: "destroy", value: function() { this.unregisterListeners() } }, { key: "isEventHandler", value: function() { return "object" === i(this.handledEvents) && this.handledEvents.length && "function" == typeof this.onEvent } }, { key: "registerListeners", value: function() { this.isEventHandler() && this.handledEvents.forEach(function(e) { if ("hlsEventGeneric" === e) throw new Error("Forbidden event name: " + e); this.hls.on(e, this.onEvent) }, this) } }, { key: "unregisterListeners", value: function() { this.isEventHandler() && this.handledEvents.forEach(function(e) { this.hls.off(e, this.onEvent) }, this) } }, { key: "onEvent", value: function(e, t) { this.onEventGeneric(e, t) } }, { key: "onEventGeneric", value: 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) { s.logger.error("internal error happened while processing " + e + ":" + t.message), this.hls.trigger(l.default.ERROR, { type: o.ErrorTypes.OTHER_ERROR, details: o.ErrorDetails.INTERNAL_EXCEPTION, fatal: !1, event: e, err: t }) } } }]), e }(); r.default = u }, { 33: 33, 35: 35, 54: 54 }], 35: [function(e, t, r) { "use strict"; t.exports = { 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_SWITCH: "hlsLevelSwitch", 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_SWITCH: "hlsAudioTrackSwitch", 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", DESTROYING: "hlsDestroying", KEY_LOADING: "hlsKeyLoading", KEY_LOADED: "hlsKeyLoaded", STREAM_STATE_TRANSITION: "hlsStreamStateTransition" } }, {}], 36: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = function() { function e() { a(this, e) } return i(e, null, [{ key: "getSilentFrame", value: 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 }(); r.default = n }, {}], 37: [function(e, t, r) { "use strict"; var a = { isBuffered: function(e, t) { if (e) for (var r = e.buffered, a = 0; a < r.length; a++) if (t >= r.start(a) && t <= r.end(a)) return !0; return !1 }, bufferInfo: function(e, t, r) { if (e) { var a, i = e.buffered, n = []; for (a = 0; a < i.length; a++) n.push({ start: i.start(a), end: i.end(a) }); return this.bufferedInfo(n, t, r) } return { len: 0, start: t, end: t, nextStart: void 0 } }, bufferedInfo: function(e, t, r) { var a, i, n, s, o, l = []; for (e.sort(function(e, t) { var r = e.start - t.start; return r || 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 (o = 0, a = 0, i = n = t; o < l.length; o++) { var f = l[o].start, c = l[o].end; if (t + r >= f && t < c) i = f, a = (n = c) - t; else if (t + r < f) { s = f; break } } return { len: a, start: i, end: n, nextStart: s } } }; t.exports = a }, {}], 38: [function(e, t, r) { "use strict"; var a = e(54), i = { mergeDetails: function(e, t) { var r, n = Math.max(e.startSN, t.startSN) - t.startSN, s = Math.min(e.endSN, t.endSN) - t.startSN, o = t.startSN - e.startSN, l = e.fragments, u = t.fragments, d = 0; if (s < n) t.PTSKnown = !1; else { for (var f = n; f <= s; f++) { var c = l[o + f], h = u[f]; h && c && (d = c.cc - h.cc, isNaN(c.startPTS) || (h.start = h.startPTS = c.startPTS, h.endPTS = c.endPTS, h.duration = c.duration, h.backtracked = c.backtracked, h.dropped = c.dropped, r = h)) } if (d) for (a.logger.log("discontinuity sliding from playlist, take drift into account"), f = 0; f < u.length; f++) u[f].cc += d; if (r) i.updateFragPTSDTS(t, r, r.startPTS, r.endPTS, r.startDTS, r.endDTS); else if (o >= 0 && o < l.length) { var g = l[o].start; for (f = 0; f < u.length; f++) u[f].start += g } t.PTSKnown = e.PTSKnown } }, updateFragPTSDTS: function(e, t, r, a, n, s) { var o = r; if (!isNaN(t.startPTS)) { var l = Math.abs(t.startPTS - r); isNaN(t.deltaPTS) ? t.deltaPTS = l : t.deltaPTS = Math.max(l, t.deltaPTS), o = Math.max(r, t.startPTS), r = Math.min(r, t.startPTS), a = Math.max(a, t.endPTS), n = Math.min(n, t.startDTS), s = Math.max(s, t.endDTS) } var u = r - t.start; t.start = t.startPTS = r, t.maxStartPTS = o, t.endPTS = a, t.startDTS = n, t.endDTS = s, t.duration = a - r; var d = t.sn; if (!e || d < e.startSN || d > e.endSN) return 0; var f, c, h; for (f = d - e.startSN, (c = e.fragments)[f] = t, h = f; h > 0; h--) i.updatePTS(c, h, h - 1); for (h = f; h < c.length - 1; h++) i.updatePTS(c, h, h + 1); return e.PTSKnown = !0, u }, updatePTS: function(e, t, r) { var i = e[t], n = e[r], s = n.startPTS; isNaN(s) ? n.start = r > t ? i.start + i.duration : Math.max(i.start - n.duration, 0) : r > t ? (i.duration = s - i.start, i.duration < 0 && a.logger.warn("negative duration computed for frag " + i.sn + ",level " + i.level + ", there should be some duration drift between playlist and fragment!")) : (n.duration = i.start - s, n.duration < 0 && a.logger.warn("negative duration computed for frag " + n.sn + ",level " + n.level + ", there should be some duration drift between playlist and fragment!")) } }; t.exports = i }, { 54: 54 }], 39: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var n = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), s = a(e(2)), o = a(e(35)), l = e(33), u = a(e(43)), d = a(e(41)), f = a(e(42)), c = a(e(13)), h = a(e(12)), g = a(e(11)), v = e(54), p = a(e(1)), y = e(4), m = function() { function e() { var t = this, r = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : {}; i(this, e); var a = e.DefaultConfig; if ((r.liveSyncDurationCount || r.liveMaxLatencyDurationCount) && (r.liveSyncDuration || r.liveMaxLatencyDuration)) throw new Error("Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration"); for (var n in a) n in r || (r[n] = a[n]); if (void 0 !== r.liveMaxLatencyDurationCount && r.liveMaxLatencyDurationCount <= r.liveSyncDurationCount) throw new Error('Illegal hls.js config: "liveMaxLatencyDurationCount" must be gt "liveSyncDurationCount"'); if (void 0 !== r.liveMaxLatencyDuration && (r.liveMaxLatencyDuration <= r.liveSyncDuration || void 0 === r.liveSyncDuration)) throw new Error('Illegal hls.js config: "liveMaxLatencyDuration" must be gt "liveSyncDuration"'); (0, v.enableLogs)(r.debug), this.config = r, this._autoLevelCapping = -1; var s = this.observer = new p.default; s.trigger = function(e) { for (var t = arguments.length, r = Array(t > 1 ? t - 1 : 0), a = 1; a < t; a++) r[a - 1] = arguments[a]; s.emit.apply(s, [e, e].concat(r)) }, s.off = function(e) { for (var t = arguments.length, r = Array(t > 1 ? t - 1 : 0), a = 1; a < t; a++) r[a - 1] = arguments[a]; s.removeListener.apply(s, [e].concat(r)) }, this.on = s.on.bind(s), this.off = s.off.bind(s), this.trigger = s.trigger.bind(s); var o = this.abrController = new r.abrController(this), l = new r.bufferController(this), y = new r.capLevelController(this), m = new r.fpsController(this), E = new u.default(this), b = new d.default(this), T = new f.default(this), k = new g.default(this), _ = [this.levelController = new h.default(this), this.streamController = new c.default(this)], R = r.audioStreamController; R && _.push(new R(this)), this.networkControllers = _; var S = [E, b, T, o, l, y, m, k]; if (R = r.audioTrackController) { var A = new R(this); this.audioTrackController = A, S.push(A) } if (R = r.subtitleTrackController) { var L = new R(this); this.subtitleTrackController = L, S.push(L) } [r.subtitleStreamController, r.timelineController].forEach(function(e) { e && S.push(new e(t)) }), this.coreComponents = S } return n(e, null, [{ key: "isSupported", value: function() { var e = window.MediaSource = window.MediaSource || window.WebKitMediaSource, t = window.SourceBuffer = window.SourceBuffer || window.WebKitSourceBuffer, r = e && "function" == typeof e.isTypeSupported && e.isTypeSupported('video/mp4; codecs="avc1.42E01E,mp4a.40.2"'), a = !t || t.prototype && "function" == typeof t.prototype.appendBuffer && "function" == typeof t.prototype.remove; return r && a } }, { key: "version", get: function() { return "0.7.11" } }, { key: "Events", get: function() { return o.default } }, { key: "ErrorTypes", get: function() { return l.ErrorTypes } }, { key: "ErrorDetails", get: function() { return l.ErrorDetails } }, { key: "DefaultConfig", get: function() { return e.defaultConfig ? e.defaultConfig : y.hlsDefaultConfig }, set: function(t) { e.defaultConfig = t } }]), n(e, [{ key: "destroy", value: function() { v.logger.log("destroy"), this.trigger(o.default.DESTROYING), this.detachMedia(), this.coreComponents.concat(this.networkControllers).forEach(function(e) { e.destroy() }), this.url = null, this.observer.removeAllListeners(), this._autoLevelCapping = -1 } }, { key: "attachMedia", value: function(e) { v.logger.log("attachMedia"), this.media = e, this.trigger(o.default.MEDIA_ATTACHING, { media: e }) } }, { key: "detachMedia", value: function() { v.logger.log("detachMedia"), this.trigger(o.default.MEDIA_DETACHING), this.media = null } }, { key: "loadSource", value: function(e) { e = s.default.buildAbsoluteURL(window.location.href, e, { alwaysNormalize: !0 }), v.logger.log("loadSource:" + e), this.url = e, this.trigger(o.default.MANIFEST_LOADING, { url: e }) } }, { key: "startLoad", value: function() { var e = arguments.length > 0 && void 0 !== arguments[0] ? arguments[0] : -1; v.logger.log("startLoad(" + e + ")"), this.networkControllers.forEach(function(t) { t.startLoad(e) }) } }, { key: "stopLoad", value: function() { v.logger.log("stopLoad"), this.networkControllers.forEach(function(e) { e.stopLoad() }) } }, { key: "swapAudioCodec", value: function() { v.logger.log("swapAudioCodec"), this.streamController.swapAudioCodec() } }, { key: "recoverMediaError", value: function() { v.logger.log("recoverMediaError"); var e = this.media; this.detachMedia(), this.attachMedia(e) } }, { key: "levels", get: function() { return this.levelController.levels } }, { key: "currentLevel", get: function() { return this.streamController.currentLevel }, set: function(e) { v.logger.log("set currentLevel:" + e), this.loadLevel = e, this.streamController.immediateLevelSwitch() } }, { key: "nextLevel", get: function() { return this.streamController.nextLevel }, set: function(e) { v.logger.log("set nextLevel:" + e), this.levelController.manualLevel = e, this.streamController.nextLevelSwitch() } }, { key: "loadLevel", get: function() { return this.levelController.level }, set: function(e) { v.logger.log("set loadLevel:" + e), this.levelController.manualLevel = e } }, { key: "nextLoadLevel", get: function() { return this.levelController.nextLoadLevel }, set: function(e) { this.levelController.nextLoadLevel = e } }, { key: "firstLevel", get: function() { return Math.max(this.levelController.firstLevel, this.minAutoLevel) }, set: function(e) { v.logger.log("set firstLevel:" + e), this.levelController.firstLevel = e } }, { key: "startLevel", get: function() { return this.levelController.startLevel }, set: function(e) { v.logger.log("set startLevel:" + e); var t = this; - 1 !== e && (e = Math.max(e, t.minAutoLevel)), t.levelController.startLevel = e } }, { key: "autoLevelCapping", get: function() { return this._autoLevelCapping }, set: function(e) { v.logger.log("set autoLevelCapping:" + e), this._autoLevelCapping = e } }, { key: "autoLevelEnabled", get: function() { return -1 === this.levelController.manualLevel } }, { key: "manualLevel", get: function() { return this.levelController.manualLevel } }, { key: "minAutoLevel", get: function() { for (var e = this, t = e.levels, r = e.config.minAutoBitrate, a = t ? t.length : 0, i = 0; i < a; i++) if ((t[i].realBitrate ? Math.max(t[i].realBitrate, t[i].bitrate) : t[i].bitrate) > r) return i; return 0 } }, { key: "maxAutoLevel", get: function() { var e = this, t = e.levels, r = e.autoLevelCapping; return -1 === r && t && t.length ? t.length - 1 : r } }, { key: "nextAutoLevel", get: function() { var e = this; return Math.min(Math.max(e.abrController.nextAutoLevel, e.minAutoLevel), e.maxAutoLevel) }, set: function(e) { var t = this; t.abrController.nextAutoLevel = Math.max(t.minAutoLevel, e) } }, { key: "audioTracks", get: function() { var e = this.audioTrackController; return e ? e.audioTracks : [] } }, { key: "audioTrack", get: function() { var e = this.audioTrackController; return e ? e.audioTrack : -1 }, set: function(e) { var t = this.audioTrackController; t && (t.audioTrack = e) } }, { key: "liveSyncPosition", get: function() { return this.streamController.liveSyncPosition } }, { key: "subtitleTracks", get: function() { var e = this.subtitleTrackController; return e ? e.subtitleTracks : [] } }, { key: "subtitleTrack", get: function() { var e = this.subtitleTrackController; return e ? e.subtitleTrack : -1 }, set: function(e) { var t = this.subtitleTrackController; t && (t.subtitleTrack = e) } }]), e }(); r.default = m }, { 1: 1, 11: 11, 12: 12, 13: 13, 2: 2, 33: 33, 35: 35, 4: 4, 41: 41, 42: 42, 43: 43, 54: 54 }], 40: [function(e, t, r) { "use strict"; t.exports = e(39).default }, { 39: 39 }], 41: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(35)), u = a(e(34)), d = e(33), f = e(54), c = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, l.default.FRAG_LOADING)); return r.loaders = {}, r } return s(t, e), o(t, [{ key: "destroy", value: function() { var e = this.loaders; for (var t in e) { var r = e[t]; r && r.destroy() } this.loaders = {}, u.default.prototype.destroy.call(this) } }, { key: "onFragLoading", value: function(e) { var t = e.frag, r = t.type, a = this.loaders[r], i = this.hls.config; t.loaded = 0, a && (f.logger.warn("abort previous fragment loader for type:" + r), a.abort()), a = this.loaders[r] = t.loader = void 0 !== i.fLoader ? new i.fLoader(i) : new i.loader(i); var n = void 0, s = void 0, o = void 0; n = { url: t.url, frag: t, responseType: "arraybuffer", progressData: !1 }; var l = t.byteRangeStartOffset, u = t.byteRangeEndOffset; isNaN(l) || isNaN(u) || (n.rangeStart = l, n.rangeEnd = u), s = { timeout: i.fragLoadingTimeOut, maxRetry: 0, retryDelay: 0, maxRetryDelay: i.fragLoadingMaxRetryTimeout }, o = { onSuccess: this.loadsuccess.bind(this), onError: this.loaderror.bind(this), onTimeout: this.loadtimeout.bind(this), onProgress: this.loadprogress.bind(this) }, a.load(n, s, o) } }, { key: "loadsuccess", value: function(e, t, r) { var a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null, i = e.data, n = r.frag; n.loader = void 0, this.loaders[n.type] = void 0, this.hls.trigger(l.default.FRAG_LOADED, { payload: i, frag: n, stats: t, networkDetails: a }) } }, { key: "loaderror", value: function(e, t) { var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null, a = t.loader; a && a.abort(), this.loaders[t.type] = void 0, this.hls.trigger(l.default.ERROR, { type: d.ErrorTypes.NETWORK_ERROR, details: d.ErrorDetails.FRAG_LOAD_ERROR, fatal: !1, frag: t.frag, response: e, networkDetails: r }) } }, { key: "loadtimeout", value: function(e, t) { var r = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null, a = t.loader; a && a.abort(), this.loaders[t.type] = void 0, this.hls.trigger(l.default.ERROR, { type: d.ErrorTypes.NETWORK_ERROR, details: d.ErrorDetails.FRAG_LOAD_TIMEOUT, fatal: !1, frag: t.frag, networkDetails: r }) } }, { key: "loadprogress", value: function(e, t, r) { var a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null, i = t.frag; i.loaded = e.loaded, this.hls.trigger(l.default.FRAG_LOAD_PROGRESS, { frag: i, stats: e, networkDetails: a }) } }]), t }(u.default); r.default = c }, { 33: 33, 34: 34, 35: 35, 54: 54 }], 42: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } function n(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function s(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(35)), u = a(e(34)), d = e(33), f = e(54), c = function(e) { function t(e) { i(this, t); var r = n(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, l.default.KEY_LOADING)); return r.loaders = {}, r.decryptkey = null, r.decrypturl = null, r } return s(t, e), o(t, [{ key: "destroy", value: function() { for (var e in this.loaders) { var t = this.loaders[e]; t && t.destroy() } this.loaders = {}, u.default.prototype.destroy.call(this) } }, { key: "onKeyLoading", value: function(e) { var t = e.frag, r = t.type, a = this.loaders[r], i = t.decryptdata, n = i.uri; if (n !== this.decrypturl || null === this.decryptkey) { var s = this.hls.config; a && (f.logger.warn("abort previous key loader for type:" + r), a.abort()), t.loader = this.loaders[r] = new s.loader(s), this.decrypturl = n, this.decryptkey = null; var o = void 0, u = void 0, d = void 0; o = { url: n, frag: t, responseType: "arraybuffer" }, u = { timeout: s.fragLoadingTimeOut, maxRetry: s.fragLoadingMaxRetry, retryDelay: s.fragLoadingRetryDelay, maxRetryDelay: s.fragLoadingMaxRetryTimeout }, d = { onSuccess: this.loadsuccess.bind(this), onError: this.loaderror.bind(this), onTimeout: this.loadtimeout.bind(this) }, t.loader.load(o, u, d) } else this.decryptkey && (i.key = this.decryptkey, this.hls.trigger(l.default.KEY_LOADED, { frag: t })) } }, { key: "loadsuccess", value: function(e, t, r) { var a = r.frag; this.decryptkey = a.decryptdata.key = new Uint8Array(e.data), a.loader = void 0, this.loaders[a.type] = void 0, this.hls.trigger(l.default.KEY_LOADED, { frag: a }) } }, { key: "loaderror", value: function(e, t) { var r = t.frag, a = r.loader; a && a.abort(), this.loaders[t.type] = void 0, this.hls.trigger(l.default.ERROR, { type: d.ErrorTypes.NETWORK_ERROR, details: d.ErrorDetails.KEY_LOAD_ERROR, fatal: !1, frag: r, response: e }) } }, { key: "loadtimeout", value: function(e, t) { var r = t.frag, a = r.loader; a && a.abort(), this.loaders[t.type] = void 0, this.hls.trigger(l.default.ERROR, { type: d.ErrorTypes.NETWORK_ERROR, details: d.ErrorDetails.KEY_LOAD_TIMEOUT, fatal: !1, frag: r }) } }]), t }(u.default); r.default = c }, { 33: 33, 34: 34, 35: 35, 54: 54 }], 43: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!e) throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); return !t || "object" != typeof t && "function" != typeof t ? e : t } function n(e, t) { if ("function" != typeof t && null !== t) throw new TypeError("Super expression must either be null or a function, not " + typeof t); e.prototype = Object.create(t && t.prototype, { constructor: { value: e, enumerable: !1, writable: !0, configurable: !0 } }), t && (Object.setPrototypeOf ? Object.setPrototypeOf(e, t) : e.__proto__ = t) } function s(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var o = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), l = a(e(2)), u = a(e(35)), d = a(e(34)), f = e(33), c = a(e(47)), h = e(54), g = /#EXT-X-STREAM-INF:([^\n\r]*)[\r\n]+([^\r\n]+)/g, v = /#EXT-X-MEDIA:(.*)/g, p = new RegExp([/#EXTINF:(\d*(?:\.\d+)?)(?:,(.*)\s+)?/.source, /|(?!#)(\S+)/.source, /|#EXT-X-BYTERANGE:*(.+)/.source, /|#EXT-X-PROGRAM-DATE-TIME:(.+)/.source, /|#.*/.source].join(""), "g"), y = /(?:(?:#(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?/, m = function() { function e() { s(this, e), this.method = null, this.key = null, this.iv = null, this._uri = null } return o(e, [{ key: "uri", get: function() { return !this._uri && this.reluri && (this._uri = l.default.buildAbsoluteURL(this.baseuri, this.reluri, { alwaysNormalize: !0 })), this._uri } }]), e }(), E = function() { function e() { s(this, e), this._url = null, this._byteRange = null, this._decryptdata = null, this.tagList = [] } return o(e, [{ key: "createInitializationVector", value: function(e) { for (var t = new Uint8Array(16), r = 12; r < 16; r++) t[r] = e >> 8 * (15 - r) & 255; return t } }, { key: "fragmentDecryptdataFromLevelkey", value: function(e, t) { var r = e; return e && e.method && e.uri && !e.iv && ((r = new m).method = e.method, r.baseuri = e.baseuri, r.reluri = e.reluri, r.iv = this.createInitializationVector(t)), r } }, { key: "cloneObj", value: function(e) { return JSON.parse(JSON.stringify(e)) } }, { key: "url", get: function() { return !this._url && this.relurl && (this._url = l.default.buildAbsoluteURL(this.baseurl, this.relurl, { alwaysNormalize: !0 })), this._url }, set: function(e) { this._url = e } }, { key: "programDateTime", get: function() { return !this._programDateTime && this.rawProgramDateTime && (this._programDateTime = new Date(Date.parse(this.rawProgramDateTime))), this._programDateTime } }, { key: "byteRange", get: function() { if (!this._byteRange) { var e = this._byteRange = []; 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] } } return this._byteRange } }, { key: "byteRangeStartOffset", get: function() { return this.byteRange[0] } }, { key: "byteRangeEndOffset", get: function() { return this.byteRange[1] } }, { key: "decryptdata", get: function() { return this._decryptdata || (this._decryptdata = this.fragmentDecryptdataFromLevelkey(this.levelkey, this.sn)), this._decryptdata } }]), e }(), b = function(e) { function t(e) { s(this, t); var r = i(this, (t.__proto__ || Object.getPrototypeOf(t)).call(this, e, u.default.MANIFEST_LOADING, u.default.LEVEL_LOADING, u.default.AUDIO_TRACK_LOADING, u.default.SUBTITLE_TRACK_LOADING)); return r.loaders = {}, r } return n(t, e), o(t, [{ key: "destroy", value: function() { for (var e in this.loaders) { var t = this.loaders[e]; t && t.destroy() } this.loaders = {}, d.default.prototype.destroy.call(this) } }, { key: "onManifestLoading", value: function(e) { this.load(e.url, { type: "manifest" }) } }, { key: "onLevelLoading", value: function(e) { this.load(e.url, { type: "level", level: e.level, id: e.id }) } }, { key: "onAudioTrackLoading", value: function(e) { this.load(e.url, { type: "audioTrack", id: e.id }) } }, { key: "onSubtitleTrackLoading", value: function(e) { this.load(e.url, { type: "subtitleTrack", id: e.id }) } }, { key: "load", value: function(e, t) { var r = this.loaders[t.type]; if (r) { var a = r.context; if (a && a.url === e) return void h.logger.trace("playlist request ongoing"); h.logger.warn("abort previous loader for type:" + t.type), r.abort() } var i = this.hls.config, n = void 0, s = void 0, o = void 0, l = void 0; "manifest" === t.type ? (n = i.manifestLoadingMaxRetry, s = i.manifestLoadingTimeOut, o = i.manifestLoadingRetryDelay, l = i.manifestLoadingMaxRetryTimeout) : (n = i.levelLoadingMaxRetry, s = i.levelLoadingTimeOut, o = i.levelLoadingRetryDelay, l = i.levelLoadingMaxRetryTimeout, h.logger.log("loading playlist for " + t.type + " " + (t.level || t.id))), r = this.loaders[t.type] = t.loader = void 0 !== i.pLoader ? new i.pLoader(i) : new i.loader(i), t.url = e, t.responseType = ""; var u = void 0, d = void 0; u = { timeout: s, maxRetry: n, retryDelay: o, maxRetryDelay: l }, d = { onSuccess: this.loadsuccess.bind(this), onError: this.loaderror.bind(this), onTimeout: this.loadtimeout.bind(this) }, r.load(t, u, d) } }, { key: "resolve", value: function(e, t) { return l.default.buildAbsoluteURL(t, e, { alwaysNormalize: !0 }) } }, { key: "parseMasterPlaylist", value: function(e, t) { var r = [], a = void 0; for (g.lastIndex = 0; null != (a = g.exec(e));) { var i = {}, n = i.attrs = new c.default(a[1]); i.url = this.resolve(a[2], t); var s = n.decimalResolution("RESOLUTION"); s && (i.width = s.width, i.height = s.height), i.bitrate = n.decimalInteger("AVERAGE-BANDWIDTH") || n.decimalInteger("BANDWIDTH"), i.name = n.NAME; var o = n.CODECS; if (o) { o = o.split(/[ ,]+/); for (var l = 0; l < o.length; l++) { var u = o[l]; - 1 !== u.indexOf("avc1") ? i.videoCodec = this.avc1toavcoti(u) : -1 !== u.indexOf("hvc1") ? i.videoCodec = u : i.audioCodec = u } } r.push(i) } return r } }, { key: "parseMasterPlaylistMedia", value: function(e, t, r) { var a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null, i = void 0, n = [], s = 0; for (v.lastIndex = 0; null != (i = v.exec(e));) { var o = {}, l = new c.default(i[1]); l.TYPE === r && (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 = this.resolve(l.URI, t)), o.lang = l.LANGUAGE, o.name || (o.name = o.lang), a && (o.audioCodec = a), o.id = s++, n.push(o)) } return n } }, { key: "avc1toavcoti", value: function(e) { var t, r = e.split("."); return r.length > 2 ? (t = r.shift() + ".", t += parseInt(r.shift()).toString(16), t += ("000" + parseInt(r.shift()).toString(16)).substr(-4)) : t = e, t } }, { key: "parseLevelPlaylist", value: function(e, t, r, a) { var i, n, s = 0, o = 0, l = { type: null, version: null, url: t, fragments: [], live: !0, startSN: 0 }, u = new m, d = 0, f = null, g = new E; for (p.lastIndex = 0; null !== (i = p.exec(e));) { var v = i[1]; if (v) { g.duration = parseFloat(v); var b = (" " + i[2]).slice(1); g.title = b || null, g.tagList.push(b ? ["INF", v, b] : ["INF", v]) } else if (i[3]) { if (!isNaN(g.duration)) { var T = s++; g.type = a, g.start = o, g.levelkey = u, g.sn = T, g.level = r, g.cc = d, g.baseurl = t, g.relurl = (" " + i[3]).slice(1), l.fragments.push(g), f = g, o += g.duration, g = new E } } else if (i[4]) { if (g.rawByteRange = (" " + i[4]).slice(1), f) { var k = f.byteRangeEndOffset; k && (g.lastByteRangeEndOffset = k) } } else if (i[5]) g.rawProgramDateTime = (" " + i[5]).slice(1), g.tagList.push(["PROGRAM-DATE-TIME", g.rawProgramDateTime]); else { for (i = i[0].match(y), n = 1; n < i.length && void 0 === i[n]; n++); var _ = (" " + i[n + 1]).slice(1), R = (" " + i[n + 2]).slice(1); switch (i[n]) { case "#": g.tagList.push(R ? [_, R] : [_]); break; case "PLAYLIST-TYPE": l.type = _.toUpperCase(); break; case "MEDIA-SEQUENCE": s = l.startSN = parseInt(_); break; case "TARGETDURATION": l.targetduration = parseFloat(_); break; case "VERSION": l.version = parseInt(_); break; case "EXTM3U": break; case "ENDLIST": l.live = !1; break; case "DIS": d++, g.tagList.push(["DIS"]); break; case "DISCONTINUITY-SEQ": d = parseInt(_); break; case "KEY": var S = _, A = new c.default(S), L = A.enumeratedString("METHOD"), w = A.URI, D = A.hexadecimalInteger("IV"); L && (u = new m, w && ["AES-128", "SAMPLE-AES"].indexOf(L) >= 0 && (u.method = L, u.baseuri = t, u.reluri = w, u.key = null, u.iv = D)); break; case "START": var O = _, I = new c.default(O).decimalFloatingPoint("TIME-OFFSET"); isNaN(I) || (l.startTimeOffset = I); break; case "MAP": var P = new c.default(_); g.relurl = P.URI, g.rawByteRange = P.BYTERANGE, g.baseurl = t, g.level = r, g.type = a, g.sn = "initSegment", l.initSegment = g, g = new E; break; default: h.logger.warn("line parsed but not handled: " + i) } } } return (g = f) && !g.relurl && (l.fragments.pop(), o -= g.duration), l.totalduration = o, l.averagetargetduration = o / l.fragments.length, l.endSN = s - 1, l } }, { key: "loadsuccess", value: function(e, t, r) { var a = arguments.length > 3 && void 0 !== arguments[3] ? arguments[3] : null, i = e.data, n = e.url, s = r.type, o = r.id, l = r.level, d = this.hls; if (this.loaders[s] = void 0, void 0 !== n && 0 !== n.indexOf("data:") || (n = r.url), t.tload = performance.now(), 0 === i.indexOf("#EXTM3U")) if (i.indexOf("#EXTINF:") > 0) { var c = "audioTrack" !== s && "subtitleTrack" !== s, g = isNaN(l) ? isNaN(o) ? 0 : o : l, v = this.parseLevelPlaylist(i, n, g, "audioTrack" === s ? "audio" : "subtitleTrack" === s ? "subtitle" : "main"); v.tload = t.tload, "manifest" === s && d.trigger(u.default.MANIFEST_LOADED, { levels: [{ url: n, details: v }], audioTracks: [], url: n, stats: t, networkDetails: a }), t.tparsed = performance.now(), v.targetduration ? c ? d.trigger(u.default.LEVEL_LOADED, { details: v, level: l || 0, id: o || 0, stats: t, networkDetails: a }) : "audioTrack" === s ? d.trigger(u.default.AUDIO_TRACK_LOADED, { details: v, id: o, stats: t, networkDetails: a }) : "subtitleTrack" === s && d.trigger(u.default.SUBTITLE_TRACK_LOADED, { details: v, id: o, stats: t, networkDetails: a }) : d.trigger(u.default.ERROR, { type: f.ErrorTypes.NETWORK_ERROR, details: f.ErrorDetails.MANIFEST_PARSING_ERROR, fatal: !0, url: n, reason: "invalid targetduration", networkDetails: a }) } else { var p = this.parseMasterPlaylist(i, n); if (p.length) { var y = this.parseMasterPlaylistMedia(i, n, "AUDIO", p[0].audioCodec), m = this.parseMasterPlaylistMedia(i, n, "SUBTITLES"); if (y.length) { var E = !1; y.forEach(function(e) { e.url || (E = !0) }), !1 === E && p[0].audioCodec && !p[0].attrs.AUDIO && (h.logger.log("audio codec signaled in quality level, but no embedded audio track signaled, create one"), y.unshift({ type: "main", name: "main" })) } d.trigger(u.default.MANIFEST_LOADED, { levels: p, audioTracks: y, subtitles: m, url: n, stats: t, networkDetails: a }) } else d.trigger(u.default.ERROR, { type: f.ErrorTypes.NETWORK_ERROR, details: f.ErrorDetails.MANIFEST_PARSING_ERROR, fatal: !0, url: n, reason: "no level found in manifest", networkDetails: a }) } else d.trigger(u.default.ERROR, { type: f.ErrorTypes.NETWORK_ERROR, details: f.ErrorDetails.MANIFEST_PARSING_ERROR, fatal: !0, url: n, reason: "no EXTM3U delimiter", networkDetails: a }) } }, { key: "loaderror", value: function(e, t) { var r, a, i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null, n = t.loader; switch (t.type) { case "manifest": r = f.ErrorDetails.MANIFEST_LOAD_ERROR, a = !0; break; case "level": r = f.ErrorDetails.LEVEL_LOAD_ERROR, a = !1; break; case "audioTrack": r = f.ErrorDetails.AUDIO_TRACK_LOAD_ERROR, a = !1 } n && (n.abort(), this.loaders[t.type] = void 0), this.hls.trigger(u.default.ERROR, { type: f.ErrorTypes.NETWORK_ERROR, details: r, fatal: a, url: n.url, loader: n, response: e, context: t, networkDetails: i }) } }, { key: "loadtimeout", value: function(e, t) { var r, a, i = arguments.length > 2 && void 0 !== arguments[2] ? arguments[2] : null, n = t.loader; switch (t.type) { case "manifest": r = f.ErrorDetails.MANIFEST_LOAD_TIMEOUT, a = !0; break; case "level": r = f.ErrorDetails.LEVEL_LOAD_TIMEOUT, a = !1; break; case "audioTrack": r = f.ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT, a = !1 } n && (n.abort(), this.loaders[t.type] = void 0), this.hls.trigger(u.default.ERROR, { type: f.ErrorTypes.NETWORK_ERROR, details: r, fatal: a, url: n.url, loader: n, context: t, networkDetails: i }) } }]), t }(d.default); r.default = b }, { 2: 2, 33: 33, 34: 34, 35: 35, 47: 47, 54: 54 }], 44: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = Math.pow(2, 32) - 1, s = function() { function e() { a(this, e) } return i(e, null, [{ key: "init", value: function() { e.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: [] }; var t; for (t in e.types) e.types.hasOwnProperty(t) && (e.types[t] = [t.charCodeAt(0), t.charCodeAt(1), t.charCodeAt(2), t.charCodeAt(3)]); var r = 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]), a = 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]); e.HDLR_TYPES = { video: r, audio: a }; var i = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 12, 117, 114, 108, 32, 0, 0, 0, 1]), n = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]); e.STTS = e.STSC = e.STCO = n, e.STSZ = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]), e.VMHD = new Uint8Array([0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]), e.SMHD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 0]), e.STSD = new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1]); var s = new Uint8Array([105, 115, 111, 109]), o = new Uint8Array([97, 118, 99, 49]), l = new Uint8Array([0, 0, 0, 1]); e.FTYP = e.box(e.types.ftyp, s, l, s, o), e.DINF = e.box(e.types.dinf, e.box(e.types.dref, i)) } }, { key: "box", value: function(e) { for (var t, r = Array.prototype.slice.call(arguments, 1), a = 8, i = r.length, n = i; i--;) a += r[i].byteLength; for ((t = new Uint8Array(a))[0] = a >> 24 & 255, t[1] = a >> 16 & 255, t[2] = a >> 8 & 255, t[3] = 255 & a, t.set(e, 4), i = 0, a = 8; i < n; i++) t.set(r[i], a), a += r[i].byteLength; return t } }, { key: "hdlr", value: function(t) { return e.box(e.types.hdlr, e.HDLR_TYPES[t]) } }, { key: "mdat", value: function(t) { return e.box(e.types.mdat, t) } }, { key: "mdhd", value: function(t, r) { r *= t; var a = Math.floor(r / (n + 1)), i = Math.floor(r % (n + 1)); return e.box(e.types.mdhd, new Uint8Array([1, 0, 0, 0, 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, a >> 24, a >> 16 & 255, a >> 8 & 255, 255 & a, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i, 85, 196, 0, 0])) } }, { key: "mdia", value: function(t) { return e.box(e.types.mdia, e.mdhd(t.timescale, t.duration), e.hdlr(t.type), e.minf(t)) } }, { key: "mfhd", value: function(t) { return e.box(e.types.mfhd, new Uint8Array([0, 0, 0, 0, t >> 24, t >> 16 & 255, t >> 8 & 255, 255 & t])) } }, { key: "minf", value: function(t) { return "audio" === t.type ? e.box(e.types.minf, e.box(e.types.smhd, e.SMHD), e.DINF, e.stbl(t)) : e.box(e.types.minf, e.box(e.types.vmhd, e.VMHD), e.DINF, e.stbl(t)) } }, { key: "moof", value: function(t, r, a) { return e.box(e.types.moof, e.mfhd(t), e.traf(a, r)) } }, { key: "moov", value: function(t) { for (var r = t.length, a = []; r--;) a[r] = e.trak(t[r]); return e.box.apply(null, [e.types.moov, e.mvhd(t[0].timescale, t[0].duration)].concat(a).concat(e.mvex(t))) } }, { key: "mvex", value: function(t) { for (var r = t.length, a = []; r--;) a[r] = e.trex(t[r]); return e.box.apply(null, [e.types.mvex].concat(a)) } }, { key: "mvhd", value: function(t, r) { r *= t; var a = Math.floor(r / (n + 1)), i = Math.floor(r % (n + 1)), s = new Uint8Array([1, 0, 0, 0, 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, a >> 24, a >> 16 & 255, a >> 8 & 255, 255 & a, 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 e.box(e.types.mvhd, s) } }, { key: "sdtp", value: function(t) { var r, a, i = t.samples || [], n = new Uint8Array(4 + i.length); for (a = 0; a < i.length; a++) r = i[a].flags, n[a + 4] = r.dependsOn << 4 | r.isDependedOn << 2 | r.hasRedundancy; return e.box(e.types.sdtp, n) } }, { key: "stbl", value: function(t) { return e.box(e.types.stbl, e.stsd(t), e.box(e.types.stts, e.STTS), e.box(e.types.stsc, e.STSC), e.box(e.types.stsz, e.STSZ), e.box(e.types.stco, e.STCO)) } }, { key: "avc1", value: function(t) { var r, a, i, n = [], s = []; for (r = 0; r < t.sps.length; r++) i = (a = t.sps[r]).byteLength, n.push(i >>> 8 & 255), n.push(255 & i), n = n.concat(Array.prototype.slice.call(a)); for (r = 0; r < t.pps.length; r++) i = (a = t.pps[r]).byteLength, s.push(i >>> 8 & 255), s.push(255 & i), s = s.concat(Array.prototype.slice.call(a)); var o = e.box(e.types.avcC, new Uint8Array([1, n[3], n[4], n[5], 255, 224 | t.sps.length].concat(n).concat([t.pps.length]).concat(s))), l = t.width, u = t.height, d = t.pixelRatio[0], f = t.pixelRatio[1]; return e.box(e.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, l >> 8 & 255, 255 & l, u >> 8 & 255, 255 & u, 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]), o, e.box(e.types.btrt, new Uint8Array([0, 28, 156, 128, 0, 45, 198, 192, 0, 45, 198, 192])), e.box(e.types.pasp, new Uint8Array([d >> 24, d >> 16 & 255, d >> 8 & 255, 255 & d, f >> 24, f >> 16 & 255, f >> 8 & 255, 255 & f]))) } }, { key: "esds", value: 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])) } }, { key: "mp4a", value: function(t) { var r = t.samplerate; return e.box(e.types.mp4a, new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, t.channelCount, 0, 16, 0, 0, 0, 0, r >> 8 & 255, 255 & r, 0, 0]), e.box(e.types.esds, e.esds(t))) } }, { key: "mp3", value: function(t) { var r = t.samplerate; return e.box(e.types[".mp3"], new Uint8Array([0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, t.channelCount, 0, 16, 0, 0, 0, 0, r >> 8 & 255, 255 & r, 0, 0])) } }, { key: "stsd", value: function(t) { return "audio" === t.type ? t.isAAC || "mp3" !== t.codec ? e.box(e.types.stsd, e.STSD, e.mp4a(t)) : e.box(e.types.stsd, e.STSD, e.mp3(t)) : e.box(e.types.stsd, e.STSD, e.avc1(t)) } }, { key: "tkhd", value: function(t) { var r = t.id, a = t.duration * t.timescale, i = t.width, s = t.height, o = Math.floor(a / (n + 1)), l = Math.floor(a % (n + 1)); return e.box(e.types.tkhd, new Uint8Array([1, 0, 0, 7, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0, 0, 0, 3, r >> 24 & 255, r >> 16 & 255, r >> 8 & 255, 255 & r, 0, 0, 0, 0, o >> 24, o >> 16 & 255, o >> 8 & 255, 255 & o, l >> 24, l >> 16 & 255, l >> 8 & 255, 255 & l, 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, s >> 8 & 255, 255 & s, 0, 0])) } }, { key: "traf", value: function(t, r) { var a = e.sdtp(t), i = t.id, s = Math.floor(r / (n + 1)), o = Math.floor(r % (n + 1)); return e.box(e.types.traf, e.box(e.types.tfhd, new Uint8Array([0, 0, 0, 0, i >> 24, i >> 16 & 255, i >> 8 & 255, 255 & i])), e.box(e.types.tfdt, new Uint8Array([1, 0, 0, 0, s >> 24, s >> 16 & 255, s >> 8 & 255, 255 & s, o >> 24, o >> 16 & 255, o >> 8 & 255, 255 & o])), e.trun(t, a.length + 16 + 20 + 8 + 16 + 8 + 8), a) } }, { key: "trak", value: function(t) { return t.duration = t.duration || 4294967295, e.box(e.types.trak, e.tkhd(t), e.mdia(t)) } }, { key: "trex", value: function(t) { var r = t.id; return e.box(e.types.trex, new Uint8Array([0, 0, 0, 0, r >> 24, r >> 16 & 255, r >> 8 & 255, 255 & r, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1])) } }, { key: "trun", value: function(t, r) { var a, i, n, s, o, l, u = t.samples || [], d = u.length, f = 12 + 16 * d, c = new Uint8Array(f); for (r += 8 + f, c.set([0, 0, 15, 1, d >>> 24 & 255, d >>> 16 & 255, d >>> 8 & 255, 255 & d, r >>> 24 & 255, r >>> 16 & 255, r >>> 8 & 255, 255 & r], 0), a = 0; a < d; a++) n = (i = u[a]).duration, s = i.size, o = i.flags, l = i.cts, c.set([n >>> 24 & 255, n >>> 16 & 255, n >>> 8 & 255, 255 & n, s >>> 24 & 255, s >>> 16 & 255, s >>> 8 & 255, 255 & s, o.isLeading << 2 | o.dependsOn, o.isDependedOn << 6 | o.hasRedundancy << 4 | o.paddingValue << 1 | o.isNonSync, 61440 & o.degradPrio, 15 & o.degradPrio, l >>> 24 & 255, l >>> 16 & 255, l >>> 8 & 255, 255 & l], 12 + 16 * a); return e.box(e.types.trun, c) } }, { key: "initSegment", value: function(t) { e.types || e.init(); var r, a = e.moov(t); return (r = new Uint8Array(e.FTYP.byteLength + a.byteLength)).set(e.FTYP), r.set(a, e.FTYP.byteLength), r } }]), e }(); r.default = s }, {}], 45: [function(e, t, r) { "use strict"; function a(e) { return e && e.__esModule ? e : { default: e } } function i(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var n = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), s = a(e(36)), o = a(e(35)), l = e(54), u = a(e(44)), d = e(33), f = function() { function e(t, r, a, n) { i(this, e), this.observer = t, this.config = r, this.typeSupported = a; var s = navigator.userAgent; this.isSafari = n && n.indexOf("Apple") > -1 && s && !s.match("CriOS"), this.ISGenerated = !1 } return n(e, [{ key: "destroy", value: function() {} }, { key: "resetTimeStamp", value: function(e) { this._initPTS = this._initDTS = e } }, { key: "resetInitSegment", value: function() { this.ISGenerated = !1 } }, { key: "remux", value: function(e, t, r, a, i, n, s) { if (this.ISGenerated) { if (s) { var u = this._initPTS, d = this._PTSNormalize, f = e.inputTimeScale || t.inputTimeScale, c = 1 / 0, h = 1 / 0, g = e.samples; if (g.length && (c = h = d(g[0].pts - f * i, u)), (g = t.samples).length) { var v = g[0]; c = Math.min(c, d(v.pts - f * i, u)), h = Math.min(h, d(v.dts - f * i, u)) } if (c !== 1 / 0) { var p = u - c; Math.abs(p) > 10 * f && (l.logger.warn("timestamp inconsistency, " + (p / f).toFixed(3) + "s delta against expected value: missing discontinuity ? reset initPTS/initDTS"), this._initPTS = c, this._initDTS = h, this.observer.trigger(o.default.INIT_PTS_FOUND, { initPTS: c })) } } } else this.generateIS(e, t, i); if (this.ISGenerated) if (e.samples.length) { e.timescale || (l.logger.warn("regenerate InitSegment as audio detected"), this.generateIS(e, t, i)); var y = this.remuxAudio(e, i, n, s); if (t.samples.length) { var m = void 0; y && (m = y.endPTS - y.startPTS), t.timescale || (l.logger.warn("regenerate InitSegment as video detected"), this.generateIS(e, t, i)), this.remuxVideo(t, i, n, m, s) } } else { var E = void 0; t.samples.length && (E = this.remuxVideo(t, i, n, s)), E && e.codec && this.remuxEmptyAudio(e, i, n, E) } r.samples.length && this.remuxID3(r, i), a.samples.length && this.remuxText(a, i), this.observer.trigger(o.default.FRAG_PARSED) } }, { key: "generateIS", value: function(e, t, r) { var a, i, n = this.observer, s = e.samples, f = t.samples, c = this.typeSupported, h = "audio/mp4", g = {}, v = { tracks: g }, p = void 0 === this._initPTS; if (p && (a = i = 1 / 0), e.config && s.length && (e.timescale = e.samplerate, l.logger.log("audio sampling rate : " + e.samplerate), e.isAAC || (c.mpeg ? (h = "audio/mpeg", e.codec = "") : c.mp3 && (e.codec = "mp3")), g.audio = { container: h, codec: e.codec, initSegment: !e.isAAC && c.mpeg ? new Uint8Array : u.default.initSegment([e]), metadata: { channelCount: e.channelCount } }, p && (a = i = s[0].pts - e.inputTimeScale * r)), t.sps && t.pps && f.length) { var y = t.inputTimeScale; t.timescale = y, g.video = { container: "video/mp4", codec: t.codec, initSegment: u.default.initSegment([t]), metadata: { width: t.width, height: t.height } }, p && (a = Math.min(a, f[0].pts - y * r), i = Math.min(i, f[0].dts - y * r), this.observer.trigger(o.default.INIT_PTS_FOUND, { initPTS: a })) } Object.keys(g).length ? (n.trigger(o.default.FRAG_PARSING_INIT_SEGMENT, v), this.ISGenerated = !0, p && (this._initPTS = a, this._initDTS = i)) : n.trigger(o.default.ERROR, { type: d.ErrorTypes.MEDIA_ERROR, details: d.ErrorDetails.FRAG_PARSING_ERROR, fatal: !1, reason: "no audio/video samples found" }) } }, { key: "remuxVideo", value: function(e, t, r, a, i) { var n, s, f, c, h, g, v, p = 8, y = e.timescale, m = e.samples, E = [], b = m.length, T = this._PTSNormalize, k = this._initDTS, _ = this.nextAvcDts, R = this.isSafari; R && (r |= m.length && _ && (i && Math.abs(t - _ / y) < .1 || Math.abs(m[0].pts - _ - k) < y / 5)), r || (_ = t * y), m.forEach(function(e) { e.pts = T(e.pts - k, _), e.dts = T(e.dts - k, _) }), m.sort(function(e, t) { var r = e.dts - t.dts, a = e.pts - t.pts; return r || (a || e.id - t.id) }); var S = m.reduce(function(e, t) { return Math.max(Math.min(e, t.pts - t.dts), -18e3) }, 0); if (S < 0) { l.logger.warn("PTS < DTS detected in video samples, shifting DTS by " + Math.round(S / 90) + " ms to overcome this issue"); for (var A = 0; A < m.length; A++) m[A].dts += S } var L = m[0]; h = Math.max(L.dts, 0), c = Math.max(L.pts, 0); var w = Math.round((h - _) / 90); r && w && (w > 1 ? l.logger.log("AVC:" + w + " ms hole between fragments detected,filling it") : w < -1 && l.logger.log("AVC:" + -w + " ms overlapping between fragments detected"), h = _, m[0].dts = h, c = Math.max(c - w, _), m[0].pts = c, l.logger.log("Video/PTS/DTS adjusted: " + Math.round(c / 90) + "/" + Math.round(h / 90) + ",delta:" + w + " ms")), L = m[m.length - 1], v = Math.max(L.dts, 0), g = Math.max(L.pts, 0, v), R && (n = Math.round((v - h) / (m.length - 1))); for (var D = 0, O = 0, I = 0; I < b; I++) { for (var P = m[I], C = P.units, x = C.length, F = 0, M = 0; M < x; M++) F += C[M].data.length; O += F, D += x, P.length = F, P.dts = R ? h + I * n : Math.max(P.dts, h), P.pts = Math.max(P.pts, P.dts) } var N = O + 4 * D + 8; try { s = new Uint8Array(N) } catch (e) { return void this.observer.trigger(o.default.ERROR, { type: d.ErrorTypes.MUX_ERROR, details: d.ErrorDetails.REMUX_ALLOC_ERROR, fatal: !1, bytes: N, reason: "fail allocating video mdat " + N }) } var U = new DataView(s.buffer); U.setUint32(0, N), s.set(u.default.types.mdat, 4); for (var B = 0; B < b; B++) { for (var G = m[B], j = G.units, H = 0, W = void 0, K = 0, V = j.length; K < V; K++) { var Y = j[K], z = Y.data, X = Y.data.byteLength; U.setUint32(p, X), p += 4, s.set(z, p), p += X, H += 4 + X } if (R) W = Math.max(0, n * Math.round((G.pts - G.dts) / n)); else { if (B < b - 1) n = m[B + 1].dts - G.dts; else { var q = this.config, Q = G.dts - m[B > 0 ? B - 1 : B].dts; if (q.stretchShortVideoTrack) { var J = q.maxBufferHole, Z = q.maxSeekHole, $ = Math.floor(Math.min(J, Z) * y), ee = (a ? c + a * y : this.nextAudioPts) - G.pts; ee > $ ? ((n = ee - Q) < 0 && (n = Q), l.logger.log("It is approximately " + ee / 90 + " ms to the next segment; using duration " + n / 90 + " ms for the last video frame.")) : n = Q } else n = Q } W = Math.round(G.pts - G.dts) } E.push({ size: H, duration: n, cts: W, flags: { isLeading: 0, isDependedOn: 0, hasRedundancy: 0, degradPrio: 0, dependsOn: G.key ? 2 : 1, isNonSync: G.key ? 0 : 1 } }) } this.nextAvcDts = v + n; var te = e.dropped; if (e.len = 0, e.nbNalu = 0, e.dropped = 0, E.length && navigator.userAgent.toLowerCase().indexOf("chrome") > -1) { var re = E[0].flags; re.dependsOn = 2, re.isNonSync = 0 } e.samples = E, f = u.default.moof(e.sequenceNumber++, h, e), e.samples = []; var ae = { data1: f, data2: s, startPTS: c / y, endPTS: (g + n) / y, startDTS: h / y, endDTS: this.nextAvcDts / y, type: "video", nb: E.length, dropped: te }; return this.observer.trigger(o.default.FRAG_PARSING_DATA, ae), ae } }, { key: "remuxAudio", value: function(e, t, r, a) { var i, n, f, c, h, g, v, p = e.inputTimeScale, y = p / e.timescale, m = (e.isAAC ? 1024 : 1152) * y, E = this._PTSNormalize, b = this._initDTS, T = !e.isAAC && this.typeSupported.mpeg, k = e.samples, _ = [], R = this.nextAudioPts; if ((r |= k.length && R && (a && Math.abs(t - R / p) < .1 || Math.abs(k[0].pts - R - b) < 20 * m)) || (R = t * p), k.forEach(function(e) { e.pts = e.dts = E(e.pts - b, R) }), k.sort(function(e, t) { return e.pts - t.pts }), a && e.isAAC) for (var S = 0, A = R; S < k.length;) { var L, w = k[S]; L = w.pts - A; var D = Math.abs(1e3 * L / p); if (L <= -m) l.logger.warn("Dropping 1 audio frame @ " + (A / p).toFixed(3) + "s due to " + D + " ms overlap."), k.splice(S, 1), e.len -= w.unit.length; else if (L >= m && D < 1e4 && A) { var O = Math.round(L / m); l.logger.warn("Injecting " + O + " audio frame @ " + (A / p).toFixed(3) + "s due to " + Math.round(1e3 * L / p) + " ms gap."); for (var I = 0; I < O; I++) { var P = Math.max(A, 0); (f = s.default.getSilentFrame(e.manifestCodec || e.codec, e.channelCount)) || (l.logger.log("Unable to get silent frame for given audio codec; duplicating last frame instead."), f = w.unit.subarray()), k.splice(S, 0, { unit: f, pts: P, dts: P }), e.len += f.length, A += m, S++ } w.pts = w.dts = A, A += m, S++ } else Math.abs(L), w.pts = w.dts = A, A += m, S++ } for (var C = 0, x = k.length; C < x; C++) { var F = k[C], M = F.unit, N = F.pts; if (void 0 !== v) n.duration = Math.round((N - v) / y); else { var U = Math.round(1e3 * (N - R) / p), B = 0; if (r && e.isAAC && U) { if (U > 0 && U < 1e4) B = Math.round((N - R) / m), l.logger.log(U + " ms hole between AAC samples detected,filling it"), B > 0 && ((f = s.default.getSilentFrame(e.manifestCodec || e.codec, e.channelCount)) || (f = M.subarray()), e.len += B * f.length); else if (U < -12) { l.logger.log("drop overlapping AAC sample, expected/parsed/delta:" + (R / p).toFixed(3) + "s/" + (N / p).toFixed(3) + "s/" + -U + "ms"), e.len -= M.byteLength; continue } N = R } if (g = Math.max(0, N), !(e.len > 0)) return; var G = T ? e.len : e.len + 8; i = T ? 0 : 8; try { c = new Uint8Array(G) } catch (e) { return void this.observer.trigger(o.default.ERROR, { type: d.ErrorTypes.MUX_ERROR, details: d.ErrorDetails.REMUX_ALLOC_ERROR, fatal: !1, bytes: G, reason: "fail allocating audio mdat " + G }) } T || (new DataView(c.buffer).setUint32(0, G), c.set(u.default.types.mdat, 4)); for (var j = 0; j < B; j++)(f = s.default.getSilentFrame(e.manifestCodec || e.codec, e.channelCount)) || (l.logger.log("Unable to get silent frame for given audio codec; duplicating this frame instead."), f = M.subarray()), c.set(f, i), i += f.byteLength, n = { size: f.byteLength, cts: 0, duration: 1024, flags: { isLeading: 0, isDependedOn: 0, hasRedundancy: 0, degradPrio: 0, dependsOn: 1 } }, _.push(n) } c.set(M, i); var H = M.byteLength; i += H, n = { size: H, cts: 0, duration: 0, flags: { isLeading: 0, isDependedOn: 0, hasRedundancy: 0, degradPrio: 0, dependsOn: 1 } }, _.push(n), v = N } var W = 0, K = _.length; if (K >= 2 && (W = _[K - 2].duration, n.duration = W), K) { this.nextAudioPts = R = v + y * W, e.len = 0, e.samples = _, h = T ? new Uint8Array : u.default.moof(e.sequenceNumber++, g / y, e), e.samples = []; var V = g / p, Y = R / p, z = { data1: h, data2: c, startPTS: V, endPTS: Y, startDTS: V, endDTS: Y, type: "audio", nb: K }; return this.observer.trigger(o.default.FRAG_PARSING_DATA, z), z } return null } }, { key: "remuxEmptyAudio", value: function(e, t, r, a) { var i = e.inputTimeScale, n = i / (e.samplerate ? e.samplerate : i), o = this.nextAudioPts, u = (void 0 !== o ? o : a.startDTS * i) + this._initDTS, d = a.endDTS * i + this._initDTS, f = 1024 * n, c = Math.ceil((d - u) / f), h = s.default.getSilentFrame(e.manifestCodec || e.codec, e.channelCount); if (l.logger.warn("remux empty Audio"), h) { for (var g = [], v = 0; v < c; v++) { var p = u + v * f; g.push({ unit: h, pts: p, dts: p }), e.len += h.length } e.samples = g, this.remuxAudio(e, t, r) } else l.logger.trace("Unable to remuxEmptyAudio since we were unable to get a silent frame for given audio codec!") } }, { key: "remuxID3", value: function(e, t) { var r, a = e.samples.length, i = e.inputTimeScale, n = this._initPTS, s = this._initDTS; if (a) { for (var l = 0; l < a; l++)(r = e.samples[l]).pts = (r.pts - n) / i, r.dts = (r.dts - s) / i; this.observer.trigger(o.default.FRAG_PARSING_METADATA, { samples: e.samples }) } e.samples = [], t = t } }, { key: "remuxText", value: function(e, t) { e.samples.sort(function(e, t) { return e.pts - t.pts }); var r, a = e.samples.length, i = e.inputTimeScale, n = this._initPTS; if (a) { for (var s = 0; s < a; s++)(r = e.samples[s]).pts = (r.pts - n) / i; this.observer.trigger(o.default.FRAG_PARSING_USERDATA, { samples: e.samples }) } e.samples = [], t = t } }, { key: "_PTSNormalize", value: function(e, t) { var r; if (void 0 === t) return e; for (r = t < e ? -8589934592 : 8589934592; Math.abs(e - t) > 4294967296;) e += r; return e } }]), e }(); r.default = f }, { 33: 33, 35: 35, 36: 36, 44: 44, 54: 54 }], 46: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = function(e) { return e && e.__esModule ? e : { default: e } }(e(35)), s = function() { function e(t) { a(this, e), this.observer = t } return i(e, [{ key: "destroy", value: function() {} }, { key: "resetTimeStamp", value: function() {} }, { key: "resetInitSegment", value: function() {} }, { key: "remux", value: function(e, t, r, a, i, s, o, l) { var u = this.observer, d = ""; e && (d += "audio"), t && (d += "video"), u.trigger(n.default.FRAG_PARSING_DATA, { data1: l, startPTS: i, startDTS: i, type: d, nb: 1, dropped: 0 }), u.trigger(n.default.FRAG_PARSED) } }]), e }(); r.default = s }, { 35: 35 }], 47: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = /^(\d+)x(\d+)$/, s = /\s*(.+?)\s*=((?:\".*?\")|.*?)(?:,|$)/g, o = function() { function e(t) { a(this, e), "string" == typeof t && (t = e.parseAttrList(t)); for (var r in t) t.hasOwnProperty(r) && (this[r] = t[r]) } return i(e, [{ key: "decimalInteger", value: function(e) { var t = parseInt(this[e], 10); return t > Number.MAX_SAFE_INTEGER ? 1 / 0 : t } }, { key: "hexadecimalInteger", value: 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), a = 0; a < t.length / 2; a++) r[a] = parseInt(t.slice(2 * a, 2 * a + 2), 16); return r } return null } }, { key: "hexadecimalIntegerAsNumber", value: function(e) { var t = parseInt(this[e], 16); return t > Number.MAX_SAFE_INTEGER ? 1 / 0 : t } }, { key: "decimalFloatingPoint", value: function(e) { return parseFloat(this[e]) } }, { key: "enumeratedString", value: function(e) { return this[e] } }, { key: "decimalResolution", value: function(e) { var t = n.exec(this[e]); if (null !== t) return { width: parseInt(t[1], 10), height: parseInt(t[2], 10) } } }], [{ key: "parseAttrList", value: function(e) { var t, r = {}; for (s.lastIndex = 0; null !== (t = s.exec(e));) { var a = t[2]; 0 === a.indexOf('"') && a.lastIndexOf('"') === a.length - 1 && (a = a.slice(1, -1)), r[t[1]] = a } return r } }]), e }(); r.default = o }, {}], 48: [function(e, t, r) { "use strict"; var a = { search: function(e, t) { for (var r = 0, a = e.length - 1, i = null, n = null; r <= a;) { var s = t(n = e[i = (r + a) / 2 | 0]); if (s > 0) r = i + 1; else { if (!(s < 0)) return n; a = i - 1 } } return null } }; t.exports = a }, {}], 49: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = { 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 }, s = function(e) { var t = e; return n.hasOwnProperty(e) && (t = n[e]), String.fromCharCode(t) }, o = 15, l = 100, u = { 17: 1, 18: 3, 21: 5, 22: 7, 23: 9, 16: 11, 19: 12, 20: 14 }, d = { 17: 2, 18: 4, 21: 6, 22: 8, 23: 10, 19: 13, 20: 15 }, f = { 25: 1, 26: 3, 29: 5, 30: 7, 31: 9, 24: 11, 27: 12, 28: 14 }, c = { 25: 2, 26: 4, 29: 6, 30: 8, 31: 10, 27: 13, 28: 15 }, h = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "black", "transparent"], g = { 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 } }, v = function(e) { for (var t = [], r = 0; r < e.length; r++) t.push(e[r].toString(16)); return t }, p = function() { function e(t, r, i, n, s) { a(this, e), this.foreground = t || "white", this.underline = r || !1, this.italics = i || !1, this.background = n || "black", this.flash = s || !1 } return i(e, [{ key: "reset", value: function() { this.foreground = "white", this.underline = !1, this.italics = !1, this.background = "black", this.flash = !1 } }, { key: "setStyles", value: function(e) { for (var t = ["foreground", "underline", "italics", "background", "flash"], r = 0; r < t.length; r++) { var a = t[r]; e.hasOwnProperty(a) && (this[a] = e[a]) } } }, { key: "isDefault", value: function() { return "white" === this.foreground && !this.underline && !this.italics && "black" === this.background && !this.flash } }, { key: "equals", value: function(e) { return this.foreground === e.foreground && this.underline === e.underline && this.italics === e.italics && this.background === e.background && this.flash === e.flash } }, { key: "copy", value: function(e) { this.foreground = e.foreground, this.underline = e.underline, this.italics = e.italics, this.background = e.background, this.flash = e.flash } }, { key: "toString", value: function() { return "color=" + this.foreground + ", underline=" + this.underline + ", italics=" + this.italics + ", background=" + this.background + ", flash=" + this.flash } }]), e }(), y = function() { function e(t, r, i, n, s, o) { a(this, e), this.uchar = t || " ", this.penState = new p(r, i, n, s, o) } return i(e, [{ key: "reset", value: function() { this.uchar = " ", this.penState.reset() } }, { key: "setChar", value: function(e, t) { this.uchar = e, this.penState.copy(t) } }, { key: "setPenState", value: function(e) { this.penState.copy(e) } }, { key: "equals", value: function(e) { return this.uchar === e.uchar && this.penState.equals(e.penState) } }, { key: "copy", value: function(e) { this.uchar = e.uchar, this.penState.copy(e.penState) } }, { key: "isEmpty", value: function() { return " " === this.uchar && this.penState.isDefault() } }]), e }(), m = function() { function e() { a(this, e), this.chars = []; for (var t = 0; t < l; t++) this.chars.push(new y); this.pos = 0, this.currPenState = new p } return i(e, [{ key: "equals", value: function(e) { for (var t = !0, r = 0; r < l; r++) if (!this.chars[r].equals(e.chars[r])) { t = !1; break } return t } }, { key: "copy", value: function(e) { for (var t = 0; t < l; t++) this.chars[t].copy(e.chars[t]) } }, { key: "isEmpty", value: function() { for (var e = !0, t = 0; t < l; t++) if (!this.chars[t].isEmpty()) { e = !1; break } return e } }, { key: "setCursor", value: function(e) { this.pos !== e && (this.pos = e), this.pos < 0 ? (g.log("ERROR", "Negative cursor position " + this.pos), this.pos = 0) : this.pos > l && (g.log("ERROR", "Too large cursor position " + this.pos), this.pos = l) } }, { key: "moveCursor", value: function(e) { var t = this.pos + e; if (e > 1) for (var r = this.pos + 1; r < t + 1; r++) this.chars[r].setPenState(this.currPenState); this.setCursor(t) } }, { key: "backSpace", value: function() { this.moveCursor(-1), this.chars[this.pos].setChar(" ", this.currPenState) } }, { key: "insertChar", value: function(e) { e >= 144 && this.backSpace(); var t = s(e); this.pos >= l ? g.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)) } }, { key: "clearFromPos", value: function(e) { var t; for (t = e; t < l; t++) this.chars[t].reset() } }, { key: "clear", value: function() { this.clearFromPos(0), this.pos = 0, this.currPenState.reset() } }, { key: "clearToEndOfRow", value: function() { this.clearFromPos(this.pos) } }, { key: "getTextString", value: function() { for (var e = [], t = !0, r = 0; r < l; r++) { var a = this.chars[r].uchar; " " !== a && (t = !1), e.push(a) } return t ? "" : e.join("") } }, { key: "setPenStyles", value: function(e) { this.currPenState.setStyles(e), this.chars[this.pos].setPenState(this.currPenState) } }]), e }(), E = function() { function e() { a(this, e), this.rows = []; for (var t = 0; t < o; t++) this.rows.push(new m); this.currRow = o - 1, this.nrRollUpRows = null, this.reset() } return i(e, [{ key: "reset", value: function() { for (var e = 0; e < o; e++) this.rows[e].clear(); this.currRow = o - 1 } }, { key: "equals", value: function(e) { for (var t = !0, r = 0; r < o; r++) if (!this.rows[r].equals(e.rows[r])) { t = !1; break } return t } }, { key: "copy", value: function(e) { for (var t = 0; t < o; t++) this.rows[t].copy(e.rows[t]) } }, { key: "isEmpty", value: function() { for (var e = !0, t = 0; t < o; t++) if (!this.rows[t].isEmpty()) { e = !1; break } return e } }, { key: "backSpace", value: function() { this.rows[this.currRow].backSpace() } }, { key: "clearToEndOfRow", value: function() { this.rows[this.currRow].clearToEndOfRow() } }, { key: "insertChar", value: function(e) { this.rows[this.currRow].insertChar(e) } }, { key: "setPen", value: function(e) { this.rows[this.currRow].setPenStyles(e) } }, { key: "moveCursor", value: function(e) { this.rows[this.currRow].moveCursor(e) } }, { key: "setCursor", value: function(e) { g.log("INFO", "setCursor: " + e), this.rows[this.currRow].setCursor(e) } }, { key: "setPAC", value: function(e) { g.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 < o; r++) this.rows[r].clear(); var a = this.currRow + 1 - this.nrRollUpRows, i = this.lastOutputScreen; if (i) { var n = i.rows[a].cueStartTime; if (n && n < g.time) for (var s = 0; s < this.nrRollUpRows; s++) this.rows[t - this.nrRollUpRows + s + 1].copy(i.rows[a + s]) } } this.currRow = t; var l = this.rows[this.currRow]; if (null !== e.indent) { var u = e.indent, d = Math.max(u - 1, 0); l.setCursor(e.indent), e.color = l.chars[d].penState.foreground } var f = { foreground: e.color, underline: e.underline, italics: e.italics, background: "black", flash: !1 }; this.setPen(f) } }, { key: "setBkgData", value: function(e) { g.log("INFO", "bkgData = " + JSON.stringify(e)), this.backSpace(), this.setPen(e), this.insertChar(32) } }, { key: "setRollUpRows", value: function(e) { this.nrRollUpRows = e } }, { key: "rollUp", value: function() { if (null !== this.nrRollUpRows) { g.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), g.log("INFO", "Rolling up") } else g.log("DEBUG", "roll_up but nrRollUpRows not set yet") } }, { key: "getDisplayText", value: function(e) { e = e || !1; for (var t = [], r = "", a = -1, i = 0; i < o; i++) { var n = this.rows[i].getTextString(); n && (a = i + 1, e ? t.push("Row " + a + ": '" + n + "'") : t.push(n.trim())) } return t.length > 0 && (r = e ? "[" + t.join(" | ") + "]" : t.join("\n")), r } }, { key: "getTextAndFormat", value: function() { return this.rows } }]), e }(), b = function() { function e(t, r) { a(this, e), this.chNr = t, this.outputFilter = r, this.mode = null, this.verbose = 0, this.displayedMemory = new E, this.nonDisplayedMemory = new E, this.lastOutputScreen = new E, this.currRollUpRow = this.displayedMemory.rows[o - 1], this.writeScreen = this.displayedMemory, this.mode = null, this.cueStartTime = null } return i(e, [{ key: "reset", value: function() { this.mode = null, this.displayedMemory.reset(), this.nonDisplayedMemory.reset(), this.lastOutputScreen.reset(), this.currRollUpRow = this.displayedMemory.rows[o - 1], this.writeScreen = this.displayedMemory, this.mode = null, this.cueStartTime = null, this.lastCueEndTime = null } }, { key: "getHandler", value: function() { return this.outputFilter } }, { key: "setHandler", value: function(e) { this.outputFilter = e } }, { key: "setPAC", value: function(e) { this.writeScreen.setPAC(e) } }, { key: "setBkgData", value: function(e) { this.writeScreen.setBkgData(e) } }, { key: "setMode", value: function(e) { e !== this.mode && (this.mode = e, g.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) } }, { key: "insertChars", value: function(e) { for (var t = 0; t < e.length; t++) this.writeScreen.insertChar(e[t]); var r = this.writeScreen === this.displayedMemory ? "DISP" : "NON_DISP"; g.log("INFO", r + ": " + this.writeScreen.getDisplayText(!0)), "MODE_PAINT-ON" !== this.mode && "MODE_ROLL-UP" !== this.mode || (g.log("TEXT", "DISPLAYED: " + this.displayedMemory.getDisplayText(!0)), this.outputDataUpdate()) } }, { key: "ccRCL", value: function() { g.log("INFO", "RCL - Resume Caption Loading"), this.setMode("MODE_POP-ON") } }, { key: "ccBS", value: function() { g.log("INFO", "BS - BackSpace"), "MODE_TEXT" !== this.mode && (this.writeScreen.backSpace(), this.writeScreen === this.displayedMemory && this.outputDataUpdate()) } }, { key: "ccAOF", value: function() {} }, { key: "ccAON", value: function() {} }, { key: "ccDER", value: function() { g.log("INFO", "DER- Delete to End of Row"), this.writeScreen.clearToEndOfRow(), this.outputDataUpdate() } }, { key: "ccRU", value: function(e) { g.log("INFO", "RU(" + e + ") - Roll Up"), this.writeScreen = this.displayedMemory, this.setMode("MODE_ROLL-UP"), this.writeScreen.setRollUpRows(e) } }, { key: "ccFON", value: function() { g.log("INFO", "FON - Flash On"), this.writeScreen.setPen({ flash: !0 }) } }, { key: "ccRDC", value: function() { g.log("INFO", "RDC - Resume Direct Captioning"), this.setMode("MODE_PAINT-ON") } }, { key: "ccTR", value: function() { g.log("INFO", "TR"), this.setMode("MODE_TEXT") } }, { key: "ccRTD", value: function() { g.log("INFO", "RTD"), this.setMode("MODE_TEXT") } }, { key: "ccEDM", value: function() { g.log("INFO", "EDM - Erase Displayed Memory"), this.displayedMemory.reset(), this.outputDataUpdate() } }, { key: "ccCR", value: function() { g.log("CR - Carriage Return"), this.writeScreen.rollUp(), this.outputDataUpdate() } }, { key: "ccENM", value: function() { g.log("INFO", "ENM - Erase Non-displayed Memory"), this.nonDisplayedMemory.reset() } }, { key: "ccEOC", value: function() { if (g.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, g.log("TEXT", "DISP: " + this.displayedMemory.getDisplayText()) } this.outputDataUpdate() } }, { key: "ccTO", value: function(e) { g.log("INFO", "TO(" + e + ") - Tab Offset"), this.writeScreen.moveCursor(e) } }, { key: "ccMIDROW", value: function(e) { var t = { flash: !1 }; if (t.underline = e % 2 == 1, t.italics = e >= 46, t.italics) t.foreground = "white"; else { var r = Math.floor(e / 2) - 16, a = ["white", "green", "blue", "cyan", "red", "yellow", "magenta"]; t.foreground = a[r] } g.log("INFO", "MIDROW: " + JSON.stringify(t)), this.writeScreen.setPen(t) } }, { key: "outputDataUpdate", value: function() { var e = g.time; null !== e && this.outputFilter && (this.outputFilter.updateData && this.outputFilter.updateData(e, this.displayedMemory), null !== this.cueStartTime || this.displayedMemory.isEmpty() ? this.displayedMemory.equals(this.lastOutputScreen) || (this.outputFilter.newCue && this.outputFilter.newCue(this.cueStartTime, e, this.lastOutputScreen), this.cueStartTime = this.displayedMemory.isEmpty() ? null : e) : this.cueStartTime = e, this.lastOutputScreen.copy(this.displayedMemory)) } }, { key: "cueSplitAtTime", value: function(e) { this.outputFilter && (this.displayedMemory.isEmpty() || (this.outputFilter.newCue && this.outputFilter.newCue(this.cueStartTime, e, this.displayedMemory), this.cueStartTime = e)) } }]), e }(), T = function() { function e(t, r, i) { a(this, e), this.field = t || 1, this.outputs = [r, i], this.channels = [new b(1, r), new b(2, i)], 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 i(e, [{ key: "getHandler", value: function(e) { return this.channels[e].getHandler() } }, { key: "setHandler", value: function(e, t) { this.channels[e].setHandler(t) } }, { key: "addData", value: function(e, t) { var r, a, i, n = !1; this.lastTime = e, g.setTime(e); for (var s = 0; s < t.length; s += 2) a = 127 & t[s], i = 127 & t[s + 1], 0 !== a || 0 !== i ? (g.log("DATA", "[" + v([t[s], t[s + 1]]) + "] -> (" + v([a, i]) + ")"), (r = this.parseCmd(a, i)) || (r = this.parseMidrow(a, i)), r || (r = this.parsePAC(a, i)), r || (r = this.parseBackgroundAttributes(a, i)), r || (n = this.parseChars(a, i)) && (this.currChNr && this.currChNr >= 0 ? this.channels[this.currChNr - 1].insertChars(n) : g.log("WARNING", "No channel found yet. TEXT-MODE?")), r ? this.dataCounters.cmd += 2 : n ? this.dataCounters.char += 2 : (this.dataCounters.other += 2, g.log("WARNING", "Couldn't parse cleaned data " + v([a, i]) + " orig: " + v([t[s], t[s + 1]])))) : this.dataCounters.padding += 2 } }, { key: "parseCmd", value: function(e, t) { var r = null, a = (20 === e || 28 === e) && 32 <= t && t <= 47, i = (23 === e || 31 === e) && 33 <= t && t <= 35; if (!a && !i) return !1; if (e === this.lastCmdA && t === this.lastCmdB) return this.lastCmdA = null, this.lastCmdB = null, g.log("DEBUG", "Repeated command (" + v([e, t]) + ") is dropped"), !0; r = 20 === e || 23 === e ? 1 : 2; var n = this.channels[r - 1]; return 20 === e || 28 === e ? 32 === t ? n.ccRCL() : 33 === t ? n.ccBS() : 34 === t ? n.ccAOF() : 35 === t ? n.ccAON() : 36 === t ? n.ccDER() : 37 === t ? n.ccRU(2) : 38 === t ? n.ccRU(3) : 39 === t ? n.ccRU(4) : 40 === t ? n.ccFON() : 41 === t ? n.ccRDC() : 42 === t ? n.ccTR() : 43 === t ? n.ccRTD() : 44 === t ? n.ccEDM() : 45 === t ? n.ccCR() : 46 === t ? n.ccENM() : 47 === t && n.ccEOC() : n.ccTO(t - 32), this.lastCmdA = e, this.lastCmdB = t, this.currChNr = r, !0 } }, { key: "parseMidrow", value: function(e, t) { var r = null; return (17 === e || 25 === e) && 32 <= t && t <= 47 && ((r = 17 === e ? 1 : 2) !== this.currChNr ? (g.log("ERROR", "Mismatch channel in midrow parsing"), !1) : (this.channels[r - 1].ccMIDROW(t), g.log("DEBUG", "MIDROW (" + v([e, t]) + ")"), !0)) } }, { key: "parsePAC", value: function(e, t) { var r = null, a = null, i = (17 <= e && e <= 23 || 25 <= e && e <= 31) && 64 <= t && t <= 127, n = (16 === e || 24 === e) && 64 <= t && t <= 95; if (!i && !n) return !1; if (e === this.lastCmdA && t === this.lastCmdB) return this.lastCmdA = null, this.lastCmdB = null, !0; r = e <= 23 ? 1 : 2, a = 64 <= t && t <= 95 ? 1 === r ? u[e] : f[e] : 1 === r ? d[e] : c[e]; var s = this.interpretPAC(a, t); return this.channels[r - 1].setPAC(s), this.lastCmdA = e, this.lastCmdB = t, this.currChNr = r, !0 } }, { key: "interpretPAC", value: function(e, t) { var r = t, a = { color: null, italics: !1, indent: null, underline: !1, row: e }; return r = t > 95 ? t - 96 : t - 64, a.underline = 1 == (1 & r), r <= 13 ? a.color = ["white", "green", "blue", "cyan", "red", "yellow", "magenta", "white"][Math.floor(r / 2)] : r <= 15 ? (a.italics = !0, a.color = "white") : a.indent = 4 * Math.floor((r - 16) / 2), a } }, { key: "parseChars", value: function(e, t) { var r = null, a = null, i = null; if (e >= 25 ? (r = 2, i = e - 8) : (r = 1, i = e), 17 <= i && i <= 19) { var n = t; n = 17 === i ? t + 80 : 18 === i ? t + 112 : t + 144, g.log("INFO", "Special char '" + s(n) + "' in channel " + r), a = [n] } else 32 <= e && e <= 127 && (a = 0 === t ? [e] : [e, t]); if (a) { var o = v(a); g.log("DEBUG", "Char codes = " + o.join(",")), this.lastCmdA = null, this.lastCmdB = null } return a } }, { key: "parseBackgroundAttributes", value: function(e, t) { var r, a, i, n = (16 === e || 24 === e) && 32 <= t && t <= 47, s = (23 === e || 31 === e) && 45 <= t && t <= 47; return !(!n && !s) && (r = {}, 16 === e || 24 === e ? (a = Math.floor((t - 32) / 2), r.background = h[a], t % 2 == 1 && (r.background = r.background + "_semi")) : 45 === t ? r.background = "transparent" : (r.foreground = "black", 47 === t && (r.underline = !0)), i = e < 24 ? 1 : 2, this.channels[i - 1].setBkgData(r), this.lastCmdA = null, this.lastCmdB = null, !0) } }, { key: "reset", value: function() { for (var e = 0; e < this.channels.length; e++) this.channels[e] && this.channels[e].reset(); this.lastCmdA = null, this.lastCmdB = null } }, { key: "cueSplitAtTime", value: function(e) { for (var t = 0; t < this.channels.length; t++) this.channels[t] && this.channels[t].cueSplitAtTime(e) } }]), e }(); r.default = T }, {}], 50: [function(e, t, r) { "use strict"; var a = e(57), i = { newCue: function(e, t, r, i) { for (var n, s, o, l, u, d = window.VTTCue || window.TextTrackCue, f = 0; f < i.rows.length; f++) if (n = i.rows[f], o = !0, l = 0, u = "", !n.isEmpty()) { for (var c = 0; c < n.chars.length; c++) n.chars[c].uchar.match(/\s/) && o ? l++ : (u += n.chars[c].uchar, o = !1); n.cueStartTime = t, t === r && (r += 1e-4), s = new d(t, r, (0, a.fixLineBreaks)(u.trim())), l >= 16 ? l-- : l++, navigator.userAgent.match(/Firefox\//) ? s.line = f + 1 : s.line = f > 7 ? f - 2 : f + 1, s.align = "left", s.position = Math.max(0, Math.min(100, l / 32 * 100 + (navigator.userAgent.match(/Firefox\//) ? 50 : 0))), e.addCue(s) } } }; t.exports = i }, { 57: 57 }], 51: [function(e, t, r) { "use strict"; Object.defineProperty(r, "__esModule", { value: !0 }), r.findFragWithCC = function(e, t) { return a.default.search(e, function(e) { return e.cc < t ? 1 : e.cc > t ? -1 : 0 }) }; var a = function(e) { return e && e.__esModule ? e : { default: e } }(e(48)) }, { 48: 48 }], 52: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = function(e) { return e && e.__esModule ? e : { default: e } }(e(53)), s = function() { function e(t, r, i, s) { a(this, e), this.hls = t, this.defaultEstimate_ = s, this.minWeight_ = .001, this.minDelayMs_ = 50, this.slow_ = new n.default(r), this.fast_ = new n.default(i) } return i(e, [{ key: "sample", value: function(e, t) { var r = 8e3 * t / (e = Math.max(e, this.minDelayMs_)), a = e / 1e3; this.fast_.sample(a, r), this.slow_.sample(a, r) } }, { key: "canEstimate", value: function() { var e = this.fast_; return e && e.getTotalWeight() >= this.minWeight_ } }, { key: "getEstimate", value: function() { return this.canEstimate() ? Math.min(this.fast_.getEstimate(), this.slow_.getEstimate()) : this.defaultEstimate_ } }, { key: "destroy", value: function() {} }]), e }(); r.default = s }, { 53: 53 }], 53: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = function() { function e(t) { a(this, e), this.alpha_ = t ? Math.exp(Math.log(.5) / t) : 0, this.estimate_ = 0, this.totalWeight_ = 0 } return i(e, [{ key: "sample", value: function(e, t) { var r = Math.pow(this.alpha_, e); this.estimate_ = t * (1 - r) + r * this.estimate_, this.totalWeight_ += e } }, { key: "getTotalWeight", value: function() { return this.totalWeight_ } }, { key: "getEstimate", value: function() { if (this.alpha_) { var e = 1 - Math.pow(this.alpha_, this.totalWeight_); return this.estimate_ / e } return this.estimate_ } }]), e }(); r.default = n }, {}], 54: [function(e, t, r) { "use strict"; function a() {} function i(e, t) { return t = "[" + e + "] > " + t } function n(e) { var t = self.console[e]; return t ? function() { for (var r = arguments.length, a = Array(r), n = 0; n < r; n++) a[n] = arguments[n]; a[0] && (a[0] = i(e, a[0])), t.apply(self.console, a) } : a } function s(e) { for (var t = arguments.length, r = Array(t > 1 ? t - 1 : 0), a = 1; a < t; a++) r[a - 1] = arguments[a]; r.forEach(function(t) { u[t] = e[t] ? e[t].bind(e) : n(t) }) } Object.defineProperty(r, "__esModule", { value: !0 }); var o = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function(e) { return typeof e } : function(e) { return e && "function" == typeof Symbol && e.constructor === Symbol && e !== Symbol.prototype ? "symbol" : typeof e }, l = { trace: a, debug: a, log: a, warn: a, info: a, error: a }, u = l; r.enableLogs = function(e) { if (!0 === e || "object" === (void 0 === e ? "undefined" : o(e))) { s(e, "debug", "log", "info", "warn", "error"); try { u.log() } catch (e) { u = l } } else u = l }, r.logger = u }, {}], 55: [function(e, t, r) { "use strict"; var a = { toString: function(e) { for (var t = "", r = e.length, a = 0; a < r; a++) t += "[" + e.start(a).toFixed(3) + "," + e.end(a).toFixed(3) + "]"; return t } }; t.exports = a }, {}], 56: [function(e, t, r) { "use strict"; Object.defineProperty(r, "__esModule", { value: !0 }), r.default = function() { function e(e) { return "string" == typeof e && (!!n[e.toLowerCase()] && e.toLowerCase()) } function t(e) { return "string" == typeof e && (!!s[e.toLowerCase()] && e.toLowerCase()) } function r(e) { for (var t = 1; t < arguments.length; t++) { var r = arguments[t]; for (var a in r) e[a] = r[a] } return e } function a(a, n, s) { var o = this, l = function() { if ("undefined" != typeof navigator) return /MSIE\s8\.0/.test(navigator.userAgent) }(), u = {}; l ? o = document.createElement("custom") : u.enumerable = !0, o.hasBeenReset = !1; var d = "", f = !1, c = a, h = n, g = s, v = null, p = "", y = !0, m = "auto", E = "start", b = 50, T = "middle", k = 50, _ = "middle"; if (Object.defineProperty(o, "id", r({}, u, { get: function() { return d }, set: function(e) { d = "" + e } })), Object.defineProperty(o, "pauseOnExit", r({}, u, { get: function() { return f }, set: function(e) { f = !!e } })), Object.defineProperty(o, "startTime", r({}, u, { get: function() { return c }, set: function(e) { if ("number" != typeof e) throw new TypeError("Start time must be set to a number."); c = e, this.hasBeenReset = !0 } })), Object.defineProperty(o, "endTime", r({}, u, { get: function() { return h }, set: function(e) { if ("number" != typeof e) throw new TypeError("End time must be set to a number."); h = e, this.hasBeenReset = !0 } })), Object.defineProperty(o, "text", r({}, u, { get: function() { return g }, set: function(e) { g = "" + e, this.hasBeenReset = !0 } })), Object.defineProperty(o, "region", r({}, u, { get: function() { return v }, set: function(e) { v = e, this.hasBeenReset = !0 } })), Object.defineProperty(o, "vertical", r({}, u, { get: function() { return p }, set: function(t) { var r = e(t); if (!1 === r) throw new SyntaxError("An invalid or illegal string was specified."); p = r, this.hasBeenReset = !0 } })), Object.defineProperty(o, "snapToLines", r({}, u, { get: function() { return y }, set: function(e) { y = !!e, this.hasBeenReset = !0 } })), Object.defineProperty(o, "line", r({}, u, { get: function() { return m }, set: function(e) { if ("number" != typeof e && e !== i) throw new SyntaxError("An invalid number or illegal string was specified."); m = e, this.hasBeenReset = !0 } })), Object.defineProperty(o, "lineAlign", r({}, u, { get: function() { return E }, set: function(e) { var r = t(e); if (!r) throw new SyntaxError("An invalid or illegal string was specified."); E = r, this.hasBeenReset = !0 } })), Object.defineProperty(o, "position", r({}, u, { get: function() { return b }, set: function(e) { if (e < 0 || e > 100) throw new Error("Position must be between 0 and 100."); b = e, this.hasBeenReset = !0 } })), Object.defineProperty(o, "positionAlign", r({}, u, { get: function() { return T }, set: function(e) { var r = t(e); if (!r) throw new SyntaxError("An invalid or illegal string was specified."); T = r, this.hasBeenReset = !0 } })), Object.defineProperty(o, "size", r({}, u, { get: function() { return k }, set: function(e) { if (e < 0 || e > 100) throw new Error("Size must be between 0 and 100."); k = e, this.hasBeenReset = !0 } })), Object.defineProperty(o, "align", r({}, u, { get: function() { return _ }, set: function(e) { var r = t(e); if (!r) throw new SyntaxError("An invalid or illegal string was specified."); _ = r, this.hasBeenReset = !0 } })), o.displayState = void 0, l) return o } if ("undefined" != typeof window && window.VTTCue) return window.VTTCue; var i = "auto", n = { "": !0, lr: !0, rl: !0 }, s = { start: !0, middle: !0, end: !0, left: !0, right: !0 }; return a.prototype.getCueAsHTML = function() { return window.WebVTT.convertCueToDOMTree(window, this.text) }, a }() }, {}], 57: [function(e, t, r) { "use strict"; function a() { this.window = window, this.state = "INITIAL", this.buffer = "", this.decoder = new d, this.regionList = [] } function i(e) { function t(e, t, r, a) { return 3600 * (0 | e) + 60 * (0 | t) + (0 | r) + (0 | a) / 1e3 } var r = e.match(/^(\d+):(\d{2})(:\d{2})?\.(\d{3})/); return r ? r[3] ? t(r[1], r[2], r[3].replace(":", ""), r[4]) : r[1] > 59 ? t(r[1], r[2], 0, r[4]) : t(0, r[1], r[2], r[4]) : null } function n() { this.values = Object.create(null) } function s(e, t, r, a) { var i = a ? e.split(a) : [e]; for (var n in i) if ("string" == typeof i[n]) { var s = i[n].split(r); 2 === s.length && t(s[0], s[1]) } } function o(e, t, r) { function a() { var t = i(e); if (null === t) throw new Error("Malformed timestamp: " + l); return e = e.replace(/^[^\sa-zA-Z-]+/, ""), t } function o() { e = e.replace(/^\s+/, "") } var l = e; if (o(), t.startTime = a(), o(), "--\x3e" !== e.substr(0, 3)) throw new Error("Malformed time stamp (time stamps must be separated by '--\x3e'): " + l); e = e.substr(3), o(), t.endTime = a(), o(), function(e, t) { var a = new n; s(e, function(e, t) { switch (e) { case "region": for (var i = r.length - 1; i >= 0; i--) if (r[i].id === t) { a.set(e, r[i].region); break } break; case "vertical": a.alt(e, t, ["rl", "lr"]); break; case "line": var n = t.split(","), s = n[0]; a.integer(e, s), a.percent(e, s) && a.set("snapToLines", !1), a.alt(e, s, ["auto"]), 2 === n.length && a.alt("lineAlign", n[1], ["start", c, "end"]); break; case "position": n = t.split(","), a.percent(e, n[0]), 2 === n.length && a.alt("positionAlign", n[1], ["start", c, "end", "line-left", "line-right", "auto"]); break; case "size": a.percent(e, t); break; case "align": a.alt(e, t, ["start", c, "end", "left", "right"]) } }, /:/, /\s/), t.region = a.get("region", null), t.vertical = a.get("vertical", ""); var i = a.get("line", "auto"); "auto" === i && -1 === f.line && (i = -1), t.line = i, t.lineAlign = a.get("lineAlign", "start"), t.snapToLines = a.get("snapToLines", !0), t.size = a.get("size", 100), t.align = a.get("align", c); var o = a.get("position", "auto"); "auto" === o && 50 === f.position && (o = "start" === t.align || "left" === t.align ? 0 : "end" === t.align || "right" === t.align ? 100 : 50), t.position = o }(e, t) } function l(e) { return e.replace(/<br(?: \/)?>/gi, "\n") } Object.defineProperty(r, "__esModule", { value: !0 }), r.fixLineBreaks = void 0; var u = function(e) { return e && e.__esModule ? e : { default: e } }(e(56)), d = function() { return { decode: function(e) { if (!e) return ""; if ("string" != typeof e) throw new Error("Error - expected string data."); return decodeURIComponent(encodeURIComponent(e)) } } }; n.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 a = 0; a < r.length; ++a) if (t === r[a]) { 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]*)?%$/) && (t = parseFloat(t)) >= 0 && t <= 100) && (this.set(e, t), !0) } }; var f = new u.default(0, 0, 0), c = "middle" === f.align ? "middle" : "center"; a.prototype = { parse: function(e) { function t() { var e = r.buffer, t = 0; for (e = l(e); t < e.length && "\r" !== e[t] && "\n" !== e[t];) ++t; var a = e.substr(0, t); return "\r" === e[t] && ++t, "\n" === e[t] && ++t, r.buffer = e.substr(t), a } var r = this; e && (r.buffer += r.decoder.decode(e, { stream: !0 })); try { var a; if ("INITIAL" === r.state) { if (!/\r\n|\n/.test(r.buffer)) return this; var i = (a = t()).match(/^WEBVTT([ \t].*)?$/); if (!i || !i[0]) throw new Error("Malformed WebVTT signature."); r.state = "HEADER" } for (var n = !1; r.buffer;) { if (!/\r\n|\n/.test(r.buffer)) return this; switch (n ? n = !1 : a = t(), r.state) { case "HEADER": /:/.test(a) ? s(a, function(e, t) {}, /:/) : a || (r.state = "ID"); continue; case "NOTE": a || (r.state = "ID"); continue; case "ID": if (/^NOTE($|[ \t])/.test(a)) { r.state = "NOTE"; break } if (!a) continue; if (r.cue = new u.default(0, 0, ""), r.state = "CUE", -1 === a.indexOf("--\x3e")) { r.cue.id = a; continue } case "CUE": try { o(a, r.cue, r.regionList) } catch (e) { r.cue = null, r.state = "BADCUE"; continue } r.state = "CUETEXT"; continue; case "CUETEXT": var d = -1 !== a.indexOf("--\x3e"); if (!a || d && (n = !0)) { r.oncue && r.oncue(r.cue), r.cue = null, r.state = "ID"; continue } r.cue.text && (r.cue.text += "\n"), r.cue.text += a; continue; case "BADCUE": a || (r.state = "ID"); continue } } } catch (e) { "CUETEXT" === r.state && r.cue && r.oncue && r.oncue(r.cue), r.cue = null, r.state = "INITIAL" === r.state ? "BADWEBVTT" : "BADCUE" } return this }, flush: function() { var e = this; try { if (e.buffer += e.decoder.decode(), (e.cue || "HEADER" === e.state) && (e.buffer += "\n\n", e.parse()), "INITIAL" === e.state) throw new Error("Malformed WebVTT signature.") } catch (e) { throw e } return e.onflush && e.onflush(), this } }, r.fixLineBreaks = l, r.default = a }, { 56: 56 }], 58: [function(e, t, r) { "use strict"; var a = function(e) { return e && e.__esModule ? e : { default: e } }(e(57)), i = function(e, t, r) { return e.substr(r || 0, t.length) === t }, n = function(e) { var t = parseInt(e.substr(-3)), r = parseInt(e.substr(-6, 2)), a = parseInt(e.substr(-9, 2)), i = e.length > 9 ? parseInt(e.substr(0, e.indexOf(":"))) : 0; return isNaN(t) || isNaN(r) || isNaN(a) || isNaN(i) ? -1 : (t += 1e3 * r, t += 6e4 * a, t += 36e5 * i) }, s = function(e) { for (var t = 5381, r = e.length; r;) t = 33 * t ^ e.charCodeAt(--r); return (t >>> 0).toString() }, o = function(e, t, r) { var a = e[t], i = e[a.prevCC]; if (!i || !i.new && a.new) return e.ccOffset = e.presentationOffset = a.start, void(a.new = !1); for (; i && i.new;) e.ccOffset += a.start - i.start, a.new = !1, i = e[(a = i).prevCC]; e.presentationOffset = r }, l = { parse: function(e, t, r, l, u, d) { var f = /\r\n|\n\r|\n|\r/g, c = String.fromCharCode.apply(null, new Uint8Array(e)).trim().replace(f, "\n").split("\n"), h = "00:00.000", g = 0, v = 0, p = 0, y = [], m = void 0, E = !0, b = new a.default; b.oncue = function(e) { var t = r[l], a = r.ccOffset; t && t.new && (void 0 !== v ? a = r.ccOffset = t.start : o(r, l, p)), p && (a = p + r.ccOffset - r.presentationOffset), e.startTime += a - v, e.endTime += a - v, e.id = s(e.startTime) + s(e.endTime) + s(e.text), e.text = decodeURIComponent(escape(e.text)), e.endTime > 0 && y.push(e) }, b.onparsingerror = function(e) { m = e }, b.onflush = function() { m && d ? d(m) : u(y) }, c.forEach(function(e) { if (E) { if (i(e, "X-TIMESTAMP-MAP=")) { E = !1, e.substr(16).split(",").forEach(function(e) { i(e, "LOCAL:") ? h = e.substr(6) : i(e, "MPEGTS:") && (g = parseInt(e.substr(7))) }); try { g -= t = t < 0 ? t + 8589934592 : t, v = n(h) / 1e3, p = g / 9e4, -1 === v && (m = new Error("Malformed X-TIMESTAMP-MAP: " + e)) } catch (t) { m = new Error("Malformed X-TIMESTAMP-MAP: " + e) } return } "" === e && (E = !1) } b.parse(e + "\n") }), b.flush() } }; t.exports = l }, { 57: 57 }], 59: [function(e, t, r) { "use strict"; function a(e, t) { if (!(e instanceof t)) throw new TypeError("Cannot call a class as a function") } Object.defineProperty(r, "__esModule", { value: !0 }); var i = function() { function e(e, t) { for (var r = 0; r < t.length; r++) { var a = t[r]; a.enumerable = a.enumerable || !1, a.configurable = !0, "value" in a && (a.writable = !0), Object.defineProperty(e, a.key, a) } } return function(t, r, a) { return r && e(t.prototype, r), a && e(t, a), t } }(), n = e(54), s = function() { function e(t) { a(this, e), t && t.xhrSetup && (this.xhrSetup = t.xhrSetup) } return i(e, [{ key: "destroy", value: function() { this.abort(), this.loader = null } }, { key: "abort", value: 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 } }, { key: "load", value: function(e, t, r) { this.context = e, this.config = t, this.callbacks = r, this.stats = { trequest: performance.now(), retry: 0 }, this.retryDelay = t.retryDelay, this.loadInternal() } }, { key: "loadInternal", value: function() { var e, t = this.context; e = "undefined" != typeof XDomainRequest ? this.loader = new XDomainRequest : this.loader = new XMLHttpRequest; var r = this.stats; r.tfirst = 0, r.loaded = 0; var a = this.xhrSetup; try { if (a) try { a(e, t.url) } catch (r) { e.open("GET", t.url, !0), a(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() } }, { key: "readystatechange", value: function(e) { var t = e.currentTarget, r = t.readyState, a = this.stats, i = this.context, s = this.config; if (!a.aborted && r >= 2) if (window.clearTimeout(this.requestTimeout), 0 === a.tfirst && (a.tfirst = Math.max(performance.now(), a.trequest)), 4 === r) { var o = t.status; if (o >= 200 && o < 300) { a.tload = Math.max(a.tfirst, performance.now()); var l = void 0, u = void 0; u = "arraybuffer" === i.responseType ? (l = t.response).byteLength : (l = t.responseText).length, a.loaded = a.total = u; var d = { url: t.responseURL, data: l }; this.callbacks.onSuccess(d, a, i, t) } else a.retry >= s.maxRetry || o >= 400 && o < 499 ? (n.logger.error(o + " while loading " + i.url), this.callbacks.onError({ code: o, text: t.statusText }, i, t)) : (n.logger.warn(o + " while loading " + i.url + ", retrying in " + this.retryDelay + "..."), this.destroy(), this.retryTimeout = window.setTimeout(this.loadInternal.bind(this), this.retryDelay), this.retryDelay = Math.min(2 * this.retryDelay, s.maxRetryDelay), a.retry++) } else this.requestTimeout = window.setTimeout(this.loadtimeout.bind(this), s.timeout) } }, { key: "loadtimeout", value: function() { n.logger.warn("timeout while loading " + this.context.url), this.callbacks.onTimeout(this.stats, this.context, null) } }, { key: "loadprogress", value: function(e) { var t = e.currentTarget, r = this.stats; r.loaded = e.loaded, e.lengthComputable && (r.total = e.total); var a = this.callbacks.onProgress; a && a(r, this.context, null, t) } }]), e }(); r.default = s }, { 54: 54 }] }, {}, [40])(40) });
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址