Локальная инет радиостанция при помощи icecast +ices

Рылся в своих старых записях и решил поделится с Вами инструкцией как просто и быстро поднять нормальный сервер для он лайн транслирования своего радио (mp3 файлы) и для ретрансляции внешних радиостанций.
Кому интересно прошу под кат.
Я использовал сервер под управлением FreeBSD. Считаем, что у нас есть свежее дерево портов. Начнем установки icecast:

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

Далее создаем пользователя для инет радио radio и группу radio и создаем каталог где это все будет лежать.

#mkdir /var/icecast 
#pw group add radio
# adduser
Username:radio
Full name: Radio user
Uid (Leave empty for default):
Login group [radio]:
Login group is radio. Invite jru into other groups? []: 
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: nologin
Home directory [/home/radio]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : radio
Password   : ****
Full Name  : Radio user
Uid        : 1001
Class      :
Groups     : radio
Home       : /home/radio
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (radio) to the user database.
Add another user? (yes/no): no
Goodbye!

После копируем все файлы для веб интерфейса:

cp /usr/local/share/icecast /var/icecast

Cоздаем каталог для лога:

mkdir /var/icecast/log

Cоздаем файлы для логов:

cd /var/icecast/log
touch access.log
touch error.log

Меняем права:

chown -R radio:radio /var/icecast

Далее идем смотреть файл конфига:

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

Конфигурим файл. Опишу только важные параметры
Аутентификация. Первое — это пароль на подключение для трансляции через ваш сервер icecast.Второе — это логин пароль на веб интерфейс по адресу icecast_ip:8000

<authentication>
        <!-- Sources log in with username 'source' -->
        <source-password>123</source-password>
        <!-- Relays log in username 'relay' -->
        <relay-password>123</relay-password>

        <!-- Admin logs in with the username given below -->
        <admin-user>admin</admin-user>
        <admin-password>12345678</admin-password>
    </authentication>

Далее выбираем IP сервера и порт так же точку монитрования потока с ices но это позже:

<listen-socket>
        <port>8000</port>
        <bind-address>192.168.1.7</bind-address>.
        <shoutcast-mount>/ices</shoutcast-mount>.

    </listen-socket>

Так же я собираюсь рестранслировать радиостанции украины Киссфм (+ Киссфм в АСС), наше радио, люкс фм, и хит фм:

<relay>
        <server>91.201.37.42</server>
        <port>8000</port>
        <mount>/kiss</mount>
        <local-mount>/kiss</local-mount>
        <on-demand>1</on-demand>
        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>

<relay>
        <server>91.201.37.42</server>
        <port>8000</port>
        <mount>/kissACC</mount>
        <local-mount>/kissACC</local-mount>
        <on-demand>1</on-demand>
        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>
....
<relay>........
        <server>195.95.206.12</server>
        <port>8000</port>
        <mount>/HitFM</mount>
        <local-mount>/hitfm</local-mount>
        <on-demand>1</on-demand>
        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>

<relay>
        <server>77.120.104.251</server>
        <port>8000</port>
        <mount>/</mount>
        <local-mount>/luxfm</local-mount>
        <on-demand>1</on-demand>
        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>

<relay>
        <server>212.26.129.222</server>
        <port>8001</port>
        <mount>/</mount>
        <local-mount>/nashe</local-mount>
        <on-demand>1</on-demand>
        <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>


Далее меняем параметры нахождения каталогов в разделе

 <basedir>/var/icecast</basedir>

        <logdir>/log</logdir>
        <webroot>/web</webroot>
        <adminroot>/admin</adminroot>
         <pidfile>/var/run/icecast.pid</pidfile>


И последнее, но не последнее по значению. Icecast не работает от root вот и мы меняем разрешения на ранее созданого юзера и группу

<security>
        <chroot>1</chroot>

        <changeowner>
            <user>radio</user>
            <group>radio</group>
        </changeowner>

    </security>

Далее пробуем взлететь, смотрим что он ругается:

#/usr/local/bin/icecast -c /usr/local/etc/icecast.xml

Если все хорошо прерываем через Ctrl+c и идем дальше:

Я использовал iсes0 ибо мне нужно было воспроизводить mp3 а для ogg по идее нужно использовать ices2, вроде он тоже воспроизводить mp3, но я не проверял:

#cd /usr/ports/audio/ices
#make install clean

Тут что бы не мучатся с правами делаем проще (можете сами создавать каталог где хотите):

mkdir /tmp/radio

Складываем сюда файлы mp3 и создаем плейлист:

