Четверг, 21.11.2024, 17:01
Мой персональный сайт Добрым людям smart & sober

Главная Регистрация Вход
Приветствую Вас, Гость · RSS
Калькулятор


Меню сайта
Календарь
«  Июнь 2012  »
ПнВтСрЧтПтСбВс
    123
45678910
11121314151617
18192021222324
252627282930


Форма входа


Архив записей
Мини-чат


Категории раздела


Наш опрос
В чем заключается ваш смысл жизни
Всего ответов: 154
 
Главная » 2012 » Июнь » 24 » Развертывание радиостанции на GNU/Linux. Часть I
03:00
Развертывание радиостанции на GNU/Linux. Часть I
Прежде всего, хочу сказать, что я читал на хабре много топиков о развертывании радио, но ни один не дал мне исчерпывающей информации.
Я решил все сделать сам. Это не какой-то проект или стартап, а просто just4fun. Возможно, это покажется полезным для вас.
Итак, я использовал только свободное ПО в развертывании радио-стрима, так что пользователи window$ и ma o$ могут дальше не читать ;). Хотя нет, все же прочитайте, возможно это откроет вам GNU/Linux с новой стороны.



Что мне нужно от потока вещания:
  • проигрывание музыки
  • прямой эфир (голос)
  • вышеперечисленное вместе
  • всякие штуки вроде заставок, смеха и пр.
  • замещающий поток, работающий 24/7 (желательно)


Стартовые позиции

  • Роутер Dlink DIR-320 (я нищеброд тот еще эконом)
  • ПК с Gentoo Linux
  • Микрофон обычный за 50 рублей, 1 шт
Микрофон студийный, 1 шт
Накопитель USB 64 Мб


Первым делом была снесена стоковая прошивка роутера, и на ее место встал OpenWRT из транка. Я не буду рассказывать о том, как накатить OpenWRT, это можно прочесть, например, здесь.
Скажу лишь, что необходимо перенести корень ФС роутера на внешнюю флешку с помощью 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 очень не любит создавать пути сам.
В качестве примера, вот мой конфиг.

В моем случае нужно создать лог-файлы для пользователя 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: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: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. Позволю себе процитировать отзыв с 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 она есть. Я собрал программу из исходников. Также мне понадобилось добавить 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 поддерживает множество профилей, мне хватило и одного. Главное окно выглядит так(все кликабельно):
image

Поддерживаются 2 параллельных плейлиста музыки, плавное переключение между ними (длинный ползунок внизу), внезапное появление ведущего в эфире (правая кнопка снизу), звонки в студию, (телефончики), а также:
  • Запись с 4 микрофонов
  • Вывод в 6 потоков Icecast/Shoutcast
  • Вывод в MP3 и OGG (потоки)
  • Запись в FLAC на жесткий диск

Кнопка настроек внизу слева. Preferences и Jingles я рассмотрю во второй части, а сейчас перейдем к Output:

image

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

Ниже нажатая кнопка означает, что стрим идет на вкладке 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 или что угодно):

image

Чтобы пропустить звук из скайпа в эфир, нажмите на зеленый телефон, убрать — красный.

Спасибо за внимание, продолжение следует.
21 июня 2012 в 22:13
161
pashazz 61,3

комментарии (18)

+1
DeXPeriX #
>я использовал только свободное ПО
Skype не свободен. И ещё не совсем понял, зачем интернет-звонилка? Ваш радио-сервер физически расположен в недоступном месте
0
pashazz #
Скайп — опция. Хотя можно считать его исключением :)

сервер мой вполне доступен, только я думаю, давать ли ссылку… 32 мегабайта RAM не выдержат.
–1
DeXPeriX #
Ссылку не надо, расскажите зачем Вам там скайп нужен! Интересно же. Удалённо делать прямой эфир?
+9
pashazz #
Для звонков «в студию».
+1
MechanisM #
Советую ставить Icecast с гатхаба, от одного из разработчиков Icecast. Тот что официально стабильный — очень устарел. В новом добавлено кое-что и баги пофиксены.
На вашем месте в таких условиях я бы делал MPD он может быть одновременно и автодиджеем(вещалкой) и радиосервером(стримить так-же как Icecast), можно подключить к роутеру внешний диск на котором музыка и настроить чтобы MPD брал музло оттуда. Понятное дело что если по-хорошему то радиостанции дома и тем-более на роутере не место — ресурсов мало и ширины канала.
0
MechanisM #
Кстати для MPD и клиентов полно, включая приложения для iPhone/Android и еще какие угодно.
Просмотров: 1012 | Добавил: Breger | Рейтинг: 0.0/0
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Copyright MyCorp © 2024