Главная » Полезные статьи » Разное » Радио-плеер с помощью HTML5 audio
Распечатать статью

Радио-плеер с помощью HTML5 audio

До появления HTML5 было крайне неудобно добавлять аудио на веб-страницы. Многие годы Flash был единственным способом вставки аудио-контента — но с внедрением тега <audio> в HTML5, воспроизведение аудио-контента на веб-страницах теперь может быть выполнено самим браузером, что полностью соответствует веб-стандартам — вы можете легко создать кнопку любого вида с помощью CSS и HTML, а потом назначить ей соответствующую функциональность, используя Audio API языка HTML5.

В этой статье мы познакомимся с тегом <audio>, начав с основ, посмотрим, как он работает в различных браузерах, а затем создадим радио-плеер, который будет использовать аудио-поток, транслируемый сервером.

Базовый синтаксис тега audio

Элемент <audio> прост в использовании. Для того чтобы создать плеер для проигрывания файла формата Ogg Vorbis, вам достаточно написать:

1 <audio src="http://yourserver/rockandroll.ogg" controls autobuffer> </audio>

После этого браузер создаст простой плеер на веб-странице. Ниже представлен элемент <audio>, созданный браузером Opera:

Native audio element in in Opera

Элемент <audio> имеет пять атрибутов, характерных для всех медиа-элементов в HTML5:

  • src содержит путь к аудио-файлу, который требуется воспроизвести. Атрибут src также может быть заменен одним или несколькими тегами <source> внутри элемента audio:
    1 <audio controls autobuffer>
    2      <source src="http://yourserver/rockandroll.ogg" />
    3  </audio>

    Благодаря этому вы можете использовать несколько элементов <source>, чтобы указать несколько аудио-форматов. Как вы позже убедитесь, разные браузеры поддерживают различные форматы, поэтому в идеале вам нужно указывать несколько форматов, чтобы обеспечить работу плеера во всех браузеров. Например:

    1 <audio controls autobuffer>
    2      <source src="http://yourserver/rockandroll.ogg" />
    3      <source src="http://yourserver/rockandroll.mp3" />
    4  </audio>
  • autoplay — атрибут, позволяющий воспроизводить аудио автоматически, сразу после загрузки страницы.

    Примечание: имейте в виду, что автозапуск раздражает многих пользователей. Если же вы используете функцию автозапуска, то предоставьте пользователю возможность приостановить воспроизведение.

  • autobuffer — атрибут, позволяющий начать автоматическую загрузку аудио-потока сразу после загрузки страницы без автоматического воспроизведения. Этот атрибут действует, только если не указан атрибут autoplay.
  • loop — атрибут, позволяющий проигрывать файл несколько раз после окончания его воспроизведения.
  • controls — атрибут, позволяющий показать или скрыть элементы управления плеером. Если вы не укажите этот атрибут, то элементы управления будут скрыты, а если вам необходимо создать собственные элементы управления — используйте JavaScript API и CSS для тега audio.

JavaScript API для тега audio

Элемент <audio> предоставляет мощный JavaScript API. В этой статье мы рассмотрим его лишь поверхностно, так как будем использовать один из плагинов jQuery для создания плеера, однако API все равно полезно знать.

В JavaScript мы можем вызвать объект Audio, который возвратит элемент <audio>. Обратите внимание на то, что этот элемент не будет частью объектной модели документа (DOM), пока мы явно не добавим его на страницу с помощью других функций. Однако, независимо от того является он частью DOM или нет, элемент <audio> можно контролировать через его API методы и свойства. Мы можем передать URL файла, который необходимо воспроизвести, в качестве аргумента объекта:

1 var audio = new Audio("http://yourserver/rockandroll.ogg");

Мы также можем изменить атрибут src:

1 audio.setAttribute("src", "http://yourserver/morerock.ogg");

Обращаясь к методам audio.play() и audio.pause() можно начать или приостановить воспроизведение файла. Параметр audio.volume задает громкость, а обработчик события timeupdate запускается каждый раз, когда обновляется время воспроизведения. Этих простых методов нам будет достаточно для создания радио-плеера.

