Создание локального медиа-сервера на основе icecast2

Понадобилось мне на своем сервере создать потоковый медиасервер, так как весь архив музыки я храню именно на нем, а работа плеера через примонтированные шары — часто бывает очень неудовлетворительной. Немного почесав в затылке решил посвятить вечер и сделать нормальный сервер потокового вещания. Выбор пал на icecast2 как вещательный сервер и mpd как клиент гонящий на него медиа-поток. Выбор такой сделан не случайно, так как сервер целиком в консоли и даже не имеет монитора — то есть управляется целиком по ssh.

1. Установка и настройка mpd.
MPD — это плеер демон — который может запускаться вместе с системой и делать вывод медиа потока на различные ресурсы. Открываем консоль (в моем случае — через терминал поключаемся по ssh)
$sudo apt-get install mpd
После установки — правим конфиг для mpd. Я опишу что писать — последовательно.
$sudo nano /etc/motd.conf
######################## REQUIRED PATHS ########################
# You can put symlinks in here, if you like. Make sure that
# the user that mpd runs as (see the 'user' config parameter)
# can read the files in this directory.
music_directory "/mnt/MUSIC/rock/russia"
playlist_directory "/mnt/MUSIC/rock/russia"
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"
################################################################

нам требуется здесь изменить только два значения:
music_directory «/mnt/MUSIC/rock/russia»
playlist_directory «/mnt/MUSIC/rock/russia»
— первое — это директория где у вас хранится музыка.
— второе — место хранения плейлистов.
Для удобства я выбрал одну и туже директорию.
######################## DAEMON OPTIONS ########################
#
# If started as root, MPD will drop root privileges and run as
# this user instead. Otherwise, MPD will run as the user it was
# started by. If left unspecified, MPD will not drop root
# privileges at all (not recommended).
#
user "mpd"
#
# The address and port to listen on.
#
bind_to_address "127.0.0.1"
port "6600"
#
# Controls the amount of information that is logged. Can be
# "default", "secure", or "verbose".
#
#log_level "default"
#
################################################################

здесь все оставляем как есть. Это параметры работы демона. Я из стандарта изменил только bind_to_adress с localhost на 127.0.0.1
########################## PERMISSIONS #########################
#
# MPD can require that users specify a password before using it.
# You may specify one ore more here, along with what users who
# log in with that password are allowed to do.
#
#password "password@read,add,control,admin"
#
# Specifies what permissions a user who has not logged in with a
# password has. By default, all users have full access to MPD
# if no password is specified above, or no access if one or
# more passwords are specified.
#
#default_permissions "read,add,control,admin"
#
################################################################

тут тоже оставляем все как есть. эти настройки нужны если демон работает не от своего имени и ему требуются другие права доступа (поправьте если ошибаюсь)
Далее идет самая важная секция — параметры направления медиа-потока на устройства трансляции. Это могут быть либо аудиоустройства хоста, либо потоковый сервер. На моем сервере звука нет и не будет — потому я раскомментировал только сецию касающююся shoutcast потока.
audio_output {
type "shout"
name "stream"
host "127.0.0.1"
port "8000"
mount "/stream.mp3"
password "pass123"
# quality "5.0"
bitrate "256"
format "44100:16:2"
# user "source" # optional
# description "My Stream Description" # optional
# genre "jazz" # optional
# public "no" # optional
}

параметры которые использованы — вполне понятны, но я все же поясню.

  • type — указывает на то что вещание будет идти на сервер вещания.
  • name — имя потока
  • host — куда будет производится вещание. медиасервер у меня на этом же хосте — потому указан 127.0.0.1 — может быть и localhost, мне просто удобнее по ip адресам.
  • port — порт который слышается медиасервером для приема потока.
  • mount — точка монтирования медиапотока. по идее может быть какой угодно, но у меня почему то без указания расширения не пошло. может быть что-то я недопонял.
  • password — пароль для доступа к медиасерверу
  • bitrate — в каком качестве поток будет идти на медиасервер.
  • format — формат медиа потока — в примере — 44100 — частота дискретизации, 16 бит качество, 2 канала (стерео)

