воскресенье, 18 декабря 2011 г.

Как радио Шансон меня достало и что из этого получилось

Я часто пользуюсь такси, и почти всегда в машине играет радио. Вот вчера едем, водитель слушает радио шансон, какой-то пропито-прокуренный голос исполняет незатейливую песню про жизнь урки (или орка), можно назвать этот жанр "Оркские народные песни", да простит меня профессор Толкиен который не мог подумать что орки и гоблины не только сочиняют и поют песни, но даже имеют собственную радиостанцию которая круглосуточно вещает из Мордора.

Я вежливо попросил убрать шансон, таксист переключил на другую волну. Мне от этого не стало легче, потому что то что я услышал по радио было не намного лучше шансона, новости гламура :) Но не все так плохо, нашел в интернете чудесный ресурс, жаль что в такси про него не знают.

Итак, решил разобраться как создавать интернет-радио. Выяснил что для Linux уже есть готовый солюшен, называется icecast2. Установил на свой Ubuntu сервер пакет icecast2, но этого оказалось не достаточно. Надо поставить еще один пакет, называется ices2. Ices2 служит источником данных для icecast2. Icecast2 может транслировать звук из разных источников, например, изаудио-файлов на диске, также можно подключить микрофон к компьютеру, тогда icecast2 будет передавать звук из микрофона.

Создаем конфиг файл /etc/ices.xml из шаблона /usr/share/doc/ices2/examples/ices-playlist.xml. Теперь нужно указать где лежит папка с файлами в формате ogg которые будут проигрываться на нашем радио. Добавляем в /etc/ices.xml элемент:


...
<input>
<module>playlist</module>
<param name="type">basic</param>
<param name="file">/var/music/playlist.txt</param>
<param name="random">1</param>
<param name="restart-after-reread">0</param>
<param name="once">0</param>
</input>
...



Теперь ices2 будет отдавать на сервер iceсast2 файлы которые перечислены в текстовом файле /var/music/playlist.txt. Теперь возникает вопрос: а кто же будет заполнять это файл ? Я решил что будет папка в которой я буду выкладывать аудио файлы, /var/music. Теперь надо написать скрипт который генерит плейлист из содержимого папки /var/music:


/usr/local/bin/update-playlist.sh
#!/bin/bash
find /var/music -name '*ogg' > /var/music/playlist.txt
chmod g+r -R /var/music



Дальше нужно сделать чтобы ices2 стартовал как сервис Unix. Пишем скрипт


/etc/init.d/ices
#!/bin/bash

PIDFILE=/var/run/ices/ices.pid

case "$1" in
start)
echo "Starting ices"
start-stop-daemon -b -c icecast2 -m -p $PIDFILE --exec /usr/bin/ices2 -S /etc/ices.xml
;;
stop)
echo "Stopping ices"
start-stop-daemon -p $PIDFILE -K
;;
*)
echo "Usage: /etc/init.d/ices {start|stop}"
exit 1
;;
esac

exit 0


Генерим плейлист:

generate-playlist.sh



Теперь включаем сервис ices2:


sudo update-rc.d ices defaults
sudo service ices start



Все, можно слушать радио.

Пока я возился с радио, сделал удивительное открытие: оказалось что формат MP3 не лучший выбор для хранения музыки, формат OGG намного лучше передает звук, особенно на высоких частотах. Ices2 не поддерживает MP3, зато поддерживает OGG, и слава богу. Я сравнил как звучит MP3 и OGG на одинаковом битрейте 192 Кb/s, оказалось что OGG намного ближе к оригиналу.
Есть плейер который умеет играть OGG стрим, называется ffmp3, его можно легко встроить в блог.

В заключение публикую редкое видео - как работает радио шансон, взгляд изнутри :)

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