Not so long ago, I updated my browser-aware player code to check for the presence of a stream. Recently, it’s come to light that Internet Explorer 9 doesn’t play nice with this particular snippet, because in IE9, the Javascript engine is rather brain-damaged when it comes to cross-site requests. In order to deal with this properly, we must alter the way we query the server for the presence of a stream:
console.log("Starting stream Check");
if (is_ie9) {
console.log ("Using XDR because IE9 is stupid");
streamcheckXDR();
setInterval(function(){streamcheckXDR()},10000);
}
else {
streamcheck();
setInterval(function(){streamcheck()},10000);
}
function streamcheckXDR() {
console.log("Starting XDR");
xdr = new XDomainRequest();
if(xdr) {
xdr.onerror = function(){ console.log("XDR Error"); };
xdr.onload = function(){ startPlayer(xdr.responseText,"XDR"); };
url = "http://"+streamer+":8086/streamcheck?stream="+stream;
xdr.open("get",url);
xdr.send();
} else {
console.log("Failed to create XDR object");
}
}
function startPlayer(result,mode){
// for some inexplicable reason, running "Boolean" on the XDR output doesn't work
// so we have to call the function and tell it if we're dealing with XDR data or AJAX data.
if(mode == "XDR") {
if (result === "true") { curstatus = true;}
if (result === "false") { curstatus = false;}
} else {
curstatus = Boolean(result);
}
//console.log("Result: "+result);
//console.log("Previous: "+prevstatus);
//console.log("Current: "+curstatus);
if (curstatus == prevstatus) {
//console.log("No Change");
} else {
if (curstatus) {
if (is_iphone || is_ipad || is_ipod) { iOSPlayer("videoframe",plwd,plht,server,stream);}
else if (is_blackberry) { rtspPlayer("videoframe",plwd,plht,server,stream+'_+240p');}
else { flashPlayer("videoframe",plwd,plht,server,stream); }
console.log("Changed from false to true");
} else {
var vframe=document.getElementById("videoframe")
if (is_iphone || is_ipad || is_ipod || is_blackberry) {
} else {
jwplayer("videoframe").remove();
}
vframe.innerHTML = '<IMG SRC="image.png" WIDTH="'+plwd+'" HEIGHT="'+plht+'">';
console.log("Changed from true to false");
}
}
prevstatus = curstatus;
}
function streamcheck() {
console.log("Starting AJAX");
$.ajax({
dataType: "json",
contentType: "text/plain",
type: "GET",
url: "http://"+streamer+":8086/streamcheck?stream="+stream,
error: function(XMLHttpRequest, textStatus, errorThrown)
{
console.log('AJAX Failure:'+ textStatus+':'+errorThrown);
//some stuff on failure
},
success: function(result){startPlayer(result)}
});
}
Hi Ian, silly question, does this replace lines 38-70 on Browser-aware player code, revisited again (http://blog.ianbeyer.com/2012/10/29/browser-aware-player-code-revisited-again/)