ОсновноеRadiotalkПользовательское
Общие вопросы по интернет радио вещанию
6   •   Посмотреть все темы

Вопрос по архитектуре приложений, для вывода в эфир ведущего

 

3
azso @azso
Добрый день,

Хочу на уровне концепции понять, как решить следующую задачу.
[list=*]
[*]Есть трансляция потока музыки. Необходимо сделать включение ведущего. При этому основной поток должен приглушиться, перед включением ведущего приоиграться джингл, и пока ведущий в эфире накладываться подложка. [/*]
[/list]

Написал свое видение/предположение. Прошу тех, кто владеет предметом, внести корректировки.

Сервер#1 На нем установлен IceCast и liquidsoap и есть много mp3 файлов с песнями.
[list=*]
[*]У IceCast есть ip адрес (например, ip1), порт на котором он вещает (например, 8000), настроен адрес монтирования (например, play192), пользователь с паролем, от имени которого может приниматься поток (например, source). При этом вещание для конченого слушателя производится по адресу: "ip1:8000/play192.m3u"[/*]
[*]Есть liquidsoap (установлен на том же сервере что и IceCast - сервер#1), который формирует аудио-поток и от имени пользователя source отдает его на 8000 порт.
При этом liquidsoap проверяет наличие потока по адресу ip2:8000/onair.m3u. Если такой поток есть, то он отправляется на Icecast вместо плэйлиста[/*]
[/list]

Сервер#2 На нем также установлен IceCast, liquidsoap и есть микрофон.
[list=*]
[*]Развернут IceCast, есть ip адрес (например, ip2), порт для вещания 8000, адрес для монтирования (например, onair), пользователь с паролем от которого может приниматься поток (например, source). Вещание происходит по адресу "ip2:8000/onair.m3u". [/*]
[*]Есть liquidsoap (установлен тоже на Сервер#2) который настроен таким образом, чтобы получать поток с микрофона Сервер#2 и отдавать его в Icecast сервера#2
[/*]
[/list]

Как по-видимому все это работает:

по умолчанию вещание ведет Сервер#1 проигрывая плэйлист. Как появляется поток с Сервер#2 (когда включается эфир с микрофона) - ретранслируется микрофон. При этом средствами liquidsoap сервера#2 происходит накладка фоновой музыки и пристыковка джингла при включении микрофона.


Уверен - что в реальной жизни много нюансов..а возможно все вообще по другому. Поэтому прошу ваших комментариев.

p.s. По факту реализовал только первую часть - вещание по плейлистам...

Отредактировано azso - 16.11.2014
382
Grigorij @gyurgin_1
Здравствуйте. Ну для начала хочу приземлить и напомнить про неминуемые задержки звука.
Если это не пугает, то наверно я бы сделал так:
На втрором сервере icecast не нужен, со всеми задачами справится icecast первого сервера.
На этом сервере два потока - play192 который отдаем слушателям и onair на который будет вещать liquidsoap второго сервера.

Liquidsoap первого сервера любым удобным способом формирует внутренний аудиопоток nontsop который мы ставим в fallback к onair, имеет хитрую функцию crossfade которая при появлении потока onair плавно его выведет, как вариант может наложить фоновую музыку и контролировать наличие сигнала с микрофона и при паузе больше заданной переходить на вещание с nonstop.
За время работы ведущего переключает(готовит) следующий трек, окончание передачи с onair прикрывает джинглом.
Результат всего этого безобразия направляет на play192 icecast первого сервера.

Liquidsoap второго сервера при включении или поступлении сигнала с telnet или через сокет проигрывает джингл и сигнал с микрофона направляет на поток onair icecast сервера номер один, опять-таки как вариант наложение фона возложить на этот экземпляр liquidsoap.
Возможно при включении дублирует передачу на звуковую карту чтобы ведущий слышал джингл, себя слышал или активирует после проигрывания джингла индикатор ON AIR.

В подобной реализации ничего сложного не вижу. Будут вопросы - обращайтесь.

3
azso @azso
спасибо большое! направление исследования понял) К сожалению, смогу опробовать не раньше следующих выходных...
Задержки пугают..
Тем более что в качестве "сервера-1" у меня используется raspberry pi)

3
azso @azso
Спасибо, все получилось практически с первого раза.

Главная загвоздка которая осталась - как научить liquidsoap брать звук с микрофона.
Пробовал использовать input.alsa() и input.jack()...

Ответ примерно один и тот же: "...the variable input.jack used here has not been previously defined."

А так синтаксис, по всей видимости, какой-то такой:

out(
input.jack(),
description = "",
mount = "xxx"
)

382
Grigorij @gyurgin_1
Собирать liquidsoap надо с поддержкой ocaml-alsa, ocaml-pulseaudio, ocaml-bjack, смотря чем пользуетесь и станут доступны функции.