Chr*_*ker 4 javascript html5-audio
我有一个audio元素,其中包含多个源,所有源均由流服务提供。我们遇到了用户上限,因此流因403 http错误而失败。
每个源失败并在控制台("Max listeners reached")中出现一个单独的错误后,在控制台中输出了最终错误,
“所有候选资源均无法加载。媒体加载已暂停。”
但是,没有在元素上引发错误事件。我尝试了脚本附件:
$(document).ready(function () {
$('#audioPlayerElement').on('error', function () {
// does not get triggered
});
$('#audioPlayerElement').error(function () {
// does not get triggered
});
});
$(document).on('error', '#audioPlayerElement', function () {
// does not get triggered
});
document.getElementById('audioPlayerElement').onerror = function () {
// does not get triggered
};
Run Code Online (Sandbox Code Playgroud)
...我尝试了内联javascript:
<script>
var playerError = function () {
// does not get triggered
}
</script>
<audio onerror="playerError()"...
Run Code Online (Sandbox Code Playgroud)
... 没有。
这是我的HTML(已删除URL):
<audio id="audioPlayerElement" controls preload="auto" >
<source src="http://[STREAM_URL].ogg" type="audio/ogg">
<source src="http://[STREAM_URL].mp3" type="audio/mp3">
<source src="http://[STREAM_URL].wav" type="audio/wav">
</audio>
Run Code Online (Sandbox Code Playgroud)
我想念什么吗?我通读了MDN上的媒体事件文档,但没有发现针对这种情况的任何其他事件,error似乎是合适的选择。我的目标是检测媒体不会加载的事实并将其传达给用户。
在Firefox,Safari和Chrome中进行了测试,结果相同。
小智 5
我很好奇,因此我尝试了一下,发现如果将onerror附加到各个源,则将触发事件处理函数。
<audio id="audioPlayerElement" controls preload="auto">
<source src="whatever" type="audio/ogg" onerror="playerError()">
<source src="whatever" type="audio/mp3" onerror="playerError()">
...
</audio>
Run Code Online (Sandbox Code Playgroud)