Icecast - ретрансляция Internet-радиостанций

Версия для печатиОтправить другуPDF версия

Icecast

Довольно часто слушаю Internet-радио. Решил организовать ретрансляцию на собственном сервере, чтобы не "бегать" по разным сайтам. Да и опыт уже есть - есть уже медиа-сервер в локальной сети, который ретранслирует около сотни Интернет-радиостанций. Это еще один плюс - есть уже откуда брать потоки...

Итак, приступим... Для ретрансляции воспользуемся возможностями медиа-сервера Icecast. В портах есть две ветки - Icecast и Icecast2:

# cd /usr/ports && make search name='icecast'
Port:   icecast-1.3.12_2
Path:   /usr/ports/audio/icecast
Info:   A streaming mp3 audio server
Maint:  ports [at] FreeBSD [dot] org
B-deps:
R-deps:
WWW:    http://www.icecast.org/
 
Port:   icecast2-2.3.2_2,1
Path:   /usr/ports/audio/icecast2
Info:   A streaming mp3/ogg-vorbis audio server
Maint:  sunpoet [at] sunpoet [dot] net
B-deps: ca_root_nss-3.11.9_2 curl-7.19.6_1 gettext-0.17_1 gmake-3.81_3 libiconv-1.13.1 libogg-1.1.4,4 libshout2-2.2.2_3,1 libtheora-1.0_1 libvorbis-1.2.3,3 libxml2-2.7.3 libxslt-1.1.24_2 pkg-config-0.23_1 speex-1.2.r1_2,1
R-deps: ca_root_nss-3.11.9_2 curl-7.19.6_1 libiconv-1.13.1 libogg-1.1.4,4 libshout2-2.2.2_3,1 libtheora-1.0_1 libvorbis-1.2.3,3 libxml2-2.7.3 libxslt-1.1.24_2 pkg-config-0.23_1 speex-1.2.r1_2,1
WWW:    http://www.icecast.org/

Информацию о том, какие именно различия в проектах - не искал. Но из описания можно понять, что Icecast2 поддерживает кроме Mp3 еще и Ogg. Соответственно выполним из системы портов установку Icecast2:

# cd /usr/ports/audio/icecast2 && make install clean && rehash

По завершению установки Icecast2 выводит инструкции к подальшим действиям, что не может не радовать:

To start icecast at system boot, copy
/usr/local/etc/icecast.xml.sample to /usr/local/etc/icecast.xml, customize
to your environment as desired and add:
icecast_enable="YES"
to /etc/rc.conf. See the icecast -h command for optional additional
flags. To specify an alternative config file for example add:
icecast_flags="-c /path/to/your/configuration.xml"
**********************************************************************
**  Make sure the <changeowner> section in your configuration file  **
**     is NOT commented out. Icecast will refuse to run as root.    **
**                                                                  **
** Also make sure that the user you choose is able to write to your **
**  configured log directory, otherwise icecast will refuse to run. **
**********************************************************************

Следуя рекомендациям, скопируем файл конфигурации из предоставленного примера:

# cp /usr/local/etc/icecast.xml.sample /usr/local/etc/icecast.xml

Приступаем к редактированию конфигурационного файла. Отталкиваться будем от того, что в DNS я добавил запись radio.muff.kiev.ua, которая указывает на IP 195.3.159.250. Набросал в комментах немного "отсебятины", чтобы уловить суть параметров. Если что не так - просьба извинить, и посетить вот эту страницу. В листинге только 1 поток примонтирован, а по этой ссылке можно скачать конфигурационный файл с несколькими десятками потоков (на момент написания статьи - 87 радиостанций). Жанры самые разнообразные, поскольку ориентировался на вещание в локальную сеть.

Внимание! Конфигурационный файл icecast.xml должен быть в кодировке UTF-8, если в нем присутствует кирилица!

Листинг конфигурационного файла icecast.xml:

<icecast>
    <!-- Секция настройки лимитов и ограничений -->
    <limits>
        <!-- Максимальное одновременное количество слушателей -->
        <clients>1000</clients>
        <!-- Максимальное количество источников -->
        <sources>200</sources>
        <!-- Количество потоков для обработки клиентских подключений -->
        <threadpool>500</threadpool>
        <!-- Максимальный размер очереди в байтах для одного слушателя.
        Если абонент "отстает" вследствие загружености сети, поддерживается
        буфер указанного размера. Если пользователь отстает больше, чем
        указано, соединение разрывается-->
        <queue-size>524288</queue-size>
        <!-- Тайм-аут для абонента -->
        <client-timeout>30</client-timeout>
        <!-- Максимальное время ожидания запроса, когда абонент выполнил
        подключение к серверу -->
        <header-timeout>15</header-timeout>
        <!-- Тайм-аут для источника потока -->
        <source-timeout>10</source-timeout>
        <!-- Буферизировать ли поток -->
        <burst-on-connect>1</burst-on-connect>
        <!-- Размер буфера (в байтах)  -->
        <burst-size>65535</burst-size>
    </limits>
    <!-- Секция авторизации -->
    <authentication>
        <!-- Незашифрованный пароль, который используется для подключения к
        источнику потока. На данный момент имя пользователя должно быть
        только "source" -->
        <source-password>hackme</source-password>
        <!-- Используется у мастер-сервера как часть авторизации, когда
        слейв запрашивает список потоков -->
        <relay-password>hackme</relay-password>
        <!-- Имя пользователя и пароль, используемые для всех функций
        администрирования. -->
        <admin-user>admin</admin-user>
        <admin-password>hackme</admin-password>
    </authentication>

    <!-- Задание точки монтирования для использования по умолчанию -->
    <!--
    <shoutcast-mount>/live.nsv</shoutcast-mount>
    -->
    <!-- Расскоментировать для публикации информации о аудио-потоках сервера
    в icecast2 YP -->
    <!--
    <directory>
        <yp-url-timeout>15</yp-url-timeout>
        <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
    </directory>
     -->
    <!-- Имя хоста. Используется для подключения к серверу -->
    <hostname>radio.muff.kiev.ua</hostname>
    <!-- Возможно использование нескольких блоков <listener> -->
    <listen-socket>
        <!-- TCP-порт, используемый порт для клиентских подключений -->
        <port>8000</port>
        <!--IP-адрес, для привязки к конкретной сетевой карты. Если не
        указывать, то Icecast будет слушать запросы на всех интерфейсах -->
        <bind-address>195.3.159.250</bind-address>
        <!-- Дополнительные точки монтирования, используемые для подключения
        DSP-совместимых клиентов -->
        <!-- <shoutcast-mount>/stream</shoutcast-mount> -->
    </listen-socket>
    <!--
    <listen-socket>
        <port>8001</port>
    </listen-socket>
    -->
    <!-- Секция настройки relay -->
    <!--<master-server>127.0.0.1</master-server>-->
    <!--<master-server-port>8001</master-server-port>-->
    <!--<master-update-interval>120</master-update-interval>-->
    <!--<master-password>hackme</master-password>-->
    <!--<relays-on-demand>1</relays-on-demand>-->
    <relay>
        <!-- Сервер, с которого забираем поток -->
        <server>stream.16bit.fm</server>
        <!-- Номер порта, с которого забираем поток -->
        <port>9500</port>
        <!-- Точка монтирования на удаленном сервере -->
        <mount>/</mount>
        <!-- Локальная точка монтирования -->
        <local-mount>/16bit.fm</local-mount>
        <!-- Забирать поток только по запросу, тоесть только когда есть
        слушатели этого потока -->
        <on-demand>1</on-demand>
        <!-- Ретрансляция метаданных (названия песен, групп, etc) -->
        <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>
    <!-- Специфические настройки секции <mount>. Эта секция имеет настройки,
    которые касаются только конкретной точки монтирования и распостраняется
    на входящий поток, будь это релей либо же клиент источника. Используется
    для изменения глобальных/по умолчанию настроек, которые приняты с
    потоком.
    Нету необходимости указывать для каждого источника, хотя можно и
    задавать некоторые определенные параметры, такие как максимальное
    количество слушателей, точка монтирования, имя пользователя и пароль,
    etc.  -->
    <!--
    <mount>
        <mount-name>/example-complex.ogg</mount-name>
        <username>othersource</username>
        <password>hackmemore</password>
        <max-listeners>1</max-listeners>
        <dump-file>/tmp/dump-example1.ogg</dump-file>
        <burst-size>65536</burst-size>
        <fallback-mount>/example2.ogg</fallback-mount>
        <fallback-override>1</fallback-override>
        <fallback-when-full>1</fallback-when-full>
        <intro>/example_intro.ogg</intro>
        <hidden>1</hidden>
        <no-yp>1</no-yp>
        <authentication type="htpasswd">
                <option name="filename" value="myauth"/>
                <option name="allow_duplicate_users" value="0"/>
        </authentication>
        <on-connect>/home/icecast/bin/stream-start</on-connect>
        <on-disconnect>/home/icecast/bin/stream-stop</on-disconnect>
    </mount>
    <mount>
        <mount-name>/auth_example.ogg</mount-name>
        <authentication type="url">
            <option name="mount_add"       value="
