").addClass("controls");Ma.append(W).append(Na).append(oa);$("link#devcss").length||c.append($("
").attr("rel","stylesheet").attr("type","text/css").attr("href",u+"skins/dev.css").attr("id","devcss"));var Oa=function(){Na.text("");var d=document.createElement("script");c.append(d);d.src=u+"player.js";d.onerror=function(){W.html($("
").append('Failed to load '+u+"player.js .")).append($("
").append("Please check if you've activated the HTTP protocol, if your http port is blocked, or if you're trying to load HTTPS on an HTTP page.")).append($("").text("Reload").css("display",
+"block").click(function(){Oa()}))};d.onload=function(){var g=b,f=function(){var a=MistVideoObject.reference;oa.html("");oa.append(a.UI.buildStructure({type:"container",classes:["mistvideo-column"],style:{flexShrink:1},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:"decodingIssues",
+style:{"max-width":"30em","flex-flow":"column nowrap"}},{type:"container",classes:["mistvideo-column","mistvideo-devcontrols"],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:"Reload video",onclick:function(){this.player.api.load()}}},{type:"button",title:"Build MistVideo again",label:"Reload player",
+onclick:function(){this.reload()}},{type:"button",title:"Switch to the next available player and source combination",label:"Try next combination",onclick:function(){this.nextCombo()}}]},{type:"forcePlayer"},{type:"forceType"},{type:"forceSource"}]},{type:"log"}]}))};if(!(a!="Preview"||!b||b==""||g!=b)){W[0].addEventListener("initialized",f);W[0].addEventListener("initializeFailed",f);MistVideoObject.reference=mistPlay(g,{target:W[0],host:u,skin:"dev",loop:true,MistVideoObject:MistVideoObject})}c[0].removeChild(d)};
+MistVideoObject.reference={unload:function(){d.onload=function(){this.parentElement&&this.parentElement.removeChild(this)}}}};Oa();var Pa=$("").append($("
").text("Meta information")),da=$("").text("Loading..");Pa.append(da);Q.append(Pa);""!=H&&$.ajax({type:"GET",url:u+"json_"+H+".js",success:function(a){var b=function(a,b){return"maxbps"in a?UI.format.bytes(a[b],1):b=="maxbps"?UI.format.bytes(a.bps,1):"unknown"},c=a.meta;if(!c||!c.tracks)da.html("No meta information available.");else{a=
+[];a.push({label:"Type",type:"span",value:c.live?"Live":"Pre-recorded (VoD)"});"format"in c&&a.push({label:"Format",type:"span",value:c.format});c.live&&a.push({label:"Buffer window",type:"span",value:UI.format.addUnit(c.buffer_window,"ms")});var d={audio:{vheader:"Audio",labels:["Codec","Duration","Avg bitrate","Peak bitrate","Channels","Samplerate","Language","Track index"],content:[]},video:{vheader:"Video",labels:["Codec","Duration","Avg bitrate","Peak bitrate","Size","Framerate","Language","Track index",
+"Has B-Frames"],content:[]},subtitle:{vheader:"Subtitles",labels:["Codec","Duration","Avg bitrate","Peak bitrate","Language","Track index"],content:[]}},g=Object.keys(c.tracks);g.sort(function(a,b){a=a.split("_").pop();b=b.split("_").pop();return a-b});var f=1,e=1,h=1,j;for(j in g){var k=g[j],i=c.tracks[k];switch(i.type){case "audio":d.audio.content.push({header:"Track "+k.split("_").pop(),body:[i.codec,UI.format.duration((i.lastms-i.firstms)/1E3)+""+UI.format.duration(i.firstms/
+1E3)+" to "+UI.format.duration(i.lastms/1E3)+" ",b(i,"bps"),b(i,"maxbps"),i.channels,UI.format.addUnit(UI.format.number(i.rate),"Hz"),"language"in i?i.language:"unknown",f]});f++;break;case "video":d.video.content.push({header:"Track "+k.split("_").pop(),body:[i.codec,UI.format.duration((i.lastms-i.firstms)/1E3)+""+UI.format.duration(i.firstms/1E3)+" to "+UI.format.duration(i.lastms/1E3)+" ",b(i,"bps"),b(i,"maxbps"),UI.format.addUnit(i.width,"x ")+UI.format.addUnit(i.height,
"px"),UI.format.addUnit(UI.format.number(i.fpks/1E3),"fps"),"language"in i?i.language:"unknown",e,"bframes"in i?"yes":"no"]});e++;break;case "meta":case "subtitle":if(i.codec=="subtitle"||i.type=="subtitle"){d.subtitle.content.push({header:"Track "+k.split("_").pop(),body:[i.codec,UI.format.duration((i.lastms-i.firstms)/1E3)+""+UI.format.duration(i.firstms/1E3)+" to "+UI.format.duration(i.lastms/1E3)+" ",b(i,"bps"),b(i,"maxbps"),"language"in i?i.language:"unknown",
h]});h++}}}b=["audio","video","subtitle"];j=$("").css({display:"flex","flex-flow":"row wrap","font-size":"0.9em"});for(k in b)d[b[k]].content.length&&j.append(UI.buildVheaderTable(d[b[k]]).css("width","auto"));a.push($("
").text("Tracks:"));a.push(j);da.html(UI.buildUI(a))}},error:function(){da.html("Error while retrieving stream info.")}});break;case "Embed":""==b&&UI.navTo("Streams");V="";-1==b.indexOf("+")&&(V=$("").addClass("settings").text("Settings").click(function(){UI.navto("Edit",
b)}));c.html($("").addClass("bigbuttons").append(V).append($("
").text("Preview").addClass("preview").click(function(){UI.navto("Preview",b)})).append($("").addClass("cancel").addClass("return").text("Return").click(function(){UI.navto("Streams")}))).append($("").text('Embed "'+b+'"'));var X=$("");c.append(X);var H=encodeURIComponent(b),N=parseURL(mist.user.host),U=N.protocol,R=N.host,G=":8080",Y,ea={},u={http:U+R+G+"/"};for(r in mist.data.config.protocols)if(s=mist.data.config.protocols[r],
diff --git a/lsp/mist.js b/lsp/mist.js
index 6a15830f..7a4f1f6b 100644
--- a/lsp/mist.js
+++ b/lsp/mist.js
@@ -4179,7 +4179,11 @@ var UI = {
$main.append(script);
script.src = embedbase+'player.js';
script.onerror = function(){
- $video.html('Failed to load player.js').append(
+ $video.html(
+ $("").append('Failed to load '+embedbase+'player.js .')
+ ).append(
+ $("
").append("Please check if you've activated the HTTP protocol, if your http port is blocked, or if you're trying to load HTTPS on an HTTP page.")
+ ).append(
$('').text('Reload').css('display','block').click(function(){
loadplayer();
})