У большинства операторов связи есть ftp-сервер, созданый для обмена файлами между абонентами. Зачастую на этом сервере скапливается достаточно большое количество музыки. Используя эту музыку можно запустить «радио» - потоковое вещание. Далее в этой статье будет показано как можно организовать трансляцию ogg-потока с помощью mpd и icecast. Для управления потоком будет использован web-интерфейс.
Для начала нужно установить необходимое ПО. В различных системах это делается по разному. Например в Mandriva для этого нужно ввести команду:
urpmi mpd icecast apache apache-mod_php
Для Gentoo:
USE=apache2 emerge mpd icecast apache php
В статье основной упор будет сделан для Gentoo, поэтому для других дистрибутивов команды и пути могут немного отличаться.
Теперь пишем файлы конфигурации. Сначала простой пример icecast.xml:
<icecast>
<limits>
<sources>2</sources>
</limits>
<authentication>
<source-password>hackme</source-password>
<admin-user>admin</admin-user>
<admin-password>hackme</admin-password>
</authentication>
<directory>
<yp-url-timeout>15</yp-url-timeout>
<yp-url>http://dir.xiph.org/cgi-bin/yp-cgi</yp-url>
</directory>
<shoutcast-mount>/stream</shoutcast-mount>
<hostname>localhost</hostname>
<listen-socket>
<port>8000</port>
</listen-socket>
<listen-socket>
<port>8001</port>
<shoutcast-compat>1</shoutcast-compat>
</listen-socket>
<fileserve>1</fileserve>
<paths>
<logdir>/var/log/icecast</logdir>
<webroot>/usr/share/icecast/web</webroot>
<adminroot>/usr/share/icecast/admin</adminroot>
<alias source="/" dest="/status.xsl"/>
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>3</loglevel>
</logging>
<security>
<chroot>0</chroot>
<changeowner>
<user>icecast</user>
<group>icecast</group>
</changeowner>
</security>
</icecast>
Обратим внимание на ряд парметров:
- Все параметры секции <authentication> описывают авторизацию пользователей и администратора. Установите по вкусу.
- Параметр <port> задаёт порт, на котором слушает icecast.
- Параметр <shoutcast-compat> должен обязательно быть установлен в единицу. Он говорит что icecast должен работать в режиме совместимости с shoutcast. Иначе mpd не сможет работать с icecast.
- Параметры секции <paths> описывают пути к логам и файлам веб-интерфейса демона. Убедитесь что они указаны правильно.
- Icecast отказывается работать с правами супер пользователя, поэтому его нужно запускать с правами ограниченного пользователя. Директива <changeowner> как раз и задаёт этого пользователя. Убедитесь что он существует.
Теперь перейдём к конфигурированию mpd. Для этого нам нужно всего лишь немного модифицировать "умолчальный" mpd.conf. Первым делом настроим вывода звука через icecast:
audio_output {
type "shout"
name "My Shout Stream"
host "localhost"
port "8000"
mount "/radio.ogg"
password "hacktme"
bitrate "64"
format "44100:16:2"
user "source"
description "My OGG-Stream"
public "yes"
}
Здесь:
- Параметры "host", "port" и "password" описывают соединение с icecast.
- Парметры "bitrate" и "format" задают качество потока.
Указываем необходимые пути:
music_directory "/var/ftp/pub/music" playlist_directory "/var/lib/mpd/playlists" db_file "/var/lib/mpd/mpd.db" log_file "/var/log/mpd/mpd.log" error_file "/var/log/mpd/mpd.error"
Здесь:
- "music_directory" - папка с музыкальными файлами, из которых потом и будут составляться программы.
- "playlist_directory" - директория, где mpd будет сохранять свои плей-листы
- "db_file" - файл, в котором mpd будет хранить свою медиа-библиотеку.
- "log_file" и "error_file" - файлы логов.
Убедитесь что все пути существуют.
Наконец укажем кодировки файловой системы и тэгов в mp3-файлах:
filesystem_charset "UTF-8" id3v1_encoding "CP1251"
Остальные параметры можно оставить по умолчанию.
Всё, конфигурирование закончено. Теперь нам нужно проиндексировать папку с музыкой и запустить сервисы:
mpd --create-db /etc/init.d/icecast start /etc/init.d/mpd start
Обратите внимание что mpd обязательно должен запускаться после icecast.
Теперь нам нужно настроить администрирование. Для этого нужно скачать последнюю версию phpMp и распаковать её в DocumentRoot вашего веб-сервера и запустить сервер:
/etc/init.d/apache2 start
Теперь вы можете зайти браузером на адрес http://<ваш_IP>/, собрать свой плей-лист и запустить воспроизведение. После чего можете настроить проигрыватель на воспроизведение ogg-потока с адреса http://<ваш_IP>:8000/radio.ogg. Поздравляю. Радио работает!
В процессе эксплуатации этого сервиса было замечено что иногда mpd "падает" по неизвестной причине. Чтобы не перезапускать его руками был написан небольшой скрипт, который запускается по cron'у каждые пять минут:
#!/bin/sh if (test `/usr/local/bin/mpc | /usr/bin/wc -l` == 1 ) then /sbin/service icecast restart /sbin/service mpd restart /usr/local/bin/mpc play fi
Для работы скрипта потребуется консольный клиент для mpd - mpc:
emerge mpc
И напоследок несколько советов:
- Если включить xfade для mpd (например в том же phpMp), то переход между песнями будет более плавным.
- Вместо phpMp можно с тем же успехом использовать pitchfork. Он обладает большим функционалом, но использует AJAX.
- Не забудьте используя файрвол ограничить доступ к администрированию сервера (откройте порты 80 и 6600 только для своих адресов).
- Для управления mpd также можно использовать и различные интерфейсы вроде Sonata или mpd commander. В качестве сервера им нужно указать <ваш_IP>:6600.
Ссылки:

Ladm 2012-02-14 18:54:14 (#)
Применение - слушать радио с мобилки через Servestream, управлять mpd через Droid MPD Client. (телефон на андроиде)