Давайте посмотрим на эти возможности в действии! Следующий скрипт создаст элемент <audio> и назначит обработчики событий к нескольким HTML-кнопкам, которые мы будем использовать для управления воспроизведением:

01  // Создаем новый объект Audio
02  var audio = new Audio('test.ogg');
03  
04  // Добавляем к кнопке с идентификатором "play" обработчик события onclick, внутри которого вызывается метод play
05 var play = document.getElementById('play');
06  play.addEventListener('click', function(){
07      audio.play();
08  }, false);
09  
10  // Находим кнопку и прикрепляем метод на событие onclick
11  var pause = document.getElementById('pause');
12  pause.addEventListener('click', function(){
13      audio.pause();
14  }, false);
15  
16  // Найти HTML5-элемент input типа range и добавить обработчик события onchange для настройки звука
17  var volume = document.getElementById('volume');
18  volume.addEventListener('change', function(){
19      audio.volume = parseFloat(this.value / 10);
20  }, false);
21  
22  // Добавить обработчик события timeupdate для вывода времени воспроизведения
23  audio.addEventListener("timeupdate", function() {
24      var duration = document.getElementById('duration');
25      var s = parseInt(audio.currentTime % 60);
26      var m = parseInt((audio.currentTime / 60) % 60);
27      duration.innerHTML = m + '.' + s + 'sec';
28  }, false);

Скрипт, приведенный выше, применяется к такому HTML-коду:

1 <div>
2      <input id="play" type="button" value="Play" />
3      <input id="pause" type="button" value="Pause" />
4      <span id="duration"> </span>
5  </div>
6  <div>
7      Громкость:
8      <input id="volume" type="range" min="0" max="10" value="5" />
9  </div>

Просмотреть пример

Если вы хотите узнать больше о Audio API, я предлагаю познакомиться вам со статьей Саймона Питерса «everything you need to know about HTML5 video and audio».

Поддержка кодеков в браузерах

Судьба элемента <audio> очень похожа на  <video> в HTML5. Было много дебатов и разногласий по поводу того, какой видео-формат использовать (более подробно об этом с статье Введение в HTML5 видео), — и по аудио-формату были такие же горячие дискуссии. В настоящее время поддержка кодеков в популярных браузерах выглядит следующим образом:

Браузер Ogg Mp3 Wave
Opera 10.50 x x
Firefox 3.5 x x
Safari 4 x x
Chrome 3 x x
IE 8

Для поддержки нескольких браузеров нам необходимо указывать один и тот же аудио-трек в нескольких форматах. Как было упомянуто ранее, вы можете указать несколько разных форматов с помощью тегов <source>, помещенных внутри элемента <audio>:

1 <audio controls autobuffer>
2      <source src="http://yourserver/rockandroll.ogg" />
3      <source src="http://yourserver/rockandroll.mp3" />
4      <!-- Возможно следует также указать и Flash-содержимое для совместимости со старыми браузерами, типа IE :) -->
5  </audio>

Для совместимости со старыми браузерами, которые не поддерживают элемент <audio>, можно (и следует) указать код Flash-плеера между открывающим и закрывающим тегами audio.

Потоковое воспроизведение с помощью элемента <audio>

Мы сделали плеер с помощью тега audio, способный воспроизводить аудио-файлы в различных браузерах. Однако, теперь перед нами стоит вопрос — как обрабатывать потоковые аудио-данные, используя элемент <audio>. Целью остальной части этой статьи является создание радио плеера с потоковым воспроизведением на основе элемента <audio>.

Создание HTML5-плеера

Мы будем использовать аудио-поток, предоставляемый норвежским радио NRK. NRK предоставляет каждый радио канал в двух форматах: Ogg и MP3, так что у нас есть два источника для потокового аудио.

Чтобы решить проблемы кроссбраузерности и поддержки разных аудио-форматов различными браузерами, мы будем использовать jQuery-плагин jPlayer. jPlayer предоставляет стандартный интерфейс с использованием встроенного в HTML 5 элемента audio, который поддерживается современными браузерами, а также использует Flash для работы в старых браузерах. Благодаря поддержки одного и того же интерфейса и для элемента <audio>, и для Flash, можно создать общий дизайн с помощью JavaScript, CSS и HTML, не беспокоясь о том, какой у пользователя браузер и какой плеер будет использоваться, HTML5 или Flash.

Данные для создания плеера

Для начала нам нужно создать набор данных JSON, содержащий информацию об аудио-потоках. Мы включаем общую информацию о радиостанции и каждом радиоканале — URL-адреса потоков, имена каналов и URL, указывающий на логотип каждого канала:

01 {
02   "station" : {
03     "name" : "NRK",
04     "fullname" : "Norsk Rikskringkasting AS",
05     "website" : "http://www.nrk.no/",
06     "defaultChannel" : "P1",
07     "channels" : [
08     {
09       "name" : "P1",
10       "channel" : "NRK P1",
11       "website" : "http://www.nrk.no/p1/",
12       "schedule" : "",
13       "logo" : "http://yoursite/gfx/nrk_p1.png",
14       "streams" : {
15         "type" : "middle",
16         "ogg" : "http://radio.hiof.no/nrk-p1-128.ogg",
17         "mp3" : "http://radio.hiof.no/nrk-p1-128"
18       }
19     }
20     ]
21   }
22 }

Настройка структуры и дизайна плеера

Нашим следующим шагом будет создание структуры HTML для плеера и его элементов управления:

01 <div id="radio-player" class="radio-default">
02  
03   <!-- Audio placeholder used by jPlayer -->
04   <div id="player"> </div>
05  
06   <!-- Container for channel picker -->
07   <div id="channelPicker">
08     <a tabindex="8" accesskey="l" id="paginationLeft" class="inactive"><span>Left</span></a>
09     <div id="channels"> </div>
10     <a tabindex="9" accesskey="r" id="paginationRight" class="active"><span>Right</span></a>
11   </div>
12  
13   <!-- Container for display -->
14   <div id="display">
15     <a id="currentChannel"><img src="gfx/default/default-station.png" /></a>
16     <span id="duration"> </span>
17     <span id="quality"> </span>
18   </div>
19  
20   <!-- Containers for admin functions -->
21   <a tabindex="7" accesskey="c" id="displayChannelPicker" title="Channels"><span>Channels</span></a>
22   <a id="config">Config</a>
23  
24   <!-- Containers for jPlayer actions -->
25   <a tabindex="3" accesskey="d" id="volumeMin" title="Mute"><span>Mute Volume</span></a>
26   <a id="volume"><span>Adjust Volume</span></a>
27   <a tabindex="4" accesskey="u" id="volumeMax" title="Max"><span>Max Volume</span></a>
28   <a tabindex="1" accesskey="p" id="play" title="Play"><span>Play</span></a>
29   <a id="pause" title="Pause"><span>Pause</span></a>
30   <a tabindex="2" accesskey="s" id="stop" title="Stop"><span>Stop</span></a>
31  
32   <!-- Container for error messages -->
33   <div id="error">
34     <h2>Error</h2>
35     <p> </p>
36   </div>
37  
38  </div>

Каждый элемент <a> и <div> имеет свой идентификатор id, так что можно легко обратиться к этим элементам и назначить им обработчики событий для управления плеером с помощью Audio API.

Каждая кнопка оформлена с помощью CSS:

01 /**
02    * Play button
03    */
04  .radio-default #play{
05      position: absolute;
06      top: 75px;
07      left: 255px;
08      width: 40px;
09      height: 40px;
10      background-image: url(../gfx/default/button-play.png);
11      background-position: top left;
12      background-repeat: no-repeat;
13      cursor: pointer;
14  }

Следует также отметить, что мы задали класс .radio-default для элемента <div>, который содержит в себе весь плеер. Теперь мы можем использовать его для удобного определения стилей в CSS:

1 .radio-default #play{
2      /* some style */
3  }

Благодаря возможности установки нескольких классов у одного элемента в HTML мы можем создать стили оформления плеера (скины) и переключать их, всего лишь изменяя один из классов:

1 .radio-different #play{
2      /* some different style */
3  }

Заставим плеер работать

Наш последний шаг по использованию плагина jPlayer — создание необходимой функциональности. Для начала нужно подключить в HTML скрипты библиотеки jQuery и плагина jPlayer, а также собственный файл с кодом по настройке плеера (player.js), добавив следующий код:

