Управление радиоэфиром через браузер

Airtime LogoВ процессе создания своей радиостанции поток идей дошел до ведения эфиров через веб-интерфейс. Сначала пытался найти готовые решения, но в рунете почти ничего не нашел. Начал продумывать способ реализации и чудом наткнулся на статью в английской версии Википедии про Airtime (до 18 января 2011 г. – Campcaster) от Sourcefabric.

Возможности Airtime:
  • Создание эфирной сетки и плейлистов через веб-интерфейс ;
  • Загрузка музыки через браузер (поддержка drag and drop);
  • Регистрация ведущих, которые имеют доступ к админке и могут управлять эфирами;
  • Создание виджетов с расписанием эфиров и треков для сторонних сайтов;
  • Возможность записывать эфиры для повторной трансляции;
  • Несколько вариантов трансляции аудиопотока.
Минимальные системные требования, описанные в официальной инструкции: 1Ghz процессор и 512Mb оперативной памяти.

Выбор параметров сервера


Первый тестовый сервер:
  • ОС: Ubuntu-10.10-x86_64;
  • CPU: 500Mhz;
  • Память: 256Mb;
  • Дисковое пространство: 5000Mb.

Нагрузка на «холостом ходу» без слушателей доходила до 90%. В обычном режиме сервер не смог бы поддерживать комфортное прослушивание радио. Да и все программные модули занимают почти 1Гб, что составляет 20% от общего дискового пространства.

Второй сервер:
  • ОС: Ubuntu-10.10-x86_64;
  • CPU: 750Mhz;
  • Память: 512Mb;
  • Дисковое пространство: 20Gb.

Этот сервер показал себя лучше. На «холостом ходу» нагрузка на процессор в среднем 25%, можно использовать в качестве сервера для небольшого количества слушателей.

Настройка сервера


Airtime со всеми необходимыми пакетами можно установить как в ручном режиме, так и автоматически. В любом случае нужно подготовиться, а именно добавить Surcefabric в список репозиториев, потому что у них есть все необходимые пакеты.
$ nano /etc/apt/sources.list

Для Ubuntu добавляем строку:
deb apt.sourcefabric.org lucid main
#или
deb apt.sourcefabric.org maverick main


Для Debian:
deb apt.sourcefabric.org squeeze main

Обновляем список репозиториев:
$ apt-get update

Устанавливаем ключ подписи:
$ apt-get install sourcefabric-keyring

Airtime для хранения плейлистов, информации о треках и пользователях использует базу данных PostgreSQL. Поэтому устанавливаем ее:
$ apt-get install postgresql

Для того чтобы пользователи могли услышать эфир нужно установить потоковый сервер. Я использую для этих целей Icecast2, так как он очень удобен для настройки и использует мало системных ресурсов.
$ apt-get install icecast2

Если трансляция планируется на аудиовыход звуковой карты, то нужно удалить аудиосервер PulseAudio, а вместо него поставить ALSA микшер.
$ apt-get purge pulseaudio

Для графического интерфейса:
$ apt-get install gnome-alsamixer

Для консоли:
$ apt-get install alsa-utils

Установка Airtime в ручном режиме

Установка всех необходимых пакетов:
$ apt-get install apache2 curl daemontools daemontools-run ecasound \
gzip libao-ocaml libapache2-mod-php5 libcamomile-ocaml-dev libesd0 \
libmad-ocaml libmp3lame0 libmp3lame-dev libportaudio2 libsamplerate0 \
libsoundtouch-ocaml libtaglib-ocaml libvorbis-ocaml-dev mpg123 multitail \
odbc-postgresql oggvideotools openssl php-pear php5-curl php5-gd \
php5-pgsql poc-streamer pwgen python python-configobj python-mutagen \
python-pip python-setuptools rabbitmq-server tar unzip


Далее устанавливаем необходимые для работы Airtima модули для Python:
$ pip install kombu
$ pip install poster


Устанавливаем phing:
$ mkdir -p /tmp/pear/cache
$ pear channel-discover pear.phing.info
$ pear install phing/phing-2.4.2


