Как оптимизировать жидкое мыло?

Я хочу ретранслировать ~40 радио с помощью Icecast и перекодировать их на 3 битрейта (32,64,128)

Ретранслировать все радио и перекодировать их на 32 битрейт работает хорошо, а вот на 64, 128 не работает

Журналы жидкого мыла:

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.

Конфигурация жидкого мыла:

set("buffering.kind","raw")
set("log.file", true)

def my_input(url) =
    mksafe(input.http(buffer=5., max=20., url));
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 = "http://localhost:8000/radio1"
input = my_input(url)
outputs("Radio1", "radio1", input)

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

url = "http://localhost:8000/radio40"
input = my_input(url)
outputs("Radio40", "radio40", input)

Лимиты ледяных заклинаний:

введите здесь описание изображения

Информация о сервере:

6 cores(average load 40%)
6GB RAM

главный экран: введите здесь описание изображения


person Suleiman    schedule 24.07.2015    source источник


Ответы (1)


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

Что бы это ни стоило, я обычно могу получить 12 потоков, перекодированных на самой дешевой доступной коробке Digital Ocean. Если вы еще не используете дешевый VPS-хостинг для этого, я рекомендую его! Просто обязательно следите за процессором с помощью чего-то вроде New Relic и переходите на новый хост, если он сокращает выделенные вам циклы. Вашему кодеку требуется постоянная доступность ЦП, чтобы буферы были заполнены.

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

person Brad    schedule 25.07.2015
comment
Как я могу сделать на 1 сервере? Я хочу заказать выделенный сервер, но не знаю, какой заказать в моем случае (. И как настроить Liquidsoap, чтобы транскодирование начиналось только при наличии одного или нескольких слушателей? - person Suleiman; 01.08.2015
comment
@IceJOKER Не используйте один сервер, используйте несколько. Лучше использовать несколько небольших серверов для разделения нагрузки, чем один большой. Обычно это дешевле, и тогда вы можете снять часть своей установки для обновлений, не выключая ее полностью. - person Brad; 01.08.2015
comment
в этом случае, как я могу присоединиться к своему домену? У меня есть домен: example.com и я хочу транслировать радио через домен (НЕ IP): example.com:8000/mount_1_32 ... example.com:8000/mount_40_128 Я знаю, как это сделать с одним сервером, но не с несколькими серверы. - person Suleiman; 02.08.2015
comment
@IceJOKER Вы можете разместить свой сервер где угодно и при этом иметь отдельные экземпляры Liquidsoap. Оставьте Icecast на example.com и используйте другие серверы для запуска Liquidsoap. - person Brad; 02.08.2015
comment
Могу ли я показать, как я могу это сделать? например: на первом сервере установлены IceCast2 + Liquidsoap, который транскодирует и транслирует 10 радио, как настроить второй и третий сервер для других 20 радио? (Мне нужен только пример для 1 радио) - person Suleiman; 02.08.2015
comment
@IceJOKER Вместо использования localhost:8000 используйте example.com:8000 для выходных данных Liquidsoap. Вот и все. Неважно, где вы поместите экземпляры Liquidsoap. Они подключаются к Icecast через HTTP. Что касается того, как разделить ваш скрипт Liquidsoap, трудно сказать, не видя весь ваш скрипт. Что я делаю, так это имею отдельный сценарий для каждого канала. В этом скрипте все разные битрейты. Итак, для RadioReddit у нас есть 8 жанровых каналов по 4 потока в каждом. Есть общий включаемый файл и все дело в контроле версий. - person Brad; 02.08.2015
comment
@IceJOKER Мы развертываем весь репозиторий на каждом потоковом блоке, но затем делаем символическую ссылку на 3 или 4 файла конфигурации Liquidsoap в /etc/liquidsoap. Когда скрипт init.d запускается, он просто загружает эти файлы с символическими ссылками. - person Brad; 02.08.2015