我使用 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 播放器抛出的这些错误吗?
最佳答案
Dash.js 在 404 上有内部重试逻辑 - 它会在放弃之前重试 3 次(因此总共 4 次尝试)。有一些关于进一步改进此行为的讨论,例如尝试其他可用的表示,但目前还没有。
但是,这取决于页面检测到的 404。尽管在 req.send() 的确切行上将错误记录到控制台,但有些 XHR 错误在 JavaScript 可以看到的内容方面是完全无声的,这是我在这里看到的行为:https://github.com/Dash-Industry-Forum/dash.js/issues/1209
如果请求确实抛出了 Dash.js 错误处理已处理、重试然后放弃的 404,那么您可以绑定(bind)到其错误事件:
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
}
});
关于javascript - Dash.js - 从 MPEG-DASH 播放器捕获 404 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35631329/