Скачиваем, распаковываем и устанавливаем Airtime:
$ wget downloads.sourceforge.net/project/Airtime/1.8.1/Airtime-1.8.1.tar.gz
$ tar -xvzf Airtime-1.8.1.tar.gz -C /var/lib/
$ chown -R root.root /var/lib/Airtime/
$ cd /var/lib/Airtime/install/
$ php Airtime-install.php


Работаем с Apache. Настраиваем необходимые модули и создаем конфигурацию виртуального хоста:
$ a2enmod php5 rewrite
$ nano /etc/apache2/sites-available/Airtime


В открытом файле прописываем:
<VirtualHost *:80>
ServerName example.com
ServerAdmin admin@example.com
DocumentRoot /var/www/Airtime/public
SetEnv APPLICATION_ENV "development"

<Directory /var/www/Airtime/public>
DirectoryIndex index.php
AllowOverride all
Order allow,deny
Allow from all
</Directory>
</VirtualHost>

Сохраняем и перезагружаем Apache
$ /etc/init.d/apache2 reload

Настраиваем PHP под работу Airtime, для этого в файле /etc/php5/apache2/php.ini необходимо найти и изменить следующие параметры:
memory_limit = 256M
magic_quotes_gpc = Off
file_uploads = On
upload_tmp_dir = /tmp
phar.readonly = Off

Дальше нам не обходимо настроить Icecast2, для этого идем редактировать конфигурационный файл /etc/icecast2/icecast.xml. Наиболее важно прописать пароль для вещания из сторонних приложений, его нужно будет прописывать и в других конфигурационных файлах. Пароли прописываем между тегами <source-password>, <relay-password> и <admin-password>
<authentication>
        <source-password>somepassword</source-password>
        <relay-password>somepassword</relay-password>
        <!-- Доступ к админке icecast2 -->
        <admin-user>admin</admin-user>
        <admin-password>adminpassword</admin-password>
</authentication>

После этого нам надо разрешить запуск icecast2:
$ nano /etc/default/icecast2

Заменить строку ENABLE=false на ENABLE=true, сохранить и перезапустить IceCast2:
$ service icecast2 start

Далее нам нужно настроить liquidsoap, который будет направлять поток с Airtime на IceCast2:
$ nano /etc/Airtime/liquidsoap.cfg

В секции «stream settings» прописываем параметры доступа к icecast2.
# Необходимо прописать тот же пароль, что и в icecast.xml
Icecast_pass = “somepassword”
# Какой поток, будем отправлять. Можно со звуковой карты или отправлять в формате
# Ogg Vorbis и MP3. Для свого сервера я формировал поток в MP3, без использования
# звуковой карты.
output_sound_device = false
output_icecast_vorbis = false
output_icecast_mp3 = true

Перезапускаем сервер и можем начинать эфир.

Установка в автоматическом режиме

$ mkdir -p /tmp/pear/cache
$ apt-get install Airtime


Во время установки будут заданы вопросы по конфигурации Apache2 и RabbitMQ.
После установки необходимо настроить PHP, IceCast2, Liquidsoap и Airtime. Перезапускаем сервер и можем начинать эфир.

Настройка эфира через веб-панель


Идем на виртульный хост, который прописан в /etc/apache2/sites-available/Airtime (в нашем случае example.com), нас приветствует форма авторизации. С самого начала логин и пароль – «admin».


После входа выбираем в меню «CONFIGURE -> Manage Users» и меняем пароль администратора, тут же можно создать новых пользователей, с разными типами доступа.


Во вкладке «ADD MEDIA» у нас есть возможность загрузить музыку, которую мы планируем использовать на радио. Поддерживается мультизагрузка и «drag and drop».


Вкладка «PLAYLIST BUILDER» позволяет создать новые плейлисты. Это осуществляется путем перетаскивания треков из списка загруженных в плейлист.


Во вкладке «CALENDAR» мы создаем и редактируем сетку эфиров.


Как только мы настроим эфиры, добавим музыку и плейлисты, то нужная музыка будет играть четко по расписанию.
Идем на example.com:8000 и можем прослушать свое радио.

Заключение


Достоинства Airtime:
  • Простая установка;
  • Понятный графический интерфейс;
  • Гибкость настройки;
  • Возможность транслировать эфир на звуковую карту.

