Embed: added rate limiting to videojs crash reload, updated videojs and dashjs

This commit is contained in:
Cat 2020-01-22 16:52:58 +01:00 committed by Thulinma
parent 04a1b394dd
commit 573e945f5a
10 changed files with 5870 additions and 8360 deletions

View file

@ -118,7 +118,7 @@ p.prototype.build = function (MistVideo,callback) {
me.dash = player;
//add listeners for events that we can log
var skipEvents = ["METRIC_ADDED","METRIC_CHANGED","METRICS_CHANGED","FRAGMENT_LOADING_STARTED","FRAGMENT_LOADING_COMPLETED","LOG","PLAYBACK_TIME_UPDATED","PLAYBACK_PROGRESS"];
var skipEvents = ["METRIC_ADDED","METRIC_UPDATED","METRIC_CHANGED","METRICS_CHANGED","FRAGMENT_LOADING_STARTED","FRAGMENT_LOADING_COMPLETED","LOG","PLAYBACK_TIME_UPDATED","PLAYBACK_PROGRESS"];
for (var i in dashjs.MediaPlayer.events) {
if (skipEvents.indexOf(i) < 0) {
me.dash.on(dashjs.MediaPlayer.events[i],function(e){

View file

@ -276,23 +276,58 @@ p.prototype.build = function (MistVideo,callback) {
else {
//load the videojs player
var timer = false;
function reloadVJSrateLimited(){
try {
MistVideo.video.pause();
} catch (e) {}
MistVideo.showError("Error in videojs player");
//rate limit the reload
if (!window.mistplayer_videojs_failures) {
window.mistplayer_videojs_failures = 1;
MistVideo.reload();
}
else {
if (!timer) {
var delay = 0.05*Math.pow(2,window.mistplayer_videojs_failures)
MistVideo.log("Rate limiter activated: MistPlayer reload delayed by "+Math.round(delay*10)/10+" seconds.","error");
timer = MistVideo.timers.start(function(){
timer = false;
delete window.videojs;
MistVideo.reload();
},delay*1e3);
window.mistplayer_videojs_failures++;
}
}
}
var scripturl = MistVideo.urlappend(mistplayers.videojs.scriptsrc(MistVideo.options.host));
var scripttag;
window.onerror = function (msg, url, lineNo, columnNo, error) {
var f = function (msg, url, lineNo, columnNo, error) {
if (!scripttag) { return; }
if (url == scripttag.src) {
//error in internal videojs code
//console.error(me.videojs,MistVideo.video,ele,arguments);
ele.pause();
MistVideo.showError("Error in videojs player");
MistVideo.reload();
window.removeEventListener("error",f);
reloadVJSrateLimited();
}
return false;
}
};
window.addEventListener("error",f);
var old_console_error = console.error;
console.error = function(){
if (arguments[0] == "VIDEOJS:") {
//videojs reports an error
console.error = old_console_error;
reloadVJSrateLimited();
}
return old_console_error.apply(this,arguments);
};
scripttag = MistUtil.scripts.insert(scripturl,{
onerror: function(e){