Установка и настройка IceCast сервера
02.10.2010Статья устарела, новая статья тут
В этой статье пойдет речь об установке сервера радио 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.
а как сделать чтобы в определенное время играли определенные плейлисты?
если вещать SAM то там есть pal скрипты, это надо гуглить, возможно получиться найти.
если вещание через ices то в теории можно скрипт cron написать.. что бы он отрубал действующий канал, и запускал ices с другим конфигом, где указывается другой playlist
учу liquidsoap… linux это круто
Как сделать так чтобы ices не передавай юзеру на winamp инфу о треке (название итд) а передавал название радейки
ммм помойму это нужно в конфиги icecast править
а что именно? подскажи плиз
хех щас нет к сожалению времени лопатить конфиг, попробуй перевести коменты в конфиге, там гдет есть раздел про инфу
таки нашел как отключить, есть пара вариантов, опишу только один.
нужно искать файл id3.c и в нем править. Например:
У меня этот файл лежит /root/ices-0.4/src , в нем есть строчки: