我使用Dash.js播放器播放MPEG-DASH视频。视频是从服务器中提取的。由于服务器问题,偶尔会出现404错误,我想通过检测404错误并相应地采取行动在后台重试流。
问题是我无法发现错误,它是从行中抛出的
req.send();
这是一个名为FragmentLoader.js的文件。
我已尝试过以下错误处理:
window.addEventListener('error', function(e) {
console.log("Item: " + e.message);
}, true);
var oReq = new XMLHttpRequest();
oReq.addEventListener("error", function (e) {
console.log("xml item: " + e.message);
}, true);
$(document).ajaxError(function (event, xhr, ajaxOptions, errorThrown) {
alert("ajax erorr");
});
然而,这些条件都没有发现错误。有没有办法捕捉从dash.js播放器抛出的这些错误?
答案 0 :(得分:4)
Dash.js在404上有内部重试逻辑 - 它会在放弃之前重试3次(因此总共4次尝试)。有一些关于进一步改进这种行为的讨论,例如尝试其他可用的表示,但现在还没有。
但是,这取决于页面检测到的404。尽管在req.send()的确切行上将错误记录到控制台,但是有些XHR错误在JavaScript可以看到的内容中是完全无声的,这是我在这里看到的行为:{{3} }
如果请求确实丢弃了Dash.js错误处理的404已经处理,重试,然后放弃,那么你可以绑定到它的错误事件:
var url = "http://dash.edgesuite.net/envivio/Envivio-dash2/manifest.mpd";
var player = dashjs.MediaPlayer().create();
player.initialize(document.querySelector("#videoPlayer"), url, true);
player.on('error', function(e) {
if (e.error === 'download') {
// dash.js gave up loading something
// e.event.id will tell you what it failed to load (mpd, segment...)
// and e.event.url will have the URL that failed
}
});
答案 1 :(得分:0)
它已经有点了,因为我已经使用了该代码,但是如果内存服务,你应该能够通过检查错误的status属性来确定它是404
var oReq = new XMLHttpRequest();
oReq.addEventListener("error", function (e) {
console.log("xml item: " + e.status);
}, true);