find /tmp/radio -name *.mp3 > /tmp/radio/playlist.txt

Должен получится файл playlist.txt с таким содержимым:

/tmp/radio/Far East Movement ft. The Cataracs & Dev - Like A G6.mp3
/tmp/radio/The_Prodigy_-_Voodoo_People_(Pendulum_Remix).mp3
/tmp/radio/1.mp3

Меняем права #chmod -R 777 /tmp/radio и идем ломать файл ices.conf

cd /usr/local/etc/
cp ices.conf.dist ices.conf

Редактируем. У меня вышел такой вид (коменты Афтора):

<?xml version="1.0"?>
<ices:Configuration xmlns:ices="http://www.icecast.org/projects/ices">
  <Playlist>
    <!-- Показываем где лежит плейлист -->
    <File>/tmp/radio/playlist.txt</File>
    <!-- хотим что бы играло случайно ставим 1. . -->
    <Randomize>0</Randomize>
    <!-- тип плей листа, менять не нужно -->
    <Type>builtin</Type>
    <!-- нужно только для плейлиста на Perl И pyton, для нашего случая не нужно-->
    <Module>ices0</Module>
    <!-- если нужно что бы между песнями было затухание то разремируем и выставляем в секундах. по умочанию выключено т.е. 0
    <Crossfade>5</Crossfade>
    -->
  </Playlist>

  <Execution>
    <!-- запускать демоном ставьте 1 -->
    <Background>1</Background>
    <!-- хотите видеть все логи в файле ставим 1 -->
    <Verbose>1</Verbose>
    <!-- Каталог где будет находится лог и pid файлы -->
    <BaseDirectory>/tmp</BaseDirectory>
  </Execution>

  <Stream>
    <Server>
      <!-- ip  icecast сервера куда хотим прицепится -->
      <Hostname>192.168.1.7</Hostname>
      <!-- порт -->
      <Port>8000</Port>
      <!-- пароль на конект что бы транслировать icecast server -->
      <Password>123</Password>
      <!-- Если сервер  Shoutcast ставим "icy", icecast 1.x ставим "xaudiocast", а если icecast 2.x то "http". -->
      <Protocol>http</Protocol>
    </Server>
  <!-- точка монтирования потока на айскаст сервера -->
    <Mountpoint>/ices</Mountpoint>
    <!-- The name of the dumpfile on the server for your stream. DO NOT set
         this unless you know what you're doing. не понял за чем не менял
    <Dumpfile>ices.dump</Dumpfile>
    -->
    <!-- Имя вашей трансляции, а не имя трека -->
    <Name>mp3 stream</Name>
    <!-- Жанр, или стиль вашей трансляции -->
    <Genre>it</Genre>
    <!-- большое описание вашей трансляции -->
    <Description>Local streaming</Description>
    <!-- ссылока вашей трансляции -->
    <URL>http://gate.mydomain.com/</URL>
    <!--0 если не хотите сделать ваш сервер публичным и 1 если хотите -->
    <Public>0</Public>

    <!--качество трансляции, меняйте осторожно-->
    <Bitrate>128</Bitrate>
    <!-- если поставить 1 то ices попробует на лету пережимать трансляцию при помози  liblame в нужное качество потока -->
    <Reencode>0</Reencode>
    <!-- Number of channels to reencode to, 1 for mono or 2 for stereo -->
    <!-- Sampe rate to reencode to in Hz. Leave out for LAME's best choice
    <Samplerate>44100</Samplerate>
    -->
    <Channels>2</Channels>
  </Stream>
</ices:Configuration>

Далее добавляем в /etc/rc.conf строки:

icecast_enable="YES"
icecast_flags="-c /usr/local/etc/icecast.xml"
ices0_enable="YES"
ices0_flags="/usr/local/etc/ices.conf"

И пробуем взлетать:

cd /usr/local/etc/rc.d
#./icecast2 start
#./ices0 start

Открываем в баузере ссылку:
192.168.1.7:8000/status.xsl

Скачиваем m3u нужного потока и вперед.
Интернет-радио поставлено «конект по требованию», так что первый конект медленный. Кому не жалко инет трафика — поменяйте значение
<on-demand>1</on-demand> на <on-demand>0</on-demand>.

Так же ices как проиграет весь плейлист выключается. Как сделать по кругу не нашел пока что. Но, если запустить ices через рандом то его игрища никогда не заканчиваются smile.
В файле ices.conf меняем параметр 0 на 1 и все.

© Habrahabr.ru