Установка и настройка IceCast сервера

02.10.2010 от admin Выкл.

Статья устарела, новая статья тут

В этой статье пойдет речь об установке сервера радио IceCast и плагина к нему Ices 0.4(данная версия для вещание в формате mp3, для вещание в формате ogg есть версия Ices 2) . Данная связка в данный момент и работает на нашем радио PiPRadio.net, а Ices 0.4 благополучно вещает 247 канал nonstop.
Ну что ж перейдем к установке.

Подготовка.

Прежде чем устанавливать сам сервер IceCast, нам нужны будут некоторые библиотеки, а именно:

libshout-2.2.2
libmp3lame-3.97

Обе библиотеки есть в репозиториях, так что проблем возникнуть не должно, ставим:

apt-get install libshout-dev

apt-get install libmp3lame-dev

И на всякий случай установим LibXML2(у меня она стояла из коробки, но был случай, когда после установки Ubuntu этой библиотеки не было):

apt-get install libxml2-dev

Установка Ices 0.4

После установкии библиотек будет ставить Ices 0.4. К сожалению его нет в репозиториях, поэтому придется собирать самим.

wget http://downloads.us.xiph.org/releases/ices/ices-0.4.tar.gz

tar -zxvf ices-0.4.tar.gz

cd ices-0.4

./configure

make

make install

После установки Ices 0.4 переходит к непосредственной установки IceCast, он к счастью есть в репозиториях.

Установка IceCast.

Установить IceCast можно одной командой, при этом будет создан пользователь и группа Icecast.

apt-get install icecast2

Настройка IceCast.

После установки, можно приступить к настройке конфига, который храниться в /etc/icecast2/icecast.xml

nano /etc/icecast2/icecast.xml

 

<icecast>
<limits>
// Количество клиентов(слушателей)
<clients>100</clients>
// Количество одновременных каналов вещания
<sources>2</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>65535</burst-size>
</limits>
// В этой секции настраиваются пароли админа, ведущих и релай
<authentication>
// Пароли для ведущих
<!— Sources log in with username ‘source’ —>
<source-password>hackme</source-password>
<!— Relays log in username ‘relay’ —>
// Пароли для релая
<relay-password>hackme</relay-password>
// Пароль и логин Админа
<!— Admin logs in with the username given below —>
<admin-user>admin</admin-user>
<admin-password>hackme</admin-password>
</authentication>
<!— 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>
—>
<!— 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>
—>
// настройка адреса сервера(ip или домен)
<!— 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>pipradio.net</hostname>
// Настройка порта к которому будут присоединяться ведущие(9501) и слушатели(9500)
<!— You may have multiple <listener> elements —>
<listen-socket>
<port>9500</port>
<!— <bind-address>127.0.0.1</bind-address> —>
<!— <shoutcast-mount>/stream</shoutcast-mount> —>
</listen-socket>
<!—
<listen-socket>
<port>9501</port>
</listen-socket>
—>
<!—<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>—>
<!— 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>
<server>127.0.0.1</server>
<port>8001</port>
<mount>/example.ogg</mount>
<local-mount>/different.ogg</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>
—>
// Настройки точек монтирования, например для переброски слушателей с канала на канал, например если нет эфира на канале live то все слушатели будут перекидываться на канал nonstop :
<mount>
<mount-name>/live</mount-name>
<fallback-mount>/nonstop</fallback-mount>
<fallback-override>1</fallback-override>
</mount>

<!— 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>
<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 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>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>nobody</user>
<group>nogroup</group>
</changeowner>
—>
</security>
</icecast>