1 <script src="script/jquery-1.4/jquery.min.js"> </script>
2 <script src="script/jplayer-1.1.7/jquery.jplayer.js"> </script>
3 <script src="script/player.js"> </script>

Для начала создадим переменную с объектом jQuery, в который будет сгенерирован элемент <audio>:

1 var playerElement = jQuery("#player");

Далее мы получаем данные о необходимом аудио-потоке в формате JSON с помощью AJAX:

01 jQuery.ajax({
02      url: "http://yourserver/channels.json",
03      dataType: 'json',
04      ifModified: true,
05      success: function(data, status){
06          for (var i = 0, len = data.station.channels.length; i < len; i++) {
07  
08              // добавить каждый канал в список выбора каналов плеера
09  
10          }
11      }
12  });

Когда AJAX-запрос вернет данные с сервера, необходимо обойти все полученные каналы в цикле и добавить их в список выбора каналов плеера. Список выбора каналов — в нашем случае это просто список изображений с логотипом каждого канала и обработчиком события onclick на каждом изображении для изменения аудио-потока в плеере, позволяющий пользователю выбрать любой из доступных каналов.

Список выбора каналовСписок выбора каналов

Функция, прикрепленная в качестве события onclick к каждому изображению в списке выбора каналов, содержит вызов метода очистки текущего воспроизводимого файла и метода выбора нового потока в элемент <audio>:

1 changeChannel:function(){
2  
3      // Удалить старый поток
4      playerElement.jPlayer("clearFile");
5  
6      // Задать новый поток
7      playerElement.jPlayer("setFile", "urlToNewMP3Stream", "urlToNewOGGStream");
8  }

Плагин jPlayer позаботиться об очистке старого потока и установки нового в элемент <audio>. jPlayer определяет, какие типы потоков поддерживает браузер и необходимо ли использование Flash вместо HTML 5 для проигрывания аудио-потока. После того как мы прочитали данные о полученном канале и изменили вид списка выбора каналов, нам нужно прикрепить настроенный функционал к HTML-разметке.

01 playerElement.jPlayer({
02      ready: function(){
03          this.element.jPlayer("setFile", urlToDefaultMp3Stream, urlToDefaultOggStream);
04      },
05      swfPath: "script/jplayer-1.1.1/",
06      nativeSupport: true,
07      volume: 60,
08      oggSupport: true,
09      customCssIds: true
10  })
11  .jPlayer("cssId", "play", "play")
12  .jPlayer("cssId", "pause", "pause")
13  .jPlayer("cssId", "stop", "stop")
14  .jPlayer("cssId", "volumeMin", "volumeMin")
15  .jPlayer("cssId", "volumeMax", "volumeMax")
16  .jPlayer("cssId", "volumeBar", "volume")
17  .jPlayer("onProgressChange", function updateDuration(lp,ppr,ppa,pt,tt) {
18       jQuery("#duration").text(jQuery.jPlayer.convertTime(pt));
19  });

Вышеуказанный код добавляет jPlayer в элемент с идентификатором #player. В настройках вызова плагина мы задаем элемент <audio> для использования по умолчанию (nativeSupport: true;), если браузер поддерживает этот элемент HTML 5; мы также устанавливаем громкость по умолчанию (volume: 60), расположение плагина Flash для обратной совместимости со старыми браузерами (swfPath: "script/jplayer-1.1.1/"), используем формат Ogg по умолчанию, если он поддерживается (oggSupport: true) и функцию, которая будет запущена после инициализации плеера (ready: function( ... );).

В функции ready мы настраиваем радио-канал по умолчанию.

Наконец, мы указываем плагину jPlayer на идентификаторы различных кнопок управления и настраиваем обработчик события при проигрывании аудио, для того чтобы изменять время воспроизведения на панели нашего плеера.

Заключение

В этой статье мы постарались рассмотреть в деталях элемент HTML5 <audio>, использовали плагин jQuery для легкого создания кроссбраузерного радио-плеера.

Источник:   w3pro.ru

Вы можете оставить комментарий, или обратную ссылку на Ваш сайт.

Оставить комментарий

Похожие статьи