LSP
- 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:
parent
6276485b66
commit
7b96407e9b
5 changed files with 67 additions and 14 deletions
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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/
|
||||||
|
|
|
@ -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))
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
Loading…
Add table
Reference in a new issue