- PVSM.RU - https://www.pvsm.ru -
Прежде всего, хочу сказать, что я читал на хабре много топиков о развертывании радио, но ни один не дал мне исчерпывающей информации.
Я решил все сделать сам. Это не какой-то проект или стартап, а просто just4fun. Возможно, это покажется полезным для вас.
Итак, я использовал только свободное ПО в развертывании радио-стрима, так что пользователи window$ и ma o$ могут дальше не читать ;). Хотя нет, все же прочитайте, возможно это откроет вам GNU/Linux с новой стороны.
Что мне нужно от потока вещания:
Стартовые позиции
Микрофон студийный, 1 шт
Накопитель USB 64 Мб
Первым делом была снесена стоковая прошивка роутера, и на ее место встал OpenWRT из транка. Я не буду рассказывать о том, как накатить OpenWRT, это можно прочесть, например, здесь [1].
Скажу лишь, что необходимо перенести корень ФС роутера на внешнюю флешку с помощью block-extroot, ведь встроенной памяти всего 4 мегабайта, а так же включить в параметрах сборки busybox программу useradd.
Итак, прошивка установлена, интернет работает, SSH тоже, заходим по SSH на наш роутер и начинаем разбираться.
I. Icecast
Вопроса, 'а что же использовать в качестве стрим-сервера?' у меня не возникало. К тому же, он достаточно стабилен и легковесен.
Устанавливаем icecast на роутер:
opkg update
opkg install icecast
Почему на роутер? Конечно, компьютер ночью выключен, а планируется 24/7 режим.
Я буду использовать Icecast в песочнице, поэтому создам пользователя icecast.
Конфигурационный файл icecast имеет формат XML
#я забыл включить useradd в конфигурацию busybox, использую внешнюю:
opkg install shadow-useradd
useradd icecast -g nogroup
cp /etc/icecast.xml /usr/share/icecast #песочница
vi /usr/share/icecast/icecast.xml #можно установить nano
По правде говоря, я вообще использовал kate (kio-sftp) для редактирования этого конфига, впрочем, это значения не имеет.
Конфиг хорошо отдокументирован. Для безопасности нам нужно установить chroot в единицу, а и changeowner в нашего пользователя. Так же обратите внимание, что paths (пути) в таком случае должны быть относительными от basedir, но со слешем в начале. А еще icecast очень не любит создавать пути сам.
В качестве примера, вот мой конфиг. [2]
В моем случае нужно создать лог-файлы для пользователя icecast:
cd /usr/share/icecast
mkdir log
cd log
touch {error,access}.log
cd -
chown -R icecast log
#запускаем сервер
icecast -b -c icecast.xml
Веб-интерфейс доступен на 192.168.1.1 [3]:8000
Кстати, добавьте строку
icecast -b -c /usr/share/icecast/icecast.xml
в /etc/rc.local, дабы запускать icecast при загрузке роутера.
II: Fallback-поток
Я не смогу работать 24 часа в сутки, поэтому мне нужен fallback-поток, который будет замещать основной на том же URL, в случае оффлайна первого.
Окончательный вариант настройки fallback-потока вы найдете во второй части, а пока я буду использовать для этого MPD.
В настройке MPD для icecast нет ничего сложного, сейчас он у меня транслирует параллельно в ALSA и IceCast. Просто установите mpd и откройте ~/.mpdconf, там уже будут настроены и ALSA, и Icecast, нужно только раскомментировать и подправить параметры под себя.
Допустим, наш основной поток называется /live, а fallback — /mpd.ogg
Тогда в icecast.xml следует добавить:
<mount>
<mount-name>/live</mount-name>
<fallback-mount>/mpd.ogg</fallback-mount>
<fallback-override>1</fallback-override>
<fallback-when-full>1</fallback-when-full>
</mount>
Перезапустите icecast (killall наше все), и попробуйте открыть адрес
192.168.1.1 [3]:8000/live в плеере. Работает? Поехали дальше.
III: Лезем в интернет
Пора настроить firewall для принятия соединений извне. Если у вас нет «белого» IP, воспользуйтесь dyndns.org и обратитесь к документации по openwrt.
В /etc/config/firewall внесите следующие строки:
#ICECAST
config rule
option src wan
option dest_port 8000
option target ACCEPT
option proto tcp
и перезапустите файервол:
/etc/init.d/firewall restart
Кстати, по мне, лучший способ проверки — не isup.me, а мобильник :). В общем, поехали дальше
IV: Настройка клиента
Клиентская машина, т.е. десктоп — тоже линукс, как я сказал в начале поста.
Для управления радио будем использовать бесплатную открытую, и что главное, непортабельную (Linux only ☻) программу idjc [4]. Позволю себе процитировать отзыв с SourceForge:
In the past, I have streamed on Windows XP with both SAM and ShoutCast. After trying Internet DJ Console on Ubuntu Studio, I must say that it was the best streaming experience in my life. Over six hours connected to my server, and it preformed flawlessly. Kudos to those who put this together.
В портежах Gentoo ее оказалось, а, например, в Ubuntu она есть [4]. Я собрал программу из исходников. Также мне понадобилось добавить USE-флаг «jack» в /etc/make.conf для установки оного и интеграции с alsa.
Для работы программа требует звуковой сервер JACK (когда меня спрашивают, что из выдающихся программ есть в Linux, но нет в m$, я отвечаю: Rosegarden, Cinelerra, JACK, Ardour, MythTV! Ну и idjc).
Другие зависимости: GTK+, pygtk и наличие звуковой карточки с наушниками и микрофоном.
IV.1 Настройка Jack
JACK работает в realtime-режиме, так что ему нужно дать где развенуться.
Добавьте себя в группу audio, затем в /etc/security.conf добавьте:
@audio - rtprio 99
@audio - memlock unlimited
@audio - nice -10
и перелогиньтесь.
Также необходимо создать конфигурационный файл, например:
echo "/usr/bin/jackd -d <backend> -r 44100 -p 256" > ~/.jackdrc
После этого запустите сервер JACK, используя в качестве back-end'а вашу звуковую систему (подо что вы конфиг создавали):
jackd -d <backend>
т.е. alsa или pulse
IV.2 Настройка и использование idjc
idjc поддерживает множество профилей, мне хватило и одного. Главное окно выглядит так(все кликабельно):
[5]
Поддерживаются 2 параллельных плейлиста музыки, плавное переключение между ними (длинный ползунок внизу), внезапное появление ведущего в эфире (правая кнопка снизу), звонки в студию, (телефончики), а также:
Кнопка настроек внизу слева. Preferences и Jingles я рассмотрю во второй части, а сейчас перейдем к Output:
Настройки не умещаются у меня на экране, внизу запись на диск, там ничего интересного.
Вверху можно отметить нужные стримы и подключиться к ним, или изменить шаблон вывода метаданных.
Ниже нажатая кнопка означает, что стрим идет на вкладке Format можно задать формат и битрейт и т.д, т.е. все настолько тривиально, что не вижу смысла выкладывать отдельные скриншоты.
Отмечу, что также можно транслировать названия песен в IRC.
V. Настройка Skype
Сначала установите skype ☻ и alsa-plugins. В Gentoo:
emerge alsa-plugins #с USE="jack"
Затем в файл ~/.asoundrc добавьте:
# VoIP plugin for the IDJC default profile.
pcm.idjcvoip {
type plug
slave.pcm {
type jack
playback_ports {
0 idjc-mx_default:voip_in_l
1 idjc-mx_default:voip_in_r
}
capture_ports {
0 idjc-mx_default:voip_out_l
1 idjc-mx_default:voip_out_r
}
}
}
и перелогиньтесь.
Кстати, перед любым запуском idjrc обязательно запустите JACK командой jackd -d alsa (подставив pulse, если нужно). Если вы любите графические интерфейсы, воспользуйтесь программой qjackctl.
В скайпе выберите устройство idjcvoip (это работает вообще для любой программы, можно использовать Ekiga или что угодно):
Спасибо за внимание, продолжение следует.
Автор: pashazz
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/linux/9992
Ссылки в тексте:
[1] здесь: http://foss.org.ua/lib/thread.so.552
[2] вот мой конфиг.: http://paste.kde.org/505358/
[3] 192.168.1.1: http://192.168.1.1
[4] idjc: https://sourceforge.net/projects/idjc/
[5] Image: http://www.habrastorage.com/images/idjcmain.png
[6] Image: http://www.habrastorage.com/images/idjcoutput.png
[7] Image: http://www.habrastorage.com/images/skype.png
Нажмите здесь для печати.