Качество микшированного потока на origin

Добрый день. Еще столкнулись с проблемой. Версия 969, схема origin+edge x2 за AWS ELB. Если edge один, то всё прекрасно. Как только масштабируется и появляется второй, сразу сильно падает качество потока и начинаются фризы. Прикладываю ссылки на архив с отчетами
 

Max

Administrator
Staff member
Добрый день.
Уточните, пожалуйста: фризы наблюдаются при проигрывании потока с Edge или напрямую с Origin тоже?
1. В первом случае нужно учитывать текущую нагрузку на сервер, с которого играете потоки: сколько одновременно подключено зрителей, загрузка процессора. К сожалению, Вы предоставили только логи с Origin сервера, поэтому о характеристиках Edge мы можем только догадываться. Загрузку процессора, общее количество зрителей, количество зрителей на каждый поток можно посмотреть в статистике работы сервера.
У Вас выходной поток микшера очень толстый (1080p 4 Mbps) и требует хорошего канала как на стороне сервера, так и на стороне играющего клиента. Так, если к Edge серверу подключатся 100 зрителей, они займут полосу в 400 Mbps.
Кроме того, рекомендуем на Edge включить оптимизацию доставки потока подписчикам, это сильно помогает при большом количестве зрителей даже при небольших потоках. Также включение аппаратного ускорения шифрования WebRTC трафика позволит разгрузить процессор сервера примерно в полтора раза. Почитайте также эту статью, посвященную тестам сервера на большое количество подписчиков, там даются рекомендации по настройке сервера и определяются примерные характеристики оборудования.
2. Во втором случае нужно смотреть, сколько микшеров одновременно работает на сервере, и какую они дают нагрузку на CPU. Почитайте эту статью по нагрузочным тестам микшера. На один микшер 720p требуется 2 ядра CPU, но у Вас микшеры 1080p, поэтому потребуется 3 ядра на один микшер. Для микшеров 720p, по результатам тестов, максимальное количество одновременно работающих микшеров на два участника составляет 0.43 от количества ядер CPU, в Вашем случае соотношение будет еще меньше. Получается, что предполагаемое максимальное количество микшеров для Origin у вас не более 9, и при этом необходимо учитывать, сколько в микшере участников.
Кроме того, каждый участник микшера займет полосу в 4 Mbps. В зависимости от количества микшеров и количества участников качество изображения и звука может снизиться из-за нехватки канала.
Общие рекомендации таковы:
1. Снизить битрейт выходного потока микшера хотя бы до 2.5 Mbps (кстати, это значение Google Сhrome считает достаточным для публикации 1080p потока)
2. На Origin и Edge включить аппаратноe ускорение шифрования WebRTC трафика
3. На Edge включить оптимизацию доставки потока подписчикам
4. Провести нагрузочный тест микшера по методике, предложенной в статье, и определить, какое максимальное количество микшеров может одновременно быть запущено на Origin сервере
 
Добрый день. Проигрываем видео и с origin и с edge. Торможение происходит даже при одном зрителе. Машина испольуется aws ec2 c5a.8xlarge. Нагрузка на процессор не более 4%, канал 10гбит/с
В графики, снятые во временной промежуток, когда тестировали
origin
1628062169290.png

edge
1628062227978.png

По рекомендациям попробуем
 

Max

Administrator
Staff member
Торможение происходит даже при одном зрителе
Уточните - один микшер с одним участником публикуется на Origin, один зритель смотрит поток микшера на Edge, и в потоке при этом фризы?
Если так, то проблема только в канале от зрителя до сервера (любого из серверов), в который не вмещается выходной поток микшера. Для того, чтобы исключить помехи, можно переключиться на TCP на клиенте
Code:
session.createStream({
    name: streamName,
    display: remoteVideo,
    transport: "TCP"
}).on(STREAM_STATUS.PENDING, function (stream) {
...
}).play();
Но при недостаточной пропускной способности канала это может дать дополнительные задержки.
Поэтому основной рекомендацией будет снижение параметров выходного потока.
 
Добрый день. По указанным выше рекомендациям всё попробовали, не помогает. Да, один микшер с одним участником публикуется на Origin, один зритель смотрит поток микшера на Edge. Но фризы есть только, когда два Edge-сервера балансируются с помощью AWS ELB. Если edge-сервер за AWS ELB один, то видео воспроизводится отлично. Канал 10 гбит/с на каждый сервер.
 

Max