http://myauthserver.net/notify_mount.php"/>
            <option name="mount_remove"    value="
http://myauthserver.net/notify_mount.php"/>
            <option name="listener_add"    value="
http://myauthserver.net/notify_listener.php"/>
            <option name="listener_remove" value="
http://myauthserver.net/notify_listener.php"/> </authentication> </mount>
    -->
    <!-- Этот флаг включает файловый сервер icecast2 -->
    <fileserve>1</fileserve>
    <paths>
        <!-- Родительский каталог, если chroot включен -->
        <basedir>/usr/local/share/icecast</basedir>
        <!-- Путь в каталог, используемый для логирования -->
        <logdir>/var/log/icecast</logdir>
        <!-- Родительский каталог для всех статический файлов. Этот каталог
        может местить в себе все стандартные типы файлов. Например, если
        задан как /var/share/icecast2, и пришел запрос на
        http://server:port/mp3/stuff.mp3, то используется файл
        /var/share/icecast2/mp3/stuff.mp3 -->
        <webroot>/usr/local/share/icecast/web</webroot>
        <!-- Путь, задающий каталог для всех запросов администратора -->
        <adminroot>/usr/local/share/icecast/admin</adminroot>
        <!-- <pidfile>/usr/local/share/icecast/icecast.pid</pidfile> -->

        <!-- Aliases: treat requests for 'source' path as being for 'dest' path
             May be made specific to a port or bound address using the "port"
             and "bind-address" attributes.
          -->
        <!--
        <alias source="/foo" dest="/bar"/>
          -->
        <!-- Aliases: can also be used for simple redirections as well,
             this example will redirect all requests for
http://server:port/ to the status page --> <alias source="/" dest="/status.xsl"/> </paths>
    <!-- Секция логгирования -->
    <logging>
        <!-- Лог файл записи доступа -->
        <accesslog>access.log</accesslog>
        <!-- Лог файл записи ошибок -->
        <errorlog>error.log</errorlog>
        <!-- <playlistlog>playlist.log</playlistlog> -->
        <!-- Уровень логгирования -->
        <loglevel>3</loglevel> <!-- 4 Debug, 3 Info, 2 Warn, 1 Error -->
         <!-- Максимальный размер лог-файла -->
        <logsize>100000</logsize>
        <!-- Архивирование лог-файлов. По умолчанию выключено, чтобы
        избежать заполнения файловой системы -->
        <!-- <logarchive>1</logarchive> -->
    </logging>
    <!-- Секция безопасности -->
    <security>
        <chroot>0</chroot>
        <!-- Запуск от другого пользователя -->
        <changeowner>
            <user>icecast</user>
            <group>icecast</group>
        </changeowner>
    </security>
</icecast>

Создадим групу и пользователя, от имени которых будет работать процесс icecast (в моем случае использовал свободные uid и gid 1004, советую проверить у себя свободные uid и gid):

# pw groupadd -n icecast -g 1004
# pw useradd -n icecast -u 1004 -g icecast -c Radioserver -d /nonexistent -s /sbin/nologin

Создадим каталог, куда будут писаться логи, укажем владельца каталога и добавим в rc.conf поддержку icecast:

# mkdir /var/log/icecast
# chown icecast:icecast /var/log/icecast
# echo '# Internet-radio' >> /etc/rc.conf
# echo 'icecast_enable="YES"' >> /etc/rc.conf

Пытаемся запустить icecast:

# sh /usr/local/etc/rc.d/icecast2 start
Starting icecast.

Проверим, есть ли icecast в процессах:

# ps -ax | grep icecast
85877  p1  S      0:00,00 /usr/local/bin/icecast -c /usr/local/etc/icecast.xml -b