Недостатки:
  • Сильно нагружает систему;
  • Плохая поддержка кириллицы.

Если вы планируете транслировать свою радиостанцию для большого количества слушателей, то лучше использовать несколько серверов:
  1. Сервер средней мощности для установки на него Airtime и всех сопутствующих утилит;
  2. Мощный сервер для установки на него Icescast2, который будет ретранслировать поток с первого сервера.


Больше информации про Airtime и его настройку можно найти на сайте разработчика: www.sourcefabric.org/en/products/Airtime_overview
Поделиться публикацией
Комментарии 34
    0
    Вкусно, но дорого.
      0
      Зато сравнительно out-of-the-box. Помнится, пару лет назал играла у нас станция для своих с периодическими живыми включениями — и то-то я намаялся с созданием сетки под эфир на шауткасте.
        +2
        Для ретрансляции подойдет средний VPS с широким каналом на отдачу.
        Сервер же транслирующий можно и дома поставить, но при условии стабильного провайдера. Скорость необходимая зависит от качества музыки. Для онлайн-радио 192 кбит/с будет хватать.
          0
          а что именно дорого? Ведь программа бесплатна?
            +1
            Программа бесплатна. Наверно, имелось ввиду, что дорого сервер содержать.
              +1
              Ну если этот параметр учитывать, то зависит от того где живёте. Например у меня свой игровой сервер в Севастополе(Крым). Там канал 60/20мбит (500р) и электричество (0,2гр=~70коп) и жрёт сервер ватт 500 не более при пике нагрузок. и того выходит не очень таки гигантская сумма… Ну а в Питере при таком же конфиге я влетел бы огого в какую копеечку). Для статистики: 500ватт/ч*24*30=360кВатт*0,2=72грн(~255р). Итого получаем 255+500=755р. При расчёте на питерские цены одно электричество будет только: 360*2,75р=990р. Это всё примерные цены и расчёты(лол) так что не следует их брать за основу. Так же примите к сведению, что за аренду помещения я не плачу. сервер стоит, точнее висит в прихожей в квартире. Так что арендная плата какбы уже уплочена в квартплату. Всё) Если конечно это имелось ввиду))
          +3
          Можете объяснить, зачем для серверов такой конфигурации (CPU 500-750Mhz, RAM 256-512MB) вы выбрали сборку дистрибутива x86_64? Почему не 32-битную x86 (i386), ведь Ubuntu Server до сих пор продолжает выпускаться и в версии x86 тоже.
            0
            Подозреваю. что это был какой-нибудь VPS без возможности выбора архитектуры.
              0
              При обычном использовании разница не существенна, на слабых серверах можно использовать 32-битную версию.
              64-битную сборку выбрал лишь потому что собираюсь ставить радиостанцию на мощный сервер, помимо самой станции в планах установка еще нескольких сервисов.
              Об этом опишу позже.
              0
              Интересно, спасибо за статью.
              Сам когда-то увлекался онлайн радиовещанием для друзей, но в то время ни знаний ни опыта не было и приходилось пользоваться фмхостом.
                +1
                Я с детства мечтал о собственной радиостанции.
                Потом имел небольшой опыт на ShoutCast под Winamp'ом. Когда накопил денег, решил этим заняться вплотную, начал изучать Unix, экспериментировать.
                Сейчас постоянно ищу информацию по этому поводу, в рунете информации очень мало, в основном копипаст.
                  0
                  Чисто из любопытства, до Airtime с чем дело имели?
                    +2
                    С самого начала — ShoutCast под Windows.
                    Потом перешел на Unix версию. А дальше Icecast2+ices0+SAM Broadcaster, в итоге ices0 поменял на mpd.
                0
                простите, не понял, можно ли в микрофон вещать онлайн?
                  0
                  К сожалению, в AirTime такой возможности нету.
                  Если Вы хотите вещать при помощи микрофона, то можно использовать несколько приемов:
                  1.) Использовать SAM Broadcaster (это довольно мощный продукт для ведения эфиров)
                  2.) Передавать на транслирующий сервер поток с речью и соединить в один
                    +1
                    Второй вариант как по мне более привлекателен, немного приглушить звук на первом потоке и вуаля!
                      0
                      «Передавать на транслирующий сервер поток с речью и соединить в один» — icecast2 этого не умеет. Но он умеет переключаться на другой «запасной» поток в случае отсутствия основного источника при помощи механизма fallback-mount. То есть, если диджей отдыхает, то вещается «запасной» поток, например, при помощи ices0, ices2 или ezstream. Когда диджей подключается к вещанию, то icecast2 автоматом обнаруживает это и начинает выдавать в эфир поток диджея.

                      На нашем локальном интернет радио, ретранслирующем спутниковое радио в сеть, мы переключаем на поток, вещающий тишину (файл silence.mp3 :). В случае интернет-радио с ведущими схема простая — создаётся маунт-пойнт для «основного» потока, который переключается на запасной маунт-пойнт.

                          <mount>
                              <mount-name>/dj-radio</mount-name>
                              <password>hackme</password>
                              <hidden>0</hidden>
                              <fallback-mount>/backup-radio</fallback-mount>
                              <fallback-override>1</fallback-override>
                              <fallback-when-full>1</fallback-when-full>
                          </mount>
                      
                          <mount>
                              <mount-name>/backup-radio</mount-name>
                              <password>hackme2</password>
                              <hidden>1</hidden>
                              <no-yp>1</no-yp>
                          </mount>
                      
                    0
                    Очень интересная штука. Я начинал такое делать для erlyvideo, но заказчик слился.
                      0
                      А какой-то минимальный генератор плейлистов предусмотрен? Или какая-то совместимость с тем же powergold, например? Все-таки грамотно выстроенный плейлист — основа радиоэфира
                        +1
                        Во вкладке «PLAYLIST BUILDER», создаются плейлисты.
                        Есть возможность создания плавного перехода между треками, показывается информация о треках, их длительность.
                        При заполнении эфирной сетки, видно заполнение эфира, если он до конца не забит или переполнен — вылезет предупреждение.
                        +1
                        кстати для тех, кого заинтересовал календарь с одного из скринов — это так называемый wdCalendar. Очень вкусный аналог Google Calendar, написанный китайскими (и не только) разработчиками.

                        к чему это? да по сути ни к чему. просто однажды по работе, очень нужен был хороший календарь, с кучей возможностей и желательно походивший на Google Calendar. так и нашёлся: www.web-delicious.com/jquery-plugins-demo/wdCalendar/sample.php

                        p.s. мне приходилось сильно его раздербанивать и вводить новый функционал. и скажу, что несмотря на то, что документации по нему мало — всё равно отлично поддался пониманию исходный код.

                        // думаю вы понимаете, что это не реклама. просто на случай, если кому-то будет нужно. и как показывает практика — нужно бывает.
                          0
                          А разве это не fullcalendar? arshaw.com/fullcalendar/
                            0
                            кстати как вариант вполне даже
                              –1
                              Мне нравиться, уже 2 проекта на нем сделал
                          +1
                          Спасибо за пост, сейчас как раз делаем проект онлайн — радио
                          Натыкались на Airtime, но сочли его слишком тяжелым.
                          Решили писать все свое на Питон/Джанго
                            0
                            А node.js еще моднее джанги сейчас :)
                              +1
                              Нужно посмотреть, что и как с ним можно сделать. С node.js не сталкивался =(
                              0
                              Надеюсь, поделитесь опытом.
                                0
                                Я думаю как закончим будет подробный пост и о проекте и об инструментах, которыми пользовались для его создания
                              0
                              Вроде есть отечественный «аналог» radiocms.ru
                                0
                                поправьте пожалуйста строки

                                edit /etc/apt/sources.list
                                deb apt.sourcefabric.org/ squeeze main

                                #sudo apt-get update
                                #sudo apt-get install sourcefabric-keyring

                                А то у Вас сначало скачать то, неизвестно откуда.
                                  +1
                                  Верно, поменял местами. Спасибо!
                                  0
                                  А не подскажите где в debian 6 взять libmp3lame0 уже просто мз взорвал с данной либой

                                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                Самое читаемое