Icecast

K

kenny

Гость
#1
Давненько что-то не было постов. Оговорюсь сразу статья ниже не моя, а моего коллеги, я ему помогал в написании и настройки, пару лет назад.

Сейчас я вам расскажу как создать своё интернет радио. Для начала сделаем просто проигрывание треков из папки/папок на сервере.

Icecast

Please Login or Register to view hidden text.


Скачиваем, распаковываем, компилируем.
Код:
# wget http://downloads.xiph.org/releases/icecast/icecast-2.3.2.tar.gz
# tar xvfz icecast-2.3.2.tar.gz
# cd icecast-2.3.2
# ./configure
# make
# make install
Создаём группу и пользователя
Код:
# groupadd icecast
# useradd icecast -g icecast -m -d /home/icecast
Также устанавливаем пароль для пользователя.
Зачем? Просто у меня есть человек, который будет закачивать музыку

Код:
# passwd icecast
Создадим нужные каталоги и скопируем в них файлы
Код:
# mkdir /home/icecast/admin
# mkdir /home/icecast/logs
# chown icecast:icecast /home/icecast/logs
# mkdir /home/icecast/web
# cp -r /usr/local/share/icecast/admin /home/icecast/
# cp -r /usr/local/share/icecast/web /home/icecast/
# mkdir /home/icecast/music
# chown icecast:icecast /home/icecast/music
Копируем и правим
Код:
# cp /usr/local/share/icecast/doc/icecast.xml.dist /etc/icecast.xml
# mcedit /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>Пароль1</source-password>
        <relay-password>Пароль2</relay-password>
        <admin-user>АдминЛогин</admin-user>
        <admin-password>АдминПароль</admin-password>
    </authentication>

    <hostname>localhost</hostname>

    <listen-socket>
        <port>8000</port>
    </listen-socket>

    <fileserve>1</fileserve>

    <paths>
        <basedir>/home/icecast</basedir>
        <logdir>/home/icecast/logs</logdir>
        <webroot>/home/icecast/web</webroot>
        <adminroot>/home/icecast/admin</adminroot>
        <alias source="/" dest="/status.xsl"/>
    </paths>

    <logging>
        <accesslog>access.log</accesslog>
        <errorlog>error.log</errorlog>
        <loglevel>3</loglevel>
        <logsize>10000</logsize>
    </logging>

    <security>
        <chroot>0</chroot>
        <changeowner>
            <user>icecast</user>
            <group>icecast</group>
        </changeowner>
    </security>
</icecast>
Не забываем поменять данные на свои в теге <authentication>

Ограничим доступ к файлу
Код:
# chown root:root /etc/icecast.xml
# chmod 640 /etc/icecast.xml
Запускаем icecast
Код:
# icecast -b -c /etc/icecast.xml
Проверяем

Please Login or Register to view hidden text.


Открывается? Всё отлично


Ices

Please Login or Register to view hidden text.


Скачиваем, распаковываем, компилируем.
Код:
# wget http://downloads.us.xiph.org/releases/ices/ices-2.0.1.tar.gz
# tar xvfz ices-2.0.1.tar.gz
# cd ices-2.0.1
# ./configure
# make
# make install
Копируем и правим
Код:
# cp /usr/local/share/ices/ices-playlist.xml /etc/ices-playlist.xml
# mcedit /etc/ices-playlist.xml
Делаем конфиг примерного содержания
Код:
<?xml version="1.0"?>
<ices>
    <background>1</background>
    <logpath>/home/icecast/logs</logpath>
    <logfile>ices.log</logfile>
    <loglevel>4</loglevel>
    <consolelog>0</consolelog>



    <stream>
        <metadata>
            <name>Radio Evolution</name>
            <genre>other</genre>
            <description>Radio Evolution by MrStalker</description>
        </metadata>

        <input>
            <module>playlist</module>
            <param name="type">basic</param>
            <param name="file">playlist.txt</param>
            <param name="random">0</param>
            <param name="restart-after-reread">0</param>
            <param name="once">0</param>
        </input>

        <instance>
            <hostname>localhost</hostname>
            <port>8000</port>
            <password>Пароль1</password>
            <mount>/music.ogg</mount>
            <reconnectdelay>2</reconnectdelay>
            <reconnectattempts>5</reconnectattempts>.

            <maxqueuelength>80</maxqueuelength>

            <encode>
                <nominal-bitrate>192000</nominal-bitrate>
                <samplerate>44100</samplerate>
                <channels>2</channels>
            </encode>
        </instance>

        </stream>
