Буферизация аудио
Приветствую!
Возникла проблема с буферизацией аудио, точнее с ее попыткой ее индикации. Подробнее. Создаю объект 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, время: 12:23. |