javascript - Dash.js - 从 MPEG-DASH 播放器捕获 404 错误

标签 javascript jquery mpeg-dash dash.js

我使用 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/

相关文章:

javascript - Node 或 v8 中内置 JavaScript 类型的引用

javascript - 在nodejs中保存从url保存的图像时出现问题

javascript - 如何创建一个与进度条中填充的进度 div 一起移动的 div?

javascript - 显示对象的键和值并转换为 html 链接

mpeg-dash - Exoplayer - Widevine 和 MPEG DASH

javascript - 我如何知道我安装的 gjslint 版本是什么?

javascript - 如何触发两个函数,一个是在页面重新加载/刷新另一个函数时触发?

javascript - 加载前/加载后的 jQuery 动画顺序

ffmpeg - 使用 mp4box 直播破折号内容

nginx - 低延迟 DASH Nginx RTMP