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

от автора

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

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


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

В качестве серверной системы использую 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.
В браузере можно попробовать обратится по адресу:
<host>:9001/radio1

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

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

Далее надо составить плейлист для пользователя — проще всего установить консольный клиент для mpd:

sudo apt-get install ncmpc

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

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

Выслушаю любые конструктивные пожелания, замечания и предложения.

ссылка на оригинал статьи http://habrahabr.ru/post/170235/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *