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

Как оптимизировать - liquidsoap?

 

24
IceJOKER @IceJOKER
На сервере идет ретрансляция более 30 радио, хочу сделать перекодировку всех радио на лету.
IceCast2 прекрасно ретранслирует все радио, но вот с liquidsoap небольшие проблемы.
Перекодировка всех радио на 32 битрейта идет хорошо, а вот больше уже не тянет(64, 128)

Конфиг liquid:
set("buffering.kind","raw")
set("log.file", true)

def my_input(url) =
mksafe(input.хттп(buffer=5., max=20., url));
#с или без перезаписи buffer/max одна и та же проблема
end

def outputs(name, mount, input) =
output.icecast(
%mp3(bitrate=32, samplerate=22050, stereo=false),
******
mean(input))

output.icecast(
%mp3(bitrate=64,samplerate=44100,stereo=true),
******
input)

output.icecast(
%mp3(bitrate=128,samplerate=44100,stereo=true),
******
input)

end

url = "хттп://localhost:8000/radio1"
input = my_input(url)
outputs("Radio1", "radio1", input)

#..............

url = "хттп://localhost:8000/radio40"
input = my_input(url)
outputs("Radio40", "radio40", input)


Логи liquid:
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.04s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.02s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.
2015/07/24 11:36:56 [:3] Buffer overrun: Dropping 0.03s.

Limit-ы IceCast


Сервер:

6 ядер(средняя загрузка 40%)
6гБ оперативки(хватет сполна)



p.s. исправьте пожалуйста лимит на кол. ссылок в посту, а то какая-то глупая проверка на слово - "хттп", хотя бы сделайте ограничения на "хттп://"

Отредактировано IceJOKER - 24.07.2015
89
Ok_go_love @Ok_go_love
С подобным тоже столкнулся, при даже меньшем количестве потоков. Решить не удалось, но проблема вроде бы ушла.
Из гугла - попробуйте увеличить приоритет процесса
I wonder if your system experiences CPU usage spikes from cron jobs or
something similar that causes Liquidsoap to fall behind.

Are the times when this problem happens consistent? Try setting the the CPU
priority of Liquidsoap to the max and see if that helps:

to find pid: "ps aux | grep liq:
to set priority: renice -n -19 -p <pid>

382
Grigorij @gyurgin_1
А что, буфер использовать не судьба?

89
Ok_go_love @Ok_go_love
gyurgin_1 пишет:

А что, буфер использовать не судьба?

Вы о чем, коллега?

382
Grigorij @gyurgin_1
Да я просто не понял откуда set("buffering.kind","raw"), откуда Вы вобще это берете? Максимальный размер буфера для любого входного протокола - 10., задаете больше может не работать, также можно в буфер окантовать выходные потоки. Ну и зачем Вам 32 - моно - кто его слушать будет? Нагрузка и так не слабая, а тут еще какие то причуды нелепые. Вобще - не надо ходить по интернетам и искать что то, есть простая команда liquidsoap --help и дальше достаточно пройтись по разделам и сделать правильный конфиг.

89
Ok_go_love @Ok_go_love
А raw что в данном контексте означает?

382
Grigorij @gyurgin_1
Да откуда я знаю? Спрашивайте там, где нашли этот бред.

24
IceJOKER @IceJOKER
gyurgin_1 пишет:

Да я просто не понял откуда set("buffering.kind","raw"), откуда Вы вобще это берете? Максимальный размер буфера для любого входного протокола - 10., задаете больше может не работать, также можно в буфер окантовать выходные потоки. Ну и зачем Вам 32 - моно - кто его слушать будет? Нагрузка и так не слабая, а тут еще какие то причуды нелепые. Вобще - не надо ходить по интернетам и искать что то, есть простая команда liquidsoap --help и дальше достаточно пройтись по разделам и сделать правильный конфиг.

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

382
Grigorij @gyurgin_1
А, нашел set("buffering.kind","raw")- это для древней версии - забудьте, выкиньте из конфига.

24
IceJOKER @IceJOKER
gyurgin_1 пишет:

А, нашел set("buffering.kind","raw")- это для древней версии - забудьте, выкиньте из конфига.

Вижу у вас есть опыт , не знаете можно ли сделать так чтобы liquidsoap начинал перекодировку лишь в том случае, если есть слушатель?
Мне нужно ретранслировать ~40 радио и перекодировать все в 3 битрейта(32, 64, 128), уже попробовал несколько серверов, ни один не выдержал(ретрансляция + перекодировка в 32 работает нормально, дальше уже не работает).
Может через 2 сервера сделать?(на одном ретранслировать и перекодировку нескольких радио), а на другом остальные радио?

