我尝试获取媒体元素的缓冲部分(特别是我尝试从video
元素获取它,但我希望它也能够使用audio
),但是当我使用时具有一些偏移量的start()
或end()
函数(例如,0
),日志返回以下错误:
IndexSizeError:索引或大小为负数或大于允许的数量
我的代码出了什么问题?
var mediaelement = function(e) {
return e.buffered.start(0);
}
console.log(mediaelement(document.querySelector('video')));
答案 0 :(得分:0)
最有可能的是,当你打电话给你的功能时,没有任何缓冲
在致电e.buffered.length
或TimeRanges.start()
之前,您应该先向TimeRanges.end()
添加支票:
function getbufferedstart(el) {
if(el.buffered.length) {
return el.buffered.start(0);
}
else {
return 'avoided a throw';
}
}
var a = new Audio('https://dl.dropboxusercontent.com/s/8c9m92u1euqnkaz/GershwinWhiteman-RhapsodyInBluePart1.mp3');
a.onloadedmetadata = onwehavebufferedsomething;
console.log(getbufferedstart(a)); // avoided
console.log('really ?');
a.buffered.start(0); // Error
function onwehavebufferedsomething(evt) {
console.log("now it's ok");
console.log(getbufferedstart(a)); // 0
}

body>.as-console-wrapper{max-height:100vh}