остальные закоменнтированные параметры можете расскомментировать если хочется и выставить свои значения, из названий я думаю понятно какая за что отвечает.
далее идут еще пара закомментированных секций которые для обычной локальной сети не требуются. например есть секция нормализации звика, настройки буферизации или же настройка прокси сервера, если вдруг для доступа к медиасерверу нужно через него пройти.
следующие два параметра можно оставить по умолчанию, но если вы начинающий linux-пользователь, то скорее всего ваша медиабиблиотека вся некорректно забита в кодировке win1251 в id3v1 тегах. тогда можно будет поменять параметр id3v1_encoding c UTF8 на cp1251
###################### CHARACTER ENCODINGS #####################
#
# If file or directory names do not display correctly, then you
# may need to change this. In most cases it should be either
# "ISO-8859-1" or "UTF-8". You must recreate your database
# after changing this (use mpd --create-db).
#
filesystem_charset "UTF-8"
#
# The encoding that ID3v1 tags should be converted from.
#
id3v1_encoding "UTF-8"
#
################################################################

у меня как видите стоит юникод — чего и вам советую.
последняя секция — это прочие настройки. я расскомментировал только один параметр — метаданные которые будет расспознавать mpd
metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc"

Далее проверим чтобы у mpd были права на доступ в директорию с музыкой. я не заморачивался и просто сделал
$sudo chmod 777 -R /mnt/MUSIC/rock/russia
после этого запустим демон плеера
$sudo /etc/init.d/mpd start
если плеер запустился то, создадим базу нашей музыки
$mpd —create-db
если нет — то гуглите и т.д. можете попрыгать с бубном или плюнуть и уйти на винду обратно :)
подождем пока mpd просканирует всю коллекцию.

2. Установка и настройка Icecast2.

Теперь пришел черед медиасервера. Установим его.
$sudo apt-get install icecast2
Конфиг-файл icecast2 является xml файлом. откроем его и отредактируем.
$sudo nano /etc/icecast2/icecast.xml
Сам конфиг я выкладываю тот что у меня. Стандартный неплохо откомментирован, и в нем без труда даже можно настроить relay вещание интернет-станций в вашу локальную сеть.
Мой конфиг без комментариев. на некоторых параметрах я остановлюсь подробнее.

  • <clients>100</clients> — максимальное колиество клиентских подключений.
  • <sources>2</sources> — число входящих потоков
  • <threadpool>5</threadpool> — нити демона — если у вас проблемы с подключениями пользователей (рвет соединение из-за перегрузки) то увеличьте количество.
  • <client-timeout>30</client-timeout> — таймаут клиента, время после которого сервер закроет подключение на клиента.
  • <source-timeout>10</source-timeout> — таймаут ресурса — время через какое сервер будет считать что поток принимаемый им сменился на другой или просто недоступен.

Параметры нитей, и таймауты я менять не рискнул, и вам не советую, если не знаете стопроцентно что делаете.

секция <authentication> отвечает за доступ к серверу и логам.

  • <shoutcast-mount>/stream.mp3</shoutcast-mount> — точка монтирования потока. я/ указал то же самое что и в плеере.
  • <hostname>127.0.0.1</hostname> — собственно имя сервера — если сервер смотрит в интернет то можете указать IP адрес или его имя
  • <listen-socket><port>8000</port></listen-socket> — порт который слушается сервером.
  • <listen-socket><port>8001</port><shoutcast-compat>1</shoutcast-compat></listen-socket> — второй порт. я оставил на всякий случай чтобы потом не переписывать, вы можете убрать если хотите.

секция <mount>

  • <mount-name>/stream.mp3</mount-name> — имя точки монтирования. я не извращался — и дал тоже самое
  • <public>1</public> — публикация в интернете потока.
  • <bitrate>256</bitrate> — качество выдаваемого потока.
  • <type>audio/mpeg</type> — тип потока — напомню что через icecast2 можно вещать и видео потоки.
  • <subtype>mp3</subtype> — подтип аудиопотока
  • <mp3-metadata-interval>8192</mp3-metadata-interval> — интервал обновления метаданных. или я просто непонял для чего оно нужно.
  • <hidden>0</hidden> — скрыта или нет точка монтирования.

все остальное — лучше не трогать если вы не знаете для чего вам требуется что-то менять.
Теперь запустим медиа-сервер
$sudo /etc/init.d/icecast2 start
Проверим вебинтерфейс.
http://ice_cast_ip_adress:8000/
Если поток вещается — то на странице статуса сервера вы увидите точку монтирования и ссылку на m3u плейлист. эту ссылку можно уже добавить в ваш любимый плеер и слушать поток вашей собственно локальной радиостанции :)
Удачи!

Автор: Mirivlad

Скромный труженик консоли и окошек.