Уже сколько мучаюсь не могу найти человека, который дал бы хороший совет, а сам уже что хоть не перепробовал

888
Falcon @Falcon
IceJOKER пишет:

gyurgin_1 пишет:

А, нашел set("buffering.kind","raw")- это для древней версии - забудьте, выкиньте из конфига.

Вижу у вас есть опыт , не знаете можно ли сделать так чтобы liquidsoap начинал перекодировку лишь в том случае, если есть слушатель?
Мне нужно ретранслировать ~40 радио и перекодировать все в 3 битрейта(32, 64, 128), уже попробовал несколько серверов, ни один не выдержал(ретрансляция + перекодировка в 32 работает нормально, дальше уже не работает).
Может через 2 сервера сделать?(на одном ретранслировать и перекодировку нескольких радио), а на другом остальные радио?

Уже сколько мучаюсь не могу найти человека, который дал бы хороший совет, а сам уже что хоть не перепробовал


А мы вас предупреждали при общении по почте, что нагрузка будет очень большой от перекодировки.

Из того, что можно посоветовать:
Делать ссылку на прослушку потока на скрипт, который будет определять количество слушателей на канале и в зависимости от этого включать нужный liquidsoap. Аналогичный скрипт ставить и на отключение слушателя.
Из минусов - долгое подключение юзера к каналу (пока скрипт сработает, пока мыло запустится)

24
IceJOKER @IceJOKER
Falcon пишет:

IceJOKER пишет:

gyurgin_1 пишет:

А, нашел set("buffering.kind","raw")- это для древней версии - забудьте, выкиньте из конфига.

Вижу у вас есть опыт , не знаете можно ли сделать так чтобы liquidsoap начинал перекодировку лишь в том случае, если есть слушатель?
Мне нужно ретранслировать ~40 радио и перекодировать все в 3 битрейта(32, 64, 128), уже попробовал несколько серверов, ни один не выдержал(ретрансляция + перекодировка в 32 работает нормально, дальше уже не работает).
Может через 2 сервера сделать?(на одном ретранслировать и перекодировку нескольких радио), а на другом остальные радио?

Уже сколько мучаюсь не могу найти человека, который дал бы хороший совет, а сам уже что хоть не перепробовал


А мы вас предупреждали при общении по почте, что нагрузка будет очень большой от перекодировки.

Из того, что можно посоветовать:
Делать ссылку на прослушку потока на скрипт, который будет определять количество слушателей на канале и в зависимости от этого включать нужный liquidsoap. Аналогичный скрипт ставить и на отключение слушателя.
Из минусов - долгое подключение юзера к каналу (пока скрипт сработает, пока мыло запустится)


Такого опыта пока нет, это был первый работы с icecast и с liquidsoap, пока вижу одно легкое решение, как и порекомендовали на stackoverflow - заказать несколько мелких серверов и разделить перекодировку, чем на одном больше перекодировать все.

382
Grigorij @gyurgin_1
Какие сервера использовали - то? У меня в легкую получилось 40x3=120 кодировщиков поднять и еще ресурсов вагон осталось, без всяких буферов, поритом. Подозреваю что проблема у Вас в конфигурации, выкладывайте полностью - ну пароли затрите и т.д.

24
IceJOKER @IceJOKER
gyurgin_1 пишет:

Какие сервера использовали - то? У меня в легкую получилось 40x3=120 кодировщиков поднять и еще ресурсов вагон осталось, без всяких буферов, поритом. Подозреваю что проблема у Вас в конфигурации, выкладывайте полностью - ну пароли затрите и т.д.

Конфиги icecast2+liquidsoap в первом посту, у icecast2 ниже просто обычный список mount-ов и ничего другого(по дефолту).

Пробовал на 3 разных серверах(виртуальных - может дело в этом?) - ********** - попробовал первые 3, потом еще тариф ФОРСАЖ с 6 ядрами и т.д. - максимум , что смог - это ретрансляция всех радио + перекодировка в 32 битрейта и несколько в 64, дальше уже ни в какую. нехватка CPU
хотел у fastvps.ru заказать выделенный сервер, но уже после нескольких попыток, что-то не решился. Первый опыт, поэтому не особо представляю насколько мощный сервер нужен, чтоб было норм(не нехватка и не слишком). 40 радио, ретрансляций + перекодировка в 3 битрейта(хотя бы в 2 - 32 и 128). Peak listeners = ~30 --- где-то под такие данные сервер нужен

