Довольно часто слушаю 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/ [1] 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/ [1] |
Информацию о том, какие именно различия в проектах - не искал. Но из описания можно понять, что Icecast2 поддерживает кроме Mp3 [2]еще и Ogg [3]. Соответственно выполним из системы портов установку 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. Набросал в комментах немного "отсебятины", чтобы уловить суть параметров. Если что не так - просьба извинить, и посетить вот эту страницу [4]. В листинге только 1 поток примонтирован, а по этой ссылке [5] можно скачать конфигурационный файл с несколькими десятками потоков (на момент написания статьи - 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> -->
<!-- Этот флаг включает файловый сервер 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 [8], то используется файл /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 <!-- Секция логгирования -->
<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 |
Создадим каталог, куда будут писаться логи, укажем владельца каталога и добавим в rc.conf поддержку icecast:
# mkdir /var/log/icecast |
Пытаемся запустить 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 [10], WINAMP [11], etc) необходимо открыть следующий url: http://radio.muff.kiev.ua:8000/16bit.fm [12] (в принципе можно даже в браузере открыть указанную ссылку, но в плеере, как на меня - намного удобней).
Собственно говоря - скриншот прослушивания потока с сервера:
Если же в браузере войти в "корень" радиосервера (тоесть на 8000 порт - http://radio.muff.kiev.ua:8000 [14]), то можно получить информацию о статусе работающего icecast-сервера. Скриншоты:
Там же можно обнаружить линк в админ-панель. Воспользуемся логином и паролем администратора, указанными в конфигурационном файле icecast.xml (параметры admin-user и admin-password) для входа в admin-панель. Скриншоты админ-панели:
На этом базовую настройку Icecast для ретрансляции потоков Интернет-радиостанций можно завершить. Однако не стоит забывать, что есть еще поле для експериментов, поскольку Icecast - довольно мощный инструмент.
Ну и если просто хочется послушать радио, весь плейлист одним списком можно загрузить здесь [20]. Если любите слушать какую-то радиостанцию, а в списке ее нету - пишите. Поищем и добавим.
На данный момент транслируются следующие радиостанции (список время от времени изменяется, так что данные относительны):
- 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 (Россия, Санкт-Петербург)
- Сан ФМ Транс (Россия, Санкт-Петербург)
- Первое Сексуальное Радио (Россия, Москва)
- Хорошее радио (Украина)
- Шарманка (Украина)
- Радио Сибирь (Россия, Тверь)
- Сім'я і Дім (Украина)
- Серебряный дождь (Россия)
- Скай ФМ Джаз (США, Нью-Йорк)
- Радио "Воруй-Убивай" (Россия)
- Стильное радио (Украина)
- Стрий ФМ (Украина, Стрый)
- Супер Радио (Украина)
- Ультра (Россия, Москва)
- Юнитон (Россия, Новосибирск)
- Зайцев Нет (Россия, Москва)