Как стать автором
Обновить

Автоматическая настройка Icecast2 и mpd на несколько аудио потоков

Время на прочтение5 мин
Количество просмотров21K
По просьбе друга пытался сделать онлайн-радио. И вроде все бы ничего, но возникла необходимость транслировать и управлять многими потоками независимо друг от друга…

Для этого я выбрал следующий путь…


Пойдем по порядку.

В качестве серверной системы использую Ubuntu Server 12.10.

Первым делом ставим Icecast2:
sudo apt-get install icecast2


Далее ставим mpd:
sudo apt-get install mpd


Создадим директорию radio в корне файловой системы.
Создадим 3 файла в этой директории
  • icecast.xml.default
  • mpd.conf.default
  • script.sh

И скопируем 2 директории из каталога /etc/icecast2/
  • web
  • admin


Далее необходимо отредактировать файлы настроек Icecast2 и mpd.

Файл icecast.xml.default:
<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>#2</source-password>
		<relay-password>#2_relay</relay-password>
		<admin-user>admin</admin-user>
		<admin-password>admin_#2</admin-password>
	</authentication>
	<hostname>127.0.0.1</hostname>
	<listen-socket>
		<port>#3</port>
	</listen-socket>
	<mount>
		<mount-name>/#1</mount-name>
	</mount>
	<paths>
		<basedir>#0/#1/icecast2</basedir>
		<logdir>#0/#1/icecast2/log</logdir>
		<webroot>#0/#1/icecast2/web</webroot>
		<adminroot>#0/#1/icecast2/admin</adminroot>
		<pidfile>#0/#1/icecast2/icecast.pid</pidfile>
		<alias source="/" dest="/status.xsl"/>
	</paths>
    <logging>
        <accesslog>access.log</accesslog>
        <errorlog>error.log</errorlog>
        <loglevel>4</loglevel>
        <logsize>10000</logsize>
    </logging>
    <security>
        <chroot>0</chroot>
        <changeowner>
            <user>icecast</user>
            <group>icecast</group>
        </changeowner>
    </security>
</icecast>

Разберем что значат параметры:
#0 — путь до директории пользователя
#1 — имя пользователя
#2 — пароль пользователя
#3 — порт на котором будет запущен Icecast2

Теперь отредактируем mpd.conf.default:

music_directory       "#1/#2/music"
playlist_directory     "#1/#2/playlists"
db_file                       "#1/#2/lib/tag_cache"
log_file                	   "#1/#2/log/mpd.log"
pid_file                	   "#1/#2/pid"
state_file              	   "#1/#2/state"
user                           "mpd"
bind_to_address    "127.0.0.1"
port		                   "#5"
auto_update            "yes"

audio_output {
	type                   "shout"
	name                 "#2 radio"
	encoding          "mp3"
	host                   "localhost"
	port                    "#4"
	mount                "/#2"
	password         "#3"
	bitrate                "192"
	format                "44100:16:2"
}

audio_output {
	type "alsa"
	name "fake out"
	driver "null"
}
volume_normalization            "yes"
filesystem_charset              "UTF-8"
id3v1_encoding                  "UTF-8"
metadata_to_use                  "artist,album,title,track,name,genre,date,composer,performer,disc"

Параметры mpd:
#1 — путь до директории пользователя
#2 — имя пользователя
#3 — пароль пользователя для Icecast2
#4 — порт на котором запущен Icecast2
#5 — порт для управления mpd

И последний файл — скрипт настройки:

