Embed: improved handling of state changes, added options to hide error title

This commit is contained in:
Cat 2020-02-12 13:54:12 +01:00 committed by Thulinma
parent 214b584956
commit a75ac5713c
5 changed files with 31 additions and 37 deletions

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -291,7 +291,7 @@ function MistVideo(streamName,options) {
MistVideo.log(e);
e = d.on_error;
}
MistVideo.showError(e,{reload:true});
MistVideo.showError(e,{reload:true,hideTitle:true});
return;
}
@ -601,7 +601,15 @@ function MistVideo(streamName,options) {
msg = "An error was encountered.";
//console.log("Err:",e);
}
if (MistVideo.state == "Stream is online") {
MistVideo.showError(msg);
}
else {
//it was probaby an error like "PIPELINE_ERROR_READ: FFmpegDemuxer: data source error" because the live stream has ended. Print it in the log, but display the stream state instead.
MistVideo.log(msg,"error");
MistVideo.showError(MistVideo.state,{polling:true});
}
});
//add general resize function
@ -892,7 +900,7 @@ function MistVideo(streamName,options) {
});
}
if ("WebSocket" in window) {
if (false) {
function openSocket() {
MistVideo.log("Opening stream status stream..");
var url = MistVideo.options.host.replace(/^http/i,"ws");
@ -920,6 +928,8 @@ function MistVideo(streamName,options) {
openWithGet();
};
var on_ended_show_state = false;
var on_waiting_show_state = false;
socket.addEventListener("message",function(e){
var data = JSON.parse(e.data);
if (!data) { MistVideo.showError("Error while parsing stream status stream. Obtained: "+e.data.toString(),{reload:true}); }
@ -944,6 +954,19 @@ function MistVideo(streamName,options) {
if ((MistVideo.player) && (MistVideo.player.api) && (!MistVideo.player.api.paused)) {
//something is (still) playing
MistVideo.log(data.error,"error");
//on ended, show state
if (!on_ended_show_state) {
on_ended_show_state = MistUtil.event.addListener(MistVideo.video,"ended",function(){
MistVideo.showError(data.error,{polling:true});
});
}
if (!on_waiting_show_state) {
on_ended_show_state = MistUtil.event.addListener(MistVideo.video,"waiting",function(){
MistVideo.showError(data.error,{polling:true});
});
}
return;
}
buttons = {polling:true};
@ -959,6 +982,8 @@ function MistVideo(streamName,options) {
//console.log("stream status stream said",data);
MistVideo.state = "Stream is online";
MistVideo.clearError();
if (on_ended_show_state) { MistUtil.event.removeListener(on_ended_show_state); }
if (on_waiting_show_state) { MistUtil.event.removeListener(on_waiting_show_state); }
if (!MistVideo.info) {
onStreamInfo(data);

View file

@ -1704,7 +1704,7 @@ MistSkins["default"] = {
message_container.className = "message";
this.appendChild(message_container);
if (!options.polling && !options.passive) {
if (!options.polling && !options.passive && !options.hideTitle) {
var header = document.createElement("h3");
message_container.appendChild(header);
header.appendChild(document.createTextNode("The player has encountered a problem"));

View file

@ -109,37 +109,6 @@ p.prototype.build = function (MistVideo,callback) {
}
};
//special HLS live when-stream-ends code because holy crap latency
MistUtil.event.addListener(MistVideo.options.target,"error",function(e){
var eventdata = false;
switch (e.message) {
case "Stream is shutting down": {
//MistVideo.clearError(); //we've probably got loads of buffer left to play
e.preventDefault();
break;
}
case "Stream is offline": {
MistVideo.clearError(); //we've probably got loads of buffer left to play
e.preventDefault();
if (MistVideo.video) {
eventdata = MistUtil.event.addListener(MistVideo.video,"ended",function(){
//show stream offline error
MistVideo.showError("Stream is offline ",{polling:true});
if (eventdata) { MistUtil.event.removeListener(eventdata); }
});
}
break;
}
case "Stream is waiting for data": {
if (eventdata) { MistUtil.event.removeListener(eventdata); }
me.api.pause();
MistVideo.reload();
break;
}
}
},MistVideo.video);
});
MistVideo.log("Built html");