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

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(не меняли название точки монтирования) но зайдя по ссылке Для просмотра ссылки Войди или Зарегистрируйся вы сможете услышать ваше радио.
Ну и конечно же, неплохо сделать так, чтобы ices запускался не под root'ом, как в примерах выше. Для этого можно завести отдельного пользователя, либо использовать пользователя icecast. Строка запуска ices немного изменится:
Код:
su icecast -c "ices ..."
Всё представленное выше работает.
Спасибо за внимание, надеюсь, статья кому-нибудь будет полезна.
 
Спасибо, полезная инфа. На red-hat based дистрибутивах (centos и т.д.) вместо "sudo apt-get" используйте "yum", при этом названия пакетов могут немного отличаться. Нужный пакет можно найти с помощью "yum search"
 
а как сделать так, что бы без порта, всмысле
айпи:8000/live заменить на айпи/live
 
никак... во всяком случае я такого не увидел и у всех на 8000 стоит.
 
Вешать на 80 порт:D, но это уже безумие
 
Назад
Сверху