Буферизация аудио
Приветствую!
Возникла проблема с буферизацией аудио, точнее с ее попыткой ее индикации. Подробнее. Создаю объект Audio, указываю трек.
var player = new Audio();
player.setAttribute('src', 'http://www.codebasehero.com/files/music-player/demo/mix/1.mp3');
player.addEventListener('progress', function(){
var buffered = this.buffered.end(0);
console.log(buffered);
});
player.play();
Пример на jsfiddle, музыкальный отрывок 30 сек -- http://jsfiddle.net/yH8t5/1/ Cуть такова. При первом обращении файл загружается и буферизуется нормально и в консоль выводится время конца буферизованного фрагмента. Но если не дождаться полной загрузки и отключить аудио (не важно, каким способом, закрыть вкладку, грубо говоря), то при повторном обращение выдается ошибка: Uncaught Error: IndexSizeError: DOM Exception 1 И нормальное выполнение события 'progress' будет только тогда, когда будет достигнут еще не буферизированный фрагмент. В общем, я так себе представляю ситуацию. Вопросов несколько: что я делаю не так и как узнать длину уже буферизированного фрагмента правильно? Спасибо. |
а значение буфера на "0" не легче сбивать при подключении?
|
Brook, бред
|
Путем рассматривания дебрей вконтактовского HTLM5-плеера родилось вот что
var player = new Audio();
player.setAttribute('src', 'http://dl.dropbox.com/u/95730813/1.mp3');
player.load();
var time = 276.331;
var onProgress = function(){
var buffered;
try{
buffered = (Math.floor(this.buffered.end(0) * 1000) / 1000) || 0;
}catch(e){}
if(time && Math.abs(time - buffered) < 0.1){
console.log('Buffered: 100%');
this.removeEventListener('progress', onProgress);
}else{
var percent = Math.ceil(buffered / time * 100);
percent = Math.min(100, Math.max(0, percent));
if(!isNaN(percent)){
console.log('Buffered: '+ percent +'%');
}
}
}
player.addEventListener('progress', onProgress);
$(document).ready(function(){
player.play();
});
http://jsfiddle.net/yH8t5/3/ Адовый костыль, т.к. нужно знать длину трека изначально. В моем конкретном случае это не критично, но костыль. Еще хотелось бы прочитать мнение более умных людей, чем я, как решать эту проблему :) |
| Часовой пояс GMT +3, время: 17:05. |