€
$
₴
₽
EN
RU
Vmeste.EU
Лента
Каталог
Файлы
Форумы
Услуги
Основное
Radiotalk
Пользовательское
Общие вопросы по интернет радио вещанию
6 •
Посмотреть все темы
icecast2 + icegenerator на FreeBSD
1
2
9
irr
@irr
23.06.2009
Решил я попробовать сделать радио на VDS. Лишний трафик есть, место есть - думаю почему бы не залить туда музыку и пусть бы себе играла. Прочитал про связку icecast2 + ices, начал разбираться, и в общем ices мне не понравился. Какие сразу минусы бросились в глаза:
1) Когда радио никто не слушает, ices не вещает. Т.е. если в данный момент всего один слушатель, ему не понравилась песня и он выключил радио на 5 минут а потом опять включил - играть будет с того же места. То что на сайте при отсутствии слушателей будет показываться что якобы все время играет одна и та же песня - тоже не дело.
2) Для воспроизведения mp3 и ogg нужно ставить совершенно разные пакеты - ices0 и ices2 соответственно, причем с разными конфигами. Кроме того, ices2 (в отличие от ices0) постоянно кушает процессор. На моей домашней машине он потреблял стабильно 3% от Q9300... сколько это будет на VDS с процессором 300 Mhz я не проверял, но сам факт меня насторожил).
Забегая вперед, сразу скажу что у icegenerator нет этих двух проблем. Кроме того, из плюсов стоит отметить:
1) Для icegenerator не нужно составлять плейлист, достаточно указать папку с музыкой.
2) Удобный лог-файл, в который пишется дата, время, и какая песня начала играть. Т.е. не нужно мутить какие-то скрипты для парсинга icecast, здесь все намного проще:
# tail -n 30 icegenerator.log
- и получаем список последних 30 песен игравших на радио.
3) Минимальное потребление процессора и памяти.
Итак, если заинтересовало - читаем дальше ).
Установка icecast2 на FreeBSD с автоматической сборкой из исходников:
# cd /usr/ports/audio/icecast2/ && make install clean
либо установка готового пакета:
# pkg_add -r icecast2
Расписывать подробно про конфиг icecast не буду - это уже делалось и до меня, привожу простой рабочий пример. То что вписано русскими буквами - меняйте на свое.
---------------- начало файла ----------------
<icecast>
<limits>
<clients>100</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>ваш_пароль</source-password>
<relay-password>ваш_пароль</relay-password>
<admin-user>admin</admin-user>
<admin-password>ваш_пароль</admin-password>
</authentication>
<shoutcast-mount>/radio.ogg</shoutcast-mount>
<hostname>имя_вашего_сайта</hostname>
<listen-socket>
<port>8000</port>
<bind-address>айпи_вашего_сервера</bind-address>
</listen-socket>
<fileserve>1</fileserve>
<paths>
<basedir>/usr/local/share/icecast</basedir>
<logdir>/var/log/icecast</logdir>
<webroot>/usr/local/share/icecast/web</webroot>
<adminroot>/usr/local/share/icecast/admin</adminroot>
<alias source="/" dest="/status.xsl"/>
</paths>
<logging>
<accesslog>access.log</accesslog>
<errorlog>error.log</errorlog>
<loglevel>2</loglevel>
<logsize>1000</logsize>
<logarchive>1</logarchive>
</logging>
<security>
<chroot>0</chroot>
<changeowner>
<user>nobody</user>
<group>nogroup</group>
</changeowner>
</security>
</icecast>
---------------- конец файла ----------------
Сохраняем его в файл /usr/local/etc/icecast.xml. Далее, создаем папку /var/log/icecast, разрешаем туда писать пользователю nobody, затем дописываем в /etc/rc.conf строчки:
icecast_enable="YES"
icecast_flags="-b -c /usr/local/etc/icecast.xml"
и запускаем icecast:
# /usr/local/etc/rc.d/icecast2 start
проверяем что он запустился:
# ps aux | grep icecast2
и если не видим такого процесса - смотрим лог-файл /var/log/icecast/error.log. Если и там пусто - значит не дали права на запись в этот файл ;).
Итак, с icecast-ом мы покончили. Теперь займемся icegenerator. Установка со сборкой из исходников:
# cd /usr/ports/audio/icegenerator/ && make install clean
либо установка готового пакета:
# pkg_add -r icegenerator
Конфиг icegenerator с комментариями:
---------------- начало файла ----------------
# - это комментарий
# Айпи
IP=айпи_вашего_сервера
# Порт
PORT=8000
# Версия сервера icecast
# 1 - Icecast 1.3.21 or Shoutcast (ICY protocol compatible)
# 2 - Icecast 2.0 (HTTP protocol compatible)
# Мы устанавливали icecast2, поэтому:
SERVER=2
# Точка монтирования
# Должна соответствовать тому что указано в конфиге icecast
# (у нас там указано /radio.ogg)
# Некоторые плееры не умеют автоматически определять формат потока,
# поэтому точка монтирования желательно должна заканчиваться
# на .mp3 или .ogg, в зависимости от того что вещаем.
MOUNT=/radio.ogg
# Данные для подключения к icecast
# Имя источника
# обычно source, у нас так же:
SOURCE=source
# Пароль
# должен соответствовать тому что в конфиге icecast
PASSWORD=ваш_пароль
# Файлы и плейлист
# Формат потока
# 0 - Ogg Vorbis
# 1 - MP3
# в нашем примере - ogg
FORMAT=0
# Месторасположение файлов
# icegenerator поддерживает массу различных способов указания
# местоположения файлов - можно и плелист от винампа дать, можно
# настроить подключение к MySQL или Postgres и брать данные
# оттуда - более подробно описано в оригинальном конфиге
# но по-моему проще всего указать папку где лежат файлы:
MP3PATH=pth:/home/имя_пользователя/music
# Просматривать ли директории рекурсивно - да
RECURSIVE=1
# Файл для записи радио на сервер - мне не нужно
DUMPFILE=
# Запустить ли заново после того как кончится плейлист - да
LOOP=1
# Перемешивать ли плейлист перед запуском - да
SHUFFLE=1
# Информация про радио
# Название радиостанции
NAME=моя_радиостанция
# Жанр музыки
GENRE=жанр
# Описание радиостанции
DESCRIPTION=описание_моей_радиостанции
# URL радиостанции
URL=url_радиостанции
# Битрейт потока
# не оказывает никакого влияния на реальный битрейт
BITRATE=64000
# Добавить ли радио в публичный список
PUBLIC=0
# Периодичность обновления метаданных
# тут либо косяк в программе, либо я чего-то не понимаю
# комментарии по этому поводу - в конце статьи
# для ogg обязательно ставьте 0
METAUPDATE=0
# Местоположение глобального файла метаданных
# комментарии также смотрите в конце статьи
#MDFPATH=/home/имя_пользователя/music/global.mdf
# Логирование и отладка
# Куда писать лог
# 0 - никуда
# 1 - в системный лог
# 2 - в отдельный файл
# удобнее конечно последний вариант
LOG=2
# Путь к логфайлу
# можно в ту же папку где логи icecast, а можно допустим в
# домашнюю директорию своего сайта, чтобы парсить его там же
# не отходя от кассы :). особенно если не хотите ПО веб-сервера
# давать доступ в /var/log/icecast/
LOGPATH=/var/log/icecast/icegenerator.log
# Управление icegenerator через telnet
# icegenerator-ом можно управлять через telnet, но команд очень
# мало и они на мой взгляд бесполезны (получить название трека,
# перемешать плейлист и т.д.). рекомендую ничего тут не указывать
DATAPORT=
---------------- конец файла ----------------
Сохраняем этот конфиг в /usr/local/etc/icegenerator.conf
Теперь, одна неприятная неожиданность, но у icegenerator нет скрипта запуска, поэтому пишем его самостоятельно:
---------------- начало файла ----------------
#!/bin/sh
#
# $FreeBSD: ports/audio/icegenerator/files/icegenerator.sh.in,v 1.2 2006/07/10 18:32:31 dougb Exp $
#
# PROVIDE: icegenerator
# REQUIRE: DAEMON
# BEFORE: login
# KEYWORD: shutdown
# Add the following line to /etc/rc.conf to enable `icegenerator':
#
#icegenerator_enable="YES"
#icegenerator_flags=""
#
. "/etc/rc.subr"
name="icegenerator"
rcvar=`set_rcvar`
command="/usr/local/bin/$name"
command_args="1>/dev/null 2>&1"
required_files="/usr/local/etc/icegenerator.conf"
sig_stop=KILL
# read configuration and set defaults
load_rc_config "$name"
: ${icegenerator_enable="NO"}
: ${icegenerator_flags=""}
run_rc_command "$1"
---------------- конец файла ----------------
сохраняем в /usr/local/etc/rc.d/icegenerator и даем права на исполнение.
И еще один момент, который следует учесть: icegenerator должен запускаться после icecast, иначе он не заработает. Поэтому внесем небольшое изменение в скрипт запуска icecast-а /usr/local/etc/rc.d/icecast2:
строчку
# BEFORE: login
необходимо изменить на
# BEFORE: icegenerator
Таким образом в случае перезагрузки сервера сначала будет стартовать icecast, потом icegenerator.
Теперь снова открываем файл /etc/rc.conf, добавляем
icegenerator_enable="YES"
после чего даем команду:
# /usr/local/etc/rc.d/icegenerator start
и проверяем что он запустился:
# ps aux | grep icegenerator
и если не видим такого процесса - смотрим лог-файл /var/log/icecast/icegenerator.log. Если и там пусто - значит не дали права на запись в этот файл ;).
Если все нормально, то добавляем url
**********
в медиаплеер и наслаждаемся своими любимыми песнями.
Теперь некоторые мои наблюдения.
1) По умолчанию, в конфиге параметр METAUPDATE=5. Для MP3 можно так и оставить. Для OGG - измените на 0, иначе вместо единого потока будут идти кусочки по 5 секунд, а также в лог icecast-а каждые 5 секунд будет сообщаться что к нему подключился icegenerator. Не все плееры такое нормально играют, а лог-файл довольно быстро разрастается.
Почему так - не знаю. То ли ошибка в icegenerator, то ли я чего-то недопонял. В исходниках программы есть файл README.IceMetaL, в котором описывается про создание отдельных файлов с метаданными. Возможно надо копать в эту сторону.
А можно поставить METAUPDATE=0. Единственное что я заметил - это то что в этом случае если в ogg-файле нету тегов, то имя файла вместо тега не передается. Так что заполняем теги ;).
2) Теги у ogg-файлов можно редактировать удаленно прямо на сервере, поставив пакет vorbis-tools. И еще, в случае с ogg если заполнены теги TITLE и ARTIST, то WinAMP показывает только TITLE, а ARTIST надо смотреть в свойствах файла. Чтобы не создавать такие неудобства для слушателей, пишем и исполнителя и название песни в тег "TITLE".
# vorbiscomment -w -t "TITLE=Исполнитель - Песня" "имя_файла.ogg"
Теги у mp3 конечно тоже можно править удаленно. Но пакет для этого не искал, т.к. целенаправленно решил транслировать ogg.
3) icegenerator стабилен и сам по себе не падает. Но видимо все же есть некоторые исключения. Например если в конце трека есть пауза более 10 секунд, то он таки отваливается.
Чтобы обезопасить себя от подобных неприятностей, я написал вот такой небольшой скриптик:
---------------- начало файла ----------------
#!/bin/sh
chkserv=`pgrep icegenerator`
if [ -z ${chkserv} ]; then
/usr/local/etc/rc.d/icegenerator restart
date >> /var/log/icecast/icegenerator-fail.log
fi
---------------- конец файла ----------------
Скрипт проверяет запущен ли icegenerator, в случае чего поднимает и записывает дату падения в icegenerator-fail.log.
Потом по времени падения можно свериться с icegenerator.log какая песня в этот момент играла, открыть соответствующий файл в каком-нибудь звуковом редакторе (например Audacity) и посмотреть что с ней не так.
4) Желательно чтобы все ogg-файлы были предварительно закодированы с одними и теми же параметрами. Например только так:
# oggenc -q0 "имя_файла.wav"
или так:
# oggenc -m64 -M64 "имя_файла.wav"
или как-то иначе. Солянку лучше не делать. Из-за этого наблюдал проблемы например в плеере Amarok.
Вот собственно и все.
Удачного радиовещания!
Выражаю благодарность авторам этих статей:
**********
**********
Надеюсь, и моя статья кому-нибудь поможет создать свое радио.
1400
Pheoru
@Pheoru
25.06.2009
1) Когда радио никто не слушает, ices не вещает. Т.е. если в данный момент всего один слушатель, ему не понравилась песня и он выключил радио на 5 минут а потом опять включил - играть будет с того же места. То что на сайте при отсутствии слушателей будет показываться что якобы все время играет одна и та же песня - тоже не дело.
Это бред.
2) Удобный лог-файл, в который пишется дата, время, и какая песня начала играть. Т.е. не нужно мутить какие-то скрипты для парсинга icecast, здесь все намного проще:
# tail -n 30 icegenerator.log
- и получаем список последних 30 песен игравших на радио.
У айсеса есть офигительный лог-файл, все настраивается в конфиге.
Вы, по-видимому, вообще не разобрались в возможностях ices, и сразу кинулись на другой стример.
Мануал, думаю, пригодится.
9
irr
@irr
25.06.2009
спасибо за замечания.
бред наверное лучше убрать. только не вижу тут кнопки для редактирования сообщения.
9
irr
@irr
07.07.2009
вчера переносил радио на другой VDS - там CentOS на технологии виртуализации OpenVZ. так вот собрав icegenerator, обнаружилось что он запрашивает себе 32 mb памяти (при реальном потреблении всего 1 mb). для OpenVZ, который как раз подсчитывает запрашиваемую память, на небольших тарифах это конечно многовато. решил для альтернативы собрать ices2 - он сожрал 16 mb :). тоже немало, но все-таки в 2 раза меньше.
пришлось осваивать ices :)
в общем, повторю свой вопрос к админам - как бы мне отредактировать мой мануал? если нет такой возможности, то может тему грохните, а я заново запощу с исправлениями?
1400
Pheoru
@Pheoru
08.07.2009
Вы запостите прямо здесь, а мы потом откорректируем первое сообщение.
2
zloiia
@zloiia
11.07.2009
очень полезная статья... только одно НО есть... создал скрипт запуска icegenerator. Засунул его в /usr/local/ect/rc.d/ . В /etc/rc.conf прописал, что
icegenerator_enable="YES"
.
Однако при попытке запустить оный выдается такая ошибка
%/usr/local/etc/rc.d/icegenerator start
/usr/local/etc/rc.d/icegenerator: Command not found.
чем лечить?
1400
Pheoru
@Pheoru
23.07.2009
Вы уверены, что у него есть загрузочный скрипт?
Попробуйте создать ярлык на /usr/local/bin/icegenerator (или где он там лежит) в /usr/local/etc/rc.d
2
zloiia
@zloiia
28.07.2009
проблема решилась тривиальнее... просто вводом команды
icegenerator
44
alpha_Qu4z4r
@alpha_Qu4z4r
15.01.2010
На самом деле проблема скорее всего была в отсутствии прав на запуск стратового скрипта =)
Спс за статью, хотя мне понадобился лишь чекер запущенности генератора.
В статье, кстати есть ещё ошибка про BEFORE, там нужно писать айскаст, а не айсгенератор, но это скорее всего просто от невнимательности.
В свою очеред мне бы хотелось узнать у никсойдов, каким образом вы управляете ротацией, джинглами и всем таким без помощи виндузятных мега-прог типа Сэма. А то тот же айсгенератор я пускаю по крону с разными конфигами, в которых укзаны каталоги с разбивкой треков по стилям, в результате имеем подобие тематических передач с разными стилями в разное время, но есть и куча минусов касаемо ротации и джинглов:
1 трек тупо обрывается в 00 минут и начинает играть другой плэйлист, при этом нет никакой отбивки или джингла, хотя теоретически можно было бы что-то замутить на минуту и по крону в 01 минуту запускать уже плэйлист, но это тоже не шик.
2 Хотелось бы трэки играть определённым образом, типа в начале часа хит, через три трека хит на 4-ку ну и тд, примерно как это делается на крутых ФМ станциях, где трэки, конечно, выбираются рэндомно, но на основе рэйтингов. Но в icegenerator нет и намёка на такие вещи.
3 Так же если хотябы тупо вручную втыкать джинглы, хочется играть их поверх трека и всё такое, ну или хотябы после трека, а если ставить их на тот же крон, то опять текущий трек будет тупо обрываться, в общем нет никакой возможности отследить конец трека и только тогда принимать какие-то действия.
Кто как решал эти проблемы?
Отредактировано alpha_Qu4z4r -
15.01.2010
6245
Тарас
@tarasian666
15.01.2010
с помощью sc_trans 2 и cron
в определенное время cron подкидует нужный плейлист, а транскодер после завершения песни играет подкинутый плейлист
44
alpha_Qu4z4r
@alpha_Qu4z4r
15.01.2010
хмм, а с айскастом оно работает?
6245
Тарас
@tarasian666
15.01.2010
работает но почему то глюк с тегами, не отображаются
1
Denjan
@Denjan
17.10.2011
Показать текст
---------------- начало файла ----------------
#!/bin/sh
chkserv=`pgrep icegenerator`
if [ -z ${chkserv} ]; then
/usr/local/etc/rc.d/icegenerator restart
date >> /var/log/icecast/icegenerator-fail.log
fi
---------------- конец файла ----------------
А куда этот скриптег запихивать?
6245
Тарас
@tarasian666
17.10.2011
куда нибуть, а запускать я полагаю надо кроном через каждые 10 сек
4
Disabled
@Disabled
16.01.2012
Доброго времени суток. Установил всё по мануалу.
icecast2 запускается нормально. 78.108.87.78:8001 - web
А вот с icegeneranor непонятно.
После установки и настройки по мануалу , запускаю его
# /usr/local/etc/rc.d/icegenerator start
но ничего не происходит (см. скриншот)
Скажите куда копать.
Спасибо, с ув. Александр
Отредактировано Disabled -
16.01.2012
6245
Тарас
@tarasian666
16.01.2012
смотрим сюда /var/log/icecast/icegenerator.log
4
Disabled
@Disabled
16.01.2012
tarasian666
пишет:
смотрим сюда /var/log/icecast/icegenerator.log
К сожалению логи пустые.
6245
Тарас
@tarasian666
16.01.2012
Если и там пусто - значит не дали права на запись в этот файл .
4
Disabled
@Disabled
16.01.2012
tarasian666
пишет:
Если и там пусто - значит не дали права на запись в этот файл .
Права абсолютно такие же как и на icecast2 .
6245
Тарас
@tarasian666
16.01.2012
а запускаються от разных пользователей
поменяйте права с 644 на 666