Трансляция интернет-радио и локальной музыкальной коллекции с помощью icecast2 и mpd в Debian 4.0 Etch

В первую очередь разберемся что же из себя представляют вышеназванные программы
— icecast2 (http://www.icecast.org/) — потоковый медиа-сервер, поддерживающий Ogg Vorbis и MP3 аудио потоки. Icecast — проект с открытым исходным текстом и распространяющийся на условиях лицензии GPLv2

— mpd (http://www.MusicPD.org) — предоставляет удаленный доступ для воспроизведения музыки (MP3, Ogg Vorbis, FLAC, AAC, Mod, и wave форматов) управлением плей-листа и пр. MPD также является проектом с открытым исходным текстом и распространяющимся на условиях лицензии GPLv2

1. Установка и настройка mpd.
apt-get install mpd
vi /etc/mpd.conf
# MPD CONFIG FILE
# For a full description of all config parameters,
# Check the mpd man page, «man mpd».

############ REQUIRED####################

# You can put symlinks in here, if you like. Make sure
# user that mpd runs as (see the ‘user’ config parameter)
# can read the files in this directory

# You can put symlinks in here, if you like. Make sure
# user that mpd runs as (see the ‘user’ config parameter)
# can read the files in this directory
music_directory «/mnt/musik»
playlist_directory «/mnt/musik»
db_file «/var/lib/mpd/tag_cache»
log_file «/var/log/mpd/mpd.log»
error_file «/var/log/mpd/errors.log»
pid_file «/var/run/mpd/pid»
###########################################

###########################################
# EVERYTHING ELSE IS OPTIONAL
###########################################

############# AUDIO OUTPUT####################
#Я не использую ни OSS ни ALSA
audio_output {
type «ao»
driver «null»
name «default ao output»
}

############## SHOUT STREAMING################
audio_output {
type «shout»
name «new stream»
host «127.0.0.1»
port «8001»
mount «/mpd.ogg»
password «password_mpd»
bitrate «128»
format «44100:16:1»
} # end of audio_output
################ FILESYSTEM SETTINGS ############
filesystem_charset «UTF-8»
id3v1_encoding «CP1251»
###########################################
state_file «/var/lib/mpd/state»
########## SECURITY SETTINGS####################
user «mpd»
bind_to_address «localhost»

Немного о приведенных параметрах конфигурации-

music_directory «/mnt/musik»
playlist_directory «/mnt/musik»
db_file «/var/lib/mpd/tag_cache»
log_file «/var/log/mpd/mpd.log»
error_file «/var/log/mpd/errors.log»
pid_file «/var/run/mpd/pid»

В данном разделе указываем пути к нашей музыкальной коллекции, плей-листу, базе, файлам логирования.


audio_output {
type «ao»
driver «null»
name «default ao output»
}

как уже было сказано выше — я не использую ни OSS, ни ALSA, поэтому в качестве устройства вывода использую «null»
Для использования OSS либо ALSA пишем:
для OSS —

audio_output {
type «oss»
name «my OSS sound card»
device «/dev/dsp» # optional
format «44100:16:2» #optional
}
# OSS Mixer
mixer_type «oss»
mixer_device «/dev/mixer»
mixer_control «PCM»

для ALSA

audio_output {
type «alsa»
name «my ALSA device»
device «hw:0,0» # optional
format «44100:16:2» #optional
}
# ALSA Mixer
mixer_type «alsa»
mixer_device «default»
mixer_control «PCM»

Для передачи потока к icecast2 —

audio_output {
type «shout»
name «my stream»
host «127.0.0.1»
port «8001»
mount «/mpd.ogg»
password «password_mpd»
bitrate «128»
format «44100:16:1»
} # end of audio_output

В данном разделе указываем параметры соединения для icecast2 (type, host, port, mount, password) и качество потока (bitrate, format)


filesystem_charset «UTF-8»
id3v1_encoding «CP1251»

UTF8 — кодировка файловой системы
id3v1_encoding — кодировка тегов музыкальных композиций

Я опустил большинство параметров и привел минимальную рабочую конфигурацию (статья будет в формате шпаргалки)
Стартуем mpd:
исправляем в /etc/default/mpd
START_MPD=true
и /etc/init.d/mpd start
создаем базу
mpd —create-db
для управления mpd устанавливаем mpc
apt-get install mpc
добавляем композиции в плей-лист
mpc ls |mpc add
проверяем
mpc playlist
и запускаем
mpc play
проверяем
mpc
К параметрам mpc я еще вернусь, а пока рекомендую man mpc
Мы должны увидеть следующее, разумеется название композиции ваше 🙂
Др. — Воля что неволя..
[playing] #115/429 1:55 (97%)
volume:100% repeat: on random: on
На этом этап настройки mpd можно считать завершенным

Установка и настройка icecast2
apt-get install icecast2
vi /etc/icecast2/icecast.xml

<icecast>
    <limits>
        <clients>50</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>password_mpd</source-password>
        <relay-password>password_mpd</relay-password>

        <admin-user>admin</admin-user>
        <admin-password>password_admin</admin-password>
    </authentication>

    <directory>
        <yp-url-timeout>15</yp-url-timeout>
        <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
    </directory>

    <hostname>localhost</hostname>
    <!--<port>8000</port> -->
    <!--<bind-address>127.0.0.1</bind-address>-->

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

    <listen-socket>
        <port>8001</port>
        <bind-address>127.0.0.1</bind-address>
    </listen-socket>

    <relay>
        <server>209.51.161.54</server>
        <port>8072</port>
        <mount>/</mount>
        <local-mount>/radio_rock.mp3</local-mount>
        <on-demand>1</on-demand>
        <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>

    <relay>
            <server>81.88.113.18</server>
            <port>1072</port>
            <mount>/</mount>
            <local-mount>/radio_pop.mp3</local-mount>
            <on-demand>1</on-demand>
            <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>

     <relay>
            <server>scfire-nyk-aa03.stream.aol.com</server>
            <port>80</port>
            <mount>/stream/1010</mount>
            <local-mount>/jazz.mp3</local-mount>
            <on-demand>1</on-demand>
            <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>

    <relay>
            <server>205.188.215.226</server>
            <port>8020</port>
            <mount>/</mount>
            <local-mount>/guitar.mp3</local-mount>
            <on-demand>1</on-demand>
            <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>

    <relay>
            <server>72.51.33.149</server>
            <port>8000</port>
            <mount>/</mount>
            <local-mount>/skyrock.mp3</local-mount>
            <on-demand>1</on-demand>
            <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>

    <relay>
            <server>www.hitroe.com</server>
            <port>8000</port>
            <mount>/relay_low.ogg</mount>
            <local-mount>/hitroe.ogg</local-mount>
            <on-demand>1</on-demand>
            <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>

    <relay>
            <server>85.21.79.5</server>
            <port>8073</port>
            <mount>/</mount>
            <local-mount>/Corbina_rock.mp3</local-mount>
            <on-demand>1</on-demand>
            <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
    </relay>

    <fileserve>1</fileserve>

   <shoutcast-mount>/stream</shoutcast-mount>

    <paths>
            <basedir>/usr/share/icecast2</basedir>
            <logdir>/var/log/icecast2</logdir>
            <webroot>/usr/share/icecast2/web</webroot>
            <adminroot>/usr/share/icecast2/admin</adminroot>
            <!-- <pidfile>/usr/share/icecast2/icecast.pid</pidfile> -->
            <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 -->
   </logging>

    <security>
        <chroot>0</chroot>
        <!--
        <changeowner>
            <user>nobody</user>
            <group>nogroup</group>
        </changeowner>
        -->
    </security>
</icecast>

Попытаюсь кратко описать конфигурацию:

   <limits>
        <clients>50</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>

В данном разделе определяется:
— максимальное количество открытых потоков
50;
— количество источников потоков
2;
— количество нитей, одновременно обрабатывающие подключения, для загруженных серверов рекомендуется увеличить это значение
5;
— размер очереди (в байтах), ведется для каждого клиента, при большой загрузке сети, клиент может временно отставать, однако при превышении этого параметра клиент удаляется из потока.
524288;
— cледующий параметр в настоящее время не используется
30;
— максимальное время (в секундах) для организации подключения, рекомендуется оставить значение по умолчанию
15;
-время после которого, в случае отсутствия активности источника потока, он (источник) удаляется с сервера
10;
— так называемый всплеск потока, предназначен для ускорения начала проигрывания у клиента, это обуславливается тем, что большинство клиентских программ используют пребуферацию
1;
— размер в байтах для всплеска
65535;

Следующий раздел — раздел аутентификации

  <authentication>
        <source-password>password_mpd</source-password>
        <relay-password>password_mpd</relay-password>

        <admin-user>admin</admin-user>
        <admin-password>password_admin</admin-password>
    </authentication>

— пароль для источника потока, указывается в незашифрованном виде
password_mpd
— пароль для подчиненных серверов, транслирующие ваши потоки.
password_mpd
— логин и пароль для доступа к интерфейсу администратора
admin
password_admin

Если собираетесь публиковать информацию о аудио-потоках вашего сервера в icecast2 YP каталогах, то следующий раздел вам в этом поможет

<directory>
        <yp-url-timeout>15</yp-url-timeout>
        <yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>

— Время (в секундах) ожидания ответа от сервера icecast2 YP
15
— адрес сервера каталога
http://dir.xiph.org/cgi-bin/yp-cgi

Настройки интерфейсов сервера

 <hostname>localhost</hostname>
 <!--<port>8000</port> -->
 <!--<bind-address>127.0.0.1</bind-address>-->
 <listen-socket>
        <port>8000</port>
  </listen-socket>
  <listen-socket>
        <port>8001</port>
        <bind-address>127.0.0.1</bind-address>
  </listen-socket>

В данном разделе указываются интерфейсы, и порты для связи с нашим сервером
указываем имя сервера —
localhost
порт к которому будут подключаться клиенты —

если необходимо сделать привязку к конкретному интерфейсу, указываем —

Следующим этапом определяю сокеты для основного и альтернативного (mpd) потоков

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

в данном случае отсутствует директива bind-address, поэтому 8000 порт будет доступен на всех сетевых интерфейсах.

<listen-socket>
        <port>8001</port>
        <bind-address>127.0.0.1</bind-address>
</listen-socket>

для подключения mpd мы используем порт 8001 и слушать его будем исключительно на внутреннем интерфейсе.

Следующим разделом мы будем ретранслировать внешний аудио-поток через наш сервер

 <relay>
        <server>209.51.161.54</server>
        <port>8072</port>
        <mount>/</mount>
        <local-mount>/radio_rock.mp3</local-mount>
        <on-demand>1</on-demand>
        <relay-shoutcast-metadata>1</relay-shoutcast-metadata>
 </relay>

Адрес удаленного источника —
209.51.161.54
Порт удаленного источника —
8072
точка монтирования удаленного потока —
/
локальная точка монтирования —
/radio_rock.mp3
Поток будет транслироваться только в том случае, если к нему подключен клиент (1-включено, 0-выключено) —
1
Трансляция метаданных потока (названия песен)
1
Аналогично поступаем для всех серверов

В данном разделе определяем пути используемые icecast2

    <paths>
            <basedir>/usr/share/icecast2</basedir>
            <logdir>/var/log/icecast2</logdir>
            <webroot>/usr/share/icecast2/web</webroot>
            <adminroot>/usr/share/icecast2/admin</adminroot>
            <!-- <pidfile>/usr/share/icecast2/icecast.pid</pidfile> -->
            <alias source="/" dest="/status.xsl"/>
    </paths>

Используется только в том слчае, если icecast2 запущен в chroot окружении —
/usr/share/icecast2
Путь к файлам журнала —
/var/log/icecast2
Путь к базовому каталогу, используемого для запросов —
/usr/share/icecast2/web

Раздел журналирования

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

В данный файл будет помещаться информация о запросах к нашему серверу —
access.log
В файл error.log помещается отладочная информация
error.log
Уровень логирования, для начала рекомендуется 4 — отладочный, после того как сервер будет введен в эксплуатацию, желательно использовать — 1-й уровень —
4
Следующий параметр определяет максимальный размер (в килобайтах) журнальных файлов
10000

И последний раздел — раздел безопасности

 <security>
        <chroot>0</chroot>
        <!--
        <changeowner>
            <user>nobody</user>
            <group>nogroup</group>
        </changeowner>
        -->
 </security>

В нем определяем будем ли стартовать icecast2 в chroot окружении, (0 — не используется, 1 — включено) —
0
Пользователь и группа от имени которого будет запускаться icecast2 —
nobody
nogroup
Последним этапом настройки будет редактирование /etc/default/icecast2 — исправляем false на true
ENABLE=true
И стартуем /etc/init.d/icecast2 start
Для того, что бы проверить работоспособность набираем в вашем любимом браузере http://ip_adress_server:8000 . Мы должны увидеть следующую картину

Если, что-то пошло не так смотрим /var/log/icecast2/error.log
Т.к. у меня при перезагрузке icecast2 не всегда успевал отработать «stop» в /etc/init.d/icecast2 исправление sleep 1 на sleep 5 исправило ситуацию
P.S. Хочу заметить, что это черновой вариант. Принимаю любую критику.
2008 Владислав Никитин

Источник http://nklug.org.ua/node/11

Запись опубликована в рубрике *Unix,*Linux. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Я не спамер This plugin created by Alexei91