Administrator
Staff member
Но фризы есть только, когда два Edge-сервера балансируются с помощью AWS ELB. Если edge-сервер за AWS ELB один, то видео воспроизводится отлично. Канал 10 гбит/с на каждый сервер.
Есть ли фризы в потоке, если его играть непосредственно с Origin в этом случае?
Какова при этом нагрузка на CPU Origin и обоих Edge?
Если нагрузка велика, то проблема в производительности. У Вас нагрузка на Edge дополняется еще и транскодингом H264->VP8. В этом случае необходимо исключить транскодинг, убрав stripCodecs: "h264,H264".
Если нагрузка невелика (до 25 %), то проблема в канале между сервером и играющим клиентом (от точки до точки канал может быть измерен при помощи iperf, например, и 10 Gbps там не будет). В этом случае поможет только снижение разрешения и битрейта микшера, как мы рекомендовали ранее.
 
Есть ли фризы в потоке, если его играть непосредственно с Origin в этом случае?
да, фризы начинаются еще на origin именно в случае масштабирования
Какова при этом нагрузка на CPU Origin и обоих Edge?
До четырех процентов
Если нагрузка невелика (до 25 %), то проблема в канале между сервером и играющим клиентом (от точки до точки канал может быть измерен при помощи iperf, например, и 10 Gbps там не будет).
iperf3 показал 3.7-4.7 Gbits/sec между origin и edge и 94.4 Mbits/sec от моего компьютера до origin и edge
 

Max

Administrator
Staff member
да, фризы начинаются еще на origin именно в случае масштабирования
С Origin сервера также играете с транскодингом в VP8? Если да, то необходимо избавиться от него, т.е. VP8 в принципе кодируется медленнее, чем H264, тем более для толстого потока.
До четырех процентов
В таком случае, по какому именно критерию производится масштабирование?
Пока что рекомендации остаются прежними:
1. Снизить битрейт выходного потока микшера до 2500 kbps
2. Исключить транскодинг видео в VP8.
 
Еще сейчас установили, что микшированный поток начинает зависать не только если больше одного edge, но и в случае если смотреть микшированный поток через веб-интерфейс(во вкладке media devices). То есть, получается, если один поток пытаются получить несколько клиентов.
В таком случае, по какому именно критерию производится масштабирование?
на данный момент инициируем вручную, чтобы отловить проблему. Используем aws autoscaling group как указано в этой статье
 

Max

Administrator
Staff member
Еще сейчас установили, что микшированный поток начинает зависать не только если больше одного edge, но и в случае если смотреть микшированный поток через веб-интерфейс(во вкладке media devices). То есть, получается, если один поток пытаются получить несколько клиентов.
Нужно снизить параметры выходного потока микшера и исключить транскодинг в VP8. После этого воспроизводить проблему.
Также необходимо знать количество подписчиков потока, при котором начинает воспроизводиться проблема. Если проблема воспроизводится на Origin сервере, Edge необходимо исключить из тестирования.
 
Добрый день. Отключение VP8 не возможно с включенным по умолчанию в хроме аппаратным ускорением очень сильно падает качество изображения входящего потока
1628584057300.png

Мы можем не заставить пользователей включать и отключать аппаратное ускорение в своём браузере, как в такой случае решить проблему?
 
С увеличением минимального битрейта в media devices помогло. В случае, если увеличили до 400 кбит/с - всё нормально. Для 100 кбит/с - артефакты, иногда фризы. Опасаемся за качество трансляций в целом, т.к. изменение этой настройки может привести к её потере, в т.ч. для микшированного потока. Для VP8 такой проблемы не было, не настраивали минимальный битрейт. Ресурсов при транскодинге VP8 хватало с запасом. Проблема воспроизводится исключительно при нескольких edge. К тому же, параллельно настраиваем масштабирование origin. Наблюдается аналогичная проблема-микшированное видео иногда фризится и рассыпается при нескольких origin. Может быть, проблема в настройках CDN?
 

Max

Administrator
Staff member
Для VP8 такой проблемы не было, не настраивали минимальный битрейт.
Потому что битрейт разгоняется при транскодинге
Ресурсов при транскодинге VP8 хватало с запасом.
Вы настраивали мониторинг, как описано в этой статье? Контролировали загрузку процессора на Origin и Edge деградацию стримов?
Проблема воспроизводится исключительно при нескольких edge.
Получаете ли Вы фризы при проигрывании потока с Origin без транскодинга при нескольких Edge? Сколько при этом потоков опубликовано на Origin, сколько подписчиков на Edge?
Наблюдается аналогичная проблема-микшированное видео иногда фризится и рассыпается при нескольких origin.
Тот же самый вопрос: сколько потоков опубликовано на обоих Origin, сколько подписчиков у этих потоков, графики метрик нагрузки?
Может быть, проблема в настройках CDN?
Можно посоветовать включить на Origin и Edge аппаратноe ускорение шифрования WebRTC трафика и оптимизацию доставки потока подписчикам. По последним Вашим отчетам, это все включено только на Edge.
 
