1

Тема: Liquidsoap: Buffer emptied, buffering needed

При подключении через 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 (30-10-2016 00:56:17)

2

Re: Liquidsoap: Buffer emptied, buffering needed

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

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

3

Re: Liquidsoap: Buffer emptied, buffering needed

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

4

Re: Liquidsoap: Buffer emptied, buffering needed

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

5

Re: Liquidsoap: Buffer emptied, buffering needed

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

6

Re: Liquidsoap: Buffer emptied, buffering needed

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

7

Re: Liquidsoap: Buffer emptied, buffering needed

пишет 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...

8

Re: Liquidsoap: Buffer emptied, buffering needed

пишет gyurgin_:

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

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

9

Re: Liquidsoap: Buffer emptied, buffering needed

пишет 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.

10

Re: Liquidsoap: Buffer emptied, buffering needed

пишет solariz:

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

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

11

Re: Liquidsoap: Buffer emptied, buffering needed

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

url = "http://regress78.com:8025/source.mp3"
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)

12

Re: Liquidsoap: Buffer emptied, buffering needed

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

13

Re: Liquidsoap: Buffer emptied, buffering needed

пишет 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

14

Re: Liquidsoap: Buffer emptied, buffering needed

Ну отваливается источник, надо посмотреть еще лог айскаста и еще меня смущает конфиг, предлагаю такой вариант:

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 ])
)

15

Re: Liquidsoap: Buffer emptied, buffering needed

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

http://dropmefiles.com/r4EQu

16

Re: Liquidsoap: Buffer emptied, buffering needed

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

17

Re: Liquidsoap: Buffer emptied, buffering needed

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

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

18

Re: Liquidsoap: Buffer emptied, buffering needed

Ну тогда понятно, отваливается коннект с 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 для начала. Но все таки сначала с коннектом надо пошаманить.

19

Re: Liquidsoap: Buffer emptied, buffering needed

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

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

20

Re: Liquidsoap: Buffer emptied, buffering needed

пишет gyurgin_:

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

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

Отредактировано solariz (03-11-2016 23:57:47)

21

Re: Liquidsoap: Buffer emptied, buffering needed

Самое простое что в голову пришло - ставим mplayer

apt-get install mplayer

и как то так:

http_live = input.external(restart=true, restart_on_error=true, buffer=0.2, max=10., "mplayer -really-quiet -format s16le -ao pcm:file=/dev/stdout -vc null -vo null 'http://regress78.com:8025/source.mp3' 2>/dev/null")

или

url = "http://regress78.com:8025/source.mp3"
http_live = input.external(restart=true, restart_on_error=true, buffer=0.2, max=10., "mplayer -really-quiet -format s16le -ao pcm:file=/dev/stdout -vc null -vo null #{quote(url)} 2>/dev/null")

чтобы не напутать с экранированием url, хотя если url прямой то можно и не экранировать, это я больше по привычке.
Я бы лично использовал ffmpeg, но как ставить его и от дистрибутива зависит и от потребностей конечных, а так - по той же схеме:

http_live = input.external(restart=true, restart_on_error=true, buffer=0.2, max=10., "ffmpeg -i #{quote(url)} -f wav - ")

Да, прошу обратить внимание - тогда точно надо строить конфиг по той схеме что у Вас была первоначально, ну оно и понятно - внешнему плееру пофиг, есть или нет поток, задача есть - он работает.

22

Re: Liquidsoap: Buffer emptied, buffering needed

К сожалению обрывы все равно происходят. даже чаще, чем прежде.  (
Привожу лог-файл и полный конфиг тестового сервера, где всё это безобразие и происходит.
http://dropmefiles.com/KRw8S

23

Re: Liquidsoap: Buffer emptied, buffering needed

Да ну, зачем этот тройной fallback, harbor.input выкинуть, оставить live_http, операции с метаданными навесить можно на него, поток формируем так:

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

Да, mplayer прекрасно скушает ogg, если надо конечно, у меня просто для проверки под рукой чтоб быстро включить был только Traktor.
Для начала давайте так пробовать.

24

Re: Liquidsoap: Buffer emptied, buffering needed

пишет gyurgin_:

Да ну, зачем этот тройной fallback, harbor.input выкинуть, оставить live_http,

да это без проблем, просто с самого начала так и было...

Сейчас все это сделал: обрывы остаются, логи в файле.
http://dropmefiles.com/4iZ3t

25

Re: Liquidsoap: Buffer emptied, buffering needed

Я вобще не вижу работы input.external, что то в этом роде должно быть

2016/11/04 19:13:22 [source:4] Source input.external_13770 gets up.
2016/11/04 19:13:22 [input.external_13770:3] Starting process

.