- Preview: Use source select box actually forces a source, not a mime type
Embed
- added forceSource option
- player error messages clear the container html before appending
This commit is contained in:
Cat 2016-11-21 15:24:36 +01:00 committed by Thulinma
parent 6276485b66
commit 7b96407e9b
5 changed files with 67 additions and 14 deletions

View file

@ -584,6 +584,12 @@ function mistPlay(streamName,options) {
embedLog('Forcing '+options.forceType); embedLog('Forcing '+options.forceType);
forceType = options.forceType; forceType = options.forceType;
} }
var forceSource = false;
if (('forceSource' in options) && (options.forceSource)) {
forceSource = options.forceSource;
forceType = streaminfo.source[forceSource].type;
embedLog('Forcing source '+options.forceSource+': '+forceType+' @ '+streaminfo.source[forceSource].url);
}
var forceSupportCheck = false; var forceSupportCheck = false;
if (('forceSupportCheck' in options) && (options.forceSupportCheck)) { if (('forceSupportCheck' in options) && (options.forceSupportCheck)) {
embedLog('Forcing a full support check'); embedLog('Forcing a full support check');
@ -620,14 +626,21 @@ function mistPlay(streamName,options) {
return false; return false;
} }
function checkMime(p_shortname,mime) { function checkMime(p_shortname,mime) {
for (var s in streaminfo.source) { var loop;
if (streaminfo.source[s].type == mime) { if (forceSource) {
if (mistplayers[p_shortname].isBrowserSupported(mime,streaminfo.source[s],options)) { loop = [streaminfo.source[forceSource]];
embedLog('Found a working combo: '+mistplayers[p_shortname].name+' with '+mime+' @ '+streaminfo.source[s].url); }
else {
loop = streaminfo.source;
}
for (var s in loop) {
if (loop[s].type == mime) {
if (mistplayers[p_shortname].isBrowserSupported(mime,loop[s],options)) {
embedLog('Found a working combo: '+mistplayers[p_shortname].name+' with '+mime+' @ '+loop[s].url);
streaminfo.working[p_shortname].push(mime); streaminfo.working[p_shortname].push(mime);
if (!source) { if (!source) {
mistPlayer = p_shortname; mistPlayer = p_shortname;
source = streaminfo.source[s]; source = loop[s];
} }
if (!forceSupportCheck) { if (!forceSupportCheck) {
return source; return source;
@ -656,6 +669,7 @@ function mistPlay(streamName,options) {
} }
} }
options.target.innerHTML = '';
if (mistPlayer) { if (mistPlayer) {
//create the options to send to the player //create the options to send to the player
var playerOpts = { var playerOpts = {
@ -785,7 +799,6 @@ function mistPlay(streamName,options) {
//build the player //build the player
player.options = playerOpts; player.options = playerOpts;
var element = player.build(playerOpts); var element = player.build(playerOpts);
options.target.innerHTML = '';
options.target.appendChild(element); options.target.appendChild(element);
element.setAttribute('data-player',mistPlayer); element.setAttribute('data-player',mistPlayer);
element.setAttribute('data-mime',source.type); element.setAttribute('data-mime',source.type);

View file

@ -21,8 +21,8 @@
</script> </script>
<script src=core.js></script> <script src=core.js></script>
<script src=wrappers/theoplayer.js></script> <!--<script src=wrappers/theoplayer.js></script>-->
<script src=wrappers/jwplayer.js></script> <!--<script src=wrappers/jwplayer.js></script>-->
<script src=wrappers/html5.js></script> <script src=wrappers/html5.js></script>
<script src=wrappers/dashjs.js></script> <script src=wrappers/dashjs.js></script>
<script src=wrappers/flash_strobe.js></script> <script src=wrappers/flash_strobe.js></script>
@ -86,6 +86,7 @@
target: c, target: c,
forcePlayer: tryplayers[i], forcePlayer: tryplayers[i],
//forceType: 'flash/7', //forceType: 'flash/7',
//forceSource: 5,
loop: true loop: true
}); });
} }

View file

@ -144,7 +144,46 @@ p.prototype.build = function (options,callback) {
//forward events //forward events
ele.addEventListener('error',function(e){ ele.addEventListener('error',function(e){
me.adderror(e.message); var msg;
if ('message' in e) {
msg = e.message;
}
else {
msg = 'readyState: ';
switch (me.element.readyState) {
case 0:
msg += 'HAVE_NOTHING';
break;
case 1:
msg += 'HAVE_METADATA';
break;
case 2:
msg += 'HAVE_CURRENT_DATA';
break;
case 3:
msg += 'HAVE_FUTURE_DATA';
break;
case 4:
msg += 'HAVE_ENOUGH_DATA';
break;
}
msg += ' networkState: ';
switch (me.element.networkState) {
case 0:
msg += 'NETWORK_EMPTY';
break;
case 1:
msg += 'NETWORK_IDLE';
break;
case 2:
msg += 'NETWORK_LOADING';
break;
case 3:
msg += 'NETWORK_NO_SOURCE';
break;
}
}
me.adderror(msg);
},true); },true);
var events = ['abort','canplay','canplaythrough','durationchange','emptied','ended','interruptbegin','interruptend','loadeddata','loadedmetadata','loadstart','pause','play','playing','ratechange','seeked','seeking','stalled','volumechange','waiting']; var events = ['abort','canplay','canplaythrough','durationchange','emptied','ended','interruptbegin','interruptend','loadeddata','loadedmetadata','loadstart','pause','play','playing','ratechange','seeked','seeking','stalled','volumechange','waiting'];
for (var i in events) { for (var i in events) {

View file

@ -118,9 +118,9 @@ break;case "TS":case "TS.exe":a.push({label:"TS",type:"span",clipboard:true,read
{type:"save",label:"Save and Preview","function":function(){ja("Preview")},classes:["saveandpreview"]}]}]));c.find("[name=name]").keyup(function(){W()});W();break;case "Preview":""==b&&UI.navto("Streams");r=":8080";for(g in mist.data.config.protocols)if(d=mist.data.config.protocols[g],"HTTP"==d.connector||"HTTP.exe"==d.connector)r=d.port?":"+d.port:":8080";var s=parseURL(mist.user.host),P=s.protocol+s.host+r+"/",I=$("<div>").css({display:"flex","flex-flow":"row wrap"}),s="";-1==b.indexOf("+")&&(s= {type:"save",label:"Save and Preview","function":function(){ja("Preview")},classes:["saveandpreview"]}]}]));c.find("[name=name]").keyup(function(){W()});W();break;case "Preview":""==b&&UI.navto("Streams");r=":8080";for(g in mist.data.config.protocols)if(d=mist.data.config.protocols[g],"HTTP"==d.connector||"HTTP.exe"==d.connector)r=d.port?":"+d.port:":8080";var s=parseURL(mist.user.host),P=s.protocol+s.host+r+"/",I=$("<div>").css({display:"flex","flex-flow":"row wrap"}),s="";-1==b.indexOf("+")&&(s=
$("<button>").text("Settings").addClass("settings").click(function(){UI.navto("Edit",b)}));c.html($("<div>").addClass("bigbuttons").append(s).append($("<button>").text("Embed").addClass("embed").click(function(){UI.navto("Embed",b)})).append($("<button>").addClass("cancel").addClass("return").text("Return").click(function(){UI.navto("Streams")}))).append($("<h2>").text('Preview of "'+b+'"')).append(I);var F=encodeURIComponent(b),g=$("<div>");I.append(g);var X=$("<div>"),Q=$("<select>").append($("<option>").text("Automatic").val("")).change(function(){Y()}), $("<button>").text("Settings").addClass("settings").click(function(){UI.navto("Edit",b)}));c.html($("<div>").addClass("bigbuttons").append(s).append($("<button>").text("Embed").addClass("embed").click(function(){UI.navto("Embed",b)})).append($("<button>").addClass("cancel").addClass("return").text("Return").click(function(){UI.navto("Streams")}))).append($("<h2>").text('Preview of "'+b+'"')).append(I);var F=encodeURIComponent(b),g=$("<div>");I.append(g);var X=$("<div>"),Q=$("<select>").append($("<option>").text("Automatic").val("")).change(function(){Y()}),
L=$("<select>").append($("<option>").text("Automatic").val("")).change(function(){Y()}),s=UI.buildUI([{label:"Use player",type:"DOMfield",DOMfield:Q,help:"Choose a player to preview"},{label:"Use source",type:"DOMfield",DOMfield:L,help:"Choose an output type to preview"}]),M=$("<div>").addClass("mistvideo").text("Loading player..");g.append(M).append(X).append(s);var Y=function(){C.html("");var a={target:M[0],maxheight:window.innerHeight-$("header").height(),maxwidth:window.innerWidth-UI.elements.menu.width()- L=$("<select>").append($("<option>").text("Automatic").val("")).change(function(){Y()}),s=UI.buildUI([{label:"Use player",type:"DOMfield",DOMfield:Q,help:"Choose a player to preview"},{label:"Use source",type:"DOMfield",DOMfield:L,help:"Choose an output type to preview"}]),M=$("<div>").addClass("mistvideo").text("Loading player..");g.append(M).append(X).append(s);var Y=function(){C.html("");var a={target:M[0],maxheight:window.innerHeight-$("header").height(),maxwidth:window.innerWidth-UI.elements.menu.width()-
100,loop:true};if(Q.val()!="")a.forcePlayer=Q.val();if(L.val()!="")a.forceType=L.val();mistPlay(b,a)},C=$("<div>").addClass("player_log");g.append($("<div>").append($("<h3>").text("Player log:")).append(C));M.on("log error",function(a){var b=false;C.height()+C.scrollTop()==C[0].scrollHeight&&(b=true);C.append($("<div>").append($("<span>").text("["+UI.format.time((new Date).getTime()/1E3)+"]").css("margin-right","0.5em")).append($("<span>").text(a.originalEvent.message)).addClass(a.type=="error"?"red": 100,loop:true};if(Q.val()!="")a.forcePlayer=Q.val();if(L.val()!="")a.forceSource=L.val();mistPlay(b,a)},C=$("<div>").addClass("player_log");g.append($("<div>").append($("<h3>").text("Player log:")).append(C));M.on("log error",function(a){var b=false;C.height()+C.scrollTop()==C[0].scrollHeight&&(b=true);C.append($("<div>").append($("<span>").text("["+UI.format.time((new Date).getTime()/1E3)+"]").css("margin-right","0.5em")).append($("<span>").text(a.originalEvent.message)).addClass(a.type=="error"?
""));b&&C.scrollTop(C[0].scrollHeight)});var la=function(){X.text("");var a=document.createElement("script");c.append(a);a.src=P+"player.js";a.onerror=function(){M.html("Failed to load player.js").append($("<button>").text("Reload").css("display","block").click(function(){la()}))};a.onload=function(){for(var d in mistplayers)Q.append($("<option>").text(mistplayers[d].name).val(d));Y();M.on("initialized",function(){if(L.children().length<=1)for(var a in mistvideo[b].source){var c=mistvideo[b].source[a], "red":""));b&&C.scrollTop(C[0].scrollHeight)});var la=function(){X.text("");var a=document.createElement("script");c.append(a);a.src=P+"player.js";a.onerror=function(){M.html("Failed to load player.js").append($("<button>").text("Reload").css("display","block").click(function(){la()}))};a.onload=function(){for(var d in mistplayers)Q.append($("<option>").text(mistplayers[d].name).val(d));Y();M.on("initialized",function(){if(L.children().length<=1)for(var a in mistvideo[b].source){var c=mistvideo[b].source[a],
d=UI.humanMime(c.type);L.append($("<option>").val(c.type).text(d?d+" @ "+c.url.substring(c.url.length-c.relurl.length,0):UI.format.capital(c.type)+" @ "+c.url.substring(c.url.length-c.relurl.length,0)))}a=mistvideo[b].embedded[mistvideo[b].embedded.length-1];d=UI.humanMime(a.player.options.source.type);X.html("You're watching "+(d?d+" <span class=description>("+a.player.options.source.type+")</span>":UI.format.capital(a.player.options.source.type))+" through "+mistplayers[a.selectedPlayer].name+".")}); d=UI.humanMime(c.type);L.append($("<option>").val(a).text(d?d+" @ "+c.url.substring(c.url.length-c.relurl.length,0):UI.format.capital(c.type)+" @ "+c.url.substring(c.url.length-c.relurl.length,0)))}a=mistvideo[b].embedded[mistvideo[b].embedded.length-1];d=UI.humanMime(a.player.options.source.type);X.html("You're watching "+(d?d+" <span class=description>("+a.player.options.source.type+")</span>":UI.format.capital(a.player.options.source.type))+" through "+mistplayers[a.selectedPlayer].name+".")});
c[0].removeChild(a)}};la();var g=$("<div>").append($("<h3>").text("Meta information")),R=$("<span>").text("Loading..");g.append(R);I.append(g);$.ajax({type:"GET",url:P+"json_"+F+".js",success:function(a){var b=a.meta;if(b){a=[];a.push({label:"Type",type:"span",value:b.live?"Live":"Pre-recorded (VoD)"});"format"in b&&a.push({label:"Format",type:"span",value:b.format});b.live&&a.push({label:"Buffer window",type:"span",value:UI.format.addUnit(b.buffer_window,"ms")});var c={audio:{vheader:"Audio",labels:["Codec", c[0].removeChild(a)}};la();var g=$("<div>").append($("<h3>").text("Meta information")),R=$("<span>").text("Loading..");g.append(R);I.append(g);$.ajax({type:"GET",url:P+"json_"+F+".js",success:function(a){var b=a.meta;if(b){a=[];a.push({label:"Type",type:"span",value:b.live?"Live":"Pre-recorded (VoD)"});"format"in b&&a.push({label:"Format",type:"span",value:b.format});b.live&&a.push({label:"Buffer window",type:"span",value:UI.format.addUnit(b.buffer_window,"ms")});var c={audio:{vheader:"Audio",labels:["Codec",
"Duration","Peak bitrate","Channels","Samplerate","Language"],content:[]},video:{vheader:"Video",labels:["Codec","Duration","Peak bitrate","Size","Framerate","Language"],content:[]},subtitle:{vheader:"Subtitles",labels:["Codec","Duration","Peak bitrate","Language"],content:[]}},d=Object.keys(b.tracks);d.sort(function(a,b){a=a.split("_").pop();b=b.split("_").pop();return a-b});for(var g in d){var e=d[g],f=b.tracks[e];switch(f.type){case "audio":c.audio.content.push({header:"Track "+e.split("_").pop(), "Duration","Peak bitrate","Channels","Samplerate","Language"],content:[]},video:{vheader:"Video",labels:["Codec","Duration","Peak bitrate","Size","Framerate","Language"],content:[]},subtitle:{vheader:"Subtitles",labels:["Codec","Duration","Peak bitrate","Language"],content:[]}},d=Object.keys(b.tracks);d.sort(function(a,b){a=a.split("_").pop();b=b.split("_").pop();return a-b});for(var g in d){var e=d[g],f=b.tracks[e];switch(f.type){case "audio":c.audio.content.push({header:"Track "+e.split("_").pop(),
body:[f.codec,UI.format.duration((f.lastms-f.firstms)/1E3)+"<br><span class=description>"+UI.format.duration(f.firstms/1E3)+" to "+UI.format.duration(f.lastms/1E3)+"</span>",UI.format.bytes(f.bps,1),f.channels,UI.format.addUnit(UI.format.number(f.rate),"Hz"),"lang"in f?f.lang:"unknown"]});break;case "video":c.video.content.push({header:"Track "+e.split("_").pop(),body:[f.codec,UI.format.duration((f.lastms-f.firstms)/1E3)+"<br><span class=description>"+UI.format.duration(f.firstms/1E3)+" to "+UI.format.duration(f.lastms/ body:[f.codec,UI.format.duration((f.lastms-f.firstms)/1E3)+"<br><span class=description>"+UI.format.duration(f.firstms/1E3)+" to "+UI.format.duration(f.lastms/1E3)+"</span>",UI.format.bytes(f.bps,1),f.channels,UI.format.addUnit(UI.format.number(f.rate),"Hz"),"lang"in f?f.lang:"unknown"]});break;case "video":c.video.content.push({header:"Track "+e.split("_").pop(),body:[f.codec,UI.format.duration((f.lastms-f.firstms)/1E3)+"<br><span class=description>"+UI.format.duration(f.firstms/1E3)+" to "+UI.format.duration(f.lastms/

View file

@ -3335,7 +3335,7 @@ var UI = {
options.forcePlayer = $s_players.val() options.forcePlayer = $s_players.val()
} }
if ($s_mimes.val() != '') { if ($s_mimes.val() != '') {
options.forceType = $s_mimes.val() options.forceSource = $s_mimes.val()
} }
mistPlay(other,options); mistPlay(other,options);
} }
@ -3391,7 +3391,7 @@ var UI = {
var s = mistvideo[other].source[i]; var s = mistvideo[other].source[i];
var human = UI.humanMime(s.type); var human = UI.humanMime(s.type);
$s_mimes.append( $s_mimes.append(
$('<option>').val(s.type).text( $('<option>').val(i).text(
(human ? human+' @ '+s.url.substring(s.url.length - s.relurl.length,0) : UI.format.capital(s.type)+' @ '+s.url.substring(s.url.length - s.relurl.length,0)) (human ? human+' @ '+s.url.substring(s.url.length - s.relurl.length,0) : UI.format.capital(s.type)+' @ '+s.url.substring(s.url.length - s.relurl.length,0))
) )
); );