В дополнение к статье Слежение за состоянием воспроизведения (playstate), которую я опубликовал ранее. Немного разобравшись, дополнил код выводом в статус прогресса буферизации.
Немного на перед забегая скажу — прогресс буферизации можно получить с помощью свойства Network.bufferingProgress.
Смотрим далее код…
В дополнение к статье Слежение за состоянием воспроизведения (playstate), которую я опубликовал ранее. Немного разобравшись, дополнил код выводом в статус прогресса буферизации, а также пришлось добавить проверку, какой же всё таки используется плеер — тот что в Embed или же в Object и вообще, установлен ли плагин WMP. Пожалуй со второго и начнём…
С прошлого раза HTML почти не поменялся(Другое радио только поставил 😉 ) :
Название станции: «Oi fm 101.5» Жанр: «Hard Rock» Страна: «Finland» Битрейт: «192»
Первым делом я пытаюсь определить — по какому ID обращаться к плееру можно? Это в нашем случае wmplayer_embed или же wmplayer.
//Здесь будем хранить ссылку на используемый плеер.
var player_current = false;
//Состояния плеера
var WMState = new Array();
WMState[0] = «Undefined»;
WMState[1] = «Stopped»;
WMState[2] = «Paused»;
WMState[3] = «Playing»;
WMState[4] = «Scan Forward»;
WMState[5] = «Scan Reverse»;
WMState[6] = «Buffering»;
WMState[7] = «Waiting»;
WMState[8] = «Media Ended»;
WMState[9] = «Transitioning»;
WMState[10] = «Ready»;
WMState[11] = «Reconnecting»;
//Проверка на созданный Embed
try
{
player_ebd = document.getElementById(‘wmplayer_embed’);
if(player_ebd.enabled)
{
player_current = player_ebd;
}
}catch(err){}
//Проверка на созданный Object
try
{
player_obj = document.getElementById(‘wmplayer’);
if(player_obj.enabled)
{
player_current = player_obj;
player_current.attachEvent(«playStateChange»,send_status);
}
}catch(err){}
//Вызывается для Object в событии playStateChange
function send_status()
{
view_status(player_current.playstate);
}
//вызывается при изменении состояния плеером в FireFox,
//Opera и других браузерах, использующих embed
function OnDSPlayStateChangeEvt(NewState)
{
view_status(NewState);
}
Процесс проверки необходимо в try вставить, т.к. ищем мы старым добрым методом тыка))).
Здесь мы попыталь обратиться к свойству «enabled» для каждого ID плеера. Тот, который отзовётся и есть используемый плеер, мы его загоняем в player_current и в дальнейшем обращаемся к нему. Немного ниже мы видим старые добрые функции, вызываемые в случае события «playStateChange» — OnDSPlayStateChangeEvt и send_status.
Также интересно то, что в случае если player_current не определён, мы имеем дело с ситуацией, когда плагин Windows Media Player просто не установлен. Поэтому у меня появилась вот такая проверка:
//Если плагин вообще не подключился
if (!player_current)
{
document.getElementById(‘status’).innerHTML = «Плагин WMP не установлен. Установите его для прослушивания радиостанции.»;
}
Далее приступим к получению прогресса буферизации.
Вообще есть событие buffering(Start), которое позволяет отследит появление буферизации. Но т.к. я уже отслеживаю состояние плеера, мудрить с функциями отдельно для браузеров использующих Object и отдельно для использующих Embed мне не хотелось. Поэтому я просто на основе старой доброй функции view_status сделал проверки на состояние буферизации потока и в случае, если такая имеет место — с задержкой опрашиваю свойство network.bufferingProgress:
//Глобальная переменная для хранения текущего статуса
var status_tmp = 0;
//Функция, пересылающая состояние плеера.
function view_status(status)
{
status_tmp = status;
document.getElementById(«status»).innerHTML = «Status: «+WMState[status];
if (status == 6)
{
setTimeout(«view_buff()»,100);
}
}
//Выводим текущий прогресс буферизации
function view_buff()
{
if(status_tmp == 6)
{
document.getElementById(«status»).innerHTML = «Status: «+WMState[status_tmp]+» «+player_current.network.bufferingProgress+»%»;
setTimeout(«view_buff()»,100);
}
}
Здесь мы создаём глобальную переменную status_tmp, с помощью которой далее отсекаем изменение статуса в случае, когда статус уже отличный от буферизации, а мы еще хотим вывести прогресс после задержки.
Собственно ничего сложного, но возможно кому-то поможет немного сохранить своё время.
Вот пример того, что у меня получилось в итоге:
Название станции: «Oi fm 101.5» Жанр: «Hard Rock» Страна: «Finland» Битрейт: «192»