Получаете ли Вы фризы при проигрывании потока с Origin без транскодинга при нескольких Edge? Сколько при этом потоков опубликовано на Origin, сколько подписчиков на Edge?
проблема решилась при настройке оптимизации доставки потоков подписчикам


Подскажите, пожалуйста, как правильно выставить битрейт для всех браузеров, чтобы не было пискелизации при трансляции
экрана рабочего стола и веб-камеры?
 

Max

Administrator
Staff member
Подскажите, пожалуйста, как правильно выставить битрейт для всех браузеров, чтобы не было пискелизации при трансляции
экрана рабочего стола и веб-камеры?
Битрейт выставляется одинаково, в констрейнтах, в кбит/с
Code:
session.createStream({
    name: streamName,
    display: localVideo,
    constraints: constraints {
        audio: true,
        video: {
             minBitrate: 300
        }
    }
    ...
}).publish();
В этом случае можно задавать минимальный битрейт в зависимости от разрешения.
Можно также задать минимальный битрейт глобально для сервера, настройкой
Code:
webrtc_cc_max_bitrate=300000
Обратите внимание, что на сервере битрейт задается в бит/с
По поводу конкретных значений, рекомендации примерно такие
РазрешениеМинимальный битрейт, кбит/с
240p200
360p400
480p500
720p1000
1080p2000
 
Для потока камеры увеличение битрейта помогло. Вопрос по скриншарингу. Заметили ухудшение работы при публикации с хрома вкладки со статичной страницей. Метрики потока показывают, что fps=1, иногда 0. В том случае, если публикуем с Firefox, fps держится высоким. Визуально, в самом потоке разница следующая - при публикации с хрома статичной страницы изображение размытое, после 10-15 секунд стабилизируется. Если эту вкладку прокручивать, снова сильно размывается, потом стабилизируется. Для firefox такой проблемы нет. Также, нет проблемы с хром, если публикуется вкладка, например, с видео. При публикации окна powerpoint (тоже статичного) также проблемы нет. Для изменения битрейта хрома использовали sdpHook. По-другому не получилось. Возможно, для framerate тоже нужно использовать что-то подобное?
 

Max

Administrator
Staff member
Возможно, для framerate тоже нужно использовать что-то подобное?
В сборке WebSDK 2.0.180 добавлена опция videoContentHint для того, чтобы задать Chromium браузеру, какие параметры потока удерживать при изменении качества канала. По умолчанию эта опция выставлена в detail, чтобы Chrome не сбрасывал разрешение. Однако в этом случае Chrome снижает FPS. Чтобы удерживать FPS, нужно выставить эту опцию в [ICODEmotion[/ICODE]:
Code:
session.createStream({
    name: streamName,
    display: localVideo,
    cacheLocalResources: true,
    receiveVideo: false,
    receiveAudio: false,
    videoContentHint: "motion"
    ...
}).publish();
Подробнее здесь. Обратите внимание, что в этом случае Chrome может менять разрешение картинки, но заданный FPS будет пытаться удерживать.
 

Ilya K.

Member
Здравствуйте. Спасибо за информацию. Это именно рабочий стол, разрешение для этого потока критично. Можно каким-либо образом выровнить работу Chrome и Firefox в этом случае? (оба браузера с аппаратным ускорением, его мы не можем отключать) Firefox не сбрасывал ни разрешение, ни fps. Также, нужно дополнить, тест разных браузеров производился с одного рабочего места - качество канала одинаково. Битрейт статичной вкладки в Firefox был очень низким, но качество хорошее. Думаю, дело не в канале.
 

Max

Administrator
Staff member
Можно каким-либо образом выровнить работу Chrome и Firefox в этом случае? (оба браузера с аппаратным ускорением, его мы не можем отключать) Firefox не сбрасывал ни разрешение, ни fps.
Вот здесь описаны возможные варианты поведения браузера при различных значениях contentHint. Можете попробовать еще videoContentHint: "text". Если и это не поможет, то мириться либо со сбросом разрешения, либо со сбросом FPS во всех браузерах на основе Chrome.
Поведение Firefox отличается, поскольку он не поддерживает этот стандарт вообще. Поведение Safari отличается, поскольку в Webkit реализация немного другая.
Баг в Chrome признан разработчиками, но когда они его исправят, неизвестно. Проблема, судя по обсуждению, именно в аппаратном кодировщике, поэтому отключение аппаратного ускорения тоже помогает.
 
Top