Showing posts with label icecast. Show all posts
Showing posts with label icecast. Show all posts

October 14, 2011

Reload Icecast configuration without disconnecting listeners and losing source

In order to make Icecast2 re-read config without restarting, i.e. losing source and disconnecting listeners, you'll have to send it the HUP signal. The icecast2 process will reload the configuration file icecast.xml and changes will take effect.

To send the HUP signal to a process you'll have to know it's PID. Basically, it looks like the following:
kill -HUP %PID%

So how do you know Icecast's PID? You'll have to either check the ps aux command output (i recommend you filter the output with | grep icecast): finding icecast pid with ps aux output
... or use the Icecast's .pid-file. Open up the icecast.xml file to edit Icecast configuration and under the <paths> section alter the <pidfile> setting. For example, the FreeBSD path would be:
<pidfile>/usr/local/share/icecast/icecast.pid</pidfile>

Restart Icecast. Now the .pid-file should be generated and available by the path specified. So no it's time to say Icecast SUP HUP:
kill -HUP `cat /usr/local/share/icecast/icecast.pid`

June 20, 2011

Установка Icecast2 под CentOS

Уже писал об установке Icecast2 под FreeBSD, но вот недавно потребовалось установить его на CentOS.

Я не нашел толкового руководства в интернете, действовал "вслепую". В итоге решил что ничего не получилось, и успокоился, поставив Icecast просто на другой сервер. Однако выяснилось, что он тогда всё-таки установился... Я разрыл .bash_history и привожу его часть где видны мои отчаянные попытки таки поставить Icecast. Знаю, возможно, это самое дерьмовое руководство, которое я публиковал :)

Внимание: не вбивайте в консоль все команды подряд (как перечислено ниже).

uname -a
all
lsb_release -a
yum -y install icecast
yum -y install icecast2
yum search icecast
yum search icecast2
yum search icecast-server
uname -a
yum update
cd /etc/yum.repos.d
ls ./
yum info icecast
yum info icecast
yum update
yum search icecast2
yum search icecast-server
rpm -Uhv http://apt.sw.be/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
rpm -Uhv http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
cd ~
wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.i386.rpm
rpm -Uhv rpmforge-release-0.5.2-2.el5.rf.i386.rpm
rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt
rpm -K rpmforge-release-0.5.2-2.el5.rf.*.rpm
rpm -i rpmforge-release-0.5.2-2.el5.rf.*.rpm
yum info htop
yum info htop
yum info icecast
yum info icecast2
yum info icecast-server
yum install curl-devel libtheora-devel libvorbis-devel libxslt-devel speex-devel
rpm -ivh http://downloads.xiph.org/releases/icecast/icecast-2.3.1-0.src.rpm
rpm -ivh http://downloads.xiph.org/releases/icecast/icecast-2.3.1-0.src.rpm
rpmbuild -bb /usr/src/redhat/SPECS/icecast.spec
yum install rpm-build
rpmbuild -bb /usr/src/redhat/SPECS/icecast.spec
rpm -ivh http://downloads.xiph.org/releases/icecast/icecast-2.3.1-0.src.rpm
rpmbuild -bb /usr/src/redhat/SPECS/icecast.spec
rpm -ivh /usr/src/redhat/RPMS/i386/icecast-2.3.1-0.i386.rpm
service icecast start
exit
cd /home
wget http://downloads.xiph.org/releases/icecast/icecast-2.3.1-0.src.rpm
rpmbuild --rebuild icecast-2.3.1-0.src.rpm
exit
mc
jobs
exit


:)))

Так или иначе, на этом этапе, предполагается, что Icecast в системе установлен.

Теперь создадим ему пользователя (как описано здесь):
groupadd icecast && useradd icecast2 -g icecast