Если у вас есть джингл(у нас его нет к сожалению, так как делать его некому=(() и вы хотите, что бы он играл при подключении к радио, нужно в файле /etc/icecast2/icecast.xml отредактировать несколько строк в разделе maunt :

<mount>

<mount-name>/live</mount-name>

<password>пароль</password>

<max-listeners>1000</max-listeners>

<intro>/intro.mp3</intro> Название файла джингла

<charset>cp1251</charset>

<fallback-override>1</fallback-override>

<fallback-mount>/nonstop</fallback-mount>

</mount>

После чего загрузить файл джингла по адресу:

/usr/share/icecast2/web/intro.mp3

Теперь можно запустить наш сервер:

/icecast -b -c /etc/icecast2/icecast.xml

В ubuntu 10.04 и 10.10 можно запутсить командой:

service icecast2 start

Если появиться ошибка:

icecast2 daemon disabled — read /etc/default/icecast2.

То нужно не много подправить скрипт запуска:

nano /etc/default/icecast2
# Defaults for icecast2 initscript
# sourced by /etc/init.d/icecast2
# installed at /etc/default/icecast2 by the maintainer scripts

#
# This is a POSIX shell fragment
#

# Full path to the server configuration file
CONFIGFILE=»/etc/icecast2/icecast.xml»

# Name or ID of the user and group the daemon should run under
USERID=icecast2
GROUPID=icecast

# Edit /etc/icecast2/icecast.xml and change at least the passwords.
# Change this to true when done to enable the init.d script
ENABLE=true

Параметр ENABLE должен быть включен.

Если все сделано верно, то набрал в браузере адрес localhost:9500(если не меняли порт), Вы сможете увидеть 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>

<!— This is the filename used as a playlist when using the builtin

playlist handler. —>

<File>/mnt/pipradio.net/playlist.txt</File>

<!— Set this to 0 if you don’t want to randomize your playlist, and to

1 if you do. —>

/// Настройка перемешивания треков, 1 — перемешивать 0 — играть по порядку

<Randomize>1</Randomize>

<!— One of builtin, perl, or python. —>

<Type>builtin</Type>

<!— Module name to pass to the playlist handler if using perl or python.

If you use the builtin playlist handler then this is ignored —>

<Module>ices</Module>

<!— Set this to the number of seconds to crossfade between tracks.

Leave out or set to zero to disable crossfading (the default).

<Crossfade>5</Crossfade>

—>

</Playlist>

<Execution>

<!— Set this to 1 if you want ices to launch in the background as a

daemon —>

<Background>0</Background>

<!— Set this to 1 if you want to see more verbose output from ices —>

<Verbose>0</Verbose>

<!— This directory specifies where ices should put the logfile, cue file

and pid file (if daemonizing). Don’t use /tmp if you have l33t h4x0rz

on your server. —>

<BaseDirectory>/tmp</BaseDirectory>

</Execution>

// Настройка подключения в серверу

<Stream>

<Server>

<!— Hostname or ip of the icecast server you want to connect to —>

<Hostname>pipradio.net</Hostname>

<!— Port of the same —>

<Port>9500</Port>

<!— Encoder password on the icecast server —>

<Password>Ваш пароль</Password>

<!— Header protocol to use when communicating with the server.

Shoutcast servers need «icy», icecast 1.x needs «xaudiocast», and

icecast 2.x needs «http». —>

<Protocol>http</Protocol>

</Server>

// Настройки точки монтирования(канала)

<!— The name of the mountpoint on the icecast server —>

<Mountpoint>/live</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>

—>

<!— The name of you stream, not the name of the song! —>

<Name>Live</Name>

<!— Genre of your stream, be it rock or pop or whatever —>

<Genre>Default genre</Genre>

<!— Longer description of your stream —>

<Description>Default description</Description>

<!— URL to a page describing your stream —>

<URL>http://pipradio.net</URL>

<!— 0 if you don’t want the icecast server to publish your stream on

the yp server, 1 if you do —>

<Public>1</Public>

// Настройка битрейта потока

<!— Stream bitrate, used to specify bitrate if reencoding, otherwise

just used for display on YP and on the server. Try to keep it

accurate —>

<Bitrate>128</Bitrate>

<!— If this is set to 1, and ices is compiled with liblame support,

ices will reencode the stream on the fly to the stream bitrate. —>

<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>

Теперь осталось все это запустить, но для начало нужно сделать плэйлист для нашего Ices 0.4. Предположим что у вас есть коллекция mp3 файликов, скажем в /mnt/mp3/popsa/. Что бы все файлы в данной директории попали в плэй лист, выполняем две команды:

cd /mnt/mp3/popsa/
ls > playlist.txt

Теперь запускаем Ices 0.4:

ices -c /usr/local/etc/ices.conf

Если не запускается командой выше, или запускается и начинает использовать стандартный конфиг, то запустите Ices командой:

ices

Если вы не меняли кардинально конфиг Icec(не меняли название точки монтирования) но зайдя по ссылке http://localhost:8000/live вы сможете услышать ваше радио.

Вот и все, на самом деле сложного ничего нет. Естественно иногда случаются проблемы, например у меня не хотели ставить библиотеки, но спустя 15 минут поиска ошибки в гугле, все отлично заработало.

ps В связи с тем что данный мануал прут все кому не лень, полностью его переписал и обновил ссылки, все настройки протестированы и работают на Ubuntu 9.10 , 10.04 , 10.10 и Debian 6.0 … и должны работать на всех дистрибутивах имеющие корни с Debian.