mistplayers.videojs={name:"VideoJS player",mimes:["html5/application/vnd.apple.mpegurl","html5/application/vnd.apple.mpegurl;version=7"],priority:MistUtil.object.keys(mistplayers).length+1,isMimeSupported:function(e){return this.mimes.indexOf(e)==-1?false:true},isBrowserSupported:function(e,i,t){if(location.protocol!=MistUtil.http.url.split(i.url).protocol){t.log("HTTP/HTTPS mismatch for this source");return false}if(location.protocol=="file:"&&e=="html5/application/vnd.apple"){t.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,i){var t=this;var r;function o(){if(e.destroyed){return}e.log("Building VideoJS player..");r=document.createElement("video");if(e.source.type!="html5/video/ogg"){r.crossOrigin="anonymous"}var o=e.source.type.split("/");if(o[0]=="html5"){o.shift()}var s=document.createElement("source");s.setAttribute("src",e.source.url);t.source=s;r.appendChild(s);s.type=o.join("/");e.log("Adding "+s.type+" source @ "+e.source.url);MistUtil.class.add(r,"video-js");var n={};if(e.options.autoplay){n.autoplay=true}if(e.options.loop&&e.info.type!="live"){r.setAttribute("loop","")}if(e.options.muted){r.setAttribute("muted","")}if(e.options.poster){n.poster=e.options.poster}if(e.options.controls=="stock"){r.setAttribute("controls","");if(!document.getElementById("videojs-css")){var a=document.createElement("link");a.rel="stylesheet";a.href=e.options.host+"/skins/videojs.css";a.id="videojs-css";document.head.appendChild(a)}}else{n.controls=false}t.onready(function(){e.log("Building videojs");t.videojs=videojs(r,n,function(){e.log("Videojs initialized")});t.api.unload=function(){if(t.videojs){videojs(r).dispose();t.videojs=false;e.log("Videojs instance disposed")}};MistUtil.event.addListener(e.options.target,"error",function(i){var r=false;switch(i.message){case"Stream is shutting down":{i.preventDefault();break}case"Stream is offline":{e.clearError();i.preventDefault();if(e.video){r=MistUtil.event.addListener(e.video,"ended",function(){e.showError("Stream is offline ",{polling:true});if(r){MistUtil.event.removeListener(r)}})}break}case"Stream is waiting for data":{if(r){MistUtil.event.removeListener(r)}t.api.pause();e.reload();break}}},e.video)});e.log("Built html");if("Proxy"in window&&"Reflect"in window){var l={get:{},set:{}};e.player.api=new Proxy(r,{get:function(e,i,t){if(i in l.get){return l.get[i].apply(e,arguments)}var r=e[i];if(typeof r==="function"){return function(){return r.apply(e,arguments)}}return r},set:function(e,i,t){if(i in l.set){return l.set[i].call(e,t)}return e[i]=t}});e.player.api.load=function(){};l.set.currentTime=function(i){console.log("seeking to",i);e.player.videojs.currentTime(i)};if(e.info.type=="live"){function d(e){var i=0;if(e.buffered.length){i=e.buffered.end(e.buffered.length-1)}return i}var p=0;l.get.duration=function(){if(e.info){var i=(e.info.lastms+(new Date).getTime()-e.info.updated.getTime())*.001;return i}return 0};e.player.api.lastProgress=new Date;e.player.api.liveOffset=0;MistUtil.event.addListener(r,"progress",function(){e.player.api.lastProgress=new Date});l.set.currentTime=function(i){var t=e.player.api.currentTime-i;var r=i-e.player.api.duration;e.log("Seeking to "+MistUtil.format.time(i)+" ("+Math.round(r*-10)/10+"s from live)");e.player.videojs.currentTime(e.video.currentTime-t)};var u=0;l.get.currentTime=function(){if(e.info){u=e.info.lastms*.001}var i=this.currentTime+u-e.player.api.liveOffset-p;if(isNaN(i)){return 0}return i}}}else{t.api=r}e.player.setSize=function(i){if("videojs"in e.player){e.player.videojs.dimensions(i.width,i.height);r.parentNode.style.width=i.width+"px";r.parentNode.style.height=i.height+"px"}this.api.style.width=i.width+"px";this.api.style.height=i.height+"px"};e.player.api.setSource=function(i){if(!e.player.videojs){return}if(e.player.videojs.src()!=i){e.player.videojs.src({type:e.player.videojs.currentSource().type,src:i})}};e.player.api.setSubtitle=function(e){var i=r.getElementsByTagName("track");for(var t=i.length-1;t>=0;t--){r.removeChild(i[t])}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","")}};if(e.info.type=="live"){var f=MistUtil.event.addListener(r,"loadstart",function(e){MistUtil.event.removeListener(f);MistUtil.event.send("canplay",false,this)});var c=MistUtil.event.addListener(r,"canplay",function(e){if(f){MistUtil.event.removeListener(f)}MistUtil.event.removeListener(c)})}i(r)}if("videojs"in window){o()}else{var s=false;function n(){try{e.video.pause()}catch(e){}e.showError("Error in videojs player");if(!window.mistplayer_videojs_failures){window.mistplayer_videojs_failures=1;e.reload()}else{if(!s){var i=.05*Math.pow(2,window.mistplayer_videojs_failures);e.log("Rate limiter activated: MistPlayer reload delayed by "+Math.round(i*10)/10+" seconds.","error");s=e.timers.start(function(){s=false;delete window.videojs;e.reload()},i*1e3);window.mistplayer_videojs_failures++}}}var a=e.urlappend(mistplayers.videojs.scriptsrc(e.options.host));var l;var d=function(e,i,t,r,o){if(!l){return}if(i==l.src){window.removeEventListener("error",d);n()}return false};window.addEventListener("error",d);var p=console.error;console.error=function(){if(arguments[0]=="VIDEOJS:"){console.error=p;n()}return p.apply(this,arguments)};l=MistUtil.scripts.insert(a,{onerror:function(i){var t="Failed to load videojs.js";if(i.message){t+=": "+i.message}e.showError(t)},onload:o},e)}};