【问题标题】:HTML 5 Video. Returning playback error with source element instead of attrHTML 5 视频。使用源元素而不是 attr 返回播放错误
【发布时间】:2013-03-31 16:20:14
【问题描述】:

我希望为一个简单的 HTML5 视频元素添加一些错误处理。 我使用的这段代码无处不在 online:

JS

function playbackFailed(e) {
   // video playback failed - show a message saying why
   switch (e.target.error.code) {
     case e.target.error.MEDIA_ERR_ABORTED:
       alert('You aborted the video playback.');
       break;
    case e.target.error.MEDIA_ERR_NETWORK:
      alert('A network error caused the video download to fail part-way.');
      break;
   case e.target.error.MEDIA_ERR_DECODE:
      alert('The video playback was aborted due to a corruption problem or because the video used features your browser did not support.');
      break;
   case e.target.error.MEDIA_ERR_SRC_NOT_SUPPORTED:
     alert('The video could not be loaded, either because the server or network failed or because the format is not supported.');
     break;
   default:
     alert('An unknown error occurred.');
     break;
   }
}

HTML

<video id="a" src="tgif.vid" autoplay controls onerror="playbackFailed(event)" poster="http://img.rasset.ie/000736d2-512.jpg" width="620" height="400"></video>

以上工作正常,当页面加载时我得到一个活泼的警报框。

但是,如果我没有“src”属性,而是在&lt;video&gt; 元素中使用&lt;source&gt; 标记,“onerror(event)”不会触发?示例标记:

<video id="b" autoplay controls onerror="playbackFailed(event)" poster="http://img.rasset.ie/000736d2-512.jpg" width="620" height="400">
    <source src="tgif.vid">
</video>

请注意,我已在 id “a”和“b”上方给出了两个视频元素。

有人可以在下面的代码中解释原因吗:

<script>
var a = document.getElementById('a');
var b = document.getElementById('b');

a.addEventListener('error', function(e){alert('error event on a')});
b.addEventListener('error', function(e){alert('error event on b')});

</script>

我只收到“a”而不是“b”的警报

我需要使用&lt;source&gt; 标签,因为我将为不同的设备等提供多种媒体类型。

提前感谢任何答案/cmets

S

【问题讨论】:

  • 你用其他浏览器验证了吗?
  • 尝试将监听器添加到 b 的源标签而不是视频标签

标签: javascript html video error-handling


【解决方案1】:

如果涉及来源,errors in loading sources must be caught from the &lt;source&gt; elements 他们自己。但是,要检查是否所有 &lt;source&gt; 元素都失败,check the &lt;video&gt; element's networkState property 如果是 NETWORK_NO_SOURCE

更多详情请点击此处:

Here's a sample code当第一个源加载失败并在控制台输出错误时:

HTML

<video id="b" autoplay controls poster="http://img.rasset.ie/000736d2-512.jpg" width="620" height="400">
    <source src="tgif.vid" />
    <source src="http://html5doctor.com/demos/video-canvas-magic/video.mp4" />
    <source src="http://html5doctor.com/demos/video-canvas-magic/video.webm" />
    <source src="http://html5doctor.com/demos/video-canvas-magic/video.ogg" />
</video>

JS(使用处理程序来避免 inine 脚本)

var sources = document.getElementsByTagName('source'),
    i;

for (i = 0; i < sources.length; i++) {
    (function (i) {
        sources[i].addEventListener('error', function (e) {
            console.log('Error loading: '+e.target.src);
        });
    }(i));
}

【讨论】:

  • 嗨约瑟夫,上述网络状态为“3”,视频播放。如果我将虚拟视频放入上面的示例中,从而导致失败。还是3。其实我需要显示错误。
  • @sidarcy hmm... 尝试检查错误(即处理程序中的 e)。据我测试,&lt;source&gt; 中的错误并不意味着&lt;video&gt; 中的错误(视频的error 属性为空)。我在视频中的错误捕获方面还没有走那么远。
  • networkState 的链接不太正常。应该是:developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/…
猜你喜欢
  • 2013-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-06
相关资源
最近更新 更多