</ices>
Не забываем поменять данные на себя в тегах:
1. <metadata> Тут думаю всё понятно (Название, жанр, описание)
2. <input> Тут менять ничего не стоит, кроме <param name="random">0</param> (если значение 1, то песни будут воспроизводиться в случайном порядке)
3. <instance> Тут два параметра <password>Пароль1</password> (ставим пароль такой же, какой указали в конфиге icecast'а вместо Пароль1) <mount>/music.ogg</mount> (как вам больше нравится, меня устраивает music.ogg)
4. <encode> Тут по желанию можете изменить настройки качества звука.

Ограничим доступ к файлу
Код:
# chown root:root /etc/ices-playlist.xml
# chmod 640 /etc/ices-playlist.xml
Копируем свою музыку в папку /home/icecast/music/
Но тут может появится проблема... Вы наверняка копируете mp3 файлы, а ices2 понимает только ogg, но мы и с этим справимся.
Для этой ситуации я написал скрипт
Код:
# mcedit /usr/local/bin/convr
С таким вот текстом
Код:
#!/bin/sh

find *.mp3 -type f | while read file;
do
let num=num+1
list=$(find *.mp3 -type f | awk "NR==$num {print;exit}")
mpg321 "$file" -w raw && oggenc raw -o "$list".ogg
done
rm raw
rm *.mp3
Делаем скрипт исполняемым
Код:
# chmod +x /usr/local/bin/convr
Самый момент его использовать

Код:
# cd /home/icecast/music
# convr
Ждём пока идёт процесс, или делаем что то полезное в это время.

Готово. Дальше делаем плейлист. Для этого я сделал ещё один скрипт.
Код:
# mcedit /usr/local/bin/plr
С текстом
Код:
#!/bin/sh
ls -1 > playlist.txt
Делаем исполняемым
Код:
# chmod +x /usr/local/bin/plr
Находясь всё ещё в папке с музыкой, выполняем команду
Код:
# plr
Плейлист готов, запустим ices (обязательно из папки с музыкой)
Код:
# ices /etc/ices-playlist.xml
Проверяем

Please Login or Register to view hidden text.


Если всё правильно, на странице должно появится что вроде: (смотрим скрытый текст)

Справа есть ссылки на прослушивание.

Впринципе всё, но одного канала нам мало
делаем второй.
Код:
# cp /etc/ices-playlist.xml /etc/ices-playlist-t.xml
# chown root:root /etc/ices-playlist-t.xml
# chmod 640 /etc/ices-playlist-t.xml
Немного подправим второй конфиг
Код:
# mcedit /etc/ices-playlist-t.xml
Как править смотрим выше, главное изменить <mount>/tank1st.ogg</mount>
Создаём папку
Код:
# mkdir /home/icecast/music/tank1st
# chown icecast:icecast /home/icecast/music/tank1st
Копируем файлы, по аналогии конвертируем, делаем плейлист
Код:
# cd /home/icecast/music/tank1st
# convr
# plr
И запускаем второй процесс ices'а
Код:
# ices /etc/ices-playlist-t.xml
Ну вот собственно и всё, спасибо за внимание
Далее приведем пример ретранслирования.


Чтобы ретранслировать другое радио достаточно в конфиг icecast'а включить следующее:
Код:
        <relay>
                <server>213.251.194.163</server>
                <port>8000</port>
                <mount>/</mount>
                <local-mount>/animeradio</local-mount>
                <on-demand>0</on-demand>

                <relay-shoutcast-metadata>0</relay-shoutcast-metadata>
        </relay>
Тут думаю всё понятно, адрес внешнего сервера, порт, внешняя и локальная точки монтирования.

Please Login or Register to view hidden text.