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

Liquidsoap: Buffer emptied, buffering needed

 

96
solariz @solariz
При подключении через teamviewer к удаленному компьютеру, где установлен Virtual DJ имеет место странная проблема, примерно раз в 40 минут происходит переключение на авто-dj во время ведения живого эфира. В логах liquidsoap:
2016/10/29 21:25:51 [LIVE:4] End of track.
2016/10/29 21:25:51 [LIVE:4] Buffer emptied, buffering needed.


очевидно в этом месте конфига:

radio = mksafe(fallback(track_sensitive=false, transitions=[src_Xfade, src_Xfade], [
strip_blank(max_blank=10., threshold=-45., live),
music
]))

Процессор на сервере liquidsoap не загружен даже на треть. Вещание внутри локальной сети.
Писал весь master VDJ в файл - никаких провалов по громкости или пауз в передаче звука нет. Все обрывы происходят прямо в середине песен с высоким уровнем громкости.

Важное примечание: это происходит только если подключаться к компьютеру с VDJ через teamviewer или другим способом удаленно. При локальной работе ничего подобного не происходит.

Отредактировано solariz - 29.10.2016
96
solariz @solariz
Специально проверил, такой неприятный эффект (неправильное определение конца песни время от времени, при использовании удаленного управления клиентским приложением, например VDJ) наблюдается на WIN7,8,10
А вот OS X такому не подвержена.