#!/bin/bash
MAIN_DIR=/userAlias
FROM=/radio
if [ $# -lt 4 ]; then
	echo "==== Не заданы параметры ===="
	echo "Формат ./script.sh 'userName' 'userPassword' 'port' 'mpdPort'"
	exit 1
fi
echo "<===> Начало работы скрипта <===>"
if [ ! -d "$MAIN_DIR" ]; then
	mkdir $MAIN_DIR
	echo "      Создана главная папка для пользователей"
fi
mkdir $MAIN_DIR'/'$1
echo "      Создана папка пользователя " $1
echo ""
echo "<===>  Настройка icecast <===>"
cp $FROM/icecast.xml.default $MAIN_DIR'/'$1'/'icecast.xml
replace '#0' $MAIN_DIR -- $MAIN_DIR'/'$1'/'icecast.xml
replace '#1' $1 -- $MAIN_DIR'/'$1'/'icecast.xml
replace '#2' $2 -- $MAIN_DIR'/'$1'/'icecast.xml
replace '#3' $3 -- $MAIN_DIR'/'$1'/'icecast.xml
mkdir $MAIN_DIR'/'$1'/icecast2' 
mkdir $MAIN_DIR'/'$1'/icecast2/log' 
mkdir $MAIN_DIR'/'$1'/icecast2/web' 
mkdir $MAIN_DIR'/'$1'/icecast2/admin' 
cp $FROM/icecastDirs/admin/* $MAIN_DIR'/'$1'/icecast2/admin'
cp $FROM/icecastDirs/web/* $MAIN_DIR'/'$1'/icecast2/web'
touch $MAIN_DIR/$1/icecast2/log/error.log
touch $MAIN_DIR/$1/icecast2/log/access.log
chown icecast:icecast  $MAIN_DIR/$1/icecast.xml
chown icecast:icecast  $MAIN_DIR/$1/icecast2/log/*
echo "<===>  Настройка icecast  завершена <===>"
echo ""
echo "<===>  Настройка mpd <===>"
cp $FROM/mpd.conf.default $MAIN_DIR'/'$1'/'mpd.conf
replace '#1' $MAIN_DIR -- $MAIN_DIR'/'$1'/'mpd.conf
replace '#2' $1 -- $MAIN_DIR'/'$1'/'mpd.conf
replace '#3' $2 -- $MAIN_DIR'/'$1'/'mpd.conf
replace '#4' $3 -- $MAIN_DIR'/'$1'/'mpd.conf
replace '#5' $4 -- $MAIN_DIR'/'$1'/'mpd.conf
mkdir $MAIN_DIR'/'$1'/music' 
mkdir $MAIN_DIR'/'$1'/playlists' 
mkdir $MAIN_DIR'/'$1'/lib' 
mkdir $MAIN_DIR'/'$1'/log' 
touch $MAIN_DIR/$1/lib/tag_cache
chmod 777 $MAIN_DIR/$1/lib/tag_cache
touch $MAIN_DIR/$1/pid
chmod 777 $MAIN_DIR/$1/pid
echo "<===>  Настройка mpd  завершена <===>"
echo "<===>  Запуск icecast <===>"
icecast2 -b -c  $MAIN_DIR'/'$1'/'icecast.xml
sleep 1s
echo "<===>  Запуск mpd <===>"
mpd  $MAIN_DIR'/'$1'/'mpd.conf

Если не вдаваться в подробности, то скрипт делает следующее:
  • создаются директории для пользователя
  • копируются файлы настроек Icecast2 и mpd
  • подменяются параметры в файлах настроек
  • создаются дополнительные файлы для Icecast2 и mpd
  • выставляются права на файлы
  • запуск Icecast2
  • запуск mpd


После создания 3 файлов необходимо сделать скрипт запускаемым:
chmod 777 script.sh


И выполнить:
./script.sh radio1 password1 9001 19001


После работы скрипта будут запущены Icecast2 и mpd.
В браузере можно попробовать обратится по адресу:
:9001/radio1

К сожалению произойдет ошибка... mpd сервер не запущен ( не проигрывает музыку) и музыкальных файлов нет.

Первым делом необходимо скопировать музыкальные файлы для пользователя в директорию: /userAlias/radio1/music/

Далее надо составить плейлист для пользователя - проще всего установить консольный клиент для mpd:
sudo apt-get install ncmpc

С его помощью можно подключится и управлять mpd.
Подключаемся:
ncmpc -p 19001
Сначала нужно перечитать папку music Ctrl + U
После надо нажать '3' - перейдем в режим просмотра медиатеки.
Управляя клавишами ВВЕРХ / ВНИЗ и выбираем ПРОБЕЛом песни.
Нажав '2' - просмотр плейлиста. Нажав Enter - запустим наш проигрыватель.

Если все правильно настроено, то по перейдя по адресу :9001/radio1 услышим музыку из плейлиста.

Выслушаю любые конструктивные пожелания, замечания и предложения.
Теги:
Хабы:
+3
Комментарии5

Публикации