24
IceJOKER @IceJOKER
По рекомендации увеличивал приоритет liquidsoap, в общем прошелся практически по всем ссылкам Гугл , пробовал разное и увы не смог решить проблему.
Месяц назад спросил здесь, спрашивал на stackoverflow, но увы ..

382
Grigorij @gyurgin_1
Ну понятно, с виртуальным сервером такую задачу не решить. Если fastvps.ru - берите самый простой выделенный сервер - хватит за глаза.
По конфигу понятно, если хоть и в редких случаях, но запускались потоки с битрейтом отличным от 32, то должно быть все нормально.
Сразу тогда несколько советов:
1. Не надо пихать все кодировщики в один конфиг, мало того, что при старте сервер будет нервно вздрагивать, так еще нет возможности остановить или перезапустить отдельный кодировщик (если не управлять конечно при помощи telnet или сокетом), да и при неполадках с одиним из потоков может рухнуть все.
2. input.http может отвалиться, собственно поэтому и mksafe, но бывают случаи когда на вход прилетает такое, что liquidsoap все равно падает, добавьте после входа fallback хотя бы просто на blank(), так спокойней.
3. Попадаются станции потоки которых liquidsoap попросту не примет, поверьте - такие есть, не поленитесь установить на сервер как обычный icecast для релея таких станций (каким то образом он все ставит на место и лучший вариант все входящие потоки прогнать через него) и icecast KH для раздачи слушателям, их можно поставить например один в /usr/bin/icecast, другой в /usr/local/bin/icecast, webroot можете использовать общий, какой больше нравится и все будет прекрасно работать.
4. Попробуйте поиграть с качеством перекодировки, все равно же убиваете звук, наример:
для 32 kBps %mp3(bitrate=32,internal_quality=7,samplerate=22050,mono=true)
для 64 %mp3(bitrate=64,internal_quality=4)
для 128 оставьте по дефолту %mp3(bitrate=128).
Пока вроде бы все, будут вопросы - пишите.

24
IceJOKER @IceJOKER
gyurgin_1 пишет:

Ну понятно, с виртуальным сервером такую задачу не решить. Если fastvps.ru - берите самый простой выделенный сервер - хватит за глаза.
По конфигу понятно, если хоть и в редких случаях, но запускались потоки с битрейтом отличным от 32, то должно быть все нормально.
Сразу тогда несколько советов:
1. Не надо пихать все кодировщики в один конфиг, мало того, что при старте сервер будет нервно вздрагивать, так еще нет возможности остановить или перезапустить отдельный кодировщик (если не управлять конечно при помощи telnet или сокетом), да и при неполадках с одиним из потоков может рухнуть все.
2. input.http может отвалиться, собственно поэтому и mksafe, но бывают случаи когда на вход прилетает такое, что liquidsoap все равно падает, добавьте после входа fallback хотя бы просто на blank(), так спокойней.
3. Попадаются станции потоки которых liquidsoap попросту не примет, поверьте - такие есть, не поленитесь установить на сервер как обычный icecast для релея таких станций (каким то образом он все ставит на место и лучший вариант все входящие потоки прогнать через него) и icecast KH для раздачи слушателям, их можно поставить например один в /usr/bin/icecast, другой в /usr/local/bin/icecast, webroot можете использовать общий, какой больше нравится и все будет прекрасно работать.
4. Попробуйте поиграть с качеством перекодировки, все равно же убиваете звук, наример:
для 32 kBps %mp3(bitrate=32,internal_quality=7,samplerate=22050,mono=true)
для 64 %mp3(bitrate=64,internal_quality=4)
для 128 оставьте по дефолту %mp3(bitrate=128).
Пока вроде бы все, будут вопросы - пишите.



Огромное спасибо, если бы кто-нибудь так ответил, то не пришлось бы столько мучиться.
Очень благодарен.
Как попробую отпишусь

24
IceJOKER @IceJOKER
Как можно запускать несколько копий liquidsoap на разных ядрах?
Перекодирую 6 радио в 32 и 128, процессор грузит на половину :

382
Grigorij @gyurgin_1
Смотрите в сторону taskset, хотя мое мнение - не поможет, не тот случай.

24
IceJOKER @IceJOKER
gyurgin_1 пишет:

Смотрите в сторону taskset, хотя мое мнение - не поможет, не тот случай.

а как разделить?
1. Не надо пихать все кодировщики в один конфиг, мало того, что при старте сервер будет нервно вздрагивать, так еще нет возможности остановить или перезапустить отдельный кодировщик (если не управлять конечно при помощи telnet или сокетом), да и при неполадках с одиним из потоков может рухнуть все.


Выше вы писали это

Отредактировано IceJOKER - 13.12.2015