У большинства операторов связи есть 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. (телефон на андроиде)