Кажется все в порядке. Проверим, идет ли ретрансляция потока. Поскольку я задавал локальную точку монтирования 16bit.fm, поэтому в любом музыкальном плеере, который поддерживает потоковое вещание (например AIMP, WINAMP, etc) необходимо открыть следующий url: http://radio.muff.kiev.ua:8000/16bit.fm (в принципе можно даже в браузере открыть указанную ссылку, но в плеере, как на меня - намного удобней).

Собственно говоря - скриншот прослушивания потока с сервера:

Картинки

 Если же в браузере войти в "корень" радиосервера (тоесть на 8000 порт - http://radio.muff.kiev.ua:8000), то можно получить информацию о статусе работающего icecast-сервера. Скриншоты:

Картинки 

Картинки

Там же можно обнаружить линк в админ-панель. Воспользуемся логином и паролем администратора, указанными в  конфигурационном файле icecast.xml (параметры admin-user и admin-password) для входа в admin-панель. Скриншоты админ-панели:

Картинки

Картинки

Картинки

На этом базовую настройку Icecast для ретрансляции потоков Интернет-радиостанций можно завершить. Однако не стоит забывать, что есть еще поле для експериментов, поскольку Icecast - довольно мощный инструмент.

Ну и если просто хочется послушать радио, весь плейлист одним списком можно загрузить здесь. Если любите слушать какую-то радиостанцию, а в списке ее нету - пишите. Поищем и добавим.

На данный момент транслируются следующие радиостанции (для прослушивания достаточно кликнуть по ссылке):

  1. 16bit.fm MAIN (Россия)
  2. 16bit.fm CAFE (Россия)
  3. 16bit.fm CLUB (Россия)
  4. 16bit.fm I.D.E.A. (Россия)
  5. A-rock (Россия)
  6. @Плюс (Беларусь)
  7. Арси (Украина, Арциз)
  8. Авторадио (Украина, Киев)
  9. Байкер ФМ (Россия, Москва)
  10. CJ RADIO (Россия, Санкт-Петербург)
  11. Новое Чистое Радио (Россия)
  12. Дефджей Радио (Германия, Берлин)
  13. Ди ФМ Чиллаут (США, Вашингтон)
  14. Ди ФМ Драм`н`Бэйс (США, Вашингтон)
  15. Ди ФМ Гоа Транс (США, Вашингтон)
  16. Ди ФМ Вокал Транс (США, Вашингтон)
  17. Радиостанция электронной музыки (Россия, Москва)
  18. Европа Плюс (Украина)
  19. ФЖ ДиДжей Радио (Франция, Париж)
  20. Gala Radio (Украина)
  21. Гардарика (Россия, Санкт-Петербург)
  22. Итальянское Диско 80-х (Литва, Вильнюс)
  23. Джем FM (Украина, Киев)
  24. Кабриолет (Россия, Москва)
  25. Радио Киев (Украина, Киев)
  26. Кисс ФМ Ницца (Франция, Ницца)
  27. Радио Кукуруза (Россия, Москва)
  28. LUGA RADIO (Украина, Луганск)
  29. Мегаполис ФМ (Молдова, Кишинев)
  30. Радио "Мелодия" (Украина)
  31. Радио МФМ (Украина)
  32. MixFm (Украина)
  33. Молоде радіо (Украина)
  34. Милицейская волна (Россия)
  35. Народное радио Одесса (Украина, Одесса)
  36. Наше радио Сиэтл (США, Сиэтл)
  37. Наше Радио (Россия)
  38. Радио Nostalgie (Украина, Киев)
  39. Новая волна (Россия, Волгоград)
  40. Новое Радио Минск (Белорусия, Минск)
  41. Радио Obogrelov (Россия)
  42. Парадиз (США, Вашингтон)
  43. Party Hit Radio (Украина, Киев)
  44. Пилот FM (Росия, Екатеринбург)
  45. Польская станция (Польша, Варшава)
  46. Radio Premium (Россия)
  47. Промо Ди Джэй Канал 5 (Россия, Москва)
  48. RadioBengel (Украина)
  49. Радио Дача (Россия, Москва)
  50. Radio Enter (Украина)
  51. Мелодия (Росия, Москва)
  52. Most-radio (Россия, Пенза)
  53. Radio Record (Санкт-Петербург, Россия)
  54. Радио Риф (Россия, Бийск)
  55. RADIO TREK (Украина, Ровно)
  56. Заряд (Россия, Москва)
  57. Ральф Радио (Россия, Нижний Новгород)
  58. RelaxFM (Россия, Москва)
  59. Рок-онлайн (Россия, Москва)
  60. Радио Романтика (Болгария, София)
  61. Русская волна (Россия, Красноярск)
  62. Русское Радио Кухавен (Германия, Кухавен)
  63. Нуллвэйв Русский Рок (Россия, Новосибирск)
  64. Сан ФМ (Россия, Санкт-Петербург)
  65. Сан ФМ Альтернатива (Россия, Санкт-Петербург)
  66. Сан ФМ Драм`н`Бэйс (Россия, Санкт-Петербург)
  67. Сан ФМ POP (Россия, Санкт-Петербург)
  68. Сан ФМ Relax (Россия, Санкт-Петербург)
  69. Сан ФМ Транс (Россия, Санкт-Петербург)
  70. Первое Сексуальное Радио (Россия, Москва)
  71. Хорошее радио (Украина)
  72. Шарманка (Украина)
  73. Радио Сибирь (Россия, Тверь)
  74. Сім'я і Дім (Украина)
  75. Серебряный дождь (Россия)
  76. Скай ФМ Джаз (США, Нью-Йорк)
  77. Радио "Воруй-Убивай" (Россия)
  78. Стильное радио (Украина)
  79. Stream Line Radio KGZ (Киргизия)
  80. Стрий ФМ (Украина, Стрый)
  81. Радио Свисс Поп (Германия, Берн)
  82. Ультра (Россия, Москва)
  83. Юнитон (Россия, Новосибирск)
  84. Virus FM (Россия)
  85. Радио Забава (Бразилия, Понта Гроса)
  86. Зайцев Нет (Россия, Москва)

 

Ваша оценка: Пусто Средняя: 5 (2 голосов)

Из прочитанного можно сделать

Из прочитанного можно сделать вывод, что Ваша интернет-радиостанция стоит на локальной машине, которая постоянно подключена к сети Интернет. Верно?!
А как сделать тоже самое, но используя возможности обычного хостинга?
Я, например, пользуюсь стандартной схемой: Radioboss -> Shoutcast server.
Схема эта меня не устраивает, поскольку сейчас я столкнулся с проблемой подключения к эфиру нескольких ведущих.

И еще. Вы - занятный, увлеченный человек.  Рад был бы профессиональному знакомству с Вами.

Да, интернет-радиостанция

Да, интернет-радиостанция установлена на сервере под управлением операционной системы FreeBSD, которая расположена на техплощадке провайдера и имеет постоянное высокоскоростное подключение к сети Internet. Такое размещение ресурса называется colocation.

Как установить icecast на хостинге - сразу и не подскажу. Нужно рассматривать возможности хостинга.

На счет знакомства - буду только рад. Если Вы из Киева - можно встретиться и пообщаться, возможно найдутся общие интересы.

На почту отправил номер мобильного и аськи.

А где же Relax.FM?

А где же Relax.FM?

Если имелось ввиду

Если имелось ввиду relax-fm.ru, то добавил. Радиостанция №58 (на момент публикации сообщения) в списке прослушивания.

Будут еще пожелания - пишите.

Re: Icecast - ретрансляция Internet-радиостанций

Такой вопрос... Есть одна круная фирма с радиостанцией и есть провайдер который хочет оказывать услуги этой станции, суть в следующем, возможно ли поставить на сервер провайдера Icecast для ретрансляции аудиопотока 5000 пользователям? и подойдет ли мне для этого дела ваша инструкция?))

Re: Icecast - ретрансляция Internet-радиостанций

Здесь уже все завитит от того, каким образом планируете "забирать" поток.

Открывайте ветку на форуме, и будем обсуждать...

Re: Icecast - ретрансляция Internet-радиостанций

вот еще добавьте в список radiolistener.com (Stream Line Radio) Киргизия 

Re: Icecast - ретрансляция Internet-радиостанций

Done

Радиостанция под номером 79. Только просьба следить за эфиром - во время добавления станции в эфире звучала "тишина"

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Литература