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

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

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 - довольно мощный инструмент.

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

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

  • 16bit.fm MAIN (Россия) 
  • 16bit.fm CAFE (Россия)
  • 16bit.fm CLUB (Россия)
  • 16bit.fm I.D.E.A. (Россия)
  • 16bit.fm Back To Mine (Россия)
  • A-rock (Россия)
  • @Плюс (Беларусь)
  • Арси (Украина, Арциз)
  • Авторадио (Украина, Киев)
  • Байкер ФМ (Россия, Москва)
  • CJ RADIO (Россия, Санкт-Петербург)
  • Новое Чистое Радио (Россия)
  • Дефджей Радио (Германия, Берлин)
  • Di FM Ambient (США, Вашингтон)
  • Ди ФМ Драм`н`Бэйс (США, Вашингтон)
  • Европа Плюс (Украина)
  • Radio Farwater Blues
  • Radio Farwater Country
  • Radio Farwater Rock
  • Radio Farwater Live
  • Radio Farwater Melodic
  • Radio Farwater Old Music
  • Radio Farwater Best Chart
  • Radio Farwater Tribute
  • Radio Farwater Old Blues
  • ФЖ ДиДжей Радио (Франция, Париж)
  • Gala Radio (Украина)
  • Гардарика (Россия, Санкт-Петербург)
  • Radio Italo
  • Джем FM (Украина, Киев)
  • Кабриолет (Россия, Москва)
  • Кисс ФМ Ницца (Франция, Ницца)
  • Радио Кукуруза (Россия, Москва)
  • LUGA RADIO (Украина, Луганск)
  • Мегаполис ФМ (Молдова, Кишинев)
  • Радио МФМ (Украина)
  • MixFm (Украина)
  • Молоде радіо (Украина)
  • Народное радио Одесса (Украина, Одесса)
  • Радио Nostalgie (Украина, Киев)
  • Парадиз (США, Вашингтон)
  • Польская станция (Польша, Варшава)
  • Radio Premium (Россия)
  • Промо Ди Джэй Show Garage (Россия, Москва)
  • Мелодия (Росия, Москва)
  • Most-radio (Россия, Пенза)
  • Radio Record (Санкт-Петербург, Россия)
  • Radio Record Trancemission (Санкт-Петербург, Россия)
  • Radio Record Club (Санкт-Петербург, Россия)
  • Radio Record Drum and Bass (Санкт-Петербург, Россия)
  • Radio Record VIP Mix (Санкт-Петербург, Россия)
  • Radio Record Teodor (Санкт-Петербург, Россия)
  • Radio Record Dance Core (Санкт-Петербург, Россия)
  • Radio Record Breaks (Санкт-Петербург, Россия)
  • Radio Record Chillout (Санкт-Петербург, Россия)
  • Radio Record Dubstep (Санкт-Петербург, Россия)
  • Radio Record Superdiskoteka 90 (Санкт-Петербург, Россия)
  • Radio Record Pump (Санкт-Петербург, Россия)
  • Radio Record Middle (Санкт-Петербург, Россия)
  • Radio Record GopFM (Санкт-Петербург, Россия)
  • Radio Record Russian Mix (Санкт-Петербург, Россия)
  • Radio Record HipHop (Санкт-Петербург, Россия)
  • RADIO TREK (Украина, Ровно)
  • Заряд (Россия, Москва)
  • Ральф Радио (Россия, Нижний Новгород)
  • RelaxFM (Россия, Москва)
  • Рок-онлайн (Россия, Москва)
  • Русская волна (Россия, Красноярск)
  • Русское Радио Кухавен (Германия, Кухавен)
  • Нуллвэйв Русский Рок (Россия, Новосибирск)
  • Сан ФМ (Россия, Санкт-Петербург)
  • Сан ФМ Альтернатива (Россия, Санкт-Петербург)
  • Сан ФМ Драм`н`Бэйс (Россия, Санкт-Петербург)
  • Сан ФМ POP (Россия, Санкт-Петербург)
  • Сан ФМ Relax (Россия, Санкт-Петербург)
  • Сан ФМ Транс (Россия, Санкт-Петербург)
  • Первое Сексуальное Радио (Россия, Москва)
  • Хорошее радио (Украина)
  • Шарманка (Украина)
  • Радио Сибирь (Россия, Тверь)
  • Сім'я і Дім (Украина)
  • Серебряный дождь (Россия)
  • Скай ФМ Джаз (США, Нью-Йорк)
  • Радио "Воруй-Убивай" (Россия)
  • Стильное радио (Украина)
  • Стрий ФМ (Украина, Стрый)
  • Супер Радио (Украина)
  • Ультра (Россия, Москва)
  • Юнитон (Россия, Новосибирск)
  • Зайцев Нет (Россия, Москва) 

 

Ваша оценка: Нет Средняя: 5 (4 голоса)

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

Из прочитанного можно сделать вывод, что Ваша интернет-радиостанция стоит на локальной машине, которая постоянно подключена к сети Интернет. Верно?!
А как сделать тоже самое, но используя возможности обычного хостинга?
Я, например, пользуюсь стандартной схемой: 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. Только просьба следить за эфиром - во время добавления станции в эфире звучала "тишина"

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

И еще добавьте в список bluesforever.freeforums.org 

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

Сделано.

Добавил все подкасты. В списке под номерами 18-26.

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

Здравствуйте, я хотел бы спросить, как сделать так, чтобы было два диджея например? 

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

А вот теперь более подробно, пожалуйста...

Статья о том, как ретранслировать уже существующие потоки. Чтобы "лить" свой поток в сеть, нужен немножно другой софт.

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

Имеется настроенный icecast2 сервер в сети предприятия для сотрудников. Сервер icecast имеет прямой выход в интернет. По требованиям информационной безопасности так не должно быть и полагается получать поток с источников через корпоративный прокси сервер. Есть ли какая та настройка для этого в icecast?

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

Первое, что сразу приходит на ум - файрвол...

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

Хотелось бы простое, а потом уже сложное или по частям...
 

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

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

Вставай, Україно!

Литература

Девушка у Админа есть, просто он стесняется выложить ее на рабочий стол.