Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查HTML5音频是否出现不同错误_Javascript_Html_Audio - Fatal编程技术网

Javascript 如何检查HTML5音频是否出现不同错误

Javascript 如何检查HTML5音频是否出现不同错误,javascript,html,audio,Javascript,Html,Audio,具体来说,如果206个音频请求中的一个失败并停止缓冲,是否有方法检测该状态?或者我应该通过比较缓冲金额与过去金额来检查缓冲是否停止 另外,我如何检查指定的源是否失败,然后您是否可以将其指向另一个源 我想你可以在页面末尾找到答案(媒体事件块) 可能onerror或onstalled或onreadystatechange规范中有媒体元素处理的事件的完整列表: 我将特别关注暂停、中止和进度事件 由于此元素相对较新,因此实现可能会有很大差异。因此,我将针对您的目标平台测试这些事件,以查看它们是否能按预期

具体来说,如果206个音频请求中的一个失败并停止缓冲,是否有方法检测该状态?或者我应该通过比较缓冲金额与过去金额来检查缓冲是否停止


另外,我如何检查指定的源是否失败,然后您是否可以将其指向另一个源

我想你可以在页面末尾找到答案(媒体事件块)


可能
onerror
onstalled
onreadystatechange

规范中有媒体元素处理的事件的完整列表:

我将特别关注暂停、中止和进度事件


由于此元素相对较新,因此实现可能会有很大差异。因此,我将针对您的目标平台测试这些事件,以查看它们是否能按预期满足您的需求。如果没有,您可能需要做一些更为手动的操作,如您提到的轮询缓冲状态。

1。具体来说,如果音频请求之一失败且缓冲停止,是否有方法检测该状态?

是的,几乎没有办法做到这一点!但是,如果要捕获错误类型,可以将错误事件侦听器附加到源:

$('audio').addEventListener('error', function failed(e) {
   // audio playback failed - show a message saying why
   // to get the source of the audio element use $(this).src
   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 audio download to fail.');
       break;
     case e.target.error.MEDIA_ERR_DECODE:
       alert('The audio 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 audio 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;
   }
 }, true);
2。然后你能指出另一个来源吗?

在错误处理函数中,您可以使用音频元素的
src
属性更改源:

var audio = $(this);
audio.src = "new-audio-file.mp3";
audio.load();
另一个选项是使用以下语法将多个源添加到同一音频标记:

<audio>
    <source id="audio_player_ogv" src="test.ogv" type="audio/ogg" />
    //In case that you can't load the ogv file it will try to load test.mp3
    <source id="audio_player_mp3" src="test.mp3" type="audio/mpeg" />
</audio>

一段时间,非常好

你能展示一下你在SoundManager2上加载这个文件时使用的代码吗(206个)++中的3个或4个,尽管由于flash的回退,它不能在手机上工作……或者至少我不这么认为,是吗?@TomSarduy
$('audio')。addEventListener
就是jQuery吗?@LoneWOLFs:是的,那是jQuery,只是为了保存一些代码;)在Chrome57上,对于解决方案1,我必须将
e.target.error.code
替换为
e.detail.target.error.code