diff --git a/CMakeLists.txt b/CMakeLists.txt index 728c8972..8ca0eb25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -370,22 +370,19 @@ add_executable(MistOutHTTP src/output/output_http.cpp src/output/output_http_internal.cpp src/io.cpp - generated/silverlight.js.h - generated/embed.js.h + generated/player.js.h generated/html5.js.h generated/flash_strobe.js.h - generated/theoplayer.js.h - generated/jwplayer.js.h - generated/polytrope.js.h generated/dashjs.js.h generated/videojs.js.h - generated/img.js.h - generated/playerdash.js.h - generated/playerdashlic.js.h - generated/playervideo.js.h - generated/playerhlsvideo.js.h - generated/core.js.h - generated/mist.css.h + generated/webrtc.js.h + generated/player_dash.js.h + generated/player_dash_lic.js.h + generated/player_video.js.h + generated/player_webrtc.js.h + generated/skin_default.css.h + generated/skin_dev.css.h + generated/skin_videojs.css.h ) set_target_properties(MistOutHTTP PROPERTIES COMPILE_DEFINITIONS "OUTPUTTYPE=\"output_http_internal.h\"" @@ -445,69 +442,61 @@ endif() ######################################## # Embed Code # ######################################## -add_custom_command(OUTPUT generated/silverlight.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/wrappers/silverlight.js silverlight_js generated/silverlight.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/wrappers/silverlight.js -) -add_custom_command(OUTPUT generated/embed.js.h - COMMAND ./sourcery ${SOURCE_DIR}/src/embed.js embed_js generated/embed.js.h - DEPENDS sourcery ${SOURCE_DIR}/src/embed.js +# main +add_custom_command(OUTPUT generated/player.js.h + COMMAND ./sourcery ${SOURCE_DIR}/embed/min/player.js player_js generated/player.js.h + DEPENDS sourcery ${SOURCE_DIR}/embed/min/player.js ) +# wrappers add_custom_command(OUTPUT generated/html5.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/wrappers/html5.js html5_js generated/html5.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/wrappers/html5.js + COMMAND ./sourcery ${SOURCE_DIR}/embed/min/wrappers/html5.js html5_js generated/html5.js.h + DEPENDS sourcery ${SOURCE_DIR}/embed/min/wrappers/html5.js ) add_custom_command(OUTPUT generated/flash_strobe.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/wrappers/flash_strobe.js flash_strobe_js generated/flash_strobe.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/wrappers/flash_strobe.js -) -add_custom_command(OUTPUT generated/theoplayer.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/wrappers/theoplayer.js theoplayer_js generated/theoplayer.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/wrappers/theoplayer.js -) -add_custom_command(OUTPUT generated/jwplayer.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/wrappers/jwplayer.js jwplayer_js generated/jwplayer.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/wrappers/jwplayer.js -) -add_custom_command(OUTPUT generated/polytrope.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/wrappers/polytrope.js polytrope_js generated/polytrope.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/wrappers/polytrope.js + COMMAND ./sourcery ${SOURCE_DIR}/embed/min/wrappers/flash_strobe.js flash_strobe_js generated/flash_strobe.js.h + DEPENDS sourcery ${SOURCE_DIR}/embed/min/wrappers/flash_strobe.js ) add_custom_command(OUTPUT generated/dashjs.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/wrappers/dashjs.js dash_js generated/dashjs.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/wrappers/dashjs.js + COMMAND ./sourcery ${SOURCE_DIR}/embed/min/wrappers/dashjs.js dash_js generated/dashjs.js.h + DEPENDS sourcery ${SOURCE_DIR}/embed/min/wrappers/dashjs.js ) add_custom_command(OUTPUT generated/videojs.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/wrappers/videojs.js video_js generated/videojs.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/wrappers/videojs.js + COMMAND ./sourcery ${SOURCE_DIR}/embed/min/wrappers/videojs.js video_js generated/videojs.js.h + DEPENDS sourcery ${SOURCE_DIR}/embed/min/wrappers/videojs.js ) -add_custom_command(OUTPUT generated/img.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/wrappers/img.js img_js generated/img.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/wrappers/img.js +add_custom_command(OUTPUT generated/webrtc.js.h + COMMAND ./sourcery ${SOURCE_DIR}/embed/min/wrappers/webrtc.js webrtc_js generated/webrtc.js.h + DEPENDS sourcery ${SOURCE_DIR}/embed/min/wrappers/webrtc.js ) -add_custom_command(OUTPUT generated/playerdashlic.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/players/dash.js.license.js playerdashlic_js generated/playerdashlic.js.h +# players +add_custom_command(OUTPUT generated/player_dash_lic.js.h + COMMAND ./sourcery ${SOURCE_DIR}/embed/players/dash.js.license.js player_dash_lic_js generated/player_dash_lic.js.h DEPENDS sourcery ${SOURCE_DIR}/embed/players/dash.js.license.js ) -add_custom_command(OUTPUT generated/playerdash.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/players/dash.all.min.js playerdash_js generated/playerdash.js.h +add_custom_command(OUTPUT generated/player_dash.js.h + COMMAND ./sourcery ${SOURCE_DIR}/embed/players/dash.all.min.js player_dash_js generated/player_dash.js.h DEPENDS sourcery ${SOURCE_DIR}/embed/players/dash.all.min.js ) -add_custom_command(OUTPUT generated/playervideo.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/players/video.min.js playervideo_js generated/playervideo.js.h +add_custom_command(OUTPUT generated/player_video.js.h + COMMAND ./sourcery ${SOURCE_DIR}/embed/players/video.min.js player_video_js generated/player_video.js.h DEPENDS sourcery ${SOURCE_DIR}/embed/players/video.min.js ) -add_custom_command(OUTPUT generated/playerhlsvideo.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/players/videojs-contrib-hls.min.js playerhlsvideo_js generated/playerhlsvideo.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/players/videojs-contrib-hls.min.js +add_custom_command(OUTPUT generated/player_webrtc.js.h + COMMAND ./sourcery ${SOURCE_DIR}/embed/players/webrtc.js player_webrtc_js generated/player_webrtc.js.h + DEPENDS sourcery ${SOURCE_DIR}/embed/players/webrtc.js ) -add_custom_command(OUTPUT generated/core.js.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/core.js core_js generated/core.js.h - DEPENDS sourcery ${SOURCE_DIR}/embed/core.js +# css +add_custom_command(OUTPUT generated/skin_default.css.h + COMMAND ./sourcery ${SOURCE_DIR}/embed/min/skins/default.css skin_default_css generated/skin_default.css.h + DEPENDS sourcery ${SOURCE_DIR}/embed/min/skins/default.css ) -add_custom_command(OUTPUT generated/mist.css.h - COMMAND ./sourcery ${SOURCE_DIR}/embed/mist.css mist_css generated/mist.css.h - DEPENDS sourcery ${SOURCE_DIR}/embed/mist.css +add_custom_command(OUTPUT generated/skin_dev.css.h + COMMAND ./sourcery ${SOURCE_DIR}/embed/min/skins/dev.css skin_dev_css generated/skin_dev.css.h + DEPENDS sourcery ${SOURCE_DIR}/embed/min/skins/dev.css +) +add_custom_command(OUTPUT generated/skin_videojs.css.h + COMMAND ./sourcery ${SOURCE_DIR}/embed/skins/video-js.css skin_videojs_css generated/skin_videojs.css.h + DEPENDS sourcery ${SOURCE_DIR}/embed/skins/video-js.css ) ######################################## diff --git a/embed/controls.js b/embed/controls.js new file mode 100644 index 00000000..cec629de --- /dev/null +++ b/embed/controls.js @@ -0,0 +1,122 @@ +function MistUI(MistVideo,structure) { + MistVideo.UI = this; + this.elements = []; + + this.buildStructure = function(structure){ + if (typeof structure == "function") { structure = structure.call(MistVideo); } + + if ("if" in structure) { + var result = false; + if (structure.if.call(MistVideo,structure)) { + result = structure.then; + } + else if ("else" in structure) { + result = structure.else; + } + + if (!result) { return; } + + //append the result with structure options + for (var i in structure) { + if (["if","then","else"].indexOf(i) < 0) { + if (i in result) { + if (!(result[i] instanceof Array)) { + result[i] = [result[i]]; + } + result[i] = result[i].concat(structure[i]); + } + else { + result[i] = structure[i]; + } + } + } + return this.buildStructure(result); + } + + if ("type" in structure) { + if (structure.type in MistVideo.skin.blueprints) { + + //create the element; making sure to pass "this" to blueprint function + var container = MistVideo.skin.blueprints[structure.type].call(MistVideo,structure); + if (!container) { return; } + MistUtil.class.add(container,"mistvideo-"+structure.type); + + if ("css" in structure) { + var uid = MistUtil.createUnique(); + structure.css = [].concat(structure.css); //convert to array; should be in string format with colors already applied + + for (var i in structure.css) { + var style = MistUtil.css.createStyle(structure.css[i],uid); + container.appendChild(style); + } + MistUtil.class.add(container,uid); + container.uid = uid; + } + + if ("classes" in structure) { + for (var i in structure.classes) { + MistUtil.class.add(container,structure.classes[i]); + } + } + + if ("title" in structure) { + container.title = structure.title; + } + + if ("style" in structure) { + for (var i in structure.style) { + container.style[i] = structure.style[i]; + } + } + + if ("children" in structure) { + for (var i in structure.children) { + var child = this.buildStructure(structure.children[i]); + if (child) { + container.appendChild(child); + } + } + } + //save the returned element so they can be killed on unload + MistVideo.UI.elements.push(container); + return container; + } + } + + return false; + }; + this.build = function(){ + return this.buildStructure(structure ? structure : MistVideo.skin.structure.main); + }; + + var container = this.build(); + + //apply skin CSS + var uid = MistUtil.createUnique(); + var toload = MistVideo.skin.css.length; + if (toload) { container.style.opacity = "0"; } + for (var i in MistVideo.skin.css) { + var style = MistVideo.skin.css[i]; + style.callback = function(css) { + this.textContent = MistUtil.css.prependClass(css,uid,true); + toload--; + if (toload <= 0) { + container.style.opacity = ""; + } + }; + if (style.textContent != "") { + //it has already loaded + style.callback(style.textContent); + } + container.appendChild(style); + } + MistUtil.class.add(container,uid); + + //add browser class + var browser = MistUtil.getBrowser(); + if (browser) { + MistUtil.class.add(container,"browser-"+browser); + } + + return container; +} diff --git a/embed/core.js b/embed/core.js deleted file mode 100644 index 4aae50e0..00000000 --- a/embed/core.js +++ /dev/null @@ -1,1501 +0,0 @@ -///////////////////////////////////// -// DECLARE MISTPLAYER BASE CLASS // -///////////////////////////////////// - -var mistplayers = {}; -var mistplayer_session_id = Math.round(Math.random()*1e12); - -function MistPlayer() {}; -MistPlayer.prototype.sendEvent = function(type,message,target) { - try { - var event = new Event(type,{ - bubbles: true, - cancelable: true - }); - event.message = message; - target.dispatchEvent(event); - } - catch (e) { - try { - var event = document.createEvent('Event'); - event.initEvent(type,true,true); - event.message = message; - target.dispatchEvent(event); - } - catch (e) { return false; } - } - return true; -} -MistPlayer.prototype.addlog = function(msg) { - this.sendEvent('log',msg,(this.element ? this.element: this.target)); -} -MistPlayer.prototype.adderror = function(msg) { - this.sendEvent('error',msg,(this.element ? this.element: this.target)); -} -MistPlayer.prototype.build = function (options,callback) { - this.addlog('Error in player implementation'); - var err = document.createElement('div'); - var msgnode = document.createTextNode(msg); - err.appendChild(msgnode); - err.className = 'error'; - return err; -} -MistPlayer.prototype.timer = { - timers: {}, - add: function(callback,delay,isInterval){ - var me = this; - var i = setTimeout(function(){ - delete me.timers[i]; - callback(); - },delay); - this.timers[i] = { - delay: delay, - callback: callback, - interval: isInterval || false - }; - return i; - }, - remove: function(i){ - if (i in this.timers) { - if (this.timers[i].interval) { - clearInterval(i); - } - else { - clearTimeout(i); - } - delete this.timers[i]; - } - }, - clear: function(){ - for (var i in this.timers) { - this.remove(i); - } - this.timers = {}; - } -}; - -//creates the player element, including custom functions -MistPlayer.prototype.getElement = function(tag){ - var ele = document.createElement(tag); - ele.className = 'mistplayer'; - this.element = ele; - return ele; -}; -MistPlayer.prototype.onready = function(dothis){ - this.onreadylist.push(dothis); -}; -MistPlayer.prototype.play = false; -MistPlayer.prototype.pause = false; -MistPlayer.prototype.paused = false; -MistPlayer.prototype.volume = false; -MistPlayer.prototype.loop = false; -MistPlayer.prototype.fullscreen = false; -MistPlayer.prototype.setTracks = function(usetracks){ - if (usetracks == false) { - if (!('updateSrc' in this)) { return false; } - return true; - } - - function urlAddParam(url,params) { - var spliturl = url.split('?'); - var ret = [spliturl.shift()]; - var splitparams = []; - if (spliturl.length) { - splitparams = spliturl[0].split('&'); - } - for (var i in params) { - splitparams.push(i+'='+params[i]); - } - if (splitparams.length) { ret.push(splitparams.join('&')); } - return ret.join('?'); - } - - if ('subtitle' in usetracks) { - //remove previous subtitles - var ts = this.element.getElementsByTagName('track'); - for (var i = ts.length - 1; i >= 0; i--) { - this.element.removeChild(ts[i]); - } - var tracks = this.tracks.subtitle; - for (var i in tracks) { - if (tracks[i].trackid == usetracks.subtitle) { - var t = document.createElement('track'); - this.element.appendChild(t); - t.kind = 'subtitles'; - t.label = tracks[i].desc; - t.srclang = tracks[i].lang; - t.src = this.subtitle+'?track='+tracks[i].trackid; - t.setAttribute('default',''); - break; - } - } - delete usetracks.subtitle; - if (Object.keys(usetracks).length == 0) { return true; } - } - - var time = this.element.currentTime; - var newurl; - if (this.options.source.type == 'html5/application/vnd.apple.mpegurl') { //for HLS, use a different format for track selection - newurl = this.options.src.split('/'); - var m3u8 = newurl.pop(); //take this off now, it will be added back later - var hlstracks = []; - for (var i in usetracks) { - //for audio or video tracks, just add the tracknumber between slashes - switch (i) { - case 'audio': - case 'video': - if (usetracks[i] == 0) { continue; } - hlstracks.push(usetracks[i]); - break; - } - } - if (hlstracks.length) { newurl.push(hlstracks.join('_')); } - newurl.push(m3u8); //put back index.m3u8 - newurl = newurl.join('/'); - } - else { - newurl = urlAddParam(this.options.src,usetracks); - } - this.updateSrc(newurl); - if (this.element.readyState) { - this.element.load(); - } - - - if (this.element.currentTime != time) { - try { - this.element.currentTime = time; - } - catch (e) { - var f = function(){ - this.currentTime = time; - this.removeEventListener("loadeddata",f); - }; - this.element.addEventListener("loadeddata",f); - } - } - - if ('trackselects' in this) { - for (var i in usetracks) { - if (i in this.trackselects) { this.trackselects[i].value = usetracks[i]; } - } - } - - return true; -}; -MistPlayer.prototype.resize = false; -MistPlayer.prototype.buildMistControls = function(){ - if (!('flex' in document.head.style) || (['iPad','iPod','iPhone'].indexOf(navigator.platform) != -1)) { - //this browser does not support MistControls - this.addlog('Mist controls are not supported'); - return false; - } - this.addlog('Building Mist controls..'); - - var ele = this.element; - var options = this.options; - var me = this; //to allow nested functions to access the player class itself - - function formatTime(secs) { - var hours = Math.floor(secs / 3600); - secs = secs - hours * 3600; - var mins = Math.floor(secs / 60); - secs = Math.floor(secs - mins * 60); - var str = []; - if (hours) { - str.push(hours); - } - str.push(('0'+mins).slice(-2)); - str.push(('0'+secs).slice(-2)); - return str.join(':'); - } - var timestampValue, bar; - function whilePlaying() { - timestampValue.nodeValue = formatTime(ele.currentTime); - bar.style.width = ((ele.currentTime-ele.startTime)/ele.duration*100)+'%'; - me.timer.add(function(){ - if (!ele.paused) { - whilePlaying(); - } - },0.5e3); - }; - function whileLivePlaying(track) { - - //var playtime = (new Date()) - options.initTime; - var playtime = ele.currentTime*1e3; - timestampValue.nodeValue = formatTime((playtime + track.lastms)/1e3); - - - me.timer.add(function(){ - if (!ele.paused) { - whileLivePlaying(track); - } - },0.5e3); - }; - - - var controls = document.createElement('div'); - ele.parentNode.appendChild(controls); - controls.className = 'controls'; - controls.onclick = function(e){ e.stopPropagation(); }; - - //if the video is very small, zoom the controls - var zoom = options.width/480; - if (zoom < 1) { - zoom = Math.max(zoom,0.5); - if ('zoom' in controls.style) { controls.style.zoom = zoom; } - else { - controls.className += ' smaller'; //if css doesn't support zoom, apply smaller class to use smaller controls - } - } - else { zoom = 1; } - ele.style['min-width'] = zoom*400+'px'; - ele.style['min-height'] = zoom*160+'px'; - - var play = document.createElement('div'); - controls.appendChild(play); - play.className = 'button play'; - play.title = 'Play / Pause'; - play.setAttribute('data-state','paused'); - play.onclick = function(){ - if (ele.paused) { - if (options.live) { - me.load(); - } - else { - me.play(); - } - } - else { - me.pause(); - } - }; - - var progressCont = document.createElement('div'); - controls.appendChild(progressCont); - progressCont.className = 'progress_container'; - ele.startTime = 0; - if (!options.live) { - var progress = document.createElement('div'); - progressCont.appendChild(progress); - progress.className = 'button progress'; - progress.getPos = function(e){ - if (!isFinite(ele.duration)) { return 0; } - var style = progress.currentStyle || window.getComputedStyle(progress, null); - var zoom = Number(!('zoom' in controls.style) || controls.style.zoom == '' ? 1 : controls.style.zoom); - - var pos0 = progress.getBoundingClientRect().left - parseInt(style.borderLeftWidth,10); - var perc = (e.clientX - pos0 * zoom) / progress.offsetWidth / zoom; - var secs = Math.max(0,perc) * ele.duration; - return secs; - } - progress.onmousemove = function(e) { - if (ele.duration) { - var pos = this.getPos(e); - hintValue.nodeValue = formatTime(pos); - hint.style.display = 'block'; - hint.style.left = (pos / ele.duration)*100+'%'; - } - }; - progress.onmouseout = function() { - hint.style.display = 'none'; - }; - progress.onmouseup = function(e) { - ele.currentTime = this.getPos(e); - ele.startTime = ele.currentTime; - bar.style.left = (ele.startTime/ele.duration*100)+'%'; - }; - progress.ondragstart = function() { return false; }; - bar = document.createElement('div'); - progress.appendChild(bar); - bar.className = 'bar'; - var buffers = []; - var hint = document.createElement('div'); - progressCont.appendChild(hint); - hint.className = 'hint'; - var hintValue = document.createTextNode('-:--'); - hint.appendChild(hintValue); - - ele.addEventListener('seeking',function(){ - me.target.setAttribute('data-loading',''); - }); - ele.addEventListener('seeked',function(){ - me.target.removeAttribute('data-loading'); - bar.style.left = (ele.currentTime/ele.duration*100)+'%'; - //TODO reset lasttime - }); - ele.addEventListener('canplay',function(){ - me.target.removeAttribute('data-loading'); - }); - ele.addEventListener('playing',function(){ - me.target.removeAttribute('data-loading'); - }); - ele.addEventListener('progress',function(){ - me.target.removeAttribute('data-loading'); - }); - } - - var timestamp = document.createElement('div'); - controls.appendChild(timestamp); - timestamp.className = 'button timestamp'; - timestampValue = document.createTextNode('-:--'); - timestamp.title = 'Time'; - timestamp.appendChild(timestampValue); - - var sound = document.createElement('div'); - controls.appendChild(sound); - sound.className = 'button sound'; - var volume = document.createElement('div'); - sound.appendChild(volume); - sound.getPos = function(ypos){ - var style = this.currentStyle || window.getComputedStyle(this, null); - - var zoom = Number(!('zoom' in controls.style) || controls.style.zoom == '' ? 1 : controls.style.zoom); - - var pos0 = sound.getBoundingClientRect().top - parseInt(style.borderTopWidth,10); - var perc = (ypos - pos0 * zoom) / sound.offsetHeight / zoom; - - perc = 1 - Math.min(1,Math.max(0,perc)); //linear range between 0 and 1 - perc = 1 - Math.pow((1-perc),1/2); //transform to quadratic range between 0 and 1 - - return perc; - } - volume.className = 'volume'; - sound.title = 'Volume'; - if (('localStorage' in window) && (localStorage != null) && ('mistVolume' in localStorage)) { - ele.volume = localStorage['mistVolume']; - volume.style.height = ele.volume*100+'%'; - } - var mousedown = function(e){ - var mousemove = function(e){ - ele.volume = sound.getPos(e.clientY); - }; - var mouseup = function(e){ - document.removeEventListener('mousemove',mousemove); - controls.removeEventListener('mousemove',mousemove); - document.removeEventListener('touchmove',mousemove); - document.removeEventListener('mouseup',mouseup); - document.removeEventListener('touchend',mouseup); - try { - localStorage['mistVolume'] = ele.volume; - } - catch (e) {} - }; - document.addEventListener('mousemove',mousemove); - controls.addEventListener('mousemove',mousemove); //this one is added because the controls hiding mechanism stops propagation to the document - document.addEventListener('touchmove',mousemove); - document.addEventListener('mouseup',mouseup); - document.addEventListener('touchend',mouseup); - ele.volume = sound.getPos(e.clientY); - }; - sound.onmousedown = mousedown; - sound.ontouchstart = mousedown; - sound.ondragstart = function() { return false; }; - sound.onclick = function(e){ - ele.volume = sound.getPos(e.clientY); - try { - localStorage['mistVolume'] = ele.volume; - } - catch (e) {} - }; - var speaker = document.createElement('div'); - speaker.title = 'Mute / Unmute'; - sound.appendChild(speaker); - speaker.className = 'button speaker'; - speaker.onclick = function(e) { - if (ele.volume) { - lastvolume = ele.volume; - ele.volume = 0; - } - else { - ele.volume = lastvolume; - } - e.stopPropagation(); - }; - speaker.onmousedown = function(e){ - e.stopPropagation(); - }; - - var buttons = document.createElement('div'); - buttons.className = 'column'; - controls.appendChild(buttons); - - if ( - (this.setTracks(false)) - && (this.tracks.video.length + this.tracks.audio.length + this.tracks.subtitle.length > 1) - && (this.options.source.type != 'html5/video/ogg') - ) { - - /* - - the player supports setting tracks; - - there is something to choose - - it's not OGG, which doesn't have track selection yet - */ - - //prepare the html stuff - var tracks = this.tracks; - var tracksc = document.createElement('div'); - tracksc.innerHTML = 'Tracks'; - tracksc.className = 'button tracks'; - buttons.appendChild(tracksc); - - var settings = document.createElement('div'); - tracksc.appendChild(settings); - settings.className = 'settings'; - - me.trackselects = {}; - for (var i in tracks) { //for each track type (video, audio, subtitle..) - if (tracks[i].length) { - var l = document.createElement('label'); - settings.appendChild(l); - var p = document.createElement('span'); - l.appendChild(p); - var t = document.createTextNode(i+':'); - p.appendChild(t); - var s = document.createElement('select'); - l.appendChild(s); - me.trackselects[i] = s; - s.setAttribute('data-type',i); - for (var j in tracks[i]) { //for each track - var o = document.createElement('option'); - s.appendChild(o); - o.value = tracks[i][j].trackid; - - //make up something logical for the track name - var name; - if ('name' in tracks[i][j]) { - name = tracks[i][j].name; - } - else if ('desc' in tracks[i][j]) { - name = tracks[i][j].desc; - } - else if ('lang' in tracks[i][j]) { - name = tracks[i][j].lang; - o.setAttribute('data-lang',tracks[i][j].lang); - } - else { - name = 'Track '+(Number(j)+1); - } - o.appendChild(document.createTextNode(name)); - } - var o = document.createElement('option'); - s.appendChild(o); - o.value = 0; - var t = document.createTextNode('No '+i); - o.appendChild(t); - s.onchange = function(){ - var usetracks = {}; - if (this.getAttribute('data-type') == 'subtitle') { - usetracks.subtitle = this.value; - try { - localStorage['mistSubtitle'] = this.querySelector('[value="'+this.value+'"]').getAttribute('data-lang'); - } - catch (e) {} - } - else { - for (var i in me.trackselects) { - usetracks[me.trackselects[i].getAttribute('data-type')] = me.trackselects[i].value - } - if (this.value == 0) { - //if we are disabling a video or audio track, dont allow us to disable another video or audio track because there will be no data - var optiontags = this.parentNode.parentNode.querySelectorAll('select:not([data-type="subtitle"]) option[value="0"]'); - for (var i = 0; i < optiontags.length; i++) { - optiontags[i].setAttribute('disabled',''); - } - } - else { - //put back the disabled track options - var optiontags = this.parentNode.parentNode.querySelectorAll('option[value="0"][disabled]'); - for (var i = 0; i < optiontags.length; i++) { - optiontags[i].removeAttribute('disabled'); - } - } - } - me.setTracks(usetracks); - - } - if (i == 'subtitle') { - s.value = 0; - if (('localStorage' in window) && (localStorage != null) && ('mistSubtitle' in localStorage)) { - var option = s.querySelector('[data-lang="'+localStorage['mistSubtitle']+'"]'); - if (option) { - s.value = option.value; - s.onchange(); - } - } - } - } - } - - var l = document - } - - var buttons2 = document.createElement('div'); - buttons2.className = 'row'; - buttons.appendChild(buttons2); - - if ((me.loop) && (!options.live)) { - var loop = document.createElement('div'); - buttons2.appendChild(loop); - loop.className = 'button loop'; - loop.title = 'Loop'; - if (me.loop()) { loop.setAttribute('data-on',''); } - loop.onclick = function(){ - if (me.loop()) { - this.removeAttribute('data-on'); - me.loop(false); - } - else { - this.setAttribute('data-on',''); - me.loop(true); - if ((me.element.paused) && (me.element.currentTime == me.element.duration)) { - me.play(); - } - } - }; - } - if (me.fullscreen) { - var fullscreen = document.createElement('div'); - buttons2.appendChild(fullscreen); - fullscreen.className = 'button fullscreen'; - fullscreen.title = 'Fullscreen' - fullscreen.onclick = function(){ - me.fullscreen(); - }; - } - - ele.addEventListener('play',function(){ - play.setAttribute('data-state','playing'); - }); - ele.addEventListener('pause',function(){ - play.setAttribute('data-state','paused'); - }); - ele.addEventListener('ended',function(){ - play.setAttribute('data-state','paused'); - if (options.live) { - me.load(); - } - }); - ele.addEventListener('volumechange',function(){ - var vol = 1 - Math.pow(1-ele.volume,2); //transform back from quadratic - volume.style.height = vol*100+'%'; - if (ele.volume == 0) { - speaker.setAttribute('data-muted',''); - } - else { - speaker.removeAttribute('data-muted',''); - } - }); - if (options.live) { - ele.addEventListener('playing',function(){ - var track = { - firstms: 0, - lastms: 0 - }; - for (var i in options.meta.tracks) { - track = options.meta.tracks[i]; - break; - } - whileLivePlaying(track); - }); - } - else { - ele.addEventListener('playing',function(){ - whilePlaying(); - }); - ele.addEventListener('durationchange',function(){ - timestampValue.nodeValue = formatTime(ele.duration); - }); - ele.addEventListener('progress',function(){ - for (var i in buffers) { - progress.removeChild(buffers[i]); - } - buffers = []; - - var start,end; - for (var i = 0; i < ele.buffered.length; i++) { - var b = document.createElement('div'); - b.className = 'buffer'; - progress.appendChild(b); - buffers.push(b); - start = ele.buffered.start(i); - end = ele.buffered.end(i); - b.setAttribute('style','left:'+(start/ele.duration*100)+'%; width:'+((end-start)/ele.duration*100 )+'%'); - } - }); - } - - //hide the cursor and controls if it is over the video (not the controls) and hasn't moved for 5 secs - var position = { - x: 0, - y: 0, - lastpos: { x: 0, y: 0 }, - counter: 0, - element: false, - interval: setInterval(function(){ - if (position.element == 'video') { - if ((position.x == position.lastpos.x) && (position.y == position.lastpos.y)) { - position.counter++; - if (position.counter >= 5) { - position.element = false; - ele.parentNode.setAttribute('data-hide',''); - return; - } - } - position.lastpos.x = position.x; - position.lastpos.y = position.y; - return; - } - position.counter = 0; - },1e3) - }; - ele.addEventListener('mousemove',function(e){ - position.x = e.pageX; - position.y = e.pageY; - position.element = 'video'; - ele.parentNode.removeAttribute('data-hide'); - }); - controls.addEventListener('mousemove',function(e){ - position.element = 'controls'; - e.stopPropagation(); - }); - ele.addEventListener('mouseout',function(e){ - position.element = false; - }); - - return true; -} -MistPlayer.prototype.askNextCombo = function(msg){ - var me = this; - if (me.errorstate) { return; } - me.errorstate = true; - me.report({ - type: 'playback', - warn: 'Showing error window', - msg: msg - }); - - //show the error - var err = document.createElement('div'); - var msgnode = document.createTextNode(msg ? msg : 'Player or stream error detected'); - err.appendChild(msgnode); - err.className = 'error'; - err.style.position = 'absolute'; - err.style.width = '100%'; - err.style['margin-left'] = 0; - this.target.appendChild(err); - if (this.element) { - this.element.style.opacity = '0.2'; - if (this.element.parentElement != this.target) { - err.style.position = ''; - } - } - - //if there is a next source/player, show a button to activate it - var opts = this.mistplaySettings.options; - if (mistCheck(mistvideo[this.mistplaySettings.streamname],opts)) { - var button = document.createElement('button'); - var t = document.createTextNode('Try next source/player'); - button.appendChild(t); - err.appendChild(button); - button.onclick = function(){ - me.nextCombo(); - } - } - - //show a button to reload with the current settings - var button = document.createElement('button'); - var i = document.createElement('div'); //a css countdown clock for 10sec - i.className = 'countdown'; - button.appendChild(i); - var t = document.createTextNode('Reload this player'); - button.appendChild(t); - err.appendChild(button); - button.onclick = function(){ - me.addlog('Reloading player because the reload button was triggered'); - me.reload(); - } - - //after 20 seconds, reload the player - err.timeOut = me.timer.add(function(){ - me.report({ - type: 'playback', - warn: 'Automatically reloaded the current player after playback error' - }); - me.addlog('Triggering reload button because of timeout'); - button.click(); - },20e3); - -}; -MistPlayer.prototype.cancelAskNextCombo = function(){ - if (this.errorstate) { - this.errorstate = false; - this.addlog('Removing error window'); - this.element.style.opacity = 1; - var err = this.target.querySelector('.error'); - if (err) { - this.target.removeChild(err); - if (err.timeOut) { this.timer.remove(err.timeOut); } - } - } -}; -MistPlayer.prototype.reload = function(){ - this.unload(); - mistPlay(this.mistplaySettings.streamname,this.mistplaySettings.options); - this.report({ - type: 'init', - info: 'Reloading player' - }); -}; -MistPlayer.prototype.nextCombo = function(){ - this.unload(); - var opts = this.mistplaySettings.options; - opts.startCombo = this.mistplaySettings.startCombo; - mistPlay(this.mistplaySettings.streamname,opts); -}; -///send information back to mistserver -///\param msg object containing the information to report -MistPlayer.prototype.report = function(msg) { - - ///send a http post request - ///\param url (string) url to send to - ///\param params object containing post parameters - function httpPost(url,params) { - var http = new XMLHttpRequest(); - - var postdata = []; - for (var i in params) { - postdata.push(i+'='+params[i]); - } - - http.open("POST", url, true); - http.send(postdata.join('&')); - } - - //add some extra information - msg.userinfo = { - page: location.href, - stream: this.streamname, - session: mistplayer_session_id - }; - if ('index' in this) { msg.userinfo.playerindex = this.index; } - if ('playername' in this) { msg.userinfo.player = this.playername; } - if ('options' in this) { - if ('source' in this.options) { - msg.userinfo.source = { - src: this.options.source.url, - type: this.options.source.type - }; - } - msg.userinfo.resolution = this.options.width+'x'+this.options.height; - msg.userinfo.time = Math.round(((new Date) - this.options.initTime)/1e3); //seconds since the info js was loaded - } - - this.sendEvent('report',JSON.stringify(msg),this.element); - - return false; ///\todo Remove this when the backend reporting function has been coded - - try { - httpPost(this.options.host+'/report',{ - report: JSON.stringify(msg) - }); - } - catch (e) { } -} -MistPlayer.prototype.unload = function(){ - this.addlog('Unloading..'); - if (this.element) { - if (('pause' in this) && (this.pause)) { this.pause(); } - if ('updateSrc' in this) { - this.updateSrc(''); - this.element.load(); //dont use this.load() to avoid interrupting play/pause - } - this.element.innerHTML = ''; - } - this.timer.clear(); - this.target.innerHTML = ''; -}; - -function mistCheck(streaminfo,options,embedLog) { - if (typeof embedLog != 'function') { embedLog = function(){}; } - - embedLog('Checking available players..'); - - var source = false; - var mistPlayer = false; - - if (options.startCombo) { - options.startCombo.started = { - player: false, - source: false - }; - } - - function checkPlayer(p_shortname) { - if ((options.startCombo) && (!options.startCombo.started.player)) { - if (p_shortname != options.startCombo.player) { return false; } - else { - options.startCombo.started.player = true; - } - } - - embedLog('Checking '+mistplayers[p_shortname].name+' (priority: '+mistplayers[p_shortname].priority+') ..'); - - //loop over the available sources and check if this player can play it - var loop; - if (options.forceSource) { - loop = [streaminfo.source[options.forceSource]]; - } - else { - loop = streaminfo.source; - } - for (var s in loop) { - if ((options.startCombo) && (!options.startCombo.started.source)) { - if (s == options.startCombo.source) { - options.startCombo.started.source = true; - } - continue; - } - if ((options.forceType) && (loop[s].type != options.forceType)) { - continue; - } - - if (mistplayers[p_shortname].isMimeSupported(loop[s].type)) { - //this player supports this mime - if (mistplayers[p_shortname].isBrowserSupported(loop[s].type,loop[s],options,streaminfo,embedLog)) { - //this browser is supported - embedLog('Found a working combo: '+mistplayers[p_shortname].name+' with '+loop[s].type+' @ '+loop[s].url); - mistPlayer = p_shortname; - source = loop[s]; - source.index = s; - return p_shortname; - } - else { - embedLog('This browser does not support '+loop[s].type+' via '+loop[s].url); - } - } - } - - return false; - } - - if (options.forcePlayer) { - checkPlayer(options.forcePlayer); - } - else { - //sort the players - var sorted = Object.keys(mistplayers); - sorted.sort(function(a,b){ - return mistplayers[a].priority - mistplayers[b].priority; - }); - for (var n in sorted) { - var p_shortname = sorted[n]; - if (checkPlayer(p_shortname)) { break; } - } - } - - return ((source && mistPlayer) ? { - source: source, - mistPlayer: mistPlayer - } : false); -} - -///////////////////////////////////////////////// -// SELECT AND ADD A VIDEO PLAYER TO THE TARGET // -///////////////////////////////////////////////// - -function mistPlay(streamName,options) { - - var protoplay = new MistPlayer(); - protoplay.streamname = streamName; - var embedLog = function(msg) { - protoplay.sendEvent('log',msg,options.target); - }; - function mistError(msg) { - var info = {}; - if ((typeof mistvideo != 'undefined') && (streamName in mistvideo)) { info = mistvideo[streamName]; } - var displaymsg = msg; - if ('on_error' in info) { displaymsg = info.on_error; } - - var err = document.createElement('div'); - err.innerHTML = displaymsg.replace(new RegExp("\n",'g'),'
')+'
'; - err.className = 'error'; - var button = document.createElement('button'); - var i = document.createElement('div'); - button.appendChild(i); - var t = document.createTextNode('Reload'); - button.appendChild(t); - err.appendChild(button); - button.onclick = function(){ - if (err.parentElement) { err.parentElement.removeChild(err); } - delete options.startCombo; - if (err.timeOut) { - clearTimeout(err.timeOut); - } - mistPlay(streamName,options); - } - - options.target.appendChild(err); - - protoplay.sendEvent('error',msg,options.target); - - if (!('type' in info) || (info.type != 'vod')) { //always show the button timer, unless its a vod - //reload timeout - var delay = 20; - if (!("type" in info)) { - if ("reloadDelay" in options) { - delay = options.reloadDelay; - - try { - var css = document.createElement("style"); - i.appendChild(css); - css.sheet.insertRule(".countdown[data-delay=\""+delay+"\"] { animation-duration: "+delay+"s; }"); - css.sheet.insertRule(".countdown[data-delay=\""+delay+"\"]:before { animation-duration: "+delay/2+"s,"+delay+"s; }"); - } - catch (e) {} - } - else { - delay = 60; - } - } - i.className = 'countdown'; - i.setAttribute("data-delay",delay); - err.timeOut = protoplay.timer.add(function(){ - protoplay.report({ - type: 'playback', - warn: 'Automatically checking if the stream is working now' - }); - embedLog('Triggering reload button because of timeout'); - button.click(); - },delay*1e3); - } - - return err; - } - - //merge local and global options - var local = options; - var global = (typeof mistoptions == 'undefined' ? {} : mistoptions); - var options = { - host: null, //override mistserver host (default is the host that player.js is loaded from) - autoplay: true, //start playing when loaded - controls: true, //show controls (MistControls when available) - loop: false, //don't loop when the stream has finished - poster: null, //don't show an image before the stream has started - callback: false, //don't call a function when the player has finished building - streaminfo: false, //don't use this streaminfo but collect it from the mistserverhost - startCombo: false, //start looking for a player/source match at the start - forceType: false, //don't force a mimetype - forcePlayer: false, //don't force a player - forceSource: false //don't force a source - }; - for (var i in global) { - options[i] = global[i]; - } - for (var i in local) { - options[i] = local[i]; - } - - if (!options.host) { - mistError('MistServer host undefined.'); - return; - } - if (!options.target) { - mistError('Target container undefined'); - return; - } - - options.host = options.host.replace(/\/$/,""); //remove trailing slash - - options.target.setAttribute('data-loading',''); - - var classes = options.target.className.split(' '); - if (classes.indexOf('mistvideo') == -1) { - classes.push('mistvideo'); - options.target.className = classes.join(' '); - } - - //check if the css is loaded - if (!document.getElementById('mist_player_css')) { - var css = document.createElement('link'); - css.rel = 'stylesheet'; - css.href = options.host+'/player.css'; - css.id = 'mist_player_css'; - //prepend it to the head: don't use append, because the customer might want to override our default css - if (document.head.children.length) { - document.head.insertBefore(css,document.head.firstChild); - } - else { - document.head.appendChild(css); - } - } - - function onstreaminfo() { - options.target.innerHTML = ''; - options.target.removeAttribute('data-loading'); - embedLog('Stream info was loaded succesfully.'); - - //get streaminfo data - var streaminfo = mistvideo[streamName]; - //embedLog('Stream info contents: '+JSON.stringify(streaminfo)); - streaminfo.initTime = new Date(); - - if (!('source' in streaminfo)) { - if ((streaminfo.type) && (streaminfo.type == 'live')) { - mistError('The live stream is currently offline.'); - return; - } - else if ('error' in streaminfo) { - mistError(streaminfo.error); - return; - } - else { - mistError('Error while parsing stream info.'); - protoplay.report({ - type: 'init', - error: 'No sources' - }); - return; - } - } - - if (('forceType' in options) && (options.forceType)) { - embedLog('Forcing '+options.forceType); - } - if (('forceSource' in options) && (options.forceSource)) { - options.forceType = streaminfo.source[options.forceSource].type; - embedLog('Forcing source '+options.forceSource+': '+options.forceType+' @ '+streaminfo.source[options.forceSource].url); - } - if (('forcePlayer' in options) && (options.forcePlayer)) { - if (options.forcePlayer in mistplayers) { - embedLog('Forcing '+mistplayers[options.forcePlayer].name); - } - else { - embedLog('The forced player ('+options.forcePlayer+') isn\'t known, ignoring. Possible values are: '+Object.keys(mistplayers).join(', ')); - options.forcePlayer = false; - } - } - if (('startCombo' in options) && (options.startCombo)) { - embedLog('Selecting a new player/source combo, starting after '+mistplayers[options.startCombo.player].name+' with '+streaminfo.source[options.startCombo.source].type+' @ '+streaminfo.source[options.startCombo.source].url); - } - - //sort the sources by simultracks, priority and mime, but prefer HTTPS - streaminfo.source.sort(function(a,b){ - return (b.simul_tracks - a.simul_tracks) || (b.priority - a.priority) || a.type.localeCompare(b.type) || b.url.localeCompare(a.url); - }); - - var r = mistCheck(streaminfo,options,embedLog); - var mistPlayer = r.mistPlayer; - var source = r.source; - - options.target.innerHTML = ''; - if (mistPlayer) { - - //create the options to send to the player - var playerOpts = { - src: source.url+(('urlappend' in options) && (options.urlappend) ? options.urlappend : '' ), - live: (streaminfo.type == 'live' ? true : false), - initTime: streaminfo.initTime, - meta: streaminfo.meta, - source: source, - host: options.host - }; - //pass player options and handle defaults - playerOpts.autoplay = options.autoplay; - playerOpts.controls = options.controls; - playerOpts.loop = (playerOpts.live ? false : options.loop); - playerOpts.poster = options.poster; - - function calcSize() { - //calculate desired width and height - var fw = ('width' in options && options.width ? options.width : false ); //force this width - var fh = ('height' in options && options.height ? options.height : false ); //force this height - if (!(fw && fh)) { - var ratio = streaminfo.width / streaminfo.height; - if (fw || fh) { - if (fw) { - fh = fw/ratio; - } - else { - fw = fh*ratio; - } - } - else { - //neither width or height are being forced. Set them to the minimum of video and target size - var cw = ('maxwidth' in options && options.maxwidth ? options.maxwidth : options.target.clientWidth || window.innerWidth); - var ch = ('maxheight' in options && options.maxheight ? options.maxheight : options.target.clientHeight || window.innerHeight); - var fw = streaminfo.width; - var fh = streaminfo.height; - - var factor; //resize factor - if ((cw) && (fw > cw)) { //rescale if video width is larger than the target - factor = fw / cw; - fw /= factor; - fh /= factor; - } - if ((ch) && (fh > ch)) { //rescale if video height is (still?) larger than the target - factor = fh / ch; - fw /= factor; - fh /= factor; - } - } - } - return { - width: fw, - height: fh - }; - } - - var lastsize = calcSize(); - playerOpts.width = lastsize.width; - playerOpts.height = lastsize.height; - - //save the objects for future reference - var player = new mistplayers[mistPlayer].player(); - player.playername = mistPlayer; - player.target = options.target; - if (!('embedded' in streaminfo)) { streaminfo.embedded = []; } - streaminfo.embedded.push({ - options: options, - selectedPlayer: mistPlayer, - player: player, - playerOptions: playerOpts - }); - player.index = streaminfo.embedded.length-1; - - if (player.setTracks(false)) { - //gather track info - //tracks - var tracks = { - video: [], - audio: [], - subtitle: [] - }; - for (var i in streaminfo.meta.tracks) { - var t = streaminfo.meta.tracks[i]; - var skip = false; - switch (t.type) { - case 'video': - t.desc = [ - ("lang" in t ? t.language : "unknown"), - t.width+'x'+t.height, - (t.bps == 0 ? "unknown": (t.bps > 1024*1024/8 ? Math.round(t.bps/1024/1024*8)+'mbps': Math.round(t.bps/1024*8)+'kbps')), - (t.fpks == 0 ? "unknown" : t.fpks/1e3+'fps'), - t.codec - ]; - break; - case 'audio': - t.desc = [ - ("lang" in t ? t.language : "unknown"), - (t.channels == 2 ? 'Stereo' : (t.channels == 1 ? 'Mono' : "Surround ("+t.channels+'ch)')), - (t.bps == 0 ? "unknown": (t.bps > 1024*1024/8 ? Math.round(t.bps/1024/1024*8)+'mbps': Math.round(t.bps/1024*8)+'kbps')), - Math.round(t.rate/1000)+'kHz', - t.codec - ]; - break; - case 'meta': - case 'subtitle': - //subtitles are type meta and codec subtitle in Mist > v2.13, still support type subtitle though - if ((t.type == 'subtitle') || (t.codec == 'subtitle')) { - t.type = "subtitle"; - t.desc = [("lang" in t ? t.language : "unknown")]; - break; - } - default: - skip = true; - break; - } - if (skip) { continue; } - tracks[t.type].push(t); - } - //loop through the tracks again and compare them to one another to decide what to display as description - for (var cat in tracks) { - if (tracks[cat].length == 1) { - //there is only one track, show all info that isn't "unknown" - for (var i in tracks[cat]) { - var t = tracks[cat][i]; - for (var j = t.desc.length-1; j >= 0; j--) { - if ((t.desc[j] == "unknown") && (t.desc.length > 1)) { - t.desc.splice(j,1); - } - } - t.desc = t.desc.join(" "); - } - } - else { - var equal = false; - var show = []; - //sort by track id - tracks[cat].sort(function(a,b){ - return a.trackid - b.trackid; - }); - - for (var i in tracks[cat]) { - var t = tracks[cat][i]; - if (equal == false) { - //set equal to the first track description - equal = t.desc; - continue; - } - for (var j in t.desc) { - //compare each value to the one in equal, if it's not the same, mark it - if ((t.desc[j] != equal[j]) && (show.indexOf(j) < 0)) { - show.push(j); - } - } - } - if (show.length) { - for (var i in tracks[cat]) { - var t = tracks[cat][i]; - //gather indexes in show - var str = []; - for (var j in show) { - str.push(t.desc[show[j]]); - } - t.desc = str.join(" "); - } - } - else { - //all info is the same, show a track index - for (var i in tracks[cat]) { - var t = tracks[cat][i]; - t.desc = "Track "+(Number(i)+1); - } - } - } - } - player.tracks = tracks; - if (tracks.subtitle.length) { - var vttsrc = false; - player.subtitle = false; - for (var i in streaminfo.source) { - if (streaminfo.source[i].type == 'html5/text/vtt') { - vttsrc = streaminfo.source[i].url; - break; - } - } - if (vttsrc) { - player.subtitle = vttsrc.replace(/.srt$/,'.vtt'); - } - } - var usetracks = {}; - for (var i in tracks) { - if (i == 'subtitle') { continue; } - if (tracks[i].length) { - tracks[i].sort(function(a,b){ - return a.trackid - b.trackid; - }); - usetracks[i] = tracks[i][0].trackid; - } - } - } - - function onplayerbuilt(element) { - options.target.appendChild(element); - element.setAttribute('data-player',mistPlayer); - element.setAttribute('data-mime',source.type); - player.report({ - type: 'init', - info: 'Player built' - }); - - if (player.setTracks(false)) { - player.onready(function(){ - //player.setTracks(usetracks); - if ('setTracks' in options) { player.setTracks(options.setTracks); } - }); - } - - //monitor for errors - element.sendPingTimeout = setInterval(function(){ - if (player.paused) { return; } - player.report({ - type: 'playback', - info: 'ping' - }); - },150e3); - element.addEventListener('error',function(e){ - player.askNextCombo('The player has thrown an error'); - var r = { - type: 'playback', - error: 'The player has thrown an error' - }; - if ('readyState' in player.element) { - r.readyState = player.element.readyState; - } - if ('networkState' in player.element) { - r.networkState = player.element.networkState; - } - if (('error' in player.element) && (player.element.error) && ('code' in player.element.error)) { - r.code = player.element.error.code; - } - player.report(r); - }); - element.checkStalledTimeout = false; - var stalled = function(e){ - if (element.checkStalledTimeout) { return; } - var curpos = player.element.currentTime; - if (curpos == 0) { return; } - element.checkStalledTimeout = player.timer.add(function(){ - if ((player.paused) || (curpos != player.element.currentTime)) { return; } - player.askNextCombo('Playback has stalled'); - player.report({ - 'type': 'playback', - 'warn': 'Playback was stalled for > 30 sec' - }); - },30e3); - }; - element.addEventListener('stalled',stalled,true); - element.addEventListener('waiting',stalled,true); - - if (playerOpts.live) { - element.checkProgressTimeout = false; - var progress = function(e){ - if (element.checkStalledTimeout) { - player.timer.remove(element.checkStalledTimeout); - element.checkStalledTimeout = false; - player.cancelAskNextCombo(); - } - }; - //element.addEventListener('progress',progress,true); //sometimes, there is progress but no playback - element.addEventListener('playing',progress,true); - element.addEventListener('play',function(){ - player.paused = false; - if ((!element.checkProgressTimeout) && (player.element) && ('currentTime' in player.element)) { - //check if the progress made is equal to the time spent - var lasttime = player.element.currentTime; - element.checkProgressTimeout = player.timer.add(function(){ - var newtime = player.element.currentTime; - var progress = newtime - lasttime; - lasttime = newtime; - if (progress < 0) { return; } //its probably a looping VOD or we've just seeked - if (progress == 0) { - var msg = 'There should be playback but nothing was played'; - var r = { - type: 'playback', - warn: msg - }; - player.addlog(msg); - if ('readyState' in player.element) { - r.readyState = player.element.readyState; - } - if ('networkState' in player.element) { - r.networkState = player.element.networkState; - } - if (('error' in player.element) && (player.element.error) && ('code' in player.element.error)) { - r.code = player.element.error.code; - } - player.report(r); - player.askNextCombo('No playback'); - return; - } - player.cancelAskNextCombo(); - if (progress < 20) { - var msg = 'It seems playback is lagging (progressed '+Math.round(progress*100)/100+'/30s)' - player.addlog(msg); - player.report({ - type: 'playback', - warn: msg - }); - return; - } - },30e3,true); - } - },true); - element.addEventListener('pause',function(){ - player.paused = true; - if (element.checkProgressTimeout) { - player.timer.remove(element.checkProgressTimeout); - element.checkProgressTimeout = false; - } - },true); - } - - if (player.resize) { - //monitor for resizes and fire if needed - window.addEventListener('resize',function(){ - player.resize(calcSize()); - }); - } - - for (var i in player.onreadylist) { - player.onreadylist[i](); - } - - protoplay.sendEvent('initialized','',options.target); - if (options.callback) { options.callback(player); } - } - - //build the player - player.mistplaySettings = { - streamname: streamName, - options: options, - startCombo: { - player: mistPlayer, - source: source.index - } - }; - player.options = playerOpts; - try { - var element = player.build(playerOpts,onplayerbuilt); - } - catch (e) { - //show the next player/reload buttons if there is an error in the player build code - player.askNextCombo('Error while building player'+("stack" in e ? ": "+e.stack : "")); - throw e; - player.report({ - type: 'init', - error: 'Error while building player' - }); - return; - } - } - else { - if (streaminfo.error) { - var str = streaminfo.error; - } - else if (('source' in streaminfo) && (streaminfo.source.length)) { - var str = 'Could not find a compatible player and protocol combination for this stream and browser. '; - if (options.forceType) { str += "\n"+'The mimetype '+options.forceType+' was enforced. '; } - if (options.forcePlayer) { str += "\n"+'The player '+options.forcePlayer+' was enforced. '; } - } - else { - var str = 'Stream not found.'; - } - protoplay.report({ - type: 'init', - error: str - }); - mistError(str); - } - } - if ((options.streaminfo) && (typeof options.streaminfo == 'object') && ('type' in options.streaminfo) - && ('source' in options.streaminfo) && (options.streaminfo.source.length) - && ('meta' in options.streaminfo) && ('tracks' in options.streaminfo.meta)) { //catch some of the most problematic stuff - if (typeof mistvideo == 'undefined') { mistvideo = {}; } - mistvideo[streamName] = options.streaminfo; - onstreaminfo(); - } - else { - //get info js - var info = document.createElement('script'); - info.src = options.host+'/info_'+encodeURIComponent(streamName)+'.js'+(('urlappend' in options) && (options.urlappend) ? options.urlappend : '' ); - embedLog('Retrieving stream info from '+info.src); - document.head.appendChild(info); - info.onerror = function(){ - options.target.innerHTML = ''; - options.target.removeAttribute('data-loading'); - mistError('Error while loading stream info.'); - protoplay.report({ - type: 'init', - error: 'Failed to load '+info.src - }); - } - info.onload = function(){ - //clean up info script - document.head.removeChild(info); - - onstreaminfo(); - } - } -} diff --git a/embed/imgs/fullscreen_plain.svg b/embed/imgs/fullscreen_plain.svg index 82bf326d..d9c9d9ce 100644 --- a/embed/imgs/fullscreen_plain.svg +++ b/embed/imgs/fullscreen_plain.svg @@ -1 +1,13 @@ -image/svg+xml + + + + + + + + + + + + + diff --git a/embed/imgs/fullscreen_plain_.svg b/embed/imgs/fullscreen_plain_.svg new file mode 100644 index 00000000..4cfd9335 --- /dev/null +++ b/embed/imgs/fullscreen_plain_.svg @@ -0,0 +1,3 @@ + + + diff --git a/embed/imgs/gear.svg b/embed/imgs/gear.svg new file mode 100644 index 00000000..9aa62d09 --- /dev/null +++ b/embed/imgs/gear.svg @@ -0,0 +1,61 @@ + + + + + + + + image/svg+xml + + + + + + + diff --git a/embed/imgs/gear_plain.svg b/embed/imgs/gear_plain.svg new file mode 100644 index 00000000..e10c6e60 --- /dev/null +++ b/embed/imgs/gear_plain.svg @@ -0,0 +1,3 @@ + + + diff --git a/embed/imgs/loading.svg b/embed/imgs/loading.svg new file mode 100644 index 00000000..40ede465 --- /dev/null +++ b/embed/imgs/loading.svg @@ -0,0 +1 @@ + diff --git a/embed/imgs/loop.svg b/embed/imgs/loop.svg index 85fafb66..dd80934e 100644 --- a/embed/imgs/loop.svg +++ b/embed/imgs/loop.svg @@ -11,8 +11,9 @@ id="svg3937" height="45" width="45" - inkscape:version="0.91 r13725" - sodipodi:docname="loop.svg"> + inkscape:version="0.92.2 5c3e80d, 2017-08-06" + sodipodi:docname="loop.svg" + viewBox="0 0 45 45"> - - - - - - - + inkscape:current-layer="svg3937" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + scale-x="1" /> - + style="opacity:1;fill:none;fill-opacity:0.8584475;fill-rule:evenodd;stroke:#ffffff;stroke-width:2.50002718;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" + d="M 21.279283,3.749797 A 18.750203,18.750203 0 0 0 8.0304417,9.2511582 L 12.740779,13.961496 A 12.083464,12.083464 0 0 1 21.279283,10.416536 12.083464,12.083464 0 0 1 33.362748,22.5 12.083464,12.083464 0 0 1 21.279283,34.583464 12.083464,12.083464 0 0 1 12.740779,31.038504 l 3.063185,-3.063185 H 4.9705135 V 38.80877 L 8.0304417,35.748842 A 18.750203,18.750203 0 0 0 21.279283,41.250203 18.750203,18.750203 0 0 0 40.029486,22.5 18.750203,18.750203 0 0 0 21.279283,3.749797 Z" + id="path4495" + inkscape:connector-curvature="0" /> diff --git a/embed/imgs/muted_plain.svg b/embed/imgs/muted_plain.svg new file mode 100644 index 00000000..aeacbbfc --- /dev/null +++ b/embed/imgs/muted_plain.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/embed/imgs/pause_plain.svg b/embed/imgs/pause_plain.svg index a408a218..7a4f7861 100644 --- a/embed/imgs/pause_plain.svg +++ b/embed/imgs/pause_plain.svg @@ -1 +1 @@ -image/svg+xml + diff --git a/embed/imgs/play.svg b/embed/imgs/play.svg index e6584b9b..5b945967 100644 --- a/embed/imgs/play.svg +++ b/embed/imgs/play.svg @@ -13,10 +13,8 @@ height="45" id="svg2" version="1.1" - inkscape:version="0.48.4 r9939" - sodipodi:docname="New document 1"> - + inkscape:version="0.92.2 5c3e80d, 2017-08-06" + sodipodi:docname="play.svg"> + position="0,0" /> + position="45,0" /> + position="45,45" /> + position="0,45" /> + @@ -69,22 +73,17 @@ image/svg+xml - + + inkscape:groupmode="layer" + inkscape:label="Layer 1"> + style="fill:#ffffff;fill-opacity:1;fill-rule:evenodd;stroke:none" /> diff --git a/embed/imgs/popout.svg b/embed/imgs/popout.svg new file mode 100644 index 00000000..bd677e3b --- /dev/null +++ b/embed/imgs/popout.svg @@ -0,0 +1,3 @@ + + + diff --git a/embed/imgs/speaker.svg b/embed/imgs/speaker.svg index b4a3bd4f..3eb2b0e1 100644 --- a/embed/imgs/speaker.svg +++ b/embed/imgs/speaker.svg @@ -1,6 +1,4 @@ - - - + id="svg4659" + height="45" + width="45" + sodipodi:docname="speaker.svg" + inkscape:version="0.92.2 5c3e80d, 2017-08-06"> - - - - - + inkscape:window-y="0" + inkscape:window-maximized="0" + inkscape:current-layer="svg4659" /> + @@ -65,19 +52,18 @@ + transform="matrix(1.8,0,0,1.8,0,-1849.252)" + id="layer1"> + d="M 0,0 V 25 H 25 V 0 Z M 16.955078,2.5175781 C 17.381507,2.5360023 17.80574,2.6612 18.1875,2.890625 v 19.21875 c -1.018294,0.6133 -2.33364,0.478112 -3.207031,-0.429687 l -4.298828,-4.46875 H 8.7832031 c -1.08537,0 -1.9707031,-0.920529 -1.9707031,-2.048829 V 9.8359375 c 0,-1.1282 0.8853331,-2.046875 1.9707031,-2.046875 h 1.8984379 l 4.298828,-4.4707031 c 0.54555,-0.567125 1.263894,-0.8314883 1.974609,-0.8007813 z" + style="color:#000000;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;fill:#000000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:0;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate" + inkscape:connector-curvature="0" /> diff --git a/embed/imgs/speaker_.svg b/embed/imgs/speaker_.svg new file mode 100644 index 00000000..18317c66 --- /dev/null +++ b/embed/imgs/speaker_.svg @@ -0,0 +1,59 @@ + + + + + + + + image/svg+xml + + + + + + + diff --git a/embed/imgs/speaker_plain.svg b/embed/imgs/speaker_plain.svg index 170df4cf..6f725f88 100644 --- a/embed/imgs/speaker_plain.svg +++ b/embed/imgs/speaker_plain.svg @@ -1 +1 @@ - image/svg+xml + image/svg+xml diff --git a/embed/imgs/switchvideo.svg b/embed/imgs/switchvideo.svg new file mode 100644 index 00000000..ac9e59d8 --- /dev/null +++ b/embed/imgs/switchvideo.svg @@ -0,0 +1,4 @@ + + + + diff --git a/embed/imgs/timeout.svg b/embed/imgs/timeout.svg new file mode 100644 index 00000000..13691ba0 --- /dev/null +++ b/embed/imgs/timeout.svg @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + + + diff --git a/embed/imgs/volume.svg b/embed/imgs/volume.svg index 9176e6e1..b774b7d7 100644 --- a/embed/imgs/volume.svg +++ b/embed/imgs/volume.svg @@ -9,14 +9,25 @@ xmlns="http://www.w3.org/2000/svg" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" - width="30" - height="65" + width="65.000015" + height="30" id="svg3937" version="1.1" - inkscape:version="0.91 r13725" + inkscape:version="0.92.2 5c3e80d, 2017-08-06" sodipodi:docname="volume.svg"> + id="defs3939"> + + + + + borderlayer="true" + fit-margin-top="0" + fit-margin-left="0" + fit-margin-right="0" + fit-margin-bottom="0" + showguides="true" + inkscape:guide-bbox="true" /> @@ -50,7 +67,7 @@ image/svg+xml - + @@ -58,16 +75,20 @@ inkscape:label="Layer 1" inkscape:groupmode="layer" id="layer1" - transform="translate(0,-987.3622)"> + transform="translate(17.50001,-1004.8622)"> - + inkscape:connector-curvature="0" + id="path4505" + d="m -14.830002,1027.1553 58.614316,-18.8626 c 1.795162,-0.5777 3.231854,0.5139 3.231854,2.1982 v 19.0111 c 0,1.3165 -1.098401,2.3764 -2.462782,2.3764 h -59.106775 c -2.946621,0 -3.449835,-3.6727 -0.276613,-4.7231 z" + style="fill:none;fill-opacity:1;stroke:#fdfdfd;stroke-width:0.96767992;stroke-opacity:1" + sodipodi:nodetypes="cccsscc" /> + diff --git a/embed/imgs/volume_plain.svg b/embed/imgs/volume_plain.svg index f3947a33..90a20721 100644 --- a/embed/imgs/volume_plain.svg +++ b/embed/imgs/volume_plain.svg @@ -1,38 +1,11 @@ - - - - - - - image/svg+xml - - - - - - - - + + + + + + + + + diff --git a/embed/imgs/volume_rect_dot_plain.svg b/embed/imgs/volume_rect_dot_plain.svg new file mode 100644 index 00000000..00ac04de --- /dev/null +++ b/embed/imgs/volume_rect_dot_plain.svg @@ -0,0 +1,6 @@ + + + + + + diff --git a/embed/min/player.js b/embed/min/player.js new file mode 100644 index 00000000..12de5898 --- /dev/null +++ b/embed/min/player.js @@ -0,0 +1 @@ +var MistUtil={format:{time:function(e,t){if(isNaN(e)||!isFinite(e))return e;t||(t={});var i=e<0?" ago":"";e=Math.abs(e);var r=Math.floor(e/86400);e-=86400*r;var n=Math.floor(e/3600);e-=3600*n;var a=Math.floor(e/60),s=Math.round(e%1*1e3);e=Math.floor(e-60*a);var o=[];return r&&(r=r+" day"+(r>1?"s":"")+", "),n||r?(o.push(n),o.push(("0"+a).slice(-2))):o.push(a),o.push(("0"+Math.floor(e)).slice(-2)),t.ms&&(o[o.length-1]+="."+("000"+s).slice(-3)),(r||"")+o.join(":")+i},ucFirst:function(e){return e.charAt(0).toUpperCase()+e.slice(1)},number:function(e){if(isNaN(Number(e))||0==e)return e;var t=Math.max(3,Math.ceil(Math.log(e)/Math.LN10)),i=Math.pow(10,t-Math.floor(Math.log(e)/Math.LN10)-1);if((e=Math.round(e*i)/i)>=1e4){number=e.toString().split(".");for(var r=/(\d+)(\d{3})/;r.test(number[0]);)number[0]=number[0].replace(r,"$1 $2");e=number.join(".")}return e},bytes:function(e){if(isNaN(Number(e)))return e;var t=["bytes","KB","MB","GB","TB","PB"];if(0==e)unit=t[0];else{var i=Math.floor(Math.log(Math.abs(e))/Math.log(1024));i<0?unit=t[0]:(e/=Math.pow(1024,i),unit=t[i])}return this.number(e)+unit},mime2human:function(e){switch(e){case"html5/video/webm":return"WebM";case"html5/application/vnd.apple.mpegurl":return"HLS";case"flash/10":return"Flash (RTMP)";case"flash/11":return"Flash (HDS)";case"flash/7":return"Flash (Progressive)";case"html5/video/mpeg":return"TS";case"html5/application/vnd.ms-ss":return"Smooth streaming";case"dash/video/mp4":return"DASH";case"webrtc":return"WebRTC";case"silverlight":return"Smooth streaming (Silverlight)";case"html5/text/vtt":return"VTT subtitles";case"html5/text/plain":return"SRT subtitles";default:return e.replace("html5/","").replace("video/","").replace("audio/","").toLocaleUpperCase()}}},class:{add:function(e,t){if("classList"in e)e.classList.add(t);else{var i=this.get(e);i.push(t),this.set(e,i)}},remove:function(e,t){if("classList"in e)e.classList.remove(t);else{for(var i=this.get(e),r=i.length-1;r>=0;r--)i[r]==t&&i.splice(r);this.set(e,i)}},get:function(e){var t=e.getAttribute("class");return t&&""!=t?t.split(" "):[]},set:function(e,t){e.setAttribute("class",t.join(" "))},has:function(e,t){return e.className.split(" ").indexOf(t)>=0}},object:{extend:function(e,t,i){for(var r in t)!i||"object"!=typeof t[r]||"nodeType"in t[r]?e[r]=t[r]:(r in e||(MistUtil.array.is(t[r])?e[r]=[]:e[r]={}),this.extend(e[r],t[r],!0));return e},keys:function(e,t){var i=[];for(var r in e)i.push(r);return t&&("function"!=typeof t&&(t=function(e,t){return e>t?1:e=0?r:i.length}if("function"==typeof e)return e(t);if("object"==typeof e){if(e instanceof Array)return i(t,e[0],e[1]);for(var r in e)return i(t,r,e[r])}if(e in t)return t[e];throw"Invalid sorting rule: "+e+". This should be a function, object or key of "+JSON.stringify(t)+"."}return e.sort(function(e,n){var a=0;for(var s in t){var o=t[s];if(0!=(a=i(r(o,e),r(o,n))))break}return a}),e}},createUnique:function(){var e="uid"+Math.random().toString().replace("0.","");return document.querySelector("."+e)?createUnique():e},http:{getpost:function(e,t,i,r,n){var a=new XMLHttpRequest;if(a.open(e,t,!0),"POST"==e&&a.setRequestHeader("Content-type","application/x-www-form-urlencoded"),n&&(a.timeout=8e3),a.onload=function(){var e=a.status;e>=200&&e<300?r(a.response):n&&(a.onerror=function(){n(a)})},n&&(a.onerror=function(){n(a)},a.ontimeout=a.onerror),"POST"==e){var s,o=[];for(var l in i)o.push(l+"="+encodeURIComponent(i[l]));o.length&&(s=o.join("&")),a.send(s)}else a.send()},get:function(e,t,i){this.getpost("GET",e,null,t,i)},post:function(e,t,i,r){this.getpost("POST",e,t,i,r)},url:{addParam:function(e,t){var i=e.split("?"),r=[i.shift()],n=[];for(var a in i.length&&(n=i[0].split("&")),t)n.push(a+"="+t[a]);return n.length&&r.push(n.join("&")),r.join("?")},split:function(e){var t=document.createElement("a");return t.href=e,{protocol:t.protocol,host:t.hostname,hash:t.hash,port:t.port,path:t.pathname.replace(/\/*$/,"")}},sanitizeHost:function(e){var t=MistUtil.http.url.split(e);return t.protocol+"//"+t.host+(t.port&&""!=t.port?":"+t.port:"")+(t.hash&&""!=t.hash?"#"+t.hash:"")+(t.path?t.path:"")}}},css:{cache:{},load:function(e,t,i){var r=document.createElement("style");r.type="text/css",r.setAttribute("data-source",e),i&&(r.callback=i);var n=this.cache;function a(e){var i=MistUtil.css.applyColors(e,t);"callback"in r?r.callback(i):r.textContent=i}return e in n?n[e]instanceof Array?n[e].push(a):a(n[e]):(n[e]=[a],MistUtil.http.get(e,function(t){for(var i in n[e])n[e][i](t);n[e]=t},function(){throw"Failed to load CSS from "+e})),r},applyColors:function(e,t){return e.replace(/\$([^\s^;^}]*)/g,function(e,i){var r=i.split("."),n=t;for(var a in r)n=n[r[a]];return n})},createStyle:function(e,t,i){var r=document.createElement("style");return r.type="text/css",e&&(t&&(e=this.prependClass(e,t,i)),r.textContent=e),r},prependClass:function(e,t,i){var r=!1;"string"!=typeof e&&("unprepended"in(r=e)||(r.unprepended=r.textContent),e=r.unprepended);var n=(e=e.replace(/\/\*.*?\*\//g,"")).match(/@.*?{.*}/g);for(var a in n)e=e.replace(n[a],"@@@@");for(var a in e=e.replace(/[^@]*?{[^]*?}/g,function(e){var r=e.split("{"),n=r[0].split(","),a="{"+r.slice(1).join("}");for(var s in n){n[s]=n[s].trim();var o="."+t+n[s];i&&(o+=",\n."+t+" "+n[s]),n[s]=o}return"\n"+n+" "+a}),n)e=e.replace(/@@@@/,n[a]);if(!r)return e;r.textContent=e}},empty:function(e){for(;e.lastChild;){if(e.lastChild.lastChild&&this.empty(e.lastChild),"attachedListeners"in e.lastChild)for(var t in e.lastChild.attachedListeners)MistUtil.event.removeListener(e.lastChild.attachedListeners[t]);e.removeChild(e.lastChild)}},event:{send:function(e,t,i){try{(r=new Event(e,{bubbles:!0,cancelable:!0})).message=t,i.dispatchEvent(r)}catch(n){try{var r;(r=document.createEvent("Event")).initEvent(e,!0,!0),r.message=t,i.dispatchEvent(r)}catch(e){return!1}}return!0},addListener:function(e,t,i,r){e.addEventListener(t,i),r||(r=e),"attachedListeners"in r||(r.attachedListeners=[]);var n={element:e,type:t,callback:i};return r.attachedListeners.push(n),n},removeListener:function(e){e.element.removeEventListener(e.type,e.callback)}},scripts:{list:{},insert:function(e,t,i){var r=this;if(i&&i.errorListeners.push({src:e,onevent:t}),e in this.list)return this.list[e].subscribers.push(t.onerror),void("onload"in t&&(this.hasLoaded?t.onload():MistUtil.event.addListener(this.list[e].tag,"load",t.onload)));var n=document.createElement("script");n.hasLoaded=!1,n.setAttribute("src",e),n.setAttribute("crossorigin","anonymous"),document.head.appendChild(n),n.onerror=function(e){t.onerror(e)},n.onload=function(e){this.hasLoaded=!0,i.destroyed||t.onload(e)},n.addEventListener("error",function(e){t.onerror(e)});var a=!1;return window.onerror&&(a=window.onerror),window.onerror=function(i,n,s,o,l){if(a&&a.apply(this,arguments),n==e)for(var c in t.onerror(l),r.list[e].subscribers)r.list[e].subscribers[c](l)},this.list[e]={subscribers:[t.onerror],tag:n},n}},tracks:{parse:function(e){var t={};for(var i in e){var r=MistUtil.object.extend({},e[i]);"meta"==r.type&&(r.type=r.codec,r.codec="meta"),r.type in t||(t[r.type]={}),t[r.type][r.trackid]=r;var n={};for(var a in r)switch(a){case"width":n[a]=r.width+"×"+r.height;break;case"bps":if("meta"==r.codec)continue;var s;if(r.bps>0)s=r.bps>131072?Math.round(r.bps/1024/1024*8)+"mbps":Math.round(r.bps/1024*8)+"kbps",n[a]=s;break;case"fpks":r.fpks>0&&(n[a]=r.fpks/1e3+"fps");break;case"channels":r.channels>0&&(n[a]=1==r.channels?"Mono":2==r.channels?"Stereo":"Surround ("+r.channels+"ch)");break;case"rate":n[a]=Math.round(r.rate)+"Khz";break;case"language":"Undetermined"!=r[a]&&(n[a]=r[a]);break;case"codec":if("meta"==r.codec)continue;n[a]=r[a]}r.describe=n}for(var o in t){var l=!1;for(var i in t[o])if(l){if(MistUtil.object.keys(t[o]).length>1)for(var a in t[o][i].describe)l[a]!=t[o][i].describe[a]&&delete l[a]}else l=MistUtil.object.extend({},t[o][i].describe);for(var i in t[o]){var c={},d={};for(var a in t[o][i].describe)a in l?d[a]=t[o][i].describe[a]:c[a]=t[o][i].describe[a];t[o][i].different=c,t[o][i].same=d;var u=MistUtil.object.values(c);t[o][i].displayName=u.length?u.join(", "):MistUtil.object.values(t[o][i].describe).join(" ")}}return t}},isTouchDevice:function(){return"ontouchstart"in window||navigator.msMaxTouchPoints>0},getPos:function(e,t){e.currentStyle||window.getComputedStyle(e,null);for(var i=1,r=e;r;)r.style.zoom&&""!=r.style.zoom&&(i*=parseFloat(r.style.zoom,10)),r=r.parentElement;var n=e.getBoundingClientRect().left-(parseInt(e.borderLeftWidth,10)||0),a=e.getBoundingClientRect().width,s=Math.max(0,(t.clientX/i-n)/a);return s=Math.min(s,1)},createGraph:function(e,t){var i="http://www.w3.org/2000/svg",r=document.createElementNS(i,"svg");r.setAttributeNS(null,"height","100%"),r.setAttributeNS(null,"width","100%"),r.setAttributeNS(null,"class","mist icon graph"),r.setAttributeNS(null,"preserveAspectRatio","none");var n=e.x[0],a=e.y[0];if(t.differentiate)for(var s=1;st.x.count&&(l.shift(),d()),d(e.x-n,-1*e.y),this.setAttributeNS(null,"d","M"+l.join(" L")),h()},r.addData=function(e){m.addData(e)},r},getBrowser:function(){var e=window.navigator.userAgent;return e.indexOf("MSIE ")>=0||e.indexOf("Trident/")>=0?"ie":e.indexOf("Edge/")>=0?"edge":e.indexOf("Opera")>=0||e.indexOf("OPR")>=0?"opera":e.indexOf("Chrome")>=0?"chrome":e.indexOf("Safari")>=0?"safari":e.indexOf("Firefox")>=0&&"firefox"}};if(void 0===MistSkins)var MistSkins={};if("undefined"!=typeof mistoptions&&"host"in mistoptions)var misthost=MistUtil.http.url.sanitizeHost(mistoptions.host);else misthost="..";function MistSkin(e){e.skin=this,this.applySkinOptions=function(t){var i;return"string"==typeof t&&t in MistSkins&&(t=MistUtil.object.extend({},MistSkins[t],!0)),i="inherit"in t&&t.inherit?this.applySkinOptions(t.inherit):MistSkins.default,this.structure=MistUtil.object.extend({},i.structure),t&&"structure"in t&&MistUtil.object.extend(this.structure,t.structure),this.blueprints=MistUtil.object.extend({},i.blueprints),t&&"blueprints"in t&&MistUtil.object.extend(this.blueprints,t.blueprints),this.icons=MistUtil.object.extend({},i.icons,!0),t&&"icons"in t&&MistUtil.object.extend(this.icons.blueprints,t.icons),this.icons.build=function(t,i,r){i||(i=22);var n,a=this.blueprints[t];n="function"==typeof a.svg?a.svg.call(e,r):a.svg,"object"!=typeof i&&(i={height:i,width:i}),"object"!=typeof a.size&&(a.size={height:a.size,width:a.size}),(!("width"in i)&&"height"in i||!("height"in i)&&"width"in i)&&("width"in i&&(i.height=i.width*a.size.height/a.size.width),"height"in i&&(i.width=i.height*a.size.width/a.size.height));var s="";s+='',s+='',s+=n,s+="",s+="";var o=document.createElement("div");return o.innerHTML=s,o.firstChild},this.colors=MistUtil.object.extend({},i.colors),t&&"colors"in t&&MistUtil.object.extend(this.colors,t.colors,!0),this.css=MistUtil.object.extend({},i.css),t&&"css"in t&&MistUtil.object.extend(this.css,t.css),this},this.applySkinOptions("skin"in e.options?e.options.skin:"default");var t=[];for(var i in this.css)"string"==typeof this.css[i]&&t.push(MistUtil.css.load(e.urlappend(this.css[i]),this.colors));this.css=t}function MistUI(e,t){e.UI=this,this.elements=[],this.buildStructure=function(t){if("function"==typeof t&&(t=t.call(e)),"if"in t){var i=!1;if(t.if.call(e,t)?i=t.then:"else"in t&&(i=t.else),!i)return;for(var r in t)["if","then","else"].indexOf(r)<0&&(r in i?(i[r]instanceof Array||(i[r]=[i[r]]),i[r]=i[r].concat(t[r])):i[r]=t[r]);return this.buildStructure(i)}if("type"in t&&t.type in e.skin.blueprints){var n=e.skin.blueprints[t.type].call(e,t);if(!n)return;if(MistUtil.class.add(n,"mistvideo-"+t.type),"css"in t){var a=MistUtil.createUnique();for(var r in t.css=[].concat(t.css),t.css){var s=MistUtil.css.createStyle(t.css[r],a);n.appendChild(s)}MistUtil.class.add(n,a),n.uid=a}if("classes"in t)for(var r in t.classes)MistUtil.class.add(n,t.classes[r]);if("title"in t&&(n.title=t.title),"style"in t)for(var r in t.style)n.style[r]=t.style[r];if("children"in t)for(var r in t.children){var o=this.buildStructure(t.children[r]);o&&n.appendChild(o)}return e.UI.elements.push(n),n}return!1},this.build=function(){return this.buildStructure(t||e.skin.structure.main)};var i=this.build(),r=MistUtil.createUnique(),n=e.skin.css.length;for(var a in n&&(i.style.opacity="0"),e.skin.css){var s=e.skin.css[a];s.callback=function(e){this.textContent=MistUtil.css.prependClass(e,r,!0),--n<=0&&(i.style.opacity="")},""!=s.textContent&&s.callback(s.textContent),i.appendChild(s)}MistUtil.class.add(i,r);var o=MistUtil.getBrowser();return o&&MistUtil.class.add(i,"browser-"+o),i}MistSkins.default={structure:{main:{if:function(){return!!this.info.hasVideo&&"audio"!=this.source.type.split("/")[1]},then:{type:"placeholder",classes:["mistvideo"],children:[{type:"hoverWindow",mode:"pos",style:{position:"relative"},transition:{hide:"left: 0; right: 0; bottom: -43px;",show:"bottom: 0;",viewport:"left:0; right: 0; top: -1000px; bottom: 0;"},button:{type:"videocontainer"},children:[{type:"loading"},{type:"error"}],window:{type:"controls"}}]},else:{type:"container",classes:["mistvideo"],style:{overflow:"visible"},children:[{type:"controls",classes:["mistvideo-novideo"],style:{width:"480px"}},{type:"loading"},{type:"error"},{if:function(){return"stock"==this.options.controls},then:{type:"video",style:{position:"absolute"}},else:{type:"video",style:{position:"absolute",display:"none"}}}]}},videocontainer:{type:"video"},controls:{if:function(){return!!(this.player&&this.player.api&&this.player.api.play)},then:{type:"container",classes:["mistvideo-column"],children:[{type:"progress",classes:["mistvideo-pointer"]},{type:"container",classes:["mistvideo-main","mistvideo-padding","mistvideo-row","mistvideo-background"],children:[{type:"play",classes:["mistvideo-pointer"]},{type:"currentTime"},{type:"totalTime"},{type:"container",classes:["mistvideo-align-right"],children:[{type:"container",children:[{type:"container",classes:["mistvideo-volume_container"],children:[{type:"volume",mode:"horizontal",size:{height:22}}]},{type:"speaker",classse:["mistvideo-pointer"],style:{"margin-left":"-2px"}}]},{if:function(){return"size"in this&&this.size.width>200||!this.info.hasVideo||"audio"==this.source.type.split("/")[1]},then:{type:"container",children:[{type:"loop",classes:["mistvideo-pointer"]},{type:"fullscreen",classes:["mistvideo-pointer"]}]}},{type:"hoverWindow",mode:"pos",transition:{hide:"right: -1000px; bottom: 44px;",show:"right: 5px;",viewport:"right: 0; left: 0; bottom: 0; top: -1000px"},button:{type:"settings"},window:{type:"submenu"}}]}]}]},else:{if:function(){return!(!this.player||!this.player.api)},then:{type:"hoverWindow",mode:"pos",transition:{hide:"right: -1000px; bottom: 44px;",show:"right: 2.5px;",viewport:"right: 0; left: -1000px; bottom: 0; top: -1000px"},style:{right:"5px",left:"auto"},button:{type:"settings",classes:["mistvideo-background","mistvideo-padding"]},window:{type:"submenu"}}}},submenu:{type:"container",style:{width:"80%",maxWidth:"25em",zIndex:2},classes:["mistvideo-padding","mistvideo-column","mistvideo-background"],children:[{type:"tracks"},{if:function(){return"size"in this&&this.size.width<=200},then:{type:"container",classes:["mistvideo-center"],children:[{type:"loop",classes:["mistvideo-pointer"]},{type:"fullscreen",classes:["mistvideo-pointer"]}]}}]},placeholder:{type:"container",classes:["mistvideo","mistvideo-delay-display"],children:[{type:"placeholder"},{type:"loading"},{type:"error"}]},secondaryVideo:function(e){return{type:"hoverWindow",classes:["mistvideo"],mode:"pos",transition:{hide:"left: 10px; bottom: -40px;",show:"bottom: 10px;"},button:{type:"container",children:[{type:"video"}]},window:{type:"switchVideo",classes:["mistvideo-controls","mistvideo-padding","mistvideo-background"],containers:e}}}},css:{skin:misthost+"/skins/default.css"},icons:{blueprints:{play:{size:45,svg:''},largeplay:{size:45,svg:''},pause:{size:45,svg:''},speaker:{size:45,svg:''},volume:{size:{width:100,height:45},svg:function(){var e=MistUtil.createUnique();return''}},muted:{size:45,svg:''},fullscreen:{size:45,svg:''},loop:{size:45,svg:''},settings:{size:45,svg:''},loading:{size:100,svg:''},timeout:{size:25,svg:function(e){e&&e.delay||(e={delay:10});var t=e.delay,i=MistUtil.createUnique();return''}},popout:{size:45,svg:''},switchvideo:{size:45,svg:''}}},blueprints:{container:function(){return document.createElement("div")},video:function(){var e=this;return MistUtil.event.addListener(e.video,"contextmenu",function(t){t.preventDefault(),e.container.setAttribute("data-show-submenu",""),e.container.removeAttribute("data-hidecursor");var i=function(){e.container.removeAttribute("data-show-submenu"),e.container.removeEventListener("mouseout",i)};MistUtil.event.addListener(e.container,"mouseout",i)}),e.video.hideTimer=!1,e.video.hideCursor=function(){this.hideTimer&&clearTimeout(this.hideTimer),this.hideTimer=e.timers.start(function(){e.container.setAttribute("data-hidecursor","");var t=e.container.querySelector(".mistvideo-controls");t&&t.parentNode.setAttribute("data-hidecursor","")},3e3)},MistUtil.event.addListener(e.video,"mousemove",function(){e.container.removeAttribute("data-hidecursor");var t=e.container.querySelector(".mistvideo-controls");t&&t.parentNode.removeAttribute("data-hidecursor"),e.video.hideCursor()}),MistUtil.event.addListener(e.video,"mouseout",function(){e.video.hideTimer&&e.timers.stop(e.video.hideTimer)}),e.options.autoplay&&MistUtil.event.addListener(e.video,"canplay",function(){if(e.player.api.paused){var t=e.player.api.play();t&&t.catch(function(t){if(!e.destroyed&&(e.log("Autoplay failed. Retrying with muted audio.."),e.info.hasVideo)){e.player.api.muted=!0,MistUtil.event.send("volumechange",null,e.video);var i=e.player.api.play();i&&i.catch(function(){if(!e.destroyed){e.log("Autoplay failed even with muted video. Unmuting and showing play button."),e.player.api.muted=!1;var t=e.skin.icons.build("largeplay",150);MistUtil.class.add(t,"mistvideo-pointer"),e.container.appendChild(t),MistUtil.event.addListener(t,"click",function(){e.player.api.paused&&e.player.api.play()});var i=function(){e.container.removeChild(t),e.video.removeEventListener("play",i)};MistUtil.event.addListener(e.video,"play",i)}}).then(function(){if(!e.destroyed){e.log("Autoplay worked! Video will be unmuted on mouseover if the page has been interacted with.");var t=e.skin.icons.build("muted",100);MistUtil.class.add(t,"mistvideo-pointer"),e.container.appendChild(t),MistUtil.event.addListener(t,"click",function(){e.player.api.muted=!1,e.container.removeChild(t)});var i=!1,r=function(){i=!0,document.body.removeEventListener("click",r)};MistUtil.event.addListener(document.body,"click",r,e.video);var n=function(){i&&(e.player.api.muted=!1,e.video.removeEventListener("mouseenter",n),e.log("Re-enabled sound"))};MistUtil.event.addListener(e.video,"mouseenter",n);var a=function(){e.video.muted||(e.container.removeChild(t),e.video.removeEventListener("volumechange",a),document.body.removeEventListener("click",r),e.video.removeEventListener("mouseenter",n))};MistUtil.event.addListener(e.video,"volumechange",a)}})}})}}),this.video},videocontainer:function(){return this.UI.buildStructure(this.skin.structure.videocontainer)},secondaryVideo:function(e){e||(e={}),e.options||(e.options={});var t=this;"secondary"in t||(t.secondary=[]);var i=MistUtil.object.extend(e.options,t.options,!0);t.secondary.push(i);var r={primary:t,secondary:!1};return i.target=document.createElement("div"),i.callback=function(e){i.MistVideo=e,r.secondary=e,e.player.api.muted=!0,e.player.api.loop=!1;for(var n=i.target.querySelectorAll(".controls"),a=0;a30)e.player.api.pausedesync=!0,e.player.api.currentTime=this.currentTime,e.log("Re-syncing with main video by seeking (desync: "+t+"s)");else if(i>.01){var r=.1;i<1&&(r=.05),(r=1+r*Math.sign(t))!=e.player.api.playbackRate&&e.log("Re-syncing by changing the playback rate (desync: "+Math.round(1e3*t)+"ms, rate: "+r+")"),e.player.api.playbackRate=r}else 1!=e.player.api.playbackRate&&(e.player.api.playbackRate=1,e.log("Sync with main video achieved (desync: "+Math.round(1e3*t)+"ms)"))}},i.target),MistUtil.event.addListener(e.video,"seeked",function(){e.player.api.pausedesync=!1})},i.skin=MistUtil.object.extend({},t.skin,!0),i.skin.structure.main=MistUtil.object.extend({},t.skin.structure.secondaryVideo(r)),mistPlay(t.stream,i),i.target},switchVideo:function(e){var t=document.createElement("div");return t.appendChild(this.skin.icons.build("switchvideo")),MistUtil.event.addListener(t,"click",function(){var t=e.containers.primary,i=e.containers.secondary;function r(e,t){if(e.video.currentTarget==t)return e.video;if(e.secondary)for(var i=0;i .outer_window:not([data-hidecursor]) > .inner_window { "+e.transition.show+" }\n.hover_window_container > .outer_window { "+e.transition.viewport+" }\n.hover_window_container > .outer_window > .inner_window { "+e.transition.hide+" }")),t.classes.push(e.mode),this.UI.buildStructure(t)},draggable:function(e){var t=this.skin.blueprints.container(e),i=this,r=this.skin.icons.build("fullscreen",16);t.appendChild(r),r.style.alignSelf="flex-end",r.style.position="absolute",r.style.cursor="move";var n={},a=function(e){t.style.left=e.clientX-n.x+"px",t.style.top=e.clientY-n.y+"px"},s=function(e){window.removeEventListener("mousemove",a),window.removeEventListener("click",s),MistUtil.event.addListener(r,"click",o)},o=function(e){e.stopPropagation(),r.removeEventListener("click",o),n.x=i.container.getBoundingClientRect().left-(t.getBoundingClientRect().left-e.clientX),n.y=i.container.getBoundingClientRect().top-(t.getBoundingClientRect().top-e.clientY),t.style.position="absolute",t.style.right="auto",t.style.bottom="auto",i.container.appendChild(t),a(e),MistUtil.event.addListener(window,"mousemove",a,t),MistUtil.event.addListener(window,"click",s,t)};return MistUtil.event.addListener(r,"click",o),t},progress:function(){var e=document.createElement("div"),t=document.createElement("div");e.appendChild(t),t.kids={},t.kids.bar=document.createElement("div"),t.kids.bar.className="bar",t.appendChild(t.kids.bar);var i=this.video,r=this.player.api,n=this;t.updateBar=function(e){if(this.kids.bar){if(!isFinite(r.duration))return void(this.kids.bar.style.display="none");this.kids.bar.style.display="",w=Math.min(1,Math.max(0,this.time2perc(e))),this.kids.bar.style.width=100*w+"%"}},t.time2perc=function(e){if(!isFinite(r.duration))return 0;var t=0;if("live"==n.info.type){var i=.001*n.info.meta.buffer_window;t=(e-r.duration+i)/i}else t=e/r.duration;return Math.min(1,Math.max(0,t))},t.buildBuffer=function(e,t){var i=document.createElement("div");return i.className="buffer",i.style.left=100*this.time2perc(e)+"%",i.style.width=100*(this.time2perc(t)-this.time2perc(e))+"%",i},t.updateBuffers=function(e){for(var t=this.querySelectorAll(".buffer"),i=0;i.5?(r.right=100*(1-i)+"%",a.triangle.setMode("bottom","right")):(r.left=100*i+"%",a.triangle.setMode("bottom","left")),a.setPos(r)}else a.style.opacity=0},MistUtil.event.addListener(e,"mousemove",function(e){t.moveTooltip(e)});var s=!1;return MistUtil.event.addListener(e,"mousedown",function(i){if(1==i.which){s=!0,t.updateBar(t.getPos(i));var r=MistUtil.event.addListener(document,"mousemove",function(e){t.updateBar(t.getPos(e)),t.moveTooltip(e)},t),n=MistUtil.event.addListener(document,"mouseup",function(i){1==i.which&&(s=!1,MistUtil.event.removeListener(r),MistUtil.event.removeListener(n),a.style.opacity=0,(!i.path||MistUtil.array.indexOf(i.path,e)<0)&&t.seek(i))},t)}}),e},play:function(){var e=this,t=document.createElement("div");t.appendChild(this.skin.icons.build("play")),t.appendChild(this.skin.icons.build("pause")),t.setState=function(e){this.setAttribute("data-state",e)},t.setState("paused");var i=this.video;return MistUtil.event.addListener(i,"playing",function(){t.setState("playing")},t),MistUtil.event.addListener(i,"pause",function(){t.setState("paused")},t),MistUtil.event.addListener(i,"paused",function(){t.setState("paused")},t),MistUtil.event.addListener(i,"ended",function(){t.setState("paused")},t),MistUtil.event.addListener(t,"click",function(){e.player.api.error&&e.player.api.load(),e.player.api.paused?e.player.api.play():e.player.api.pause()}),e.player.api&&MistUtil.event.addListener(e.video,"click",function(){e.player.api.paused?e.player.api.play():MistUtil.isTouchDevice()||e.player.api.pause()},t),t},speaker:function(){var e=!1,t=this.info.meta.tracks;for(var i in t)if("audio"==t[i].type){e=!0;break}if(!e)return!1;var r=this.skin.icons.build("speaker"),n=this,a=this.video;return MistUtil.event.addListener(a,"volumechange",function(){n.player.api.volume&&!n.player.api.muted?MistUtil.class.remove(r,"off"):MistUtil.class.add(r,"off")},r),MistUtil.event.addListener(r,"click",function(e){n.player.api.muted=!n.player.api.muted}),r},volume:function(e){var t=!1,i=this.info.meta.tracks;for(var r in i)if("audio"==i[r].type){t=!0;break}if(!t)return!1;var n=document.createElement("div"),a=this.skin.icons.build("volume","size"in e&&e.size);n.appendChild(a);var s=this;a.mode="mode"in e?e.mode:"vertical","vertical"==a.mode&&(a.style.transform="rotate(90deg)"),a.margin={start:.15,end:.1};var o=this.video;a.set=function(e){100!=(e=100-100*Math.pow(1-e/100,2))&&0!=e&&(e=100*this.addPadding(e/100));for(var t=a.querySelectorAll(".slider"),i=0;ii(t)?1:i(e)t[i]?1:t[e]1&&"player"in e&&"api"in e.player&&("setTrack"in e.player.api||"setTracks"in e.player.api||"setSource"in e.player.api)){var b=document.createElement("select");b.title="Select another "+l+" track",r[l]=b,b.trackType=l,m.appendChild(b);var M=g(c[MistUtil.object.keys(c)[0]].same);if(M.length)(C=document.createElement("span")).className="mistvideo-description",m.appendChild(C),m.appendChild(document.createTextNode(M.join(" ")));var k=MistUtil.object.keys(c,!0);for(var u in k){var w=c[k[u]],U=document.createElement("option");b.appendChild(U),U.value=w.trackid,MistUtil.object.keys(w.different).length?U.appendChild(document.createTextNode(g(w.different).join(" "))):U.appendChild(document.createTextNode("Track "+(Number(u)+1)))}if("subtitle"==l){if(MistUtil.event.addListener(b,"change",function(){try{localStorage.mistSubtitleLanguage=c[this.value].lang}catch(e){}if(""!=this.value){var t=MistUtil.object.extend({},c[this.value]);t.label=g(t.describe).join(" "),t.src=MistUtil.http.url.addParam(d,{track:this.value}),e.player.api.setSubtitle(t)}else e.player.api.setSubtitle()}),"localStorage"in window&&null!=localStorage&&"mistSubtitleLanguage"in localStorage)for(var u in c)if(c[u].lang==localStorage.mistSubtitleLanguage){b.value=u;var x=document.createEvent("Event");x.initEvent("change"),b.dispatchEvent(x);break}}else MistUtil.event.addListener(b,"change",function(){this.trackType in n&&(n[this.trackType].checked=!0),a(this.trackType,this.value)}),"live"==e.info.type?b.value=MistUtil.object.keys(c).pop():b.value=MistUtil.object.keys(c).shift(),MistUtil.event.addListener(e.video,"playerUpdate_trackChanged",function(t){t.message.type==l&&(b.value=t.message.trackid,e.log("Player selected "+l+" track with id "+t.message.trackid))},b)}else{var C;(C=document.createElement("span")).className="mistvideo-description",m.appendChild(C),C.appendChild(document.createTextNode(g(c[y[0]].same).join(" ")))}}}},text:function(e){var t=document.createElement("span");return t.appendChild(document.createTextNode(e.text)),t},placeholder:function(){var e=document.createElement("div"),t=this.calcSize();return e.style.width=t.width+"px",e.style.height=t.height+"px",this.options.poster&&(e.style.background="url('"+this.options.poster+"') no-repeat 50%/contain"),e},timeout:function(e){if(!(!1 in e)){var t="delay"in e?e.delay:5,i=this.skin.icons.build("timeout",!1,{delay:t});return i.timeout=this.timers.start(function(){e.function()},1e3*t),i}},polling:function(){var e=document.createElement("div"),t=this.skin.icons.build("loading");return e.appendChild(t),e},loading:function(){var e=this,t=this.skin.icons.build("loading",50);if("player"in e&&e.player.api){var i=!1;function r(t){e.container.setAttribute("data-loading",t.type),function t(){i||(i=e.timers.start(function(){i=!1,e.monitor.vars&&e.monitor.vars.score>=.999?n():t()},1e3))}()}function n(){e.container.removeAttribute("data-loading"),i&&e.timers.stop(i),i=!1}var a=["waiting","seeking","stalled"];for(var s in a)MistUtil.event.addListener(e.video,a[s],function(t){!this.paused&&"container"in e&&r(t)},t);a=["seeked","playing","canplay","paused"];for(var s in a)MistUtil.event.addListener(e.video,a[s],function(t){"container"in e&&n()},t),MistUtil.event.addListener(e.video,"progress",function(t){"container"in e&&"monitor"in e&&"vars"in e.monitor&&"score"in e.monitor.vars&&e.monitor.vars.score>.99&&n()},t)}return t},error:function(){var e=this,t=document.createElement("div");t.message=function(t,i,r){MistUtil.empty(this);var n=document.createElement("div");if(n.className="message",this.appendChild(n),!r.polling&&!r.passive){var a=document.createElement("h3");n.appendChild(a),a.appendChild(document.createTextNode("The player has encountered a problem"))}var s=document.createElement("p");if(n.appendChild(s),n.update=function(e){MistUtil.empty(s),s.appendChild(document.createTextNode(e))},t){e.info.on_error&&(t=e.info.on_error.replace(/\/,t)),n.update(t);var o=document.createElement("p");if(o.className="details mistvideo-description",n.appendChild(o),i)o.appendChild(document.createTextNode(i));else if("decodingIssues"in e.skin.blueprints){if("player"in e&&"api"in e.player){if(i=[],void 0!==e.player.api.currentTime&&i.push(["Current video time:",MistUtil.format.time(e.player.api.currentTime)]),"video"in e&&"getVideoPlaybackQuality"in e.video){var l=e.video.getVideoPlaybackQuality();"droppedVideoFrames"in l&&"totalVideoFrames"in l&&l.totalVideoFrames&&i.push(["Frames dropped/total:",MistUtil.format.number(l.droppedVideoFrames)+"/"+MistUtil.format.number(l.totalVideoFrames)]),"corruptedVideoFrames"in l&&l.corruptedVideoFrames&&i.push(["Corrupted frames:",MistUtil.format.number(l.corruptedVideoFrames)])}i.push({0:["NETWORK EMPTY:","not yet initialized"],1:["NETWORK IDLE:","resource selected, but not in use"],2:["NETWORK LOADING:","data is being downloaded"],3:["NETWORK NO SOURCE:","could not locate source"]}[e.video.networkState]);if(i.push({0:["HAVE NOTHING:","no information about ready state"],1:["HAVE METADATA:","metadata has been loaded"],2:["HAVE CURRENT DATA:","data for the current playback position is available, but not for the next frame"],3:["HAVE FUTURE DATA:","data for current and next frame is available"],4:["HAVE ENOUGH DATA:","can start playing"]}[e.video.readyState]),!r.passive){var c=document.createElement("table");for(var d in i){var u=document.createElement("tr");for(var p in c.appendChild(u),i[d]){var h=document.createElement("td");u.appendChild(h),h.appendChild(document.createTextNode(i[d][p]))}}o.appendChild(c)}}var m,f=document.createElement("div");f.className="mistvideo-container mistvideo-column",f.style.textAlign="left",f.style.marginBottom="1em",n.appendChild(f),(m=e.UI.buildStructure({type:"forcePlayer"}))&&f.appendChild(m),(m=e.UI.buildStructure({type:"forceType"}))&&f.appendChild(m)}}return n};var i,r=!1,n=!1,a={};if(this.showError=function(s,o){o||(o={softReload:!0,reload:!0,nextCombo:!!e.info,polling:!1,passive:!1});var l=o.type?o.type:s;if(!(l in a)){if(!0===o.reload&&(e.options.reloadDelay&&!isNaN(Number(e.options.reloadDelay))?o.reload=Number(e.options.reloadDelay):o.reload=10),o.passive){if(!0===r)return;if(r)return i.update(s),void(n=(new Date).getTime());t.setAttribute("data-passive","")}else t.removeAttribute("data-passive");r=!o.passive||"passive",n=(new Date).getTime(),this.log(s,"error");var c=t.message(s,!1,o);i=c;var d=document.createElement("div");if(d.className="mistvideo-buttoncontainer",c.appendChild(d),MistUtil.empty(d),o.softReload){var u={type:"button",label:"Reload video",onclick:function(){e.player.api.load()}};isNaN(o.softReload+"")||(u.delay=o.softReload),d.appendChild(e.UI.buildStructure(u))}if(o.reload){u={type:"button",label:"Reload player",onclick:function(){e.reload()}};isNaN(o.reload+"")||(u.delay=o.reload),d.appendChild(e.UI.buildStructure(u))}if(o.nextCombo){u={type:"button",label:"Next source",onclick:function(){e.nextCombo()}};isNaN(o.nextCombo+"")||(u.delay=o.nextCombo),d.appendChild(e.UI.buildStructure(u))}if(o.ignore){u={type:"button",label:"Ignore",onclick:function(){this.clearError(),a[l]=!0}};isNaN(o.ignore+"")||(u.delay=o.ignore),d.appendChild(e.UI.buildStructure(u))}o.polling&&d.appendChild(e.UI.buildStructure({type:"polling"})),MistUtil.class.add(t,"show"),"container"in e&&e.container.removeAttribute("data-loading")}},t.clear=function(i){for(var n=t.querySelectorAll("svg.icon.timeout"),a=0;a=t.scrollHeight-5}),r.logs)o(r.logs[l].time,r.logs[l].message,r.logs[l].data);return MistUtil.event.addListener(r.options.target,"log",function(e){if(e.message){var t={};r.player&&r.player.api&&"currentTime"in r.player.api&&(t.currentTime=r.player.api.currentTime),o(new Date,e.message,t)}},e),MistUtil.event.addListener(r.options.target,"error",function(e){if(e.message){var t={type:"error"};r.player&&r.player.api&&"currentTime"in r.player.api&&(t.currentTime=r.player.api.currentTime),o(new Date,e.message,t)}},e),e},decodingIssues:function(){if(this.player){var e=this,t=document.createElement("div");if(e.player.api){var i={"Playback score":function(){if("monitor"in e){if("vars"in e.monitor&&"score"in e.monitor.vars&&e.monitor.vars.values.length){var t=e.monitor.vars.values[e.monitor.vars.values.length-1];if("score"in t){Math.min(1,Math.max(0,t.score));return{x:t.clock,y:Math.min(1,Math.max(0,t.score)),options:{y:{min:0,max:1},x:{count:10}},val:Math.round(100*Math.min(1,Math.max(0,e.monitor.vars.score)))+"%"}}}return 0}},"Corrupted frames":function(){if(e.player.api&&"getVideoPlaybackQuality"in e.player.api){var t=e.player.api.getVideoPlaybackQuality();if(t)return t.corruptedVideoFrames?{val:MistUtil.format.number(t.corruptedVideoFrames),x:.001*(new Date).getTime(),y:t.corruptedVideoFrames,options:{x:{count:10}}}:0}},"Dropped frames":function(){if(e.player.api&&"getVideoPlaybackQuality"in e.player.api){var t=e.player.api.getVideoPlaybackQuality();if(t)return t.droppedVideoFrames?MistUtil.format.number(t.droppedVideoFrames):0}},"Total frames":function(){if(e.player.api&&"getVideoPlaybackQuality"in e.player.api){var t=e.player.api.getVideoPlaybackQuality();if(t)return MistUtil.format.number(t.totalVideoFrames)}},"Decoded audio":function(){if(e.player.api)return MistUtil.format.bytes(e.player.api.webkitAudioDecodedByteCount)},"Decoded video":function(){if(e.player.api)return MistUtil.format.bytes(e.player.api.webkitVideoDecodedByteCount)},"Negative acknowledgements":function(){if(e.player.api)return MistUtil.format.number(e.player.api.nackCount)},"Picture losses":function(){return MistUtil.format.number(e.player.api.pliCount)},"Packets lost":function(){return MistUtil.format.number(e.player.api.packetsLost)},"Packets received":function(){return MistUtil.format.number(e.player.api.packetsReceived)},"Bytes received":function(){if(e.player.api)return MistUtil.format.bytes(e.player.api.bytesReceived)}},r=[];for(var n in i)void 0!==i[n]()&&a({name:n,function:i[n]});t.update=function(){for(var i in r)r[i]();e.timers.start(function(){t.update()},1e3)},t.update()}return t}function a(e){var i=document.createElement("label");t.appendChild(i),i.style.display="none";var n=document.createElement("span");i.appendChild(n),n.appendChild(document.createTextNode(e.name+":")),n.className="mistvideo-description";var a=document.createElement("span");i.appendChild(a);var s=document.createTextNode(e.value?e.value:"");a.appendChild(s);var o=document.createElement("span");a.appendChild(o),i.set=function(e){if(0!==e&&(this.style.display=""),"object"==typeof e){if("val"in e&&(s.nodeValue=e.val,a.className="value"),o.children.length)return(t=o.children[0]).addData(e);var t=MistUtil.createGraph({x:[e.x],y:[e.y]},e.options);return o.style.display="",MistUtil.empty(o),o.appendChild(t)}return s.nodeValue=e},t.appendChild(i),r.push(function(){var t=e.function();i.set(t)})}},forcePlayer:function(){var e=document.createElement("label");e.title="Reload MistVideo and use the selected player";var t=this,i=document.createElement("span");e.appendChild(i),i.appendChild(document.createTextNode("Force player: "));var r=document.createElement("select");e.appendChild(r);var n=document.createElement("option");for(var a in r.appendChild(n),n.value="",n.appendChild(document.createTextNode("Automatic")),mistplayers){n=document.createElement("option");r.appendChild(n),n.value=a,n.appendChild(document.createTextNode(mistplayers[a].name))}return this.options.forcePlayer&&(r.value=this.options.forcePlayer),MistUtil.event.addListener(r,"change",function(){t.options.forcePlayer=""!=this.value&&this.value,t.options.forcePlayer!=t.playerName&&t.reload()}),e},forceType:function(){if(this.info){var e=document.createElement("label");e.title="Reload MistVideo and use the selected protocol";var t=this,i=document.createElement("span");e.appendChild(i),i.appendChild(document.createTextNode("Force protocol: "));var r=document.createElement("select");e.appendChild(r);var n=document.createElement("option");r.appendChild(n),n.value="",n.appendChild(document.createTextNode("Automatic"));var a={};for(var s in t.info.source){var o=t.info.source[s];if(!(o.type in a)){a[o.type]=1;n=document.createElement("option");r.appendChild(n),n.value=o.type,n.appendChild(document.createTextNode(MistUtil.format.mime2human(o.type)))}}return this.options.forceType&&(r.value=this.options.forceType),MistUtil.event.addListener(r,"change",function(){t.options.forceType=""!=this.value&&this.value,t.source&&t.options.forceType==t.source.type||t.reload()}),e}},forceSource:function(){var e=document.createElement("label");e.title="Reload MistVideo and use the selected source";var t=this,i=document.createElement("span");e.appendChild(i),i.appendChild(document.createTextNode("Force source: "));var r=document.createElement("select");e.appendChild(r);var n=document.createElement("option");for(var a in r.appendChild(n),n.value="",n.appendChild(document.createTextNode("Automatic")),t.info.source){var s=t.info.source[a];n=document.createElement("option");r.appendChild(n),n.value=a,n.appendChild(document.createTextNode(s.url+" ("+MistUtil.format.mime2human(s.type)+")"))}return this.options.forceSource&&(r.value=this.options.forceSource),MistUtil.event.addListener(r,"change",function(){t.options.forceSource=""!=this.value&&this.value,t.options.forceSource!=t.source.index&&t.reload()}),e}}},MistSkins.dev.css={skin:misthost+"/skins/dev.css"},MistSkins.dev.structure.submenu=MistUtil.object.extend({},MistSkins.default.structure.submenu,!0),MistSkins.dev.structure.submenu.type="draggable",MistSkins.dev.structure.submenu.style.width="25em",MistSkins.dev.structure.submenu.children.unshift({type:"container",style:{flexShrink:1},classes:["mistvideo-column"],children:[{if:function(){return this.playerName&&this.source},then:{type:"container",classes:["mistvideo-description"],style:{display:"block"},children:[{type:"playername",style:{display:"inline"}},{type:"text",text:"is playing",style:{margin:"0 0.2em"}},{type:"mimetype"}]}},{type:"log"},{type:"decodingIssues"},{type:"container",classes:["mistvideo-column","mistvideo-devcontrols"],style:{"font-size":"0.9em"},children:[{type:"text",text:"Player control"},{type:"container",classes:["mistvideo-devbuttons"],style:{"flex-wrap":"wrap"},children:[{if:function(){return!(!this.player||!this.player.api)},then:{type:"button",title:"Reload the video source",label:"video.load();",onclick:function(){this.player.api.load()}}},{type:"button",title:"Build MistVideo again",label:"MistVideo.reload();",onclick:function(){this.reload()}},{type:"button",title:"Switch to the next available player and source combination",label:"MistVideo.nextCombo();",onclick:function(){this.nextCombo()}}]},{type:"forcePlayer"},{type:"forceType"}]}]});var mistplayers={};function MistPlayer(){}function mistPlay(e,t){return new MistVideo(e,t)}function MistVideo(e,t){var i=this;function r(e){if("meta"in e&&"tracks"in e.meta){var t=e.meta.tracks;for(var i in t)if("video"==t[i].type)return!0}return!1}function n(e){if(i.info=e,i.info.updated=new Date,MistUtil.event.send("haveStreamInfo",e,i.options.target),i.log("Stream info was loaded succesfully."),"error"in e){var n=data.error;return"on_error"in e&&(i.log(n),n=data.on_error),void i.showError(n,{reload:!0})}if(i.calcSize=function(e){e||(e={width:!1,height:!1});var r=e.width||!!("width"in t&&t.width)&&t.width,n=e.height||!!("height"in t&&t.height)&&t.height;if("source"in this.info)if(this.info.hasVideo&&"audio"!=this.source.type.split("/")[1]){if(!r||!n){var a=i.info.width/i.info.height;if(r||n)r?n=r/a:r=n*a;else{var s="maxwidth"in t&&t.maxwidth?t.maxwidth:window.innerWidth,o="maxheight"in t&&t.maxheight?t.maxheight:window.innerHeight;r=i.info.width,n=i.info.height;function l(e){r/=e,n/=e}r<426&&l(r/426),n<240&&l(n/240),s&&r>s&&l(r/s),o&&n>o&&l(n/o)}}}else r||(r=480),n||(n=42);else r=640,n=480;return this.size={width:Math.round(r),height:Math.round(n)},this.size},e.hasVideo=r(e),"live"==e.type){var a=0;for(var s in i.info.meta.tracks)a=Math.max(a,i.info.meta.tracks[s].lastms);e.lastms=a}i.choosePlayer()?(i.player=new mistplayers[i.playerName].player,i.player.onreadylist=[],i.player.onready=function(e){this.onreadylist.push(e)},i.player.build(i,function(e){if(i.container.removeAttribute("data-loading"),i.video=e,"api"in i.player){i.monitor={MistVideo:i,delay:1,averagingSteps:20,threshold:function(){return"webrtc"==this.MistVideo.source.type?.97:.75},init:function(){if(!this.vars||!this.vars.active){this.MistVideo.log("Enabling monitor"),this.vars={values:[],score:!1,active:!0};var e=this;!function t(){e.vars&&e.vars.active&&(e.vars.timer=e.MistVideo.timers.start(function(){var i=e.calcScore();!1!==i&&e.check(i)&&e.action(),t()},1e3*e.delay))}()}},destroy:function(){this.vars&&this.vars.active&&(this.MistVideo.log("Disabling monitor"),this.MistVideo.timers.stop(this.vars.timer),delete this.vars)},reset:function(){this.vars&&this.vars.active?(this.MistVideo.log("Resetting monitor"),this.vars.values=[]):this.init()},calcScore:function(){var e=this.vars.values;if(e.push(this.getValue()),e.length<=1)return!1;var t=this.valueToScore(e[0],e[e.length-1]);return e.length>this.averagingSteps&&e.shift(),t=Math.max(t,e[e.length-1].score),this.vars.score=t,t},valueToScore:function(e,t){var i=1;return"player"in this.MistVideo&&"api"in this.MistVideo.player&&"playbackRate"in this.MistVideo.player.api&&(i=this.MistVideo.player.api.playbackRate),(t.video-e.video)/(t.clock-e.clock)/i},getValue:function(){var e={clock:.001*(new Date).getTime(),video:this.MistVideo.player.api.currentTime};return this.vars.values.length&&(e.score=this.valueToScore(this.vars.values[this.vars.values.length-1],e)),e},check:function(e){return!(this.vars.values.length<.5*this.averagingSteps)&&(e=2))for(var u in l[o.inner].list)if(l[o.inner].current=u,!(c(o.inner)>=1)){a=l.source.list[l.source.current];var p=l.player.list[l.player.current],h=mistplayers[p];if(h.isMimeSupported(a.type)&&h.isBrowserSupported(a.type,a,i))return{player:p,source:a,source_index:l.source.current};t||i.log("Checking "+h.name+" with "+a.type+".. Nope.")}return!1},this.choosePlayer=function(){i.log("Checking available players..");var e=this.checkPlayer();if(!e)return!1;var t=mistplayers[e.player],r=e.source;return i.log("Found a working combo: "+t.name+" with "+r.type+" @ "+r.url),i.playerName=e.player,(r=MistUtil.object.extend({},r)).index=e.source_index,r.url=i.urlappend(r.url),i.source=r,MistUtil.event.send("playerChosen","Player/source combination selected",i.options.target),!0},i.calcSize=function(){return{width:640,height:480}},MistUtil.empty(i.options.target),new MistSkin(i),i.container=new MistUI(i,i.skin.structure.placeholder),i.options.target.appendChild(i.container),i.container.setAttribute("data-loading",""),"WebSocket"in window){!function e(){i.log("Opening stream status stream..");var a=i.options.host.replace(/^http/i,"ws"),s=new WebSocket(i.urlappend(a+"/json_"+encodeURIComponent(i.stream)+".js"));i.socket=s,s.die=!1,s.destroy=function(){this.die=!0,this.close()},s.onopen=function(e){this.wasConnected=!0},s.onclose=function(r){if(!this.die){if(this.wasConnected)return i.log("Reopening websocket.."),void e();i.showError("Connection failed: the media server may be offline.",{reload:30}),i.info||(MistUtil.event.send("initializeFailed",null,t.target),i.log("Initialization failed"))}},s.addEventListener("message",function(e){var t=JSON.parse(e.data);if(t||i.showError("Error while parsing stream status stream. Obtained: "+e.data.toString(),{reload:!0}),"error"in t){var a;switch(e=t.error,"on_error"in t&&(i.log(e),e=t.on_error),t.error){case"Stream is offline":i.info=!1;case"Stream is initializing":case"Stream is booting":case"Stream is waiting for data":case"Stream is shutting down":a={polling:!0};break;default:a={reload:!0}}i.showError(e,a)}else{if(!i.info)return void n(t);var s=function e(t,i){if(t==i)return!1;if("object"==typeof t&&void 0!==i){var r={};for(var n in t)if(!(MistUtil.array.indexOf(["lastms","hasVideo"],n)>=0)){var a=e(t[n],i[n]);a&&(r[n]=!0===a?[t[n],i[n]]:a)}for(var n in i)MistUtil.array.indexOf(["lastms","hasVideo"],n)>=0||n in t||(r[n]=[t[n],i[n]]);return!!MistUtil.object.keys(r).length&&r}return!0}(t,i.info);if(s){if("source"in s)return void("error"in i.info&&i.reload());i.info=MistUtil.object.extend(i.info,t),i.info.updated=new Date;var o=!1;for(var l in s)switch(l){case"meta":for(var c in s[l])switch(c){case"tracks":i.info.hasVideo=r(i.info),MistUtil.event.send("metaUpdate_tracks",t,i.video)}break;case"width":case"height":o=!0}o&&i.player.resize()}else i.log("Metachange: no differences detected")}})}()}else{var a=this.urlappend(t.host+"/json_"+encodeURIComponent(this.stream)+".js");this.log("Requesting stream info from "+a),MistUtil.http.get(a,function(e){i.destroyed||n(JSON.parse(e))},function(e){var r="Connection failed (failed to load "+a+")";i.showError(r,{reload:!0}),MistUtil.event.send("initializeFailed",null,t.target),i.log("Initialization failed")})}return this.unload=function(){if(!this.destroyed){for(var e in this.log("Unloading.."),this.destroyed=!0,this.timers.stop("all"),this.errorListeners){var t=this.errorListeners[e];if(t.src in MistUtil.scripts.list){var r=MistUtil.array.indexOf(MistUtil.scripts.list[t.src].subscribers);r>=0&&MistUtil.scripts.list[t.src].subscribers.splice(r,1)}}if("monitor"in i&&"destroy"in i.monitor&&i.monitor.destroy(),this.socket&&this.socket.destroy(),this.player&&this.player.api&&("pause"in this.player.api&&this.player.api.pause(),"setSource"in this.player.api&&this.player.api.setSource(""),"unload"in this.player.api))try{this.player.api.unload()}catch(n){}if(this.UI&&this.UI.elements)for(var e in this.UI.elements){var n=this.UI.elements[e];n.parentNode&&n.parentNode.removeChild(n)}this.video&&MistUtil.empty(this.video),"container"in this&&(MistUtil.empty(this.container),delete this.container),MistUtil.empty(this.options.target),delete this.video}},this.reload=function(){var e="player"in this&&"api"in this.player&&this.player.api.currentTime;if(this.unload(),i=mistPlay(this.stream,this.options),e&&"live"!=this.info.type){var t=function(){i.player&&i.player.api&&(i.player.api.currentTime=e),this.removeEventListener("initialized",t)};MistUtil.event.addListener(this.options.target,"initialized",t)}return i},this.nextCombo=function(){var e=!1;"player"in this&&"api"in this.player&&(e=this.player.api.currentTime);var t={source:this.source.index,player:this.playerName};if(!this.checkPlayer({startCombo:t},!0)){if(!this.checkPlayer({startCombo:!1},!0))return;t=!1}this.unload();var r=this.options;if(r.startCombo=t,i=mistPlay(this.stream,r),e&&isFinite(e)){var n=function(){"player"in i&&"api"in i.player&&(i.player.api.currentTime=e),this.removeEventListener("initialized",n)};MistUtil.event.addListener(r.target,"initialized",n)}},this.onPlayerBuilt=function(){},t.MistVideoObject&&(t.MistVideoObject.reference=this),this} \ No newline at end of file diff --git a/embed/min/skins/default.css b/embed/min/skins/default.css new file mode 100644 index 00000000..6ac59a8f --- /dev/null +++ b/embed/min/skins/default.css @@ -0,0 +1,92 @@ +.mistvideo{display:inline-block;position:relative;color:$stroke;font-family:sans-serif;background-color:#000;justify-content:center;align-items:center} +.mistvideo-controls{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.mistvideo.novideo{overflow:visible} +.mistvideo-video{overflow:hidden} +svg.icon.loading{z-index:-1;position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;opacity:0} +[data-loading]{position:relative} +[data-loading=stalled] svg.icon.loading{transition:opacity 0s 3s} +[data-loading] svg.icon.loading{z-index:2;opacity:1} +[data-loading-css] .mistvideo-controls{display:none} +[data-hidecursor],[data-hidecursor] *,[data-hidecursor] .mistvideo-pointer{cursor:none} +.mistvideo-error{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background-color:$background;align-items:center;justify-content:center;text-align:center;z-index:2;cursor:default;min-height:fit-content;min-width:fit-content} +.mistvideo-error.show{display:flex} +.mistvideo-error .message{max-width:80%} +.mistvideo-error .message .details table{text-align:left} +.mistvideo-controls button,.mistvideo-error button,.mistvideo-video:not(.video-js) button{color:$stroke;border:1px solid $semiFill;background-color:$background;margin:.25em;padding:.5em 1em;opacity:.5;cursor:pointer} +button:hover{opacity:1} +select{background-color:transparent;color:$stroke;border:none;margin:0 .5em;font-size:inherit;cursor:pointer;-ms-background-color:red} +select>option{background-color:$background} +.browser-edge select,.browser-safari select{border:1px solid $semiFill;border-top:none;border-left:none;margin-top:2px} +@keyframes spin{ +0%{transform:rotate(0)} +100%{transform:rotate(360deg)} +} +[data-fullscreen]{position:fixed;top:0;left:0;right:0;bottom:0;width:100%!important;height:100%!important} +video{display:block;flex-shrink:0} +table{color:inherit;font-size:inherit;font-style:inherit} +audio:not([controls]){display:block!important} +.mistvideo-padding{padding:5px 10px} +.mistvideo-pointer{cursor:pointer} +.description{color:$semiFill;font-size:.9em} +.mistvideo-container{display:flex;flex-wrap:nowrap} +.mistvideo-container.mistvideo{display:inline-flex;max-width:100%} +.mistvideo-container.mistvideo-row{flex-direction:row} +.mistvideo-container.mistvideo-column{flex-direction:column} +.mistvideo-container.mistvideo-center{justify-content:center} +.mistvideo-align-right{margin-left:auto;margin-right:0} +.hover_window_container.pos>.outer_window{position:absolute;pointer-events:none;overflow:hidden} +.hover_window_container.pos>.outer_window>.inner_window{position:absolute;pointer-events:all} +.hover_window_container:not(:hover)>.outer_window>.inner_window,.hover_window_container>.outer_window[data-hidecursor]>.inner_window{transition:all .5s ease-in .5s} +.outer_window>.inner_window{flex-grow:1} +.hover_window_container>.outer_window>.inner_window>*{flex-shrink:0} +.mistvideo-draggable{overflow:hidden} +.mistvideo-tooltip{position:absolute;background-color:$background;padding:.5em 1em;z-index:2} +:not(:hover)>.mistvideo-tooltip{transition:opacity .25s ease-in} +.mistvideo-tooltip .triangle{border:10px solid $background;position:absolute} +.mistvideo-tracks label{display:block} +.mistvideo-tracks label>span{margin-right:1em} +a{color:$accent} +.mistvideo-log .logs{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text} +.mistvideo-placeholder{max-width:100%;max-height:100%} +.mistvideo-topright{position:absolute;top:0;right:0} +.mistvideo-topleft{position:absolute;top:0;left:0} +.mistvideo-delay-display{animation:appear 1s;animation-iteration-count:1;animation-timing-function:steps(1,end)} +@keyframes appear{ +from{opacity:0} +to{opacity:1} +} +svg.icon{display:block;stroke-width:$strokeWidth;fill:none;stroke:none} +svg.icon .fill,svg.icon.fill{fill:$fill} +svg.icon .semiFill,svg.icon.semiFill{fill:$semiFill} +svg.icon .stroke,svg.icon.stroke{stroke:$stroke;vector-effect:non-scaling-stroke} +svg.icon.off .toggle .fill,svg.icon.off .toggle .semiFill,svg.icon.off .toggle.fill,svg.icon.off .toggle.semiFill{fill:none} +svg.icon .spin,svg.icon.spin{animation:spin 1.5s infinite linear;transform-origin:50% 50%} +.mistvideo{line-height:1.2;font-size:14.5px} +.mistvideo svg{margin:2.5px} +.mistvideo-background{background-color:$background} +.mistvideo-totalTime:before{content:'/';margin:.2em} +.mistvideo-progress{padding:10px 0;margin:-10px 0;z-index:2} +.mistvideo-progress>*{height:2px;background-color:$progressBackground;opacity:.95;position:relative} +.mistvideo-novideo .mistvideo-progress>*,.mistvideo-progress:hover>*{height:10px} +.mistvideo-progress:not(:hover)>*{transition:height .25s ease-in .5s} +.mistvideo-progress .bar{height:inherit;width:0;position:absolute;border-right:inherit;background-color:$accent;z-index:2} +.mistvideo-progress .buffer{height:inherit;width:0;position:absolute;background-color:$semiFill} +.mistvideo-progress .bar:after{content:'';border:5px solid $accent;border-radius:5px;position:absolute;right:-5px;top:50%;transform:translateY(-50%)} +.mistvideo-play[data-state=playing] svg.play{display:none} +.mistvideo-play[data-state=paused] svg.pause{display:none} +.mistvideo-main{align-items:center} +svg.icon.timeout{display:inline-block;height:1em;width:1em;margin:0;margin-right:.25em;vertical-align:top} +.mist.largeplay,.mist.muted{position:absolute;opacity:.5} +.mist.largeplay{top:50%;left:0;right:0;margin:auto;transform:translateY(-50%)} +.mist.muted{top:0;right:0;margin:1em} +.mistvideo-secondaryVideo{z-index:1;width:50%;height:50%} +.mistvideo-polling{display:inline-block;position:relative;width:25px;height:25px} +.mistvideo-polling svg.icon.loading{z-index:0;opacity:1} +.mistvideo[data-show-submenu] .mistvideo-submenu{right:5px} +.mistvideo[data-show-submenu] .mistvideo-controls{bottom:0} +.mistvideo-error[data-passive]{bottom:auto;left:auto;margin:.5em;padding:.5em} +.mistvideo-error[data-passive] .message{max-width:none} +.mistvideo-error .mistvideo-buttoncontainer{display:flex;flex-flow:row nowrap;justify-content:center} +.mistvideo-error .mistvideo-buttoncontainer .mistvideo-button{white-space:nowrap} +.browser-ie .mist.icon.loading{animation:spin 1.5s infinite linear;transform-origin:50% 50%} +.browser-ie .mist.icon.loading .spin{animation:none} \ No newline at end of file diff --git a/embed/min/skins/dev.css b/embed/min/skins/dev.css new file mode 100644 index 00000000..cbd7bb24 --- /dev/null +++ b/embed/min/skins/dev.css @@ -0,0 +1,116 @@ +.mistvideo{display:inline-block;position:relative;color:$stroke;font-family:sans-serif;background-color:#000;justify-content:center;align-items:center} +.mistvideo-controls{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none} +.mistvideo.novideo{overflow:visible} +.mistvideo-video{overflow:hidden} +svg.icon.loading{z-index:-1;position:absolute;top:0;left:0;right:0;bottom:0;margin:auto;opacity:0} +[data-loading]{position:relative} +[data-loading=stalled] svg.icon.loading{transition:opacity 0s 3s} +[data-loading] svg.icon.loading{z-index:2;opacity:1} +[data-loading-css] .mistvideo-controls{display:none} +[data-hidecursor],[data-hidecursor] *,[data-hidecursor] .mistvideo-pointer{cursor:none} +.mistvideo-error{display:none;position:absolute;top:0;left:0;right:0;bottom:0;background-color:$background;align-items:center;justify-content:center;text-align:center;z-index:2;cursor:default;min-height:fit-content;min-width:fit-content} +.mistvideo-error.show{display:flex} +.mistvideo-error .message{max-width:80%} +.mistvideo-error .message .details table{text-align:left} +.mistvideo-controls button,.mistvideo-error button,.mistvideo-video:not(.video-js) button{color:$stroke;border:1px solid $semiFill;background-color:$background;margin:.25em;padding:.5em 1em;opacity:.5;cursor:pointer} +button:hover{opacity:1} +select{background-color:transparent;color:$stroke;border:none;margin:0 .5em;font-size:inherit;cursor:pointer;-ms-background-color:red} +select>option{background-color:$background} +.browser-edge select,.browser-safari select{border:1px solid $semiFill;border-top:none;border-left:none;margin-top:2px} +@keyframes spin{ +0%{transform:rotate(0)} +100%{transform:rotate(360deg)} +} +[data-fullscreen]{position:fixed;top:0;left:0;right:0;bottom:0;width:100%!important;height:100%!important} +video{display:block;flex-shrink:0} +table{color:inherit;font-size:inherit;font-style:inherit} +audio:not([controls]){display:block!important} +.mistvideo-padding{padding:5px 10px} +.mistvideo-pointer{cursor:pointer} +.description{color:$semiFill;font-size:.9em} +.mistvideo-container{display:flex;flex-wrap:nowrap} +.mistvideo-container.mistvideo{display:inline-flex;max-width:100%} +.mistvideo-container.mistvideo-row{flex-direction:row} +.mistvideo-container.mistvideo-column{flex-direction:column} +.mistvideo-container.mistvideo-center{justify-content:center} +.mistvideo-align-right{margin-left:auto;margin-right:0} +.hover_window_container.pos>.outer_window{position:absolute;pointer-events:none;overflow:hidden} +.hover_window_container.pos>.outer_window>.inner_window{position:absolute;pointer-events:all} +.hover_window_container:not(:hover)>.outer_window>.inner_window,.hover_window_container>.outer_window[data-hidecursor]>.inner_window{transition:all .5s ease-in .5s} +.outer_window>.inner_window{flex-grow:1} +.hover_window_container>.outer_window>.inner_window>*{flex-shrink:0} +.mistvideo-draggable{overflow:hidden} +.mistvideo-tooltip{position:absolute;background-color:$background;padding:.5em 1em;z-index:2} +:not(:hover)>.mistvideo-tooltip{transition:opacity .25s ease-in} +.mistvideo-tooltip .triangle{border:10px solid $background;position:absolute} +.mistvideo-tracks label{display:block} +.mistvideo-tracks label>span{margin-right:1em} +a{color:$accent} +.mistvideo-log .logs{-webkit-user-select:text;-moz-user-select:text;-ms-user-select:text;user-select:text} +.mistvideo-placeholder{max-width:100%;max-height:100%} +.mistvideo-topright{position:absolute;top:0;right:0} +.mistvideo-topleft{position:absolute;top:0;left:0} +.mistvideo-delay-display{animation:appear 1s;animation-iteration-count:1;animation-timing-function:steps(1,end)} +@keyframes appear{ +from{opacity:0} +to{opacity:1} +} +svg.icon{display:block;stroke-width:$strokeWidth;fill:none;stroke:none} +svg.icon .fill,svg.icon.fill{fill:$fill} +svg.icon .semiFill,svg.icon.semiFill{fill:$semiFill} +svg.icon .stroke,svg.icon.stroke{stroke:$stroke;vector-effect:non-scaling-stroke} +svg.icon.off .toggle .fill,svg.icon.off .toggle .semiFill,svg.icon.off .toggle.fill,svg.icon.off .toggle.semiFill{fill:none} +svg.icon .spin,svg.icon.spin{animation:spin 1.5s infinite linear;transform-origin:50% 50%} +.mistvideo{line-height:1.2;font-size:14.5px} +.mistvideo svg{margin:2.5px} +.mistvideo-background{background-color:$background} +.mistvideo-totalTime:before{content:'/';margin:.2em} +.mistvideo-progress{padding:10px 0;margin:-10px 0;z-index:2} +.mistvideo-progress>*{height:2px;background-color:$progressBackground;opacity:.95;position:relative} +.mistvideo-novideo .mistvideo-progress>*,.mistvideo-progress:hover>*{height:10px} +.mistvideo-progress:not(:hover)>*{transition:height .25s ease-in .5s} +.mistvideo-progress .bar{height:inherit;width:0;position:absolute;border-right:inherit;background-color:$accent;z-index:2} +.mistvideo-progress .buffer{height:inherit;width:0;position:absolute;background-color:$semiFill} +.mistvideo-progress .bar:after{content:'';border:5px solid $accent;border-radius:5px;position:absolute;right:-5px;top:50%;transform:translateY(-50%)} +.mistvideo-play[data-state=playing] svg.play{display:none} +.mistvideo-play[data-state=paused] svg.pause{display:none} +.mistvideo-main{align-items:center} +svg.icon.timeout{display:inline-block;height:1em;width:1em;margin:0;margin-right:.25em;vertical-align:top} +.mist.largeplay,.mist.muted{position:absolute;opacity:.5} +.mist.largeplay{top:50%;left:0;right:0;margin:auto;transform:translateY(-50%)} +.mist.muted{top:0;right:0;margin:1em} +.mistvideo-secondaryVideo{z-index:1;width:50%;height:50%} +.mistvideo-polling{display:inline-block;position:relative;width:25px;height:25px} +.mistvideo-polling svg.icon.loading{z-index:0;opacity:1} +.mistvideo[data-show-submenu] .mistvideo-submenu{right:5px} +.mistvideo[data-show-submenu] .mistvideo-controls{bottom:0} +.mistvideo-error[data-passive]{bottom:auto;left:auto;margin:.5em;padding:.5em} +.mistvideo-error[data-passive] .message{max-width:none} +.mistvideo-error .mistvideo-buttoncontainer{display:flex;flex-flow:row nowrap;justify-content:center} +.mistvideo-error .mistvideo-buttoncontainer .mistvideo-button{white-space:nowrap} +.browser-ie .mist.icon.loading{animation:spin 1.5s infinite linear;transform-origin:50% 50%} +.browser-ie .mist.icon.loading .spin{animation:none} +.mistvideo-log{margin:.5em 0} +.mistvideo-log .logs{max-height:10em;min-height:5em;width:100%;padding:.2em 0;padding-right:1em;overflow-y:auto;overflow-x:hidden;font-size:.9em} +.mistvideo-log .logs table td{vertical-align:top;padding:0} +.mistvideo-log .logs .entry .message{margin:0 .2em} +.mistvideo-log .logs .entry.type-error{color:$accent} +.mistvideo-log .logs .counter,.mistvideo-log .logs .timestamp{color:$semiFill} +.mistvideo-log .logs .timestamp:before{content:'['} +.mistvideo-log .logs .timestamp:after{content:']'} +.mistvideo-log .logs .counter:before{content:'('} +.mistvideo-log .logs .counter:after{content:'\00d7)'} +.mistvideo-devbuttons{font-size:.9em} +.mistvideo-devbuttons button{font-size:.8em;margin:.1em;padding:.2em .4em} +.mistvideo-forcePlayer>span,.mistvideo-forceSource>span,.mistvideo-forceType>span{display:inline-block;width:7em} +.mistvideo-forcePlayer>select,.mistvideo-forceSource>select,.mistvideo-forceType>select{width:15em;min-width:auto} +.mistvideo-devcontrols{margin:.5em 0} +.mistvideo-decodingIssues>*{display:flex;width:50%;max-width:20em;flex-flow:row nowrap;align-items:flex-end;justify-content:space-between} +.mistvideo-decodingIssues>*>:last-child{margin-right:.5em} +.mistvideo-decodingIssues{display:flex;flex-flow:row wrap;justify-content:space-between} +.mistvideo-decodingIssues label{position:relative} +.mistvideo-decodingIssues label .value{font-size:.8em} +svg.icon.graph{position:absolute;right:0;top:0;bottom:0;width:6em} +select{border-radius:0} +input[type=checkbox]{margin:0;margin-right:.2em;border:1px solid $semiFill;border-radius:0;-webkit-appearance:none;-moz-appearance:none;-ms-appearance:none;appearance:none;width:.8em;height:.8em;color:inherit;position:relative;cursor:pointer} +input[type=checkbox]:checked:after{content:"\2713";position:absolute;bottom:-.2em;left:0;font-size:1.2em} \ No newline at end of file diff --git a/embed/min/wrappers/dashjs.js b/embed/min/wrappers/dashjs.js new file mode 100644 index 00000000..f5c0737e --- /dev/null +++ b/embed/min/wrappers/dashjs.js @@ -0,0 +1 @@ +mistplayers.dashjs={name:"Dash.js player",mimes:["dash/video/mp4"],priority:MistUtil.object.keys(mistplayers).length+1,isMimeSupported:function(t){return MistUtil.array.indexOf(this.mimes,t)==-1?false:true},isBrowserSupported:function(t,e,i){if(location.protocol!=MistUtil.http.url.split(e.url).protocol){i.log("HTTP/HTTPS mismatch for this source");return false}if(location.protocol=="file:"){i.log("This source ("+t+") won't load if the page is run via file://");return false}return"MediaSource"in window},player:function(){this.onreadylist=[]},scriptsrc:function(t){return t+"/dashjs.js"}};var p=mistplayers.dashjs.player;p.prototype=new MistPlayer;p.prototype.build=function(t,e){var i=this;this.onDashLoad=function(){if(t.destroyed){return}t.log("Building DashJS player..");var r=document.createElement("video");if("Proxy"in window){var a={get:{},set:{}};t.player.api=new Proxy(r,{get:function(t,e,i){if(e in a.get){return a.get[e].apply(t,arguments)}var r=t[e];if(typeof r==="function"){return function(){return r.apply(t,arguments)}}return r},set:function(t,e,i){if(e in a.set){return a.set[e].call(t,i)}return t[e]=i}});if(t.info.type=="live"){a.get.duration=function(){var e=0;if(this.buffered.length){e=this.buffered.end(this.buffered.length-1)}var i=((new Date).getTime()-t.player.api.lastProgress.getTime())*.001;return e+i+-1*t.player.api.liveOffset+45};a.set.currentTime=function(e){var i=e-t.player.api.duration;t.log("Seeking to "+MistUtil.format.time(e)+" ("+Math.round(i*-10)/10+"s from live)");t.video.currentTime=e};MistUtil.event.addListener(r,"progress",function(){t.player.api.lastProgress=new Date});t.player.api.lastProgress=new Date;t.player.api.liveOffset=0}}else{i.api=r}if(t.options.autoplay){r.setAttribute("autoplay","")}if(t.options.loop&&t.info.type!="live"){r.setAttribute("loop","")}if(t.options.poster){r.setAttribute("poster",t.options.poster)}if(t.options.controls=="stock"){r.setAttribute("controls","")}var s=dashjs.MediaPlayer().create();s.initialize(r,t.source.url,t.options.autoplay);i.dash=s;var o=["METRIC_ADDED","METRIC_CHANGED","METRICS_CHANGED","FRAGMENT_LOADING_STARTED","FRAGMENT_LOADING_COMPLETED","LOG","PLAYBACK_TIME_UPDATED","PLAYBACK_PROGRESS"];for(var n in dashjs.MediaPlayer.events){if(o.indexOf(n)<0){i.dash.on(dashjs.MediaPlayer.events[n],function(e){t.log("Player event fired: "+e.type)})}}t.player.setSize=function(t){this.api.style.width=t.width+"px";this.api.style.height=t.height+"px"};t.player.api.setSource=function(e){t.player.dash.attachSource(e)};t.player.api.setTrack=function(e,r){var a=MistUtil.tracks.parse(t.info.meta.tracks);if(!(e in a)||!(r in a[e])&&r!=0){t.log("Skipping trackselection of "+e+" track "+r+" because it does not exist");return}var s=i.dash.getBitrateInfoListFor("video").length-1;for(var o in t.info.meta.tracks){var n=t.info.meta.tracks[o];if(n.type==e){if(n.trackid==r){break}s--}}i.dash.setAutoSwitchQualityFor(e,false);i.dash.setFastSwitchEnabled(true);i.dash.setQualityFor(e,s)};i.dash.on("qualityChangeRendered",function(e){var r=i.dash.getBitrateInfoListFor("video").length-1;var a;for(var s in t.info.meta.tracks){var o=t.info.meta.tracks[s];if(o.type==e.mediaType){if(e.newQuality==r){a=o.trackid;break}r--}}MistUtil.event.send("playerUpdate_trackChanged",{type:e.mediaType,trackid:a},t.video)});MistUtil.event.addListener(r,"progress",function(e){if(t.container.getAttribute("data-loading")=="stalled"){t.container.removeAttribute("data-loading")}});i.api.unload=function(){i.dash.reset()};t.log("Built html");e(r)};if("dashjs"in window){this.onDashLoad()}else{var r=MistUtil.scripts.insert(t.urlappend(mistplayers.dashjs.scriptsrc(t.options.host)),{onerror:function(e){var i="Failed to load dashjs.js";if(e.message){i+=": "+e.message}t.showError(i)},onload:i.onDashLoad},t)}}; \ No newline at end of file diff --git a/embed/min/wrappers/flash_strobe.js b/embed/min/wrappers/flash_strobe.js new file mode 100644 index 00000000..78fbc56b --- /dev/null +++ b/embed/min/wrappers/flash_strobe.js @@ -0,0 +1 @@ +mistplayers.flash_strobe={name:"Strobe Flash media playback",mimes:["flash/10","flash/11","flash/7"],priority:MistUtil.object.keys(mistplayers).length+1,isMimeSupported:function(t){return this.mimes.indexOf(t)==-1?false:true},isBrowserSupported:function(t,e,i){if(MistUtil.http.url.split(e.url).protocol.slice(0,4)=="http"&&location.protocol!=MistUtil.http.url.split(e.url).protocol){i.log("HTTP/HTTPS mismatch for this source");return false}var r=0;try{var a=navigator.mimeTypes["application/x-shockwave-flash"].enabledPlugin;if(a.version){r=a.version.split(".")[0]}else{r=a.description.replace(/([^0-9\.])/g,"").split(".")[0]}}catch(t){}try{r=new ActiveXObject("ShockwaveFlash.ShockwaveFlash").GetVariable("$version").replace(/([^0-9\,])/g,"").split(",")[0]}catch(t){}if(!r){return false}var l=t.split("/");return Number(r)>=Number(l[l.length-1])},player:function(){this.onreadylist=[]}};var p=mistplayers.flash_strobe.player;p.prototype=new MistPlayer;p.prototype.build=function(t,e){var i=document.createElement("object");var r=document.createElement("embed");i.appendChild(r);function a(e){var a=t.options;function l(t,e){var i=document.createElement("param");i.setAttribute("name",t);i.setAttribute("value",e);return i}MistUtil.empty(i);i.appendChild(l("movie",t.urlappend(a.host+t.source.player_url)));var s="src="+encodeURIComponent(e)+"&controlBarMode="+(a.controls?"floating":"none")+"&initialBufferTime=0.5&expandedBufferTime=5&minContinuousPlaybackTime=3"+(a.live?"&streamType=live":"")+(a.autoplay?"&autoPlay=true":"");i.appendChild(l("flashvars",s));i.appendChild(l("allowFullScreen","true"));i.appendChild(l("wmode","direct"));if(a.autoplay){i.appendChild(l("autoPlay","true"))}r.setAttribute("src",t.urlappend(t.source.player_url));r.setAttribute("type","application/x-shockwave-flash");r.setAttribute("allowfullscreen","true");r.setAttribute("flashvars",s)}a(t.source.url);this.api={};this.setSize=function(t){i.setAttribute("width",t.width);i.setAttribute("height",t.height);r.setAttribute("width",t.width);r.setAttribute("height",t.height)};this.setSize(t.calcSize());this.onready(function(){if(t.container){t.container.removeAttribute("data-loading")}});this.api.setSource=function(t){a(t)};t.log("Built html");e(i)}; \ No newline at end of file diff --git a/embed/min/wrappers/html5.js b/embed/min/wrappers/html5.js new file mode 100644 index 00000000..98728494 --- /dev/null +++ b/embed/min/wrappers/html5.js @@ -0,0 +1 @@ +mistplayers.html5={name:"HTML5 video player",mimes:["html5/application/vnd.apple.mpegurl","html5/video/mp4","html5/video/ogg","html5/video/webm","html5/audio/mp3","html5/audio/webm","html5/audio/ogg","html5/audio/wav"],priority:MistUtil.object.keys(mistplayers).length+1,isMimeSupported:function(e){return MistUtil.array.indexOf(this.mimes,e)==-1?false:true},isBrowserSupported:function(e,t,i){if(location.protocol!=MistUtil.http.url.split(t.url).protocol){if(location.protocol=="file:"&&MistUtil.http.url.split(t.url).protocol=="http:"){i.log("This page was loaded over file://, the player might not behave as intended.")}else{i.log("HTTP/HTTPS mismatch for this source");return false}}var r=false;var a=e.split("/");a.shift();try{a=a.join("/");function n(e){var t=document.createElement("video");if(t&&t.canPlayType(e)!=""){r=t.canPlayType(e)}return r}if(a=="video/mp4"){function o(e){function t(t){return("0"+e.init.charCodeAt(t).toString(16)).slice(-2)}switch(e.codec){case"AAC":return"mp4a.40.2";case"MP3":return"mp3";case"AC3":return"ec-3";case"H264":return"avc1."+t(1)+t(2)+t(3);case"HEVC":return"hev1."+t(1)+t(6)+t(7)+t(8)+t(9)+t(10)+t(11)+t(12);default:return e.codec.toLowerCase()}}var s={};for(var l in i.info.meta.tracks){if(i.info.meta.tracks[l].type!="meta"){s[o(i.info.meta.tracks[l])]=1}}s=MistUtil.object.keys(s);if(s.length){if(s.length>t.simul_tracks){var p=0;for(var l in s){var u=n(a+';codecs="'+s[l]+'"');if(u){p++}}return p>=t.simul_tracks}a+=';codecs="'+s.join(",")+'"'}}r=n(a)}catch(e){}return r},player:function(){this.onreadylist=[]},mistControls:true};var p=mistplayers.html5.player;p.prototype=new MistPlayer;p.prototype.build=function(e,t){var i=e.source.type.split("/");i.shift();var r=document.createElement("video");r.setAttribute("crossorigin","anonymous");var a=document.createElement("source");a.setAttribute("src",e.source.url);r.source=a;r.appendChild(a);a.type=i.join("/");var n=["autoplay","loop","poster"];for(var o in n){var s=n[o];if(e.options[s]){r.setAttribute(s,e.options[s]===true?"":e.options[s])}}if(e.options.controls=="stock"){r.setAttribute("controls","")}if(e.info.type=="live"){r.loop=false}if("Proxy"in window&&"Reflect"in window){var l={get:{},set:{}};e.player.api=new Proxy(r,{get:function(e,t,i){if(t in l.get){return l.get[t].apply(e,arguments)}var r=e[t];if(typeof r==="function"){return function(){return r.apply(e,arguments)}}return r},set:function(e,t,i){if(t in l.set){return l.set[t].call(e,i)}return e[t]=i}});if(e.source.type=="html5/audio/mp3"){l.set.currentTime=function(){e.log("Seek attempted, but MistServer does not currently support seeking in MP3.");return false}}if(e.info.type=="live"){l.get.duration=function(){var t=0;if(this.buffered.length){t=this.buffered.end(this.buffered.length-1)}var i=((new Date).getTime()-e.player.api.lastProgress.getTime())*.001;return t+i-e.player.api.liveOffset};l.set.currentTime=function(t){var i=t-e.player.api.duration;e.player.api.liveOffset=i;e.log("Seeking to "+MistUtil.format.time(t)+" ("+Math.round(i*-10)/10+"s from live)");e.player.api.setSource(MistUtil.http.url.addParam(e.source.url,{startunix:i}))};MistUtil.event.addListener(r,"progress",function(){e.player.api.lastProgress=new Date});e.player.api.lastProgress=new Date;e.player.api.liveOffset=0;MistUtil.event.addListener(r,"pause",function(){e.player.api.pausedAt=new Date});l.get.play=function(){return function(){if(e.player.api.paused&&e.player.api.pausedAt&&new Date-e.player.api.pausedAt>5e3){r.load();e.log("Reloading source..")}return r.play.apply(r,arguments)}};if(e.source.type=="html5/video/mp4"){l.get.currentTime=function(){return this.currentTime-e.player.api.liveOffset+e.info.lastms*.001}}}else{if(!isFinite(r.duration)){var p=0;for(var o in e.info.meta.tracks){p=Math.max(p,e.info.meta.tracks[o].lastms)}l.get.duration=function(){if(isFinite(this.duration)){return this.duration}return p*.001}}}}else{e.player.api=r}e.player.api.setSource=function(e){if(e!=this.source.src){this.source.src=e;this.load()}};e.player.api.setSubtitle=function(e){var t=r.getElementsByTagName("track");for(var i=t.length-1;i>=0;i--){r.removeChild(t[i])}if(e){var a=document.createElement("track");r.appendChild(a);a.kind="subtitles";a.label=e.label;a.srclang=e.lang;a.src=e.src;a.setAttribute("default","")}};e.player.setSize=function(e){this.api.style.width=e.width+"px";this.api.style.height=e.height+"px"};t(r)}; \ No newline at end of file diff --git a/embed/min/wrappers/videojs.js b/embed/min/wrappers/videojs.js new file mode 100644 index 00000000..6ef64769 --- /dev/null +++ b/embed/min/wrappers/videojs.js @@ -0,0 +1 @@ +mistplayers.videojs={name:"VideoJS player",mimes:["html5/application/vnd.apple.mpegurl"],priority:MistUtil.object.keys(mistplayers).length+1,isMimeSupported:function(e){return this.mimes.indexOf(e)==-1?false:true},isBrowserSupported:function(e,t,i){if(location.protocol!=MistUtil.http.url.split(t.url).protocol){i.log("HTTP/HTTPS mismatch for this source");return false}if(location.protocol=="file:"&&e=="html5/application/vnd.apple"){i.log("This source ("+e+") won't load if the page is run via file://");return false}return"MediaSource"in window},player:function(){},scriptsrc:function(e){return e+"/videojs.js"}};var p=mistplayers.videojs.player;p.prototype=new MistPlayer;p.prototype.build=function(e,t){var i=this;function r(){if(e.destroyed){return}e.log("Building VideoJS player..");var r=document.createElement("video");if(e.source.type!="html5/video/ogg"){r.crossOrigin="anonymous"}var o=e.source.type.split("/");o.shift();var n=document.createElement("source");n.setAttribute("src",e.source.url);i.source=n;r.appendChild(n);n.type=o.join("/");e.log("Adding "+n.type+" source @ "+e.source.url);if(n.type=="application/vnd.apple.mpegurl"){n.type="application/x-mpegURL"}MistUtil.class.add(r,"video-js");var s={};if(e.options.autoplay){s.autoplay=true}if(e.options.loop&&e.info.type!="live"){s.loop=true;r.loop=true}if(e.options.poster){s.poster=e.options.poster}if(e.options.controls=="stock"){r.setAttribute("controls","");if(!document.getElementById("videojs-css")){var l=document.createElement("link");l.rel="stylesheet";l.href=e.options.host+"/skins/videojs.css";l.id="videojs-css";document.head.appendChild(l)}}i.onready(function(){i.videojs=videojs(r,s,function(){e.log("Videojs initialized")});i.api.unload=function(){videojs(r).dispose()}});e.log("Built html");if("Proxy"in window&&"Reflect"in window){var a={get:{},set:{}};e.player.api=new Proxy(r,{get:function(e,t,i){if(t in a.get){return a.get[t].apply(e,arguments)}var r=e[t];if(typeof r==="function"){return function(){return r.apply(e,arguments)}}return r},set:function(e,t,i){if(t in a.set){return a.set[t].call(e,i)}return e[t]=i}});if(e.info.type=="live"){function p(e){var t=0;if(e.buffered.length){t=e.buffered.end(e.buffered.length-1)}return t}var u=90;a.get.duration=function(){return(e.info.lastms+(new Date).getTime()-e.info.updated.getTime())*.001};e.player.api.lastProgress=new Date;e.player.api.liveOffset=0;MistUtil.event.addListener(r,"progress",function(){e.player.api.lastProgress=new Date});a.set.currentTime=function(t){var i=e.player.api.currentTime-t;var r=t-e.player.api.duration;e.log("Seeking to "+MistUtil.format.time(t)+" ("+Math.round(r*-10)/10+"s from live)");e.video.currentTime-=i};a.get.currentTime=function(){return this.currentTime+e.info.lastms*.001-e.player.api.liveOffset-u}}}else{i.api=r}e.player.setSize=function(t){if("videojs"in e.player){e.player.videojs.dimensions(t.width,t.height);r.parentNode.style.width=t.width+"px";r.parentNode.style.height=t.height+"px"}this.api.style.width=t.width+"px";this.api.style.height=t.height+"px"};e.player.api.setSource=function(t){if(!e.player.videojs){return}if(e.player.videojs.src()!=t){e.player.videojs.src({type:e.player.videojs.currentSource().type,src:t})}};e.player.api.setSubtitle=function(e){var t=r.getElementsByTagName("track");for(var i=t.length-1;i>=0;i--){r.removeChild(t[i])}if(e){var o=document.createElement("track");r.appendChild(o);o.kind="subtitles";o.label=e.label;o.srclang=e.lang;o.src=e.src;o.setAttribute("default","")}};t(r)}if("videojs"in window){r()}else{var o=MistUtil.scripts.insert(e.urlappend(mistplayers.videojs.scriptsrc(e.options.host)),{onerror:function(t){var i="Failed to load videojs.js";if(t.message){i+=": "+t.message}e.showError(i)},onload:r},e)}}; \ No newline at end of file diff --git a/embed/min/wrappers/webrtc.js b/embed/min/wrappers/webrtc.js new file mode 100644 index 00000000..63389543 --- /dev/null +++ b/embed/min/wrappers/webrtc.js @@ -0,0 +1 @@ +mistplayers.webrtc={name:"WebRTC player",mimes:["webrtc"],priority:MistUtil.object.keys(mistplayers).length+1,isMimeSupported:function(e){return this.mimes.indexOf(e)==-1?false:true},isBrowserSupported:function(e,t,n){if(!("WebSocket"in window)||!("RTCPeerConnection"in window)){return false}if(location.protocol.replace(/^http/,"ws")!=MistUtil.http.url.split(t.url.replace(/^http/,"ws")).protocol){n.log("HTTP/HTTPS mismatch for this source");return false}return true},player:function(){}};var p=mistplayers.webrtc.player;p.prototype=new MistPlayer;p.prototype.build=function(e,t){var n=this;if(typeof WebRTCBrowserEqualizerLoaded=="undefined"||!WebRTCBrowserEqualizerLoaded){var i=document.createElement("script");i.src=e.urlappend(e.options.host+"/webrtc.js");e.log("Retrieving webRTC browser equalizer code from "+i.src);document.head.appendChild(i);i.onerror=function(){e.showError("Failed to load webrtc browser equalizer",{nextCombo:5})};i.onload=function(){n.build(e,t)};return}var r=document.createElement("video");var o=["autoplay","loop","poster"];for(var s in o){var c=o[s];if(e.options[c]){r.setAttribute(c,e.options[c]===true?"":e.options[c])}}if(e.info.type=="live"){r.loop=false}if(e.options.controls=="stock"){r.setAttribute("controls","")}r.setAttribute("crossorigin","anonymous");this.setSize=function(e){r.style.width=e.width+"px";r.style.height=e.height+"px"};MistUtil.event.addListener(r,"loadeddata",v);MistUtil.event.addListener(r,"seeked",v);var a=0;var u=false;this.listeners={on_connected:function(){a=0;u=false;this.webrtc.play()},on_disconnected:function(){e.log("Websocket sent on_disconnect");if(u){e.showError("Connection to media server ended unexpectedly.")}r.pause()},on_answer_sdp:function(t){if(!t.result){e.showError("Failed to open stream.");this.on_disconnected();return}e.log("SDP answer received")},on_time:function(e){var t=a;a=e.current*.001-r.currentTime;if(Math.abs(t-a)>1){v()}var n=e.end==0?Infinity:e.end*.001;if(n!=d){d=n;MistUtil.event.send("durationchange",n,r)}},on_seek:function(){MistUtil.event.send("seeked",a,r);r.play()},on_stop:function(){e.log("Websocket sent on_stop");MistUtil.event.send("ended",null,r);u=true}};function f(){this.peerConn=null;this.localOffer=null;this.isConnected=false;var t=this;this.on_event=function(i){switch(i.type){case"on_connected":{t.isConnected=true;break}case"on_answer_sdp":{t.peerConn.setRemoteDescription({type:"answer",sdp:i.answer_sdp}).then(function(){},function(e){console.error(e)});break}case"on_disconnected":{t.isConnected=false;break}}if(i.type in n.listeners){return n.listeners[i.type].call(n,i)}e.log("Unhandled WebRTC event "+i.type+": "+JSON.stringify(i));return false};this.connect=function(e){t.signaling=new p(t.on_event);t.peerConn=new RTCPeerConnection;t.peerConn.ontrack=function(t){r.srcObject=t.streams[0];if(e){e()}}};this.play=function(){if(!this.isConnected){throw"Not connected, cannot play"}this.peerConn.createOffer({offerToReceiveAudio:true,offerToReceiveVideo:true}).then(function(e){t.localOffer=e;t.peerConn.setLocalDescription(e).then(function(){t.signaling.sendOfferSDP(t.localOffer.sdp)},function(e){console.error(e)})},function(e){throw e})};this.stop=function(){if(!this.isConnected){throw"Not connected, cannot stop."}this.signaling.send({type:"stop"})};this.seek=function(e){if(!this.isConnected){return}this.signaling.send({type:"seek",seek_time:e*1e3})};this.pause=function(){if(!this.isConnected){throw"Not connected, cannot pause."}this.signaling.send({type:"pause"})};this.setTrack=function(e){if(!this.isConnected){throw"Not connected, cannot set track."}e.type="tracks";this.signaling.send(e)};this.getStats=function(e){this.peerConn.getStats().then(function(t){var n={};var i=Array.from(t.entries());for(var r in i){var o=i[r];if(o[1].type=="inbound-rtp"){n[o[0]]=o[1]}}e(n)})};this.connect()}function p(t){this.ws=null;this.ws=new WebSocket(e.source.url.replace(/^http/,"ws"));this.ws.onopen=function(){t({type:"on_connected"})};this.ws.onmessage=function(e){try{var n=JSON.parse(e.data);t(n)}catch(t){console.error("Failed to parse a response from MistServer",t,e.data)}};this.ws.onclose=function(e){switch(e.code){default:{t({type:"on_disconnected"});break}}};this.sendOfferSDP=function(e){this.send({type:"offer_sdp",offer_sdp:e})};this.send=function(e){if(!this.ws){throw"Not initialized, cannot send "+JSON.stringify(e)}this.ws.send(JSON.stringify(e))}}this.webrtc=new f;this.api={};var d;Object.defineProperty(this.api,"duration",{get:function(){return d}});Object.defineProperty(this.api,"currentTime",{get:function(){return a+r.currentTime},set:function(e){a=e-r.currentTime;r.pause();n.webrtc.seek(e);MistUtil.event.send("seeking",e,r)}});function l(e){Object.defineProperty(n.api,e,{get:function(){return r[e]},set:function(t){return r[e]=t}})}var h=["volume","muted","loop","paused",,"error","textTracks","webkitDroppedFrameCount","webkitDecodedFrameCount"];for(var s in h){l(h[s])}function w(e){if(e in r){n.api[e]=function(){return r[e].call(r,arguments)}}}var h=["load","getVideoPlaybackQuality"];for(var s in h){w(h[s])}n.api.play=function(){if(n.api.currentTime){if(!n.webrtc.isConnected||n.webrtc.peerConn.iceConnectionState!="completed"){n.webrtc.connect(function(){n.webrtc.seek(n.api.currentTime)})}else{n.webrtc.seek(n.api.currentTime)}}else{r.play()}};n.api.pause=function(){r.pause();try{n.webrtc.pause()}catch(e){}MistUtil.event.send("paused",null,r)};n.api.setTracks=function(e){n.webrtc.setTrack(e)};function v(){if(!n.api.textTracks[0]){return}var e=n.api.textTracks[0].currentOffset||0;if(Math.abs(a-e)<1){return}var t=[];for(var i=n.api.textTracks[0].cues.length-1;i>=0;i--){var r=n.api.textTracks[0].cues[i];n.api.textTracks[0].removeCue(r);if(!("orig"in r)){r.orig={start:r.startTime,end:r.endTime}}r.startTime=r.orig.start-a;r.endTime=r.orig.end-a;t.push(r)}for(var i in t){n.api.textTracks[0].addCue(t[i])}n.api.textTracks[0].currentOffset=a}n.api.setSubtitle=function(e){var t=r.getElementsByTagName("track");for(var n=t.length-1;n>=0;n--){r.removeChild(t[n])}if(e){var i=document.createElement("track");r.appendChild(i);i.kind="subtitles";i.label=e.label;i.srclang=e.lang;i.src=e.src;i.setAttribute("default","");i.onload=v}};MistUtil.event.addListener(r,"ended",function(){if(n.api.loop){n.webrtc.connect()}});if("decodingIssues"in e.skin.blueprints){var b=["nackCount","pliCount","packetsLost","packetsReceived","bytesReceived"];for(var y in b){n.api[b[y]]=0}var m=function(){e.timers.start(function(){n.webrtc.getStats(function(e){for(var t in e){for(var i in b){if(b[i]in e[t]){n.api[b[i]]=e[t][b[i]]}}break}});m()},1e3)};m()}n.api.unload=function(){try{n.webrtc.stop()}catch(e){}};t(r)}; \ No newline at end of file diff --git a/embed/minimize.sh b/embed/minimize.sh new file mode 100755 index 00000000..ddddacad --- /dev/null +++ b/embed/minimize.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +echo "Minimizing player code.."; + +echo " Minimizing JS.."; + +if [ "min/player.js" -ot "util.js" ] || [ "min/player.js" -ot "skins.js" ] || [ "min/player.js" -ot "controls.js" ] || [ "min/player.js" -ot "player.js" ]; then + echo " Minimizing 'util.js skins.js controls.js player.js' into 'min/player.js'.."; + terser -mc -o min/player.js -- util.js skins.js controls.js player.js +fi +echo " Done."; + +echo " Minimizing wrappers.." + +if [ "min/wrappers/dashjs.js" -ot "wrappers/dashjs.js" ]; then + echo " Minimizing dashjs"; + terser -mn -o min/wrappers/dashjs.js -- wrappers/dashjs.js +fi +if [ "min/wrappers/flash_strobe.js" -ot "wrappers/flash_strobe.js" ]; then + echo " Minimizing flash_strobe"; + terser -mn -o min/wrappers/flash_strobe.js -- wrappers/flash_strobe.js +fi +if [ "min/wrappers/html5.js" -ot "wrappers/html5.js" ]; then + echo " Minimizing html5"; + terser -mn -o min/wrappers/html5.js -- wrappers/html5.js +fi +if [ "min/wrappers/videojs.js" -ot "wrappers/videojs.js" ]; then + echo " Minimizing videojs"; + terser -mn -o min/wrappers/videojs.js -- wrappers/videojs.js +fi +if [ "min/wrappers/webrtc.js" -ot "wrappers/webrtc.js" ]; then + echo " Minimizing webrtc"; + terser -mn -o min/wrappers/webrtc.js -- wrappers/webrtc.js +fi +echo " Done."; + +echo " Minimizing CSS.."; + +if [ "min/skins/default.css" -ot "skins/default.css" ] || [ "min/skins/default.css" -ot "skins/general.css" ]; then + echo " Minimizing default"; + cleancss --format keep-breaks -o min/skins/default.css skins/general.css skins/default.css +fi +if [ "min/skins/dev.css" -ot "skins/default.css" ] || [ "min/skins/dev.css" -ot "skins/general.css" ] || [ "min/skins/dev.css" -ot "skins/dev.css" ]; then + echo " Minimizing dev"; + cleancss --format keep-breaks -o min/skins/dev.css skins/general.css skins/default.css skins/dev.css +fi +echo " Done."; +echo "Done."; diff --git a/embed/mist.css b/embed/mist.css deleted file mode 100644 index dc912f77..00000000 --- a/embed/mist.css +++ /dev/null @@ -1,1633 +0,0 @@ - -.mistvideo { - background: black center none no-repeat; - display: inline-block; - color: white; - font-family: sans-serif; - text-align: center; - position: relative; - text-shadow: 0 0 1px black, 0 0 1px black; - max-width: 100%; - max-height: 100%; - overflow: hidden; -} -.mistvideo[data-loading] { - background-image: none; - position: relative; - min-width: 70px; - min-height: 70px; -} -.mistvideo[data-loading]:before { - content: ''; - display: block; - width: 25px; - height: 25px; - border: 5px solid transparent; - border-radius: 25px; - border-top-color: white; - border-left: 0px; - opacity: 0.8; - animation: spin 1.5s infinite linear; - margin: -15px 0 0 -12.5px; - position: absolute; - top: 50%; - left: 50%; - z-index: 5; -} -.mistvideo .error { - margin: 2em 0.5em; - z-index: 69; - bottom: 40%; -} -.mistvideo .error button { - background: black; - color: rgba(255,255,255,0.8); - border: 1px solid rgba(255,255,255,0.2); - font-family: inherit; - padding: 0.5em; - margin: 5px auto; - display: block; -} -.mistvideo .error button:hover { - color: white; - border-color: white; -} -.mistvideo .vjs-error-display:before { - content: '' !important; -} -.mistplayer { - position: relative; - overflow: hidden; -} -.mistplayer[data-hide] { - cursor: none; -} -.mistplayer .html5_player { - display: block; - margin: 0 auto; -} -.mistplayer .controls { - height: 75px; - background-color: black; - opacity: 0.6; - position: absolute; - left: 0px; - right: 0px; - bottom: -75px; - display: flex; - align-items: center; - text-shadow: none; -} -.mistplayer .controls.smaller { - height: 30px; - bottom: -30px; -} -.mistplayer:hover:not([data-hide]) .controls { - bottom: 0; -} -.mistplayer.audio { - width: 500px; -} -.mistplayer.audio .controls { - position: static; -} -.mistplayer:not(:hover) .controls, -.mistplayer[data-hide] .controls { - transition: bottom 0.5s ease-in 1s; -} -.mistplayer video { - display: block; -} -.mistplayer .controls .row { - display: flex; - flex-flow: row nowrap; - flex-shrink: 1; -} -.mistplayer .controls .column { - display: flex; - flex-flow: column nowrap; - align-items: center; - flex-shrink: 1; -} -.mistplayer .controls .row .button:not(:first-child) { - margin-left: 0; -} -.mistplayer .controls .button { - cursor: pointer; - width: 45px; - margin: 5px; - line-height: 45px; - font-size: 16px; - position: relative; - background: transparent center none no-repeat; - background-size: contain; -} -.mistplayer .controls.smaller .button { - width: 15px; - margin: 0; - line-height: 15px; - font-size: 8px; -} -.mistplayer .controls .button.play { - height: 30px; - width: 30px; - margin-left: 15px; -} -.mistplayer .controls.minimal .button.play, -.mistplayer .controls.minimal .button.fullscreen, -.mistplayer .controls.minimal .button.tracks, -.mistplayer .controls.minimal .button.loop, -.mistplayer .controls.minimal .button.timestamp, -.mistplayer .controls.minimal .button.sound { - display: none; -} -.mistplayer .controls.smaller .button.play { - height: 15px; - margin-left: 5px; -} -.mistplayer .controls .button.play[data-state=playing] { - background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIGlkPSJzdmcyIiBoZWlnaHQ9IjQ1IiB3aWR0aD0iNDUiPjxkZWZzIGlkPSJkZWZzNCIgLz48bWV0YWRhdGEgaWQ9Im1ldGFkYXRhNyI+PHJkZjpSREY+PGNjOldvcmsgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTEwMDcuMzYyMikiIGlkPSJsYXllcjEiPjxnIHN0eWxlPSJmaWxsOiNmZmYiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDMuMDMwNDU3NSw0Ny43Mjk3MDUpIiBpZD0iZzM3NzkiPjxwYXRoIGlkPSJwYXRoMzgyMy03IiBkPSJtIDQuNDY5NTQyOSw5OTguMTYzNzcgYSA0LjAwMTE5MTYsNC4wMDExOTE2IDAgMCAwIDMuNzQ5OTk5LDMuOTY4NzMgbCAyLjI4MTI1MDEsMCBhIDQuMDAxMTkxNiw0LjAwMTE5MTYgMCAwIDAgMy45Njg3NSwtMy43NTAwMyBsIDAsLTMyLjI4MTIzIGEgNC4wMDExOTE2LDQuMDAxMTkxNiAwIDAgMCAtMy43NSwtMy45Njg3NSBsIC0yLjI4MTI1MDEsMCBhIDQuMDAxMTkxNiw0LjAwMTE5MTYgMCAwIDAgLTMuOTY4NzQ5LDMuNzUgbCAwLDMyLjI4MTI4IHoiIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+PHBhdGggaWQ9InBhdGgzODIzLTctNCIgZD0ibSAyNC40Njk1NDIsOTk4LjE2MzggYSA0LjAwMTE5MTYsNC4wMDExOTE2IDAgMCAwIDMuNzUsMy45Njg3IGwgMi4yODEyNSwwIGEgNC4wMDExOTE2LDQuMDAxMTkxNiAwIDAgMCAzLjk2ODc1LC0zLjc1IGwgMCwtMzIuMjgxMjYgYSA0LjAwMTE5MTYsNC4wMDExOTE2IDAgMCAwIC0zLjc1LC0zLjk2ODc1IGwgLTIuMjgxMjUsMCBhIDQuMDAxMTkxNiw0LjAwMTE5MTYgMCAwIDAgLTMuOTY4NzUsMy43NSBsIDAsMzIuMjgxMzEgeiIgc3R5bGU9ImZpbGw6I2ZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz48L2c+PC9nPjwvc3ZnPg=="); -} -.mistplayer .controls .button.play[data-state=paused] { - background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIGlkPSJzdmcyIiBoZWlnaHQ9IjQ1IiB3aWR0aD0iNDUiPjxkZWZzIGlkPSJkZWZzNCIgLz48bWV0YWRhdGEgaWQ9Im1ldGFkYXRhNyI+PHJkZjpSREY+PGNjOldvcmsgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTEwMDcuMzYyMikiIGlkPSJsYXllcjEiPjxwYXRoIHRyYW5zZm9ybT0ibWF0cml4KDEuMDE0MTgyNywtMC41ODU1Mzg2NywwLjU4NTUzODY3LDEuMDE0MTgyNywtMC40ODQxOTgzMSwxMDIyLjg4OTMpIiBkPSJNIDEwLjMxMjUsLTYuMzQzNzUgQSAyLjk0MTYxODYsMi45NDE2MTg2IDAgMCAwIDcuOTA2MjUsLTQuODc1IGwgLTE0LjEyNSwyNC41IGEgMi45NDE2MTg2LDIuOTQxNjE4NiAwIDAgMCAyLjU2MjUsNC40MDYyNSBsIDI4LjI4MTI1LDAgQSAyLjk0MTYxODYsMi45NDE2MTg2IDAgMCAwIDI3LjE1NjI1LDE5LjYyNSBMIDEzLC00Ljg3NSBhIDIuOTQxNjE4NiwyLjk0MTYxODYgMCAwIDAgLTIuNjg3NSwtMS40Njg3NSB6IiBpZD0icGF0aDM4MDkiIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmUiIC8+PC9nPjwvc3ZnPg=="); -} -.mistplayer .controls .progress_container { - flex-grow: 1; - position: relative; - margin: 5px; -} -.mistplayer .controls.smaller .progress_container { - margin: 5px; - min-width: 20px; -} -.mistplayer .controls .button.progress { - height: 15px; - border: 1px solid white; - overflow: hidden; - width: auto; - margin: 0; -} -.mistplayer .controls.smaller .button.progress { - height: 10px; -} -.mistplayer .controls .button.progress .bar { - background-color: white; - position: absolute; - width: 0; - top: 0; - bottom: 0; - left: 0; - min-width: 5px; -} -.mistplayer .controls .button.progress .buffer { - background-color: white; - opacity: 0.5; - position: absolute; - top: 0; - bottom: 0; -} -.mistplayer .controls .progress_container .hint { - position: absolute; - background: white; - border-radius: 5px; - bottom: 22px; - padding: 3px 5px; - color: black; - opacity: 0.6; - display: none; - font-size: 12px; -} -.mistplayer .controls.smaller .progress_container .hint { - bottom: 17px; - font-size: 6px; - border-radius: 3px; -} -.mistplayer .controls .progress_container .hint:after { - content: ''; - display: block; - position: absolute; - left: 0; - border: 5px solid transparent; - border-left-color: white; - bottom: -5px; -} -.mistplayer .controls.smaller .progress_container .hint:after { - border-width: 3px; - bottom: -3px; -} -.mistplayer .controls .button.timestamp { - width: auto; - cursor: default; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.mistplayer .controls .button.sound { - height: 65px; - width: 43px; - position: relative; - background: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIGlkPSJzdmczOTM3IiBoZWlnaHQ9IjY1IiB3aWR0aD0iMzAiPjxkZWZzIGlkPSJkZWZzMzkzOSIgLz48bWV0YWRhdGEgaWQ9Im1ldGFkYXRhMzk0MiI+PHJkZjpSREY+PGNjOldvcmsgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTk4Ny4zNjIyKSIgaWQ9ImxheWVyMSI+PHBhdGggaWQ9InJlY3Q0Njc0IiBkPSJtIDAsMTA1Mi4zNjIyIDAsLTY1IDUsMCBjIC0wLjE3MjU4OCwwIC0wLjMzNzI1NiwwLjAyOTUgLTAuNSwwLjA2MjUgLTAuNDg5MTExLDAuMSAtMC45NDIzNDUsMC4zMTcyNSAtMS4yODEyNSwwLjY1NjI1IC0wLjIyNjIwNiwwLjIyNjIgLTAuNDA0NzQzLDAuNTEzNSAtMC41MzEyNSwwLjgxMjUgLTAuMTI2NTA3LDAuMjk5MSAtMC4xODc1LDAuNjIzNjUgLTAuMTg3NSwwLjk2ODc1IDAsMCAwLjA3NTk3OCwwLjQ0NzA1IDAuMTg3NSwwLjc4MTI1IGwgMTkuODQzNzUsNTkuNDk5OTUgYyAwLjE0Mjc3NywxLjI0NTEgMS4xODU0MTQsMi4yMTg4IDIuNDY4NzUsMi4yMTg4IGwgLTI1LDAgeiBtIDI1LDAgYyAwLjg3NzU0OSwwIDEuNjQ3NjYzLC0wLjQ0MSAyLjA5Mzc1LC0xLjEyNSAwLjA2MzgxLC0wLjA5OCAwLjEwNjIsLTAuMjA0NiAwLjE1NjI1LC0wLjMxMjUgMC4wMjk2MiwtMC4wNjIgMC4wNjkyNiwtMC4xMjI1IDAuMDkzNzUsLTAuMTg3NSAwLjA0NTAxLC0wLjEyMTIgMC4wNjc0MSwtMC4yNDU5IDAuMDkzNzUsLTAuMzc1IDAuMDA5LC0wLjA0NCAwLjAyNDU3LC0wLjA4IDAuMDMxMjUsLTAuMTI1IDAuMDE4NzgsLTAuMTIzNSAwLjAzMTI1LC0wLjI0NjIgMC4wMzEyNSwtMC4zNzUgbCAwLC02MCBjIDAsLTEuMzg1IC0xLjExNDk5OSwtMi41IC0yLjUsLTIuNSBsIDUsMCAwLDY1IC01LDAgeiIgc3R5bGU9ImNvbG9yOiMwMDAwMDA7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6dmlzaWJsZTt2aXNpYmlsaXR5OnZpc2libGU7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpub256ZXJvO3N0cm9rZTpub25lO21hcmtlcjpub25lO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+PHBhdGggaWQ9InBhdGg0Njk3LTYiIGQ9Im0gMjUsMTA1Mi4zNjE3IGMgLTEuMjgzMzM2LDAgLTIuMzI1OTczLC0wLjk3MzcgLTIuNDY4NzUsLTIuMjE4NyBMIDIuNjg3NSw5OTAuNjQyOSBDIDIuNTc1OTc4LDk5MC4zMDg3IDIuNSw5ODkuODYxNyAyLjUsOTg5Ljg2MTcgYyAwLC0wLjM0NTEgMC4wNjA5OTMsLTAuNjY5NyAwLjE4NzUsLTAuOTY4OCAwLjEyNjUwNywtMC4yOTkgMC4zMDUwNDQsLTAuNTg2MyAwLjUzMTI1LC0wLjgxMjUgMC4zMzg5MDUsLTAuMzM5IDAuNzkyMTM5LC0wLjU1NjIgMS4yODEyNSwtMC42NTYyIDAuMTYyNzQ0LC0wLjAzMyAwLjMyNzQxMiwtMC4wNjIgMC41LC0wLjA2MiBsIDIwLDAgYyAxLjM4NTAwMSwwIDIuNSwxLjExNSAyLjUsMi41IGwgMCw2MCBjIDAsMC4xMjg4IC0wLjAxMjQ3LDAuMjUxNSAtMC4wMzEyNSwwLjM3NSAtMC4wMDY3LDAuMDQ1IC0wLjAyMjI1LDAuMDgxIC0wLjAzMTI1LDAuMTI1IC0wLjAyNjM0LDAuMTI5MiAtMC4wNDg3NCwwLjI1MzggLTAuMDkzNzUsMC4zNzUgLTAuMDI0NDksMC4wNjUgLTAuMDY0MTMsMC4xMjUyIC0wLjA5Mzc1LDAuMTg3NSAtMC4wNTAwNSwwLjEwNzkgLTAuMDkyNDQsMC4yMTQ1IC0wLjE1NjI1LDAuMzEyNSAtMC40NDYwODcsMC42ODQgLTEuMjE2MjAxLDEuMTI1IC0yLjA5Mzc1LDEuMTI1IHogbSAwLC0xLjIxODcgYyAwLjQ3NDEwNiwwIDAuODY0NzM0LC0wLjIxMTQgMS4wOTM3NSwtMC41NjI1IC0wLjAyMTEyLDAuMDMyIC0wLjAwNTksLTAuMDEgMC4wNjI1LC0wLjE1NjMgYSAxLjIwNDQ1MiwxLjIwNDQ1MiAwIDAgMSAwLC0wLjAzMSBjIDAuMDIzNSwtMC4wNDkgMC4wNTE5OCwtMC4wNTIgMC4wNjI1LC0wLjA2MiAwLjAwNTUsLTAuMDE2IDAuMDA5NCwtMC4wMzUgMCwtMC4wMzEgMC4wMDE3LC0wLjAxIDAuMDA1NSwtMC4wNjEgMC4wMzEyNSwtMC4xODc1IDAuMDA4LC0wLjAzOSAwLjAyNTU1LC0wLjAzOSAwLjAzMTI1LC0wLjA2MiAwLjAwOTgsLTAuMDY2IDAuMDA1NSwtMC4xMDI3IDAsLTAuMDk0IC0wLjAwMTYsLTAuMDMgMCwtMC4wNjggMCwtMC4wOTQgbCAwLC02MCBjIDAsLTAuNzM4NiAtMC41NDI2MTcsLTEuMjgxMyAtMS4yODEyNSwtMS4yODEzIGwgLTIwLDAgYyAtMC4wMzUzNTMsMCAtMC4xMDUzMjIsMCAtMC4yNSwwLjAzMSAtMC4yOTY4NjMsMC4wNjEgLTAuNTQ2MzQzLDAuMTcxMyAtMC42ODc1LDAuMzEyNSAtMC4wODkzOTQsMC4wODkgLTAuMjA1MjYzLDAuMjU4IC0wLjI4MTI1LDAuNDM3NSAtMC4wNTUzMTUsMC4xMzA4IC0wLjA1ODY2MSwwLjI4MzIgLTAuMDYyNSwwLjQ2ODcgLTIuNTJlLTQsMC4wMTIgMCwwLjAxOSAwLDAuMDMxIDAuMDI3OTgyLDAuMTM1MyAwLjA4MjQ5OSwwLjI3ODkgMC4xMjUsMC40MDYyIGwgMTkuODQzNzUsNTkuNTAwNSBhIDEuMjA0NDUyLDEuMjA0NDUyIDAgMCAxIDAuMDMxMjUsMC4yNSBjIDAuMDc1MjcsMC42NTY0IDAuNjA3MDU0LDEuMTI1IDEuMjgxMjUsMS4xMjUgeiIgc3R5bGU9ImZpbGw6I2ZmZmZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz48L2c+PC9zdmc+") no-repeat; - background-position: center right; - border: 1px solid black; /*helps with white border*/ - flex-shrink: 0; -} -.mistplayer .controls.smaller .button.sound { - height: 19.5px; - width: 14px; - background-size: contain; -} -.mistplayer .controls .button.sound .speaker { - width: 25px; - height: 25px; - margin: 0; - background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIGlkPSJzdmc0NjU5IiBoZWlnaHQ9IjI1IiB3aWR0aD0iMjUiPiA8ZGVmcyBpZD0iZGVmczQ2NjEiIC8+IDxtZXRhZGF0YSBpZD0ibWV0YWRhdGE0NjY0Ij4gPHJkZjpSREY+IDxjYzpXb3JrIHJkZjphYm91dD0iIj4gPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+IDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+IDxkYzp0aXRsZT48L2RjOnRpdGxlPiA8L2NjOldvcms+IDwvcmRmOlJERj4gPC9tZXRhZGF0YT4gPGcgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwtMTAyNy4zNjIyKSIgaWQ9ImxheWVyMSI+IDxwYXRoIGlkPSJyZWN0NDEzOSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxMDI3LjM2MjIpIiBkPSJNIDAgMCBMIDAgMjUgTCAyNSAyNSBMIDI1IDAgTCAwIDAgeiBNIDE2Ljk1NTA3OCAyLjUxNzU3ODEgQyAxNy4zODE1MDcgMi41MzYwMDIzIDE3LjgwNTc0IDIuNjYxMiAxOC4xODc1IDIuODkwNjI1IEwgMTguMTg3NSAyMi4xMDkzNzUgQyAxNy4xNjkyMDYgMjIuNzIyNjc1IDE1Ljg1Mzg2IDIyLjU4NzQ4NyAxNC45ODA0NjkgMjEuNjc5Njg4IEwgMTAuNjgxNjQxIDE3LjIxMDkzOCBMIDguNzgzMjAzMSAxNy4yMTA5MzggQyA3LjY5NzgzMzEgMTcuMjEwOTM4IDYuODEyNSAxNi4yOTA0MDkgNi44MTI1IDE1LjE2MjEwOSBMIDYuODEyNSA5LjgzNTkzNzUgQyA2LjgxMjUgOC43MDc3Mzc1IDcuNjk3ODMzMSA3Ljc4OTA2MjUgOC43ODMyMDMxIDcuNzg5MDYyNSBMIDEwLjY4MTY0MSA3Ljc4OTA2MjUgTCAxNC45ODA0NjkgMy4zMTgzNTk0IEMgMTUuNTI2MDE5IDIuNzUxMjM0NCAxNi4yNDQzNjMgMi40ODY4NzExIDE2Ljk1NTA3OCAyLjUxNzU3ODEgeiAiIHN0eWxlPSJjb2xvcjojMDAwMDAwO2NsaXAtcnVsZTpub256ZXJvO2Rpc3BsYXk6aW5saW5lO292ZXJmbG93OnZpc2libGU7dmlzaWJpbGl0eTp2aXNpYmxlO29wYWNpdHk6MTtpc29sYXRpb246YXV0bzttaXgtYmxlbmQtbW9kZTpub3JtYWw7Y29sb3ItaW50ZXJwb2xhdGlvbjpzUkdCO2NvbG9yLWludGVycG9sYXRpb24tZmlsdGVyczpsaW5lYXJSR0I7c29saWQtY29sb3I6IzAwMDAwMDtzb2xpZC1vcGFjaXR5OjE7ZmlsbDojMDAwMDAwO2ZpbGwtb3BhY2l0eToxO2ZpbGwtcnVsZTpldmVub2RkO3N0cm9rZTpub25lO3N0cm9rZS13aWR0aDowO3N0cm9rZS1saW5lY2FwOmJ1dHQ7c3Ryb2tlLWxpbmVqb2luOm1pdGVyO3N0cm9rZS1taXRlcmxpbWl0OjQ7c3Ryb2tlLWRhc2hhcnJheTpub25lO3N0cm9rZS1kYXNob2Zmc2V0OjA7c3Ryb2tlLW9wYWNpdHk6MTtjb2xvci1yZW5kZXJpbmc6YXV0bztpbWFnZS1yZW5kZXJpbmc6YXV0bztzaGFwZS1yZW5kZXJpbmc6YXV0bzt0ZXh0LXJlbmRlcmluZzphdXRvO2VuYWJsZS1iYWNrZ3JvdW5kOmFjY3VtdWxhdGUiIC8+IDxwYXRoIGlkPSJyZWN0NDU3NCIgZD0ibSAxOC4xODc2NzQsMTAzMC4yNTMxIGMgLTEuMDE4MDI2LC0wLjYxMTggLTIuMzMzNzE1LC0wLjQ3OSAtMy4yMDY1OTUsMC40Mjg0IGwgLTQuMjk5MzQ0LDQuNDY5MSAtMS44OTg4NzU3LDAgYyAtMS4wODUzNzA4LDAgLTEuOTcwNTMzMSwwLjkyMDEgLTEuOTcwNTMzMSwyLjA0ODMgbCAwLDUuMzI1OCBjIDAsMS4xMjgzIDAuODg1MTYyMywyLjA0ODQgMS45NzA1MzMxLDIuMDQ4NCBsIDEuODk4ODc1NywwIDQuMjk5MzQ0LDQuNDY5MyBjIDAuODczMzkxLDAuOTA3OCAyLjE4ODMwMSwxLjA0MTUgMy4yMDY1OTUsMC40MjgyIGwgMCwtMTkuMjE3NSB6IiBzdHlsZT0iZmlsbDpub25lO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTojZmZmZmZmO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLW1pdGVybGltaXQ6NDtzdHJva2UtZGFzaGFycmF5Om5vbmU7c3Ryb2tlLW9wYWNpdHk6MSIgLz4gPC9nPjwvc3ZnPg=="); - position: absolute; - top: 30px; - background-color: white; - box-shadow: inset 1px 1px black, inset -1px -1px black; /* helps with white shadow*/ -} -.mistplayer .controls .button.sound .speaker[data-muted] { - background-color: transparent; -} -.mistplayer .controls.smaller .button.sound .speaker { - width: 8px; - height: 8px; - top: 10px; - box-shadow: none; -} -.mistplayer .controls .button.sound .volume { - position: absolute; - bottom: 0.5px; - right: 1px; - width: 23.5px; - background-color: white; - opacity: 0.6; - height: 100%; - z-index: -1; - border-left: 1px solid transparent; /* these help with white showing through */ - border-right: 1px solid transparent; -} -.mistplayer .controls.smaller .button.sound .volume { - width: 6px; -} -.mistplayer .controls .button.loop { - min-height: 45px; - background-color: transparent; - background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iNDUiIGhlaWdodD0iNDUiIGlkPSJzdmczOTM3IiB2ZXJzaW9uPSIxLjEiPiA8ZGVmcyBpZD0iZGVmczM5MzkiIC8+IDxtZXRhZGF0YSBpZD0ibWV0YWRhdGEzOTQyIj4gPHJkZjpSREY+IDxjYzpXb3JrIHJkZjphYm91dD0iIj4gPGRjOmZvcm1hdD5pbWFnZS9zdmcreG1sPC9kYzpmb3JtYXQ+IDxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+IDxkYzp0aXRsZT48L2RjOnRpdGxlPiA8L2NjOldvcms+IDwvcmRmOlJERj4gPC9tZXRhZGF0YT4gPHBhdGggaWQ9InJlY3Q0NTExIiBkPSJNIDAgMCBMIDAgNDUgTCA0NSA0NSBMIDQ1IDAgTCAwIDAgeiBNIDIyLjUgMTEuMjUgQSAxMS4yNSAxMS4yNSAwIDAgMSAzMy43NSAyMi41IEEgMTEuMjUgMTEuMjUgMCAwIDEgMjIuNSAzMy43NSBBIDExLjI1IDExLjI1IDAgMCAxIDE0LjU1MDc4MSAzMC40NDkyMTkgTCAxMi43MTQ4NDQgMzIuMjg1MTU2IEwgMTIuNzE0ODQ0IDI1Ljc4NTE1NiBMIDE5LjIxNDg0NCAyNS43ODUxNTYgTCAxNy4zNzY5NTMgMjcuNjIzMDQ3IEEgNy4yNSA3LjI1IDAgMCAwIDIyLjUgMjkuNzUgQSA3LjI1IDcuMjUgMCAwIDAgMjkuNzUgMjIuNSBBIDcuMjUgNy4yNSAwIDAgMCAyMi41IDE1LjI1IEEgNy4yNSA3LjI1IDAgMCAwIDE3LjM3Njk1MyAxNy4zNzY5NTMgTCAxNC41NTA3ODEgMTQuNTUwNzgxIEEgMTEuMjUgMTEuMjUgMCAwIDEgMjIuNSAxMS4yNSB6ICIgc3R5bGU9Im9wYWNpdHk6MTtmaWxsOiMwMDAwMDA7ZmlsbC1vcGFjaXR5OjE7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOm5vbmU7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiIC8+IDxwYXRoIGlkPSJwYXRoNDQ5NSIgZD0iTSAyMi41IDExLjI1IEEgMTEuMjUgMTEuMjUgMCAwIDAgMTQuNTUwNzgxIDE0LjU1MDc4MSBMIDE3LjM3Njk1MyAxNy4zNzY5NTMgQSA3LjI1IDcuMjUgMCAwIDEgMjIuNSAxNS4yNSBBIDcuMjUgNy4yNSAwIDAgMSAyOS43NSAyMi41IEEgNy4yNSA3LjI1IDAgMCAxIDIyLjUgMjkuNzUgQSA3LjI1IDcuMjUgMCAwIDEgMTcuMzc2OTUzIDI3LjYyMzA0NyBMIDE5LjIxNDg0NCAyNS43ODUxNTYgTCAxMi43MTQ4NDQgMjUuNzg1MTU2IEwgMTIuNzE0ODQ0IDMyLjI4NTE1NiBMIDE0LjU1MDc4MSAzMC40NDkyMTkgQSAxMS4yNSAxMS4yNSAwIDAgMCAyMi41IDMzLjc1IEEgMTEuMjUgMTEuMjUgMCAwIDAgMzMuNzUgMjIuNSBBIDExLjI1IDExLjI1IDAgMCAwIDIyLjUgMTEuMjUgeiAiIHN0eWxlPSJvcGFjaXR5OjE7ZmlsbDpub25lO2ZpbGwtb3BhY2l0eTowLjg1ODQ0NzU7ZmlsbC1ydWxlOmV2ZW5vZGQ7c3Ryb2tlOiNmZmZmZmY7c3Ryb2tlLXdpZHRoOjEuNTtzdHJva2UtbWl0ZXJsaW1pdDo0O3N0cm9rZS1kYXNoYXJyYXk6bm9uZTtzdHJva2UtZGFzaG9mZnNldDowO3N0cm9rZS1vcGFjaXR5OjEiIC8+PC9zdmc+"); - box-shadow: inset 1px 1px black, inset -1px -1px black; /* helps with white shadow*/ -} -.mistplayer .controls.smaller .button.loop { - min-height: 15px; -} -.mistplayer .controls .button.loop[data-on] { - background-color: rgba(255,255,255,0.6); -} -.mistplayer .controls .button.fullscreen { - background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiIHN0YW5kYWxvbmU9Im5vIj8+PHN2ZyB4bWxuczpkYz0iaHR0cDovL3B1cmwub3JnL2RjL2VsZW1lbnRzLzEuMS8iIHhtbG5zOmNjPSJodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9ucyMiIHhtbG5zOnJkZj0iaHR0cDovL3d3dy53My5vcmcvMTk5OS8wMi8yMi1yZGYtc3ludGF4LW5zIyIgeG1sbnM6c3ZnPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIGlkPSJzdmczOTM3IiBoZWlnaHQ9IjQ1IiB3aWR0aD0iNDUiPjxkZWZzIGlkPSJkZWZzMzkzOSIgLz48bWV0YWRhdGEgaWQ9Im1ldGFkYXRhMzk0MiI+PHJkZjpSREY+PGNjOldvcmsgcmRmOmFib3V0PSIiPjxkYzpmb3JtYXQ+aW1hZ2Uvc3ZnK3htbDwvZGM6Zm9ybWF0PjxkYzp0eXBlIHJkZjpyZXNvdXJjZT0iaHR0cDovL3B1cmwub3JnL2RjL2RjbWl0eXBlL1N0aWxsSW1hZ2UiIC8+PGRjOnRpdGxlPjwvZGM6dGl0bGU+PC9jYzpXb3JrPjwvcmRmOlJERj48L21ldGFkYXRhPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTEwMDcuMzYyMikiIGlkPSJsYXllcjEiPjxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAsLTEuMTA5Mzc1KSIgaWQ9Imc0NTYzIj48ZyBpZD0iZzQ1NTgiPjxwYXRoIGlkPSJyZWN0Mzk0NSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxMDA3LjM2MjIpIiBkPSJNIDUuMTU2MjUsMTAgQyAzLjY5MTM0NjEsMTAgMi41LDExLjE5MTM0NiAyLjUsMTIuNjU2MjUgbCAwLDE5LjY4NzUgQyAyLjUsMzMuODA4NjU0IDMuNjkxMzQ2MSwzNSA1LjE1NjI1LDM1IGwgMzQuNjg3NSwwIEMgNDEuMzA4NjU0LDM1IDQyLjUsMzMuODA4NjU0IDQyLjUsMzIuMzQzNzUgbCAwLC0xOS42ODc1IEMgNDIuNSwxMS4xOTEzNDYgNDEuMzA4NjU0LDEwIDM5Ljg0Mzc1LDEwIEwgNS4xNTYyNSwxMCB6IE0gNSwxMi41MzEyNSBsIDM1LDAgMCwyMCAtMzUsMCAwLC0yMCB6IiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPjxyZWN0IHJ5PSIwIiB5PSIxMDE5Ljg2MjIiIHg9IjUiIGhlaWdodD0iMjAiIHdpZHRoPSIzNSIgaWQ9InJlY3QzOTQ3IiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtb3BhY2l0eTowLjM5MjE1Njg2O3N0cm9rZTpub25lIiAvPjxwYXRoIGlkPSJwYXRoMzk0OSIgdHJhbnNmb3JtPSJ0cmFuc2xhdGUoMCwxMDA3LjM2MjIpIiBkPSJtIDE4Ljc4MTI1LDM1LjQwNjI1IGMgLTEuNTM2NjEsMC4zNzk4MDkgLTIuOTcxNDY1LDAuOTkxNTU3IC00LjI4MTI1LDEuODEyNSBsIDE1LjY1NjI1LDAgYyAtMS4zMTMwMDUsLTAuODIyOTYxIC0yLjc2MjgyNSwtMS40MzI5NTMgLTQuMzEyNSwtMS44MTI1IGwgLTcuMDYyNSwwIHoiIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+PC9nPjxnIGlkPSJnNDAwNyIgdHJhbnNmb3JtPSJtYXRyaXgoMi4wMzUzOTg1LDAsMCwxLjE2MzA4MjgsLTk5LjMyMTczNCwtMTQxLjU0NTgxKSIgc3R5bGU9ImZpbGw6IzAwMCI+PHBhdGggaWQ9InJlY3QzOTU4IiBkPSJtIDY1LjUzMzY0NiwxMDAxLjQ3NTggLTIuMDMyOTMyLDAgMC42NjI5MTMsMC42NjI5IC0yLjI1MzkwMywyLjI1MzkgMC43MDcxMDcsMC43MDcxIDIuMjUzOTAzLC0yLjI1MzkgMC42NjI5MTIsMC42NjI5IDAsLTIuMDMyOSB6IiBzdHlsZT0iZmlsbDojZmZmO2ZpbGwtb3BhY2l0eToxO3N0cm9rZTpub25lIiAvPjxwYXRoIGlkPSJyZWN0Mzk1OC01IiBkPSJtIDY1LjUzMzY0NiwxMDEyLjg0IDAsLTIuMDMzIC0wLjY2MjgzNiwwLjY2MjkgLTIuMjUzOTAxLC0yLjI1MzkgLTAuNzA3MTA0LDAuNzA3MSAyLjI1MzkwMiwyLjI1MzkgLTAuNjYyOTA2LDAuNjYyOSAyLjAzMjg0NSwxZS00IHoiIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+PHBhdGggaWQ9InJlY3QzOTU4LTUxIiBkPSJtIDU0LjE2OTQzLDEwMDEuNDc1OCAyLjAzMjkzMiwwIC0wLjY2MjkxMywwLjY2MjkgMi4yNTM5MDMsMi4yNTM5IC0wLjcwNzEwNywwLjcwNzEgLTIuMjUzOTAzLC0yLjI1MzkgLTAuNjYyOTEyLDAuNjYyOSAwLC0yLjAzMjkgeiIgc3R5bGU9ImZpbGw6I2ZmZjtmaWxsLW9wYWNpdHk6MTtzdHJva2U6bm9uZSIgLz48cGF0aCBpZD0icmVjdDM5NTgtNS03IiBkPSJtIDU0LjE2OTQzLDEwMTIuODQgMCwtMi4wMzMgMC42NjI4MzYsMC42NjI5IDIuMjUzOTAxLC0yLjI1MzkgMC43MDcxMDQsMC43MDcxIC0yLjI1MzkwMiwyLjI1MzkgMC42NjI5MDYsMC42NjI5IC0yLjAzMjg0NSwxZS00IHoiIHN0eWxlPSJmaWxsOiNmZmY7ZmlsbC1vcGFjaXR5OjE7c3Ryb2tlOm5vbmUiIC8+PC9nPjwvZz48L2c+PC9zdmc+"); - height: 45px; -} -.mistplayer .controls.smaller .button.fullscreen { - height: 15px; -} -.mistplayer .controls .button.tracks { - line-height: 25px; - width: 100%; - margin: 0; - height: 25px; - box-sizing: border-box; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.mistplayer .controls.smaller .button.tracks { - height: 10px; - line-height: 10px; -} -.mistplayer .controls .tracks .settings { - position: absolute; - background-color: black; - padding: 5px 10px; - right: -1000px; - bottom: 23px; -} -.mistplayer .controls.smaller .tracks .settings { - padding: 2px 3px; - bottom: 12.5px; -} -.mistplayer .controls .tracks:hover .settings { - right: 0; -} -.mistplayer .controls .tracks:not(:hover) .settings { - transition: right 0.5s ease-in 1s; -} -.mistplayer .controls .tracks .settings label { - text-align: left; - display: flex; - flex-flow: row nowrap; -} -.mistplayer .controls .tracks .settings label > *:not(:first-child) { - margin-left: 1em; - flex-grow: 1; -} -.mistplayer .controls .tracks .settings label span { - text-transform: capitalize; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; -} -.mistplayer .controls .tracks .settings label select { - background: none; - color: white; - border: none; - outline: none; - font-size: inherit; -} -.mistplayer .controls .tracks .settings label option { - color: black; - background-color: white; - font-size: inherit; -} - -@keyframes spin { - 0% { - transform: rotate(0deg); - } - 100% { - transform: rotate(360deg); - } -} - -.countdown { - height: 1em; - width: 1em; - display: inline-block; - vertical-align: bottom; - border-radius: 50%; - background-image: linear-gradient(to right,#bbb 50%,#333 0); - margin: 0 0.2em; - opacity: 0; - animation: appear 20s step-start 1; -} -.countdown:before { - content: ''; - display: block; - margin-left: 50%; - height: 100%; - border-radius: 0 100% 100% 0 / 50%; - background-color: #bbb; - transform-origin: 0 50%; - animation: rotate 10s linear 2, bg 20s step-end 1; -} -.countdown[data-delay=60] { - animation-duration: 60s; -} -.countdown[data-delay=60]:before { - animation-duration: 30s, 60s; -} -@keyframes rotate { - to { transform: rotate(.5turn); } -} -@keyframes bg { - 50% { background: #333; } -} -@keyframes appear { - to { opacity: 1; } -} - -.video-js .vjs-big-play-button:before, .video-js .vjs-control:before, .video-js .vjs-modal-dialog, .vjs-modal-dialog .vjs-modal-dialog-content { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; } - -.video-js .vjs-big-play-button:before, .video-js .vjs-control:before { - text-align: center; } - -@font-face { - font-family: VideoJS; - src: url("../font/1.5.1/VideoJS.eot?#iefix") format("eot"); } - -@font-face { - font-family: VideoJS; - src: url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAA4wAAoAAAAAFfAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAAA9AAAAD4AAABWUZFeBGNtYXAAAAE0AAAAOgAAAUriLxC2Z2x5ZgAAAXAAAAnnAAAO5OV/F/5oZWFkAAALWAAAACsAAAA2C4eUa2hoZWEAAAuEAAAAGAAAACQOogcfaG10eAAAC5wAAAAPAAAAeNIAAABsb2NhAAALrAAAAD4AAAA+MMgtQm1heHAAAAvsAAAAHwAAACABLwB5bmFtZQAADAwAAAElAAACCtXH9aBwb3N0AAANNAAAAPkAAAF5vawAenicY2BkZ2CcwMDKwMFSyPKMgYHhF4RmjmEIZzzHwMDEwMrMgBUEpLmmMDh8ZPwoyw7iLmSHCDOCCADu/Qo9AAB4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGD7K/v8PUvCREUTzM0DVAwEjG8OIBwCOWgbUAAB4nI1XfVBU1xV/574vlsUlj/14grDs48FuAgaR3X2LEnY3UZSgEkTwAySAgkIwI8bRfFDjTszYCWRMW9lNa4y2meokmq+2k5ia0dpkmknbkWgSSW3GyaaNf0RTx0wxX7A3Pe/tQmIgHXf3vXvvueeee+45v3POXQYY/PCD/CBDGAYkIE2sxg+OXSJmhmH1OaFX6MU5C5PDMCZi5Rg2i+ELGSthwM14NCbgYGSBIZfhFA1H6Zu0OS0NDkMVfg+npdFm+maCvigI0JBIQIMg0BdJGdTj9ylj7nr+b97+Hl8C1+H2xNAvjPqxjIgaKtItICkSnIISeo40QQls4xxjlzgHsnGGvi7BxQiMlSlkPMhfCh67rAUEUQ6CHxW2O7JARCkKnlUQ7UEIyAEQZe4MdDW9xr5OPFuKbubpRxcPDY8da4MOelDfAYJLW+sGKn/Vlmjfv5+NdB4oOfTazJn3tGxZtL9xFNZX7PPRUbjcRg/SMB2EL+gblXn7shbO/WUbF9u/H5XQ9eKO8iMMr9tY35qYoRi20wGuXV/CHaGDk2fdgHwCk5HUXQpCcgHfBV2NjV3jkq4PHTSUSBwuOQALvxPAps6fiftk6P6yJpcm5bB4dFkgoh195mbiSTnkL3jupq7jh4ZZdvjQRVB4PPx3SsVTu5D/6kd85RU66ttXAeuuXYN1E/Y2sMMzZkZiZNRZlRS/ynr9Xr8Cql2RVNbutXslYo7B9ngsFqcDbCQO22PxeIxcpgMxkh6PjUdwkvw6hvRpZeoCFKshDQzJVr++DWyLx+hAXJcGp3TJMV1ME45xCNvHLsWRrpOZSduOoG0zERuIIwuIkhNkBREglQKLiODD45FQE0BTiE214xE2wp8zOt9NjH3GRtDMk7Ehoq2tzCzGxdyMEQJuD0qGIrQ58ApoWQE3D2h1h6zwuB14wYFIDAA5CZ11jT+92gFZ7B7/p7+hV8jFxBl4aG03wLiVXtBbCylLfIJzkPUAvWAw0yvsVdKdBbC6nnruP/RFkHqWJLZ2Auxdtgy+6qTf7l1WswTJcJ6mGVxwXj92UtfU2WXUNX+qBUCxK6D4FR4f/cufG1sZbiSkMcwdMdoxBxTTEXIp4SCXMNhHoFjvTTFP4vkoPReNRmPRCTwa+3qY0DR7qn7Vjh612wRRTaI04HWCnZ+gIzvS/ZJP0+mynphCui4hzmG0id6+aLSv2BV3FQMYDTHrlGQ/SZ+q4ZdF8aLa5Ar8GW3tVNKEj13cF0buMaesx1i9CL/Uo1tM0h+74o9HjQ+UcPaxy8mH9ccwK8KpKA3rHdIUjTKpfIBxuokpxUGBIILm84ATvHh8tAIe2iZj8KvYwUOXawHMVNgxZvlwSa0z8Zkokkxn3ey2nYTsbMO3mPh8cji7zklsPLD9a9f2s2w/uSt/FgSytWzw5bmS3PielU1P56aGrlz6NzlnbT8h/Wtb+1OxIqxBbC9g7kINUbtAEDxsKWSCe46eltCPmaiUxy2IrODIB8EmixaQrU4IAQ6THg6BFpAdWsCquT16DkL9ccIC/FGeP5AuiDExe8bx+QtzWVsmHcm0kdzqecdn5IhRkTc/zfNPm3ns5sw4Pq86l9gyofh6jkTF5iFChjYbbzZQWFvYb8qZAWyGiV9ya+5bFgnzpuWt3FuX8KYMmsiYZepPseBgGhZcOMt0+4Q8fDOTftJjHIuhdaLsFXFM9AclTi9jbGRq8ZvIOykZei77kfo53eoppVPovbGiyV63p/p/dkWETTjmhjTIm8RP284b04bcNYlRsvO6Gp2JeaiIueVHsgJGF2aASlCQLuG8EsBomzb++/AXmwhaOoLhL7iQ4/uc449gWJ56/XWDARn74v/PL1bRBB4TBEyYrqezSkUPHaWjPWCm13ogAzJ66LVpbTEuXccDZlyXxBQ/IrzKOPS7gAkkIyZ0N6joE6M246aDsO1kgucTJ/EdFWA5pbAcTfoSP4hJeBCni7nEn5IclL4kpDgmMMuH8Kpk0+WrBUIeKCyWS0nPVz7NW86Hnl55GxR5KB3+9tszL+wVRulXNTUn6D8SJvIl3PzP46eZST/tQTllTDXTzmxCaTYna7eJAqcWuD1ulBXQsMz5fQEBCfowCF5FVDF/2yysB9OW5veVEtRAFOy41FoeJEiAOZhDiFstsKAwJ8Hijs72q1jWvWx+uKU5XFZDLx189OK8ojW1u0By5dtLHUN/rwkte68PnhnYVbt0bvWiub9w1+f4C0L3hIuXZ8+xlVSt0eb3tgQsmVZnem5R3U0uf/fmFdqiLTvY3nPnet5/v4f9pLB6QX2krnnFQ1tXtN+2ePlAaUNWcfiWwrncn4ca9ml3hFeHHm+u2bq4MhxUZs3bMH/3jgaPUtlVunFjg2/8yRzf3cHsssKZqlnOqyCWworWykW9lXnspk0ffrjpfCreIpjPWbwnFxt3PAkcQgkUuH1auUMf+txJQ0hK1k1zsNaqQdaLMxfoq9AGGxtJQ+fGw53cE/TY8pWhJruZHiMAcCexFS/eGDp6hntiXGE/gvI7163b29ExfiHxNsnqub/a6/QmPoAn4GpZ2c9cZRX5/57IWUNYuubiQBAddhuxAKe6PA5vuV5dkk0VXkMM3zk42W3Awrgka8LQgjZY+tQIffd5+vnHasnHL/cczldyS4r79i6su6Nu9oPQ8lbaid2Pt9/bXtTTynevq7bkPkITV47d+3NugOzo4M3y77Zxbnb2nhWrl0T/kO4u3H1ig33e1lD6JDYjiKkCHOioF0pZv6T6gxxipxLNhFc8xERA48vq5ZfXdL/QV6c8W3PfwjIsZyI3Csvo72e4FpTVwTv/UYNAKtY+8MB84vogZ1Xr5lW38iJdPZ74xunzO4Gk7BARIkytjlyCoPVoIb3IluMfAYRhEoAO2aGXKc2TNAJaSwdzQEeq7jC7TWYF2Y2jrEIXlyVEhunBs5t7K62a7Z6qB0923/+vPT2v7mwpqV/mTEsTiCB5zz735HOP9VbVWtKKZK08uDJ7vcQN02HogGegY5iNnKUHh12ti9/zzHvsauy+tx+e375j94LuA64MV/5MQbZVNT95/re7jlxZVaVuW5Nffsd9TXfOpXcv6m2Bn3x6FgXg/oz+P0h/ce8g2mTEWxVTzzQzrTruNCcRdbu6VY87gLVXc4uSjXfosak7XxWM4oyl+ockmzCFhJXaGwK8e6sCW2T3sLmPnh5qSZtx9JHFL6QBHGnsTjdtWQ8PFygWtQTIkrI84NILfQSC65FUMFsnOYFHEoSmUCD49a4rt3985PTsd8GzB/5KEnzmhhORgVOZPM+yb5KmpRu38jQqviH6826Lrdrxx6DZdFPo2fVbTiy9AUpDJ3SxGYvpK7u+Rhz8D4BCxssAeJxjYGRgYABi/vcdWfH8Nl8ZuNkZQODSliXbkWl2BrA4BwMTiAIAKDsJfgB4nGNgZGBgZwCChWASxGZkQAVyABOTANd4nGNnYGBgHwAMADNUANMAAAAAAAAOAFAAZgCyAMYA5gEeAUgBdAGcAfICLgKOAroDCgOOA7AD6gQ4BHwEuAToBQwFogXoBjYGbAbaB3IAAHicY2BkYGCQY8hlYGcAASYg5gJCBob/YD4DABa6AakAeJxdkE1qg0AYhl8Tk9AIoVDaVSmzahcF87PMARLIMoFAl0ZHY1BHdBJIT9AT9AQ9RQ9Qeqy+yteNMzDzfM+88w0K4BY/cNAMB6N2bUaPPBLukybCLvleeAAPj8JD+hfhMV7hC3u4wxs7OO4NzQSZcI/8Ltwnfwi75E/hAR7wJTyk/xYeY49fYQ/PztM+jbTZ7LY6OWdBJdX/pqs6NYWa+zMxa13oKrA6Uoerqi/JwtpYxZXJ1coUVmeZUWVlTjq0/tHacjmdxuL90OR8O0UEDYMNdtiSEpz5XQGqzlm30kzUdAYFFOb8R7NOZk0q2lwAyz1i7oAr1xoXvrOgtYhZx8wY5KRV269JZ5yGpmzPTjQhvY9je6vEElPOuJP3mWKnP5M3V+YAAAB4nG2P2XLCMAxFfYE4CWlZSveFP8hHOY4gHhw79VLav68hMNOH6kG60mg5YhM22pr9b1vGMMEUM2TgyFGgxBwVbnCLBZZYYY07bHCPBzziCc94wSve8I4PbGeDFj/VydVSOakpG0T0VH1ZHXuq+xhoftHaHq+yV+21o1P7brWLWnvpiExNJpBb/i18q8D9ZxSOcj8oY8iVPjZBBU2+kGIIypokuqTI+cx3qXMq7Z6PQIsx1DYGrQxtLul50YV50rVcCiNJc0enX4qdkNRYe8j2g46+SIMHapXJw1GFdIWH2DfalQknZeTDWsRW2bqlBK3ORIz9AqJUapQAAAA=) format("woff"), url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAAKAIAAAwAgT1MvMlGRXgQAAAEoAAAAVmNtYXDiLxC2AAAB+AAAAUpnbHlm5X8X/gAAA4QAAA7kaGVhZAuHlGsAAADQAAAANmhoZWEOogcfAAAArAAAACRobXR40gAAAAAAAYAAAAB4bG9jYTDILUIAAANEAAAAPm1heHABLwB5AAABCAAAACBuYW1l1cf1oAAAEmgAAAIKcG9zdL2sAHoAABR0AAABeQABAAAHAAAAAKEHAAAAAAAHAAABAAAAAAAAAAAAAAAAAAAAHgABAAAAAQAAD+/W/l8PPPUACwcAAAAAANK0pLcAAAAA0rSktwAAAAAHAAcAAAAACAACAAAAAAAAAAEAAAAeAG0ABwAAAAAAAgAAAAoACgAAAP8AAAAAAAAAAQcAAZAABQAIBHEE5gAAAPoEcQTmAAADXABXAc4AAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA8QHxHQcAAAAAoQcAAAAAAAABAAAAAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAABwAAAAcAAAAHAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADxHf//AAAAAPEB//8AAA8AAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AUABmALIAxgDmAR4BSAF0AZwB8gIuAo4CugMKA44DsAPqBDgEfAS4BOgFDAWiBegGNgZsBtoHcgAAAAEAAAAABYsFiwACAAABEQECVQM2BYv76gILAAADAAAAAAZrBmsAAgAOABoAAAkCEwQAAxIABSQAEwIAASYAJzYANxYAFwYAAusBwP5Alf7D/loICAGmAT0BPQGmCAj+Wv7D/f6uBgYBUv39AVIGBv6uAjABUAFQAZsI/lr+w/7D/loICAGmAT0BPQGm+sgGAVL9/QFSBgb+rv39/q4AAAACAAAAAAVABYsAAwAHAAABIREpAREhEQHAASv+1QJVASsBdQQW++oEFgAAAAQAAAAABiAGIAAGABMAJAAnAAABLgEnFRc2NwYHFz4BNSYAJxUWEgEHASERIQERAQYHFT4BNxc3AQcXBNABZVW4A7sCJ3ElKAX+3+Wlzvu3XwFh/p8BKwF1AT5MXU6KO5lf/WCcnAOAZJ4rpbgYGGpbcUacVPQBYziaNP70Aetf/p/+QP6LAfb+wjsdmhJEMZhfBJacnAAAAQAAAAAEqwXWAAUAAAERIQERAQILASoBdv6KBGD+QP6LBKr+iwAAAAIAAAAABWYF1gAGAAwAAAEuAScRPgEBESEBEQEFZQFlVFRl/BEBKwF1/osDgGSeK/2mK54BRP5A/osEqv6LAAADAAAAAAYgBg8ABQAMABoAABMRIQERAQUuAScRPgEDFRYSFwYCBxU2ADcmAOABKwF1/osCxQFlVVVluqXOAwPOpeUBIQUF/t8EYP5A/osEqv6L4GSeK/2mK54C85o0/vS1tf70NJo4AWL19QFiAAAABAAAAAAFiwWLAAUACwARABcAAAEjESE1IwMzNTM1IQEjFSERIwMVMxUzEQILlgF24JaW4P6KA4DgAXaW4OCWAuv+ipYCCuCW/ICWAXYCoJbgAXYABAAAAAAFiwWLAAUACwARABcAAAEzFTMRIRMjFSERIwEzNTM1IRM1IxEhNQF14Jb+iuDgAXaWAcCW4P6KlpYBdgJV4AF2AcCWAXb76uCWAcDg/oqWAAAAAAIAAAAABdYF1gAPABMAAAEhDgEHER4BFyE+ATcRLgEDIREhBUD8gD9VAQFVPwOAP1UBAVU//IADgAXVAVU//IA/VQEBVT8DgD9V++wDgAAABgAAAAAGawZrAAcADAATABsAIAAoAAAJASYnDgEHASUuAScBBSEBNhI3JgUBBgIHFhchBR4BFwEzARYXPgE3AQK+AWROVIfwYQESA4416aH+7gLl/dABelxoAQH8E/7dXGgBAQ4CMP3kNemhARJ4/t1OVIfwYf7uA/ACaBIBAVhQ/id3pfY+/idL/XNkAQGTTU0B+GT+/5NNSEul9j4B2f4IEgEBWFAB2QAAAAUAAAAABmsF1gAPABMAFwAbAB8AAAEhDgEHER4BFyE+ATcRLgEBIRUhASE1IQUhNSE1ITUhBdX7VkBUAgJUQASqQFQCAlT7FgEq/tYC6v0WAuoBwP7WASr9FgLqBdUBVT/8gD9VAQFVPwOAP1X9rJX+1ZWVlZaVAAMAAAAABiAF1gAPACcAPwAAASEOAQcRHgEXIT4BNxEuAQEjNSMVMzUzFRQGByMuAScRPgE3Mx4BFQUjNSMVMzUzFQ4BByMuATURNDY3Mx4BFwWL++o/VAICVD8EFj9UAgJU/WtwlZVwKiDgICoBASog4CAqAgtwlZVwASog4CAqKiDgICoBBdUBVT/8gD9VAQFVPwOAP1X99yXgJUogKgEBKiABKiAqAQEqIEol4CVKICoBASogASogKgEBKiAAAAYAAAAABiAE9gADAAcACwAPABMAFwAAEzM1IxEzNSMRMzUjASE1IREhNSERFSE14JWVlZWVlQErBBX76wQV++sEFQM1lv5AlQHAlf5Alv5AlQJVlZUAAAABAAAAAAYgBmwALgAAASIGBwE2NCcBHgEzPgE3LgEnDgEHFBcBLgEjDgEHHgEXMjY3AQYHHgEXPgE3LgEFQCtKHv3sBwcCDx5OLF9/AgJ/X19/Agf98R5OLF9/AgJ/XyxOHgIUBQEDe1xcewMDewJPHxsBNxk2GQE0HSACf19ffwICf18bGf7NHCACf19ffwIgHP7KFxpcewICe1xdewAAAgAAAAAGWQZrAEMATwAAATY0Jzc+AScDLgEPASYvAS4BJyEOAQ8BBgcnJgYHAwYWHwEGFBcHDgEXEx4BPwEWHwEeARchPgE/ATY3FxY2NxM2JicFLgEnPgE3HgEXDgEFqwUFngoGB5YHGQ26OkQcAxQP/tYPFAIcRTm6DRoHlQcFC50FBZ0LBQeVBxoNujlFHAIUDwEqDxQCHEU5ug0aB5UHBQv9OG+UAgKUb2+UAgKUAzckSiR7CRoNAQMMCQVLLRzGDhEBAREOxhwtSwUJDP79DBsJeyRKJHsJGg3+/QwJBUstHMYOEQEBEQ7GHC1LBQkMAQMMGwlBApRvb5QCApRvb5QAAAAAAQAAAAAGawZrAAsAABMSAAUkABMCACUEAJUIAaYBPQE9AaYICP5a/sP+w/5aA4D+w/5aCAgBpgE9AT0BpggI/loAAAACAAAAAAZrBmsACwAXAAABBAADEgAFJAATAgABJgAnNgA3FgAXBgADgP7D/loICAGmAT0BPQGmCAj+Wv7D/f6uBgYBUv39AVIGBv6uBmsI/lr+w/7D/loICAGmAT0BPQGm+sgGAVL9/QFSBgb+rv39/q4AAAMAAAAABmsGawALABcAIwAAAQQAAxIABSQAEwIAASYAJzYANxYAFwYAAw4BBy4BJz4BNx4BA4D+w/5aCAgBpgE9AT0BpggI/lr+w/3+rgYGAVL9/QFSBgb+rh0Cf19ffwICf19ffwZrCP5a/sP+w/5aCAgBpgE9AT0BpvrIBgFS/f0BUgYG/q79/f6uAk9ffwICf19ffwICfwAAAAQAAAAABiAGIAAPABsAJQApAAABIQ4BBxEeARchPgE3ES4BASM1IxUjETMVMzU7ASEeARcRDgEHITczNSMFi/vqP1QCAlQ/BBY/VAICVP1rcJVwcJVwlgEqICoBASog/tZwlZUGIAJUP/vqP1QCAlQ/BBY/VPyClZUBwLu7ASog/tYgKgFw4AACAAAAAAZrBmsACwAXAAABBAADEgAFJAATAgATBwkBJwkBNwkBFwEDgP7D/loICAGmAT0BPQGmCAj+Wjhp/vT+9GkBC/71aQEMAQxp/vUGawj+Wv7D/sP+WggIAaYBPQE9Aab8EWkBC/71aQEMAQxp/vUBC2n+9AABAAAAAAXWBrYAFgAAAREJAREeARcOAQcuAScjFgAXNgA3JgADgP6LAXW+/QUF/b6+/QWVBgFR/v4BUQYG/q8FiwEq/ov+iwEqBP2/vv0FBf2+/v6vBgYBUf7+AVEAAAABAAAAAAU/BwAAFAAAAREjIgYdASEDIxEhESMRMzU0NjMyBT+dVjwBJSf+/s7//9Ctkwb0/vhISL3+2P0JAvcBKNq6zQAAAAAEAAAAAAaOBwAAMABFAGAAbAAAARQeAxUUBwYEIyImJyY1NDY3NiUuATU0NwYjIiY1NDY3PgEzIQcjHgEVFA4DJzI2NzY1NC4CIyIGBwYVFB4DEzI+AjU0LgEvASYvAiYjIg4DFRQeAgEzFSMVIzUjNTM1MwMfQFtaQDBI/uqfhOU5JVlKgwERIB8VLhaUy0g/TdNwAaKKg0pMMUVGMZImUBo1Ij9qQCpRGS8UKz1ZNjprWzcODxMeChwlThAgNWhvUzZGcX0Da9XVadTUaQPkJEVDUIBOWlN6c1NgPEdRii5SEipAKSQxBMGUUpo2QkBYP4xaSHNHO0A+IRs5ZjqGfVInITtlLmdnUjT8lxo0Xj4ZMCQYIwsXHTgCDiQ4XTtGazsdA2xs29ts2QADAAAAAAaABmwAAwAOACoAAAERIREBFgYrASImNDYyFgERIRE0JiMiBgcGFREhEhAvASEVIz4DMzIWAd3+tgFfAWdUAlJkZ6ZkBI/+t1FWP1UVC/63AgEBAUkCFCpHZz+r0ASP/CED3wEySWJik2Fh/N39yAISaXdFMx4z/dcBjwHwMDCQIDA4H+MAAAEAAAAABpQGAAAxAAABBgcWFRQCDgEEIyAnFjMyNy4BJxYzMjcuAT0BFhcuATU0NxYEFyY1NDYzMhc2NwYHNgaUQ18BTJvW/tKs/vHhIyvhsGmmHyEcKypwk0ROQk4seQFbxgi9hoxgbWAlaV0FaGJFDhyC/v3ut22RBIoCfWEFCxexdQQmAyyOU1hLlbMKJiSGvWYVOXM/CgAAAAEAAAAABYAHAAAiAAABFw4BBwYuAzURIzU+BDc+ATsBESEVIREUHgI3NgUwUBewWWitcE4hqEhyRDAUBQEHBPQBTf6yDSBDME4Bz+0jPgECOFx4eDoCINcaV11vVy0FB/5Y/P36HjQ1HgECAAEAAAAABoAGgABKAAABFAIEIyInNj8BHgEzMj4BNTQuASMiDgMVFBYXFj8BNjc2JyY1NDYzMhYVFAYjIiY3PgI1NCYjIgYVFBcDBhcmAjU0EiQgBBIGgM7+n9FvazsTNhRqPXm+aHfijmm2f1srUE0eCAgGAgYRM9Gpl6mJaz1KDgglFzYyPlYZYxEEzv7OAWEBogFhzgOA0f6fziBdR9MnOYnwlnLIfjpgfYZDaJ4gDCAfGAYXFD1al9mkg6ruVz0jdVkfMkJyVUkx/l5Ga1sBfOnRAWHOzv6fAAAHAAAAAAcABM8ADgAXACoAPQBQAFoAXQAAARE2HgIHDgEHBiYjJyY3FjY3NiYHERQFFjY3PgE3LgEnIwYfAR4BFw4BFxY2Nz4BNy4BJyMGHwEeARcUBhcWNjc+ATcuAScjBh8BHgEXDgEFMz8BFTMRIwYDJRUnAxyEzZRbCA2rgketCAEBqlRoCglxYwF+IiEOIysBAkswHQEECiQ0AgE+YyIhDiIsAQJLMB4BBQokNAE/YyIhDiIsAQJLMB4BBQokNAEBPvmD7kHhqs0s0gEnjgHJAv0FD2a9gIrADwUFAwPDAlVMZ3MF/pUHwgc1HTyWV325PgsJED+oY3G9TAc1HTyWV325PgsJED+oY3G9TAc1HTyWV325PgsJED+oY3G9UmQBZQMMR/61g/kBAAAAAAAQAMYAAQAAAAAAAQAHAAAAAQAAAAAAAgAHAAcAAQAAAAAAAwAHAA4AAQAAAAAABAAHABUAAQAAAAAABQALABwAAQAAAAAABgAHACcAAQAAAAAACgArAC4AAQAAAAAACwATAFkAAwABBAkAAQAOAGwAAwABBAkAAgAOAHoAAwABBAkAAwAOAIgAAwABBAkABAAOAJYAAwABBAkABQAWAKQAAwABBAkABgAOALoAAwABBAkACgBWAMgAAwABBAkACwAmAR5WaWRlb0pTUmVndWxhclZpZGVvSlNWaWRlb0pTVmVyc2lvbiAxLjBWaWRlb0pTR2VuZXJhdGVkIGJ5IHN2ZzJ0dGYgZnJvbSBGb250ZWxsbyBwcm9qZWN0Lmh0dHA6Ly9mb250ZWxsby5jb20AVgBpAGQAZQBvAEoAUwBSAGUAZwB1AGwAYQByAFYAaQBkAGUAbwBKAFMAVgBpAGQAZQBvAEoAUwBWAGUAcgBzAGkAbwBuACAAMQAuADAAVgBpAGQAZQBvAEoAUwBHAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAHMAdgBnADIAdAB0AGYAIABmAHIAbwBtACAARgBvAG4AdABlAGwAbABvACAAcAByAG8AagBlAGMAdAAuAGgAdAB0AHAAOgAvAC8AZgBvAG4AdABlAGwAbABvAC4AYwBvAG0AAAACAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB4AAAECAQMBBAEFAQYBBwEIAQkBCgELAQwBDQEOAQ8BEAERARIBEwEUARUBFgEXARgBGQEaARsBHAEdAR4EcGxheQtwbGF5LWNpcmNsZQVwYXVzZQt2b2x1bWUtbXV0ZQp2b2x1bWUtbG93CnZvbHVtZS1taWQLdm9sdW1lLWhpZ2gQZnVsbHNjcmVlbi1lbnRlcg9mdWxsc2NyZWVuLWV4aXQGc3F1YXJlB3NwaW5uZXIJc3VidGl0bGVzCGNhcHRpb25zCGNoYXB0ZXJzBXNoYXJlA2NvZwZjaXJjbGUOY2lyY2xlLW91dGxpbmUTY2lyY2xlLWlubmVyLWNpcmNsZQJoZAZjYW5jZWwGcmVwbGF5CGZhY2Vib29rBWdwbHVzCGxpbmtlZGluB3R3aXR0ZXIGdHVtYmxyCXBpbnRlcmVzdBFhdWRpby1kZXNjcmlwdGlvbgAAAAAA) format("truetype"); - font-weight: normal; - font-style: normal; } - -.vjs-icon-play, .video-js .vjs-big-play-button, .video-js .vjs-play-control { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-play:before, .video-js .vjs-big-play-button:before, .video-js .vjs-play-control:before { - content: '\f101'; } - -.vjs-icon-play-circle { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-play-circle:before { - content: '\f102'; } - -.vjs-icon-pause, .video-js .vjs-play-control.vjs-playing { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-pause:before, .video-js .vjs-play-control.vjs-playing:before { - content: '\f103'; } - -.vjs-icon-volume-mute, .video-js .vjs-mute-control.vjs-vol-0, -.video-js .vjs-volume-menu-button.vjs-vol-0 { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-volume-mute:before, .video-js .vjs-mute-control.vjs-vol-0:before, - .video-js .vjs-volume-menu-button.vjs-vol-0:before { - content: '\f104'; } - -.vjs-icon-volume-low, .video-js .vjs-mute-control.vjs-vol-1, -.video-js .vjs-volume-menu-button.vjs-vol-1 { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-volume-low:before, .video-js .vjs-mute-control.vjs-vol-1:before, - .video-js .vjs-volume-menu-button.vjs-vol-1:before { - content: '\f105'; } - -.vjs-icon-volume-mid, .video-js .vjs-mute-control.vjs-vol-2, -.video-js .vjs-volume-menu-button.vjs-vol-2 { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-volume-mid:before, .video-js .vjs-mute-control.vjs-vol-2:before, - .video-js .vjs-volume-menu-button.vjs-vol-2:before { - content: '\f106'; } - -.vjs-icon-volume-high, .video-js .vjs-mute-control, -.video-js .vjs-volume-menu-button { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-volume-high:before, .video-js .vjs-mute-control:before, - .video-js .vjs-volume-menu-button:before { - content: '\f107'; } - -.vjs-icon-fullscreen-enter, .video-js .vjs-fullscreen-control { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-fullscreen-enter:before, .video-js .vjs-fullscreen-control:before { - content: '\f108'; } - -.vjs-icon-fullscreen-exit, .video-js.vjs-fullscreen .vjs-fullscreen-control { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-fullscreen-exit:before, .video-js.vjs-fullscreen .vjs-fullscreen-control:before { - content: '\f109'; } - -.vjs-icon-square { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-square:before { - content: '\f10a'; } - -.vjs-icon-spinner { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-spinner:before { - content: '\f10b'; } - -.vjs-icon-subtitles, .video-js .vjs-subtitles-button { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-subtitles:before, .video-js .vjs-subtitles-button:before { - content: '\f10c'; } - -.vjs-icon-captions, .video-js .vjs-captions-button { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-captions:before, .video-js .vjs-captions-button:before { - content: '\f10d'; } - -.vjs-icon-chapters, .video-js .vjs-chapters-button { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-chapters:before, .video-js .vjs-chapters-button:before { - content: '\f10e'; } - -.vjs-icon-share { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-share:before { - content: '\f10f'; } - -.vjs-icon-cog { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-cog:before { - content: '\f110'; } - -.vjs-icon-circle, .video-js .vjs-mouse-display, .video-js .vjs-play-progress, .video-js .vjs-volume-level { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-circle:before, .video-js .vjs-mouse-display:before, .video-js .vjs-play-progress:before, .video-js .vjs-volume-level:before { - content: '\f111'; } - -.vjs-icon-circle-outline { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-circle-outline:before { - content: '\f112'; } - -.vjs-icon-circle-inner-circle { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-circle-inner-circle:before { - content: '\f113'; } - -.vjs-icon-hd { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-hd:before { - content: '\f114'; } - -.vjs-icon-cancel, .video-js .vjs-control.vjs-close-button { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-cancel:before, .video-js .vjs-control.vjs-close-button:before { - content: '\f115'; } - -.vjs-icon-replay { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-replay:before { - content: '\f116'; } - -.vjs-icon-facebook { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-facebook:before { - content: '\f117'; } - -.vjs-icon-gplus { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-gplus:before { - content: '\f118'; } - -.vjs-icon-linkedin { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-linkedin:before { - content: '\f119'; } - -.vjs-icon-twitter { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-twitter:before { - content: '\f11a'; } - -.vjs-icon-tumblr { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-tumblr:before { - content: '\f11b'; } - -.vjs-icon-pinterest { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-pinterest:before { - content: '\f11c'; } - -.vjs-icon-audio-description { - font-family: VideoJS; - font-weight: normal; - font-style: normal; } - .vjs-icon-audio-description:before { - content: '\f11d'; } - -.video-js { - display: block; - vertical-align: top; - box-sizing: border-box; - color: #fff; - background-color: #000; - position: relative; - padding: 0; - font-size: 10px; - line-height: 1; - font-weight: normal; - font-style: normal; - font-family: Arial, Helvetica, sans-serif; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none; } - .video-js:-moz-full-screen { - position: absolute; } - .video-js:-webkit-full-screen { - width: 100% !important; - height: 100% !important; } - -.video-js *, -.video-js *:before, -.video-js *:after { - box-sizing: inherit; } - -.video-js ul { - font-family: inherit; - font-size: inherit; - line-height: inherit; - list-style-position: outside; - margin-left: 0; - margin-right: 0; - margin-top: 0; - margin-bottom: 0; } - -.video-js.vjs-fluid, -.video-js.vjs-16-9, -.video-js.vjs-4-3 { - width: 100%; - max-width: 100%; - height: 0; } - -.video-js.vjs-16-9 { - padding-top: 56.25%; } - -.video-js.vjs-4-3 { - padding-top: 75%; } - -.video-js.vjs-fill { - width: 100%; - height: 100%; } - -.video-js .vjs-tech { - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; } - -body.vjs-full-window { - padding: 0; - margin: 0; - height: 100%; - overflow-y: auto; } - -.vjs-full-window .video-js.vjs-fullscreen { - position: fixed; - overflow: hidden; - z-index: 1000; - left: 0; - top: 0; - bottom: 0; - right: 0; } - -.video-js.vjs-fullscreen { - width: 100% !important; - height: 100% !important; - padding-top: 0 !important; } - -.video-js.vjs-fullscreen.vjs-user-inactive { - cursor: none; } - -.vjs-hidden { - display: none !important; } - -.video-js .vjs-offscreen { - height: 1px; - left: -9999px; - position: absolute; - top: 0; - width: 1px; } - -.vjs-lock-showing { - display: block !important; - opacity: 1; - visibility: visible; } - -.vjs-no-js { - padding: 20px; - color: #fff; - background-color: #000; - font-size: 18px; - font-family: Arial, Helvetica, sans-serif; - text-align: center; - width: 300px; - height: 150px; - margin: 0px auto; } - -.vjs-no-js a, -.vjs-no-js a:visited { - color: #66A8CC; } - -.video-js .vjs-big-play-button { - font-size: 3em; - line-height: 1.5em; - height: 1.5em; - width: 3em; - display: block; - position: absolute; - top: 10px; - left: 10px; - padding: 0; - cursor: pointer; - opacity: 1; - border: 0.06666em solid #fff; - background-color: #2B333F; - background-color: rgba(43, 51, 63, 0.7); - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; - border-radius: 0.3em; - -webkit-transition: all 0.4s; - -moz-transition: all 0.4s; - -o-transition: all 0.4s; - transition: all 0.4s; } - -.vjs-big-play-centered .vjs-big-play-button { - top: 50%; - left: 50%; - margin-top: -0.75em; - margin-left: -1.5em; } - -.video-js:hover .vjs-big-play-button, -.video-js .vjs-big-play-button:focus { - outline: 0; - border-color: #fff; - background-color: #73859f; - background-color: rgba(115, 133, 159, 0.5); - -webkit-transition: all 0s; - -moz-transition: all 0s; - -o-transition: all 0s; - transition: all 0s; } - -.vjs-controls-disabled .vjs-big-play-button, -.vjs-has-started .vjs-big-play-button, -.vjs-using-native-controls .vjs-big-play-button, -.vjs-error .vjs-big-play-button { - display: none; } - -.video-js button { - background: none; - border: none; - color: inherit; - display: inline-block; - overflow: visible; - font-size: inherit; - line-height: inherit; - text-transform: none; - text-decoration: none; - transition: none; - -webkit-appearance: none; - -moz-appearance: none; - appearance: none; } - -.video-js .vjs-control.vjs-close-button { - cursor: pointer; - height: 3em; - position: absolute; - right: 0; - top: 0.5em; - z-index: 2; } - -.vjs-menu-button { - cursor: pointer; } - -.vjs-menu .vjs-menu-content { - display: block; - padding: 0; - margin: 0; - overflow: auto; } - -.vjs-scrubbing .vjs-menu-button:hover .vjs-menu { - display: none; } - -.vjs-menu li { - list-style: none; - margin: 0; - padding: 0.2em 0; - line-height: 1.4em; - font-size: 1.2em; - text-align: center; - text-transform: lowercase; } - -.vjs-menu li:focus, -.vjs-menu li:hover { - outline: 0; - background-color: #73859f; - background-color: rgba(115, 133, 159, 0.5); } - -.vjs-menu li.vjs-selected, -.vjs-menu li.vjs-selected:focus, -.vjs-menu li.vjs-selected:hover { - background-color: #fff; - color: #2B333F; } - -.vjs-menu li.vjs-menu-title { - text-align: center; - text-transform: uppercase; - font-size: 1em; - line-height: 2em; - padding: 0; - margin: 0 0 0.3em 0; - font-weight: bold; - cursor: default; } - -.vjs-menu-button-popup .vjs-menu { - display: none; - position: absolute; - bottom: 0; - width: 10em; - left: -3em; - height: 0em; - margin-bottom: 1.5em; - border-top-color: rgba(43, 51, 63, 0.7); } - -.vjs-menu-button-popup .vjs-menu .vjs-menu-content { - background-color: #2B333F; - background-color: rgba(43, 51, 63, 0.7); - position: absolute; - width: 100%; - bottom: 1.5em; - max-height: 15em; } - -.vjs-workinghover .vjs-menu-button-popup:hover .vjs-menu, -.vjs-menu-button-popup .vjs-menu.vjs-lock-showing { - display: block; } - -.video-js .vjs-menu-button-inline { - -webkit-transition: all 0.4s; - -moz-transition: all 0.4s; - -o-transition: all 0.4s; - transition: all 0.4s; - overflow: hidden; } - -.video-js .vjs-menu-button-inline:before { - width: 2.222222222em; } - -.video-js .vjs-menu-button-inline:hover, -.video-js .vjs-menu-button-inline:focus, -.video-js .vjs-menu-button-inline.vjs-slider-active, -.video-js.vjs-no-flex .vjs-menu-button-inline { - width: 12em; } - -.video-js .vjs-menu-button-inline.vjs-slider-active { - -webkit-transition: none; - -moz-transition: none; - -o-transition: none; - transition: none; } - -.vjs-menu-button-inline .vjs-menu { - opacity: 0; - height: 100%; - width: auto; - position: absolute; - left: 4em; - top: 0; - padding: 0; - margin: 0; - -webkit-transition: all 0.4s; - -moz-transition: all 0.4s; - -o-transition: all 0.4s; - transition: all 0.4s; } - -.vjs-menu-button-inline:hover .vjs-menu, -.vjs-menu-button-inline:focus .vjs-menu, -.vjs-menu-button-inline.vjs-slider-active .vjs-menu { - display: block; - opacity: 1; } - -.vjs-no-flex .vjs-menu-button-inline .vjs-menu { - display: block; - opacity: 1; - position: relative; - width: auto; } - -.vjs-no-flex .vjs-menu-button-inline:hover .vjs-menu, -.vjs-no-flex .vjs-menu-button-inline:focus .vjs-menu, -.vjs-no-flex .vjs-menu-button-inline.vjs-slider-active .vjs-menu { - width: auto; } - -.vjs-menu-button-inline .vjs-menu-content { - width: auto; - height: 100%; - margin: 0; - overflow: hidden; } - -.video-js .vjs-control-bar { - display: none; - width: 100%; - position: absolute; - bottom: 0; - left: 0; - right: 0; - height: 3.0em; - background-color: #2B333F; - background-color: rgba(43, 51, 63, 0.7); } - -.vjs-has-started .vjs-control-bar { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - visibility: visible; - opacity: 1; - -webkit-transition: visibility 0.1s, opacity 0.1s; - -moz-transition: visibility 0.1s, opacity 0.1s; - -o-transition: visibility 0.1s, opacity 0.1s; - transition: visibility 0.1s, opacity 0.1s; } - -.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { - visibility: hidden; - opacity: 0; - -webkit-transition: visibility 1s, opacity 1s; - -moz-transition: visibility 1s, opacity 1s; - -o-transition: visibility 1s, opacity 1s; - transition: visibility 1s, opacity 1s; } - -.vjs-controls-disabled .vjs-control-bar, -.vjs-using-native-controls .vjs-control-bar, -.vjs-error .vjs-control-bar { - display: none !important; } - -.vjs-audio.vjs-has-started.vjs-user-inactive.vjs-playing .vjs-control-bar { - opacity: 1; - visibility: visible; } - -@media \0screen { - .vjs-user-inactive.vjs-playing .vjs-control-bar :before { - content: ""; } } - -.vjs-has-started.vjs-no-flex .vjs-control-bar { - display: table; } - -.video-js .vjs-control { - outline: none; - position: relative; - text-align: center; - margin: 0; - padding: 0; - height: 100%; - width: 4em; - -webkit-box-flex: none; - -moz-box-flex: none; - -webkit-flex: none; - -ms-flex: none; - flex: none; } - .video-js .vjs-control:before { - font-size: 1.8em; - line-height: 1.67; } - -.video-js .vjs-control:focus:before, -.video-js .vjs-control:hover:before, -.video-js .vjs-control:focus { - text-shadow: 0em 0em 1em white; } - -.video-js .vjs-control-text { - border: 0; - clip: rect(0 0 0 0); - height: 1px; - margin: -1px; - overflow: hidden; - padding: 0; - position: absolute; - width: 1px; } - -.vjs-no-flex .vjs-control { - display: table-cell; - vertical-align: middle; } - -.video-js .vjs-custom-control-spacer { - display: none; } - -.video-js .vjs-progress-control { - -webkit-box-flex: auto; - -moz-box-flex: auto; - -webkit-flex: auto; - -ms-flex: auto; - flex: auto; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; - min-width: 4em; } - -.vjs-live .vjs-progress-control { - display: none; } - -.video-js .vjs-progress-holder { - -webkit-box-flex: auto; - -moz-box-flex: auto; - -webkit-flex: auto; - -ms-flex: auto; - flex: auto; - -webkit-transition: all 0.2s; - -moz-transition: all 0.2s; - -o-transition: all 0.2s; - transition: all 0.2s; - height: 0.3em; } - -.video-js .vjs-progress-control:hover .vjs-progress-holder { - font-size: 1.666666666666666666em; } - -/* If we let the font size grow as much as everything else, the current time tooltip ends up - ginormous. If you'd like to enable the current time tooltip all the time, this should be disabled - to avoid a weird hitch when you roll off the hover. */ -.video-js .vjs-progress-control:hover .vjs-mouse-display:after, -.video-js .vjs-progress-control:hover .vjs-play-progress:after { - display: block; - font-size: 0.6em; } - -.video-js .vjs-progress-holder .vjs-play-progress, -.video-js .vjs-progress-holder .vjs-load-progress, -.video-js .vjs-progress-holder .vjs-load-progress div { - position: absolute; - display: block; - height: 0.3em; - margin: 0; - padding: 0; - width: 0; - left: 0; - top: 0; } - -.video-js .vjs-mouse-display:before { - display: none; } - -.video-js .vjs-play-progress { - background-color: #fff; } - .video-js .vjs-play-progress:before { - position: absolute; - top: -0.333333333333333em; - right: -0.5em; - font-size: 0.9em; } - -.video-js .vjs-mouse-display:after, -.video-js .vjs-play-progress:after { - display: none; - position: absolute; - top: -3.4em; - right: -1.5em; - font-size: 0.9em; - color: #000; - content: attr(data-current-time); - padding: 6px 8px 8px 8px; - background-color: #fff; - background-color: rgba(255, 255, 255, 0.8); - -webkit-border-radius: 0.3em; - -moz-border-radius: 0.3em; - border-radius: 0.3em; } - -.video-js .vjs-play-progress:before, -.video-js .vjs-play-progress:after { - z-index: 1; } - -.video-js .vjs-load-progress { - background: #bfc7d3; - background: rgba(115, 133, 159, 0.5); } - -.video-js .vjs-load-progress div { - background: white; - background: rgba(115, 133, 159, 0.75); } - -.video-js.vjs-no-flex .vjs-progress-control { - width: auto; } - -.video-js .vjs-progress-control .vjs-mouse-display { - display: none; - position: absolute; - width: 1px; - height: 100%; - background-color: #000; - z-index: 1; } - -.vjs-no-flex .vjs-progress-control .vjs-mouse-display { - z-index: 0; } - -.video-js .vjs-progress-control:hover .vjs-mouse-display { - display: block; } - -.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display, -.video-js.vjs-user-inactive .vjs-progress-control .vjs-mouse-display:after { - visibility: hidden; - opacity: 0; - -webkit-transition: visibility 1s, opacity 1s; - -moz-transition: visibility 1s, opacity 1s; - -o-transition: visibility 1s, opacity 1s; - transition: visibility 1s, opacity 1s; } - -.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display, -.video-js.vjs-user-inactive.vjs-no-flex .vjs-progress-control .vjs-mouse-display:after { - display: none; } - -.video-js .vjs-progress-control .vjs-mouse-display:after { - color: #fff; - background-color: #000; - background-color: rgba(0, 0, 0, 0.8); } - -.video-js .vjs-slider { - outline: 0; - position: relative; - cursor: pointer; - padding: 0; - margin: 0 0.45em 0 0.45em; - background-color: #73859f; - background-color: rgba(115, 133, 159, 0.5); } - -.video-js .vjs-slider:focus { - text-shadow: 0em 0em 1em white; - -webkit-box-shadow: 0 0 1em #fff; - -moz-box-shadow: 0 0 1em #fff; - box-shadow: 0 0 1em #fff; } - -.video-js .vjs-mute-control, -.video-js .vjs-volume-menu-button { - cursor: pointer; - -webkit-box-flex: none; - -moz-box-flex: none; - -webkit-flex: none; - -ms-flex: none; - flex: none; } - -.video-js .vjs-volume-control { - width: 5em; - -webkit-box-flex: none; - -moz-box-flex: none; - -webkit-flex: none; - -ms-flex: none; - flex: none; - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: center; - -webkit-align-items: center; - -ms-flex-align: center; - align-items: center; } - -.video-js .vjs-volume-bar { - margin: 1.35em 0.45em; } - -.vjs-volume-bar.vjs-slider-horizontal { - width: 5em; - height: 0.3em; } - -.vjs-volume-bar.vjs-slider-vertical { - width: 0.3em; - height: 5em; - margin: 1.35em auto; } - -.video-js .vjs-volume-level { - position: absolute; - bottom: 0; - left: 0; - background-color: #fff; } - .video-js .vjs-volume-level:before { - position: absolute; - font-size: 0.9em; } - -.vjs-slider-vertical .vjs-volume-level { - width: 0.3em; } - .vjs-slider-vertical .vjs-volume-level:before { - top: -0.5em; - left: -0.3em; } - -.vjs-slider-horizontal .vjs-volume-level { - height: 0.3em; } - .vjs-slider-horizontal .vjs-volume-level:before { - top: -0.3em; - right: -0.5em; } - -.vjs-volume-bar.vjs-slider-vertical .vjs-volume-level { - height: 100%; } - -.vjs-volume-bar.vjs-slider-horizontal .vjs-volume-level { - width: 100%; } - -.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu { - display: block; - width: 0; - height: 0; - border-top-color: transparent; } - -.vjs-menu-button-popup.vjs-volume-menu-button-vertical .vjs-menu { - left: 0.5em; - height: 8em; } - -.vjs-menu-button-popup.vjs-volume-menu-button-horizontal .vjs-menu { - left: -2em; } - -.vjs-menu-button-popup.vjs-volume-menu-button .vjs-menu-content { - height: 0; - width: 0; - overflow-x: hidden; - overflow-y: hidden; } - -.vjs-volume-menu-button-vertical:hover .vjs-menu-content, -.vjs-volume-menu-button-vertical:focus .vjs-menu-content, -.vjs-volume-menu-button-vertical.vjs-slider-active .vjs-menu-content, -.vjs-volume-menu-button-vertical .vjs-lock-showing .vjs-menu-content { - height: 8em; - width: 2.9em; } - -.vjs-volume-menu-button-horizontal:hover .vjs-menu-content, -.vjs-volume-menu-button-horizontal:focus .vjs-menu-content, -.vjs-volume-menu-button-horizontal .vjs-slider-active .vjs-menu-content, -.vjs-volume-menu-button-horizontal .vjs-lock-showing .vjs-menu-content { - height: 2.9em; - width: 8em; } - -.vjs-volume-menu-button.vjs-menu-button-inline .vjs-menu-content { - background-color: transparent !important; } - -.vjs-poster { - display: inline-block; - vertical-align: middle; - background-repeat: no-repeat; - background-position: 50% 50%; - background-size: contain; - cursor: pointer; - margin: 0; - padding: 0; - position: absolute; - top: 0; - right: 0; - bottom: 0; - left: 0; - height: 100%; } - -.vjs-poster img { - display: block; - vertical-align: middle; - margin: 0 auto; - max-height: 100%; - padding: 0; - width: 100%; } - -.vjs-has-started .vjs-poster { - display: none; } - -.vjs-audio.vjs-has-started .vjs-poster { - display: block; } - -.vjs-controls-disabled .vjs-poster { - display: none; } - -.vjs-using-native-controls .vjs-poster { - display: none; } - -.video-js .vjs-live-control { - display: -webkit-box; - display: -webkit-flex; - display: -ms-flexbox; - display: flex; - -webkit-box-align: flex-start; - -webkit-align-items: flex-start; - -ms-flex-align: flex-start; - align-items: flex-start; - -webkit-box-flex: auto; - -moz-box-flex: auto; - -webkit-flex: auto; - -ms-flex: auto; - flex: auto; - font-size: 1em; - line-height: 3em; } - -.vjs-no-flex .vjs-live-control { - display: table-cell; - width: auto; - text-align: left; } - -.video-js .vjs-time-control { - -webkit-box-flex: none; - -moz-box-flex: none; - -webkit-flex: none; - -ms-flex: none; - flex: none; - font-size: 1em; - line-height: 3em; - min-width: 2em; - width: auto; - padding-left: 1em; - padding-right: 1em; } - -.vjs-live .vjs-time-control { - display: none; } - -.video-js .vjs-current-time, -.vjs-no-flex .vjs-current-time { - display: none; } - -.video-js .vjs-duration, -.vjs-no-flex .vjs-duration { - display: none; } - -.vjs-time-divider { - display: none; - line-height: 3em; } - -.vjs-live .vjs-time-divider { - display: none; } - -.video-js .vjs-play-control { - cursor: pointer; - -webkit-box-flex: none; - -moz-box-flex: none; - -webkit-flex: none; - -ms-flex: none; - flex: none; } - -.vjs-text-track-display { - position: absolute; - bottom: 3em; - left: 0; - right: 0; - top: 0; - pointer-events: none; } - -.video-js.vjs-user-inactive.vjs-playing .vjs-text-track-display { - bottom: 1em; } - -.video-js .vjs-text-track { - font-size: 1.4em; - text-align: center; - margin-bottom: 0.1em; - background-color: #000; - background-color: rgba(0, 0, 0, 0.5); } - -.vjs-subtitles { - color: #fff; } - -.vjs-captions { - color: #fc6; } - -.vjs-tt-cue { - display: block; } - -video::-webkit-media-text-track-display { - -moz-transform: translateY(-3em); - -ms-transform: translateY(-3em); - -o-transform: translateY(-3em); - -webkit-transform: translateY(-3em); - transform: translateY(-3em); } - -.video-js.vjs-user-inactive.vjs-playing video::-webkit-media-text-track-display { - -moz-transform: translateY(-1.5em); - -ms-transform: translateY(-1.5em); - -o-transform: translateY(-1.5em); - -webkit-transform: translateY(-1.5em); - transform: translateY(-1.5em); } - -.video-js .vjs-fullscreen-control { - cursor: pointer; - -webkit-box-flex: none; - -moz-box-flex: none; - -webkit-flex: none; - -ms-flex: none; - flex: none; } - -.vjs-playback-rate .vjs-playback-rate-value { - font-size: 1.5em; - line-height: 2; - position: absolute; - top: 0; - left: 0; - width: 100%; - height: 100%; - text-align: center; } - -.vjs-playback-rate .vjs-menu { - width: 4em; - left: 0em; } - -.vjs-error .vjs-error-display .vjs-modal-dialog-content { - font-size: 1.4em; - text-align: center; } - -.vjs-error .vjs-error-display:before { - color: #fff; - content: 'X'; - font-family: Arial, Helvetica, sans-serif; - font-size: 4em; - left: 0; - line-height: 1; - margin-top: -0.5em; - position: absolute; - text-shadow: 0.05em 0.05em 0.1em #000; - text-align: center; - top: 50%; - vertical-align: middle; - width: 100%; } - -.vjs-loading-spinner { - display: none; - position: absolute; - top: 50%; - left: 50%; - margin: -25px 0 0 -25px; - opacity: 0.85; - text-align: left; - border: 6px solid rgba(43, 51, 63, 0.7); - box-sizing: border-box; - background-clip: padding-box; - width: 50px; - height: 50px; - border-radius: 25px; } - -.vjs-seeking .vjs-loading-spinner, -.vjs-waiting .vjs-loading-spinner { - display: block; } - -.vjs-loading-spinner:before, -.vjs-loading-spinner:after { - content: ""; - position: absolute; - margin: -6px; - box-sizing: inherit; - width: inherit; - height: inherit; - border-radius: inherit; - opacity: 1; - border: inherit; - border-color: transparent; - border-top-color: white; } - -.vjs-seeking .vjs-loading-spinner:before, -.vjs-seeking .vjs-loading-spinner:after, -.vjs-waiting .vjs-loading-spinner:before, -.vjs-waiting .vjs-loading-spinner:after { - -webkit-animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; - animation: vjs-spinner-spin 1.1s cubic-bezier(0.6, 0.2, 0, 0.8) infinite, vjs-spinner-fade 1.1s linear infinite; } - -.vjs-seeking .vjs-loading-spinner:before, -.vjs-waiting .vjs-loading-spinner:before { - border-top-color: white; } - -.vjs-seeking .vjs-loading-spinner:after, -.vjs-waiting .vjs-loading-spinner:after { - border-top-color: white; - -webkit-animation-delay: 0.44s; - animation-delay: 0.44s; } - -@keyframes vjs-spinner-spin { - 100% { - transform: rotate(360deg); } } - -@-webkit-keyframes vjs-spinner-spin { - 100% { - -webkit-transform: rotate(360deg); } } - -@keyframes vjs-spinner-fade { - 0% { - border-top-color: #73859f; } - 20% { - border-top-color: #73859f; } - 35% { - border-top-color: white; } - 60% { - border-top-color: #73859f; } - 100% { - border-top-color: #73859f; } } - -@-webkit-keyframes vjs-spinner-fade { - 0% { - border-top-color: #73859f; } - 20% { - border-top-color: #73859f; } - 35% { - border-top-color: white; } - 60% { - border-top-color: #73859f; } - 100% { - border-top-color: #73859f; } } - -.vjs-chapters-button .vjs-menu ul { - width: 24em; } - -.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-custom-control-spacer { - -webkit-box-flex: auto; - -moz-box-flex: auto; - -webkit-flex: auto; - -ms-flex: auto; - flex: auto; } - -.video-js.vjs-layout-tiny:not(.vjs-fullscreen).vjs-no-flex .vjs-custom-control-spacer { - width: auto; } - -.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-remaining-time, -.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-playback-rate, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-progress-control, -.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-control, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-volume-menu-button, -.video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-captions-button, .video-js.vjs-layout-tiny:not(.vjs-fullscreen) .vjs-subtitles-button { - display: none; } - -.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-remaining-time, -.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-playback-rate, -.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-control, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-volume-menu-button, -.video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-captions-button, .video-js.vjs-layout-x-small:not(.vjs-fullscreen) .vjs-subtitles-button { - display: none; } - -.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-current-time, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-time-divider, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-duration, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-remaining-time, -.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-playback-rate, -.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-mute-control, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-volume-control, -.video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-chapters-button, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-captions-button, .video-js.vjs-layout-small:not(.vjs-fullscreen) .vjs-subtitles-button { - display: none; } - -.vjs-caption-settings { - position: relative; - top: 1em; - background-color: #2B333F; - background-color: rgba(43, 51, 63, 0.75); - color: #fff; - margin: 0 auto; - padding: 0.5em; - height: 15em; - font-size: 12px; - width: 40em; } - -.vjs-caption-settings .vjs-tracksettings { - top: 0; - bottom: 2em; - left: 0; - right: 0; - position: absolute; - overflow: auto; } - -.vjs-caption-settings .vjs-tracksettings-colors, -.vjs-caption-settings .vjs-tracksettings-font { - float: left; } - -.vjs-caption-settings .vjs-tracksettings-colors:after, -.vjs-caption-settings .vjs-tracksettings-font:after, -.vjs-caption-settings .vjs-tracksettings-controls:after { - clear: both; } - -.vjs-caption-settings .vjs-tracksettings-controls { - position: absolute; - bottom: 1em; - right: 1em; } - -.vjs-caption-settings .vjs-tracksetting { - margin: 5px; - padding: 3px; - min-height: 40px; } - -.vjs-caption-settings .vjs-tracksetting label { - display: block; - width: 100px; - margin-bottom: 5px; } - -.vjs-caption-settings .vjs-tracksetting span { - display: inline; - margin-left: 5px; } - -.vjs-caption-settings .vjs-tracksetting > div { - margin-bottom: 5px; - min-height: 20px; } - -.vjs-caption-settings .vjs-tracksetting > div:last-child { - margin-bottom: 0; - padding-bottom: 0; - min-height: 0; } - -.vjs-caption-settings label > input { - margin-right: 10px; } - -.vjs-caption-settings input[type="button"] { - width: 40px; - height: 40px; } - -.video-js .vjs-modal-dialog { - background: rgba(0, 0, 0, 0.8); - background: -webkit-linear-gradient(-90deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0)); - background: linear-gradient(180deg, rgba(0, 0, 0, 0.8), rgba(255, 255, 255, 0)); } - -.vjs-modal-dialog .vjs-modal-dialog-content { - font-size: 1.2em; - line-height: 1.5; - padding: 20px 24px; - z-index: 1; } diff --git a/embed/player.js b/embed/player.js new file mode 100644 index 00000000..a643ebb1 --- /dev/null +++ b/embed/player.js @@ -0,0 +1,1127 @@ +var mistplayers = {}; /*TODO move this*/ +function MistPlayer() {}; +function mistPlay(streamName,options) { + return new MistVideo(streamName,options); +} +function MistVideo(streamName,options) { + var MistVideo = this; + + if (!options) { options = {}; } + if (typeof mistoptions != "undefined") { + options = MistUtil.object.extend(MistUtil.object.extend({},mistoptions),options); + } + options = MistUtil.object.extend({ + host: null, //override mistserver host (default is the host that player.js is loaded from) + autoplay: true, //start playing when loaded + controls: true, //show controls (MistControls when available) + loop: false, //don't loop when the stream has finished + poster: null, //don't show an image before the stream has started + callback: false, //don't call a function when the player has finished building + streaminfo: false, //don't use this streaminfo but collect it from the mistserverhost + startCombo: false, //start looking for a player/source match at the start + forceType: false, //don't force a mimetype + forcePlayer: false, //don't force a player + forceSource: false, //don't force a source + forcePriority: false, //no custom priority sorting + monitor: false, //no custom monitoring + reloadDelay: false, //don't override default reload delay + urlappend: false, //don't add this to urls + setTracks: false, //don't set tracks + fillSpace: false, //don't fill parent container + width: false, //no set width + height: false, //no set height + maxwidth: false, //no max width (apart from targets dimensions) + maxheight: false, //no max height (apart from targets dimensions) + MistVideoObject: false//no reference object is passed + },options); + if (options.host) { options.host = MistUtil.http.url.sanitizeHost(options.host); } + + this.options = options; + this.stream = streamName; + this.info = false; + this.logs = []; + this.log = function(message,type){ + if (!type) { type = "log"; } + MistUtil.event.send(type,message,options.target); + var data = { + type: type + }; + this.logs.push({ + time: new Date(), + message: message, + data: data + }); + if (this.options.skin == "dev") { + try { + var msg = "["+(type ? type :"log")+"] "+(MistVideo.destroyed ? "[DESTROYED] " : "")+(this.player && this.player.api ? MistUtil.format.time(this.player.api.currentTime,{ms:true})+" " : "")+message; + if (type && (type != "log")) { console.warn(msg); } + else { console.log(msg); } + } catch(e){} + } + }; + this.log("Initializing.."); + + this.timers = { + list: {}, //will contain the timeouts, format timeOutIndex: endTime + start: function(callback,delay){ + var i = setTimeout(function(){ + delete MistVideo.timers.list[i]; + callback(); + },delay); + this.list[i] = new Date(new Date().getTime() + delay); + return i; + }, + stop: function(which){ + var list; + if (which == "all") { + list = this.list; + } + else { + list = {}; + list[which] = 1; + } + + for (var i in list) { + //MistVideo.log("Stopping timer "+i); + clearTimeout(i); + delete this.list[i]; + } + } + } + this.errorListeners = []; + + this.urlappend = function(url){ + if (this.options.urlappend) { + url += this.options.urlappend; + } + return url; + } + + new MistSkin(this); + + this.checkPlayer = function(options,quiet) { + if (!options) { + options = {}; + } + options = MistUtil.object.extend(MistUtil.object.extend({},this.options),options) + + var source = false; + var mistPlayer = false; + + if (options.startCombo) { + options.startCombo.started = { + player: false, + source: false + }; + } + + //retrieve the sources we can loop over + var sources; + if (options.forceSource) { + sources = [MistVideo.info.source[options.forceSource]]; + MistVideo.log("Forcing source "+options.forceSource+": "+sources[0].type+" @ "+sources[0].url); + } + else if (options.forceType) { + sources = MistVideo.info.source.filter(function(d){ return (d.type == options.forceType); }); + MistVideo.log("Forcing type "+options.forceType); + } + else { + sources = MistVideo.info.source; + } + + //retrieve and sort the players we can loop over + var players; + if (options.forcePlayer) { + players = [options.forcePlayer]; + MistVideo.log("Forcing player "+options.forcePlayer); + } + else { + players = MistUtil.object.keys(mistplayers); + } + + + //create a copy to not mess with the sorting of the original sourced array + sources = [].concat(sources); + + var sortoptions = { + first: "source", + source: [function(a){ + if ("origIndex" in a) { return a.origIndex; } + + //use original sorting -> retrieve index in original array + a.origIndex = MistVideo.info.source.indexOf(a) + return a.origIndex; + }], + player: [{priority:-1}] + }; + var map = { + inner: "player", + outer: "source" + }; + if (options.forcePriority) { + if ("source" in options.forcePriority) { + if (!(options.forcePriority.source instanceof Array)) { throw "forcePriority.source is not an array."; } + sortoptions.source = options.forcePriority.source.concat(sortoptions.source); //prepend + MistUtil.array.multiSort(sources,sortoptions.source); + } + if ("player" in options.forcePriority) { + if (!(options.forcePriority.player instanceof Array)) { throw "forcePriority.player is not an array."; } + sortoptions.player = options.forcePriority.player.concat(sortoptions.player); //prepend + MistUtil.array.multiSort(players,sortoptions.players); + } + if ("first" in options.forcePriority) { + sortopions.first = options.forcePriority.first; //overwrite + } + + + //define inner and outer loops + if (sortoptions.first == "player") { + map.outer = "player"; + map.inner = "source"; + } + } + + var variables = { + player: { + list: players, + current: false + }, + source: { + list: sources, + current: false + } + }; + + function checkStartCombo(which) { + if ((options.startCombo) && (!options.startCombo.started[which])) { + //if we have a starting point for the loops, skip testing until we are at the correct point + if ((options.startCombo[which] == variables[which].current) || (options.startCombo[which] == variables[which].list[variables[which].current])) { + //we're here! + options.startCombo.started[which] = true; + return 1; //issue continue statement in inner loop + } + return 2; //always issue continue statement + } + return 0; //carry on! + } + + outerloop: + for (var n in variables[map.outer].list) { + variables[map.outer].current = n; + + //loop over the sources (prioritized by MistServer) + + if (checkStartCombo(map.outer) >= 2) { continue; } + + innerloop: + for (var m in variables[map.inner].list) { + variables[map.inner].current = m; + + if (checkStartCombo(map.inner) >= 1) { continue; } + + var source = variables.source.list[variables.source.current]; + var p_shortname = variables.player.list[variables.player.current]; + var player = mistplayers[p_shortname]; + + if (player.isMimeSupported(source.type)) { + //this player supports this mime + if (player.isBrowserSupported(source.type,source,MistVideo)) { + //this browser is supported + return { + player: p_shortname, + source: source, + source_index: variables.source.current + }; + } + } + if (!quiet) { MistVideo.log("Checking "+player.name+" with "+source.type+".. Nope."); } + } + } + + return false; + } + + this.choosePlayer = function() { + MistVideo.log("Checking available players.."); + + var result = this.checkPlayer(); + if (!result) { return false; } + + var player = mistplayers[result.player]; + var source = result.source; + + MistVideo.log("Found a working combo: "+player.name+" with "+source.type+" @ "+source.url); + MistVideo.playerName = result.player; + source = MistUtil.object.extend({},source); + source.index = result.source_index; + source.url = MistVideo.urlappend(source.url); + MistVideo.source = source; + + MistUtil.event.send("playerChosen","Player/source combination selected",MistVideo.options.target); + + return true; + } + + function hasVideo(d){ + if (("meta" in d) && ("tracks" in d.meta)) { + //check if this stream has video + var tracks = d.meta.tracks; + var hasVideo = false; + for (var i in tracks) { + if (tracks[i].type == "video") { + return true; + } + } + } + return false; + } + + function onStreamInfo(d) { + + MistVideo.info = d; + MistVideo.info.updated = new Date(); + MistUtil.event.send("haveStreamInfo",d,MistVideo.options.target); + MistVideo.log("Stream info was loaded succesfully."); + + if ("error" in d) { + var e = data.error; + if ("on_error" in d) { + MistVideo.log(e); + e = data.on_error; + } + MistVideo.showError(e,{reload:true}); + return; + } + + //pre-show poster or other loading image + MistVideo.calcSize = function(size) { + if (!size) { size = { width:false, height:false }; } + + var fw = size.width || ('width' in options && options.width ? options.width : false ); //force this width + var fh = size.height || ('height' in options && options.height ? options.height : false ); //force this height + + if (!("source" in this.info)) { + fw = 640; + fh = 480; + } + else if ((!this.info.hasVideo) || (this.source.type.split("/")[1] == "audio")){ + if (!fw) { fw = 480; } + if (!fh) { fh = 42; } + } + else { + //calculate desired width and height + if (!(fw && fh)) { + var ratio = MistVideo.info.width / MistVideo.info.height; + if (fw || fh) { + if (fw) { + fh = fw/ratio; + } + else { + fw = fh*ratio; + } + } + else { + + //neither width or height are being forced. Set them to the minimum of video and target size + var cw = ('maxwidth' in options && options.maxwidth ? options.maxwidth : window.innerWidth); + var ch = ('maxheight' in options && options.maxheight ? options.maxheight : window.innerHeight); + var fw = MistVideo.info.width; + var fh = MistVideo.info.height; + + function rescale(factor){ + fw /= factor; + fh /= factor; + }; + + if (fw < 426) { //rescale if video width is smaller than 240p + rescale(fw / 426); + } + if (fh < 240) { //rescale if video height is smaller than 240p + rescale(fh / 240); + } + + if (cw) { + if (fw > cw) { //rescale if video width is larger than the target + rescale(fw / cw); + } + } + if (ch) { + if (fh > ch) { //rescale if video height is (still?) larger than the target + rescale(fh / ch); + } + } + } + } + } + this.size = { + width: Math.round(fw), + height: Math.round(fh) + }; + return this.size; + }; + + d.hasVideo = hasVideo(d); + + + if (d.type == "live") { + //calculate duration so far + var maxms = 0; + for (var i in MistVideo.info.meta.tracks) { + maxms = Math.max(maxms,MistVideo.info.meta.tracks[i].lastms); + } + d.lastms = maxms; + } + + + + if (MistVideo.choosePlayer()) { + + //build player + MistVideo.player = new mistplayers[MistVideo.playerName].player(); + + MistVideo.player.onreadylist = []; + MistVideo.player.onready = function(dothis){ + this.onreadylist.push(dothis); + }; + + + MistVideo.player.build(MistVideo,function(video){ + + MistVideo.container.removeAttribute("data-loading"); + MistVideo.video = video; + + if ("api" in MistVideo.player) { + + //add monitoring + MistVideo.monitor = { + MistVideo: MistVideo, //added here so that the other functions can use it. Do not override it. + delay: 1, //the amount of seconds between measurements. + averagingSteps: 20, //the amount of measurements that are saved. + threshold: function(){ //returns the score threshold below which the "action" should be taken + if (this.MistVideo.source.type == "webrtc") { + return 0.97; + } + return 0.75; + }, + init: function(){ //starts the monitor and defines the basic shape of the procedure it follows. This is called when the stream should begin playback. + + if ((this.vars) && (this.vars.active)) { return; } //it's already running, don't bother + this.MistVideo.log("Enabling monitor"); + + this.vars = { + values: [], + score: false, + active: true + }; + + var monitor = this; + //the procedure to follow + function repeat(){ + if ((monitor.vars) && (monitor.vars.active)) { + monitor.vars.timer = monitor.MistVideo.timers.start(function(){ + + var score = monitor.calcScore(); + if (score !== false) { + if (monitor.check(score)) { + monitor.action(); + } + } + repeat(); + },monitor.delay*1e3); + } + } + repeat(); + + }, + destroy: function(){ //stops the monitor. This is called when the stream has ended or has been paused by the viewer. + + if ((!this.vars) || (!this.vars.active)) { return; } //it's not running, don't bother] + + this.MistVideo.log("Disabling monitor"); + this.MistVideo.timers.stop(this.vars.timer); + delete this.vars; + }, + reset: function(){ //clears the monitor’s history. This is called when the history becomes invalid because of a seek or change in the playback rate. + + if ((!this.vars) || (!this.vars.active)) { + //it's not running, start it up + this.init(); + return; + } + + this.MistVideo.log("Resetting monitor"); + this.vars.values = []; + }, + calcScore: function(){ //calculate and save the current score + + var list = this.vars.values; + list.push(this.getValue()); //add the current value to the history + + if (list.length <= 1) { return false; } //no history yet, can't calculate a score + + var score = this.valueToScore(list[0],list[list.length-1]); //should be 1, decreases if bad + + //kick the oldest value from the array + if (list.length > this.averagingSteps) { list.shift(); } + + //the final score is the maximum of the averaged and the current value + score = Math.max(score,list[list.length-1].score); + + this.vars.score = score; + return score; + }, + valueToScore: function(a,b){ //calculate the moving average + //if this returns > 1, the video played faster than the clock + //if this returns < 0, the video time went backwards + var rate = 1; + if (("player" in this.MistVideo) && ("api" in this.MistVideo.player) && ("playbackRate" in this.MistVideo.player.api)) { + rate = this.MistVideo.player.api.playbackRate; + } + return (b.video - a.video) / (b.clock - a.clock) / rate; + }, + getValue: function(){ //save the current testing value and time + // If the video plays, this should keep a constant value. If the video is stalled, it will go up with 1sec/sec. If the video is playing faster, it will go down. + // current clock time - current playback time + var result = { + clock: (new Date()).getTime()*1e-3, + video: this.MistVideo.player.api.currentTime, + }; + if (this.vars.values.length) { + result.score = this.valueToScore(this.vars.values[this.vars.values.length-1],result); + } + + return result; + }, + check: function(score){ //determine if the current score is good enough. It must return true if the score fails. + + if (this.vars.values.length < this.averagingSteps * 0.5) { return false; } //gather enough values first + + if (score < this.threshold()) { + return true; + } + }, + action: function(){ //what to do when the check is failed + var score = this.vars.score; + + //passive: only if nothing is already showing + this.MistVideo.showError("Poor playback: "+Math.max(0,Math.round(score*100))+"%",{ + passive: true, + reload: true, + nextCombo: true, + ignore: true, + type: "poor_playback" + }); + } + }; + + //overwrite (some?) monitoring functions/values with custom ones if specified + if ("monitor" in MistVideo.options) { + MistVideo.monitor.default = MistUtil.object.extend({},MistVideo.monitor); + MistUtil.object.extend(MistVideo.monitor,MistVideo.options.monitor); + } + + //enable + var events = ["loadstart","play","playing"]; + for (var i in events) { + MistUtil.event.addListener(MistVideo.video,events[i],function(){MistVideo.monitor.init()}); + } + + //disable + var events = ["loadeddata","pause","abort","emptied","ended"]; + for (var i in events) { + MistUtil.event.addListener(MistVideo.video,events[i],function(){ + if (MistVideo.monitor) { MistVideo.monitor.destroy(); } + }); + } + + //reset + var events = ["seeking","seeked",/*"canplay","playing",*/"ratechange"]; + for (var i in events) { + MistUtil.event.addListener(MistVideo.video,events[i],function(){ + if (MistVideo.monitor) { MistVideo.monitor.reset(); } + }); + } + + } + + //remove placeholder and add UI structure + + MistUtil.empty(MistVideo.options.target); + new MistSkin(MistVideo); + MistVideo.container = new MistUI(MistVideo); + MistVideo.options.target.appendChild(MistVideo.container); + MistVideo.container.setAttribute("data-loading",""); //will be removed automatically when video loads + + MistVideo.video.p = MistVideo.player; + + //add event logging + var events = [ + "abort","canplay","canplaythrough","durationchange","emptied","ended","loadeddata","loadedmetadata","loadstart","pause","play","playing","ratechange","seeked","seeking","stalled","volumechange","waiting","metaUpdate_tracks","resizing" + //,"timeupdate" + ]; + for (var i in events) { + MistUtil.event.addListener(MistVideo.video,events[i],function(e){ + MistVideo.log("Player event fired: "+e.type); + }); + } + MistUtil.event.addListener(MistVideo.video,"error",function(e){ + var msg; + if ( + ("player" in MistVideo) && ("api" in MistVideo.player) + && ("error" in MistVideo.player.api) && (MistVideo.player.api.error) + ) { + if ("message" in MistVideo.player.api.error) { + msg = MistVideo.player.api.error.message; + } + else if (("code" in MistVideo.player.api.error) && (MistVideo.player.api.error instanceof MediaError)) { + var human = { + 1: "MEDIA_ERR_ABORTED: The fetching of the associated resource was aborted by the user's request.", + 2: "MEDIA_ERR_NETWORK: Some kind of network error occurred which prevented the media from being successfully fetched, despite having previously been available.", + 3: "MEDIA_ERR_DECODE: Despite having previously been determined to be usable, an error occurred while trying to decode the media resource, resulting in an error.", + 4: "MEDIA_ERR_SRC_NOT_SUPPORTED: The associated resource or media provider object (such as a MediaStream) has been found to be unsuitable." + }; + if (MistVideo.player.api.error.code in human) { + msg = human[MistVideo.player.api.error.code]; + } + else { + msg = "MediaError code "+MistVideo.player.api.error.code; + } + } + else { + msg = MistVideo.player.api.error; + if (typeof msg != "string") { + msg = JSON.stringify(msg); + } + } + } + else { + msg = "An error was encountered."; + //console.log("Err:",e); + } + MistVideo.showError(msg); + }); + + //add general resize function + if ("setSize" in MistVideo.player) { + MistVideo.player.videocontainer = MistVideo.video.parentNode; + MistVideo.video.currentTarget = MistVideo.options.target; + if (!MistUtil.class.has(MistVideo.options.target,"secondaryVideo")) { + //this is the main MistVideo + MistVideo.player.resizeAll = function(){ + function findVideo(startAt,matchTarget) { + if (startAt.video.currentTarget == matchTarget) { + return startAt.video; + } + if (startAt.secondary) { + for (var i = 0; i < startAt.secondary.length; i++) { + var result = findVideo(startAt.secondary[i].MistVideo,matchTarget); + if (result) { return result; } + } + } + return false; + } + + //find the video that is in the main container, and resize that one + findVideo(MistVideo,MistVideo.options.target).p.resize(); + + //then, resize the secondaries + if ("secondary" in MistVideo) { + function tryResize(mv){ + if (mv.MistVideo) { + if ("player" in mv.MistVideo) { + findVideo(MistVideo,mv.MistVideo.options.target).p.resize(); + } + } + else { + //player is not loaded yet, try again later + MistVideo.timers.start(function(){ + tryResize(mv); + },0.1e3); + } + } + for (var i in MistVideo.secondary) { + tryResize(MistVideo.secondary[i]); + } + } + }; + + } + MistVideo.player.resize = function(options){ + if (!MistVideo.container.hasAttribute("data-fullscreen")) { + //if ((!document.fullscreenElement) || (document.fullscreenElement.parentElement != MistVideo.video.currentTarget)) { + //first, base the size on the video dimensions + size = MistVideo.calcSize(options); + this.setSize(size); + MistVideo.container.style.width = size.width+"px"; + MistVideo.container.style.height = size.height+"px"; + + if ((MistVideo.options.fillSpace) && (!options || !options.reiterating)) { + //if this container is set to fill the available space + //start by fitting the video to the window size, then iterate until the container is not smaller than the video + return this.resize({ + width:window.innerWidth, + height: false, + reiterating: true + }); + } + + //check if the container is smaller than the video, if so, set the max size to the current container dimensions and reiterate + if ((MistVideo.video.currentTarget.clientHeight) && (MistVideo.video.currentTarget.clientHeight < size.height)) { + //console.log("current h:",size.height,"target h:",MistVideo.video.currentTarget.clientHeight); + return this.resize({ + width: false, + height: MistVideo.video.currentTarget.clientHeight, + reiterating: true + }); + } + if ((MistVideo.video.currentTarget.clientWidth) && (MistVideo.video.currentTarget.clientWidth < size.width)) { + //console.log("current w:",size.width,"target w:",MistVideo.video.currentTarget.clientWidth); + return this.resize({ + width: MistVideo.video.currentTarget.clientWidth, + height: false, + reiterating: true + }); + } + MistVideo.log("Player size calculated: "+size.width+" x "+size.height+" px"); + return true; + } + else { + function findVideo(parent) { + for (var i = 0; i < parent.children.length; i++) { + if (MistUtil.class.has(parent.children[i],"video")) { + return parent.children[i]; + } + } + } + + //this is the video that is in the main container, and resize this one to the screen dimensions + this.setSize({ + height: window.innerHeight, + width: window.innerWidth + }); + return true; + } + }; + + //if this is the main video + if (!MistUtil.class.has(MistVideo.options.target,"secondaryVideo")) { + MistUtil.event.addListener(window,"resize",function(){ + if (MistVideo.destroyed) { return; } + MistVideo.player.resizeAll(); + },MistVideo.video); + MistUtil.event.addListener(MistVideo.options.target,"resize",function(){ + MistVideo.player.resizeAll(); + },MistVideo.video); + MistVideo.player.resizeAll(); + } + } + + if (MistVideo.player.api) { + //add general setSource function + if ("setSource" in MistVideo.player.api) { + MistVideo.sourceParams = {}; + MistVideo.player.api.setSourceParams = function(url,params){ + //append these params to the current source, overwrite if they already exist + MistUtil.object.extend(MistVideo.sourceParams,params); + + MistVideo.player.api.setSource(MistUtil.http.url.addParam(url,params)); + }; + + //add track selection function + if (!("setTrack" in MistVideo.player.api)) { + MistVideo.player.api.setTracks = function(usetracks){ + + //check tracks exist + var meta = MistUtil.tracks.parse(MistVideo.info.meta.tracks); + for (var i in usetracks) { + if ((i in meta) && ((usetracks[i] in meta[i]) || (usetracks[i] == 0))) { continue; } + MistVideo.log("Skipping trackselection of "+i+" track "+usetracks[i]+" because it does not exist"); + delete usetracks[i]; + } + if (!MistUtil.object.keys(usetracks).length) { return; } + + //create source url + var newurl; + if (MistVideo.source.type == "html5/application/vnd.apple.mpegurl") { //for HLS, use a different format for track selection + newurl = MistVideo.source.url.split("/"); + var m3u8 = newurl.pop(); //take this off now, it will be added back later + var hlstracks = []; + for (var i in usetracks) { + //for audio or video tracks, just add the tracknumber between slashes + switch (i) { + case "audio": + case "video": + if (usetracks[i] == 0) { continue; } + hlstracks.push(usetracks[i]); + break; + } + } + if (hlstracks.length) { newurl.push(hlstracks.join("_")); } + newurl.push(m3u8); //put back index.m3u8 + newurl = newurl.join("/"); + usetracks = {}; + } + else { + newurl = MistVideo.source.url; + } + + var time = MistVideo.player.api.currentTime; + + //actually switch to the new source url + this.setSourceParams(newurl,usetracks); + + //restore video position + var f = function(){ + this.currentTime = time; + this.removeEventListener("loadedmetadata",f); + }; + MistUtil.event.addListener(MistVideo.video,"loadedmetadata",f); + + } + + } + + if (options.setTracks) { + if ("setTrack" in MistVideo.player.api) { + MistVideo.player.onready(function(){ + for (var i in options.setTracks) { + MistVideo.player.api.setTrack(i,options.setTracks[i]); + } + }); + } + else if ("setTracks" in MistVideo.player.api) { + MistVideo.player.onready(function(){ + MistVideo.player.api.setTracks(options.setTracks); + }); + } + } + + } + + } + + for (var i in MistVideo.player.onreadylist) { + MistVideo.player.onreadylist[i](); + } + + MistUtil.event.send("initialized",null,options.target); + MistVideo.log("Initialized"); + if (MistVideo.options.callback) { options.callback(MistVideo); } + + }); + } + else if (MistVideo.options.startCombo) { + //try again without a startCombo + delete MistVideo.options.startCombo; + MistVideo.unload(); + MistVideo = mistPlay(MistVideo.stream,MistVideo.options); + } + else { + MistVideo.showError("No compatible player/source combo found.",{reload:true}); + MistUtil.event.send("initializeFailed",null,options.target); + MistVideo.log("Initialization failed"); + } + } + + MistVideo.calcSize = function(){ + return { + width: 640, + height: 480 + }; + }; + + //load placeholder + MistUtil.empty(MistVideo.options.target); + new MistSkin(MistVideo); + MistVideo.container = new MistUI(MistVideo,MistVideo.skin.structure.placeholder); + MistVideo.options.target.appendChild(MistVideo.container); + MistVideo.container.setAttribute("data-loading",""); + + //listen for changes to the srteam status + //TODO switch to polling-mode if websockets are not supported + if ("WebSocket" in window) { + function openSocket() { + MistVideo.log("Opening stream status stream.."); + var url = MistVideo.options.host.replace(/^http/i,"ws"); + var socket = new WebSocket(MistVideo.urlappend(url+"/json_"+encodeURIComponent(MistVideo.stream)+".js")); + MistVideo.socket = socket; + socket.die = false; + socket.destroy = function(){ + this.die = true; + this.close(); + }; + socket.onopen = function(e){ + this.wasConnected = true; + }; + socket.onclose = function(e){ + if (this.die) { + //it's supposed to go down + return; + } + if (this.wasConnected) { + MistVideo.log("Reopening websocket.."); + openSocket(); + return; + } + var msg = "Connection failed: the media server may be offline."; + MistVideo.showError(msg,{reload:30}); + + if (!MistVideo.info) { + MistUtil.event.send("initializeFailed",null,options.target); + MistVideo.log("Initialization failed"); + } + }; + socket.addEventListener("message",function(e){ + var data = JSON.parse(e.data); + if (!data) { MistVideo.showError("Error while parsing stream status stream. Obtained: "+e.data.toString(),{reload:true}); } + + + if ("error" in data) { + var e = data.error; + if ("on_error" in data) { + MistVideo.log(e); + e = data.on_error; + } + var buttons; + switch (data.error) { + case "Stream is offline": + MistVideo.info = false; + case "Stream is initializing": + case "Stream is booting": + case "Stream is waiting for data": + case "Stream is shutting down": + buttons = {polling:true}; + break; + default: + buttons = {reload:true}; + } + MistVideo.showError(e,buttons); + } + else { + //new metadata object! + //console.log("stream status stream said",data); + + if (!MistVideo.info) { + onStreamInfo(data); + return; + } + + //figure out what changed + + //calculate the changes. note: ignores missing keys in the new data + function difference(a,b) { + if (a == b) { return false; } + if ((typeof a == "object") && (typeof b != "undefined")) { + var results = {}; + for (var i in a) { + + //ignore certain keys for which we don't care about changes + if (MistUtil.array.indexOf(["lastms","hasVideo"],i) >= 0) { continue; } + + var d = difference(a[i],b[i]); + //console.log(i,a[i],b[i],d); + if (d) { + if (d === true) { + results[i] = [a[i],b[i]]; + } + else { + results[i] = d; + } + } + } + //also show keys in b that are not in a + for (var i in b) { + + //ignore certain keys for which we don't care about changes + if (MistUtil.array.indexOf(["lastms","hasVideo"],i) >= 0) { continue; } + + if (!(i in a)) { + results[i] = [a[i],b[i]]; + } + } + + //add this check: [1,2] == [1,2] -> false + if (MistUtil.object.keys(results).length) { return results; } + return false; + } + return true; + } + var diff = difference(data,MistVideo.info); + if (diff) { + //console.log("Difference",diff,data,MistVideo.info); + + if ("source" in diff) { + if ("error" in MistVideo.info) { + MistVideo.reload(); + } + return; + } + + MistVideo.info = MistUtil.object.extend(MistVideo.info,data); + MistVideo.info.updated = new Date(); + + var resized = false; + + for (var i in diff) { + switch (i) { + case "meta": { + for (var j in diff[i]) { + switch (j) { + case "tracks": + //if difference in tracks, recalculate info.hasVideo + MistVideo.info.hasVideo = hasVideo(MistVideo.info); + + //signal track selector to refresh + MistUtil.event.send("metaUpdate_tracks",data,MistVideo.video); + + break; + } + } + break; + } + case "width": + case "height": { + resized = true; + break; + } + } + } + + if (resized) { + //call resize function + MistVideo.player.resize(); + } + + } + else { + MistVideo.log("Metachange: no differences detected"); + } + + } + + }); + } + openSocket(); + } + else { + + //get info + var url = this.urlappend(options.host+"/json_"+encodeURIComponent(this.stream)+".js"); + this.log("Requesting stream info from "+url); + MistUtil.http.get(url,function(d){ + if (MistVideo.destroyed) { return; } + onStreamInfo(JSON.parse(d)); + },function(xhr){ + var msg = "Connection failed (failed to load "+url+")"; + MistVideo.showError(msg,{reload:true}); + MistUtil.event.send("initializeFailed",null,options.target); + MistVideo.log("Initialization failed"); + }); + } + + this.unload = function(){ + if (this.destroyed) { return; } + + this.log("Unloading.."); + this.destroyed = true; + + this.timers.stop("all"); + for (var i in this.errorListeners) { + var listener = this.errorListeners[i]; + if (listener.src in MistUtil.scripts.list) { + var index = MistUtil.array.indexOf(MistUtil.scripts.list[listener.src].subscribers); + if (index >= 0) { + MistUtil.scripts.list[listener.src].subscribers.splice(index,1); + } + } + } + if (("monitor" in MistVideo) && ("destroy" in MistVideo.monitor)) { + MistVideo.monitor.destroy(); + } + if (this.socket) { + this.socket.destroy(); + } + if ((this.player) && (this.player.api)) { + if ("pause" in this.player.api) { this.player.api.pause(); } + if ("setSource" in this.player.api) { + this.player.api.setSource(""); + //this.element.load(); //don't use this.load() to avoid interrupting play/pause + } + if ("unload" in this.player.api) { try { this.player.api.unload(); } catch (e) {} } + } + if ((this.UI) && (this.UI.elements)) { + for (var i in this.UI.elements) { + var e = this.UI.elements[i]; + if (e.parentNode) { + e.parentNode.removeChild(e); + } + } + } + if (this.video) { MistUtil.empty(this.video); } + if ("container" in this) { MistUtil.empty(this.container); delete this.container; } + MistUtil.empty(this.options.target); + delete this.video; + + }; + this.reload = function(){ + var time = ("player" in this && "api" in this.player ? this.player.api.currentTime : false); + + this.unload(); + MistVideo = mistPlay(this.stream,this.options); + + if ((time) && (this.info.type != "live")) { + //after load, try to restore the video position + var f = function(){ + if (MistVideo.player && MistVideo.player.api) { + MistVideo.player.api.currentTime = time; + } + this.removeEventListener("initialized",f); + }; + MistUtil.event.addListener(this.options.target,"initialized",f); + } + + return MistVideo; + }; + this.nextCombo = function(){ + + var time = false; + if (("player" in this) && ("api" in this.player)) { time = this.player.api.currentTime; } + + var startCombo = { + source: this.source.index, + player: this.playerName + }; + if (!this.checkPlayer({startCombo:startCombo},true)) { + //the nextCombo won't yield a result + if (this.checkPlayer({startCombo: false},true)) { + //..but resetting the startcombo would + startCombo = false; + } + else { + return; + } + } + + this.unload(); + var opts = this.options; + opts.startCombo = startCombo; + MistVideo = mistPlay(this.stream,opts); + + if ((time) && (isFinite(time))) { + //after load, try to restore the video position + var f = function(){ + if (("player" in MistVideo) && ("api" in MistVideo.player)) { MistVideo.player.api.currentTime = time; } + this.removeEventListener("initialized",f); + }; + MistUtil.event.addListener(opts.target,"initialized",f); + } + + }; + this.onPlayerBuilt = function(){}; + + if (options.MistVideoObject) { + options.MistVideoObject.reference = this; + } + + return this; +} diff --git a/embed/players/dash.all.min.js b/embed/players/dash.all.min.js index 7346345b..ba3c0665 100644 --- a/embed/players/dash.all.min.js +++ b/embed/players/dash.all.min.js @@ -1,14 +1,32 @@ -/*! v2.4.1-9de5764, 2017-02-01T21:55:06Z */ -!function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);var j=new Error("Cannot find module '"+g+"'");throw j.code="MODULE_NOT_FOUND",j}var k=c[g]={exports:{}};b[g][0].call(k.exports,function(a){var c=b[g][1][a];return e(c?c:a)},k,k.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g>6),b.push(128|63&d)):d<65536?(b.push(224|d>>12),b.push(128|63&d>>6),b.push(128|63&d)):(b.push(240|d>>18),b.push(128|63&d>>12),b.push(128|63&d>>6),b.push(128|63&d))}return b},e.decode=function(a){for(var b=[],c=0;c>18)),d.push(b.charAt(63&f>>12)),d.push(b.charAt(63&f>>6)),d.push(b.charAt(63&f))}if(2==a.length-c){var f=(a[c]<<16)+(a[c+1]<<8);d.push(b.charAt(63&f>>18)),d.push(b.charAt(63&f>>12)),d.push(b.charAt(63&f>>6)),d.push("=")}else if(1==a.length-c){var f=a[c]<<16;d.push(b.charAt(63&f>>18)),d.push(b.charAt(63&f>>12)),d.push("==")}return d.join("")},d=function(){for(var a=[],c=0;c=c&&console.log(this.time+" ["+a+"] "+b)}},l=function(a){for(var b=[],c=0;ce&&(k.log("ERROR","Too large cursor position "+this.pos),this.pos=e)},moveCursor:function(a){var b=this.pos+a;if(a>1)for(var c=this.pos+1;c=144&&this.backSpace();var b=c(a);return this.pos>=e?void k.log("ERROR","Cannot insert "+a.toString(16)+" ("+b+") at position "+this.pos+". Skipping it!"):(this.chars[this.pos].setChar(b,this.currPenState),void this.moveCursor(1))},clearFromPos:function(a){var b;for(b=a;b0&&(c=a?"["+b.join(" | ")+"]":b.join("\n")),c},getTextAndFormat:function(){return this.rows}};var q=function(a,b){this.chNr=a,this.outputFilter=b,this.mode=null,this.verbose=0,this.displayedMemory=new p,this.nonDisplayedMemory=new p,this.lastOutputScreen=new p,this.currRollUpRow=this.displayedMemory.rows[d-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null};q.prototype={modes:["MODE_ROLL-UP","MODE_POP-ON","MODE_PAINT-ON","MODE_TEXT"],reset:function(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.currRollUpRow=this.displayedMemory.rows[d-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.lastCueEndTime=null},getHandler:function(){return this.outputFilter},setHandler:function(a){this.outputFilter=a},setPAC:function(a){this.writeScreen.setPAC(a)},setBkgData:function(a){this.writeScreen.setBkgData(a)},setMode:function(a){a!==this.mode&&(this.mode=a,k.log("INFO","MODE="+a),"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=a)},insertChars:function(a){for(var b=0;b=46,b.italics)b.foreground="white";else{var c=Math.floor(a/2)-16,d=["white","green","blue","cyan","red","yellow","magenta"];b.foreground=d[c]}k.log("INFO","MIDROW: "+JSON.stringify(b)),this.writeScreen.setPen(b)},outputDataUpdate:function(){var a=k.time;null!==a&&this.outputFilter&&(this.outputFilter.updateData&&this.outputFilter.updateData(a,this.displayedMemory),null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,a,this.lastOutputScreen),this.cueStartTime=this.displayedMemory.isEmpty()?null:a):this.cueStartTime=a,this.lastOutputScreen.copy(this.displayedMemory))},cueSplitAtTime:function(a){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,a,this.displayedMemory),this.cueStartTime=a))}};var r=function(a,b,c){this.field=a||1,this.outputs=[b,c],this.channels=[new q(1,b),new q(2,c)],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}};r.prototype={getHandler:function(a){return this.channels[a].getHandler()},setHandler:function(a,b){this.channels[a].setHandler(b)},addData:function(a,b){var c,d,e,f=!1;this.lastTime=a,k.setTime(a);for(var g=0;g ("+l([d,e])+")"),c=this.parseCmd(d,e),c||(c=this.parseMidrow(d,e)),c||(c=this.parsePAC(d,e)),c||(c=this.parseBackgroundAttributes(d,e)),!c&&(f=this.parseChars(d,e)))if(this.currChNr&&this.currChNr>=0){var h=this.channels[this.currChNr-1];h.insertChars(f)}else k.log("WARNING","No channel found yet. TEXT-MODE?");c?this.dataCounters.cmd+=2:f?this.dataCounters.char+=2:(this.dataCounters.other+=2,k.log("WARNING","Couldn't parse cleaned data "+l([d,e])+" orig: "+l([b[g],b[g+1]])))}else this.dataCounters.padding+=2},parseCmd:function(a,b){var c=null,d=(20===a||28===a)&&32<=b&&b<=47,e=(23===a||31===a)&&33<=b&&b<=35;if(!d&&!e)return!1;if(a===this.lastCmdA&&b===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,k.log("DEBUG","Repeated command ("+l([a,b])+") is dropped"),!0;c=20===a||23===a?1:2;var f=this.channels[c-1];return 20===a||28===a?32===b?f.cc_RCL():33===b?f.cc_BS():34===b?f.cc_AOF():35===b?f.cc_AON():36===b?f.cc_DER():37===b?f.cc_RU(2):38===b?f.cc_RU(3):39===b?f.cc_RU(4):40===b?f.cc_FON():41===b?f.cc_RDC():42===b?f.cc_TR():43===b?f.cc_RTD():44===b?f.cc_EDM():45===b?f.cc_CR():46===b?f.cc_ENM():47===b&&f.cc_EOC():f.cc_TO(b-32),this.lastCmdA=a,this.lastCmdB=b,this.currChNr=c,!0},parseMidrow:function(a,b){var c=null;if((17===a||25===a)&&32<=b&&b<=47){if(c=17===a?1:2,c!==this.currChNr)return k.log("ERROR","Mismatch channel in midrow parsing"),!1;var d=this.channels[c-1];return d.cc_MIDROW(b),k.log("DEBUG","MIDROW ("+l([a,b])+")"),!0}return!1},parsePAC:function(a,b){var c=null,d=null,e=(17<=a&&a<=23||25<=a&&a<=31)&&64<=b&&b<=127,j=(16===a||24===a)&&64<=b&&b<=95;if(!e&&!j)return!1;if(a===this.lastCmdA&&b===this.lastCmdB)return this.lastCmdA=null,this.lastCmdB=null,!0;c=a<=23?1:2,d=64<=b&&b<=95?1===c?f[a]:h[a]:1===c?g[a]:i[a];var k=this.interpretPAC(d,b),l=this.channels[c-1];return l.setPAC(k),this.lastCmdA=a,this.lastCmdB=b,this.currChNr=c,!0},interpretPAC:function(a,b){var c=b,d={color:null,italics:!1,indent:null,underline:!1,row:a};return c=b>95?b-96:b-64,d.underline=1===(1&c),c<=13?d.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(c/2)]:c<=15?(d.italics=!0,d.color="white"):d.indent=4*Math.floor((c-16)/2),d},parseChars:function(a,b){var d=null,e=null,f=null;if(a>=25?(d=2,f=a-8):(d=1,f=a),17<=f&&f<=19){var g=b;g=17===f?b+80:18===f?b+112:b+144,k.log("INFO","Special char '"+c(g)+"' in channel "+d),e=[g]}else 32<=a&&a<=127&&(e=0===b?[a]:[a,b]);if(e){var h=l(e);k.log("DEBUG","Char codes = "+h.join(",")),this.lastCmdA=null,this.lastCmdB=null}return e},parseBackgroundAttributes:function(a,b){var c,d,e,f,g=(16===a||24===a)&&32<=b&&b<=47,h=(23===a||31===a)&&45<=b&&b<=47;return!(!g&&!h)&&(c={},16===a||24===a?(d=Math.floor((b-32)/2),c.background=j[d],b%2===1&&(c.background=c.background+"_semi")):45===b?c.background="transparent":(c.foreground="black",47===b&&(c.underline=!0)),e=a<24?1:2,f=this.channels[e-1],f.setBkgData(c),this.lastCmdA=null,this.lastCmdB=null,!0)},reset:function(){for(var a=0;a/g,">").replace(/"/g,""").replace(/'/g,"'"):a}function g(a,b,c,d){for(var e=0;e0&&g(a.arrayAccessFormPaths,b,c,d)&&(b[c]=[b[c]])}function i(a){var b=a.split(/[-T:+Z]/g),c=new Date(b[0],b[1]-1,b[2]),d=b[5].split(".");if(c.setHours(b[3],b[4],d[0]),d.length>1&&c.setMilliseconds(d[1]),b[6]&&b[7]){var e=60*b[6]+Number(b[7]),f=/\d\d-\d\d:\d\d$/.test(a)?"-":"+";e=0+("-"==f?-1*e:e),c.setMinutes(c.getMinutes()-e-c.getTimezoneOffset())}else a.indexOf("Z",a.length-1)!==-1&&(c=new Date(Date.UTC(c.getFullYear(),c.getMonth(),c.getDate(),c.getHours(),c.getMinutes(),c.getSeconds(),c.getMilliseconds())));return c}function j(b,c,d){if(a.datetimeAccessFormPaths.length>0){var e=d.split(".#")[0];return g(a.datetimeAccessFormPaths,b,c,e)?i(b):b}return b}function k(b,c,d,e){return!(c==z.ELEMENT_NODE&&a.xmlElementsFilter.length>0)||g(a.xmlElementsFilter,b,d,e)}function l(b,c){if(b.nodeType==z.DOCUMENT_NODE){for(var f=new Object,g=b.childNodes,i=0;i1&&null!=f.__text&&a.skipEmptyTextNodesForObj&&(a.stripWhitespaces&&""==f.__text||""==f.__text.trim())&&delete f.__text:f=f.__cdata,delete f.__cnt,!a.enableToStringFunc||null==f.__text&&null==f.__cdata||(f.toString=function(){return(null!=this.__text?this.__text:"")+(null!=this.__cdata?this.__cdata:"")}),f}if(b.nodeType==z.TEXT_NODE||b.nodeType==z.CDATA_SECTION_NODE)return b.nodeValue}function m(b,c,d,e){var g="<"+(null!=b&&null!=b.__prefix?b.__prefix+":":"")+c;if(null!=d)for(var h=0;h":">"}function n(a,b){return""}function o(a,b){return a.indexOf(b,a.length-b.length)!==-1}function p(b,c){return!!("property"==a.arrayAccessForm&&o(c.toString(),"_asArray")||0==c.toString().indexOf(a.attributePrefix)||0==c.toString().indexOf("__")||b[c]instanceof Function)}function q(a){var b=0;if(a instanceof Object)for(var c in a)p(a,c)||b++;return b}function r(b,c,d){return 0==a.jsonPropertiesFilter.length||""==d||g(a.jsonPropertiesFilter,b,c,d)}function s(b){var c=[];if(b instanceof Object)for(var d in b)d.toString().indexOf("__")==-1&&0==d.toString().indexOf(a.attributePrefix)&&c.push(d);return c}function t(b){var c="";return null!=b.__cdata&&(c+=""+b.__cdata+""),null!=b.__text&&(c+=a.escapeMode?f(b.__text):b.__text),c}function u(b){var c="";return b instanceof Object?c+=t(b):null!=b&&(c+=a.escapeMode?f(b):b),c}function v(a,b){return""===a?b:a+"."+b}function w(a,b,c,d){var e="";if(0==a.length)e+=m(a,b,c,!0);else for(var f=0;f0)for(var e in a)if(!p(a,e)&&(""==b||r(a,e,v(b,e)))){var f=a[e],g=s(f);if(null==f||void 0==f)c+=m(f,e,g,!0);else if(f instanceof Object)if(f instanceof Array)c+=w(f,e,g,b);else if(f instanceof Date)c+=m(f,e,g,!1),c+=f.toISOString(),c+=n(f,e);else{var h=q(f);h>0||null!=f.__text||null!=f.__cdata?(c+=m(f,e,g,!1),c+=x(f,v(b,e)),c+=n(f,e)):c+=m(f,e,g,!0)}else c+=m(f,e,g,!1),c+=u(f),c+=n(f,e)}return c+=u(a)}var y="1.2.0";a=a||{},b(),c();var z={ELEMENT_NODE:1,TEXT_NODE:3,CDATA_SECTION_NODE:4,COMMENT_NODE:8,DOCUMENT_NODE:9};this.parseXmlString=function(a){var b=window.ActiveXObject||"ActiveXObject"in window;if(void 0===a)return null;var c;if(window.DOMParser){var d=new window.DOMParser,e=null;if(!b)try{e=d.parseFromString("INVALID","text/xml").getElementsByTagName("parsererror")[0].namespaceURI}catch(f){e=null}try{c=d.parseFromString(a,"text/xml"),null!=e&&c.getElementsByTagNameNS(e,"parsererror").length>0&&(c=null)}catch(f){c=null}}else 0==a.indexOf("")+2)),c=new ActiveXObject("Microsoft.XMLDOM"),c.async="false",c.loadXML(a);return c},this.asArray=function(a){return void 0===a||null==a?[]:a instanceof Array?a:[a]},this.toXmlDateTime=function(a){return a instanceof Date?a.toISOString():"number"==typeof a?new Date(a).toISOString():null},this.asDateTime=function(a){return"string"==typeof a?i(a):a},this.xml2json=function(a){return l(a)},this.xml_str2json=function(a){var b=this.parseXmlString(a);return null!=b?this.xml2json(b):null},this.json2xml_str=function(a){return x(a,"")},this.json2xml=function(a){var b=this.json2xml_str(a);return this.parseXmlString(b)},this.getVersion=function(){return y}}Object.defineProperty(c,"__esModule",{value:!0}),c.default=d,b.exports=c.default},{}],5:[function(a,b,c){(function(b){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}Object.defineProperty(c,"__esModule",{value:!0});var e=a(52),f=d(e),g=a(107),h=d(g),i=a(76),j=d(i),k=a(54),l=d(k),m=a(11),n="undefined"!=typeof window&&window||b,o=n.dashjs;o||(o=n.dashjs={}),o.MediaPlayer=f.default,o.Protection=h.default,o.MetricsReporting=j.default,o.MediaPlayerFactory=l.default,o.Version=(0,m.getVersionString)(),c.default=o,c.MediaPlayer=f.default,c.Protection=h.default,c.MetricsReporting=j.default,c.MediaPlayerFactory=l.default}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{107:107,11:11,52:52,54:54,76:76}],6:[function(a,b,c){/*! codem-isoboxer v0.2.7 https://github.com/madebyhiro/codem-isoboxer/blob/master/LICENSE.txt */ -var d={};d.parseBuffer=function(a){return new e(a).parse()},d.addBoxParser=function(a,b){"string"==typeof a&&"function"==typeof b&&(f.prototype._boxParsers[a]=b)},d.Utils={},d.Utils.dataViewToString=function(a,b){var c=b||"utf-8";if("undefined"!=typeof TextDecoder)return new TextDecoder(c).decode(a);var d=[],e=0;if("utf-8"===c)for(;e>3,b},f.prototype._readUint=function(a){var b=null;switch(a){case 8:b=this._raw.getUint8(this._cursor.offset-this._raw.byteOffset);break;case 16:b=this._raw.getUint16(this._cursor.offset-this._raw.byteOffset);break;case 24:var c=this._raw.getUint16(this._cursor.offset-this._raw.byteOffset),d=this._raw.getUint8(this._cursor.offset-this._raw.byteOffset+2);b=(c<<8)+d;break;case 32:b=this._raw.getUint32(this._cursor.offset-this._raw.byteOffset);break;case 64:var c=this._raw.getUint32(this._cursor.offset-this._raw.byteOffset),d=this._raw.getUint32(this._cursor.offset-this._raw.byteOffset+4);b=c*Math.pow(2,32)+d}return this._cursor.offset+=a>>3,b},f.prototype._readString=function(a){for(var b="",c=0;cthis._raw.buffer.byteLength)return void(this._root._incomplete=!0);switch(this.size=this._readUint(32),this.type=this._readString(4),1==this.size&&(this.largesize=this._readUint(64)),"uuid"==this.type&&(this.usertype=this._readString(16)),this.size){case 0:this._raw=new DataView(this._raw.buffer,this._offset,this._raw.byteLength-this._cursor.offset);break;case 1:this._offset+this.size>this._raw.buffer.byteLength?(this._incomplete=!0,this._root._incomplete=!0):this._raw=new DataView(this._raw.buffer,this._offset,this.largesize);break;default:this._offset+this.size>this._raw.buffer.byteLength?(this._incomplete=!0,this._root._incomplete=!0):this._raw=new DataView(this._raw.buffer,this._offset,this.size)}!this._incomplete&&this._boxParsers[this.type]&&this._boxParsers[this.type].call(this)},f.prototype._parseFullBox=function(){this.version=this._readUint(8),this.flags=this._readUint(24)},f.prototype._boxParsers={},f.prototype._boxParsers.avc1=function(){this.version=this._readUint(16),this.revision_level=this._readUint(16),this.vendor=this._readUint(32),this.temporal_quality=this._readUint(32),this.spatial_quality=this._readUint(32),this.width=this._readUint(16),this.height=this._readUint(16),this.horizontal_resolution=this._readUint(32),this.vertical_resolution=this._readUint(32),this.data_size=this._readUint(32),this.frame_count=this._readUint(16),this.compressor_name=this._readUint(32),this.depth=this._readUint(16),this.color_table_id=this._readUint(16)},["moov","trak","tref","mdia","minf","stbl","edts","dinf","mvex","moof","traf","mfra","udta","meco","strk","vttc"].forEach(function(a){f.prototype._boxParsers[a]=function(){for(this.boxes=[];this._cursor.offset-this._raw.byteOffset>15,this.language=String.fromCharCode((a>>10&31)+96,(a>>5&31)+96,(31&a)+96),this.pre_defined=this._readUint(16)},f.prototype._boxParsers.mehd=function(){this._parseFullBox(),1==this.version?this.fragment_duration=this._readUint(64):this.fragment_duration=this._readUint(32)},f.prototype._boxParsers.mfhd=function(){this._parseFullBox(),this.sequence_number=this._readUint(32)},f.prototype._boxParsers.mfro=function(){this._parseFullBox(),this.mfra_size=this._readUint(32)},f.prototype._boxParsers.mp4a=function(){this.reserved1=[this._readUint(32),this._readUint(32)],this.channelcount=this._readUint(16),this.samplesize=this._readUint(16),this.pre_defined=this._readUint(16),this.reserved2=this._readUint(16),this.sample_rate=this._readUint(32)},f.prototype._boxParsers.mvhd=function(){this._parseFullBox(),1==this.version?(this.creation_time=this._readUint(64),this.modification_time=this._readUint(64),this.timescale=this._readUint(32),this.duration=this._readUint(64)):(this.creation_time=this._readUint(32),this.modification_time=this._readUint(32),this.timescale=this._readUint(32),this.duration=this._readUint(32)),this.rate=this._readTemplate(32),this.volume=this._readTemplate(16),this.reserved1=this._readUint(16),this.reserved2=[this._readUint(32),this._readUint(32)],this.matrix=[];for(var a=0;a<9;a++)this.matrix.push(this._readTemplate(32));this.pre_defined=[];for(var a=0;a<6;a++)this.pre_defined.push(this._readUint(32));this.next_track_ID=this._readUint(32)},f.prototype._boxParsers.payl=function(){var a=new DataView(this._raw.buffer,this._cursor.offset,this._raw.byteLength-(this._cursor.offset-this._offset));this.cue_text=d.Utils.dataViewToString(a)},f.prototype._boxParsers.sidx=function(){this._parseFullBox(),this.reference_ID=this._readUint(32),this.timescale=this._readUint(32),0==this.version?(this.earliest_presentation_time=this._readUint(32),this.first_offset=this._readUint(32)):(this.earliest_presentation_time=this._readUint(64),this.first_offset=this._readUint(64)),this.reserved=this._readUint(16),this.reference_count=this._readUint(16),this.references=[];for(var a=0;a>31&1,b.referenced_size=2147483647&c,b.subsegment_duration=this._readUint(32);var d=this._readUint(32);b.starts_with_SAP=d>>31&1,b.SAP_type=d>>28&7,b.SAP_delta_time=268435455&d,this.references.push(b)}},f.prototype._boxParsers.ssix=function(){this._parseFullBox(),this.subsegment_count=this._readUint(32),this.subsegments=[];for(var a=0;a0){for(var e={nr:a,subsamples:[]},f=0;f>>6,this.length_size_of_traf_num=(this._packed&&0xffff00000000)>>>4,this.length_size_of_trun_num=(this._packed&&4294901760)>>>2,this.length_size_of_sample_num=this._packed&&255,this.number_of_entry=this._readUint(32),this.entries=[];for(var a=0;a0&&(a+=" "),Array.apply(null,arguments).forEach(function(b){a+=b+" "}),k&&console.log(a),h.trigger(i.default.LOG,{message:a})}var f=this.context,h=(0,g.default)(f).getInstance(),j=void 0,k=void 0,l=void 0,m=void 0;return j={log:e,setLogTimestampVisible:b,setLogToBrowserConsole:c,getLogToBrowserConsole:d},a(),j}Object.defineProperty(c,"__esModule",{value:!0});var f=a(9),g=d(f),h=a(13),i=d(h),j=a(10),k=d(j);e.__dashjs_factory_name="Debug",c.default=k.default.getSingletonFactory(e),b.exports=c.default},{10:10,13:13,9:9}],9:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(a,b,c){var e=arguments.length<=3||void 0===arguments[3]?h:arguments[3];if(!a)throw new Error("event type cannot be null or undefined");if(!b||"function"!=typeof b)throw new Error("listener must be a function: "+b);if(!(d(a,b,c)>=0)){f[a]=f[a]||[];var g={callback:b,scope:c,priority:e},i=f[a].some(function(b,c){if(e>b.priority)return f[a].splice(c,0,g),!0});i||f[a].push(g)}}function b(a,b,c){if(a&&b&&f[a]){var e=d(a,b,c);e<0||f[a].splice(e,1)}}function c(a,b){if(a&&f[a]){if(b=b||{},b.hasOwnProperty("type"))throw new Error("'type' is a reserved word for event dispatching");b.type=a,f[a].forEach(function(a){return a.callback.call(a.scope,b)})}}function d(a,b,c){var d=-1;return f[a]?(f[a].some(function(a,e){if(a.callback===b&&(!c||c===a.scope))return d=e,!0}),d):d}function e(){f={}}var f={},g={on:a,off:b,trigger:c,reset:e};return g}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=0,i=5e3;e.__dashjs_factory_name="EventBus";var j=g.default.getSingletonFactory(e);j.EVENT_PRIORITY_LOW=h,j.EVENT_PRIORITY_HIGH=i,c.default=j,b.exports=c.default},{10:10}],10:[function(a,b,c){"use strict";Object.defineProperty(c,"__esModule",{value:!0});var d=function(){function a(a,b,c,d){var e=g(d);!e[a]&&b&&(e[a]={instance:b,override:c})}function b(a,b){for(var c in j){var d=j[c];if(d.context===a&&d.name===b)return d.instance}return null}function c(a,b,c){for(var d in j){var e=j[d];if(e.context===a&&e.name===b)return void(j[d].instance=c)}j.push({name:b,context:a,instance:c})}function d(a){return function(b){return void 0===b&&(b={}),{create:function(){return f(a.__dashjs_factory_name,a.apply({context:b},arguments),b,arguments)}}}}function e(a){return function(c){var d=void 0;return void 0===c&&(c={}),{getInstance:function(){return d||(d=b(c,a.__dashjs_factory_name)),d||(d=f(a.__dashjs_factory_name,a.apply({context:c},arguments),c,arguments),j.push({name:a.__dashjs_factory_name,context:c,instance:d})),d}}}}function f(a,b,c,d){var e=g(c),f=e[a];if(f){var i=f.instance;if(!f.override)return i.apply({context:c,factory:h},d);i=i.apply({context:c,factory:h,parent:b},d);for(var j in i)b.hasOwnProperty(j)&&(b[j]=i[j])}return b}function g(a){var b=void 0;return i.forEach(function(c){c===a&&(b=c)}),b||(b=i.push(a)),b}var h=void 0,i=[],j=[];return h={extend:a,getSingletonInstance:b,setSingletonInstance:c,getSingletonFactory:e,getClassFactory:d}}();c.default=d,b.exports=c.default},{}],11:[function(a,b,c){"use strict";function d(){return e}Object.defineProperty(c,"__esModule",{value:!0}),c.getVersionString=d;var e="2.4.1"},{}],12:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var g=function(a,b,c){for(var d=!0;d;){var e=a,f=b,g=c;d=!1,null===e&&(e=Function.prototype);var h=Object.getOwnPropertyDescriptor(e,f);if(void 0!==h){if("value"in h)return h.value;var i=h.get;if(void 0===i)return;return i.call(g)}var j=Object.getPrototypeOf(e);if(null===j)return;a=j,b=f,c=g,d=!0,h=j=void 0}},h=a(14),i=d(h),j=function(a){function b(){e(this,b),g(Object.getPrototypeOf(b.prototype),"constructor",this).call(this),this.BUFFERING_COMPLETED="bufferingCompleted",this.BUFFER_CLEARED="bufferCleared",this.BUFFER_LEVEL_UPDATED="bufferLevelUpdated",this.BYTES_APPENDED="bytesAppended",this.CHECK_FOR_EXISTENCE_COMPLETED="checkForExistenceCompleted",this.CURRENT_TRACK_CHANGED="currentTrackChanged",this.DATA_UPDATE_COMPLETED="dataUpdateCompleted",this.DATA_UPDATE_STARTED="dataUpdateStarted",this.INITIALIZATION_LOADED="initializationLoaded",this.INIT_FRAGMENT_LOADED="initFragmentLoaded",this.INIT_REQUESTED="initRequested",this.INTERNAL_MANIFEST_LOADED="internalManifestLoaded",this.LIVE_EDGE_SEARCH_COMPLETED="liveEdgeSearchCompleted",this.LOADING_COMPLETED="loadingCompleted",this.LOADING_PROGRESS="loadingProgress",this.MANIFEST_UPDATED="manifestUpdated",this.MEDIA_FRAGMENT_LOADED="mediaFragmentLoaded",this.QUOTA_EXCEEDED="quotaExceeded",this.REPRESENTATION_UPDATED="representationUpdated",this.SEGMENTS_LOADED="segmentsLoaded",this.SERVICE_LOCATION_BLACKLIST_CHANGED="serviceLocationBlacklistChanged",this.SOURCEBUFFER_APPEND_COMPLETED="sourceBufferAppendCompleted",this.SOURCEBUFFER_REMOVE_COMPLETED="sourceBufferRemoveCompleted",this.STREAMS_COMPOSED="streamsComposed",this.STREAM_BUFFERING_COMPLETED="streamBufferingCompleted",this.STREAM_COMPLETED="streamCompleted",this.STREAM_TEARDOWN_COMPLETE="streamTeardownComplete",this.TIMED_TEXT_REQUESTED="timedTextRequested",this.TIME_SYNCHRONIZATION_COMPLETED="timeSynchronizationComplete",this.URL_RESOLUTION_FAILED="urlResolutionFailed",this.WALLCLOCK_TIME_UPDATED="wallclockTimeUpdated",this.XLINK_ELEMENT_LOADED="xlinkElementLoaded",this.XLINK_READY="xlinkReady"}return f(b,a),b}(i.default);c.default=j,b.exports=c.default},{14:14}],13:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(a,b){if("function"!=typeof b&&null!==b)throw new TypeError("Super expression must either be null or a function, not "+typeof b);a.prototype=Object.create(b&&b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}}),b&&(Object.setPrototypeOf?Object.setPrototypeOf(a,b):a.__proto__=b)}Object.defineProperty(c,"__esModule",{value:!0});var g=function(a,b,c){for(var d=!0;d;){var e=a,f=b,g=c;d=!1,null===e&&(e=Function.prototype);var h=Object.getOwnPropertyDescriptor(e,f);if(void 0!==h){if("value"in h)return h.value;var i=h.get;if(void 0===i)return;return i.call(g)}var j=Object.getPrototypeOf(e);if(null===j)return;a=j,b=f,c=g,d=!0,h=j=void 0}},h=a(12),i=d(h),j=function(a){function b(){e(this,b),g(Object.getPrototypeOf(b.prototype),"constructor",this).apply(this,arguments)}return f(b,a),b}(i.default),k=new j;c.default=k,b.exports=c.default},{12:12}],14:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function(){function a(a,b){for(var c=0;c0?b.segments[0].duration:NaN),c.MSETimeOffset=b.MSETimeOffset,c.useCalculatedLiveEdgeTime=b.useCalculatedLiveEdgeTime,c.mediaInfo=g(a,b.adaptation),c}function g(a,b){var c,d=new j.default,e=b.period.mpd.manifest.Period_asArray[b.period.index].AdaptationSet_asArray[b.index];return d.id=b.id,d.index=b.index,d.type=b.type,d.streamInfo=k(a,b.period),d.representationCount=I.getRepresentationCount(e),d.lang=I.getLanguageForAdaptation(e),c=I.getViewpointForAdaptation(e),d.viewpoint=c?c.value:void 0,d.accessibility=I.getAccessibilityForAdaptation(e).map(function(a){var b=a.value,c=b;return a.schemeIdUri&&a.schemeIdUri.search("cea-608")>=0&&"undefined"!=typeof t.default&&(c=b?"cea-608:"+b:"cea-608",d.embeddedCaptions=!0),c}),d.audioChannelConfiguration=I.getAudioChannelConfigurationForAdaptation(e).map(function(a){return a.value}),d.roles=I.getRolesForAdaptation(e).map(function(a){return a.value}),d.codec=I.getCodec(e),d.mimeType=I.getMimeType(e),d.contentProtection=I.getContentProtectionData(e),d.bitrateList=I.getBitrateListForAdaptation(e),d.contentProtection&&d.contentProtection.forEach(function(a){a.KID=I.getKID(a)}),d.isText=I.getIsTextTrack(d.mimeType),d}function i(a,b,c){a.id=b,a.index=100+parseInt(b.substring(2,3)),a.type="embeddedText",a.codec="cea-608-in-SEI",a.isText=!0,a.isEmbedded=!0,a.lang=b+" "+c,a.roles=["caption"]}function k(a,b){var c=new l.default,d=1;return c.id=b.id,c.index=b.index,c.start=b.start,c.duration=b.duration,c.manifestInfo=m(a,b.mpd),c.isLast=1===a.Period_asArray.length||Math.abs(c.start+c.duration-c.manifestInfo.duration)=e}}else b=!0;return b}function A(a){return aa.getSegments(a,W,V,B)}function B(a,b){if(a.segments=b,b&&b.length>0&&($=isNaN($)?b[0].presentationStartTime:Math.min(b[0].presentationStartTime,$)),X&&isNaN(Q.getExpectedLiveEdge())){var c=b[b.length-1],d=c.presentationStartTime,e=S.getMetricsFor("stream");Q.setExpectedLiveEdge(d),S.updateManifestUpdateInfo(R.getCurrentManifestUpdate(e),{presentationStartTime:d})}}function C(a){if(!a)throw new i.default("no representation");return a.segments=null,A(a),a}function D(a,b){var c,d=v.default.hasInitialization(a),e=v.default.hasSegments(a);return a.segmentDuration||a.segments||C(a),a.segmentAvailabilityRange=null,a.segmentAvailabilityRange=Q.calcSegmentAvailabilityRange(a,X),a.segmentAvailabilityRange.end0)for(h=0;h=f&&a-d0&&M("Index for "+Y+" time "+b+" is "+V),f=!k&&x(a),f?(d=new g.default,d.action=g.default.ACTION_COMPLETE,d.index=V,d.mediaType=Y,d.mediaInfo=_.getMediaInfo(),M("Signal complete.",d)):(e=(0,w.getSegmentByIndex)(V,a),d=F(e)),i&&h>=0&&(V="SegmentTimeline"===a.segmentInfoType&&X?V:h),d):null}function H(a,b){var c=(a.segmentAvailabilityRange.end-a.segmentAvailabilityRange.start)/2;return a.segments=null,a.segmentAvailabilityRange={start:b-c,end:b+c},G(a,b,{keepIdx:!1,ignoreIsFinished:!0})}function I(a){var b,c,d;return a&&V!==-1?(W=null,V++,M("Getting the next request at index: "+V),d=x(a),d?(b=new g.default,b.action=g.default.ACTION_COMPLETE,b.index=V,b.mediaType=Y,b.mediaInfo=_.getMediaInfo(),M("Signal complete.")):(A(a),c=(0,w.getSegmentByIndex)(V,a),b=F(c),!c&&X&&V--),b):null}function J(a){var b=a.representation;b.segments&&N.trigger(l.default.REPRESENTATION_UPDATED,{sender:this,representation:b})}function K(a){if(!a.error&&Y===a.mediaType){var b,c,d,e,f=a.segments,g=a.representation,h=[],i=0;for(b=0,c=f.length;b=0;){if(d[c].responsecode){e=d[c];break}c--}return e}function l(a){return null===a?[]:a.HttpList?a.HttpList:[]}function m(a,b){if(null===a)return null;var c=a[b];if(null===c)return null;var d=c.length;return d<=0?null:c[d-1]}function n(a){return m(a,o.DROPPED_FRAMES)}function q(a){return m(a,o.SCHEDULING_INFO)}function r(a){return m(a,o.MANIFEST_UPDATE)}function s(a){return m(a,o.DVR_INFO)}function t(a,b){var c,d,e,f={};if(null===a)return null;for(c=l(a),e=c.length-1;e>=0;e--)if(d=c[e],d.type===g.HTTPRequest.MPD_TYPE){f=v(d._responseHeaders);break}return void 0===f[b]?null:f[b]}function u(a,b){if(null===a)return null;var c,d=j(a);return null===d||null===d._responseHeaders?null:(c=v(d._responseHeaders),void 0===c[b]?null:c[b])}function v(a){var b={};if(!a)return b;for(var c=a.trim().split("\r\n"),d=0,e=c.length;d0&&(b[f.substring(0,g)]=f.substring(g+2))}return b}function w(a,b){var c=x(a,b,!0);return null!==c?c:-1}function x(a,b,c){var d,e,f,g,h,i;for(e=a.AdaptationSet_asArray,h=0;h0&&(j=1===m[0].reference_type),j){p("Initiate multiple SIDX load."),o.range.end=o.range.start+k.size;var n,q,r,s,t,u=[],w=0,x=(k.offset||o.range.start)+k.size,y=function(c){c?(u=u.concat(c),w++,w>=q&&g(u,a,b)):g(null,a,b)};for(n=0,q=m.length;nd||!f.consumeTag(y.Segment.Cues.CuePoint.CueTrackPositions.CueBlockNumber,!0)?c.CueTracks.push(e):(g=f.getMatroskaCodedNum(),e.BlockNumber=f.getMatroskaUint(g),c.CueTracks.push(e))}if(0===c.CueTracks.length)throw new Error("Mandatory cuetrack not found");b.push(c)}if(0===b.length)throw new Error("mandatory cuepoint not found");return b}function e(a,b,c,e){var f=void 0,g=void 0,h=void 0,i=void 0,j=void 0,k=void 0,l=void 0,m=void 0;for(g=d(a),h=[],j=0,k=g.length;jh&&(d=h),U=t(d),Q=a,"video"!==c&&"audio"!==c&&"fragmentedText"!==c)return S=!1,void O.trigger(E.default.DATA_UPDATE_COMPLETED,{sender:this,data:Q,currentRepresentation:U});for(var i=0;i0)return r(),F(l),c=new A.default(M,"Segments update failed",null),void O.trigger(E.default.DATA_UPDATE_COMPLETED,{sender:this,data:Q,currentRepresentation:U,error:c});if(i){for(var o=0;o0&&a.Representation_asArray[0].hasOwnProperty("codecs")){var j=a.Representation_asArray[0].codecs;if(0===j.search("stpp")||0===j.search("wvtt"))return"fragmentedText"===b}if(h){if(h.length>1)return"muxed"===b;h[0]&&h[0].contentType===b&&(f=!0,g=!0)}if(a.hasOwnProperty("mimeType")&&(f=i.test(a.mimeType),g=!0),!g)for(c=0,d=a.Representation_asArray.length;!g&&c1&&d)for(var f=ja.getCurrentTrackFor(c,d),g=ka.getAllMediaInfoForType(a,d,c),h=0,i=e.length;h0&&(c=a.profiles.indexOf(b)!==-1),c}function N(a){return M(a,"urn:mpeg:dash:profile:isoff-on-demand:2011")}function O(a){return M(a,"urn:dvb:dash:profile:dvb-dash:2014")}function P(a){var b;return b=a.hasOwnProperty("mediaPresentationDuration")?a.mediaPresentationDuration:Number.MAX_VALUE}function Q(a){return a.bandwidth}function R(a){var b=arguments.length<=1||void 0===arguments[1]?0:arguments[1],c=NaN;return a.hasOwnProperty("minimumUpdatePeriod")&&(c=a.minimumUpdatePeriod),isNaN(c)?c:Math.max(c-b,1)}function S(a){return a.Representation_asArray.length}function T(a){if(!a||!a.Representation_asArray||!a.Representation_asArray.length)return null;for(var b=x(a),c=b.Representation_asArray,d=c.length,e=[],f=0;f=0)&&(c.useCalculatedLiveEdgeTime=!0)):(c.segmentInfoType="SegmentList",c.useCalculatedLiveEdgeTime=!0)):f.hasOwnProperty("SegmentTemplate")?(e=f.SegmentTemplate,e.hasOwnProperty("SegmentTimeline")?(c.segmentInfoType="SegmentTimeline",i=e.SegmentTimeline.S_asArray[e.SegmentTimeline.S_asArray.length-1],(!i.hasOwnProperty("r")||i.r>=0)&&(c.useCalculatedLiveEdgeTime=!0)):c.segmentInfoType="SegmentTemplate",e.hasOwnProperty("initialization")&&(c.initialization=e.initialization.split("$Bandwidth$").join(f.bandwidth).split("$RepresentationID$").join(f.id))):c.segmentInfoType="BaseURL",e&&(e.hasOwnProperty("Initialization")?(d=e.Initialization,d.hasOwnProperty("sourceURL")?c.initialization=d.sourceURL:d.hasOwnProperty("range")&&(c.range=d.range)):f.hasOwnProperty("mimeType")&&h(f.mimeType)&&(c.range=0),e.hasOwnProperty("timescale")&&(c.timescale=e.timescale),e.hasOwnProperty("duration")&&(c.segmentDuration=e.duration/c.timescale),e.hasOwnProperty("startNumber")&&(c.startNumber=e.startNumber),e.hasOwnProperty("indexRange")&&(c.indexRange=e.indexRange),e.hasOwnProperty("presentationTimeOffset")&&(c.presentationTimeOffset=e.presentationTimeOffset/c.timescale)),c.MSETimeOffset=ia.calcMSETimeOffset(c),c.path=[b.period.index,b.index,l],k.push(c);return k}function W(a,e){for(var g,h,j=a.Period_asArray[e.index],k=[],l=0;l=0}return!1},function(a){return String(a)})}return f(b,a),b}(i.default);c.default=j,b.exports=c.default},{28:28}],33:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(a){a&&a.boxParser&&(e=a.boxParser)}function b(a){var b,c,d,f,g,h,i,j,k,l,m,n,o,p=e.parse(a),q=p.getBox("tfhd"),r=p.getBox("tfdt"),s=p.getBox("trun"),t=p.getBox("moof"),u=p.getBox("mfhd"),v=p.getBox("subs");for(m=u.sequence_number,d=s.sample_count,g=r.baseMediaDecodeTime,l=(q.base_data_offset||0)+(s.data_offset||0),h=[],o=0,j=0;jc):f=!0,f}var f=this.context,g=void 0,h=void 0,j=void 0,l=void 0;return g={getSegments:d},c(),g}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=a(39),i=d(h),j=a(37),k=d(j),l=a(34),m=d(l);e.__dashjs_factory_name="SegmentsGetter";var n=g.default.getClassFactory(e);c.default=n,b.exports=c.default},{10:10,34:34,37:37,39:39}],36:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){for(;a.lengthd&&g0?(s=j(e,c),r=s?a.calcPeriodRelativeTimeFromMpdRelativeTime(c,s.presentationStartTime):e>0?e*k:a.calcPeriodRelativeTimeFromMpdRelativeTime(c,d)):r=e>0?e*k:b?n.end:n.start,g=Math.floor(Math.max(r-p,n.start)/k),h=Math.floor(Math.min(g+q/k,n.end/k)),i={start:g,end:h})}Object.defineProperty(c,"__esModule",{value:!0}),c.replaceTokenForTemplate=g,c.getIndexBasedSegment=h,c.getTimeBasedSegment=i,c.getSegmentByIndex=j,c.decideSegmentListRangeForTimeline=k,c.decideSegmentListRangeForTemplate=l;var m=a(47),n=d(m)},{47:47}],37:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){function c(a,c,e,f){var g,i,j,k,l,m=a.adaptation.period.mpd.manifest.Period_asArray[a.adaptation.period.index].AdaptationSet_asArray[a.adaptation.index].Representation_asArray[a.index].SegmentTemplate,n=a.segmentDuration,o=a.segmentAvailabilityRange,p=[],q=null,r=null;for(l=a.startNumber,g=isNaN(n)&&!b?{start:l,end:l}:(0,h.decideSegmentListRangeForTemplate)(d,b,a,c,e,f),j=g.start,k=g.end,i=j;i<=k;i++)r=(0,h.getIndexBasedSegment)(d,b,a,i),r.replacementTime=(l+i-1)*a.segmentDuration,q=m.media,q=(0,h.replaceTokenForTemplate)(q,"Number",r.replacementNumber),q=(0,h.replaceTokenForTemplate)(q,"Time",r.replacementTime),r.media=q,p.push(r),r=null;return isNaN(n)?a.availableSegmentsNumber=1:a.availableSegmentsNumber=Math.ceil((o.end-o.start)/n),p}var d=a.timelineConverter,e=void 0;return e={getSegments:c}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=a(36);e.__dashjs_factory_name="TemplateSegmentsGetter";var i=g.default.getClassFactory(e);c.default=i,b.exports=c.default},{10:10,36:36}],38:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){z=0,A=!1,B=NaN,x.on(i.default.TIME_SYNCHRONIZATION_COMPLETED,t,this)}function b(){return A}function c(a){A=a}function d(){return z}function e(a){z=a}function f(){return B}function h(a){B=a}function j(a,b,c,d){var e=NaN;return e=d?c&&b.timeShiftBufferDepth!=Number.POSITIVE_INFINITY?new Date(b.availabilityStartTime.getTime()+1e3*(a+b.timeShiftBufferDepth)):b.availabilityEndTime:c?new Date(b.availabilityStartTime.getTime()+1e3*(a-z)):b.availabilityStartTime}function k(a,b,c){return j.call(this,a,b,c)}function l(a,b,c){return j.call(this,a,b,c,!0)}function m(a,b){return(a.getTime()-b.mpd.availabilityStartTime.getTime()+1e3*z)/1e3}function n(a,b){var c=b.adaptation.period.start,d=b.presentationTimeOffset;return a+(c-d)}function o(a,b){var c=b.adaptation.period.start,d=b.presentationTimeOffset;return a-c+d}function p(a,b){var c,d,e;return b&&(c=a.representation.adaptation.period.mpd.suggestedPresentationDelay,d=a.presentationStartTime+c,e=new Date(a.availabilityStartTime.getTime()+1e3*d)),e}function q(a,b){var c=a.adaptation.period,d={start:c.start,end:c.start+c.duration};if(!b)return d;if(!A&&a.segmentAvailabilityRange)return a.segmentAvailabilityRange;var e=a.segmentDuration||(a.segments&&a.segments.length?a.segments[a.segments.length-1].duration:0),f=m(new Date,c),g=c.start+c.duration;return d.start=Math.max(f-c.mpd.timeShiftBufferDepth,c.start),d.end=f>=g&&f-e0,z=10,A=0,B=0,C=-1,D=[],E=!1,F=function(c,e){var f=v.media,g=c.mediaRange;return x&&(f=x[e].media||"",g=x[e].mediaRange),(0,h.getTimeBasedSegment)(d,b,a,A,c.d,u,f,g,C)};for(u=a.timescale,g=w.S_asArray,p=(0,h.decideSegmentListRangeForTimeline)(d,b,c,e,f),p?(s=p.start,t=p.end):r=d.calcMediaTimeFromPresentationTime(c||0,a),j=0,k=g.length;jt){if(q=!0,y)break;continue}C>=s&&D.push(F(i,C))}else{if(D.length>z){if(q=!0,y)break;continue}E?D.push(F(i,C)):B>=r-i.d/u*1.5&&(E=!0,D.push(F(i,C)))}A+=i.d,B=A/u}}return y||(a.availableSegmentsNumber=C+1),D}var d=a.timelineConverter,e=void 0;return e={getSegments:c}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=a(36);e.__dashjs_factory_name="TimelineSegmentsGetter";var i=g.default.getClassFactory(e);c.default=i,b.exports=c.default},{10:10,36:36}],40:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function a(){d(this,a),this.period=null,this.index=-1,this.type=null};c.default=e,b.exports=c.default},{}],41:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=1,f=1,g=function a(b,c,g,h){d(this,a),this.url=b||"",this.serviceLocation=c||b||"",this.dvb_priority=g||e,this.dvb_weight=h||f};g.DEFAULT_DVB_PRIORITY=e,g.DEFAULT_DVB_WEIGHT=f,c.default=g,b.exports=c.default},{}],42:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function a(){d(this,a),this.duration=NaN,this.presentationTime=NaN,this.id=NaN,this.messageData="",this.eventStream=null,this.presentationTimeDelta=NaN};c.default=e,b.exports=c.default},{}],43:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function a(){d(this,a),this.adaptionSet=null,this.representation=null,this.period=null,this.timescale=1,this.value="",this.schemeIdUri=""};c.default=e,b.exports=c.default},{}],44:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function a(){d(this,a),this.manifest=null,this.suggestedPresentationDelay=0,this.availabilityStartTime=null,this.availabilityEndTime=Number.POSITIVE_INFINITY,this.timeShiftBufferDepth=Number.POSITIVE_INFINITY,this.maxSegmentDuration=Number.POSITIVE_INFINITY,this.minimumUpdatePeriod=NaN,this.mediaPresentationDuration=NaN};c.default=e,b.exports=c.default},{}],45:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function a(){d(this,a),this.id=null,this.index=-1,this.duration=NaN,this.start=NaN,this.mpd=null};e.DEFAULT_ID="defaultId",c.default=e,b.exports=c.default},{}],46:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function(){function a(a,b){for(var c=0;c0?wa().getCurrentBufferLevel(xa(a)):Number.MAX_VALUE}).reduce(function(a,b){return Math.min(a,b)})}function v(){var a=Rb();return a?a.manifestInfo.DVRWindowSize:0}function x(a){var b=Rb();if(!b)return 0;var c=b.range.start+a;return c>b.range.end&&(c=b.range.end),c}function z(a){if(!fc)throw Vb;var b=sc.getIsDynamic()?x(a):a;sc.seek(b)}function B(a){if(!fc)throw Vb;var b=Db().currentTime;if(void 0!==a)b=qc.getTimeRelativeToStreamId(b,a);else if(sc.getIsDynamic()){var c=Rb();b=null===c?0:D()-(c.range.end-c.time)}return b}function D(){if(!fc)throw Vb;var a=Db().duration;if(sc.getIsDynamic()){var b,c=Rb();if(!c)return 0;b=c.range.end-c.range.start,a=b0?d[b.roles[0]]:d.caption;return a=a===d.caption||a===d.subtitle?a:d.caption},f=function(){var a=!1;return b.codec&&b.codec.search("stpp")>=0&&(a=!0),b.mimeType&&b.mimeType.search("ttml")>=0&&(a=!0),a};c.captionData=a,c.lang=b.lang,c.label=b.id,c.index=b.index,c.isTTML=f(),c.video=Y.getElement(),c.defaultTrack=A(b),c.isFragmented=T,c.isEmbedded=!!b.isEmbedded,c.kind=e();var h=(R?R.length:0)+aa.length;S.addTextTrack(c,h)}var e,f,h,i,j,k,l,m=b.mediaInfo,n=m.type,p=m.mimeType,q=m.codec||p;if(!q)return void E("No text type defined");if("fragmentedText"===n)if(V)if(k=Q.getSamplesInfo(a),f=k.sampleList,!$&&f.length>0&&($=f[0].cts-b.start*W),q.search("stpp")>=0)for(N=null!==N?N:B(q),h=0;h0&&S.addCaptions(_,0,F)}else{for(V=!0,h=0;h0){if(b>=a[d-1][0])a.push([b,c]);else for(var e=d-1;e>=0;e--)if(b1&&E("Warning: Too many truns");for(var i=d.offset+h.data_offset,j=h.sample_count,k=i,l=e.baseMediaDecodeTime,m=new DataView(a),n={startTime:null,endTime:null,fields:[[],[]]},o=0,p=0;p0&&b(n.fields[v],r,u[v]);o+=q.sample_duration,k+=q.sample_size}var w=l+o;return n.startTime=l,n.endTime=w,n}function e(a){for(var b="",c=0;c0&&(m.spans.push({name:o,line:v,row:s}),v="");var B="style_cea608_"+A.foreground+"_"+A.background;A.underline&&(B+="_underline"),A.italics&&(B+="_italics"),q.hasOwnProperty(B)||(q[B]=JSON.parse(JSON.stringify(A))),w=A,o=B}v+=z.uchar}v.trim().length>0&&m.spans.push({name:o,line:v,row:s}),i=!0,k=x}else i=!1,k=-1,g&&(g.p.push(m),m={start:b,end:c,spans:[]},g.y2=s,g.name="region_"+g.x+"_"+g.y1+"_"+g.y2,!1===p.hasOwnProperty(g.name)?(r.push(g),p[g.name]=g):(h=p[g.name],h.p.contat(g.p)),g=null)}g&&(g.p.push(m),g.y2=s+1,g.name="region_"+g.x+"_"+g.y1+"_"+g.y2,!1===p.hasOwnProperty(g.name)?(r.push(g),p[g.name]=g):(h=p[g.name],h.p.contat(g.p)),g=null);var C=[];for(s=0;s0){if(0!==t&&M!=N.row){var O=document.createElement("br");O.className="lineBreak",J.appendChild(O)}var P=!1;M===N.row&&(P=!0),M=N.row;var Q=q[N.name],R=document.createElement("span");R.className="spanPadding "+N.name+" customSpanColor",R.style.cssText=j(a,Q),0!==t&&P?t===L.spans.length-1?R.textContent=n(N.line):R.textContent=N.line:0===t&&L.spans.length>1&&N.row===L.spans[1].row?R.textContent=l(N.line):R.textContent=N.line.trim(),J.appendChild(R)}}}I.appendChild(J),F.appendChild(I);var S={bodyStyle:["%",90]};for(t in q)q.hasOwnProperty(t)&&(S[t]=["%",90]);C.push({type:"html",start:b,end:c,cueHTMLElement:F,cueID:E,cellResolution:[32,15],isFromCEA608:!0,regions:r,regionID:D.name,videoHeight:a.videoHeight,videoWidth:a.videoWidth,fontSize:S,lineHeight:{},linePadding:{}})}return C}function p(){S.deleteAllTextTracks(),M=!1,N=null,Q=null,R=null,S=null,T=!1,U=null,V=!1,W=NaN,X=[],Y=null,Z=null,F=!1,aa=null}function r(a){F||b(),"CC1"===a.id||"CC3"===a.id?aa.push(a):E("Warning: Embedded track "+a.id+" not supported!")}function t(){F=!1,aa=[],fa=[null,null],ea=[],da=null}function v(){return M}function x(a){a&&(a.errHandler&&(J=a.errHandler),a.dashManifestModel&&(K=a.dashManifestModel),a.mediaController&&(L=a.mediaController),a.videoModel&&(Y=a.videoModel),a.streamController&&(Z=a.streamController),a.textTracks&&(S=a.textTracks),a.VTTParser&&(O=a.VTTParser),a.TTMLParser&&(P=a.TTMLParser))}function z(){for(var a=Y.getElement(),b=a.textTracks,c=b.length,d=c-aa.length,e=S.getCurrentTrackIdx(),f=0;f1&&a.isEmbedded?b=a.id&&"CC1"===a.id:1===aa.length?a.id&&"CC"===a.id.substring(0,2)&&(b=!0):0===aa.length&&(b=a.index===R[0].index),b}function B(a){var b;return a.search("vtt")>=0?b=O:(a.search("ttml")>=0||a.search("stpp")>=0)&&(b=P,b.setConfig({videoModel:Y})),b}function C(){return S.getCurrentTrackIdx()}var D=this.context,E=(0,q.default)(D).getInstance().log,F=!1,G=0,H=void 0,I=void 0,J=void 0,K=void 0,L=void 0,M=void 0,N=void 0,O=void 0,P=void 0,Q=void 0,R=void 0,S=void 0,T=void 0,U=void 0,V=void 0,W=void 0,X=void 0,Y=void 0,Z=void 0,$=void 0,_=void 0,aa=void 0,ba=void 0,ca=void 0,da=void 0,ea=void 0,fa=void 0;return H={initialize:a,append:c,abort:p,getCurrentTrackIdx:C,getAllTracksAreDisabled:v,setTextTrack:z,setConfig:x,addEmbeddedTrack:r,resetEmbedded:t}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(172),g=d(f),h=a(33),i=d(h),j=a(147),k=d(j),l=a(149),m=d(l),n=a(10),o=d(n),p=a(8),q=d(p),r=a(105),s=d(r),t=a(58),u=d(t),v=a(6),w=d(v),x=a(2),y=d(x);e.__dashjs_factory_name="TextSourceBuffer",c.default=o.default.getSingletonFactory(e),b.exports=c.default},{10:10,105:105,147:147,149:149,172:172,2:2,33:33,58:58,6:6,8:8}],58:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){D=window.VTTCue||window.TextTrackCue,G=[],H=[],I=-1,J=0,K=0,L=0,M=0,N=null,O=null,R=!1,S=2147483647,P=!!navigator.userAgent.match(/Chrome/)&&!navigator.userAgent.match(/Edge/),void 0!==document.fullscreenElement?Q="fullscreenElement":void 0!==document.webkitIsFullScreen?Q="webkitIsFullScreen":document.msFullscreenElement?Q="msFullscreenElement":document.mozFullScreen&&(Q="mozFullScreen")}function b(a){var b=G[a].kind,c=void 0!==G[a].label?G[a].label:G[a].lang,d=G[a].lang,e=P?document.createElement("track"):F.addTextTrack(b,c,d);return P&&(e.kind=b,e.label=c,e.srclang=d),e}function c(a){R=a,N&&!document[Q]&&(N.style.zIndex=a?S:null)}function d(a,c){if(G.length===c)return void B("Trying to add too many tracks.");if(G.push(a),void 0===F&&(F=a.video),G.length===c){G.sort(function(a,b){return a.index-b.index}),N=E.getTTMLRenderingDiv();for(var d=-1,e=0;e=0){for(var h=0;hh?(j=b,i=j/d*c):(i=a,j=i/c*d);var k=0,l=0,m=0,n=0,o=i/j;return o>e?(n=j,m=j/(1/e),k=(a-m)/2,l=0):(m=i,n=i/e,k=0,l=(b-n)/2),f?{x:k+.1*m,y:l+.1*n,w:.8*m,h:.8*n}:{x:k,y:l,w:m,h:n}}function f(){var a=this.getCurrentTextTrack();if(a&&"html"===a.renderingType){var b=F.clientWidth/F.clientHeight,c=!1;a.isFromCEA608&&(b=3.5/3,c=!0);var d=e.call(this,F.clientWidth,F.clientHeight,F.videoWidth,F.videoHeight,b,c),f=d.w,g=d.h;if(f!=L||g!=M){J=d.x,K=d.y,L=f,M=g,N.style.left=J+"px",N.style.top=K+"px",N.style.width=L+"px",N.style.height=M+"px";for(var h=0;a.activeCues&&h=0?F.textTracks[a]:null,e=this;if(d){if("showing"!==d.mode)return void(c&&c.length>0&&(d.nonAddedCues=d.nonAddedCues.concat(c)));if(c||(c=d.nonAddedCues,d.nonAddedCues=[]),c&&0!==c.length)for(var g in c){var h,i=c[g];d.cellResolution=i.cellResolution,d.isFromCEA608=i.isFromCEA608,O||"html"!==i.type&&"image"!==i.type||(O=setInterval(f.bind(this),500)),"image"===i.type?(h=new D(i.start-b,i.end-b,""),h.image=i.data,h.id=i.id,h.size=0,h.type="image",h.layout=i.layout,h.scaleCue=j.bind(e),h.onenter=function(){if(N&&"showing"===d.mode){var a=new Image;a.id="ttmlImage_"+this.id,a.src=this.image,a.style.cssText="z-index: 2147483648; pointer-events: none; display: block; visibility: visible !important; position: relative !important;",N.appendChild(a),j.call(e,this)}},h.onexit=function(){if(N)for(var a=N.childNodes,b=0;b=0?F.textTracks[I]:null}function o(){return I}function p(a){for(var b=-1,c=0;c=0){var b=F.textTracks[a];"html"===b.renderingType?v.call(this):w.call(this)}else w.call(this)}function r(a){return F.textTracks[a]}function s(a){if(a.cues){for(var b=a.cues,c=b.length-1,d=c;d>=0;d--)a.removeCue(b[d]);a.mode="disabled"}}function t(){for(var a=H.length,b=0;b0?(b--,r.push(setTimeout(function(){c(a,b)},i.getRetryIntervalForType(d.type)))):(j.downloadError(s[d.type],d.url,d),a.error&&a.error(d,"error",e.statusText),a.complete&&a.complete(d,e.statusText))))},v=function(b){var c=new Date;g&&(g=!1,(!b.lengthComputable||b.lengthComputable&&b.total!==b.loaded)&&(d.firstByteDate=c)),b.lengthComputable&&(d.bytesLoaded=b.loaded,d.bytesTotal=b.total),f.push({s:m,d:c.getTime()-m.getTime(),b:[b.loaded?b.loaded-o:0]}),m=c,o=b.loaded,a.progress&&a.progress()},w=function(){e.status>=200&&e.status<=299&&(t(!0),a.success&&a.success(e.response,e.statusText,e),a.complete&&a.complete(d,e.statusText))};try{var x=n.modifyRequestURL(d.url),y=d.checkExistenceOnly?"HEAD":"GET";e.open(y,x,!0),d.responseType&&(e.responseType=d.responseType),d.range&&e.setRequestHeader("Range","bytes="+d.range),d.requestStartDate||(d.requestStartDate=k),e=n.modifyRequestHeader(e),e.withCredentials=i.getXHRWithCredentialsForType(d.type),e.onload=w,e.onloadend=u,e.onerror=u,e.onprogress=v;var z=(new Date).getTime();isNaN(d.delayLoadingTime)||z>=d.delayLoadingTime?(p.push(e),e.send()):!function(){var a={xhr:e};q.push(a),a.delayTimeout=setTimeout(function(){if(q.indexOf(a)!==-1){q.splice(q.indexOf(a),1);try{p.push(a.xhr),a.xhr.send()}catch(b){a.xhr.onerror()}}},d.delayLoadingTime-z)}()}catch(A){e.onerror()}}function d(a){a.request&&c(a,i.getRetryAttemptsForType(a.request.type))}function f(){r.forEach(function(a){return clearTimeout(a)}),r=[],q.forEach(function(a){return clearTimeout(a.delayTimeout)}),q=[],p.forEach(function(a){a.onloadend=a.onerror=a.onprogress=void 0,a.abort()}),p=[]}var h=this.context,i=(0,k.default)(h).getInstance(),j=a.errHandler,l=a.metricsModel,n=a.requestModifier,o=void 0,p=void 0,q=void 0,r=void 0,s=void 0;return o={load:d,abort:f},b(),o}Object.defineProperty(c,"__esModule",{value:!0});var g=a(180),h=a(10),i=d(h),j=a(102),k=d(j),l=a(152),m=d(l);f.__dashjs_factory_name="XHRLoader";var n=i.default.getClassFactory(f);c.default=n,b.exports=c.default},{10:10,102:102,152:152,180:180}],60:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(a,b,c){var e=function(d,e){b.resolved=!0,b.resolvedContent=d?d:null,f.trigger(p.default.XLINK_ELEMENT_LOADED,{element:b,resolveObject:c,error:d||e?null:new g.default(s,"Failed loading Xlink element: "+a)})};if(a===d)e(null,!0);else{var i=new l.default(a,j.HTTPRequest.XLINK_TYPE);h.load({request:i,success:function(a){e(a)},error:function(){e(null)}})}}function c(){h&&(h.abort(),h=null)}var d="urn:mpeg:dash:resolve-to-zero:2013",e=this.context,f=(0,n.default)(e).getInstance(),h=(0,i.default)(e).create({errHandler:a.errHandler,metricsModel:a.metricsModel,requestModifier:a.requestModifier}),k=void 0;return k={load:b,reset:c}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(163),g=d(f),h=a(59),i=d(h),j=a(180),k=a(171),l=d(k),m=a(9),n=d(m),o=a(13),p=d(o),q=a(10),r=d(q),s=1;e.__dashjs_factory_name="XlinkLoader";var t=r.default.getClassFactory(e);t.XLINK_LOADER_ERROR_LOADING_FAILURE=s,c.default=t,b.exports=c.default},{10:10,13:13,163:163,171:171,180:180,59:59,9:9}],61:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){qa={video:!0,audio:!0},ra={},sa={},ta={},ua={},va={},xa={},wa={},Ka={},za=!1,Aa=!1,void 0===Ba&&(Ba=!1),Ia=(0,i.default)(ja).getInstance(),Ha=(0,k.default)(ja).getInstance(),Ea=(0,w.default)(ja).getInstance(),Fa=(0,y.default)(ja).getInstance(),Ga=(0,A.default)(ja).getInstance(),Ma=(0,K.default)(ja).getInstance(),Na=(0,M.default)(ja).getInstance(),Oa=(new Date).getTime()/1e3}function b(a,b){Ka[a]=(0,G.default)(ja).create(),wa[a]=b,xa[a]=xa[a]||{},xa[a].state=Q,ma.on(q.default.LOADING_PROGRESS,ia,this),"video"==a&&(ma.on(s.default.QUALITY_CHANGE_RENDERED,e,this),La=(0,I.default)(ja).create(),ga())}function c(){ma.off(q.default.LOADING_PROGRESS,ia,this),ma.off(s.default.QUALITY_CHANGE_RENDERED,e,this),Ja=void 0,La=void 0,clearTimeout(ya),ya=null,a()}function d(a){a&&(a.abrRulesCollection&&(oa=a.abrRulesCollection),a.streamController&&(pa=a.streamController))}function e(a){"video"===a.mediaType&&(Ja=a.newQuality,La.push(Ja,Ga.getPlaybackQuality()))}function f(a,b){var c;return ra[b]=ra[b]||{},ra[b].hasOwnProperty(a)||(ra[b][a]=0),c=da(ra[b][a],a),c=ea(c,a,ra[b][a]),c=ha(c,a)}function h(a){var b=Ia.getSavedBitrateSettings(a);if(!ta.hasOwnProperty(a))if(ua.hasOwnProperty(a)){var c=Ea.getValue(),d=Fa.getAdaptationForType(c,0,a).Representation;if(Array.isArray(d)){var e=Math.max(Math.round(d.length*ua[a])-1,0);ta[a]=d[e].bandwidth}else ta[a]=0}else isNaN(b)?ta[a]="video"===a?R:S:ta[a]=b;return ta[a]}function j(a,b){ta[a]=b}function l(a){return ua.hasOwnProperty(a)?ua[a]:null}function n(a,b){ua[a]=b}function p(a){return ta.hasOwnProperty("max")&&ta.max.hasOwnProperty(a)?ta.max[a]:NaN}function r(a,b){ta.max=ta.max||{},ta.max[a]=b}function t(a){return ua.hasOwnProperty("max")&&ua.max.hasOwnProperty(a)?ua.max[a]:1}function u(a,b){ua.max=ua.max||{},ua.max[a]=b}function v(a){return qa[a]}function x(a,b){qa[a]=b}function z(){return za}function B(a){za=a}function D(){return Aa}function F(a){Aa=a}function H(a){var b=a.getType(),c=a.getStreamInfo(),d=c.id,e=aa(b,c),g=(0,C.default)(ja).create({streamProcessor:a,currentValue:e,playbackIndex:Ja,switchHistory:Ka[b],droppedFramesHistory:La,hasRichBuffer:X(b)});if(La&&La.push(Ja,Ga.getPlaybackQuality()),v(b)){var h=f(b,d),i=oa.getMaxQuality(g),j=i.value;if(j>h&&(j=h),Ka[b].push({oldValue:e,newValue:j}),j>E.default.NO_CHANGE&&j!=e)(xa[b].state===Q||j>e)&&L(b,c,e,j,h,i.reason);else if(ka.getLogToBrowserConsole()){var k=Na.getCurrentBufferLevel(Ma.getReadOnlyMetricsFor(b));la("AbrController ("+b+") stay on "+e+"/"+h+" (buffer: "+k+")")}}}function J(a,b,c,d){var e=b.id,g=aa(a,b),h=null!==c&&!isNaN(c)&&c%1===0;if(!h)throw new Error("argument is not an integer");var i=f(a,e);c!==g&&c>=0&&c<=i&&L(a,b,g,c,i,d)}function L(a,b,c,d,e,f){if(ka.getLogToBrowserConsole()){var g=Na.getCurrentBufferLevel(Ma.getReadOnlyMetricsFor(a));la("AbrController ("+a+") switch from "+c+" to "+d+"/"+e+" (buffer: "+g+")\n"+JSON.stringify(f))}ba(a,b.id,d),ma.trigger(q.default.QUALITY_CHANGE_REQUESTED,{mediaType:a,streamInfo:b,oldQuality:c,newQuality:d,reason:f})}function N(a,b){xa[a].state=b}function U(a){return xa[a].state}function V(a,b,c){if(c&&wa[a.type].getCurrentRepresentationInfo()&&wa[a.type].getCurrentRepresentationInfo().fragmentDuration){c/=1e3;var d=wa[a.type].getCurrentRepresentationInfo().fragmentDuration;if(c>d)return 0;var e=c/d;b*=1-e}var f=W(a);if(!f||0===f.length)return T;for(var g=f.length-1;g>=0;g--){var h=f[g];if(1e3*b>=h.bitrate)return g}return 0}function W(a){if(!a||!a.bitrateList)return null;for(var b,c=a.bitrateList,d=a.type,e=[],f=0,h=c.length;f0?b.BufferState[b.BufferState.length-1]:null,e=!1;return d&&c>d.target&&(e=c>d.target+Ha.getRichBufferThreshold()),e}function Y(a,b){va[a]=b}function Z(a){return va[a]}function $(a){var b=a.type,c=a.streamInfo.id,d=a.representationCount-1;return ca(b,c,d),d}function _(a){var b,c=a.id,d=aa("audio",a),e=aa("video",a);return b=d===f("audio",c)&&e===f("video",c)}function aa(a,b){var c,d=b.id;return sa[d]=sa[d]||{},sa[d].hasOwnProperty(a)||(sa[d][a]=T),c=sa[d][a]}function ba(a,b,c){sa[b]=sa[b]||{},sa[b][a]=c}function ca(a,b,c){ra[b]=ra[b]||{},ra[b][a]=c}function da(a,b){var c=p(b);if(isNaN(c)||!wa[b])return a;var d=V(wa[b].getMediaInfo(),c);return Math.min(a,d)}function ea(a,b,c){var d=t(b);return isNaN(d)||d>=1||d<0?a:Math.min(a,Math.round(c*d))}function fa(a){Ba=a}function ga(){var a=Ga.getElement();if(void 0!==a){var b=Aa&&window.hasOwnProperty("devicePixelRatio"),c=b?window.devicePixelRatio:1;Ca=a.clientWidth*c,Da=a.clientHeight*c}}function ha(a,b){if("video"!==b||!za||!wa[b])return a;Ba||ga();var c=Ea.getValue(),d=Fa.getAdaptationForType(c,0,b).Representation,e=a;if(Ca>0&&Da>0){for(;e>0&&d[e]&&Ca=e&&d[e].width===d[e+1].width&&(e=Math.min(a,e+1))}return e}function ia(a){var b=a.request.mediaType;if(v(b)){var c=wa[b].getScheduleController();if(!c)return;var d=(0,C.default)(ja).create({streamProcessor:wa[b],currentRequest:a.request,currentValue:aa(b,pa.getActiveStreamInfo()),hasRichBuffer:X(b)}),e=oa.shouldAbandonFragment(d);if(e.value>E.default.NO_CHANGE){var f=c.getFragmentModel(),g=f.getRequests({state:m.default.FRAGMENT_MODEL_LOADING,index:a.request.index})[0];g&&(f.abortRequests(),N(b,P),Ka[b].reset(),Ka[b].push({oldValue:aa(b,pa.getActiveStreamInfo()),newValue:e.value,confidence:1,reason:e.reason}),J(b,pa.getActiveStreamInfo(),e.value,e.reason),ma.trigger(q.default.FRAGMENT_LOADING_ABANDONED,{streamProcessor:wa[b],request:g,mediaType:b}),clearTimeout(ya),ya=setTimeout(function(){N(b,Q),ya=null},Ha.getAbandonLoadTimeout()))}}}var ja=this.context,ka=(0,O.default)(ja).getInstance(),la=ka.log,ma=(0,o.default)(ja).getInstance(),na=void 0,oa=void 0,pa=void 0,qa=void 0,ra=void 0,sa=void 0,ta=void 0,ua=void 0,va=void 0,wa=void 0,xa=void 0,ya=void 0,za=void 0,Aa=void 0,Ba=void 0,Ca=void 0,Da=void 0,Ea=void 0,Fa=void 0,Ga=void 0,Ha=void 0,Ia=void 0,Ja=void 0,Ka=void 0,La=void 0,Ma=void 0,Na=void 0,Oa=void 0;return na={isPlayingAtTopQuality:_,updateTopQualityIndex:$,getAverageThroughput:Z,getBitrateList:W,getQualityForBitrate:V,getMaxAllowedBitrateFor:p,setMaxAllowedBitrateFor:r,getMaxAllowedRepresentationRatioFor:t,setMaxAllowedRepresentationRatioFor:u,getInitialBitrateFor:h,setInitialBitrateFor:j,getInitialRepresentationRatioFor:l,setInitialRepresentationRatioFor:n,setAutoSwitchBitrateFor:x,getAutoSwitchBitrateFor:v,setLimitBitrateByPortal:B,getLimitBitrateByPortal:z,getUsePixelRatioInLimitBitrateByPortal:D,setUsePixelRatioInLimitBitrateByPortal:F,getQualityFor:aa,getAbandonmentStateFor:U,setAbandonmentStateFor:N,setPlaybackQuality:J,getPlaybackQuality:H,setAverageThroughput:Y,getTopQualityIndexFor:f,setElementSize:ga,setWindowResizeEventCalled:fa,initialize:b,setConfig:d,reset:c},a(),na}Object.defineProperty(c,"__esModule",{value:!0});var f=a(161),g=d(f),h=a(150),i=d(h),j=a(102),k=d(j),l=a(100),m=d(l),n=a(9),o=d(n),p=a(13),q=d(p),r=a(53),s=d(r),t=a(10),u=d(t),v=a(101),w=d(v),x=a(22),y=d(x),z=a(105),A=d(z),B=a(130),C=d(B),D=a(132),E=d(D),F=a(133),G=d(F),H=a(129),I=d(H),J=a(103),K=d(J),L=a(17),M=d(L),N=a(8),O=d(N),P="abandonload",Q="allowload",R=1e3,S=100,T=0;e.__dashjs_factory_name="AbrController";var U=u.default.getSingletonFactory(e);U.ABANDON_LOAD=P,U.QUALITY_DEFAULT=T,c.default=U,b.exports=c.default; -},{10:10,100:100,101:101,102:102,103:103,105:105,129:129,13:13,130:130,132:132,133:133,150:150,161:161,17:17,22:22,53:53,8:8,9:9}],62:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(a){p.invalidateSelectedIndexes(a.entry)}function b(){p=(0,g.default)(l).create(),r=(0,i.default)(l).create(),n.on(s.default.SERVICE_LOCATION_BLACKLIST_CHANGED,a,j)}function c(a){a.baseURLTreeModel&&(p=a.baseURLTreeModel),a.baseURLSelector&&(r=a.baseURLSelector)}function d(a){p.update(a),r.chooseSelectorFromManifest(a)}function e(a){var b=p.getForPath(a),c=b.reduce(function(a,b){var c=r.select(b);return c?(o.isRelative(c.url)?a.url=o.resolve(c.url,a.url):(a.url=c.url,a.serviceLocation=c.serviceLocation),a):new m.default},new m.default);if(!o.isRelative(c.url))return c}function f(){p.reset(),r.reset()}function h(a){d(a)}var j=void 0,l=this.context,n=(0,q.default)(l).getInstance(),o=(0,k.default)(l).getInstance(),p=void 0,r=void 0;return j={reset:f,initialize:h,resolve:e,setConfig:c},b(),j}Object.defineProperty(c,"__esModule",{value:!0});var f=a(99),g=d(f),h=a(146),i=d(h),j=a(159),k=d(j),l=a(41),m=d(l),n=a(10),o=d(n),p=a(9),q=d(p),r=a(13),s=d(r);e.__dashjs_factory_name="BaseURLController",c.default=o.default.getSingletonFactory(e),b.exports=c.default},{10:10,13:13,146:146,159:159,41:41,9:9,99:99}],63:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(a){return!!(g.length&&a&&a.length)&&g.indexOf(a)!==-1}function c(a){g.indexOf(a)===-1&&(g.push(a),h.trigger(j,{entry:a}))}function d(a){a.error&&c(a.request.serviceLocation)}function e(){k&&h.on(k,d,this)}function f(){g=[]}var g=[],h=(0,i.default)(this.context).getInstance(),j=a.updateEventName,k=a.loadFailedEventName;return e(),{add:c,contains:b,reset:f}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=a(9),i=d(h);e.__dashjs_factory_name="BlackListController",c.default=g.default.getClassFactory(e),b.exports=c.default},{10:10,9:9}],64:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(){oa=m.default.QUALITY_DEFAULT,pa=!1,qa=0,ra=Number.POSITIVE_INFINITY,ta=0,ua=Number.POSITIVE_INFINITY,wa=null,xa=E,za=0,Aa=!1,Ba=!1,Ca=!1,Da=!1}function c(a,b,c){va=a,$(b),Fa=c,Ia=(0,i.default)(ca).getInstance(),Ea=(0,o.default)(ca).getInstance(),Ga=(0,m.default)(ca).getInstance(),Ja=(0,C.default)(ca).getInstance(),Ha=Fa.getScheduleController(),oa=Ga.getQualityFor(va,Fa.getStreamInfo()),ea.on(u.default.DATA_UPDATE_COMPLETED,O,this),ea.on(u.default.INIT_FRAGMENT_LOADED,f,this),ea.on(u.default.MEDIA_FRAGMENT_LOADED,j,this),ea.on(u.default.QUALITY_CHANGE_REQUESTED,p,this),ea.on(u.default.STREAM_COMPLETED,P,this),ea.on(u.default.PLAYBACK_PROGRESS,t,this),ea.on(u.default.PLAYBACK_TIME_UPDATED,t,this),ea.on(u.default.PLAYBACK_RATE_CHANGED,S,this),ea.on(u.default.PLAYBACK_SEEKING,r,this),ea.on(u.default.WALLCLOCK_TIME_UPDATED,R,this),ea.on(u.default.CURRENT_TRACK_CHANGED,Q,this,s.default.EVENT_PRIORITY_HIGH),ea.on(u.default.SOURCEBUFFER_APPEND_COMPLETED,n,this),ea.on(u.default.SOURCEBUFFER_REMOVE_COMPLETED,M,this)}function d(a){if(!a||!sa||!Fa)return null;var b=null;try{b=ha.createSourceBuffer(sa,a),b&&b.hasOwnProperty("initialize")&&b.initialize(va,this)}catch(c){ia.mediaSourceError("Error creating "+va+" source buffer.")}return X(b),N(Fa.getRepresentationInfoForQuality(oa).MSETimeOffset),b}function e(){return Fa.getStreamInfo().id===ja.getActiveStreamInfo().id}function f(a){a.fragmentModel===Fa.getFragmentModel()&&(da("Init fragment finished loading saving to",va+"'s init cache"),Ja.save(a.chunk),l(a.chunk))}function h(a,b){var c=Ja.extract(a,va,b);c?l(c):ea.trigger(u.default.INIT_REQUESTED,{sender:na})}function j(a){if(a.fragmentModel===Fa.getFragmentModel()){var b=a.chunk,c=b.bytes,d=b.quality,e=Fa.getRepresentationInfoForQuality(d),f=ga.getValue(),h=la.getEventsFor(f,e.mediaInfo,Fa),i=la.getEventsFor(f,e,Fa);if(h&&h.length>0||i&&i.length>0){var j=Fa.getFragmentModel().getRequests({state:g.default.FRAGMENT_MODEL_EXECUTED,quality:d,index:b.index})[0],k=G(c,j,h,i);Fa.getEventController().addInbandEvents(k)}b.bytes=H(c),l(b)}}function l(a){Ba=!0,ya=a,ha.append(wa,a),"video"===a.mediaInfo.type&&a.mediaInfo.embeddedCaptions&&ma.append(a.bytes,a)}function n(a){if(wa===a.buffer){if(a.error||!I())return a.error.code===k.default.QUOTA_EXCEEDED_ERROR_CODE&&(ra=.8*ha.getTotalBufferedTime(wa)),void(a.error.code!==k.default.QUOTA_EXCEEDED_ERROR_CODE&&I()||(ea.trigger(u.default.QUOTA_EXCEEDED,{sender:na,criticalBufferLevel:ra}),L(K())));isNaN(ya.index)||(ta=Math.max(ya.index,ta),y());var b=ha.getAllRanges(wa);if(b&&b.length>0)for(var c=0,d=b.length;c=ua-1;a&&!pa&&(pa=!0,ea.trigger(u.default.BUFFERING_COMPLETED,{sender:na,streamInfo:Fa.getStreamInfo()}))}function z(){B(qa0&&(da("pruning buffer: "+b+" seconds."),Ca=!0,ha.remove(wa,0,Math.round(a+b),sa))}}function K(){if(!wa)return null;var a=Ea.getTime(),b=Fa.getFragmentModel().getRequests({state:g.default.FRAGMENT_MODEL_EXECUTED,time:a})[0],c=ha.getBufferRange(wa,a),d=b&&!isNaN(b.startTime)?b.startTime:Math.floor(a);return null===c&&wa.buffered.length>0&&(d=wa.buffered.end(wa.buffered.length-1)),{start:wa.buffered.start(0),end:d}}function L(a){a&&wa&&ha.remove(wa,a.start,a.end,sa)}function M(a){wa===a.buffer&&(Ca&&(Ca=!1),v(),ea.trigger(u.default.BUFFER_CLEARED,{sender:na,from:a.from,to:a.to,hasEnoughSpaceToAppend:I()}))}function N(a){wa&&wa.timestampOffset!==a&&!isNaN(a)&&(wa.timestampOffset=a)}function O(a){a.sender.getStreamProcessor()!==Fa||a.error||N(a.currentRepresentation.MSETimeOffset)}function P(a){a.fragmentModel===Fa.getFragmentModel()&&(ua=a.request.index,y())}function Q(a){wa&&a.newMediaInfo.type===va&&a.newMediaInfo.streamInfo.id===Fa.getStreamInfo().id&&ka.getSwitchMode(va)===q.default.TRACK_SWITCH_MODE_ALWAYS_REPLACE&&L(K())}function R(){za++;var a=za*(Ia.getWallclockTimeUpdateInterval()/1e3);a>=Ia.getBufferPruningInterval()&&!Ba&&(za=0,J())}function S(){z()}function T(){return va}function U(){return Fa}function V(a){Fa=a}function W(){return wa}function X(a){wa=a}function Y(){return qa}function Z(){return ra}function $(a){sa=a}function _(){return sa}function aa(){return pa}function ba(a){ea.off(u.default.DATA_UPDATE_COMPLETED,O,this),ea.off(u.default.QUALITY_CHANGE_REQUESTED,p,this),ea.off(u.default.INIT_FRAGMENT_LOADED,f,this),ea.off(u.default.MEDIA_FRAGMENT_LOADED,j,this),ea.off(u.default.STREAM_COMPLETED,P,this),ea.off(u.default.CURRENT_TRACK_CHANGED,Q,this),ea.off(u.default.PLAYBACK_PROGRESS,t,this),ea.off(u.default.PLAYBACK_TIME_UPDATED,t,this),ea.off(u.default.PLAYBACK_RATE_CHANGED,S,this),ea.off(u.default.PLAYBACK_SEEKING,r,this),ea.off(u.default.WALLCLOCK_TIME_UPDATED,R,this),ea.off(u.default.SOURCEBUFFER_APPEND_COMPLETED,n,this),ea.off(u.default.SOURCEBUFFER_REMOVE_COMPLETED,M,this),ra=Number.POSITIVE_INFINITY,xa=E,oa=m.default.QUALITY_DEFAULT,ua=Number.POSITIVE_INFINITY,ta=0,ya=null,Aa=!1,pa=!1,Ba=!1,Ca=!1,Ea=null,Fa=null,Ga=null,Ha=null,a||(ha.abort(sa,wa),ha.removeSourceBuffer(sa,wa)),wa=null}var ca=this.context,da=(0,A.default)(ca).getInstance().log,ea=(0,s.default)(ca).getInstance(),fa=a.metricsModel,ga=a.manifestModel,ha=a.sourceBufferController,ia=a.errHandler,ja=a.streamController,ka=a.mediaController,la=a.adapter,ma=a.textSourceBuffer,na=void 0,oa=void 0,pa=void 0,qa=void 0,ra=void 0,sa=void 0,ta=void 0,ua=void 0,va=void 0,wa=void 0,xa=void 0,ya=void 0,za=void 0,Aa=void 0,Ba=void 0,Ca=void 0,Da=void 0,Ea=void 0,Fa=void 0,Ga=void 0,Ha=void 0,Ia=void 0,Ja=void 0;return na={initialize:c,createBuffer:d,getType:T,getStreamProcessor:U,setStreamProcessor:V,getBuffer:W,setBuffer:X,getBufferLevel:Y,getCriticalBufferLevel:Z,setMediaSource:$,getMediaSource:_,getIsBufferingCompleted:aa,switchInitData:h,reset:ba},b(),na}Object.defineProperty(c,"__esModule",{value:!0});var f=a(100),g=d(f),h=a(102),i=d(h),j=a(71),k=d(j),l=a(61),m=d(l),n=a(69),o=d(n),p=a(67),q=d(p),r=a(9),s=d(r),t=a(13),u=d(t),v=a(147),w=d(v),x=a(10),y=d(x),z=a(8),A=d(z),B=a(153),C=d(B),D="bufferLoaded",E="bufferStalled",F=.5;e.__dashjs_factory_name="BufferController";var G=y.default.getClassFactory(e);G.BUFFER_LOADED=D,G.BUFFER_EMPTY=E,c.default=G,b.exports=c.default},{10:10,100:100,102:102,13:13,147:147,153:153,61:61,67:67,69:69,71:71,8:8,9:9}],65:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){D=!1,u={},v={},w={},x=null,y=100,z=y/1e3,C=(0,g.default)(q).getInstance()}function b(){null!==x&&D&&(clearInterval(x),x=null,D=!1)}function c(){r("Start Event Controller"),D||isNaN(y)||(D=!0,x=setInterval(h,y))}function d(a){if(u={},a)for(var b=0;bc)&&(r("Start Event "+f+" at "+c),g.duration>0&&(w[f]=g),g.eventStream.schemeIdUri==o&&g.eventStream.value==p?i():s.trigger(g.eventStream.schemeIdUri,{event:g}),delete a[f]))}}function l(a){a&&(a.manifestModel&&(A=a.manifestModel),a.manifestUpdater&&(B=a.manifestUpdater))}function n(){b(),u=null,v=null,w=null,C=null}var o="urn:mpeg:dash:event:2012",p=1,q=this.context,r=(0,k.default)(q).getInstance().log,s=(0,m.default)(q).getInstance(),t=void 0,u=void 0,v=void 0,w=void 0,x=void 0,y=void 0,z=void 0,A=void 0,B=void 0,C=void 0,D=void 0;return t={initialize:a,addInlineEvents:d,addInbandEvents:e,clear:b,start:c,setConfig:l,reset:n}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(69),g=d(f),h=a(10),i=d(h),j=a(8),k=d(j),l=a(9),m=d(l);e.__dashjs_factory_name="EventController",c.default=i.default.getSingletonFactory(e),b.exports=c.default},{10:10,69:69,8:8,9:9}],66:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){q={},m.on(p.default.FRAGMENT_LOADING_COMPLETED,g,o)}function b(a){var b=q[a];return b||(b=(0,j.default)(i).create({metricsModel:(0,l.default)(i).getInstance()}),q[a]=b),b}function c(a){return a&&a.type&&a.type===f.HTTPRequest.INIT_SEGMENT_TYPE}function d(){m.off(p.default.FRAGMENT_LOADING_COMPLETED,g,this);for(var a in q)q[a].reset();q={}}function e(a,b,c){var d=new h.default;return d.streamId=c,d.mediaInfo=b.mediaInfo,d.segmentType=b.type,d.start=b.startTime,d.duration=b.duration,d.end=d.start+d.duration,d.bytes=a,d.index=b.index,d.quality=b.quality,d}function g(a){if(q[a.request.mediaType]===a.sender){var b=a.sender.getScheduleController(),d=a.request,f=a.response,g=c(d),h=b.getStreamProcessor().getStreamInfo();if(!f||!h)return void k("No "+d.mediaType+" bytes to push or stream is inactive.");var i=e(f,d,h.id);m.trigger(g?p.default.INIT_FRAGMENT_LOADED:p.default.MEDIA_FRAGMENT_LOADED,{chunk:i,fragmentModel:a.sender})}}var i=this.context,k=(0,t.default)(i).getInstance().log,m=(0,n.default)(i).getInstance(),o=void 0,q=void 0;return o={getModel:b,isInitializationRequest:c,reset:d},a(),o}Object.defineProperty(c,"__esModule",{value:!0});var f=a(180),g=a(162),h=d(g),i=a(100),j=d(i),k=a(103),l=d(k),m=a(9),n=d(m),o=a(13),p=d(o),q=a(10),r=d(q),s=a(8),t=d(s);e.__dashjs_factory_name="FragmentController",c.default=r.default.getClassFactory(e),b.exports=c.default},{10:10,100:100,103:103,13:13,162:162,180:180,8:8,9:9}],67:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){N={},E(),D()}function b(a,b){var c=k(a),e=d(a,b),f=[];return"fragmentedText"===a?void h(e[0]):(c||(c=L.getSavedMediaSettings(a),j(a,c)),void(e&&0!==e.length&&(c&&e.forEach(function(a){C(c,a)&&f.push(a)}),h(0===f.length?F(e):f.length>1?F(f):f[0]))))}function c(a){var b=a?a.type:null,c=a?a.streamInfo.id:null,d=k(b);return!(!a||!x(b))&&(N[c]=N[c]||G(),!(N[c][b].list.indexOf(a)>=0)&&(N[c][b].list.push(a),d&&C(d,a)&&!e(b,a.streamInfo)&&h(a),!0))}function d(a,b){if(!a||!b)return[];var c=b.id;return N[c]&&N[c][a]?N[c][a].list:[]}function e(a,b){return!a||!b||b&&!N[b.id]?null:N[b.id][a].current}function f(a){var b=a.type,c=a.streamInfo.id;return N[c]&&N[c][b]&&y(N[c][b].current,a)}function h(a){if(a){var b=a.type,c=a.streamInfo,d=c.id,f=e(b,c);if(N[d]&&N[d][b]&&(!f||!y(a,f))){N[d][b].current=a,f&&J.trigger(g.default.CURRENT_TRACK_CHANGED,{oldMediaInfo:f,newMediaInfo:a,switchMode:Q[b]});var h=B(a);h&&N[d][b].storeLastSettings&&(h.roles&&(h.role=h.roles[0],delete h.roles),h.accessibility&&(h.accessibility=h.accessibility[0]),h.audioChannelConfiguration&&(h.audioChannelConfiguration=h.audioChannelConfiguration[0]),L.setSavedMediaSettings(b,h))}}}function j(a,b){a&&b&&(O[a]=b)}function k(a){return a?O[a]:null}function l(a,b){var c=S.indexOf(b)!==-1;return c?void(Q[a]=b):void I("track switch mode is not supported: "+b)}function n(a){return Q[a]}function p(a){var b=T.indexOf(a)!==-1;return b?void(P=a):void I("track selection mode is not supported: "+a)}function w(){return P||v}function x(a){return"audio"===a||"video"===a||"text"===a||"fragmentedText"===a}function y(a,b){var c=a.id===b.id,d=a.viewpoint===b.viewpoint,e=a.lang===b.lang,f=a.roles.toString()===b.roles.toString(),g=a.accessibility.toString()===b.accessibility.toString(),h=a.audioChannelConfiguration.toString()===b.audioChannelConfiguration.toString();return c&&d&&e&&f&&g&&h}function z(a){a&&a.errHandler&&(R=a.errHandler)}function A(){a(),K.resetEmbedded()}function B(a){var b={lang:a.lang,viewpoint:a.viewpoint,roles:a.roles,accessibility:a.accessibility,audioChannelConfiguration:a.audioChannelConfiguration},c=b.lang||b.viewpoint||b.role&&b.role.length>0||b.accessibility&&b.accessibility.length>0||b.audioChannelConfiguration&&b.audioChannelConfiguration.length>0;return c?b:null}function C(a,b){var c=!a.lang||a.lang===b.lang,d=!a.viewpoint||a.viewpoint===b.viewpoint,e=!a.role||!!b.roles.filter(function(b){return b===a.role})[0],f=!a.accessibility||!!b.accessibility.filter(function(b){return b===a.accessibility})[0],g=!a.audioChannelConfiguration||!!b.audioChannelConfiguration.filter(function(b){return b===a.audioChannelConfiguration})[0];return c&&d&&e&&f&&g}function D(){Q={audio:s,video:r}}function E(){O={audio:null,video:null}}function F(a){var b=w(),c=[],d=function(a){var b,c=0,d=[];return a.forEach(function(a){b=Math.max.apply(Math,a.bitrateList.map(function(a){return a.bandwidth})),b>c?(c=b,d=[a]):b===c&&d.push(a)}),d},e=function(a){var b,c=0,d=[];return a.forEach(function(a){b=a.representationCount,b>c?(c=b,d=[a]):b===c&&d.push(a)}),d};switch(b){case t:c=d(a),c.length>1&&(c=e(c));break;case u:c=e(a),c.length>1&&(c=d(a));break;default:I("track selection mode is not supported: "+b)}return c[0]}function G(){return{audio:{list:[],storeLastSettings:!0,current:null},video:{list:[],storeLastSettings:!0,current:null},text:{list:[],storeLastSettings:!0,current:null},fragmentedText:{list:[],storeLastSettings:!0,current:null}}}var H=this.context,I=(0,m.default)(H).getInstance().log,J=(0,i.default)(H).getInstance(),K=(0,o.default)(H).getInstance(),L=(0,q.default)(H).getInstance(),M=void 0,N=void 0,O=void 0,P=void 0,Q=void 0,R=void 0,S=[s,r],T=[t,u];return M={initialize:a,checkInitialMediaSettingsForType:b,addTrack:c,getTracksFor:d,getCurrentTrackFor:e,isCurrentTrack:f,setTrack:h,setInitialSettings:j,getInitialSettings:k,setSwitchMode:l,getSwitchMode:n,setSelectionModeForInitialTrack:p,getSelectionModeForInitialTrack:w,isMultiTrackSupportedByType:x,isTracksEqual:y,setConfig:z,reset:A}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(13),g=d(f),h=a(9),i=d(h),j=a(10),k=d(j),l=a(8),m=d(l),n=a(57),o=d(n),p=a(150),q=d(p),r="neverReplace",s="alwaysReplace",t="highestBitrate",u="widestRange",v=t;e.__dashjs_factory_name="MediaController";var w=k.default.getSingletonFactory(e);w.TRACK_SWITCH_MODE_NEVER_REPLACE=r,w.TRACK_SWITCH_MODE_ALWAYS_REPLACE=s,w.TRACK_SELECTION_MODE_HIGHEST_BITRATE=t,w.TRACK_SELECTION_MODE_WIDEST_RANGE=u,w.DEFAULT_INIT_TRACK_SELECTION_MODE=v,c.default=w,b.exports=c.default},{10:10,13:13,150:150,57:57,8:8,9:9}],68:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){var a="WebKitMediaSource"in window,b="MediaSource"in window;return b?new MediaSource:a?new WebKitMediaSource:null}function b(a,b){var c=window.URL.createObjectURL(a);return b.setSource(c),c}function c(a){a.setSource(null)}function d(a,b){return a.duration!=b&&(a.duration=b),a.duration}function e(a){var b=a.sourceBuffers,c=b.length,d=0;if("open"===a.readyState){for(d;d0}function f(){return oa.id}function h(){if(ba){ba.autoplay=!0;var a=ba.play();a&&"undefined"!=typeof Promise&&a instanceof Promise&&a.catch(function(a){"NotAllowedError"===a.name&&_.trigger(o.default.PLAYBACK_NOT_ALLOWED),$("Caught pending play exception - continuing ("+a+")")})}else ra=!0}function j(){if(ba)return ba.paused}function l(){ba&&(ba.pause(),ba.autoplay=!1)}function n(){if(ba)return ba.seeking}function p(a){ja&&($("Requesting seek to time: "+a),ja.setCurrentTime(a))}function q(){if(ba)return ba.currentTime}function r(){if(ba)return ba.playbackRate}function t(){if(ba)return ba.played}function u(){if(ba)return ba.ended}function v(){return pa}function w(a){la=a}function x(){return la}function y(a,b){var c=ha.getMpd(ga.getValue()),d=void 0,e=10;d=qa.getUseSuggestedPresentationDelay()&&c.hasOwnProperty("suggestedPresentationDelay")?c.suggestedPresentationDelay:qa.getLiveDelay()?qa.getLiveDelay():isNaN(a)?2*oa.manifestInfo.minBufferTime:a*qa.getLiveDelayFragmentCount();var f=Math.max(b-e,b/2);return Math.min(d,f)}function z(){ja&&ba&&(_.off(o.default.DATA_UPDATE_COMPLETED,H,this),_.off(o.default.BUFFER_LEVEL_STATE_CHANGED,W,this),_.off(o.default.BYTES_APPENDED,V,this),E(),Y()),ja=null,oa=null,ba=null,pa=null,a()}function A(a){a&&(a.streamController&&(ca=a.streamController),a.timelineConverter&&(da=a.timelineConverter),a.metricsModel&&(ea=a.metricsModel),a.dashMetrics&&(fa=a.dashMetrics),a.manifestModel&&(ga=a.manifestModel),a.dashManifestModel&&(ha=a.dashManifestModel),a.adapter&&(ia=a.adapter),a.videoModel&&(ja=a.videoModel))}function B(a){var b=void 0,c=(0,i.default)(Z).getInstance().getURIFragmentData(),d=parseInt(c.s,10),e=parseInt(c.t,10),f=NaN;if(a||(f=isNaN(d)?e:d),pa)!isNaN(f)&&f>1262304e3&&(b=f-oa.manifestInfo.availableFrom.getTime()/1e3,(b>la||b=0)b=f;else{var g=na[oa.id];void 0===g&&(g=ca.getActiveStreamCommonEarliestTime()),b=Math.max(g,oa.start)}return b}function C(a){var b,c=ea.getReadOnlyMetricsFor("video")||ea.getReadOnlyMetricsFor("audio"),d=fa.getCurrentDVRInfo(c),e=d?d.range:null;if(!e)return NaN;if(a>e.end)b=Math.max(e.end-2*oa.manifestInfo.minBufferTime,e.start);else{if(!(a0&&(p(a),$("Starting playback at offset: "+a))}function G(){if(!j()&&pa&&0!==ba.readyState){var a=q(),b=C(a),c=!isNaN(b)&&b!==a;c&&p(b)}}function H(a){if(!a.error){var b=ia.convertDataToTrack(ga.getValue(),a.currentRepresentation),c=b.mediaInfo.streamInfo;oa.id===c.id&&(oa=c,G())}}function I(){_.trigger(o.default.CAN_PLAY)}function J(){$("Native video element event: play"),G(),D(),_.trigger(o.default.PLAYBACK_STARTED,{startTime:q()})}function K(){$("Native video element event: playing"),_.trigger(o.default.PLAYBACK_PLAYING,{playingTime:q()})}function L(){$("Native video element event: pause"),_.trigger(o.default.PLAYBACK_PAUSED,{ended:u()})}function M(){var a=q();$("Seeking to: "+a),D(),_.trigger(o.default.PLAYBACK_SEEKING,{seekTime:a})}function N(){$("Native video element event: seeked"),_.trigger(o.default.PLAYBACK_SEEKED)}function O(){var a=q();a!==ka&&(ka=a,_.trigger(o.default.PLAYBACK_TIME_UPDATED,{timeToEnd:d(),time:a}))}function P(){_.trigger(o.default.PLAYBACK_PROGRESS)}function Q(){var a=r();$("Native video element event: ratechange: ",a),_.trigger(o.default.PLAYBACK_RATE_CHANGED,{playbackRate:a})}function R(){$("Native video element event: loadedmetadata"),(!pa&&oa.isFirst||da.isTimeSyncCompleted())&&F(),_.trigger(o.default.PLAYBACK_METADATA_LOADED),D()}function S(){$("Native video element event: ended"),l(),E(),_.trigger(o.default.PLAYBACK_ENDED)}function T(a){var b=a.target||a.srcElement;_.trigger(o.default.PLAYBACK_ERROR,{error:b.error})}function U(){_.trigger(o.default.WALLCLOCK_TIME_UPDATED,{isDynamic:pa,time:new Date})}function V(a){var b=a.bufferedRanges;if(b&&b.length){var c=Math.max(b.start(0),oa.start),d=void 0===na[oa.id]?c:Math.max(na[oa.id],c);d!==na[oa.id]&&(!pa&&B(!0)0;if(a||g(va.mediaInfo.type,Ia.getStreamInfo().id)||Ma.execute(Ia,sa,Ja.isVideoTrackPresent())){var b=function(){if(va.quality!==Ra)Ra=va.quality,La.switchInitData(Ia.getStreamInfo().id,va.quality);else{var a=Sa.shift();if(Ka.isInitializationRequest(a))q(a.quality);else{var b=Na.execute(Ia,a);b?ta.executeRequest(b):(Ba=!1,m(500))}}};Ba=!0,a?b():(Ha.getPlaybackQuality(Ia),b())}else m(500)}}function k(){var a=1.5*va.fragmentDuration,b=ta.getRequests({state:x.default.FRAGMENT_MODEL_EXECUTED,time:Fa.getTime()+a,threshold:0})[0];b&&Sa.indexOf(b)===-1&&!oa.getIsTextTrack(sa)&&(!Ga.isCurrentTrack(b.mediaInfo)||qa.getFastSwitchEnabled()&&b.quality=a&&Ha.getAbandonmentStateFor(sa)!==j.default.ABANDON_LOAD?(s(b),ia("Reloading outdated fragment at index: ",b.index)):b.quality>va.quality&&Y(Fa.getTime()+La.getBufferLevel()))}function m(a){clearTimeout(Da),Da=setTimeout(i,a)}function o(a){a.sender.getStreamProcessor()===Ia&&q(va.quality)}function q(a){Ra=a;var b=ma.getInitRequest(Ia,a);b&&(Ba=!0,ta.executeRequest(b))}function s(a){Sa.push(a)}function u(a){if(sa===a.mediaType&&Ia.getStreamInfo().id===a.streamInfo.id){if(va=Ia.getRepresentationInfoForQuality(a.newQuality),null===va||void 0===va)throw new Error("Unexpected error! - currentRepresentationInfo is null or undefined");ea(new Date,f.PlayListTrace.REPRESENTATION_SWITCH_STOP_REASON),fa()}}function w(a){var b=ta.getRequests({state:x.default.FRAGMENT_MODEL_EXECUTED,time:Fa.getTime(),threshold:0})[0];b&&Fa.getTime()>=b.startTime&&(b.quality!==Pa&&a&&ja.trigger(J.default.QUALITY_CHANGE_RENDERED,{mediaType:sa,oldQuality:Pa,newQuality:b.quality}),Pa=b.quality)}function y(a){a.error||a.sender.getStreamProcessor()!==Ia||(va=ma.convertDataToTrack(la.getValue(),a.currentRepresentation))}function A(a){a.error||Ia.getStreamInfo().id!==a.streamInfo.id||(va=Ia.getCurrentRepresentationInfo(),ua&&wa&&(pa.setTimeSyncCompleted(!0),C()),xa&&d())}function C(){var a=(0,F.default)(ha).getInstance().getLiveEdge(),b=va.mediaInfo.streamInfo.manifestInfo.DVRWindowSize/2,c=a-Fa.computeLiveDelay(va.fragmentDuration,b),d=ma.getFragmentRequestForTime(Ia,va,c,{ignoreIsFinished:!0});Ea=Fa.getLiveStartTime(),(isNaN(Ea)||d.startTime>Ea)&&(Fa.setLiveStartTime(d.startTime),Ea=d.startTime);var e=na.getCurrentManifestUpdate(ka.getMetricsFor("stream"));ka.updateManifestUpdateInfo(e,{currentTime:Ea,presentationStartTime:a,latency:a-Ea,clientTimeOffset:pa.getClientTimeOffset()})}function E(a){a.fragmentModel===ta&&(e(),Ba=!1,ia("Stream is complete"))}function G(a){a.sender===ta&&(oa.getIsTextTrack(sa)&&(Ba=!1),a.error&&a.request.serviceLocation&&!xa&&(s(a.request),Ba=!1,m(0)))}function I(){w(!0)}function K(a){a.sender.getStreamProcessor()===Ia&&(Ba=!1,m(0))}function L(a){a.streamProcessor===Ia&&(s(a.request),Ba=!1,m(0))}function M(a){a.sender.getStreamProcessor()===Ia&&e()}function O(a){a.sender.getStreamProcessor()===Ia&&(ta.removeExecutedRequestsBeforeTime(a.to),a.hasEnoughSpaceToAppend&&xa&&d())}function Q(a){a.sender.getStreamProcessor()!==Ia||a.state!==l.default.BUFFER_EMPTY||Fa.isSeeking()||(ia("Buffer is empty! Stalling!"),ea(new Date,f.PlayListTrace.REBUFFERING_REASON))}function R(a){a.sender.getStreamProcessor()===Ia&&e()}function S(){ta.abortRequests(),e()}function T(a){a.sender.getStreamProcessor()===Ia&&q(a.index)}function U(){!xa&&Oa||d()}function V(a){Ea=a.seekTime,$(0),xa&&d();var b=na.getCurrentManifestUpdate(ka.getMetricsFor("stream")),c=va.DVRWindow?va.DVRWindow.end-Fa.getTime():NaN;ka.updateManifestUpdateInfo(b,{latency:c})}function W(a){za&&(za.playbackspeed=a.playbackRate.toString())}function X(){return Ea}function Y(a){Ea=a}function Z(){return ta}function $(a){Ca=a}function _(){return Ca}function aa(){return Ia}function ba(){return Ma.getBufferTarget(Ia,sa,Ja.isVideoTrackPresent()); -}function ca(a){ya=a}function da(a,b){ea(a,b),ya=null}function ea(a,b){if(ya&&Aa===!1){var c=za.start,d=a.getTime()-c.getTime();za.duration=d,za.stopreason=b,ya.trace.push(za),Aa=!0}}function fa(){ya&&Aa===!0&&va&&(Aa=!1,za=new f.PlayListTrace,za.representationid=va.id,za.start=new Date,za.mstart=1e3*Fa.getTime(),za.playbackspeed=Fa.getPlaybackRate().toString())}function ga(){ja.off(J.default.DATA_UPDATE_STARTED,M,this),ja.off(J.default.DATA_UPDATE_COMPLETED,y,this),ja.off(J.default.BUFFER_LEVEL_STATE_CHANGED,Q,this),ja.off(J.default.QUALITY_CHANGE_REQUESTED,u,this),ja.off(J.default.FRAGMENT_LOADING_COMPLETED,G,this),ja.off(J.default.STREAM_COMPLETED,E,this),ja.off(J.default.STREAM_INITIALIZED,A,this),ja.off(J.default.QUOTA_EXCEEDED,R,this),ja.off(J.default.BYTES_APPENDED,K,this),ja.off(J.default.BUFFER_CLEARED,O,this),ja.off(J.default.INIT_REQUESTED,o,this),ja.off(J.default.PLAYBACK_RATE_CHANGED,W,this),ja.off(J.default.PLAYBACK_SEEKING,V,this),ja.off(J.default.PLAYBACK_STARTED,U,this),ja.off(J.default.PLAYBACK_TIME_UPDATED,I,this),ja.off(J.default.URL_RESOLUTION_FAILED,S,this),ja.off(J.default.FRAGMENT_LOADING_ABANDONED,L,this),oa.getIsTextTrack(sa)&&ja.off(J.default.TIMED_TEXT_REQUESTED,T,this),e(),w(!1),Ba=!1,Ca=0,Ea=NaN,Fa=null,ya=null}var ha=this.context,ia=(0,P.default)(ha).getInstance().log,ja=(0,H.default)(ha).getInstance(),ka=a.metricsModel,la=a.manifestModel,ma=a.adapter,na=a.dashMetrics,oa=a.dashManifestModel,pa=a.timelineConverter,qa=a.mediaPlayerModel,ra=void 0,sa=void 0,ta=void 0,ua=void 0,va=void 0,wa=void 0,xa=void 0,ya=void 0,za=void 0,Aa=void 0,Ba=void 0,Ca=void 0,Da=void 0,Ea=void 0,Fa=void 0,Ga=void 0,Ha=void 0,Ia=void 0,Ja=void 0,Ka=void 0,La=void 0,Ma=void 0,Na=void 0,Oa=void 0,Pa=void 0,Qa=void 0,Ra=void 0,Sa=void 0;return ra={initialize:c,getStreamProcessor:aa,getSeekTarget:X,setSeekTarget:Y,getFragmentModel:Z,setTimeToLoadDelay:$,getTimeToLoadDelay:_,replaceRequest:s,start:d,stop:e,reset:ga,setPlayList:ca,getBufferTarget:ba,finalisePlayList:da},b(),ra}Object.defineProperty(c,"__esModule",{value:!0});var f=a(182),g=a(69),h=d(g),i=a(61),j=d(i),k=a(64),l=d(k),m=a(67),n=d(m),o=a(144),p=d(o),q=a(145),r=d(q),s=a(57),t=d(s),u=a(103),v=d(u),w=a(100),x=d(w),y=a(17),z=d(y),A=a(15),B=d(A),C=a(71),D=d(C),E=a(155),F=d(E),G=a(9),H=d(G),I=a(13),J=d(I),K=a(10),L=d(K),M=a(72),N=d(M),O=a(8),P=d(O);e.__dashjs_factory_name="ScheduleController",c.default=L.default.getClassFactory(e),b.exports=c.default},{10:10,100:100,103:103,13:13,144:144,145:145,15:15,155:155,17:17,182:182,57:57,61:61,64:64,67:67,69:69,71:71,72:72,8:8,9:9}],71:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(a,b){var c=b.codec,d=null;try{if(c.match(/application\/mp4;\s*codecs="(stpp|wvtt).*"/i))throw new y.default("not really supported");d=a.addSourceBuffer(c)}catch(e){if(!b.isText&&c.indexOf('codecs="stpp')===-1&&c.indexOf('codecs="wvtt')===-1)throw e;d=(0,g.default)(t).getInstance(),d.setConfig({errHandler:(0,m.default)(t).getInstance(),adapter:(0,k.default)(t).getInstance(),dashManifestModel:z,mediaController:(0,i.default)(t).getInstance(),videoModel:(0,w.default)(t).getInstance(),streamController:(0,o.default)(t).getInstance(),textTracks:(0,q.default)(t).getInstance(),VTTParser:(0,s.default)(t).getInstance(),TTMLParser:(0,u.default)(t).getInstance()})}return d}function b(a,b){try{a.removeSourceBuffer(b)}catch(c){}}function c(a,b,c){var d,e,f=null,g=0,h=0,i=null,j=null,k=0,l=c||.15;try{f=a.buffered}catch(m){return null}if(null!==f&&void 0!==f){for(e=0,d=f.length;e=g&&bn,h=k?{start:a.start(n),end:a.end(n)}:null,c=m.start(n),e=m.end(n),!h)return l={start:c,end:e};if(f=h.start===c,g=h.end===e,!f||!g){if(f)l={start:h.end,end:e};else{if(!g)return l={start:c,end:e};l={start:c,end:h.start}}return i=a.length>n+1?{start:a.start(n+1),end:a.end(n+1)}:null,j=n+1=0&&c>b&&"ended"!==d.readyState&&a.remove(b,c),r(a,function(){v.trigger(C.default.SOURCEBUFFER_REMOVE_COMPLETED,{buffer:a,from:b,to:c})})})}catch(e){v.trigger(C.default.SOURCEBUFFER_REMOVE_COMPLETED,{buffer:a,from:b,to:c,error:new y.default(e.code,e.message,null)})}}function n(a,b){try{"open"===a.readyState?b.abort():b.setTextTrack&&"ended"===a.readyState&&b.abort()}catch(c){}}function p(a){a&&a.dashManifestModel&&(z=a.dashManifestModel)}function r(a,b){var c,d=50,e=function(){a.updating||(clearInterval(c),b())},f=function c(){a.updating||(a.removeEventListener("updateend",c,!1),b())};if(!a.updating)return void b();if("function"==typeof a.addEventListener)try{a.addEventListener("updateend",f,!1)}catch(g){c=setInterval(e,d)}else c=setInterval(e,d)}var t=this.context,v=(0,A.default)(t).getInstance(),x=void 0,z=void 0;return x={append:j,remove:l,abort:n,createSourceBuffer:a,removeSourceBuffer:b,getBufferRange:c,getAllRanges:d,getTotalBufferedTime:e,getBufferLength:f,getRangeDifference:h,setConfig:p}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(57),g=d(f),h=a(67),i=d(h),j=a(15),k=d(j),l=a(152),m=d(l),n=a(72),o=d(n),p=a(58),q=d(p),r=a(160),s=d(r),t=a(158),u=d(t),v=a(105),w=d(v),x=a(163),y=d(x),z=a(9),A=d(z),B=a(13),C=d(B),D=a(10),E=d(D),F=22;e.__dashjs_factory_name="SourceBufferController";var G=E.default.getSingletonFactory(e);G.QUOTA_EXCEEDED_ERROR_CODE=F,c.default=G,b.exports=c.default},{10:10,105:105,13:13,15:15,152:152,158:158,160:160,163:163,57:57,58:58,67:67,72:72,9:9}],72:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){ma=null,ka=[],wa=(0,u.default)(T).getInstance(),oa=!0,pa=!1,qa=!1,xa=!1,ya=!0,za=null,ra=!1,sa=!1}function b(a,b){oa=a,na=b,ja.initialize(),ha=(0,B.default)(T).getInstance(),Y=(0,k.default)(T).getInstance(),Y.setConfig({log:U,manifestModel:$,dashManifestModel:_}),Y.initialize(Z),ua=(0,s.default)(T).getInstance(),va=(0,g.default)(T).getInstance(),va.setConfig({streamController:W,timelineConverter:ja,metricsModel:ba,dashMetrics:ca,manifestModel:$,dashManifestModel:_,adapter:aa,videoModel:ua}),V.on(o.default.TIME_SYNCHRONIZATION_COMPLETED,D,this),V.on(o.default.PLAYBACK_SEEKING,d,this),V.on(o.default.PLAYBACK_TIME_UPDATED,c,this),V.on(o.default.PLAYBACK_ENDED,p,this),V.on(o.default.PLAYBACK_ERROR,J,this),V.on(o.default.PLAYBACK_STARTED,e,this),V.on(o.default.PLAYBACK_PAUSED,f,this),V.on(o.default.MANIFEST_UPDATED,E,this),V.on(o.default.STREAM_BUFFERING_COMPLETED,h,this)}function c(a){if(F()){var b=ua.getPlaybackQuality();b&&ba.addDroppedFrames("video",b)}va.isSeeking()||a.timeToEnd<=S&&p()}function d(a){var b=j(a.seekTime);b&&b!==la?(H(x.PlayListTrace.END_OF_PERIOD_STOP_REASON),t(la,b,a.seekTime)):H(x.PlayListTrace.USER_REQUEST_STOP_REASON),I(x.PlayList.SEEK_START_REASON)}function e(){ya?(ya=!1,I(x.PlayList.INITIAL_PLAYOUT_START_REASON)):xa&&(xa=!1,I(x.PlayList.RESUME_FROM_PAUSE_START_REASON))}function f(a){a.ended||(xa=!0,H(x.PlayListTrace.USER_REQUEST_STOP_REASON))}function h(){var a=L().isLast;ta&&a&&ea.signalEndOfStream(ta)}function j(a){var b=0,c=null,d=ka.length;d>0&&(b+=ka[0].getStartTime());for(var e=0;e>>0).toString(16).toUpperCase()+")"),U("Video Element Error: "+b),a.error&&U(a.error),ia.mediaSourceError(b),R()}}function K(){return oa}function L(){return la?la.getStreamInfo():null}function M(a){return la.getId()===a.id}function N(a){return ka.filter(function(b){return b.getId()===a})[0]}function O(a){Z.load(a)}function P(a){Y.setManifest(a)}function Q(a){a&&(a.capabilities&&(X=a.capabilities),a.manifestLoader&&(Z=a.manifestLoader),a.manifestModel&&($=a.manifestModel),a.dashManifestModel&&(_=a.dashManifestModel),a.protectionController&&(ma=a.protectionController),a.adapter&&(aa=a.adapter),a.metricsModel&&(ba=a.metricsModel),a.dashMetrics&&(ca=a.dashMetrics),a.liveEdgeFinder&&(da=a.liveEdgeFinder),a.mediaSourceController&&(ea=a.mediaSourceController),a.timeSyncController&&(fa=a.timeSyncController),a.baseURLController&&(ga=a.baseURLController),a.errHandler&&(ia=a.errHandler),a.timelineConverter&&(ja=a.timelineConverter))}function R(){fa.reset(),H(ra||sa?x.PlayListTrace.FAILURE_STOP_REASON:x.PlayListTrace.USER_REQUEST_STOP_REASON);for(var a=0,b=ka.length;a")+1,g=b.resolvedContent.substr(0,d)+e+b.resolvedContent.substr(d)+f,b.resolvedContent=G.xml_str2json(g)),x(c)&&l(c)}function l(a){var b,c,d=[];if(n(a),a.resolveType===s&&A.trigger(k.default.XLINK_READY,{manifest:F}),a.resolveType===r)switch(a.type){case t:for(b=0;b=0;f--)e=a[f],e.hasOwnProperty("xlink:href")&&e["xlink:href"]===w&&a.splice(f,1);for(f=0;f=0;e--){if(b=a.elements[e],c=b.type+"_asArray",!b.resolvedContent||y())delete b.originalContent["xlink:actuate"],delete b.originalContent["xlink:href"],h.push(b.originalContent);else if(b.resolvedContent)for(f=0;f0&&E.run(F)}function p(a,b,c,d,e,f){return{url:a,parentElement:b,type:c,index:d,resolveType:e,originalContent:f,resolvedContent:null,resolved:!1}}function x(a){var b,c;for(b=0;b=200&&d.status<300?b&&b():c&&c())};q.push(d);try{d.open("GET",a),d.onloadend=e,d.onerror=e,d.send()}catch(f){d.onerror()}}function b(b,c){Array.isArray(c)||(c=[c]),l&&o.isEnabled()&&c.forEach(function(c){var d=g.serialise(c);j&&"DVBErrors"!==b&&(d="metricname="+b+"&"+d),d=n+"?"+d,a(d,null,function(){l=!1})})}function c(a,b){var c;if(o=b,n=a["dvb:reportingUrl"],!n)throw new Error("required parameter missing (dvb:reportingUrl)");m||(c=a["dvb:probability"]||a["dvb:priority"]||0,c&&(1e3===c||c/1e3>=h.random())&&(l=!0),m=!0)}function d(){p||(q.forEach(function(a){return a.abort()}),q=[]),m=!1,l=!1,n=null,o=null}var e=void 0,f=this.context,g=(0,i.default)(f).getInstance(),h=(0,k.default)(f).getInstance(),j=!0,l=!1,m=!1,n=null,o=null,p=!0,q=[];return e={report:b,initialize:c,reset:d}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=a(93),i=d(h),j=a(94),k=d(j);e.__dashjs_factory_name="DVBReporting",c.default=g.default.getClassFactory(e),b.exports=c.default},{10:10,93:93,94:94}],90:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(a){var b=new g.default;if(r){for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);b.mpdurl||(b.mpdurl=r.originalUrl||r.url),b.terror||(b.terror=new Date),q.addDVBErrors(b)}}function c(a){a.error||(r=a.manifest)}function d(a){b({errorcode:g.default.BASE_URL_CHANGED,servicelocation:a.entry})}function e(){b({errorcode:g.default.BECAME_REPORTER})}function f(a){(0===a.responsecode||a.responsecode>=400||a.responsecode<100||a.responsecode>=600)&&b({errorcode:a.responsecode||g.default.CONNECTION_ERROR,url:a.url,terror:a.tresponse,servicelocation:a._serviceLocation})}function h(a){switch(a.metric){case"HttpList":f(a.value)}}function j(a){var c,d=a.error?a.error.code:0;switch(d){case MediaError.MEDIA_ERR_NETWORK:c=g.default.CONNECTION_ERROR;break;case MediaError.MEDIA_ERR_DECODE:c=g.default.CORRUPT_MEDIA_OTHER;break;default:return}b({errorcode:c})}function l(){p.on(i.default.MANIFEST_UPDATED,c,o),p.on(i.default.SERVICE_LOCATION_BLACKLIST_CHANGED,d,o),p.on(k.default.METRIC_ADDED,h,o),p.on(k.default.METRIC_UPDATED,h,o),p.on(k.default.PLAYBACK_ERROR,j,o),p.on(m.default.BECAME_REPORTING_PLAYER,e,o)}function n(){p.off(i.default.MANIFEST_UPDATED,c,o),p.off(i.default.SERVICE_LOCATION_BLACKLIST_CHANGED,d,o),p.off(k.default.METRIC_ADDED,h,o),p.off(k.default.METRIC_UPDATED,h,o),p.off(k.default.PLAYBACK_ERROR,j,o),p.off(m.default.BECAME_REPORTING_PLAYER,e,o)}var o=void 0,p=a.eventBus,q=a.metricsModel,r=void 0;return o={initialise:l,reset:n},l(),o}Object.defineProperty(c,"__esModule",{value:!0});var f=a(95),g=d(f),h=a(13),i=d(h),j=a(53),k=d(j),l=a(77),m=d(l),n=a(10),o=d(n);e.__dashjs_factory_name="DVBErrorsTranslator",c.default=o.default.getSingletonFactory(e),b.exports=c.default},{10:10,13:13,53:53,77:77,95:95}],91:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){return{reconstructFullMetricName:function(a,b,c){var d=a;return b&&(d+="("+b,c&&c.length&&(d+=","+c),d+=")"),d},validateN:function(a){if(!a)throw new Error("missing n");if(isNaN(a))throw new Error("n is NaN");if(a<0)throw new Error("n must be positive");return a}}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f);e.__dashjs_factory_name="HandlerHelpers",c.default=g.default.getSingletonFactory(e),b.exports=c.default},{10:10}],92:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(a,b,c){var d,f,g=e.getMpd(a),h=0;return b?h=g.availabilityStartTime.getTime()/1e3:(d=this.getRegularPeriods(a,g),d.length&&(h=d[0].start)),f=h,c&&c.hasOwnProperty("starttime")&&(f+=c.starttime),f}function c(a){var c=[];return a.Metrics_asArray&&a.Metrics_asArray.forEach(function(d){var f=new g.default,h=e.getIsDynamic(a);d.hasOwnProperty("metrics")&&(f.metrics=d.metrics,d.Range_asArray&&d.Range_asArray.forEach(function(c){var d=new i.default;d.starttime=b(a,h,c),c.hasOwnProperty("duration")?d.duration=c.duration:d.duration=e.getDuration(a),d._useWallClockTime=h,f.Range.push(d)}),d.Reporting_asArray&&(d.Reporting_asArray.forEach(function(a){var b=new k.default;if(a.hasOwnProperty("schemeIdUri")){b.schemeIdUri=a.schemeIdUri;for(var c in a)a.hasOwnProperty(c)&&(b[c]=a[c]);f.Reporting.push(b)}}),c.push(f)))}),c}var d=void 0,e=a.dashManifestModel;return d={getMetrics:c}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(96),g=d(f),h=a(97),i=d(h),j=a(98),k=d(j),l=a(10),m=d(l);e.__dashjs_factory_name="ManifestParsing",c.default=m.default.getSingletonFactory(e),b.exports=c.default},{10:10,96:96,97:97,98:98}],93:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(b){var c,d,e=[],f=[];for(c in b)if(b.hasOwnProperty(c)&&0!==c.indexOf("_")){if(d=b[c],void 0!==d&&null!==d||(d=""),Array.isArray(d)){if(!d.length)continue;f=[],d.forEach(function(b){var c="Object"!==Object.prototype.toString.call(b).slice(8,-1);f.push(c?b:a(b))}),d=f.map(encodeURIComponent).join(",")}else"string"==typeof d?d=encodeURIComponent(d):d instanceof Date?d=d.toISOString():"number"==typeof d&&(d=Math.round(d));e.push(c+"="+d)}return e.join("&")}return{serialise:a}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f);e.__dashjs_factory_name="MetricSerialiser",c.default=g.default.getSingletonFactory(e),b.exports=c.default},{10:10}],94:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){c&&(g||(g=new d(f)),c.getRandomValues(g),h=0)}function b(b,d){var f;return b||(b=0),d||(d=1),c?(h===g.length&&a(),f=g[h]/e,h+=1):f=Math.random(),f*(d-b)+b}var c=window.crypto||window.msCrypto,d=Uint32Array,e=Math.pow(2,8*d.BYTES_PER_ELEMENT)-1,f=10,g=void 0,h=void 0,i=void 0;return i={random:b},a(),i}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f);e.__dashjs_factory_name="RNG",c.default=g.default.getSingletonFactory(e),b.exports=c.default},{10:10}],95:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function a(){d(this,a),this.mpdurl=null,this.errorcode=null,this.terror=null,this.url=null,this.ipaddress=null,this.servicelocation=null};e.SSL_CONNECTION_FAILED_PREFIX="SSL",e.DNS_RESOLUTION_FAILED="C00",e.HOST_UNREACHABLE="C01",e.CONNECTION_REFUSED="C02",e.CONNECTION_ERROR="C03",e.CORRUPT_MEDIA_ISOBMFF="M00",e.CORRUPT_MEDIA_OTHER="M01",e.BASE_URL_CHANGED="F00",e.BECAME_REPORTER="S00",c.default=e,b.exports=c.default},{}],96:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function a(){d(this,a),this.metrics="",this.Range=[],this.Reporting=[]};c.default=e,b.exports=c.default},{}],97:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function a(){d(this,a),this.starttime=0,this.duration=1/0,this._useWallClockTime=!1};c.default=e,b.exports=c.default},{}],98:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var e=function a(){d(this,a),this.schemeIdUri="",this.value=""};c.default=e,b.exports=c.default},{}],99:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function f(){function a(){l=new n}function b(a,b,c){var d=p.getBaseURLsFromElement(c);a[b]?q.areSimpleEquivalent(d,a[b].data.baseUrls)||(a[b].data.baseUrls=d,a[b].data.selectedIdx=m):a[b]=new n(d)}function c(a){var c=p.getBaseURLsFromElement(a);q.areSimpleEquivalent(c,l.data.baseUrls)||(l.data.baseUrls=c,l.data.selectedIdx=m),a.Period_asArray&&a.Period_asArray.forEach(function(a,c){b(l.children,c,a),a.AdaptationSet_asArray&&a.AdaptationSet_asArray.forEach(function(a,d){b(l.children[c].children,d,a),a.Representation_asArray&&a.Representation_asArray.sort(p.getRepresentationSortFunction()).forEach(function(a,e){b(l.children[c].children[d].children,e,a)})})})}function d(a,b){var c=b||l;a(c.data),c.children&&c.children.forEach(function(b){return d(a,b)})}function e(a){d(function(b){isNaN(b.selectedIdx)||a===b.baseUrls[b.selectedIdx].serviceLocation&&(b.selectedIdx=m)})}function f(a){c(a)}function g(){l=new n}function i(a){var b=l,c=[b.data];return a.forEach(function(a){b=b.children[a],b&&c.push(b.data)}),c.filter(function(a){return a.baseUrls.length})}var k=void 0,l=void 0,o=this.context,p=(0,h.default)(o).getInstance(),q=(0,j.default)(o).getInstance();return k={reset:g,update:f,getForPath:i,invalidateSelectedIndexes:e},a(),k}Object.defineProperty(c,"__esModule",{value:!0});var g=a(22),h=d(g),i=a(156),j=d(i),k=a(10),l=d(k),m=NaN,n=function a(b,c){e(this,a),this.data={baseUrls:b||null,selectedIdx:c||m},this.children=[]};f.__dashjs_factory_name="BaseURLTreeModel",c.default=l.default.getClassFactory(f),b.exports=c.default},{10:10,156:156,22:22}],100:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(){D=null,G=null,E=[],F=[],A.on(i.default.LOADING_COMPLETED,w,C)}function c(a){G=a}function d(a){D=a}function e(){return D}function f(a){var b=function(a,b){return a.action===m.default.ACTION_COMPLETE&&a.action===b.action},c=function(a,b){return!isNaN(a.index)&&a.startTime===b.startTime&&a.adaptationIndex===b.adaptationIndex},d=function(a,b){return isNaN(a.index)&&isNaN(b.index)&&a.quality===b.quality},e=function(e){var f=!1;return e.some(function(e){if(c(a,e)||d(a,e)||b(a,e))return f=!0}),f};return e(E)}function h(a){var b=a.state instanceof Array?a.state:[a.state],c=[];return b.forEach(function(b){var d=u(b);c=c.concat(t(d,a))}),c}function j(a){E=E.filter(function(b){return isNaN(b.startTime)||b.startTime>=a})}function k(){G.abort(),F=[]}function l(a){switch(a.action){case m.default.ACTION_COMPLETE:E.push(a),v(a,q),A.trigger(i.default.STREAM_COMPLETED,{request:a,fragmentModel:this});break;case m.default.ACTION_DOWNLOAD:v(a,p),F.push(a),n(a);break;default:z("Unknown request action.")}}function n(a){A.trigger(i.default.FRAGMENT_LOADING_STARTED,{sender:C,request:a}),G.load(a)}function r(a,b,c){for(var d=a.length-1,e=d;e>=0;e--){var f=a[e],g=f.startTime,h=g+f.duration;if(c=void 0!==c?c:f.duration/2,!isNaN(g)&&!isNaN(h)&&b+c>=g&&b-c0&&d[d.length-1]==c?d[d.length-1]:(d.push(c),f(a,S.metricsList.DROPPED_FRAMES,c),c)}function F(a,b,c,d,e,g,h,i,j){var k=new w.default;return k.mediaType=a,k.t=b,k.type=c,k.startTime=d,k.availabilityStartTime=e,k.duration=g,k.quality=h,k.range=i,k.state=j,o(a).SchedulingInfo.push(k),f(a,S.metricsList.SCHEDULING_INFO,k),k}function H(a,b,c){var d=new A.default;d.loadingRequests=b,d.executedRequests=c,o(a).RequestsQueue=d,f(a,S.metricsList.REQUESTS_QUEUE,d)}function I(a,b,c,d,e,g,h,i,j,k){var l=new u.ManifestUpdate,m=o("stream");return l.mediaType=a,l.type=b,l.requestTime=c,l.fetchTime=d,l.availabilityStartTime=e,l.presentationStartTime=g,l.clientTimeOffset=h,l.currentTime=i,l.buffered=j,l.latency=k,m.ManifestUpdate.push(l),f(a,S.metricsList.MANIFEST_UPDATE,l),l}function J(a,b){if(a){for(var c in b)a[c]=b[c];e(a.mediaType,S.metricsList.MANIFEST_UPDATE,a)}}function K(a,b,c,d,f){if(a){var g=new u.ManifestUpdateStreamInfo;return g.id=b,g.index=c,g.start=d,g.duration=f,a.streamInfo.push(g),e(a.mediaType,S.metricsList.MANIFEST_UPDATE_STREAM_INFO,a),g}return null}function L(a,b,c,d,f,g,h,i){if(a){var j=new u.ManifestUpdateTrackInfo;return j.id=b,j.index=c,j.streamIndex=d,j.mediaType=f,j.startNumber=h,j.fragmentInfoType=i,j.presentationTimeOffset=g,a.trackInfo.push(j),e(a.mediaType,S.metricsList.MANIFEST_UPDATE_TRACK_INFO,a),j}return null}function M(a){var b="stream";return a.trace&&Array.isArray(a.trace)?a.trace.forEach(function(a){a.hasOwnProperty("subreplevel")&&!a.subreplevel&&delete a.subreplevel}):delete a.trace,o(b).PlayList.push(a),f(b,S.metricsList.PLAY_LIST,a),a}function N(a){var b="stream";return o(b).DVBErrors.push(a),f(b,S.metricsList.DVB_ERRORS,a),a}function O(a,b){var c=new G.default;return c._s=b,o(a).BolaState=[c],f(a,"BolaState",c),c}var P=this.context,Q=(0,y.default)(P).getInstance(),R=void 0,S=void 0,T=void 0;return R={metricsChanged:c,metricChanged:d,metricUpdated:e,metricAdded:f,clearCurrentMetricsForType:h,clearAllCurrentMetrics:k,getReadOnlyMetricsFor:m,getMetricsFor:o,addTcpConnection:q,addHttpRequest:v,addRepresentationSwitch:x,addBufferLevel:z,addBufferState:B,addDVRInfo:D,addDroppedFrames:E,addSchedulingInfo:F,addRequestsQueue:H,addManifestUpdate:I,updateManifestUpdateInfo:J,addManifestUpdateStreamInfo:K,addManifestUpdateRepresentationInfo:L,addPlayList:M,addDVBErrors:N,updateBolaState:O,setConfig:b},a(),R}Object.defineProperty(c,"__esModule",{value:!0});var f=a(169),g=d(f),h=a(186),i=d(h),j=a(180),k=a(183),l=d(k),m=a(176),n=d(m),o=a(177),p=d(o),q=a(178),r=d(q),s=a(179),t=d(s),u=a(181),v=a(185),w=d(v),x=a(9),y=d(x),z=a(184),A=d(z),B=a(13),C=d(B),D=a(10),E=d(D),F=a(175),G=d(F);e.__dashjs_factory_name="MetricsModel",c.default=E.default.getSingletonFactory(e),b.exports=c.default},{10:10,13:13,169:169,175:175,176:176,177:177,178:178,179:179,180:180,181:181,183:183,184:184,185:185,186:186,9:9}],104:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){h=new g.default,i=[],j=!1}function b(){return h}function c(){return i}function d(){return j}function e(a){function b(a,b,c,d){var e=d[0].split(/[=]/);return d.push({key:e[0],value:e[1]}),d.shift(),d}function c(a,b,c){return b>0&&(l&&0===i.length?i=c[b].split(/[&]/):m&&(e=c[b].split(/[&]/))),c}if(!a)return null;var d,e=[],f=new RegExp(/[?]/),g=new RegExp(/[#]/),k=new RegExp(/^(https:)?\/\//i),l=f.test(a),m=g.test(a);return j=k.test(a),d=a.split(/[?#]/).map(c),i.length>0&&(i=i.reduce(b,null)),e.length>0&&(e=e.reduce(b,null),e.forEach(function(a){h[a.key]=a.value})),a}var f=void 0,h=void 0,i=void 0,j=void 0;return f={initialize:a,parseURI:e,getURIFragmentData:b,getURIQueryData:c,isManifestHTTPS:d}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(174),g=d(f),h=a(10),i=d(h);e.__dashjs_factory_name="URIQueryAndFragmentModel",c.default=i.default.getSingletonFactory(e),b.exports=c.default},{10:10,174:174}],105:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){w=[]}function b(){t.playbackRate=x||1,t.removeEventListener("canplay",b)}function c(a){t&&(t.readyState<=2&&a>0?t.addEventListener("canplay",b):t.playbackRate=a)}function d(a){if(t.currentTime!=a)try{t.currentTime=a}catch(b){0===t.readyState&&b.code===b.INVALID_STATE_ERR&&setTimeout(function(){t.currentTime=a},400)}}function e(){return t}function f(a){t=a,t.preload="auto"}function g(a){a?t.src=a:(t.removeAttribute("src"),t.load())}function h(){return t.src}function i(){return v}function j(a){v=a}function k(){return u}function l(a){u=a,u.style.position="absolute",u.style.display="flex",u.style.overflow="hidden",u.style.pointerEvents="none",u.style.top=0,u.style.left=0}function m(a,b){q(a,b)}function n(){return w.length>0}function o(a){var b=void 0;null===a||t.seeking||w.indexOf(a)!==-1||(w.push(a),1===w.length&&(b=document.createEvent("Event"),b.initEvent("waiting",!0,!1),x=t.playbackRate,c(0),t.dispatchEvent(b)))}function p(a){var b=w.indexOf(a),d=void 0;null!==a&&(b!==-1&&w.splice(b,1),n()===!1&&0===t.playbackRate&&(c(x||1),t.paused||(d=document.createEvent("Event"),d.initEvent("playing",!0,!1),t.dispatchEvent(d))))}function q(a,b){b?o(a):p(a)}function r(){var a="webkitDroppedFrameCount"in t&&"webkitDecodedFrameCount"in t,b="getVideoPlaybackQuality"in t,c=null;return b?c=t.getVideoPlaybackQuality():a&&(c={droppedVideoFrames:t.webkitDroppedFrameCount,totalVideoFrames:t.webkitDroppedFrameCount+t.webkitDecodedFrameCount,creationTime:new Date}),c}var s=void 0,t=void 0,u=void 0,v=void 0,w=void 0,x=void 0;return s={initialize:a,setCurrentTime:d,setStallState:m,getElement:e,setElement:f,setSource:g,getSource:h,getVideoContainer:i,setVideoContainer:j,getTTMLRenderingDiv:k,setTTMLRenderingDiv:l,getPlaybackQuality:r}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f);e.__dashjs_factory_name="VideoModel",c.default=g.default.getSingletonFactory(e),b.exports=c.default},{10:10}],106:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}Object.defineProperty(c,"__esModule",{value:!0});var f=function(){function a(a,b){for(var c=0;c0&&(b+=4+16*c.getUint32(b)),b+=4,a.slice(b)}},{key:"getPSSHForKeySystem",value:function(b,c){var d=a.parsePSSHList(c);return d.hasOwnProperty(b.uuid.toLowerCase())?d[b.uuid.toLowerCase()]:null}},{key:"parseInitDataFromContentProtection",value:function(a){return"pssh"in a?h.default.decodeArray(a.pssh.__text).buffer:null}},{key:"parsePSSHList",value:function(a){if(null===a)return[];for(var b=new DataView(a),c=!1,d={},e=0;!c;){var f,g,h,i,j,k=e;if(e>=b.buffer.byteLength)break;if(f=b.getUint32(e),g=e+f,e+=4,1886614376===b.getUint32(e))if(e+=4,h=b.getUint8(e),0===h||1===h){e++,e+=3,i="";var l,m;for(l=0;l<4;l++)m=b.getUint8(e+l).toString(16),i+=1===m.length?"0"+m:m;for(e+=4,i+="-",l=0;l<2;l++)m=b.getUint8(e+l).toString(16),i+=1===m.length?"0"+m:m;for(e+=2,i+="-",l=0;l<2;l++)m=b.getUint8(e+l).toString(16),i+=1===m.length?"0"+m:m;for(e+=2,i+="-",l=0;l<2;l++)m=b.getUint8(e+l).toString(16),i+=1===m.length?"0"+m:m;for(e+=2,i+="-",l=0;l<6;l++)m=b.getUint8(e+l).toString(16),i+=1===m.length?"0"+m:m;e+=6,i=i.toLowerCase(),j=b.getUint32(e),e+=4,d[i]=b.buffer.slice(k,g),e=g}else e=g;else e=g}return d}}]),a}();c.default=i,b.exports=c.default},{1:1}],107:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(a){var c=null,d=(0,i.default)(e).getInstance();d.setConfig({log:a.log}),d.initialize();var f=b(a);return!c&&f&&(c=(0,g.default)(e).create({protectionModel:f,protectionKeyController:d,adapter:a.adapter,eventBus:a.eventBus,log:a.log}),a.capabilities.setEncryptedMediaSupported(!0)),c}function b(a){var b=a.log,d=a.eventBus,f=a.videoModel.getElement();return void 0!==f.onencrypted&&void 0!==f.mediaKeys&&void 0!==navigator.requestMediaKeySystemAccess&&"function"==typeof navigator.requestMediaKeySystemAccess?(b("EME detected on this user agent! (ProtectionModel_21Jan2015)"),(0,m.default)(e).create({log:b,eventBus:d})):c(f,u)?(b("EME detected on this user agent! (ProtectionModel_3Feb2014)"),(0,o.default)(e).create({log:b,eventBus:d,api:c(f,u)})):c(f,t)?(b("EME detected on this user agent! (ProtectionModel_01b)"),(0,q.default)(e).create({log:b,eventBus:d,api:c(f,t)})):(b("No supported version of EME detected on this user agent! - Attempts to play encrypted content will fail!"),null)}function c(a,b){for(var c=0;c0&&t(f,!0),I=!0}}function d(a){var b=g.default.getPSSHForKeySystem(L,a);if(b){for(var c=y.getAllInitData(),d=0;d0&&(b=I.shift(),J.push(b),b.sessionID=a.sessionId)):I.length>0&&(b=I.shift(),J.push(b),0!==I.length&&H.mediaKeyMessageError("Multiple key sessions were creates with a user-agent that does not support sessionIDs!! Unpredictable behavior ahead!")),b){var e=ArrayBuffer.isView(a.message)?a.message.buffer:a.message;b.keyMessage=e,A.trigger(s.default.INTERNAL_KEY_MESSAGE,{data:new m.default(b,e,a.defaultURL)})}else B("No session token found for key message")}}}}function x(a,b){if(b&&a){for(var c=a.length,d=0;d0&&(b=G.ksConfiguration.videoCapabilities[0]),null===b&&null!==G.ksConfiguration.audioCapabilities&&G.ksConfiguration.audioCapabilities.length>0&&(b=G.ksConfiguration.audioCapabilities[0]),null===b)throw new Error("Can not create sessions for unknown content types.");var c=b.contentType,d=F.createSession(c,new Uint8Array(a)),e=x(d,a);d.addEventListener(B.error,e),d.addEventListener(B.message,e),d.addEventListener(B.ready,e),d.addEventListener(B.close,e),H.push(e),A("DRM: Session created. SessionID = "+e.getSessionID()),z.trigger(s.default.KEY_SESSION_CREATED,{data:e})}function n(a,b){var c=a.session;J.isClearKey(E)?c.update(new Uint8Array(b.toJWK())):c.update(new Uint8Array(b))}function p(a){var b=a.session;b.removeEventListener(B.error,a),b.removeEventListener(B.message,a),b.removeEventListener(B.ready,a),b.removeEventListener(B.close,a);for(var c=0;c=1?b():(a=b.bind(this),D.addEventListener("loadedmetadata",a))}function x(a,b){return{session:a,initData:b,getSessionID:function(){return this.session.sessionId},getExpirationTime:function(){return NaN},getSessionType:function(){return"temporary"},handleEvent:function(a){switch(a.type){case B.error:var b="KeyError";z.trigger(s.default.KEY_ERROR,{data:new k.default(this,b)});break;case B.message:var c=ArrayBuffer.isView(a.message)?a.message.buffer:a.message;z.trigger(s.default.INTERNAL_KEY_MESSAGE,{data:new m.default(this,c,a.destinationURL)});break;case B.ready:A("DRM: Key added."),z.trigger(s.default.KEY_ADDED);break;case B.close:A("DRM: Session closed. SessionID = "+this.getSessionID()),z.trigger(s.default.KEY_SESSION_CLOSED,{data:this.getSessionID()})}}}}var y=this.context,z=a.eventBus,A=a.log,B=a.api,C=void 0,D=void 0,E=void 0,F=void 0,G=void 0,H=void 0,I=void 0,J=void 0;return C={getAllInitData:e,requestKeySystemAccess:f,getKeySystem:d,selectKeySystem:h,setMediaElement:j,createKeySession:l,updateKeySession:n,closeKeySession:p,setServerCertificate:r,loadKeySession:t,removeKeySession:u,reset:c},b(),C}Object.defineProperty(c,"__esModule",{value:!0});var f=a(110),g=d(f),h=a(128),i=d(h),j=a(122),k=d(j),l=a(123),m=d(l),n=a(126),o=d(n),p=a(125),q=d(p),r=a(13),s=d(r),t=a(10),u=d(t);e.__dashjs_factory_name="ProtectionModel_3Feb2014",c.default=u.default.getClassFactory(e),b.exports=c.default},{10:10,110:110,122:122,123:123,125:125,126:126,128:128,13:13}],117:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(a,b){var c=JSON.parse(String.fromCharCode.apply(null,new Uint8Array(b)));a+="/?";for(var d=0;dh){var i=e.shift();d[i.idx].drops-=i.drop,d[i.idx].dropSize-=i.dropSize,d[i.idx].noDrops-=i.noDrop}}function b(){return d}function c(){d=[],e=[]}var d=[],e=[];return{push:a,getSwitchRequests:b,reset:c}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=8;e.__dashjs_factory_name="SwitchRequestHistory";var i=g.default.getClassFactory(e);c.default=i,b.exports=c.default},{10:10}],134:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){l=[],n=[];var a=(0,w.default)(h).getInstance(),b=(0,y.default)(h).getInstance(),c=(0,u.default)(h).getInstance();c.getBufferOccupancyABREnabled()?(l.push((0,q.default)(h).create({metricsModel:a,dashMetrics:(0,y.default)(h).getInstance()})),n.push((0,s.default)(h).create({metricsModel:a,dashMetrics:(0,y.default)(h).getInstance()}))):(l.push((0,g.default)(h).create({metricsModel:a,dashMetrics:b})),l.push((0,i.default)(h).create({metricsModel:a})),l.push((0,o.default)(h).create()),l.push((0,m.default)(h).create()),n.push((0,k.default)(h).create()))}function b(a){switch(a){case D:return l;case E:return n;default:return null}}function c(a){return a.filter(function(a){return a.value>C.default.NO_CHANGE})}function d(a){if(0!==a.length)return a.reduce(function(a,b){return a.valuem)return k;var w=p[f][i.index];if(null===w||null===i.firstByteDate||r.hasOwnProperty(w.id))return k;if(void 0===w.firstByteTime&&(s[f]=[],w.firstByteTime=i.firstByteDate.getTime(),w.segmentDuration=i.duration,w.bytesTotal=i.bytesTotal,w.id=i.index),w.bytesLoaded=i.bytesLoaded,w.elapsedTime=(new Date).getTime()-w.firstByteTime,w.bytesLoaded>0&&w.elapsedTime>0&&c(f,Math.round(8*w.bytesLoaded/w.elapsedTime)),s[f].length>=l&&w.elapsedTime>j&&w.bytesLoadedC&&(k.value=B,k.reason.throughput=w.measuredBandwidthInKbps,k.reason.fragmentID=w.id,r[w.id]=w,o("AbandonRequestsRule ( ",f,"frag id",w.id,") is asking to abandon and switch to quality to ",B," measured bandwidth was",w.measuredBandwidthInKbps),delete p[f][w.id])}}else w.bytesLoaded===w.bytesTotal&&delete p[f][w.id]}return k}function f(){a()}var h=1.8,j=500,l=5,n=this.context,o=(0,q.default)(n).getInstance().log,p=void 0,r=void 0,s=void 0,t=void 0,u=void 0,v=void 0,w={shouldAbandon:d,reset:f};return a(),w}Object.defineProperty(c,"__esModule",{value:!0});var f=a(132),g=d(f),h=a(102),i=d(h),j=a(17),k=d(j),l=a(103),m=d(l),n=a(10),o=d(n),p=a(8),q=d(p);e.__dashjs_factory_name="AbandonRequestsRule",c.default=o.default.getClassFactory(e),b.exports=c.default},{10:10,102:102,103:103,132:132,17:17,8:8}],136:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(){s={},t=(0,i.default)(l).getInstance()}function c(a,b,c){s[a]={index:b,quality:c}}function d(a,b,c){var d=s[a];return!d||(b!==d.index||ce[f]&&(f=b)})):(e=c(d),f=e.length-1),0===f)return null;var g=1-e[0]+(e[f]-e[0])/(b/a-1),h=a/(e[0]+g-1);return{utilities:e,gp:g,Vp:h}}function f(a){var b={},c=a.getMediaInfo(),e=a.getStreamProcessor(),f=a.getStreamInfo(),g=a.getTrackInfo(),h=e.isDynamic(),i=f.manifestInfo.duration,j=g.fragmentDuration,k=c.bitrateList.map(function(a){return a.bandwidth}),l=d(A,B,k,null);if(null===l)return b.state=w,b;if(b.state=x,b.bitrates=k,b.utilities=l.utilities,b.Vp=l.Vp,b.gp=l.gp,b.isDynamic=h,b.movieDuration=i,b.fragmentDuration=j,b.bandwidthSafetyFactor=S.getBandwidthSafetyFactor(),b.rebufferSafetyFactor=C,b.bufferTarget=S.getStableBufferTime(),b.lastQuality=0,b.placeholderBuffer=0,b.throughputCount=h?G:H,z){for(var m="",n=0;n0){var r=l.utilities[n-1],s=k[n-1];q=l.Vp*((r*p-o*s)/(p-s)+l.gp)}var t=l.Vp*(o+l.gp);m+="\n"+n+":"+(1e-6*k[n]).toFixed(3)+"Mbps "+q.toFixed(3)+"/"+t.toFixed(3)}J("BolaDebug "+c.type+" bitrates"+m)}return b}function h(a,b){for(var c=a.bitrates.length,d=NaN,e=NaN,f=0;f=e)&&(e=g,d=f)}return d}function i(a,b){for(var c=K.getHttpRequests(a),d=[],e=c.length-1;e>=0&&d.lengthb||(c=d,!1)}),c}function o(a,b){var c=Date.now(),d=O[b],e=Q[b],f=NaN;if(O[b]=c,Q[b]=!1,!e){var g=i(a,1);g.length>0&&(f=g[0]._tfinish.getTime(),f>c&&(f=c))}var h=0;return h=e||d>f?c-d:c-f,isNaN(h)||h<=0?0:.001*h}function q(){z&&J("BolaDebug BUFFER_EMPTY"),R.forEach(function(a){var b=L.getReadOnlyMetricsFor(a);if(0!==b.BolaState.length){var c=b.BolaState[0]._s;c.state===y&&(c.placeholderBuffer=0,L.updateBolaState(a,c))}})}function s(a){z&&J("BolaDebug PLAYBACK_SEEKING "+a.seekTime.toFixed(3)),R.forEach(function(a){var b=L.getReadOnlyMetricsFor(a);if(0!==b.BolaState.length){var c=b.BolaState[0]._s;c.state!==w&&(c.state=x),L.updateBolaState(a,c)}}),P={},Q={}}function u(){}function D(a){if(a&&a.chunk&&a.chunk.mediaInfo){var b=a.chunk.mediaInfo.type,c=a.chunk.start;void 0===b||isNaN(c)||(c<=P[b]?Q[b]=!0:(Q[b]=!1,P[b]=c))}}function E(a){var b=a.getStreamProcessor();b.getScheduleController().setTimeToLoadDelay(0);var c=(0,g.default)(I).create(g.default.NO_CHANGE,{name:e.__dashjs_factory_name}),d=a.getMediaInfo(),i=d.type,k=L.getReadOnlyMetricsFor(i);if(0===k.BolaState.length){z&&J("BolaDebug "+i+"\nBolaDebug "+i+" BolaRule for state=- fragmentStart="+U.getIndexHandlerTime(a.getStreamProcessor()).toFixed(3));var m=f(a);L.updateBolaState(i,m);var n=0;if(m.state!==w){R.push(i);var p=j(k,m.throughputCount,i);if(0===p)return z&&J("BolaDebug "+i+" BolaRule quality unchanged for INITIALIZE"),c;n=l(m,p*m.bandwidthSafetyFactor),m.lastQuality=n,c.value=n,c.reason.state=m.state,c.reason.throughput=p}return z&&J("BolaDebug "+i+" BolaRule quality "+n+" for INITIALIZE"),c}var q=k.BolaState[0]._s;if(q.state===w)return z&&J("BolaDebug "+i+" BolaRule quality 0 for ONE_BITRATE"),c;var r=q.bitrates,s=q.utilities;z&&J("BolaDebug "+i+"\nBolaDebug "+i+" EXECUTE BolaRule for state="+q.state+" fragmentStart="+U.getIndexHandlerTime(a.getStreamProcessor()).toFixed(3));var t=K.getCurrentBufferLevel(k)?K.getCurrentBufferLevel(k):0,u=j(k,q.throughputCount,i);t<=.1&&(q.placeholderBuffer=0);var v=o(k,i);v>0&&(q.placeholderBuffer+=v),q.placeholderBuffer<0&&(q.placeholderBuffer=0);var A=t+q.placeholderBuffer,B=h(q,A);if(z&&J("BolaDebug "+i+" BolaRule bufferLevel="+t.toFixed(3)+"(+"+q.placeholderBuffer.toFixed(3)+"="+A.toFixed(3)+") recentThroughput="+(1e-6*u).toFixed(3)+" tentativeQuality="+B),q.state===x){var n=l(q,u*q.bandwidthSafetyFactor);if(t>q.fragmentDuration/C){q.state=y;for(var D=0,E=0;ED&&(D=F)}D>t&&(q.placeholderBuffer=D-t)}return z&&J("BolaDebug "+i+" BolaRule quality "+n+" for STARTUP"),q.lastQuality=n,L.updateBolaState(i,q),c.value=n,c.reason.state=x,c.reason.throughput=u,c}if(B>q.lastQuality){var n=l(q,u);B>n&&(n0)for(var G=C*u*t/q.fragmentDuration;B>0&&r[B]>G;)--B;var H=0,M=q.Vp*(s[B]+q.gp);return H=A-M,H>0&&(H>q.placeholderBuffer?(H-=q.placeholderBuffer,q.placeholderBuffer=0):(q.placeholderBuffer-=H,H=0)),H>0?B===r.length-1?H=0:b.getScheduleController().setTimeToLoadDelay(1e3*H):H=0,q.lastQuality=B,L.updateBolaState(i,q),c.value=B,c.reason.state=q.state,c.reason.throughput=u,c.reason.bufferLevel=t,z&&J("BolaDebug "+i+" BolaRule quality "+B+" delay="+H.toFixed(3)+" for STEADY"),c}function F(){M.off(t.default.BUFFER_EMPTY,q,N),M.off(t.default.PLAYBACK_SEEKING,s,N),M.off(t.default.PERIOD_SWITCH_STARTED,u,N),M.off(t.default.MEDIA_FRAGMENT_LOADED,D,N),b()}var G=2,H=3,I=this.context,J=(0,v.default)(I).getInstance().log,K=a.dashMetrics,L=a.metricsModel,M=(0,r.default)(I).getInstance(),N=void 0,O=void 0,P=void 0,Q=void 0,R=void 0,S=void 0,T=void 0,U=void 0;return N={getMaxIndex:E,reset:F},b(),N}Object.defineProperty(c,"__esModule",{value:!0});var f=a(132),g=d(f),h=a(10),i=d(h),j=a(102),k=d(j),l=a(69),m=d(l),n=a(180),o=a(15),p=d(o),q=a(9),r=d(q),s=a(13),t=d(s),u=a(8),v=d(u),w=0,x=1,y=2,z=!1,A=10,B=30,C=.5;e.__dashjs_factory_name="BolaRule";var D=i.default.getClassFactory(e);D.BOLA_STATE_ONE_BITRATE=w,D.BOLA_STATE_STARTUP=x,D.BOLA_STATE_STEADY=y,D.BOLA_DEBUG=z,c.default=D,b.exports=c.default},{10:10,102:102,13:13,132:132,15:15,180:180,69:69,8:8,9:9}],138:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(a){var f=a.getDroppedFramesHistory();if(f){for(var g=f.getFrameHistory(),h=0,j=0,k=i.default.NO_CHANGE,l=1;le&&h/j>d)){k=l-1,c("DroppedFramesRule, index: "+k+" Dropped Frames: "+h+" Total Frames: "+j);break}return(0,i.default)(b).create(k,{droppedFrames:h})}return(0,i.default)(b).create()}var b=this.context,c=(0,k.default)(b).getInstance().log,d=.15,e=375;return{getMaxIndex:a}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=a(132),i=d(h),j=a(8),k=d(j);e.__dashjs_factory_name="DroppedFramesRule";var l=g.default.getClassFactory(e);c.default=l,b.exports=c.default},{10:10,132:132,8:8}],139:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(){p={},r=0,s=1e3,l.on(k.default.PLAYBACK_SEEKING,e,n)}function c(a){var b=(new Date).getTime(),c=a.getMediaInfo().type,e=m.getReadOnlyMetricsFor(c),f=e.BufferState.length>0?e.BufferState[e.BufferState.length-1]:null,i=(0,q.default)(h).create();return b-r=e&&h/i>d)){l.value=m>0?m-1:0,l.reason={index:l.value,drops:h,noDrops:i,dropSize:j},c("Switch history rule index: "+l.value+" samples: "+(h+i)+" drops: "+h);break}return l}var b=this.context,c=(0,i.default)(b).getInstance().log,d=.075,e=6;return{getMaxIndex:a}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=a(8),i=d(h),j=a(132),k=d(j);e.__dashjs_factory_name="SwitchRequest";var l=g.default.getClassFactory(e);c.default=l,b.exports=c.default},{10:10,132:132,8:8}],141:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(){D=[],E=[],F=(0,k.default)(z).getInstance()}function c(a,b){D[a]=D[a]||[],D[a].push(b)}function d(a,b){if(E[a]||(E[a]=[]),E[a].push(b),E[a].length>t)return E[a].shift()}function e(a){var b=void 0;return E[a]&&E[a].length>0&&(b=E[a].reduce(function(a,b){return a+b})/E[a].length),b}function f(a,b){var c=Math.min(D[a].length,b?q:s),d=D[a].slice(c*-1,D[a].length);return d.length>1&&d.reduce(function(a,b){return(a*y<=b||a>=b*x)&&c++,b}),c=Math.min(D[a].length,c),D[a].slice(c*-1,D[a].length)}function h(a,b){var c=f(a,b),d=0;if(c.length>0){var e=c.reduce(function(a,b){return a+b},0);d=e/c.length}return D[a].length>=o&&D[a].shift(),d/1e3*F.getBandwidthSafetyFactor()}function j(a,b,c){var d=!1;if(a0?k.BufferState[k.BufferState.length-1]:null,s=a.hasRichBuffer(),t=(0,r.default)(z).create();if(!k||!p||p.type!==l.HTTPRequest.MEDIA_SEGMENT_TYPE||!q||s)return t;var u=void 0,v=void 0;if(p.trace&&p.trace.length){v=p.tresponse.getTime()-p.trequest.getTime()||1,u=p._tfinish.getTime()-p.tresponse.getTime()||1;var w=p.trace.reduce(function(a,b){return a+b.b[0]},0),x=Math.round(8*w/(u/1e3)),y=void 0,F=void 0;j(v,u,f)?D[f]&&E[f]?(y=h(f,o),F=e(f)):(y=x/1e3,F=v):(c(f,x),y=h(f,o),d(f,v),F=e(f,o)),n.setAverageThroughput(f,y),n.getAbandonmentStateFor(f)!==i.default.ABANDON_LOAD&&(q.state===g.default.BUFFER_LOADED||o)&&(t.value=n.getQualityForBitrate(b,y,F),m.getScheduleController().setTimeToLoadDelay(0),A("ThroughputRule requesting switch to index: ",t.value,"type: ",f,"Average throughput",Math.round(y),"kbps"),t.reason={throughput:y,latency:F})}return t}function n(){b()}var o=20,q=3,s=4,t=s,u=50,v=5,w=50,x=1.3,y=1.3,z=this.context,A=(0,p.default)(z).getInstance().log,B=a.dashMetrics,C=a.metricsModel,D=void 0,E=void 0,F=void 0,G={getMaxIndex:m,reset:n};return b(),G}Object.defineProperty(c,"__esModule",{value:!0});var f=a(64),g=d(f),h=a(61),i=d(h),j=a(102),k=d(j),l=a(180),m=a(10),n=d(m),o=a(8),p=d(o),q=a(132),r=d(q);e.__dashjs_factory_name="ThroughputRule",c.default=n.default.getClassFactory(e),b.exports=c.default},{10:10,102:102,132:132,180:180,61:61,64:64,8:8}],142:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(a){var b,c=0;return a&&a.some(function(a,b){return c=b,!d.contains(a.serviceLocation)})&&(b=a[c]),b}var c=void 0,d=a.blacklistController;return c={select:b}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f);e.__dashjs_factory_name="BasicSelector",c.default=g.default.getClassFactory(e),b.exports=c.default},{10:10}],143:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(a){var b=[],c=function(a){return!b.length||!a.dvb_priority||b.indexOf(a.dvb_priority)===-1},d=function(a){return!f.contains(a.serviceLocation)||(a.dvb_priority&&b.push(a.dvb_priority),!1)};return a.filter(d).filter(c)}function c(a){var b,c,d=function(a,b){var c=a.dvb_priority-b.dvb_priority;return isNaN(c)?0:c},e=function(a,b,c){return!b||c[0].dvb_priority&&a.dvb_priority&&c[0].dvb_priority===a.dvb_priority},f=0,g=[],h=0;if(c=a.sort(d).filter(e),c.length)return c.length>1&&(c.forEach(function(a){f+=a.dvb_weight,g.push(f)}),b=Math.floor(Math.random()*(f-1)),g.every(function(a,c){return h=c,!(b=k.getLongFormContentDurationThreshold();d=m?k.getBufferTimeAtTopQualityLongForm():k.getBufferTimeAtTopQuality()}else d=k.getStableBufferTime()}return d}var e=this.context,f=a.dashMetrics,h=a.metricsModel,j=a.textSourceBuffer,k=void 0,l=void 0,m={execute:c,getBufferTarget:d};return b(),m}Object.defineProperty(c,"__esModule",{value:!0});var f=a(102),g=d(f),h=a(69),i=d(h),j=a(10),k=d(j);e.__dashjs_factory_name="BufferLevelRule",c.default=k.default.getClassFactory(e),b.exports=c.default},{10:10,102:102,69:69}],145:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(a,b){var c=a.getCurrentRepresentationInfo(),g=c.mediaInfo,i=g.type,j=a.getScheduleController(),k=j.getSeekTarget(),l=!isNaN(k),m=a.getBuffer(),n=l?k:e.getIndexHandlerTime(a);if(isNaN(n)||"fragmentedText"===i&&h.getAllTracksAreDisabled())return null;if(l&&j.setSeekTarget(NaN),m){var o=f.getBufferRange(a.getBuffer(),n);null!==o&&(d("Prior to making a request for time, NextFragmentRequestRule is aligning index handler's currentTime with bufferedRange.end.",n," was changed to ",o.end),n=o.end)}var p=void 0;return b?(n=b.startTime+b.duration/2,p=e.getFragmentRequestForTime(a,c,n,{timeThreshold:0,ignoreIsFinished:!0})):(p=e.getFragmentRequestForTime(a,c,n,{keepIdx:!l}),p&&a.getFragmentModel().isFragmentLoaded(p)&&(p=e.getNextFragmentRequest(a,c)),p&&(e.setIndexHandlerTime(a,p.startTime+p.duration),p.delayLoadingTime=(new Date).getTime()+j.getTimeToLoadDelay(),j.setTimeToLoadDelay(0))),p}var c=this.context,d=(0,g.default)(c).getInstance().log,e=a.adapter,f=a.sourceBufferController,h=a.textSourceBuffer,i={execute:b};return i}Object.defineProperty(c,"__esModule",{value:!0});var f=a(8),g=d(f),h=a(10),i=d(h);e.__dashjs_factory_name="NextFragmentRequestRule",c.default=i.default.getClassFactory(e),b.exports=c.default},{10:10,8:8}],146:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){n=(0,m.default)(f).create({updateEventName:i.default.SERVICE_LOCATION_BLACKLIST_CHANGED,loadFailedEventName:i.default.FRAGMENT_LOADING_COMPLETED}),p=(0,q.default)(f).create({blacklistController:n}),r=(0,o.default)(f).create({blacklistController:n}),s=p}function b(a){a.selector&&(s=a.selector)}function c(a){s=j.getIsDVB(a)?r:p}function d(a){var b=a.baseUrls,c=a.selectedIdx;if(!isNaN(c))return b[c];var d=s.select(b);return d?(a.selectedIdx=b.indexOf(d),d):void h.trigger(i.default.URL_RESOLUTION_FAILED,{error:new Error(t,u)})}function e(){n.reset()}var f=this.context,h=(0,g.default)(f).getInstance(),j=(0,k.default)(f).getInstance(),l=void 0,n=void 0,p=void 0,r=void 0,s=void 0;return l={chooseSelectorFromManifest:c,select:d,reset:e, -setConfig:b},a(),l}Object.defineProperty(c,"__esModule",{value:!0});var f=a(9),g=d(f),h=a(13),i=d(h),j=a(22),k=d(j),l=a(63),m=d(l),n=a(143),o=d(n),p=a(142),q=d(p),r=a(10),s=d(r),t=1,u="Failed to resolve a valid URL";e.__dashjs_factory_name="BaseURLSelector";var v=s.default.getClassFactory(e);v.URL_RESOLUTION_FAILED_GENERIC_ERROR_CODE=t,v.URL_RESOLUTION_FAILED_GENERIC_ERROR_MESSAGE=u,c.default=v,b.exports=c.default},{10:10,13:13,142:142,143:143,22:22,63:63,9:9}],147:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(a){if(!a)return null;void 0===a.fileStart&&(a.fileStart=0);var b=k.default.parseBuffer(a),d=(0,g.default)(c).create();return d.setData(b),d}var b=void 0,c=this.context;return b={parse:a}}Object.defineProperty(c,"__esModule",{value:!0});var f=a(154),g=d(f),h=a(10),i=d(h),j=a(6),k=d(j);e.__dashjs_factory_name="BoxParser",c.default=i.default.getSingletonFactory(e),b.exports=c.default},{10:10,154:154,6:6}],148:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){g=!1}function b(){var a="WebKitMediaSource"in window,b="MediaSource"in window;return a||b}function c(){return g}function d(a){g=a}function e(a,b){var c=a.canPlayType(b);return"probably"===c||"maybe"===c}var f=void 0,g=void 0;return f={supportsMediaSource:b,supportsEncryptedMedia:c,supportsCodec:e,setEncryptedMediaSupported:d},a(),f}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f);e.__dashjs_factory_name="Capabilities",c.default=g.default.getSingletonFactory(e),b.exports=c.default},{10:10}],149:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(a,b){var c=0;for(c=0;cthis.customTimeRangeArray[c].start;c++);for(this.customTimeRangeArray.splice(c,0,{start:a,end:b}),c=0;c=this.customTimeRangeArray[c].end)this.customTimeRangeArray.splice(c,1),c--;else{if(a>this.customTimeRangeArray[c].start&&bthis.customTimeRangeArray[c].start&&athis.customTimeRangeArray[c].start&&b=u.getLastMediaSettingsCachingInfo().ttl||!1,f=c.settings;return d&&(localStorage.removeItem(b),f=null),f}function g(a){var b=NaN;if(e(o,"LastBitrate")){var c=m.replace(/\?/,a),d=JSON.parse(localStorage.getItem(c))||{},f=(new Date).getTime()-parseInt(d.timestamp,10)>=u.getLastBitrateCachingInfo().ttl||!1,g=parseInt(d.bitrate,10);isNaN(g)||f?f&&localStorage.removeItem(c):(b=g,r("Last saved bitrate for "+a+" was "+g))}return b}function h(a,b){if(e(o,"LastMediaSettings")){var c=n.replace(/\?/,a);try{localStorage.setItem(c,JSON.stringify({settings:b,timestamp:d()}))}catch(f){r(f.message)}}}function j(a,b){if(e(o,"LastBitrate")&&b){var c=m.replace(/\?/,a);try{localStorage.setItem(c,JSON.stringify({bitrate:b/1e3,timestamp:d()}))}catch(f){r(f.message)}}}var q=this.context,r=(0,k.default)(q).getInstance().log,s=void 0,t=void 0,u=void 0;return s={getSavedBitrateSettings:g,setSavedBitrateSettings:j,getSavedMediaSettings:f,setSavedMediaSettings:h,isSupported:a},c(),s}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=a(102),i=d(h),j=a(8),k=d(j),l=[{oldKey:"dashjs_vbitrate",newKey:"dashjs_video_bitrate"},{oldKey:"dashjs_abitrate",newKey:"dashjs_audio_bitrate"},{oldKey:"dashjs_vsettings",newKey:"dashjs_video_settings"},{oldKey:"dashjs_asettings",newKey:"dashjs_audio_settings"}],m="dashjs_?_bitrate",n="dashjs_?_settings",o="localStorage",p="sessionStorage";e.__dashjs_factory_name="DOMStorage";var q=g.default.getSingletonFactory(e);c.default=q,b.exports=c.default},{10:10,102:102,8:8}],151:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(a){function b(){return o}function c(a){o=a}function d(a,b){var c=!0,d=0,e=void 0,f=void 0;if(void 0===b&&(b=!1),a.tag>16777215?(n.getUint32(o)!==a.tag&&(c=!1),d=4):a.tag>65535?(e=n.getUint16(o),f=n.getUint8(o+2),256*e+f!==a.tag&&(c=!1),d=3):a.tag>255?(n.getUint16(o)!==a.tag&&(c=!1),d=2):(n.getUint8(o)!==a.tag&&(c=!1),d=1),!c&&a.required&&!b)throw new i.default("required tag not found");return c&&(o+=d),c}function e(a,b){var c=d(a,b);return c&&h(),c}function f(a){var b=void 0;return d(a),b=h(),m[a.parse](b)}function g(a,b){var c=d(a,b),e=void 0;return c&&(e=h(),o+=e),c}function h(a){var b=1,c=128,d=8,e=-1,f=0,g=n.getUint8(o),h=void 0;for(h=0;h>=1}for(h=0;hb&&(a=b),a}function g(a,b,c){var d=o(a.begin),g=o(a.end);return d=e(d,b),g=f(g,c),"undefined"!=typeof b&&"undefined"!=typeof c&&(gc)?(N("TTML: Cue "+d+"-"+g+" outside interval "+b+"-"+c),null):[d,g]}function h(a,c){var d=!0;if(a.hasOwnProperty("span")){var e=b(a.span);null!==e&&(d=e[0]c[0])}return d}function j(a,e,f,i){var j=void 0,k=void 0,l=void 0,m=void 0,n=void 0,o=void 0,r="";if(Q=ea.xml_str2json(a),!Q)throw new Error("TTML document could not be parsed");if(da.getTTMLRenderingDiv()&&(n="html"),j=Q.tt,!j)throw new Error("TTML document lacks tt element");var s=p(j,"http://www.w3.org/ns/ttml");if(s&&q(j,s),m=j["tts:extent"],k=j.head,!k)throw new Error("TTML document lacks head element");k.layout&&(S=k.layout.region_asArray),k.styling&&(R=k.styling.style_asArray);var t={};if(i)for(o=0;o0)return W;throw new Error(r)}function n(){P=/^([0-9][0-9]+):([0-5][0-9]):([0-5][0-9])|(60)(\.([0-9])+)?$/,T={},U={},V={},W={top:"auto;",left:"auto;",width:"90%;",height:"10%;","align-items":"flex-start;",overflow:"visible;","-ms-writing-mode":"lr-tb, horizontal-tb;","-webkit-writing-mode":"horizontal-tb;","-moz-writing-mode":"horizontal-tb;","writing-mode":"horizontal-tb;"},X={color:"rgb(255,255,255);",direction:"ltr;","font-family":"monospace, sans-serif;","font-style":"normal;","line-height":"normal;","font-weight":"normal;","text-align":"start;","justify-content":"flex-start;","text-decoration":"none;","unicode-bidi":"normal;","white-space":"normal;",width:"100%;"},Y={monospace:"font-family: monospace;",sansSerif:"font-family: sans-serif;",serif:"font-family: serif;",monospaceSansSerif:"font-family: monospace, sans-serif;",monospaceSerif:"font-family: monospace, serif;",proportionalSansSerif:"font-family: Arial;",proportionalSerif:"font-family: Times New Roman;",default:"font-family: monospace, sans-serif;"},Z={right:["justify-content: flex-end;","text-align: right;"],start:["justify-content: flex-start;","text-align: start;"],center:["justify-content: center;","text-align: center;"],end:["justify-content: flex-end;","text-align: end;"],left:["justify-content: flex-start;","text-align: left;"]},$={start:"text-align: start;",center:"text-align: center;",end:"text-align: end;",auto:""},_={wrap:"white-space: normal;",noWrap:"white-space: nowrap;"},aa={normal:"unicode-bidi: normal;",embed:"unicode-bidi: embed;",bidiOverride:"unicode-bidi: bidi-override;"},ba={before:"align-items: flex-start;",center:"align-items: center;",after:"align-items: flex-end;"},ca={lrtb:"-webkit-writing-mode: horizontal-tb;writing-mode: horizontal-tb;",rltb:"-webkit-writing-mode: horizontal-tb;writing-mode: horizontal-tb;direction: rtl;unicode-bidi: bidi-override;",tbrl:"-webkit-writing-mode: vertical-rl;writing-mode: vertical-rl;-webkit-text-orientation: upright;text-orientation: upright;",tblr:"-webkit-writing-mode: vertical-lr;writing-mode: vertical-lr;-webkit-text-orientation: upright;text-orientation: upright;",lr:"-webkit-writing-mode: horizontal-tb;writing-mode: horizontal-tb;",rl:"-webkit-writing-mode: horizontal-tb;writing-mode: horizontal-tb;direction: rtl;",tb:"-webkit-writing-mode: vertical-rl;writing-mode: vertical-rl;-webkit-text-orientation: upright;text-orientation: upright;"},ea=new i.default({escapeMode:!1,attributePrefix:"",arrayAccessForm:"property",emptyNodeForm:"object",stripWhitespaces:!1,enableToStringFunc:!1,matchers:[]})}function o(a){var b,c,d,e=P.test(a);if(!e)return NaN;if(b=a.split(":"),c=parseFloat(b[0])*l+parseFloat(b[1])*m+parseFloat(b[2]),b[3]){if(d=Q.tt.frameRate,!d||isNaN(d))return NaN;c+=parseFloat(b[3])/d}return c}function p(a,b){var c=Object.keys(a).filter(function(c){return("xmlns"===c.split(":")[0]||"xmlns"===c.split(":")[1])&&a[c]===b}).map(function(a){return a.split(":")[2]||a.split(":")[1]});return 1!=c.length?null:c[0]}function q(a,b){for(var c in a)if(a.hasOwnProperty(c)){if(("object"==typeof a[c]||a[c]instanceof Object)&&!Array.isArray(a[c]))q(a[c],b);else if(Array.isArray(a[c]))for(var d=0;d=0){var g=c.slice(f+e.length);a[g]=a[c],delete a[c]}}}function r(a){return a.replace(/([a-z])([A-Z])/g,"$1-$2").toLowerCase()}function s(a){var b=a.slice(1),c=b.match(/.{2}/g),d=parseFloat(parseInt(parseInt(c[3],16)/255*1e3,10)/1e3),e=c.slice(0,3).map(function(a){return parseInt(a,16)});return"rgba("+e.join(",")+","+d+");"}function t(a){var b=void 0,c=void 0,d=void 0;return b=a.replace(/^(rgb|rgba)\(/,"").replace(/\)$/,"").replace(/\s/g,"").split(","),c=parseInt(b[b.length-1],10)/255,d="rgba("+b[0]+","+b[1]+","+b[2]+","+c+");"}function u(a,b){for(var c=0;c-1)return!0;return!1}function v(a,b){for(var c=0;c-1)return b[c];return null}function w(a,b){b.splice(b.indexOf(v(a,b)),1)}function x(a,b){for(var c=0;c-1&&a.splice(c,1);return a.concat(b)}function y(a){var b=new Array(2),c=a.indexOf(":")===-1?0:a.indexOf(":"),d=void 0;return a.indexOf("%")===-1?a.indexOf("c")===-1?a.indexOf("p")===-1?b[0]=b[1]=null:(b[0]="p",d=a.indexOf("p")):(b[0]="c",d=a.indexOf("c")):(b[0]="%",d=a.indexOf("%")),b[1]=a.slice(c,d),b}function z(a,b,c){var d,e,f=[];for(var g in a)if(a.hasOwnProperty(g)){var h=g.replace("ebutts:","");h=h.replace("xml:",""),h=h.replace("tts:",""),h=r(h),a[h]=a[g],delete a[g]}if("line-padding"in a){var i=parseFloat(a["line-padding"].slice(a["line-padding"].indexOf(":")+1,a["line-padding"].indexOf("c")));"id"in a&&(V[a.id]=i);var j=i*b[0]+"px;";f.push("padding-left:"+j),f.push("padding-right:"+j)}if("font-size"in a){var k=y(a["font-size"]),l=parseFloat(k[1]);"id"in a&&(T[a.id]=k),"%"===k[0]?d=l/100*b[1]+"px;":"c"===k[0]&&(d=l*b[1]+"px;"),f.push("font-size:"+d)}if("line-height"in a)if("normal"===a["line-height"])f.push("line-height: normal;");else{var m=y(a["line-height"]),n=parseFloat(m[1]);"id"in a&&(U[a.id]=m),"%"===m[0]?e=n/100*b[1]+"px;":"c"===m[0]&&(e=n*b[1]+"px;"),f.push("line-height:"+e)}"font-family"in a&&(a["font-family"]in Y?f.push(Y[a["font-family"]]):f.push("font-family:"+a["font-family"]+";")),"text-align"in a&&a["text-align"]in Z&&(f.push(Z[a["text-align"]][0]),f.push(Z[a["text-align"]][1])),"multi-row-align"in a&&(u("text-align",f)&&"auto"!=a["multi-row-align"]&&w("text-align",f),a["multi-row-align"]in $&&f.push($[a["multi-row-align"]]));var o;return"background-color"in a&&(o=a["background-color"].indexOf("#")>-1&&a["background-color"].length-1===8?s(a["background-color"]):a["background-color"].indexOf("rgba")>-1?t(a["background-color"]):a["background-color"]+";",f.push("background-color: "+o)),"color"in a&&(o=a.color.indexOf("#")>-1&&a.color.length-1===8?s(a.color):a.color.indexOf("rgba")>-1?t(a.color):a.color+";",f.push("color: "+o)),"wrap-option"in a&&(a["wrap-option"]in _?f.push(_[a["wrap-option"]]):f.push("white-space:"+a["wrap-option"])),"unicode-bidi"in a&&(a["unicode-bidi"]in aa?f.push(aa[a["unicode-bidi"]]):f.push("unicode-bidi:"+a["unicode-bidi"])),"font-style"in a&&f.push("font-style:"+a["font-style"]+";"),"font-weight"in a&&f.push("font-weight:"+a["font-weight"]+";"),"direction"in a&&f.push("direction:"+a.direction+";"),"text-decoration"in a&&f.push("text-decoration:"+a["text-decoration"]+";"),c&&(f=f.concat(D(a,b))),Q.tt.hasOwnProperty("xml:space")&&"preserve"===Q.tt["xml:space"]&&f.push("white-space: pre;"),f}function A(a,b){for(var c=0;c'+f}for(var j="",k=a+1;k'+g,f&&g&&b===l.length-1?h+=f+m+n+g+m:f&&g&&b!==l.length-1?h+=f+m+n+g+m+n:f&&!g?h+=f+m:!f&&g&&b===l.length-1?h+=g+m:!f&&g&&b!==l.length-1&&(h+=g+m+n)});else{for(var p="",q=0;q'+a.innerHTML+m}return h}function I(a,b){var c=document.createElement("div");return a.forEach(function(a){if(!a.hasOwnProperty("metadata"))if(a.hasOwnProperty("span")){var d=a.span.__children,e=document.createElement("span");if(a.span.hasOwnProperty("style")){var f=B(a.span.style,b);e.className="spanPadding "+a.span.style,e.style.cssText=f.join(" ")}d.forEach(function(a){if(!d.hasOwnProperty("metadata"))if(a.hasOwnProperty("#text")){var b=document.createTextNode(a["#text"]);e.appendChild(b)}else if("br"in a){e.hasChildNodes()&&c.appendChild(e);var f=document.createElement("br");f.className="lineBreak",c.appendChild(f);var g=document.createElement("span");g.className=e.className,g.style.cssText=e.style.cssText,e=g}}),c.appendChild(e)}else if(a.hasOwnProperty("br")){var g=document.createElement("br");g.className="lineBreak",c.appendChild(g)}else if(a.hasOwnProperty("#text")){var h=document.createElement("span");h.textContent=a["#text"],c.appendChild(h)}}),c}function J(a,b,c){var d,e,f=[],g=a.region,h=b.region;return h&&(d=F(h,c)),g?(e=f.concat(F(g,c)),f=d?x(d,e):e):d&&(f=d),L(f,W),f}function K(a,b){var c,d,e,f=[],g=a.style,h=Q.tt.body.style,i=Q.tt.body.div.style,j="";return h&&(c=B(h,b),j="paragraph "+h),i&&(d=B(i,b),c?(d=x(c,d),j+=" "+i):j="paragraph "+i),g?(e=B(g,b),c&&d?(f=x(d,e),j+=" "+g):c?(f=x(c,e),j+=" "+g):d?(f=x(d,e),j+=" "+g):(f=e,j="paragraph "+g)):c&&!d?f=c:!c&&d&&(f=d),L(f,X),[f,j]}function L(a,b){for(var c in b)b.hasOwnProperty(c)&&(u(c,a)||a.push(c+":"+b[c]))}var M=this.context,N=(0,k.default)(M).getInstance().log,O=void 0,P=void 0,Q=void 0,R=void 0,S=void 0,T=void 0,U=void 0,V=void 0,W=void 0,X=void 0,Y=void 0,Z=void 0,$=void 0,_=void 0,aa=void 0,ba=void 0,ca=void 0,da=void 0,ea=void 0,fa=0;return O={parse:j,setConfig:a},n(),O}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f),h=a(4),i=d(h),j=a(8),k=d(j),l=3600,m=60;e.__dashjs_factory_name="TTMLParser",c.default=g.default.getSingletonFactory(e),b.exports=c.default},{10:10,4:4,8:8}],159:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){try{new window.URL("x","http://y");h=l}catch(a){}finally{h=h||m}}function b(a){var b=a.indexOf("/"),c=a.lastIndexOf("/");return b!==-1?c===b+1?a:(a.indexOf("?")!==-1&&(a=a.substring(0,a.indexOf("?"))),a.substring(0,c+1)):""}function c(a){var b=a.match(k);return b?b[1]:""}function d(a){return!i.test(a)}function e(a){return d(a)&&"/"===a.charAt(0)}function f(a){return j.test(a)}function g(a,b){return h(a,b)}var h=void 0,i=/^[a-z][a-z0-9+\-.]*:/i,j=/^https?:\/\//i,k=/^([a-z][a-z0-9+\-.]*:\/\/[^\/]+)\/?/i,l=function(a,b){try{return new window.URL(a,b).toString()}catch(c){return a}},m=function(a,f){var g=b;if(!f)return a;if(!d(a))return a;e(a)&&(g=c);var h=g(f),i="/"!==h.charAt(h.length-1)&&"/"!==a.charAt(0)?"/":"";return[h,a].join(i)};a();var n={parseBaseUrl:b,parseOrigin:c,isRelative:d,isPathAbsolute:e,isHTTPURL:f,resolve:g};return n}Object.defineProperty(c,"__esModule",{value:!0});var f=a(10),g=d(f);e.__dashjs_factory_name="URLUtils",c.default=g.default.getSingletonFactory(e),b.exports=c.default},{10:10}],160:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}function e(){function a(){k=/(?:\r\n|\r|\n)/gm,l=/-->/,m=/(^[\s]+|[\s]+$)/g,n=/\s\b/g}function b(a){var b,e,g=[];a=a.split(k),b=a.length,e=-1;for(var i=0;i0&&"WEBVTT"!==j&&j.match(l)){var n=d(j),o=n.cuePoints,p=n.styles,q=f(a,i+1),r=c(o[0].replace(m,"")),s=c(o[1].replace(m,""));!isNaN(r)&&!isNaN(s)&&r>=e&&s>r?""!==q?(e=r,g.push({start:r,end:s,data:q,styles:p})):h("Skipping cue due to empty/malformed cue text"):h("Skipping cue due to incorrect cue timing")}}return g}function c(a){var b=a.split(":"),c=b.length-1;return a=60*parseInt(b[c-1],10)+parseFloat(b[c]),2===c&&(a+=3600*parseInt(b[0],10)),a}function d(a){var b=a.split(l),c=b[1].split(n);return c.shift(),b[1]=c[0],c.shift(),{cuePoints:b,styles:e(c)}}function e(a){var b={};return a.forEach(function(a){if(a.split(/:/).length>1){var c=a.split(/:/)[1];c&&c.search(/%/)!=-1&&(c=parseInt(c.replace(/%/,""),10)),(a.match(/align/)||a.match(/A/))&&(b.align=c),(a.match(/line/)||a.match(/L/))&&(b.line=c),(a.match(/position/)||a.match(/P/))&&(b.position=c), -(a.match(/size/)||a.match(/S/))&&(b.size=c)}}),b}function f(a,b){for(var c,d=b,e="",f="";""!==a[d]&&d1)for(var g=0;g>6),b.push(128|63&d)):d<65536?(b.push(224|d>>12),b.push(128|63&d>>6),b.push(128|63&d)):(b.push(240|d>>18),b.push(128|63&d>>12),b.push(128|63&d>>6),b.push(128|63&d))}return b},e.decode=function(a){for(var b=[],c=0;c>18)),d.push(b.charAt(63&f>>12)),d.push(b.charAt(63&f>>6)),d.push(b.charAt(63&f))}if(2==a.length-c){var f=(a[c]<<16)+(a[c+1]<<8);d.push(b.charAt(63&f>>18)),d.push(b.charAt(63&f>>12)),d.push(b.charAt(63&f>>6)),d.push("=")}else if(1==a.length-c){var f=a[c]<<16;d.push(b.charAt(63&f>>18)),d.push(b.charAt(63&f>>12)),d.push("==")}return d.join("")},d=function(){for(var a=[],c=0;c=c&&console.log(this.time+" ["+a+"] "+b)}},l=function(a){for(var b=[],c=0;ce&&(k.log("ERROR","Too large cursor position "+this.pos),this.pos=e)},moveCursor:function(a){var b=this.pos+a;if(a>1)for(var c=this.pos+1;c=144&&this.backSpace();var b=c(a);if(this.pos>=e)return void k.log("ERROR","Cannot insert "+a.toString(16)+" ("+b+") at position "+this.pos+". Skipping it!");this.chars[this.pos].setChar(b,this.currPenState),this.moveCursor(1)},clearFromPos:function(a){var b;for(b=a;b0&&(c=a?"["+b.join(" | ")+"]":b.join("\n")),c},getTextAndFormat:function(){return this.rows}};var q=function(a,b){this.chNr=a,this.outputFilter=b,this.mode=null,this.verbose=0,this.displayedMemory=new p,this.nonDisplayedMemory=new p,this.lastOutputScreen=new p,this.currRollUpRow=this.displayedMemory.rows[d-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null};q.prototype={modes:["MODE_ROLL-UP","MODE_POP-ON","MODE_PAINT-ON","MODE_TEXT"],reset:function(){this.mode=null,this.displayedMemory.reset(),this.nonDisplayedMemory.reset(),this.lastOutputScreen.reset(),this.currRollUpRow=this.displayedMemory.rows[d-1],this.writeScreen=this.displayedMemory,this.mode=null,this.cueStartTime=null,this.lastCueEndTime=null},getHandler:function(){return this.outputFilter},setHandler:function(a){this.outputFilter=a},setPAC:function(a){this.writeScreen.setPAC(a)},setBkgData:function(a){this.writeScreen.setBkgData(a)},setMode:function(a){a!==this.mode&&(this.mode=a,k.log("INFO","MODE="+a),"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=a)},insertChars:function(a){for(var b=0;b=46,b.italics)b.foreground="white";else{var c=Math.floor(a/2)-16,d=["white","green","blue","cyan","red","yellow","magenta"];b.foreground=d[c]}k.log("INFO","MIDROW: "+JSON.stringify(b)),this.writeScreen.setPen(b)},outputDataUpdate:function(){var a=k.time;null!==a&&this.outputFilter&&(this.outputFilter.updateData&&this.outputFilter.updateData(a,this.displayedMemory),null!==this.cueStartTime||this.displayedMemory.isEmpty()?this.displayedMemory.equals(this.lastOutputScreen)||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,a,this.lastOutputScreen),this.cueStartTime=this.displayedMemory.isEmpty()?null:a):this.cueStartTime=a,this.lastOutputScreen.copy(this.displayedMemory))},cueSplitAtTime:function(a){this.outputFilter&&(this.displayedMemory.isEmpty()||(this.outputFilter.newCue&&this.outputFilter.newCue(this.cueStartTime,a,this.displayedMemory),this.cueStartTime=a))}};var r=function(a,b,c){this.field=a||1,this.outputs=[b,c],this.channels=[new q(1,b),new q(2,c)],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}};r.prototype={getHandler:function(a){return this.channels[a].getHandler()},setHandler:function(a,b){this.channels[a].setHandler(b)},addData:function(a,b){var c,d,e,f=!1;this.lastTime=a,k.setTime(a);for(var g=0;g=16&&d<=31&&d===this.lastCmdA&&e===this.lastCmdB)this.lastCmdA=null,this.lastCmdB=null,k.log("DEBUG","Repeated command ("+l([d,e])+") is dropped");else if(0!==d||0!==e){if(k.log("DATA","["+l([b[g],b[g+1]])+"] -> ("+l([d,e])+")"),c=this.parseCmd(d,e),c||(c=this.parseMidrow(d,e)),c||(c=this.parsePAC(d,e)),c||(c=this.parseBackgroundAttributes(d,e)),!c&&(f=this.parseChars(d,e)))if(this.currChNr&&this.currChNr>=0){var h=this.channels[this.currChNr-1];h.insertChars(f)}else k.log("WARNING","No channel found yet. TEXT-MODE?");c?this.dataCounters.cmd+=2:f?this.dataCounters.char+=2:(this.dataCounters.other+=2,k.log("WARNING","Couldn't parse cleaned data "+l([d,e])+" orig: "+l([b[g],b[g+1]])))}else this.dataCounters.padding+=2},parseCmd:function(a,b){var c=null,d=(20===a||21===a||28===a||29===a)&&32<=b&&b<=47,e=(23===a||31===a)&&33<=b&&b<=35;if(!d&&!e)return!1;c=20===a||21===a||23===a?1:2;var f=this.channels[c-1];return 20===a||21===a||28===a||29===a?32===b?f.cc_RCL():33===b?f.cc_BS():34===b?f.cc_AOF():35===b?f.cc_AON():36===b?f.cc_DER():37===b?f.cc_RU(2):38===b?f.cc_RU(3):39===b?f.cc_RU(4):40===b?f.cc_FON():41===b?f.cc_RDC():42===b?f.cc_TR():43===b?f.cc_RTD():44===b?f.cc_EDM():45===b?f.cc_CR():46===b?f.cc_ENM():47===b&&f.cc_EOC():f.cc_TO(b-32),this.lastCmdA=a,this.lastCmdB=b,this.currChNr=c,!0},parseMidrow:function(a,b){var c=null;if((17===a||25===a)&&32<=b&&b<=47){if((c=17===a?1:2)!==this.currChNr)return k.log("ERROR","Mismatch channel in midrow parsing"),!1;var d=this.channels[c-1];return d.insertChars([32]),d.cc_MIDROW(b),k.log("DEBUG","MIDROW ("+l([a,b])+")"),this.lastCmdA=a,this.lastCmdB=b,!0}return!1},parsePAC:function(a,b){var c=null,d=null,e=(17<=a&&a<=23||25<=a&&a<=31)&&64<=b&&b<=127,j=(16===a||24===a)&&64<=b&&b<=95;if(!e&&!j)return!1;c=a<=23?1:2,d=64<=b&&b<=95?1===c?f[a]:h[a]:1===c?g[a]:i[a];var k=this.interpretPAC(d,b);return this.channels[c-1].setPAC(k),this.lastCmdA=a,this.lastCmdB=b,this.currChNr=c,!0},interpretPAC:function(a,b){var c=b,d={color:null,italics:!1,indent:null,underline:!1,row:a};return c=b>95?b-96:b-64,d.underline=1==(1&c),c<=13?d.color=["white","green","blue","cyan","red","yellow","magenta","white"][Math.floor(c/2)]:c<=15?(d.italics=!0,d.color="white"):d.indent=4*Math.floor((c-16)/2),d},parseChars:function(a,b){var d=null,e=null,f=null;if(a>=25?(d=2,f=a-8):(d=1,f=a),17<=f&&f<=19){var g=b;g=17===f?b+80:18===f?b+112:b+144,k.log("INFO","Special char '"+c(g)+"' in channel "+d),e=[g],this.lastCmdA=a,this.lastCmdB=b}else 32<=a&&a<=127&&(e=0===b?[a]:[a,b],this.lastCmdA=null,this.lastCmdB=null);if(e){var h=l(e);k.log("DEBUG","Char codes = "+h.join(","))}return e},parseBackgroundAttributes:function(a,b){var c,d,e,f,g=(16===a||24===a)&&32<=b&&b<=47,h=(23===a||31===a)&&45<=b&&b<=47;return!(!g&&!h)&&(c={},16===a||24===a?(d=Math.floor((b-32)/2),c.background=j[d],b%2==1&&(c.background=c.background+"_semi")):45===b?c.background="transparent":(c.foreground="black",47===b&&(c.underline=!0)),e=a<24?1:2,f=this.channels[e-1],f.setBkgData(c),this.lastCmdA=a,this.lastCmdB=b,!0)},reset:function(){for(var a=0;a/g,">").replace(/"/g,""").replace(/'/g,"'"):a}function g(a,b,c,d){for(var e=0;e0&&g(a.arrayAccessFormPaths,b,c,d)&&(b[c]=[b[c]])}function i(a){var b=a.split(/[-T:+Z]/g),c=new Date(b[0],b[1]-1,b[2]),d=b[5].split(".");if(c.setHours(b[3],b[4],d[0]),d.length>1&&c.setMilliseconds(d[1]),b[6]&&b[7]){var e=60*b[6]+Number(b[7]);e=0+("-"==(/\d\d-\d\d:\d\d$/.test(a)?"-":"+")?-1*e:e),c.setMinutes(c.getMinutes()-e-c.getTimezoneOffset())}else-1!==a.indexOf("Z",a.length-1)&&(c=new Date(Date.UTC(c.getFullYear(),c.getMonth(),c.getDate(),c.getHours(),c.getMinutes(),c.getSeconds(),c.getMilliseconds())));return c}function j(b,c,d){if(a.datetimeAccessFormPaths.length>0){var e=d.split(".#")[0];return g(a.datetimeAccessFormPaths,b,c,e)?i(b):b}return b}function k(b,c,d,e){return!(c==z.ELEMENT_NODE&&a.xmlElementsFilter.length>0)||g(a.xmlElementsFilter,b,d,e)}function l(b,c){if(b.nodeType==z.DOCUMENT_NODE){for(var f=new Object,g=b.childNodes,i=0;i1&&null!=f.__text&&a.skipEmptyTextNodesForObj&&(a.stripWhitespaces&&""==f.__text||""==f.__text.trim())&&delete f.__text:f=f.__cdata,delete f.__cnt,!a.enableToStringFunc||null==f.__text&&null==f.__cdata||(f.toString=function(){return(null!=this.__text?this.__text:"")+(null!=this.__cdata?this.__cdata:"")}),f}if(b.nodeType==z.TEXT_NODE||b.nodeType==z.CDATA_SECTION_NODE)return b.nodeValue}function m(b,c,d,e){var g="<"+(null!=b&&null!=b.__prefix?b.__prefix+":":"")+c;if(null!=d)for(var h=0;h":">"}function n(a,b){return""}function o(a,b){return-1!==a.indexOf(b,a.length-b.length)}function p(b,c){return!!("property"==a.arrayAccessForm&&o(c.toString(),"_asArray")||0==c.toString().indexOf(a.attributePrefix)||0==c.toString().indexOf("__")||b[c]instanceof Function)}function q(a){var b=0;if(a instanceof Object)for(var c in a)p(a,c)||b++;return b}function r(b,c,d){return 0==a.jsonPropertiesFilter.length||""==d||g(a.jsonPropertiesFilter,b,c,d)}function s(b){var c=[];if(b instanceof Object)for(var d in b)-1==d.toString().indexOf("__")&&0==d.toString().indexOf(a.attributePrefix)&&c.push(d);return c}function t(b){var c="";return null!=b.__cdata&&(c+=""+b.__cdata+""),null!=b.__text&&(a.escapeMode?c+=f(b.__text):c+=b.__text),c}function u(b){var c="";return b instanceof Object?c+=t(b):null!=b&&(a.escapeMode?c+=f(b):c+=b),c}function v(a,b){return""===a?b:a+"."+b}function w(a,b,c,d){var e="";if(0==a.length)e+=m(a,b,c,!0);else for(var f=0;f0)for(var d in a)if(!p(a,d)&&(""==b||r(a,d,v(b,d)))){var e=a[d],f=s(e);if(null==e||void 0==e)c+=m(e,d,f,!0);else if(e instanceof Object)if(e instanceof Array)c+=w(e,d,f,b);else if(e instanceof Date)c+=m(e,d,f,!1),c+=e.toISOString(),c+=n(e,d);else{var g=q(e);g>0||null!=e.__text||null!=e.__cdata?(c+=m(e,d,f,!1),c+=x(e,v(b,d)),c+=n(e,d)):c+=m(e,d,f,!0)}else c+=m(e,d,f,!1),c+=u(e),c+=n(e,d)}return c+=u(a)}var y="1.2.0";a=a||{},b(),c();var z={ELEMENT_NODE:1,TEXT_NODE:3,CDATA_SECTION_NODE:4,COMMENT_NODE:8,DOCUMENT_NODE:9};this.parseXmlString=function(a){window.ActiveXObject||window;if(void 0===a)return null;var b;if(window.DOMParser){var c=new window.DOMParser;try{b=c.parseFromString(a,"text/xml"),b.getElementsByTagNameNS("*","parsererror").length>0&&(b=null)}catch(d){b=null}}else 0==a.indexOf("")+2)),b=new ActiveXObject("Microsoft.XMLDOM"),b.async="false",b.loadXML(a);return b},this.asArray=function(a){return void 0===a||null==a?[]:a instanceof Array?a:[a]},this.toXmlDateTime=function(a){return a instanceof Date?a.toISOString():"number"==typeof a?new Date(a).toISOString():null},this.asDateTime=function(a){return"string"==typeof a?i(a):a},this.xml2json=function(a){return l(a)},this.xml_str2json=function(a){var b=this.parseXmlString(a);return null!=b?this.xml2json(b):null},this.json2xml_str=function(a){return x(a,"")},this.json2xml=function(a){var b=this.json2xml_str(a);return this.parseXmlString(b)},this.getVersion=function(){return y}}Object.defineProperty(c,"__esModule",{value:!0}),c.default=d,b.exports=c.default},{}],4:[function(a,b,c){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}Object.defineProperty(c,"__esModule",{value:!0});var e=a(5),f=a(117),g=d(f),h=a(151),i=d(h),j=a(95),k=d(j),l=a(46),m=d(l);dashjs.Protection=i.default,dashjs.MetricsReporting=g.default,dashjs.MediaPlayerFactory=k.default,dashjs.Debug=m.default,c.default=dashjs,c.MediaPlayer=e.MediaPlayer,c.Protection=i.default,c.MetricsReporting=g.default,c.MediaPlayerFactory=k.default,c.Debug=m.default},{117:117,151:151,46:46,5:5,95:95}],5:[function(a,b,c){(function(b){"use strict";function d(a){return a&&a.__esModule?a:{default:a}}Object.defineProperty(c,"__esModule",{value:!0});var e=a(93),f=d(e),g=a(48),h=d(g),i=a(46),j=d(i),k=a(49),l="undefined"!=typeof window&&window||b,m=l.dashjs;m||(m=l.dashjs={}),m.MediaPlayer=f.default,m.FactoryMaker=h.default,m.Debug=j.default,m.Version=(0,k.getVersionString)(),c.default=m,c.MediaPlayer=f.default,c.FactoryMaker=h.default,c.Debug=j.default}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{46:46,48:48,49:49,93:93}],6:[function(a,b,c){/*! codem-isoboxer v0.3.5 https://github.com/madebyhiro/codem-isoboxer/blob/master/LICENSE.txt */ +var d={};d.parseBuffer=function(a){return new e(a).parse()},d.addBoxProcessor=function(a,b){"string"==typeof a&&"function"==typeof b&&(f.prototype._boxProcessors[a]=b)},d.createFile=function(){return new e},d.createBox=function(a,b,c){var d=f.create(a);return b&&b.append(d,c),d},d.createFullBox=function(a,b,c){var e=d.createBox(a,b,c);return e.version=0,e.flags=0,e},d.Utils={},d.Utils.dataViewToString=function(a,b){var c=b||"utf-8";if("undefined"!=typeof TextDecoder)return new TextDecoder(c).decode(a);var d=[],e=0;if("utf-8"===c)for(;e>6),b.push(128|63&d)):d<65536?(b.push(224|d>>12),b.push(128|63&d>>6),b.push(128|63&d)):(b.push(240|d>>18),b.push(128|63&d>>12),b.push(128|63&d>>6),b.push(128|63&d))}return b},d.Utils.appendBox=function(a,b,c){if(b._offset=a._cursor.offset,b._root=a._root?a._root:a,b._raw=a._raw,b._parent=a,-1!==c){if(void 0===c||null===c)return void a.boxes.push(b);var d,e=-1;if("number"==typeof c)e=c;else{if("string"==typeof c)d=c;else{if("object"!=typeof c||!c.type)return void a.boxes.push(b);d=c.type}for(var f=0;f>3,b},f.prototype._readUint=function(a){var b,c,d=null,e=this._cursor.offset-this._raw.byteOffset;switch(a){case 8:d=this._raw.getUint8(e);break;case 16:d=this._raw.getUint16(e);break;case 24:b=this._raw.getUint16(e),c=this._raw.getUint8(e+2),d=(b<<8)+c;break;case 32:d=this._raw.getUint32(e);break;case 64:b=this._raw.getUint32(e),c=this._raw.getUint32(e+4),d=b*Math.pow(2,32)+c}return this._cursor.offset+=a>>3,d},f.prototype._readString=function(a){for(var b="",c=0;c0?a:this._raw.byteLength-(this._cursor.offset-this._offset);if(b>0){var c=new Uint8Array(this._raw.buffer,this._cursor.offset,b);return this._cursor.offset+=b,c}return null},f.prototype._readUTF8String=function(){var a=this._raw.byteLength-(this._cursor.offset-this._offset),b=null;return a>0&&(b=new DataView(this._raw.buffer,this._cursor.offset,a),this._cursor.offset+=a),b?d.Utils.dataViewToString(b):b},f.prototype._parseBox=function(){if(this._parsing=!0,this._cursor.offset=this._offset,this._offset+8>this._raw.buffer.byteLength)return void(this._root._incomplete=!0);switch(this._procField("size","uint",32),this._procField("type","string",4),1===this.size&&this._procField("largesize","uint",64),"uuid"===this.type&&this._procFieldArray("usertype",16,"uint",8),this.size){case 0:this._raw=new DataView(this._raw.buffer,this._offset,this._raw.byteLength-this._cursor.offset+8);break;case 1:this._offset+this.size>this._raw.buffer.byteLength?(this._incomplete=!0,this._root._incomplete=!0):this._raw=new DataView(this._raw.buffer,this._offset,this.largesize);break;default:this._offset+this.size>this._raw.buffer.byteLength?(this._incomplete=!0,this._root._incomplete=!0):this._raw=new DataView(this._raw.buffer,this._offset,this.size)}this._incomplete||(this._boxProcessors[this.type]&&this._boxProcessors[this.type].call(this),-1!==this._boxContainers.indexOf(this.type)?this._parseContainerBox():this._data=this._readData())},f.prototype._parseFullBox=function(){this.version=this._readUint(8),this.flags=this._readUint(24)},f.prototype._parseContainerBox=function(){for(this.boxes=[];this._cursor.offset-this._raw.byteOffset>3}else this.size+=a>>3},f.prototype._writeUint=function(a,b){if(this._rawo){var c,d,e=this._cursor.offset-this._rawo.byteOffset;switch(a){case 8:this._rawo.setUint8(e,b);break;case 16:this._rawo.setUint16(e,b);break;case 24:c=(16776960&b)>>8,d=255&b,this._rawo.setUint16(e,c),this._rawo.setUint8(e+2,d);break;case 32:this._rawo.setUint32(e,b);break;case 64:c=Math.floor(b/Math.pow(2,32)),d=b-c*Math.pow(2,32),this._rawo.setUint32(e,c),this._rawo.setUint32(e+4,d)}this._cursor.offset+=a>>3}else this.size+=a>>3},f.prototype._writeString=function(a,b){for(var c=0;c>10&31),96+(this.language>>5&31),96+(31&this.language))),this._procField("pre_defined","uint",16)},f.prototype._boxProcessors.mehd=function(){this._procFullBox(),this._procField("fragment_duration","uint",1==this.version?64:32)},f.prototype._boxProcessors.mfhd=function(){this._procFullBox(),this._procField("sequence_number","uint",32)},f.prototype._boxProcessors.mfro=function(){this._procFullBox(),this._procField("mfra_size","uint",32)},f.prototype._boxProcessors.mp4a=f.prototype._boxProcessors.enca=function(){this._procFieldArray("reserved1",6,"uint",8),this._procField("data_reference_index","uint",16),this._procFieldArray("reserved2",2,"uint",32),this._procField("channelcount","uint",16),this._procField("samplesize","uint",16),this._procField("pre_defined","uint",16),this._procField("reserved3","uint",16),this._procField("samplerate","template",32),this._procField("esds","data",-1)},f.prototype._boxProcessors.mvhd=function(){this._procFullBox(),this._procField("creation_time","uint",1==this.version?64:32),this._procField("modification_time","uint",1==this.version?64:32),this._procField("timescale","uint",32),this._procField("duration","uint",1==this.version?64:32),this._procField("rate","template",32),this._procField("volume","template",16),this._procField("reserved1","uint",16),this._procFieldArray("reserved2",2,"uint",32),this._procFieldArray("matrix",9,"template",32),this._procFieldArray("pre_defined",6,"uint",32),this._procField("next_track_ID","uint",32)},f.prototype._boxProcessors.payl=function(){this._procField("cue_text","utf8")},f.prototype._boxProcessors.pssh=function(){this._procFullBox(),this._procFieldArray("SystemID",16,"uint",8),this._procField("DataSize","uint",32),this._procFieldArray("Data",this.DataSize,"uint",8)},f.prototype._boxProcessors.schm=function(){this._procFullBox(),this._procField("scheme_type","uint",32),this._procField("scheme_version","uint",32),1&this.flags&&this._procField("scheme_uri","string",-1)},f.prototype._boxProcessors.sdtp=function(){this._procFullBox();var a=-1;this._parsing&&(a=this._raw.byteLength-(this._cursor.offset-this._raw.byteOffset)),this._procFieldArray("sample_dependency_table",a,"uint",8)},f.prototype._boxProcessors.sidx=function(){this._procFullBox(),this._procField("reference_ID","uint",32),this._procField("timescale","uint",32),this._procField("earliest_presentation_time","uint",1==this.version?64:32),this._procField("first_offset","uint",1==this.version?64:32),this._procField("reserved","uint",16),this._procField("reference_count","uint",16),this._procEntries("references",this.reference_count,function(a){this._parsing||(a.reference=(1&a.reference_type)<<31,a.reference|=2147483647&a.referenced_size,a.sap=(1&a.starts_with_SAP)<<31,a.sap|=(3&a.SAP_type)<<28,a.sap|=268435455&a.SAP_delta_time),this._procEntryField(a,"reference","uint",32),this._procEntryField(a,"subsegment_duration","uint",32),this._procEntryField(a,"sap","uint",32),this._parsing&&(a.reference_type=a.reference>>31&1,a.referenced_size=2147483647&a.reference,a.starts_with_SAP=a.sap>>31&1,a.SAP_type=a.sap>>28&7,a.SAP_delta_time=268435455&a.sap)})},f.prototype._boxProcessors.smhd=function(){this._procFullBox(),this._procField("balance","uint",16),this._procField("reserved","uint",16)},f.prototype._boxProcessors.ssix=function(){this._procFullBox(),this._procField("subsegment_count","uint",32),this._procEntries("subsegments",this.subsegment_count,function(a){this._procEntryField(a,"ranges_count","uint",32),this._procSubEntries(a,"ranges",a.ranges_count,function(a){this._procEntryField(a,"level","uint",8),this._procEntryField(a,"range_size","uint",24)})})},f.prototype._boxProcessors.stsd=function(){this._procFullBox(),this._procField("entry_count","uint",32),this._procSubBoxes("entries",this.entry_count)},f.prototype._boxProcessors.subs=function(){this._procFullBox(),this._procField("entry_count","uint",32),this._procEntries("entries",this.entry_count,function(a){this._procEntryField(a,"sample_delta","uint",32),this._procEntryField(a,"subsample_count","uint",16),this._procSubEntries(a,"subsamples",a.subsample_count,function(a){this._procEntryField(a,"subsample_size","uint",1===this.version?32:16),this._procEntryField(a,"subsample_priority","uint",8),this._procEntryField(a,"discardable","uint",8),this._procEntryField(a,"codec_specific_parameters","uint",32)})})},f.prototype._boxProcessors.tenc=function(){this._procFullBox(),this._procField("default_IsEncrypted","uint",24),this._procField("default_IV_size","uint",8),this._procFieldArray("default_KID",16,"uint",8)},f.prototype._boxProcessors.tfdt=function(){this._procFullBox(),this._procField("baseMediaDecodeTime","uint",1==this.version?64:32)},f.prototype._boxProcessors.tfhd=function(){this._procFullBox(),this._procField("track_ID","uint",32),1&this.flags&&this._procField("base_data_offset","uint",64),2&this.flags&&this._procField("sample_description_offset","uint",32),8&this.flags&&this._procField("default_sample_duration","uint",32),16&this.flags&&this._procField("default_sample_size","uint",32),32&this.flags&&this._procField("default_sample_flags","uint",32)},f.prototype._boxProcessors.tfra=function(){this._procFullBox(),this._procField("track_ID","uint",32),this._parsing||(this.reserved=0,this.reserved|=(48&this.length_size_of_traf_num)<<4,this.reserved|=(12&this.length_size_of_trun_num)<<2,this.reserved|=3&this.length_size_of_sample_num),this._procField("reserved","uint",32),this._parsing&&(this.length_size_of_traf_num=(48&this.reserved)>>4,this.length_size_of_trun_num=(12&this.reserved)>>2,this.length_size_of_sample_num=3&this.reserved),this._procField("number_of_entry","uint",32),this._procEntries("entries",this.number_of_entry,function(a){this._procEntryField(a,"time","uint",1===this.version?64:32),this._procEntryField(a,"moof_offset","uint",1===this.version?64:32),this._procEntryField(a,"traf_number","uint",8*(this.length_size_of_traf_num+1)),this._procEntryField(a,"trun_number","uint",8*(this.length_size_of_trun_num+1)),this._procEntryField(a,"sample_number","uint",8*(this.length_size_of_sample_num+1))})},f.prototype._boxProcessors.tkhd=function(){this._procFullBox(),this._procField("creation_time","uint",1==this.version?64:32),this._procField("modification_time","uint",1==this.version?64:32),this._procField("track_ID","uint",32),this._procField("reserved1","uint",32),this._procField("duration","uint",1==this.version?64:32),this._procFieldArray("reserved2",2,"uint",32),this._procField("layer","uint",16),this._procField("alternate_group","uint",16),this._procField("volume","template",16),this._procField("reserved3","uint",16),this._procFieldArray("matrix",9,"template",32),this._procField("width","template",32),this._procField("height","template",32)},f.prototype._boxProcessors.trex=function(){this._procFullBox(),this._procField("track_ID","uint",32),this._procField("default_sample_description_index","uint",32),this._procField("default_sample_duration","uint",32),this._procField("default_sample_size","uint",32),this._procField("default_sample_flags","uint",32)},f.prototype._boxProcessors.trun=function(){this._procFullBox(),this._procField("sample_count","uint",32),1&this.flags&&this._procField("data_offset","int",32),4&this.flags&&this._procField("first_sample_flags","uint",32),this._procEntries("samples",this.sample_count,function(a){256&this.flags&&this._procEntryField(a,"sample_duration","uint",32),512&this.flags&&this._procEntryField(a,"sample_size","uint",32),1024&this.flags&&this._procEntryField(a,"sample_flags","uint",32),2048&this.flags&&this._procEntryField(a,"sample_composition_time_offset",1===this.version?"int":"uint",32)})},f.prototype._boxProcessors["url "]=f.prototype._boxProcessors["urn "]=function(){this._procFullBox(),"urn "===this.type&&this._procField("name","string",-1),this._procField("location","string",-1)},f.prototype._boxProcessors.vlab=function(){this._procField("source_label","utf8")},f.prototype._boxProcessors.vmhd=function(){this._procFullBox(),this._procField("graphicsmode","uint",16),this._procFieldArray("opcolor",3,"uint",16)},f.prototype._boxProcessors.vttC=function(){this._procField("config","utf8")},f.prototype._boxProcessors.vtte=function(){}},{}],7:[function(a,b,c){"use strict";var d=Array.isArray,e=Object.keys,f=Object.prototype.hasOwnProperty;b.exports=function a(b,c){if(b===c)return!0;var g,h,i,j=d(b),k=d(c);if(j&&k){if((h=b.length)!=c.length)return!1;for(g=0;g0)throw new Error("Invalid string. Length must be a multiple of 4");var k=a.length;i="="===a.charAt(k-2)?2:"="===a.charAt(k-1)?1:0,j=new e(3*a.length/4-i),g=i>0?a.length-4:a.length;var l=0;for(d=0,f=0;d>16),c((65280&h)>>8),c(255&h);return 2===i?(h=b(a.charAt(d))<<2|b(a.charAt(d+1))>>4,c(255&h)):1===i&&(h=b(a.charAt(d))<<10|b(a.charAt(d+1))<<4|b(a.charAt(d+2))>>2,c(h>>8&255),c(255&h)),j}function d(a){function b(a){return"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(a)}function c(a){return b(a>>18&63)+b(a>>12&63)+b(a>>6&63)+b(63&a)}var d,e,f,g=a.length%3,h="";for(d=0,f=a.length-g;d>2),h+=b(e<<4&63),h+="==";break;case 2:e=(a[a.length-2]<<8)+a[a.length-1],h+=b(e>>10),h+=b(e>>4&63),h+=b(e<<2&63),h+="="}return h}var e="undefined"!=typeof Uint8Array?Uint8Array:Array,f="+".charCodeAt(0),g="/".charCodeAt(0),h="0".charCodeAt(0),i="a".charCodeAt(0),j="A".charCodeAt(0),k="-".charCodeAt(0),l="_".charCodeAt(0);a.toByteArray=c,a.fromByteArray=d}(void 0===c?this.base64js={}:c)},{}],9:[function(a,b,c){},{}],10:[function(a,b,c){(function(b){/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +"use strict";function d(){function a(){}try{var b=new Uint8Array(1);return b.foo=function(){return 42},b.constructor=a,42===b.foo()&&b.constructor===a&&"function"==typeof b.subarray&&0===b.subarray(1,1).byteLength}catch(c){return!1}}function e(){return f.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function f(a){return this instanceof f?(f.TYPED_ARRAY_SUPPORT||(this.length=0,this.parent=void 0),"number"==typeof a?g(this,a):"string"==typeof a?h(this,a,arguments.length>1?arguments[1]:"utf8"):i(this,a)):arguments.length>1?new f(a,arguments[1]):new f(a)}function g(a,b){if(a=p(a,b<0?0:0|q(b)),!f.TYPED_ARRAY_SUPPORT)for(var c=0;c>>1&&(a.parent=Z),a}function q(a){if(a>=e())throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+e().toString(16)+" bytes");return 0|a}function r(a,b){if(!(this instanceof r))return new r(a,b);var c=new f(a,b);return delete c.parent,c}function s(a,b){"string"!=typeof a&&(a=""+a);var c=a.length;if(0===c)return 0;for(var d=!1;;)switch(b){case"ascii":case"binary":case"raw":case"raws":return c;case"utf8":case"utf-8":return R(a).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*c;case"hex":return c>>>1;case"base64":return U(a).length;default:if(d)return R(a).length;b=(""+b).toLowerCase(),d=!0}}function t(a,b,c){var d=!1;if(b|=0,c=void 0===c||c===1/0?this.length:0|c,a||(a="utf8"),b<0&&(b=0),c>this.length&&(c=this.length),c<=b)return"";for(;;)switch(a){case"hex":return F(this,b,c);case"utf8":case"utf-8":return B(this,b,c);case"ascii":return D(this,b,c);case"binary":return E(this,b,c);case"base64":return A(this,b,c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return G(this,b,c);default:if(d)throw new TypeError("Unknown encoding: "+a);a=(a+"").toLowerCase(),d=!0}}function u(a,b,c,d){c=Number(c)||0;var e=a.length-c;d?(d=Number(d))>e&&(d=e):d=e;var f=b.length;if(f%2!=0)throw new Error("Invalid hex string");d>f/2&&(d=f/2);for(var g=0;g239?4:f>223?3:f>191?2:1;if(e+h<=c){var i,j,k,l;switch(h){case 1:f<128&&(g=f);break;case 2:i=a[e+1],128==(192&i)&&(l=(31&f)<<6|63&i)>127&&(g=l);break;case 3:i=a[e+1],j=a[e+2],128==(192&i)&&128==(192&j)&&(l=(15&f)<<12|(63&i)<<6|63&j)>2047&&(l<55296||l>57343)&&(g=l);break;case 4:i=a[e+1],j=a[e+2],k=a[e+3],128==(192&i)&&128==(192&j)&&128==(192&k)&&(l=(15&f)<<18|(63&i)<<12|(63&j)<<6|63&k)>65535&&l<1114112&&(g=l)}}null===g?(g=65533,h=1):g>65535&&(g-=65536,d.push(g>>>10&1023|55296),g=56320|1023&g),d.push(g),e+=h}return C(d)}function C(a){var b=a.length;if(b<=$)return String.fromCharCode.apply(String,a);for(var c="",d=0;dd)&&(c=d);for(var e="",f=b;fc)throw new RangeError("Trying to access beyond buffer length")}function I(a,b,c,d,e,g){if(!f.isBuffer(a))throw new TypeError("buffer must be a Buffer instance");if(b>e||ba.length)throw new RangeError("index out of range")}function J(a,b,c,d){b<0&&(b=65535+b+1);for(var e=0,f=Math.min(a.length-c,2);e>>8*(d?e:1-e)}function K(a,b,c,d){b<0&&(b=4294967295+b+1);for(var e=0,f=Math.min(a.length-c,4);e>>8*(d?e:3-e)&255}function L(a,b,c,d,e,f){if(b>e||ba.length)throw new RangeError("index out of range");if(c<0)throw new RangeError("index out of range")}function M(a,b,c,d,e){return e||L(a,b,c,4,3.4028234663852886e38,-3.4028234663852886e38),X.write(a,b,c,d,23,4),c+4}function N(a,b,c,d,e){return e||L(a,b,c,8,1.7976931348623157e308,-1.7976931348623157e308),X.write(a,b,c,d,52,8),c+8}function O(a){if(a=P(a).replace(aa,""),a.length<2)return"";for(;a.length%4!=0;)a+="=";return a}function P(a){return a.trim?a.trim():a.replace(/^\s+|\s+$/g,"")}function Q(a){return a<16?"0"+a.toString(16):a.toString(16)}function R(a,b){b=b||1/0;for(var c,d=a.length,e=null,f=[],g=0;g55295&&c<57344){if(!e){if(c>56319){(b-=3)>-1&&f.push(239,191,189);continue}if(g+1===d){(b-=3)>-1&&f.push(239,191,189);continue}e=c;continue}if(c<56320){(b-=3)>-1&&f.push(239,191,189),e=c;continue}c=65536+(e-55296<<10|c-56320)}else e&&(b-=3)>-1&&f.push(239,191,189);if(e=null,c<128){if((b-=1)<0)break;f.push(c)}else if(c<2048){if((b-=2)<0)break;f.push(c>>6|192,63&c|128)}else if(c<65536){if((b-=3)<0)break;f.push(c>>12|224,c>>6&63|128,63&c|128)}else{if(!(c<1114112))throw new Error("Invalid code point");if((b-=4)<0)break;f.push(c>>18|240,c>>12&63|128,c>>6&63|128,63&c|128)}}return f}function S(a){for(var b=[],c=0;c>8,e=c%256,f.push(e),f.push(d);return f}function U(a){return W.toByteArray(O(a))}function V(a,b,c,d){for(var e=0;e=b.length||e>=a.length);e++)b[e+c]=a[e];return e}var W=a(8),X=a(14),Y=a(11);c.Buffer=f,c.SlowBuffer=r,c.INSPECT_MAX_BYTES=50,f.poolSize=8192;var Z={};f.TYPED_ARRAY_SUPPORT=void 0!==b.TYPED_ARRAY_SUPPORT?b.TYPED_ARRAY_SUPPORT:d(),f.TYPED_ARRAY_SUPPORT?(f.prototype.__proto__=Uint8Array.prototype,f.__proto__=Uint8Array):(f.prototype.length=void 0,f.prototype.parent=void 0),f.isBuffer=function(a){return!(null==a||!a._isBuffer)},f.compare=function(a,b){if(!f.isBuffer(a)||!f.isBuffer(b))throw new TypeError("Arguments must be Buffers");if(a===b)return 0;for(var c=a.length,d=b.length,e=0,g=Math.min(c,d);e0&&(a=this.toString("hex",0,b).match(/.{2}/g).join(" "),this.length>b&&(a+=" ... ")),""},f.prototype.compare=function(a){if(!f.isBuffer(a))throw new TypeError("Argument must be a Buffer");return this===a?0:f.compare(this,a)},f.prototype.indexOf=function(a,b){function c(a,b,c){for(var d=-1,e=0;c+e2147483647?b=2147483647:b<-2147483648&&(b=-2147483648),b>>=0,0===this.length)return-1;if(b>=this.length)return-1;if(b<0&&(b=Math.max(this.length+b,0)),"string"==typeof a)return 0===a.length?-1:String.prototype.indexOf.call(this,a,b);if(f.isBuffer(a))return c(this,a,b);if("number"==typeof a)return f.TYPED_ARRAY_SUPPORT&&"function"===Uint8Array.prototype.indexOf?Uint8Array.prototype.indexOf.call(this,a,b):c(this,[a],b);throw new TypeError("val must be string, number or Buffer")},f.prototype.get=function(a){return console.log(".get() is deprecated. Access using array indexes instead."),this.readUInt8(a)},f.prototype.set=function(a,b){return console.log(".set() is deprecated. Access using array indexes instead."),this.writeUInt8(a,b)},f.prototype.write=function(a,b,c,d){if(void 0===b)d="utf8",c=this.length,b=0;else if(void 0===c&&"string"==typeof b)d=b,c=this.length,b=0;else if(isFinite(b))b|=0,isFinite(c)?(c|=0,void 0===d&&(d="utf8")):(d=c,c=void 0);else{var e=d;d=b,b=0|c,c=e}var f=this.length-b;if((void 0===c||c>f)&&(c=f),a.length>0&&(c<0||b<0)||b>this.length)throw new RangeError("attempt to write outside buffer bounds");d||(d="utf8");for(var g=!1;;)switch(d){case"hex":return u(this,a,b,c);case"utf8":case"utf-8":return v(this,a,b,c);case"ascii":return w(this,a,b,c);case"binary":return x(this,a,b,c);case"base64":return y(this,a,b,c);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return z(this,a,b,c);default:if(g)throw new TypeError("Unknown encoding: "+d);d=(""+d).toLowerCase(),g=!0}},f.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var $=4096;f.prototype.slice=function(a,b){var c=this.length;a=~~a,b=void 0===b?c:~~b,a<0?(a+=c)<0&&(a=0):a>c&&(a=c),b<0?(b+=c)<0&&(b=0):b>c&&(b=c),b0&&(e*=256);)d+=this[a+--b]*e;return d},f.prototype.readUInt8=function(a,b){return b||H(a,1,this.length),this[a]},f.prototype.readUInt16LE=function(a,b){return b||H(a,2,this.length),this[a]|this[a+1]<<8},f.prototype.readUInt16BE=function(a,b){return b||H(a,2,this.length),this[a]<<8|this[a+1]},f.prototype.readUInt32LE=function(a,b){return b||H(a,4,this.length),(this[a]|this[a+1]<<8|this[a+2]<<16)+16777216*this[a+3]},f.prototype.readUInt32BE=function(a,b){return b||H(a,4,this.length),16777216*this[a]+(this[a+1]<<16|this[a+2]<<8|this[a+3])},f.prototype.readIntLE=function(a,b,c){a|=0,b|=0,c||H(a,b,this.length);for(var d=this[a],e=1,f=0;++f=e&&(d-=Math.pow(2,8*b)),d},f.prototype.readIntBE=function(a,b,c){a|=0,b|=0,c||H(a,b,this.length);for(var d=b,e=1,f=this[a+--d];d>0&&(e*=256);)f+=this[a+--d]*e;return e*=128,f>=e&&(f-=Math.pow(2,8*b)),f},f.prototype.readInt8=function(a,b){return b||H(a,1,this.length),128&this[a]?-1*(255-this[a]+1):this[a]},f.prototype.readInt16LE=function(a,b){b||H(a,2,this.length);var c=this[a]|this[a+1]<<8;return 32768&c?4294901760|c:c},f.prototype.readInt16BE=function(a,b){b||H(a,2,this.length);var c=this[a+1]|this[a]<<8;return 32768&c?4294901760|c:c},f.prototype.readInt32LE=function(a,b){return b||H(a,4,this.length),this[a]|this[a+1]<<8|this[a+2]<<16|this[a+3]<<24},f.prototype.readInt32BE=function(a,b){return b||H(a,4,this.length),this[a]<<24|this[a+1]<<16|this[a+2]<<8|this[a+3]},f.prototype.readFloatLE=function(a,b){return b||H(a,4,this.length),X.read(this,a,!0,23,4)},f.prototype.readFloatBE=function(a,b){return b||H(a,4,this.length),X.read(this,a,!1,23,4)},f.prototype.readDoubleLE=function(a,b){return b||H(a,8,this.length),X.read(this,a,!0,52,8)},f.prototype.readDoubleBE=function(a,b){return b||H(a,8,this.length),X.read(this,a,!1,52,8)},f.prototype.writeUIntLE=function(a,b,c,d){a=+a,b|=0,c|=0,d||I(this,a,b,c,Math.pow(2,8*c),0);var e=1,f=0;for(this[b]=255&a;++f=0&&(f*=256);)this[b+e]=a/f&255;return b+c},f.prototype.writeUInt8=function(a,b,c){return a=+a,b|=0,c||I(this,a,b,1,255,0),f.TYPED_ARRAY_SUPPORT||(a=Math.floor(a)),this[b]=255&a,b+1},f.prototype.writeUInt16LE=function(a,b,c){return a=+a,b|=0,c||I(this,a,b,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[b]=255&a,this[b+1]=a>>>8):J(this,a,b,!0),b+2},f.prototype.writeUInt16BE=function(a,b,c){return a=+a,b|=0,c||I(this,a,b,2,65535,0),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=255&a):J(this,a,b,!1),b+2},f.prototype.writeUInt32LE=function(a,b,c){return a=+a,b|=0,c||I(this,a,b,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[b+3]=a>>>24,this[b+2]=a>>>16,this[b+1]=a>>>8,this[b]=255&a):K(this,a,b,!0),b+4},f.prototype.writeUInt32BE=function(a,b,c){return a=+a,b|=0,c||I(this,a,b,4,4294967295,0),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+2]=a>>>8,this[b+3]=255&a):K(this,a,b,!1),b+4},f.prototype.writeIntLE=function(a,b,c,d){if(a=+a,b|=0,!d){var e=Math.pow(2,8*c-1);I(this,a,b,c,e-1,-e)}var f=0,g=1,h=a<0?1:0;for(this[b]=255&a;++f>0)-h&255;return b+c},f.prototype.writeIntBE=function(a,b,c,d){if(a=+a,b|=0,!d){var e=Math.pow(2,8*c-1);I(this,a,b,c,e-1,-e)}var f=c-1,g=1,h=a<0?1:0;for(this[b+f]=255&a;--f>=0&&(g*=256);)this[b+f]=(a/g>>0)-h&255;return b+c},f.prototype.writeInt8=function(a,b,c){return a=+a,b|=0,c||I(this,a,b,1,127,-128),f.TYPED_ARRAY_SUPPORT||(a=Math.floor(a)),a<0&&(a=255+a+1),this[b]=255&a,b+1},f.prototype.writeInt16LE=function(a,b,c){return a=+a,b|=0,c||I(this,a,b,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[b]=255&a,this[b+1]=a>>>8):J(this,a,b,!0),b+2},f.prototype.writeInt16BE=function(a,b,c){return a=+a,b|=0,c||I(this,a,b,2,32767,-32768),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>8,this[b+1]=255&a):J(this,a,b,!1),b+2},f.prototype.writeInt32LE=function(a,b,c){return a=+a,b|=0,c||I(this,a,b,4,2147483647,-2147483648),f.TYPED_ARRAY_SUPPORT?(this[b]=255&a,this[b+1]=a>>>8,this[b+2]=a>>>16,this[b+3]=a>>>24):K(this,a,b,!0),b+4},f.prototype.writeInt32BE=function(a,b,c){return a=+a,b|=0,c||I(this,a,b,4,2147483647,-2147483648),a<0&&(a=4294967295+a+1),f.TYPED_ARRAY_SUPPORT?(this[b]=a>>>24,this[b+1]=a>>>16,this[b+2]=a>>>8,this[b+3]=255&a):K(this,a,b,!1),b+4},f.prototype.writeFloatLE=function(a,b,c){return M(this,a,b,!0,c)},f.prototype.writeFloatBE=function(a,b,c){return M(this,a,b,!1,c)},f.prototype.writeDoubleLE=function(a,b,c){return N(this,a,b,!0,c)},f.prototype.writeDoubleBE=function(a,b,c){return N(this,a,b,!1,c)},f.prototype.copy=function(a,b,c,d){if(c||(c=0),d||0===d||(d=this.length),b>=a.length&&(b=a.length),b||(b=0),d>0&&d=this.length)throw new RangeError("sourceStart out of bounds");if(d<0)throw new RangeError("sourceEnd out of bounds");d>this.length&&(d=this.length),a.length-b=0;e--)a[e+b]=this[e+c];else if(g<1e3||!f.TYPED_ARRAY_SUPPORT)for(e=0;e=this.length)throw new RangeError("start out of bounds");if(c<0||c>this.length)throw new RangeError("end out of bounds");var d;if("number"==typeof a)for(d=b;d0&&this._events[a].length>c&&(this._events[a].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[a].length),"function"==typeof console.trace&&console.trace())}return this},d.prototype.on=d.prototype.addListener,d.prototype.once=function(a,b){function c(){this.removeListener(a,c),d||(d=!0,b.apply(this,arguments))}if(!e(b))throw TypeError("listener must be a function");var d=!1;return c.listener=b,this.on(a,c),this},d.prototype.removeListener=function(a,b){var c,d,f,h;if(!e(b))throw TypeError("listener must be a function");if(!this._events||!this._events[a])return this;if(c=this._events[a],f=c.length,d=-1,c===b||e(c.listener)&&c.listener===b)delete this._events[a],this._events.removeListener&&this.emit("removeListener",a,b);else if(g(c)){for(h=f;h-- >0;)if(c[h]===b||c[h].listener&&c[h].listener===b){d=h;break}if(d<0)return this;1===c.length?(c.length=0,delete this._events[a]):c.splice(d,1),this._events.removeListener&&this.emit("removeListener",a,b)}return this},d.prototype.removeAllListeners=function(a){var b,c;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[a]&&delete this._events[a],this;if(0===arguments.length){for(b in this._events)"removeListener"!==b&&this.removeAllListeners(b);return this.removeAllListeners("removeListener"),this._events={},this}if(c=this._events[a],e(c))this.removeListener(a,c);else for(;c.length;)this.removeListener(a,c[c.length-1]);return delete this._events[a],this},d.prototype.listeners=function(a){return this._events&&this._events[a]?e(this._events[a])?[this._events[a]]:this._events[a].slice():[]},d.listenerCount=function(a,b){return a._events&&a._events[b]?e(a._events[b])?1:a._events[b].length:0}},{}],14:[function(a,b,c){c.read=function(a,b,c,d,e){var f,g,h=8*e-d-1,i=(1<>1,k=-7,l=c?e-1:0,m=c?-1:1,n=a[b+l];for(l+=m,f=n&(1<<-k)-1,n>>=-k,k+=h;k>0;f=256*f+a[b+l],l+=m,k-=8);for(g=f&(1<<-k)-1,f>>=-k,k+=d;k>0;g=256*g+a[b+l],l+=m,k-=8);if(0===f)f=1-j;else{if(f===i)return g?NaN:1/0*(n?-1:1);g+=Math.pow(2,d),f-=j}return(n?-1:1)*g*Math.pow(2,f-d)},c.write=function(a,b,c,d,e,f){var g,h,i,j=8*f-e-1,k=(1<>1,m=23===e?Math.pow(2,-24)-Math.pow(2,-77):0,n=d?0:f-1,o=d?1:-1,p=b<0||0===b&&1/b<0?1:0;for(b=Math.abs(b),isNaN(b)||b===1/0?(h=isNaN(b)?1:0,g=k):(g=Math.floor(Math.log(b)/Math.LN2),b*(i=Math.pow(2,-g))<1&&(g--,i*=2),b+=g+l>=1?m/i:m*Math.pow(2,1-l),b*i>=2&&(g++,i/=2),g+l>=k?(h=0,g=k):g+l>=1?(h=(b*i-1)*Math.pow(2,e),g+=l):(h=b*Math.pow(2,l-1)*Math.pow(2,e),g=0));e>=8;a[c+n]=255&h,n+=o,h/=256,e-=8);for(g=g<0;a[c+n]=255&g,n+=o,g/=256,j-=8);a[c+n-o]|=128*p}},{}],15:[function(a,b,c){"function"==typeof Object.create?b.exports=function(a,b){a.super_=b,a.prototype=Object.create(b.prototype,{constructor:{value:a,enumerable:!1,writable:!0,configurable:!0}})}:b.exports=function(a,b){a.super_=b;var c=function(){};c.prototype=b.prototype,a.prototype=new c,a.prototype.constructor=a}},{}],16:[function(a,b,c){function d(a){return!!a.constructor&&"function"==typeof a.constructor.isBuffer&&a.constructor.isBuffer(a)}function e(a){return"function"==typeof a.readFloatLE&&"function"==typeof a.slice&&d(a.slice(0,0))}/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ +b.exports=function(a){return null!=a&&(d(a)||e(a)||!!a._isBuffer)}},{}],17:[function(a,b,c){(function(a){"use strict";function c(b,c,d,e){if("function"!=typeof b)throw new TypeError('"callback" argument must be a function');var f,g,h=arguments.length;switch(h){case 0:case 1:return a.nextTick(b);case 2:return a.nextTick(function(){b.call(null,c)});case 3:return a.nextTick(function(){b.call(null,c,d)});case 4:return a.nextTick(function(){b.call(null,c,d,e)});default:for(f=new Array(h-1),g=0;g1)for(var c=1;c0?("string"==typeof b||g.objectMode||Object.getPrototypeOf(b)===L.prototype||(b=e(b)),d?g.endEmitted?a.emit("error",new Error("stream.unshift() after end event")):k(a,g,b,!0):g.ended?a.emit("error",new Error("stream.push() after EOF")):(g.reading=!1,g.decoder&&!c?(b=g.decoder.write(b),g.objectMode||0!==b.length?k(a,g,b,!1):s(a,g)):k(a,g,b,!1))):d||(g.reading=!1)}return m(g)}function k(a,b,c,d){b.flowing&&0===b.length&&!b.sync?(a.emit("data",c),a.read(0)):(b.length+=b.objectMode?1:c.length,d?b.buffer.unshift(c):b.buffer.push(c),b.needReadable&&q(a)),s(a,b)}function l(a,b){var c;return f(b)||"string"==typeof b||void 0===b||a.objectMode||(c=new TypeError("Invalid non-string/buffer chunk")),c}function m(a){return!a.ended&&(a.needReadable||a.length=U?a=U:(a--,a|=a>>>1,a|=a>>>2,a|=a>>>4,a|=a>>>8,a|=a>>>16,a++),a}function o(a,b){return a<=0||0===b.length&&b.ended?0:b.objectMode?1:a!==a?b.flowing&&b.length?b.buffer.head.data.length:b.length:(a>b.highWaterMark&&(b.highWaterMark=n(a)),a<=b.length?a:b.ended?b.length:(b.needReadable=!0,0))}function p(a,b){if(!b.ended){if(b.decoder){var c=b.decoder.end();c&&c.length&&(b.buffer.push(c),b.length+=b.objectMode?1:c.length)}b.ended=!0,q(a)}}function q(a){var b=a._readableState;b.needReadable=!1,b.emittedReadable||(P("emitReadable",b.flowing),b.emittedReadable=!0,b.sync?G.nextTick(r,a):r(a))}function r(a){P("emit readable"),a.emit("readable"),y(a)}function s(a,b){b.readingMore||(b.readingMore=!0,G.nextTick(t,a,b))}function t(a,b){for(var c=b.length;!b.reading&&!b.flowing&&!b.ended&&b.length=b.length?(c=b.decoder?b.buffer.join(""):1===b.buffer.length?b.buffer.head.data:b.buffer.concat(b.length),b.buffer.clear()):c=A(a,b.buffer,b.decoder),c}function A(a,b,c){var d;return af.length?f.length:a;if(g===f.length?e+=f:e+=f.slice(0,a),0===(a-=g)){g===f.length?(++d,c.next?b.head=c.next:b.head=b.tail=null):(b.head=c,c.data=f.slice(g));break}++d}return b.length-=d,e}function C(a,b){var c=L.allocUnsafe(a),d=b.head,e=1;for(d.data.copy(c),a-=d.data.length;d=d.next;){var f=d.data,g=a>f.length?f.length:a;if(f.copy(c,c.length-a,0,g),0===(a-=g)){g===f.length?(++e,d.next?b.head=d.next:b.head=b.tail=null):(b.head=d,d.data=f.slice(g));break}++e}return b.length-=e,c}function D(a){var b=a._readableState;if(b.length>0)throw new Error('"endReadable()" called on non-empty stream');b.endEmitted||(b.ended=!0,G.nextTick(E,b,a))}function E(a,b){a.endEmitted||0!==a.length||(a.endEmitted=!0,b.readable=!1,b.emit("end"))}function F(a,b){for(var c=0,d=a.length;c=b.highWaterMark||b.ended))return P("read: emitReadable",b.length,b.ended),0===b.length&&b.ended?D(this):q(this),null;if(0===(a=o(a,b))&&b.ended)return 0===b.length&&D(this),null;var d=b.needReadable;P("need readable",d),(0===b.length||b.length-a0?z(a,b):null,null===e?(b.needReadable=!0,a=0):b.length-=a,0===b.length&&(b.ended||(b.needReadable=!0),c!==a&&b.ended&&D(this)),null!==e&&this.emit("data",e),e},i.prototype._read=function(a){this.emit("error",new Error("_read() is not implemented"))},i.prototype.pipe=function(a,b){function d(a,b){P("onunpipe"),a===m&&b&&!1===b.hasUnpiped&&(b.hasUnpiped=!0,f())}function e(){P("onend"),a.end()}function f(){P("cleanup"),a.removeListener("close",j),a.removeListener("finish",k),a.removeListener("drain",q),a.removeListener("error",i),a.removeListener("unpipe",d),m.removeListener("end",e),m.removeListener("end",l),m.removeListener("data",h),r=!0,!n.awaitDrain||a._writableState&&!a._writableState.needDrain||q()}function h(b){P("ondata"),s=!1,!1!==a.write(b)||s||((1===n.pipesCount&&n.pipes===a||n.pipesCount>1&&-1!==F(n.pipes,a))&&!r&&(P("false write response, pause",m._readableState.awaitDrain),m._readableState.awaitDrain++,s=!0),m.pause())}function i(b){P("onerror",b),l(),a.removeListener("error",i),0===J(a,"error")&&a.emit("error",b)}function j(){a.removeListener("finish",k),l()}function k(){P("onfinish"),a.removeListener("close",j),l()}function l(){P("unpipe"),m.unpipe(a)}var m=this,n=this._readableState;switch(n.pipesCount){case 0:n.pipes=a;break;case 1:n.pipes=[n.pipes,a];break;default:n.pipes.push(a)}n.pipesCount+=1,P("pipe count=%d opts=%j",n.pipesCount,b);var o=(!b||!1!==b.end)&&a!==c.stdout&&a!==c.stderr,p=o?e:l;n.endEmitted?G.nextTick(p):m.once("end",p),a.on("unpipe",d);var q=u(m);a.on("drain",q);var r=!1,s=!1;return m.on("data",h),g(a,"error",i),a.once("close",j),a.once("finish",k),a.emit("pipe",m),n.flowing||(P("pipe resume"),m.resume()),a},i.prototype.unpipe=function(a){var b=this._readableState,c={hasUnpiped:!1};if(0===b.pipesCount)return this;if(1===b.pipesCount)return a&&a!==b.pipes?this:(a||(a=b.pipes),b.pipes=null,b.pipesCount=0,b.flowing=!1,a&&a.emit("unpipe",this,c),this);if(!a){var d=b.pipes,e=b.pipesCount;b.pipes=null,b.pipesCount=0,b.flowing=!1;for(var f=0;f-1?setImmediate:B.nextTick;j.WritableState=i;var E=a(12);E.inherits=a(15);var F={deprecate:a(37)},G=a(27),H=a(34).Buffer,I=d.Uint8Array||function(){},J=a(26);E.inherits(j,G),i.prototype.getBuffer=function(){for(var a=this.bufferedRequest,b=[];a;)b.push(a),a=a.next;return b},function(){try{Object.defineProperty(i.prototype,"buffer",{get:F.deprecate(function(){return this.getBuffer()},"_writableState.buffer is deprecated. Use _writableState.getBuffer instead.","DEP0003")})}catch(a){}}();var K;"function"==typeof Symbol&&Symbol.hasInstance&&"function"==typeof Function.prototype[Symbol.hasInstance]?(K=Function.prototype[Symbol.hasInstance],Object.defineProperty(j,Symbol.hasInstance,{value:function(a){return!!K.call(this,a)||this===j&&(a&&a._writableState instanceof i)}})):K=function(a){return a instanceof this},j.prototype.pipe=function(){this.emit("error",new Error("Cannot pipe, not readable"))},j.prototype.write=function(a,b,c){var d=this._writableState,e=!1,i=!d.objectMode&&g(a);return i&&!H.isBuffer(a)&&(a=f(a)),"function"==typeof b&&(c=b,b=null),i?b="buffer":b||(b=d.defaultEncoding),"function"!=typeof c&&(c=h),d.ended?k(this,c):(i||l(this,d,a,c))&&(d.pendingcb++,e=n(this,d,i,a,b,c)),e},j.prototype.cork=function(){this._writableState.corked++},j.prototype.uncork=function(){var a=this._writableState;a.corked&&(a.corked--,a.writing||a.corked||a.finished||a.bufferProcessing||!a.bufferedRequest||u(this,a))},j.prototype.setDefaultEncoding=function(a){if("string"==typeof a&&(a=a.toLowerCase()),!(["hex","utf8","utf-8","ascii","binary","base64","ucs2","ucs-2","utf16le","utf-16le","raw"].indexOf((a+"").toLowerCase())>-1))throw new TypeError("Unknown encoding: "+a);return this._writableState.defaultEncoding=a,this},Object.defineProperty(j.prototype,"writableHighWaterMark",{enumerable:!1,get:function(){return this._writableState.highWaterMark}}),j.prototype._write=function(a,b,c){c(new Error("_write() is not implemented"))},j.prototype._writev=null,j.prototype.end=function(a,b,c){var d=this._writableState;"function"==typeof a?(c=a,a=null,b=null):"function"==typeof b&&(c=b,b=null),null!==a&&void 0!==a&&this.write(a,b),d.corked&&(d.corked=1,this.uncork()),d.ending||d.finished||z(this,d,c)},Object.defineProperty(j.prototype,"destroyed",{get:function(){return void 0!==this._writableState&&this._writableState.destroyed},set:function(a){this._writableState&&(this._writableState.destroyed=a)}}),j.prototype.destroy=J.destroy,j.prototype._undestroy=J.undestroy,j.prototype._destroy=function(a,b){this.end(),b(a)}}).call(this,a(18),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{12:12,15:15,17:17,18:18,20:20,26:26,27:27,34:34,37:37}],25:[function(a,b,c){"use strict";function d(a,b){if(!(a instanceof b))throw new TypeError("Cannot call a class as a function")}function e(a,b,c){a.copy(b,c)}var f=a(34).Buffer,g=a(9);b.exports=function(){function a(){d(this,a),this.head=null,this.tail=null,this.length=0}return a.prototype.push=function(a){var b={data:a,next:null};this.length>0?this.tail.next=b:this.head=b,this.tail=b,++this.length},a.prototype.unshift=function(a){var b={data:a,next:this.head};0===this.length&&(this.tail=b),this.head=b,++this.length},a.prototype.shift=function(){if(0!==this.length){var a=this.head.data;return 1===this.length?this.head=this.tail=null:this.head=this.head.next,--this.length,a}},a.prototype.clear=function(){this.head=this.tail=null,this.length=0},a.prototype.join=function(a){if(0===this.length)return"";for(var b=this.head,c=""+b.data;b=b.next;)c+=a+b.data;return c},a.prototype.concat=function(a){if(0===this.length)return f.alloc(0);if(1===this.length)return this.head.data;for(var b=f.allocUnsafe(a>>>0),c=this.head,d=0;c;)e(c.data,b,d),d+=c.data.length,c=c.next;return b},a}(),g&&g.inspect&&g.inspect.custom&&(b.exports.prototype[g.inspect.custom]=function(){var a=g.inspect({length:this.length});return this.constructor.name+" "+a})},{34:34,9:9}],26:[function(a,b,c){"use strict";function d(a,b){var c=this,d=this._readableState&&this._readableState.destroyed,e=this._writableState&&this._writableState.destroyed;return d||e?(b?b(a):!a||this._writableState&&this._writableState.errorEmitted||g.nextTick(f,this,a),this):(this._readableState&&(this._readableState.destroyed=!0),this._writableState&&(this._writableState.destroyed=!0),this._destroy(a||null,function(a){!b&&a?(g.nextTick(f,c,a),c._writableState&&(c._writableState.errorEmitted=!0)):b&&b(a)}),this)}function e(){this._readableState&&(this._readableState.destroyed=!1,this._readableState.reading=!1,this._readableState.ended=!1,this._readableState.endEmitted=!1),this._writableState&&(this._writableState.destroyed=!1,this._writableState.ended=!1,this._writableState.ending=!1,this._writableState.finished=!1,this._writableState.errorEmitted=!1)}function f(a,b){a.emit("error",b)}var g=a(17);b.exports={destroy:d,undestroy:e}},{17:17}],27:[function(a,b,c){b.exports=a(13).EventEmitter},{13:13}],28:[function(a,b,c){arguments[4][11][0].apply(c,arguments)},{11:11}],29:[function(a,b,c){"use strict";function d(a){if(!a)return"utf8";for(var b;;)switch(a){case"utf8":case"utf-8":return"utf8";case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return"utf16le";case"latin1":case"binary":return"latin1";case"base64":case"ascii":case"hex":return a;default:if(b)return;a=(""+a).toLowerCase(),b=!0}}function e(a){var b=d(a);if("string"!=typeof b&&(s.isEncoding===t||!t(a)))throw new Error("Unknown encoding: "+a);return b||a}function f(a){this.encoding=e(a);var b;switch(this.encoding){case"utf16le":this.text=m,this.end=n,b=4;break;case"utf8":this.fillLast=j,b=4;break;case"base64":this.text=o,this.end=p,b=3;break;default:return this.write=q,void(this.end=r)}this.lastNeed=0,this.lastTotal=0,this.lastChar=s.allocUnsafe(b)}function g(a){return a<=127?0:a>>5==6?2:a>>4==14?3:a>>3==30?4:a>>6==2?-1:-2}function h(a,b,c){var d=b.length-1;if(d=0?(e>0&&(a.lastNeed=e-1),e):--d=0?(e>0&&(a.lastNeed=e-2),e):--d=0?(e>0&&(2===e?e=0:a.lastNeed=e-3),e):0)}function i(a,b,c){if(128!=(192&b[0]))return a.lastNeed=0,"�";if(a.lastNeed>1&&b.length>1){if(128!=(192&b[1]))return a.lastNeed=1,"�";if(a.lastNeed>2&&b.length>2&&128!=(192&b[2]))return a.lastNeed=2,"�"}}function j(a){var b=this.lastTotal-this.lastNeed,c=i(this,a,b);return void 0!==c?c:this.lastNeed<=a.length?(a.copy(this.lastChar,b,0,this.lastNeed),this.lastChar.toString(this.encoding,0,this.lastTotal)):(a.copy(this.lastChar,b,0,a.length),void(this.lastNeed-=a.length))}function k(a,b){var c=h(this,a,b);if(!this.lastNeed)return a.toString("utf8",b);this.lastTotal=c;var d=a.length-(c-this.lastNeed);return a.copy(this.lastChar,0,d),a.toString("utf8",b,d)}function l(a){var b=a&&a.length?this.write(a):"";return this.lastNeed?b+"�":b}function m(a,b){if((a.length-b)%2==0){var c=a.toString("utf16le",b);if(c){var d=c.charCodeAt(c.length-1);if(d>=55296&&d<=56319)return this.lastNeed=2,this.lastTotal=4,this.lastChar[0]=a[a.length-2],this.lastChar[1]=a[a.length-1],c.slice(0,-1)}return c}return this.lastNeed=1,this.lastTotal=2,this.lastChar[0]=a[a.length-1],a.toString("utf16le",b,a.length-1)}function n(a){var b=a&&a.length?this.write(a):"";if(this.lastNeed){var c=this.lastTotal-this.lastNeed;return b+this.lastChar.toString("utf16le",0,c)}return b}function o(a,b){var c=(a.length-b)%3;return 0===c?a.toString("base64",b):(this.lastNeed=3-c,this.lastTotal=3,1===c?this.lastChar[0]=a[a.length-1]:(this.lastChar[0]=a[a.length-2],this.lastChar[1]=a[a.length-1]),a.toString("base64",b,a.length-c))}function p(a){var b=a&&a.length?this.write(a):"";return this.lastNeed?b+this.lastChar.toString("base64",0,3-this.lastNeed):b}function q(a){return a.toString(this.encoding)}function r(a){return a&&a.length?this.write(a):""}var s=a(34).Buffer,t=s.isEncoding||function(a){switch((a=""+a)&&a.toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":case"raw":return!0;default:return!1}};c.StringDecoder=f,f.prototype.write=function(a){if(0===a.length)return"";var b,c;if(this.lastNeed){if(void 0===(b=this.fillLast(a)))return"";c=this.lastNeed,this.lastNeed=0}else c=0;return c=this.charLength-this.charReceived?this.charLength-this.charReceived:a.length;if(a.copy(this.charBuffer,this.charReceived,0,c),this.charReceived+=c,this.charReceived=55296&&d<=56319)){if(this.charReceived=this.charLength=0,0===a.length)return b;break}this.charLength+=this.surrogateSize,b=""}this.detectIncompleteChar(a);var e=a.length;this.charLength&&(a.copy(this.charBuffer,0,a.length-this.charReceived,e),e-=this.charReceived),b+=a.toString(this.encoding,0,e);var e=b.length-1,d=b.charCodeAt(e);if(d>=55296&&d<=56319){var f=this.surrogateSize;return this.charLength+=f,this.charReceived+=f,this.charBuffer.copy(this.charBuffer,f,0,f),a.copy(this.charBuffer,0,0,f),b.substring(0,e)}return b},j.prototype.detectIncompleteChar=function(a){for(var b=a.length>=3?3:a.length;b>0;b--){var c=a[a.length-b];if(1==b&&c>>5==6){this.charLength=2;break}if(b<=2&&c>>4==14){this.charLength=3;break}if(b<=3&&c>>3==30){this.charLength=4;break}}this.charReceived=b},j.prototype.end=function(a){var b="";if(a&&a.length&&(b=this.write(a)),this.charReceived){var c=this.charReceived,d=this.charBuffer,e=this.encoding;b+=d.slice(0,c).toString(e)}return b}},{10:10}],37:[function(a,b,c){(function(a){function c(a,b){function c(){if(!e){if(d("throwDeprecation"))throw new Error(b);d("traceDeprecation")?console.trace(b):console.warn(b),e=!0}return a.apply(this,arguments)}if(d("noDeprecation"))return a;var e=!1;return c}function d(b){try{if(!a.localStorage)return!1}catch(d){return!1}var c=a.localStorage[b];return null!=c&&"true"===String(c).toLowerCase()}b.exports=c}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],38:[function(a,b,c){!function(a,b,c,d,e){function f(a){this.node=a}function g(){this.events=[],this.head=null,this.body=null}function h(){this.styling=null,this.layout=null}function i(){this.styles={}}function j(){this.id=null,this.styleAttrs=null,this.styleRefs=null}function k(){this.regions={}}function l(a){this.kind=a,this.begin=null,this.end=null,this.styleAttrs=null,this.regionID=null,this.sets=null,this.timeContainer=null}function m(){l.call(this,"body")}function n(){l.call(this,"div")}function o(){l.call(this,"p")}function p(){l.call(this,"span"),this.space=null}function q(){l.call(this,"span"),this.space=null,this.text=null}function r(){l.call(this,"br")}function s(){this.id=null,this.begin=null,this.end=null,this.styleAttrs=null,this.sets=null}function t(){this.begin=null,this.end=null,this.qname=null,this.value=null}function u(a){return a&&"xml:id"in a.attributes?a.attributes["xml:id"].value||null:null}function v(a){return a&&"region"in a.attributes?a.attributes.region.value:""}function w(a,b){var c=a&&"timeContainer"in a.attributes?a.attributes.timeContainer.value:null;return c&&"par"!==c?"seq"===c?"seq":(K(b,"Illegal value of timeContainer (assuming 'par')"),"par"):"par"}function x(a){return a&&"style"in a.attributes?a.attributes.style.value.split(" "):[]}function y(a,b){var c={};if(null!==a)for(var e in a.attributes){var f=a.attributes[e].uri+" "+a.attributes[e].local,g=d.byQName[f];if(void 0!==g){var h=g.parse(a.attributes[e].value);null!==h?(c[f]=h,g===d.byName.zIndex&&J(b,"zIndex attribute present but not used by IMSC1 since regions do not overlap")):K(b,"Cannot parse styling attribute "+f+" --\x3e "+a.attributes[e].value)}}return c}function z(a,b,c){for(var d in a.attributes)if(a.attributes[d].uri===b&&a.attributes[d].local===c)return a.attributes[d].value;return null}function A(a,b){var d=z(a,c.ns_ittp,"aspectRatio"),e=null;if(null!==d){var f=/(\d+) (\d+)/,g=f.exec(d);if(null!==g){var h=parseInt(g[1]),i=parseInt(g[2]);0!==h&&0!==i?e=h/i:K(b,"Illegal aspectRatio values (ignoring)")}else K(b,"Malformed aspectRatio attribute (ignoring)")}return e}function B(a,b){var d=z(a,c.ns_ttp,"cellResolution"),e=15,f=32;if(null!==d){var g=/(\d+) (\d+)/,h=g.exec(d);null!==h?(f=parseInt(h[1]),e=parseInt(h[2])):J(b,"Malformed cellResolution value (using initial value instead)")}return{w:f,h:e}}function C(a,b){var d,e=z(a,c.ns_ttp,"frameRate"),f=30;if(null!==e){d=/(\d+)/.exec(e),null!==d?f=parseInt(d[1]):J(b,"Malformed frame rate attribute (using initial value instead)")}var g=z(a,c.ns_ttp,"frameRateMultiplier"),h=1;if(null!==g){d=/(\d+) (\d+)/.exec(g),null!==d?h=parseInt(d[1])/parseInt(d[2]):J(b,"Malformed frame rate multiplier attribute (using initial value instead)")}var i=h*f,j=1,k=z(a,c.ns_ttp,"tickRate");if(null===k)null!==e&&(j=i);else{d=/(\d+)/.exec(k),null!==d?j=parseInt(d[1]):J(b,"Malformed tick rate attribute (using initial value instead)")}return{effectiveFrameRate:i,tickRate:j}}function D(a,b){var d=z(a,c.ns_tts,"extent");if(null===d)return null;var f=d.split(" ");if(2!==f.length)return J(b,"Malformed extent (ignoring)"),null;var g=e.parseLength(f[0]),h=e.parseLength(f[1]);return h&&g?{h:h,w:g}:(J(b,"Malformed extent values (ignoring)"),null)}function E(a,b,c){var d,e=/^(\d{2,}):(\d\d):(\d\d(?:\.\d+)?)$/,f=/^(\d{2,}):(\d\d):(\d\d)\:(\d{2,})$/,g=/^(\d+(?:\.\d+)?)f$/,h=/^(\d+(?:\.\d+)?)t$/,i=/^(\d+(?:\.\d+)?)ms$/,j=/^(\d+(?:\.\d+)?)s$/,k=/^(\d+(?:\.\d+)?)h$/,l=/^(\d+(?:\.\d+)?)m$/,m=null;return null!==(d=g.exec(c))?null!==b&&(m=parseFloat(d[1])/b):null!==(d=h.exec(c))?null!==a&&(m=parseFloat(d[1])/a):null!==(d=i.exec(c))?m=parseFloat(d[1])/1e3:null!==(d=j.exec(c))?m=parseFloat(d[1]):null!==(d=k.exec(c))?m=3600*parseFloat(d[1]):null!==(d=l.exec(c))?m=60*parseFloat(d[1]):null!==(d=e.exec(c))?m=3600*parseInt(d[1])+60*parseInt(d[2])+parseFloat(d[3]):null!==(d=f.exec(c))&&null!==b&&(m=3600*parseInt(d[1])+60*parseInt(d[2])+parseInt(d[3])+(null===d[4]?0:parseInt(d[4])/b)),m}function F(a,b,c,d){var e=b&&"seq"===b.timeContainer,f=0;c&&"begin"in c.attributes&&null===(f=E(a.tickRate,a.effectiveFrameRate,c.attributes.begin.value))&&(J(d,"Malformed begin value "+c.attributes.begin.value+" (using 0)"),f=0);var g=e?0:null;c&&"dur"in c.attributes&&null===(g=E(a.tickRate,a.effectiveFrameRate,c.attributes.dur.value))&&J(d,"Malformed dur value "+c.attributes.dur.value+" (ignoring)");var h=null;c&&"end"in c.attributes&&null===(h=E(a.tickRate,a.effectiveFrameRate,c.attributes.end.value))&&J(d,"Malformed end value (ignoring)");var i=0;if(b&&(i=e&&"contents"in b&&b.contents.length>0?b.contents[b.contents.length-1].end:b.begin||0),f+=i,null!==g)h=f+g;else{var j=b&&"end"in b?b.end:Number.POSITIVE_INFINITY;h=null!==h?h+i:j}return{begin:f,end:h}}function G(a,b,c){for(;b.styleRefs.length>0;){var d=b.styleRefs.pop();d in a.styles?(G(a,a.styles[d],c),I(a.styles[d].styleAttrs,b.styleAttrs)):K(c,"Non-existant style id referenced")}}function H(a,b,c,d){for(var e=b.length-1;e>=0;e--){var f=b[e];f in a.styles?I(a.styles[f].styleAttrs,c):K(d,"Non-existant style id referenced")}}function I(a,b){for(var c in a)c in b||(b[c]=a[c])}function J(a,b){if(a&&a.warn&&a.warn(b))throw b}function K(a,b){if(a&&a.error&&a.error(b))throw b}function L(a,b){throw a&&a.fatal&&a.fatal(b),b}function M(a,b){for(var c,d=0,e=a.length-1;d<=e;){c=Math.floor((d+e)/2);var f=a[c];if(fb))return{found:!0,index:c};e=c-1}}return{found:!1,index:d}}a.fromXML=function(a,d,e){var l=b.parser(!0,{xmlns:!0}),u=[],v=[],w=[],x=0,y=null;l.onclosetag=function(a){if(u[0]instanceof i)for(var b in u[0].styles)G(u[0],u[0].styles[b],d);else if(u[0]instanceof o||u[0]instanceof p){if(u[0].contents.length>1){var g,h=[u[0].contents[0]];for(g=1;g0&&e&&"onCloseTag"in e&&e.onCloseTag());w.shift(),v.shift(),u.shift()},l.ontext=function(a){if(void 0===u[0]);else if(u[0]instanceof p||u[0]instanceof o){var b=new q;b.initFromText(y,u[0],a,w[0],d),u[0].contents.push(b)}else u[0]instanceof f&&x>0&&e&&"onText"in e&&e.onText(a)},l.onopentag=function(a){var b=a.attributes["xml:space"];b?w.unshift(b.value):0===w.length?w.unshift("default"):w.unshift(w[0]);var l=a.attributes["xml:lang"];if(l?v.unshift(l.value):0===v.length?v.unshift(""):v.unshift(v[0]),a.uri===c.ns_tt)if("tt"===a.local)null!==y&&L("Two elements at ("+this.line+","+this.column+")"),y=new g,y.initFromNode(a,d),u.unshift(y);else if("head"===a.local)u[0]instanceof g||L("Parent of element is not at ("+this.line+","+this.column+")"),null!==y.head&&L("Second element at ("+this.line+","+this.column+")"),y.head=new h,u.unshift(y.head);else if("styling"===a.local)u[0]instanceof h||L("Parent of element is not at ("+this.line+","+this.column+")"),null!==y.head.styling&&L("Second element at ("+this.line+","+this.column+")"),y.head.styling=new i,u.unshift(y.head.styling);else if("style"===a.local){var q;u[0]instanceof i?(q=new j,q.initFromNode(a,d),q.id?y.head.styling.styles[q.id]=q:K("
"); + H.SetBody(""+streamName+"
"); if ((uAgent.find("iPad") != std::string::npos) || (uAgent.find("iPod") != std::string::npos) || (uAgent.find("iPhone") != std::string::npos)) { H.SetHeader("Location",hlsUrl); H.SendResponse("307", "HLS redirect", myConn); @@ -568,7 +571,7 @@ namespace Mist { return; } - if ((H.url.length() > 9 && H.url.substr(0, 6) == "/info_" && H.url.substr(H.url.length() - 3, 3) == ".js") || (H.url.length() > 10 && H.url.substr(0, 7) == "/embed_" && H.url.substr(H.url.length() - 3, 3) == ".js") || (H.url.length() > 9 && H.url.substr(0, 6) == "/json_" && H.url.substr(H.url.length() - 3, 3) == ".js")){ + if ((H.url.length() > 9 && H.url.substr(0, 6) == "/info_" && H.url.substr(H.url.length() - 3, 3) == ".js") || (H.url.length() > 9 && H.url.substr(0, 6) == "/json_" && H.url.substr(H.url.length() - 3, 3) == ".js")){ if (websocketHandler()){return;} std::string reqHost = HTTP::URL(H.GetHeader("Host")).host; std::string useragent = H.GetVar("ua"); @@ -600,24 +603,13 @@ namespace Mist { }else{ response = json_resp.toString(); } - if (rURL.substr(0, 7) == "/embed_" && !json_resp.isMember("error")){ - #include "embed.js.h" - response.append("\n("); - if (embed_js[embed_js_len - 2] == ';'){//check if we have a trailing ;\n or just \n - response.append((char*)embed_js, (size_t)embed_js_len - 2); //remove trailing ";\n" from xxd conversion - }else{ - response.append((char*)embed_js, (size_t)embed_js_len - 1); //remove trailing "\n" from xxd conversion - } - response.append("(\"" + streamName + "\"));\n"); - } H.SetBody(response); H.SendResponse("200", "OK", myConn); H.Clean(); return; } //embed code generator - - if (H.url == "/player.js"){ + if ((H.url == "/player.js") || ((H.url.substr(0, 7) == "/embed_") && (H.url.length() > 10) && (H.url.substr(H.url.length() - 3, 3) == ".js"))){ HTTP::URL fullURL(H.GetHeader("Host")); if (!fullURL.protocol.size()){ fullURL.protocol = getProtocolForPort(fullURL.getPort()); @@ -627,7 +619,7 @@ namespace Mist { H.Clean(); H.SetHeader("Server", "MistServer/" PACKAGE_VERSION); H.setCORSHeaders(); - H.SetHeader("Content-Type", "application/javascript"); + H.SetHeader("Content-Type", "application/javascript; charset=utf-8"); if(method == "OPTIONS" || method == "HEAD"){ H.SendResponse("200", "OK", myConn); H.Clean(); @@ -635,8 +627,10 @@ namespace Mist { } response.append("if (typeof mistoptions == 'undefined') { mistoptions = {}; }\nif (!('host' in mistoptions)) { mistoptions.host = '"+fullURL.getUrl()+"'; }\n"); - #include "core.js.h" - response.append((char*)core_js, (size_t)core_js_len); + + #include "player.js.h" + response.append((char*)player_js, (size_t)player_js_len); + jsonForEach(config->getOption("wrappers",true),it){ bool used = false; if (it->asStringRef() == "html5"){ @@ -649,26 +643,6 @@ namespace Mist { response.append((char*)flash_strobe_js, (size_t)flash_strobe_js_len); used = true; } - if (it->asStringRef() == "silverlight"){ - #include "silverlight.js.h" - response.append((char*)silverlight_js, (size_t)silverlight_js_len); - used = true; - } - if (it->asStringRef() == "theoplayer"){ - #include "theoplayer.js.h" - response.append((char*)theoplayer_js, (size_t)theoplayer_js_len); - used = true; - } - if (it->asStringRef() == "jwplayer"){ - #include "jwplayer.js.h" - response.append((char*)jwplayer_js, (size_t)jwplayer_js_len); - used = true; - } - if (it->asStringRef() == "polytrope"){ - #include "polytrope.js.h" - response.append((char*)polytrope_js, (size_t)polytrope_js_len); - used = true; - } if (it->asStringRef() == "dashjs"){ #include "dashjs.js.h" response.append((char*)dash_js, (size_t)dash_js_len); @@ -679,9 +653,9 @@ namespace Mist { response.append((char*)video_js, (size_t)video_js_len); used = true; } - if (it->asStringRef() == "img"){ - #include "img.js.h" - response.append((char*)img_js, (size_t)img_js_len); + if (it->asStringRef() == "webrtc"){ + #include "webrtc.js.h" + response.append((char*)webrtc_js, (size_t)webrtc_js_len); used = true; } if (!used) { @@ -689,6 +663,10 @@ namespace Mist { } } + if ((rURL.substr(0, 7) == "/embed_") && (rURL.length() > 10) && (rURL.substr(rURL.length() - 3, 3) == ".js")){ + response.append("var container = document.createElement(\"div\");\ncontainer.id = \""+streamName+"\";\ndocument.write(container.outerHTML);\nmistPlay(\""+streamName+"\",{target:document.getElementById(\""+streamName+"\")});"); + } + H.SetBody(response); H.SendResponse("200", "OK", myConn); H.Clean(); @@ -696,8 +674,9 @@ namespace Mist { } - if (H.url == "/player.css"){ + if (H.url.substr(0, 7) == "/skins/"){ std::string response; + std::string url = H.url; H.Clean(); H.SetHeader("Server", "MistServer/" PACKAGE_VERSION); H.setCORSHeaders(); @@ -708,8 +687,24 @@ namespace Mist { return; } - #include "mist.css.h" - response.append((char*)mist_css, (size_t)mist_css_len); + if (url == "/skins/default.css") { + #include "skin_default.css.h" + response.append((char*)skin_default_css, (size_t)skin_default_css_len); + } + else if (url == "/skins/dev.css") { + #include "skin_dev.css.h" + response.append((char*)skin_dev_css, (size_t)skin_dev_css_len); + } + else if (url == "/skins/videojs.css") { + #include "skin_videojs.css.h" + response.append((char*)skin_videojs_css, (size_t)skin_videojs_css_len); + } + else { + H.SetBody("Unknown stylesheet: "+url); + H.SendResponse("404", "Unknown stylesheet", myConn); + H.Clean(); + return; + } H.SetBody(response); H.SendResponse("200", "OK", myConn); @@ -728,10 +723,8 @@ namespace Mist { return; } - #include "playervideo.js.h" - response.append((char*)playervideo_js, (size_t)playervideo_js_len); - #include "playerhlsvideo.js.h" - response.append((char*)playerhlsvideo_js, (size_t)playerhlsvideo_js_len); + #include "player_video.js.h" + response.append((char*)player_video_js, (size_t)player_video_js_len); H.SetBody(response); H.SendResponse("200", "OK", myConn); @@ -750,10 +743,30 @@ namespace Mist { return; } - #include "playerdashlic.js.h" - response.append((char*)playerdashlic_js, (size_t)playerdashlic_js_len); - #include "playerdash.js.h" - response.append((char*)playerdash_js, (size_t)playerdash_js_len); + #include "player_dash_lic.js.h" + response.append((char*)player_dash_lic_js, (size_t)player_dash_lic_js_len); + #include "player_dash.js.h" + response.append((char*)player_dash_js, (size_t)player_dash_js_len); + + H.SetBody(response); + H.SendResponse("200", "OK", myConn); + H.Clean(); + return; + } + if (H.url == "/webrtc.js"){ + std::string response; + H.Clean(); + H.SetHeader("Server", "MistServer/" PACKAGE_VERSION); + H.setCORSHeaders(); + H.SetHeader("Content-Type", "application/javascript"); + if (method == "OPTIONS" || method == "HEAD"){ + H.SendResponse("200", "OK", myConn); + H.Clean(); + return; + } + + #include "player_webrtc.js.h" + response.append((char*)player_webrtc_js, (size_t)player_webrtc_js_len); H.SetBody(response); H.SendResponse("200", "OK", myConn);