Потоковое вещание с помощью mpd и icecast

()

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

Ссылки:

Ключевые слова: mpd, icecast, apache, phpMp.

Комментарии:

Ladm 2012-02-14 18:54:14 (#)

Не поверишь, но еще раз статья пригодилась, icecast повзрослел и превратился в icecast2, но от этого ничего не изменилось.

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

MooSE 2012-02-16 00:18:39 (#)

Цитата:

Не поверишь, но еще раз статья пригодилась, icecast повзрослел и превратился в icecast2, но от этого ничего не изменилось.

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


Я знаю:) DroidMPD сам использую:) А icecast2 от icecast достаточно сильно отличается. Хотя если с первым работал то и со вторым легко разбираешься:)
Новый комментарий



© 2006-2016 Вадим Калинников aka MooSE