В какую сторону рыть дальше - не ясно. (

96
solariz @solariz
Всё указывает на то, что данную проблему нужно решать на стороне liquidsoap. Нет ли у кого идей, какой коствль приспособить для решение этой гадости?

419
gyurgin_ @gyurgin_
Мало данных как всегда, что на входе (input.harbor, input.http), этот вопрос мы кстати кажется на форуме уже обсуждали, а какой костыль - убрать костыль в виде удаленки, vdj не такой супер эксклюзивный или дорогой софт чтобы его по удаленке гонять, хотя конечно от применения зависит.

96
solariz @solariz
На входе input.harbor A удаленка нужна для тех людей, у которых компьютер настолько неживой, что не тянет vdj+vac

419
gyurgin_ @gyurgin_
Ну между vdj и liquidsoap ставьте прослойку из icecast, input.harbor он очень капризный, input.http он посуровее.

96
solariz @solariz
gyurgin_ пишет:

Ну между vdj и liquidsoap ставьте прослойку из icecast, input.harbor он очень капризный, input.http он посуровее.

Огромное спасибо за идею - сегодня в ночи попробую и отпишусь о результатах. Надеюсь фэлбэк более чем с двумя источниками нормально отработает. Т.е. сейчас у меня так:

radio = mksafe(fallback(track_sensitive=false, transitions=[src_Xfade, src_Xfade], [
strip_blank(max_blank=10., threshold=-45., live),
music
]))

кроме music и live добавится этот с прослойкой... http_live...

96
solariz @solariz
gyurgin_ пишет:

input.http он посуровее.

А как сделать, что бы он автоматически реконнектился, при обрыве соединения между liquidsoap и "прокладкой"-icecast?

96
solariz @solariz
gyurgin_ пишет:

Ну между vdj и liquidsoap ставьте прослойку из icecast, input.harbor он очень капризный, input.http он посуровее.

все равно обрывается:
2016/11/02 23:46:42 [decoder.ogg:5] ogg/vorbis format detected for stream 3d1b58ba
2016/11/02 23:46:43 [http_9189:4] End of track.
2016/11/02 23:49:04 [http_9189:4] End of track.
2016/11/02 23:49:04 [http_9189:4] Buffer emptied, buffering needed.
2016/11/02 23:49:04 [fallback_9208:3] Switch to cross_9202 with forgetful transition.

419
gyurgin_ @gyurgin_
solariz пишет:

А как сделать, что бы он автоматически реконнектился, при обрыве соединения между liquidsoap и "прокладкой"-icecast?

Я может быть не совсем точно выразил мысль - icecast должен быть на том же сервере что и liquidsoap.
Тут уже про обрыв соединения и речи быть не должно, кроме того рекомендовал бы icecast обычный, не KH - он проще относится к "неправильным", "ломаным", называйте как угодно потокам.
И незачем строить двойной fallback, не грузите понапрасну сервер.
Тут налицо разрыв соединения, но все же - ну просит буфер - добавьте буфера ему, по умолчанию что для harbor, что для http там 2 секунды, сделайте 5, но не больше значения max (по умолчанию 10.), прилепите к входу лог отдельный, запросто же это диагностируется.

96
solariz @solariz
буфер и так уже 10 и подозреваю, что тут не в размере буфера дело ( а как прилепить отдельны лог именно ко входу?

url = "**********"
live_http = input.http(buffer=10., max=15.0, url)

на данном этапе у меня уже включено:

set("log.file.path","/var/log/liquidsoap/regressradio.log")
set("log.level", 5)
set("log.stdout", true)

419
gyurgin_ @gyurgin_
live_http = input.http(buffer=10., max=15.0, logfile="путь к логу", url)

96
solariz @solariz
gyurgin_ пишет:

live_http = input.http(buffer=10., max=15.0, logfile="путь к логу", url)

Хм. Я не могу сказать, что мне это сильно помогло в диагностике, вот часть лога на момент обрыва стрима и возвращения обратно:

34.865097 12787
34.865103 12787
34.869034 10392
34.869042 10392
34.874528 287
34.874553 287
34.874556 287
34.875260 7353
34.875266 7353
34.876669 12221
34.876677 12221
34.881796 4941
34.881801 4941
34.885694 4258
34.885699 4258
34.891222 0
34.891229 0
34.897355 8916
34.897362 8916
34.898060 17136
34.901318 25704
34.901325 25704
34.905251 34830
34.905258 34830

419
gyurgin_ @gyurgin_
Ну отваливается источник, надо посмотреть еще лог айскаста и еще меня смущает конфиг, предлагаю такой вариант:
radio = mksafe(fallback(track_sensitive=false,
transitions = [src_Xfade, src_Xfade],
[ live, music ])
)

radio = mksafe(fallback(track_sensitive=false,
[ strip_blank(max_blank=10., threshold=-45., radio) , music ])
)

96
solariz @solariz
Конфиг изменил. Прилагаю в файле логи на момент обрыва (включай айскаст):

**********

419
gyurgin_ @gyurgin_
Ну кое какие выводы сделать можно, после обрыва это Вы отключали от icecast лайв?

96
solariz @solariz
Нет. В логах последовательность следующих событий:
1 обрыв http_live
2 подключается music
3 возвращается http_live

после этого я уже сам отключил http_live, но эти события в лог я не копировал

419
gyurgin_ @gyurgin_
Ну тогда понятно, отваливается коннект с vdj, teamviewer с винды этому как то способствует и liquidsoap тут не виноват.
Что можно попробовать:
Поиграть с разными портами, чем как говорится черт не шутит...
Можно использовать input.external и тут куча вариантов, правда с метаданными от vdj придется скорей всего расстаться.
Да, кстати, можно еще http_live обернуть в mksafe ну или в
http_live = fallback(track_sensitive=false,[ http_live, blank() ])
, что вроде бы одно и то же - тишина все же лучше чем "End of track", при этом чтобы реконнект не задерживался poll_delay у http_live выставить не 2 секунды, а скажем 0.5 для начала. Но все таки сначала с коннектом надо пошаманить.

96
solariz @solariz
ну вот я не пойму, как способствует teamviewer и т.п. (я много что попробовал)...
А с портами я игрался и пробовал с VAC (virtual audio cable) и без, пробовал все доступные версии Windows, пробовал вместо VDJ - mixxx, даже просто aimp+edcast, sam broadcaster. Traktor запустить не удалось из-за странных проблем с ASIO4ALL - но думаю, что была бы такая же лажа там.

На метаданные от VDJ мне плевать как раз, так как этот сервер делается для "живых" эфиров и все это дело переписыват liquidsoap.
А вот тишину категорически нельзя - это полностью разрушит логику динамического переключения потоков.

96
solariz @solariz
gyurgin_ пишет:


Можно использовать input.external и тут куча вариантов

мог бы привести пример хоть бы одного для пробы?

Отредактировано solariz - 03.11.2016