IceCast - настройка сетевого вещания

Тема в разделе "Администрирование серверов", создана пользователем socker, 23 авг 2010.

Модераторы: mefish, stooper
  1. socker

    socker Постоялец

    Регистр.:
    15 сен 2007
    Сообщения:
    109
    Симпатии:
    17
    Что же такое IceCast? Это сервер потокового вещания.
    Icecast является серверной программой, которая может осуществлять раздачу цифровых потоков различных форматов, таких как Ogg Vorbis, MPEG Audio Layer III (MP3), Theora, Advanced Audio Coding(AAC), AACplus и Nullsoft Streaming Video.
    Собственно передача данных осуществляется по стандартному протоколу HTTP, либо по протоколу SHOUTcast.
    Icecast является аналогом программы SHOUTcast компании Nullsoft, однако имеет более развитую функциональность и поддерживает большее количество форматов потоков.
    Нам потребуются приложения:
    icecast-2.3.2 - серверное приложение
    ices-0.4 - утилита для посылки mp3-аудиопотока на IceCast сервер либо
    ices-2.0.1 - для посылки ogg-аудиопотока на IceCast сервер
    Прежде чем устанавливать сам сервер IceCast, нам нужны будут некоторые библиотеки, а именно:
    libshout-2.2.2
    libmp3lame-3.97

    Обе библиотеки есть в репозиториях, так что проблем возникнуть не должно, ставим:
    Код:
    sudo apt-get install libshout3
    sudo apt-get libmp3lame-dev
    После установкии библиотек будет ставить Ices 0.4. К сожалению его нет в репозиториях, поэтому придется собирать самим.
    Код:
    sudo apt-get http://downloads.us.xiph.org/releases/ices/ices-0.4.tar.gz
    tar -zxvf ices-0.4.tar.gz
    cd ices-0.4
    ./configure –with-lame (если не получается с параметром with-lame, то можно просто ./configure )
    make && make install
    После установки Ices 0.4 переходит к непосредственной установки IceCast, он к счастью есть в репозиториях.
    Установка IceCast.
    Код:
    sudo apt-get install icecast2
    Настройка IceCast.
    После установки, можно приступить к настройке.
    Сначала надо создать пользователя и группу IceCast.
    Код:
    sudo groupadd icecast
    sudo useradd -g icecast -d /home/icecast -s /sbin/nologin icecast
    Теперь займемся непосредственно настройкой самого сервера, конфиг которого хранится в /etc/icecast2/icecast.xml
    Код:
    sudo nano /etc/icecast2/icecast.xml
    <icecast>
    <limits>…
    //Количество пользователей
    <clients>10000</clients>
    <sources>5</sources>
    <threadpool>5</threadpool>
    <queue-size>524288</queue-size>
    <client-timeout>30</client-timeout>
    <header-timeout>15</header-timeout>
    <source-timeout>10</source-timeout>
    <!– If enabled, this will provide a burst of data when a client
    first connects, thereby significantly reducing the startup
    time for listeners that do substantial buffering. However,
    it also significantly increases latency between the source
    client and listening client. For low-latency setups, you
    might want to disable this. –>
    <burst-on-connect>1</burst-on-connect>
    <!– same as burst-on-connect, but this allows for being more
    specific on how much to burst. Most people won’t need to
    change from the default 64k. Applies to all mountpoints –>
    <burst-size>131070</burst-size>
    </limits>
    //Тут Ваши пароли
    <authentication>
    <!– Sources log in with username ’source’ –>
    <source-password>паророль_для_вещания</source-password>
    <!– Relays log in username ‘relay’ –>
    <relay-password>password</relay-password>
    //Пароли админа
    <!– Admin logs in with the username given below –>
    <admin-user>admin</admin-user>
    <admin-password>password</admin-password>
    </authentication>
    <!– Uncomment this if you want directory listings –>
    <!–
    <directory>
    <yp-url-timeout>15</yp-url-timeout>
    <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
    </directory>
    –>
    //Настройки сервера
    <!– This is the hostname other people will use to connect to your server.
    It affects mainly the urls generated by Icecast for playlists and yp
    listings. –>
    <hostname>sr.pipradio.ru</hostname>
    <!– You can use these two if you only want a single listener –>
    <!–<port>9500</port> –>
    <!–<bind-address>127.0.0.1</bind-address>–>
    <!– You may have multiple <listener> elements –>
    <listen-socket>
    <port>9500</port>
    <!– <bind-address>127.0.0.1</bind-address> –>
    </listen-socket>
    <!–
    <listen-socket>
    <port>9501</port>
    </listen-socket>
    –>
    <!–<master-server>127.0.0.1</master-server>–>
    <!–<master-server-port>9501</master-server-port>–>
    <!–<master-update-interval>120</master-update-interval>–>
    <!–<master-password>hackme</master-password>–>
    <!– setting this makes all relays on-demand unless overridden, this is
    useful for master relays which do not have <relay> definitions here.
    The default is 0 –>
    <!–<relays-on-demand>1</relays-on-demand>–>
    //Настройки relay (вещание другой радисостанции через Ваш сервер)
    <relay>
    <server></server>
    <port>7284</port>
    <mount>/</mount>
    <local-mount>/nonstop</local-mount>
    <on-demand>0</on-demand>
    <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>
    <relay>
    <server>aol.streams.bassdrive.com</server>
    <port>8010</port>
    <mount>/</mount>
    <local-mount>/playlist2</local-mount>
    <on-demand>0</on-demand>
    <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>
    <relay>
    <server>sr.pipradio.ru</server>
    <port>9500</port>
    <mount>/</mount>
    <local-mount>/nonstop</local-mount>
    <on-demand>0</on-demand>
    <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>
    <!– Only define a <mount> section if you want to use advanced options,
    like alternative usernames or passwords
    <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>
    –>
    <fileserve>1</fileserve>
    <!– set the mountpoint for a shoutcast source to use, the default if not
    specified is /stream but you can change it here if an alternative is
    wanted or an extension is required
    <shoutcast-mount>/live.nsv</shoutcast-mount>
    –>
    <paths>
    <!– basedir is only used if chroot is enabled –>
    <basedir>/usr/share/icecast2</basedir>
    <!– Note that if <chroot> is turned on below, these paths must both
    be relative to the new root, not the original root –>
    <logdir>/var/log/icecast2</logdir>
    <webroot>/usr/share/icecast2/web</webroot>
    <adminroot>/usr/share/icecast2/admin</adminroot>
    <pidfile>/usr/share/icecast2/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 [url]http://server:port/[/url] to
    the status page
    –>
    <alias source=”/” dest=”/status.xsl”/>
    </paths>
    <logging>
    <accesslog>access.log</accesslog>
    <errorlog>error.log</errorlog>
    <!– <playlistlog>playlist.log</playlistlog> –>
    <loglevel>4</loglevel> <!– 4 Debug, 3 Info, 2 Warn, 1 Error –>
    <logsize>10000</logsize> <!– Max size of a logfile –>
    <!– If logarchive is enabled (1), then when logsize is reached
    the logfile will be moved to [error|access|playlist].log.DATESTAMP,
    otherwise it will be moved to [error|access|playlist].log.old.
    Default is non-archive mode (i.e. overwrite)
    –>
    <!– <logarchive>1</logarchive> –>
    </logging>
    <!– <security> –>
    <!– <chroot>0</chroot>
    <changeowner>
    <user>icecast2</user>
    <group>icecast2</group>
    </changeowner>
    </security> –>
    </icecast>
    Если у вас есть джингл и вы хотите, что бы он играл при подключении к радио, нужно в файле /etc/icecast2/icecast.xml добавить несколько строк.
    Код:
    sudo nano /etc/icecast2/icecast.xml
    /nonstop (название точки монтирования)
    source
    ***** /путь/к/файлу/intro.mp3
    Что бы избежать сюрпризов выполните две команды:
    Код:
    chown root:root /etc/icecast2/icecast.xml
    chmod 640 /etc/icecast2/icecast.xml
    Эти команды ограничат доступ к файлу конфигов нашего сервера.
    Теперь можно запустить наш сервер:
    Код:
    icecast -b -c /etc/icecast2/icecast.xml
    Если все сделано верно, то набрал в браузере адрес localhost:8000(если не меняли порт), Вы сможете увидеть web оболочку сервера IceCast.
    Теперь перейдет к настройке Icec 0.4
    Сделаем конфиг IceCast(по идеи шаблон конфига должен быть в /usr/local/etc/ices.conf.dist и его можно скопировать в /usr/local/etc/ices.conf)
    Код:
    sudo nano /usr/local/etc/ices.conf
    <?xml version=”1.0??>
    <ices:Configuration xmlns:ices=”http://www.icecast.org/projects/ices”>
    <Playlist>
    <Randomize>1</Randomize>
    <File>/расположение/вашего/плейлиста/playlist.txt</File>
    <Type>builtin</Type>
    <Module>ices</Module>
    </Playlist>
    <Execution>
    <Background>1</Background>
    <Verbose>0</Verbose>
    <BaseDirectory>/tmp</BaseDirectory>
    </Execution>
    <Stream>
    <Server>
    <Hostname>адрес сервера</Hostname>
    <Port>порт сервера</Port>
    <– См. примечание о паролях в icecast.xml –>
    <Password>Ваш пароль на вещание в IceCast</Password>
    <Protocol>http</Protocol>
    </Server>
    ///Точка монтирования(название канала), настройки битрейта
    <Mountpoint>/nonstop</Mountpoint>
    <Dumpfile>ices.dump</Dumpfile>
    <Name>Default stream</Name>
    <Genre>Default genre</Genre>
    <Description>Default description</Description>
    <URL>http://localhost/</URL>
    <Public>0</Public>
    <Bitrate>128</Bitrate>
    <Reencode>0</Reencode>
    <Samplerate>44100</Samplerate>
    <Channels>2</Channels>
    </Stream>
    </ices:Configuration>
    После окончания мучений конфига Ices 0.4, опять же во избежании сюрпризов выполним команду, что бы ограничить доступ к конфигу:
    Код:
    chmod 640 /usr/local/etc/ices.conf
    Теперь осталось все это запустить, но для начало нужно сделать плэйлист для нашего Ices 0.4. Предположим что у вас есть коллекция mp3 файликов, скажем в /mnt/mp3/rock/. Что бы все файлы в данной директории попали в плэй лист, выполняем две команды:
    Код:
    cd /mnt/mp3/rock/
    ls > playlist.txt
    Теперь запускаем Ices 0.4:
    Код:
    ices -c ‘/usr/local/etc/ices.conf’
    Если не запускается командой выше, или запускается и начинает использовать стандартный конфиг, то запустите Ices командой:
    ices
    Если вы не меняли кардинально конфиг Icec(не меняли название точки монтирования) но зайдя по ссылке http://localhost:8000/radio вы сможете услышать ваше радио.
    Ну и конечно же, неплохо сделать так, чтобы ices запускался не под root'ом, как в примерах выше. Для этого можно завести отдельного пользователя, либо использовать пользователя icecast. Строка запуска ices немного изменится:
    Код:
    su icecast -c "ices ..." 
    Всё представленное выше работает.
    Спасибо за внимание, надеюсь, статья кому-нибудь будет полезна.
     
    RussКиЙ нравится это.
  2. dimm6

    dimm6 Создатель

    Регистр.:
    16 июл 2007
    Сообщения:
    10
    Симпатии:
    0
    Спасибо, полезная инфа. На red-hat based дистрибутивах (centos и т.д.) вместо "sudo apt-get" используйте "yum", при этом названия пакетов могут немного отличаться. Нужный пакет можно найти с помощью "yum search"
     
  3. drserg

    drserg

    Регистр.:
    31 мар 2009
    Сообщения:
    161
    Симпатии:
    15
    а как сделать так, что бы без порта, всмысле
    айпи:8000/live заменить на айпи/live
     
  4. hok

    hok Постоялец Нарушитель

    Регистр.:
    17 ноя 2007
    Сообщения:
    68
    Симпатии:
    14
    никак... во всяком случае я такого не увидел и у всех на 8000 стоит.
     
  5. RussКиЙ

    RussКиЙ

    Регистр.:
    23 сен 2009
    Сообщения:
    506
    Симпатии:
    59
    Вешать на 80 порт:D, но это уже безумие
     
  6. pegas3433

    pegas3433 Постоялец

    Регистр.:
    27 мар 2009
    Сообщения:
    144
    Симпатии:
    49
    <listen-socket>
    <port>!!!Номер порта который хочешь!!!</port>