Создадим папки и файлы:
mkdir /var/log/icecast && touch /var/log/icecast/access.log && touch /var/log/icecast/error.log && touch /var/log/icecast/playlist.log && chown -R icecast2 /var/log/icecast/* && chgrp -R icecast /var/log/icecast/* && chmod 644 /var/log/icecast/*


Открываем конфиг (у меня это /etc/icecast.xml) и прописываем:
1. Запуск от имени пользователя icecast2 (иначе будет вылетать ERROR: You should not run icecast2 as root Use the changeowner directive in the config file):
<security>

<chroot>0</chroot>

<changeowner>

<user>icecast2</user>

<group>icecast</group>

</changeowner>

</security>


2. Пути к логам:
<logdir>/var/log/icecast</logdir>


Запускаеи Icecast2:
icecast -b -c /etc/icecast.xml

Можно также использовать полный путь к программе, в моём случае /usr/bin/icecast:
/usr/bin/icecast -b -c /etc/icecast.xml


Чтобы Icecast стартовал при запуске системы нужен соответствующий скрипт /etc/rc.d/init.d/icecast2. В моей системе его не оказалось, поэтому был найден следующий вариант:
#!/bin/sh
#
# icecast This shell script takes care of starting and stopping
# the icecast multimedia streaming systen.
#
# chkconfig: - 85 15
# description: icecast is a multimedia streaming daemon. It is used to \
# relay and offer multimedia streaming content.
# processname: icecast
# pidfile: /var/run/icecast/icecast.pid
# config: /etc/icecast.xml

# Source function library.
. /etc/rc.d/init.d/functions

[ -x /usr/bin/icecast ] || exit 0

# See how we were called.
case "$1" in
start)
# Start daemon.
echo -n $"Starting icecast streaming daemon: "
daemon "/usr/bin/icecast -b -c /etc/icecast.xml > /dev/null"
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/icecast
;;
stop)
# Stop daemon.
echo -n $"Shutting down icecast streaming daemon: "
killproc icecast
RETVAL=$?
echo
[ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/icecast
;;
status)
status icecast
RETVAL=$?
;;
restart)
$0 stop
$0 start
;;
reload)
echo -n $"Reloading icecast: "
killproc icecast -HUP
RETVAL=$?
echo
;;
condrestart)
[ -f /var/lock/subsys/icecast ] && restart || :
;;
*)
echo $"Usage: $0 {start|stop|status|restart|reload}"
RETVAL=1
;;
esac

exit $RETVAL


Работает.

P.S. под конец все-таки нашел какое-то руководство, но уже не стал проверять. http://www.linuxhelp.net/forums/index.php?showtopic=8226&pid=27924&st=0&#entry27924

September 2, 2010

Icecast: ретрансляция (relay)

<relay>
<server>127.0.0.1</server>
<port>8000</port>
<mount>/TheirMountPoint</mount>
<local-mount>/SomeLocalMountPoint</local-mount>
<on-demand>0</on-demand>
<relay-shoutcast-metadata>0</relay-shoutcast-metadata>
</relay>

January 8, 2010

Конфигурация Icecast: секция mount

Секция <mount> (mount point) определяет статическую постоянную точку монтирования на сервере Icecast. Динамическая точка — та, которая не задана в конфигурационном файле icecast.xml и создаётся автоматически при подключении источника с заданным им же (источником) именем.

Маунтов на одном сервере может быть несколько. Как правило, это разные радиостанции, разные по качеству/формату каналы, или все вместе.

Вот сожержимое секции <mount>, предложенное в официальной документации по конфигурационному файлу icecast.xml:
<mount>
    <mount-name>/example-complex.ogg</mount-name>
    <username>othersource</username>
    <password>hackmemore</password>
    <max-listeners>1</max-listeners>
    <max-listener-duration>3600</max-listener-duration>
    <dump-file>/tmp/dump-example1.ogg</dump-file>
    <intro>/intro.ogg</intro>
    <fallback-mount>/example2.ogg</fallback-mount>
    <fallback-override>1</fallback-override>
    <fallback-when-full>1</fallback-when-full>
    <public>1</public>
    <stream-name>My audio stream</stream-name>
    <stream-description>My audio description</stream-description>
    <stream-url>http://some.place.com</stream-url>
    <genre>classical</genre>
    <bitrate>64</bitrate>
    <type>application/ogg</type>
    <subtype>vorbis</subtype>
    <hidden>1</hidden>
    <burst-size>65536</burst-size>
    <mp3-metadata-interval>4096</mp3-metadata-interval>
    <authentication type="htpasswd">
        <option name="filename" value="myauth"/>
        <option name="allow_duplicate_users" value="0"/>
    </authentication>
    <on-connect>/home/icecast/bin/source-start</on-connect>
    <on-disconnect>/home/icecast/bin/source-end</on-disconnect>
</mount>
А вот что всё это значит:
  • mount-name — название точки монтирования
  • username и password — необязательные значения, задающие с какими логином и паролем должен подключаться источник к этой точке для трансляции. Если не заданы, используются общие настройки для всего сервера — логин и пароль, указанные в начале файла icecast.xml
  • max-listeners — максимальное количество слушателей этой точки
  • max-listener-duration — максимальная продолжительность прослушивания
  • dump-file — файл, в который будет копироваться весь аудиопоток, проходящий через эту точку
  • intro — файл, который будет проигрываться при каждом подключении слушателя к точке, скажем, вступление
  • fallback-mount — точка монтирования в таком же формате, на которую будет перенаправлен слушатель если в данный момент времени эта точка не работает. Подробнее в статье Icecast Mountpoint Fallback или как настроить автопереключение каналов или в официальной документации
  • fallback-override — определяет возвращать ли слушателей назад если источник вновь подключится и точка монтирования заработает
  • fallback-when-full — переключать ли слушателей на fallback-mount если этот канал переполнен
  • public — показывать ли в каталоге YP
  • stream-name — название потока (не путать с mount-name), отображается в плеере у слушателя в качестве заголовка (также используется для YP)
  • stream-description — описание потока (также используется для YP)
  • stream-url — адрес потока (также используется для YP)
  • genre — жанр трансляции (также используется для YP)
  • bitrate — битрейт трансляции (по умолчанию определяется автоматически, также используется для YP)
  • type — тип аудиопотока (например, vorbis; также используется для YP)
  • subtype — mime-тип аудиопотока, определяющий конкретно его формат (например, vorbis/theora; также используется для YP)
  • hidden — скрывать точку ли на страницах статуса сервера (как например страница status.xsl)
  • burst-size — перезаписывает общую настройку объёма отправляемых в буффер плеера данных
  • mp3-metadata-interval — частота обновления метаданных
  • authentication — настройки аутентификации для прослушивания, подробнее в официальной документации
  • on-connect — адрес (путь) программы, которая будет выполняться при каждом подключении слушателя к точке
  • on-disconnect — адрес (путь) программы, которая будет выполняться при каждом отключении слушателя от точки

Icecast Mountpoint Fallback или как настроить автопереключение каналов

Бывает что необходимо настроить Icecast на работу с двумя источниками на одной точке монтирования (т.н. mountpoint), например когда у Вас есть круглосуточно транслирующий музыку компьютер (источник №2), и Вы хотите время от времени включаться в эфир со своего компьютера (основной источник №1), вести этот эфир, но так, чтобы в процессе этих переключений слушателей не отсоединяло, а они оставались подключенными к трансляции, чтобы их перебрасывало автоматически. Ниже я опишу один из возможных вариантов реализации такой схемы.

Допустим, у нас есть канал /radio_128, работающий в формате MP3 и качестве 128 килобит в секунду. Это — основной канал, и к нему будет подключаться основной источник (в нашей ситуации — домашний компьютер). Для резервного источника №2 мы создадим вторую точку монтирования — /radio_128_fallback, и настроим вещание со второго источника именно на неё. Важно: сигнал на второй точке монтирования должен иметь такие же битрейт, частоту и формат, иначе айскаст не сможет, переключившись, воспроизвести сигнал.

Теперь настроим связь между этими точками. Нам нужно, чтобы вторая точка использовалась в качестве резервной. Для этого пропишите в конфиге icecast.xml (в системе FreeBSD он расположен по /usr/local/etc/icecast.xml) в настройках первой (основной) точки /radio_128 следующее:
<mount>
<mount-name>/radio_128</mount-name>
<fallback-mount>/radio_128_fallback</fallback-mount>
<fallback-override>1</fallback-override>
</mount>
Как видим, добавлены опции fallback-mount и fallback-override:
  • fallback-mount определяет точку монтирования (mountpoint), на которую следует переадресовывать слушателей если этот источник выключен
  • fallback-override определяет возвращать ли слушателей назад если источник вновь подключится и точка монтирования заработает

Внимание! У Вас в icecast.xml, вполне вероятно, может не оказаться секции <mount>* — в таком случае впишите её вручную в соответствии с этим описанием настройки секции <mount>.

* значит icecast автоматически создавал mountpoint на время работы подключившегося источника

August 14, 2009

Установка Icecast2 под FreeBSD

Вот как установить Icecast в системе FreeBSD:

Запускаем установку из портов:
cd /usr/ports/audio/icecast2 && make install clean

(см. ниже все эти команды одной строкой)

Добавляем пользователя и группу для Icecast'а:
pw groupadd icecast && pw useradd icecast -g icecast

Создаём папку для log-файлов:
mkdir /var/log/icecast

Создаём собственно log-файлы:
touch /var/log/icecast/access.log && touch /var/log/icecast/error.log && touch /var/log/icecast/playlist.log

Предоставляем права на эти файлы (а затем и на саму директорию) свежесозданному пользователю Icecast'а:
chown -R icecast /var/log/icecast/* && chgrp -R icecast /var/log/icecast/* && chmod 644 /var/log/icecast/*

Копируем конфиг из образца в рабочий:
cp /usr/local/etc/icecast.xml.sample /usr/local/etc/icecast.xml

Старт сервиса при запуске системы:
echo "icecast_enable=YES">>/etc/rc.conf

Все те же самые команды одной строкой:
pw groupadd icecast && pw useradd icecast -g icecast && mkdir /var/log/icecast && touch /var/log/icecast/access.log && touch /var/log/icecast/error.log && touch /var/log/icecast/playlist.log && chown -R icecast /var/log/icecast/* && chgrp -R icecast /var/log/icecast/* && chmod 644 /var/log/icecast/* && cp /usr/local/etc/icecast.xml.sample /usr/local/etc/icecast.xml && echo "icecast_enable=YES">>/etc/rc.conf

Прописываем в конфиге новые пути к лог-файлам!

Запускаем Icecast:
/usr/local/etc/rc.d/icecast2 start


После установки может ругаться на права root'а:
ERROR: You should not run icecast2 as root
Use the changeowner directive in the config file
Чтобы исправить это, откройте /usr/local/etc/icecast.xml и в секции security (в самом конце файла) выставьте работу от имени специально созданного выше пользователя icecast из одноимённой группы. Для этого найдите секцию <security> и отредактируйте её содержимое как показано в примере:
<security>
<chroot>0</chroot>
<changeowner>
<user>icecast</user>
<group>icecast</group>
</changeowner>
</security>
То есть:
  • Значение chroot выставьте равным 0
  • Значения user и group выставьте равными icecast

Внимание! Если вообще не запускается, не висит в активных процессах, и не подаёт никаких признаков жизни, в конфиге icecast.xml проверьте правильность указания пути к папке с лог файлами (в секции paths). Зачастую, там по умолчанию выставлено /usr/local/var/log/icecast, а мы при установке создали директорию /var/log/icecast. Укажите это в logdir.

Если теперь Вы задаётесь вопросом с чего бы передать сигнал на Icacast чтобы тот раздавал его слушателям, почитайте статью со скриншотами об установке SAM Broadcaster.

July 24, 2009

Установка SAM Broadcaster 4.3.6 и настройка радио транслятора на Icecast 2: мануал в картинках

Добываем установщик Sam Broadcaster, запускаем.
Нас встречают вопросом: «Распакуются необходимые файлы. Продолжить?».
Отвечаем утвердительно.


Затем появляется окно приветствия. Жмём «Далее» («Next»)


Лицензионное соглашение. Принимаем.


Выбираем директорию куда устанавливать.


Затем нам предложат выбрать тип сервера для базы данных Sam Broadcaster. Там будет храниться список песен, запросов, проигрываний и т.д. Один из наиболее распространённых — MySQL, предоставляется даже на дешёвом хостинге за доллар, что уж говорить о VDS и VPS. Также сервер MySQL можно установить и использовать у себя на компьютере.
Внимание! О том, как создать базу данных в ISPmanager или изменить в SAM Broadcaster уже введенные настройки подключения к БД написано здесь.


Настройки подключения к выбранному серверу. На скриншоте это настройки для MySQL. Выбраны опции «Specify custom settings» (это значит что используются не настройки по умолчанию, а вводятся вручную) и «Remote server» (значит что подключение выполняется к удалённому серверу; далее указываются его адрес и порт, логин и пароль, а также имя базы данных)


В случае успешного подключения продолжается установка — извлекаются файлы


Предлагается ввести ключ для Sam Broadcaster.
Если у Вас он не совсем подлинный, задумайтесь над галочкой, стоящей возле «Automatically activate product». Также имеются варианты купить ключ или же попробовать программу в демонстрационном режиме.


Установка завершена. Предлагается запустить Sam Broadcaster, почитать Readme-файл, воспользоваться помощником и купить у Spacial Audio хостинг. Тут уже по желанию.


Мы выбрали «Run SAM program», запускается.


Запустилась. Интерфейс состоит из трёх вкладок: Desktop A, B и C. На каждой из них расположены отдельные окна, сгруппированные по функциональности. Комплектацию можно беспрепятственно менять, сохранять и потом загружать. Здесь изображён мой (изменённый) вариант расположения окон на вкладке Desktop C, но принцип тот же: На Desktop A Вы увидите две деки, справа от них блок Voice FX. Ниже (слева направо) будут плейлист, очередь и история, Sound FX и часы. Это — основной блок воспроизведения по-умолчанию.


На вкладке Desktop B расположены логи, скрипты, настройки ретрансляторов (Encoders), Statistic relays и т.д. Нас в данный момент интересуют ретрансляторы. Роль SAMа заключается в генерации потока, однако он не занимается непосредственно доставкой сигнала к слушателям. Этим занимаются вещательные сервера а-ля Icecast и Shoutcast. Второй очень примитивный, не гибкий, не эффективный, и я его в такой же степени настойчиво не рекомендую, насколько я советую Icecast 2.
Итак, настраиваем ретрансляторы. В окне Encoders жмём чёрный плюс.


Появляется диалоговое окно, в нём нам предложено выбрать формат потока. MP3 распространённее AAC Plus, однако второй круче ибо при равном объёме данных обеспечивает передачу лучшего качества. Но максимальный битрейт у него — 128 kbps, в то время как у MP3 — 320 kbps. Но в этом плане безусловно рулит OGG, который вмещает до 500 kbps. Итак, пока что выбираем MP3.


На первой вкладке последующего окна настраиваем качество сигнала, тип кодирования (с акцентом на качество или на производительность), а справа настраиваем автозапуск создаваемого Encoder'а. Будьте осторожны при выборе битрейта канала. В выпадающем списке сначала идёт mono и лишь потом stereo, поэтому легко недоглядеть, ошибиться и выбрать желаемый формат но в моно-варианте.


Вторая вкладка — настройки сервера. На скриншоте это Icecast2 с настройками, предлагаемыми по-умолчанию. То есть, предполагается что Icecast установлен на этом же компьютере (Server IP -> localhost), работает на порте 8000 (стандартно) с точкой монтирования «/live» и заданным паролем. Если Icecast работает на удалённом сервере, сюда следует ввести его IP адрес, указать порт (если там используется не стандартный 8000 а другой), точку монтирования и пароль к ней.
Пароль задаётся в файле /usr/local/etc/icecast.xml. Вариант №1 — общий на все источники, найдите секцию authentication и отредактируйте в ней source-password на свой. Это — общий пароль на подключение к серверу. Вариант №2 — создайте точку монтирования и задайте пароль конкретно к ней. Как это сделать напишу позже.
Возвращаемся к настройке подключения в SAM Broadcaster: справа — информация о станции, выводимая сервером (название, жанр, описание), а также адрес сайта радиостанции, предложение опубликовать её в каталоге Spacial Audio (опять же акцентирую сюда внимание пользователей особо "лицензионной" версии), и затем настройка трансляции в поток метаданных. Если Вы хотите чтобы слушатели в своих плеерах видели испонителя и заголовок трека (берутся из ID3 тегов), включите эту опцию.


Следующая вкладка — сохранение всего эфира в файл.


Сохраняем, выбираем в списке появившийся ретранслятор, жмём на «Play» (чёрный треугольник, запускает encoder). Если параметры подключения к серверу указаны правильно, то статус будет «Encoding», справа от него будет указываться продолжительность работы и объём переданной информации.