Итак, начнем. В первую очередь нам понадобится сервер потока... Я попытался подняться на Shoutcast, но как оказалось ему для трансляции в формате mp3 не хватает... Лекарства от жадности! Эта сволочь заявила что без моих кровных $5 ей невмоготу работать! Немного пргуглив обнаружил аналогичную реализацию под лицензией GPL - серверный комплект IceCast. Что же такое IceCast? Это кросплатформенный сервер потокового вещания, поддерживающий mp3 и ogg форматы. Есть дистрибутив под ЗлоОС, а есть и под Linux.
Комплект состоит из:
- icecast-2.3.0 – сервер раздачи аудио потока в сеть
- ices-0.4 – утилита для посылки mp3-аудиопотока на IceCast сервер
- ices-2.0.1 – для посылки ogg-аудиопотока на IceCast сервер
Идем на сайт http://www.icecast.org/ и выкачиваем оттуда все что нужно.
Далее нужно удовлетворить зависимости. Конечно установить все из пакетов проще всего, но я не ищу легких путей.
Итак:
Код: Выделить всё
# zypper install iconv libshout-devel libvorbis-devel libxslt libxml libxslt-devel libxml-devel libxml2
Код: Выделить всё
# wget http://downloads.sf.net/lame/lame-398.tar.gz
# tar -xvf lame-398.tar.gz | cd lame-398
# ./configure --prefix=/usr
# make
# make install
# wget http://netcologne.dl.sourceforge.net/project/faac/faad2-src/faad2-2.7/faad2-2.7.tar.bz2
# tar -xvf wget faad2-2.7.tar.bz2 | cd faad2-2.7
# ./configure --prefix=/usr/local
# make && make install
Код: Выделить всё
# wget http://netcologne.dl.sourceforge.net/project/flac/flac-src/flac-1.1.2-src/flac-1.1.2.tar.gz
#tar -xvf flac-1.1.2.tar.gz
#cd flac-1.1.2/
#./configure --prefix=/usr/local --with-libiconv-prefix=/usr/local --with-ogg-libraries=/usr/lib --with-ogg-includes=/usr/include
#make
#make install
Код: Выделить всё
#./configure --prefix=/usr/local --with-flac=/usr/local/lib --with-perl=/usr/bin/perl --sysconfdir=/usr/local/etc
#make
#make install
Код: Выделить всё
#./configure --prefix=/usr/local --sysconfdir=/usr/local/etc
#make
#make install
Код: Выделить всё
# groupadd icecast
# useradd -g icecast -d /home/icecast -s /sbin/nologin icecast
Код: Выделить всё
# mkdir /home/icecast/admin
# mkdir /home/icecast/logs
# chown icecast:icecast /home/icecast/logs
# mkdir /home/icecast/web
из /usr/local/share/icecast/admin в /home/icecast/admin
из /usr/local/share/icecast/web в /home/icecast/web
Теперь настраиваем все это:
/usr/local/etc/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>
<burst-on-connect>1</burst-on-connect>
<burst-size>65535</burst-size>
</limits>
<!-- Аутентификация - обязательно измените приведённые здесь пароли -->
<authentication>
<source-password>sourcepass</source-password>
<relay-password>relaypass</relay-password>
<admin-user>admin</admin-user>
<admin-password>adminpass</admin-password>
</authentication>
<hostname>localhost</hostname>
<!-- Порт на котором ожидать соединений -->
<listen-socket>
<port>8000</port>
</listen-socket>
<!-- Точка монтирования для входящего потока -->
<mount>
<!-- Рок жЫфф! :)) -->
<mount-name>/rock</mount-name>
<username>source</username>
<password>sourcepass</password>
<intro></intro>
</mount>
<fileserve>1</fileserve>
<paths>
<!-- Пути -->
<basedir>/home/icecast</basedir>
<logdir>/home/icecast/logs</logdir>
<webroot>/home/icecast/web</webroot>
<adminroot>/home/icecast/admin</adminroot>
<pidfile>/var/run/icecast.pid</pidfile>
<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 -->
<!-- <logarchive>1</logarchive> -->
</logging>
<security>
<!-- Безопасность -->
<chroot>1</chroot>
<changeowner>
<user>icecast</user>
<group>icecast</group>
</changeowner>
</security>
</icecast>
Код: Выделить всё
# chown root:wheel /usr/local/etc/icecast/icecast.xml
# chmod 640 /usr/local/etc/icecast/icecast.xml
Код: Выделить всё
/usr/local/icecast -b -c /usr/local/etc/icecast.xml
Если не пошло смотрим логи и ищеб баги
/usr/local/etc/ices.conf
[xml]<?xml version="1.0"?>
<ices:Configuration xmlns:ices="http://www.icecast.org/projects/ices">
<Playlist>
<File>/путь_папке_с музыкой/playlist.txt</File>
<!-- Беспорядочное проигрывание -->
<Randomize>1</Randomize>
<Type>builtin</Type>
<Module>ices</Module>
<!-- Затухание треков -->
<Crossfade>5</Crossfade>
</Playlist>
<Execution>
<!-- Запускать в режиме демона-->
<Background>1</Background>
<!-- Подробный режим вывода -->
<Verbose>1</Verbose>
<BaseDirectory>/tmp</BaseDirectory>
</Execution>
<Stream>
<Server>
<Hostname>localhost</Hostname>
<Port>8000</Port>
<!-- пароль должен быть такой же как в секции <source-password> конфига icecast -->
<Password>sourcepass</Password>
<Protocol>http</Protocol>
</Server>
<Mountpoint>/rock</Mountpoint>
<Name>Metal Stream</Name>
<Genre>Metal</Genre>
<Description>Raven's Stream</Description>
<URL>http://адрес_вашего_сервера/</URL>
<!-- Разрешить передачу на релеи - нет))) -->
<Public>0</Public>
<!-- Битрейт выходного потока-->
<Bitrate>128</Bitrate>
<!-- Перекодировка - нужна если в папке с музыкой файлы не только mp3-формата -->
<Reencode>1</Reencode>
<!-- Частота перекодировки
<Samplerate>44100</Samplerate>
-->
<Channels>2</Channels>
</Stream>
</ices:Configuration>[/xml]
Создаем плейлист:
Код: Выделить всё
# cd /папка_с_музыкой
# find ./ -type f -name \*.mp3 > playlist.txt
# find ./ -type f -name \*.flac >> playlist.txt
# find ./ -type f -name \*.ogg >> playlist.txt
Запускаем ices
И в вашем любимом плеере добавляем поток http://ваш_сервер:8000/rock и наслаждаемся.# /usr/local/bin/ices -f /usr/local/etc/ices.conf
Сервер поднятый мной уже неделю доступен по адресу http://st.sysadmins.el.kg:8000/rock