【问题标题】:Dash.js - Trapping 404 errors from MPEG-DASH playerDash.js - 从 MPEG-DASH 播放器捕获 404 错误
【发布时间】:2016-02-25 15:19:31
【问题描述】:

我使用 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 播放器抛出的这些错误?

【问题讨论】:

    标签: javascript jquery mpeg-dash dash.js


    【解决方案1】:

    Dash.js 在 404 上有内部重试逻辑 - 它会在放弃之前重试 3 次(因此总共尝试 4 次)。有一些关于进一步改进这种行为的讨论,例如尝试其他可用的表示,但还没有。

    但是,这取决于页面检测到的 404。即使在 req.send() 的确切行上将错误记录到控制台,也有一些 XHR 错误在 JavaScript 可以看到的内容方面完全保持沉默,这是我在这里看到的行为:https://github.com/Dash-Industry-Forum/dash.js/issues/1209

    如果请求确实抛出了 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
        }
    });
    

    【讨论】:

      【解决方案2】:

      自从我进入该代码以来已经有点过了,但是如果没有记错的话,您应该能够通过检查错误的状态属性来确定它是 404

      var oReq = new XMLHttpRequest();
      oReq.addEventListener("error", function (e) {
          console.log("xml item: " + e.status);
      }, true);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-11-19
        • 1970-01-01
        • 2016-03-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多