Рекомендации по использованию микшеров.

Ilya K.

Member
Здравствуйте.
Существует 3 реализации микшеров:
1. JAVA
2. NATIVE
3. MULTI_THREADED_NATIVE
также есть опции lossless video processor, realtime, настройки многопоточности и др.
Относительно MULTI_THREADED_NATIVE в принципе понятно, он рассчитан на большое количество потоков в микшере,
Есть описания по использованию lossless videoprocessor, realtime, многлпоточности и прочему
Не нашел информации по типу - JAVA.
В каких случаях целесообразно использовать?
В чем его принципиальное отличие, плюсы и минусы по срванению с NATIVE?
В каких случаях имеет смысл включать mixer_lossless_video_processor_enabled ?
Сложилось впечатление, что при использовании realtime, в сочетании с MULTI_THREADED_NATIVE (с выключенным mixer_lossless_video_processor_enabled) периодически возникают фризы, прерывание аудио. Да, это может быть проблемой с каналом публикующего, но при других вариациях настроек микширования такого нет, либо не воспроизводится. Не так критично небольшое прерывание видео, как аудио. Есть информация по тонкой настройке микшера реального времени, в одном из постов получил советы, но к желаемому результату не привело.
Какой микшер, с какими настройками лучше использовать для множества (от 10 и выше) микшеров на сервере, при условии, что количество потоков в одном не будет больше пяти? один поток в нём может иметь максимальное разрешение 1080p, остальные 360p.
Есть ли рекомендации по используемым машинам в AWS? Возможно, микширование лучше работает с типом c5n, чем с c5a.
Заранее спасибо.
 

Max

Administrator
Staff member
Добрый день.
Не нашел информации по типу - JAVA.
В каких случаях целесообразно использовать?
Данный тип реализации микшера устарел, его использование не рекомендуется.
Сложилось впечатление, что при использовании realtime, в сочетании с MULTI_THREADED_NATIVE (с выключенным mixer_lossless_video_processor_enabled) периодически возникают фризы, прерывание аудио. Да, это может быть проблемой с каналом публикующего, но при других вариациях настроек микширования такого нет, либо не воспроизводится.
Realtime микшер отличается тем, что при проблемах с входящим потоком не ждет его восстановления, а продолжает микширование, в то время как микшер с mixer_realtime=false или mixer_lossless_video_processor_enabled приостанавливает микширование до восстановления входящего потока. Т.е. c realtime Вы получаете фризы и прерывание аудио для отдельного участника, а без realtime Вы получите фриз всего микшера.
При проблемном канале участника рекомендуем:
- использовать TCP для публикации
Code:
session.createStream({
    name: streamName,
    display: localVideo,
    cacheLocalResources: true,
    receiveVideo: false,
    receiveAudio: false,
    transport: "TCP"
}).on(STREAM_STATUS.PUBLISHING, function (stream) {
...
}).publish();
- снижать разрешение и битрейт публикации
- не ограничивать минимальный битрейт публикации видео: использовать настройку по умолчанию на сервере
Code:
webrtc_cc_min_bitrate=30000
- увеличить буферизацию для входящих потоков микшера
Code:
mixer_in_buffering_ms=600
Что касается использования многопоточности в микшере mixer_type=MULTI_THREADED_NATIVE, это рекомендуется при большом количестве участников в MCU микшере, а также при необходимости оптимизации загрузки процессорных ядер. Подробнее по использованию данной настройки написано здесь. Отметим, что выставление числа потоков больше, чем число доступных процессорных ядер, не рекомендуется.
Какой микшер, с какими настройками лучше использовать для множества (от 10 и выше) микшеров на сервере, при условии, что количество потоков в одном не будет больше пяти? один поток в нём может иметь максимальное разрешение 1080p, остальные 360p.
Есть ли рекомендации по используемым машинам в AWS? Возможно, микширование лучше работает с типом c5n, чем с c5a.
Почитайте, пожалуйста, статью Сколько микшеров может быть на сервере?
Что касается конфигураций инстансов, сейчас мы рекомендуем инстансы m5.
 

Ilya K.

Member
Спасибо за информацию.
Что касается конфигураций инстансов, сейчас мы рекомендуем инстансы m5.
Имеете в виду всё семейство, включая m5a, m5n, m5zn?
Рекомендуется при больших нагрузках, или при малых тоже?

mixer_in_buffering_ms=600
В статье описано, что нужно либо увеличить буферизацию, либо не кодировать B-кадры (предпочтительно). Можно подробнее, каким образом можно исключить кодирование B-кадров?

В статье https://docs.flashphoner.com/pages/viewpage.action?pageId=42303910 описано размещение картинок микшера. Актуально для демо рабочего стола в том числе, либо относится только к видео?
 

Max

Administrator
Staff member
Имеете в виду всё семейство, включая m5a, m5n, m5zn?
Рекомендуется при больших нагрузках, или при малых тоже?
Сейчас при развертывании инстанса из образа, опубликованного на AWS Marketplace, по умолчанию предлагается m5.large
Выбор конкретного инстанса может быть произведен только для конкретного случая по результатам нагрузочных тестов.
В статье описано, что нужно либо увеличить буферизацию, либо не кодировать B-кадры (предпочтительно). Можно подробнее, каким образом можно исключить кодирование B-кадров?
Для публикации RTMP это можно задать явным образом в настройках кодировщика, например
1628470133949.png

Также помогает снизить профиль кодирования до Baseline
При публикации WebRTC из Chrome B-фреймы могут появляться в потоке, если включено аппаратное ускорение на некоторых видеоадаптерах. В этом случае должно помочь исключение профилей кодирования из SDP
Code:
webrtc_sdp_h264_exclude_profiles=4d,64
В статье https://docs.flashphoner.com/pages/viewpage.action?pageId=42303910 описано размещение картинок микшера. Актуально для демо рабочего стола в том числе, либо относится только к видео?
Desktop layout - это отдельный вариант, который включается по ключевому слову в потоке независимо от того, какой вариант использовался до этого.
Но при необходимости можно на языке разметки описать вариант размещения с похожим функционалом, при этом параметры отображения потока также необходимо задавать с учетом определенного ключевого слова в потоке, например
Code:
<?xml version="1.0" encoding="utf-8"?>
<body xsi:noNamespaceSchemaLocation="schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <div width="1024" height="600" padding-left="0" padding-right="0" padding-bottom="0" align="TOP_CENTER">
    <video crop="false">myDesktop.*</video>
  </div>
  <div height="120" padding-left="0" padding-right="0" padding-bottom="0" align="BOTTOM_CENTER">
    <video></video>
  </div>
</body>
 

Yaroslav N

New Member
Добрый день!

Попробовали настройки как описано в статье https://docs.flashphoner.com/pages/viewpage.action?pageId=42303910

В целом все работает, но возник вопрос.
Можно ли как-то в настройках разделить пути шаблонов на обычные и для демонстрации рабочего стола?
То есть для 2 входящих потоков указать 2 разных шаблона, один для варианта "демонстрация экрана + поток с камеры", а другой для варианта "поток с камеры + поток с камеры"
 

Max

Administrator
Staff member
Добрый день.
Можно ли как-то в настройках разделить пути шаблонов на обычные и для демонстрации рабочего стола?
То есть для 2 входящих потоков указать 2 разных шаблона, один для варианта "демонстрация экрана + поток с камеры", а другой для варианта "поток с камеры + поток с камеры"
Вы можете указать шаблон определенного имени потока для демонстрации рабочего стола, как указано в примере выше, и задать для него фиксированные размеры. Для потоков с камер при этом можно задать div c вложенным video без указания имени потока. Так нужно сделать в каждом файле описания на каждое количество предполагаемых участников.
В этом случае, поток с именем, соответствующим шаблону рабочего стола, должен разместиться в указанном для него месте, остальные потоки будут размещены по местам без указанных имен.
 

Yaroslav N

New Member
Пока не очень понимаю как одним шаблоном разделить разные кейсы.

В первом кейсе у нас 3 входящих потока (демонстрация + камера + камера) и нужно демонстрацию разместить на весь размер, а камеры разместить справа в виде уменьшенных окон.
Этот кейс у нас как раз получилось сделать за счет "указать шаблон определенного имени потока для демонстрации рабочего стола" и размещения двух DIV с указанием размера и координат x,y

Во втором кейсе у нас 3 входящих потока (камера + камера + камера) и их нужно разместить в виде обычной сетки
(как на этом примере https://docs.flashphoner.com/downlo...rsion=1&modificationDate=1633921971000&api=v2)

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

Max

Administrator
Staff member
В первом кейсе у нас 3 входящих потока (демонстрация + камера + камера) и нужно демонстрацию разместить на весь размер, а камеры разместить справа в виде уменьшенных окон.
...
Во втором кейсе у нас 3 входящих потока (камера + камера + камера) и их нужно разместить в виде обычной сетки
В случае демонстрации экрана должен помочь стандартный desktop layout с настройкой
Code:
mixer_desktop_align=LEFT
Тогда экран будет слева, а камеры справа в виде уменьшенных окон
Шаблон имени для демонстрации экрана задается настройкой
Code:
mixer_video_layout_desktop_key_word=desktop
В этом случае, даже если Вы используете собственный лэйаут на языке разметки, при добавлении в микшер потока с экрана микшер переключится на стандартный desktop layout с расположением потоков согласно настройке mixer_desktop_align
 

Yaroslav N

New Member
Спасибо за совет!

Этот вариант почти подходит, но остался последний момент.

Нам нужно что-бы маленькие видео располагались поверх демонстрации экрана по правому краю (либо по нижнему), но сейчас эти окна слишком большие и перекрывают контент самой демонстрации.
Можно ли как-то их уменьшить в размере, что-бы они занимали меньше места?
В настройках к сожалению не нашли таких параметров
 

Max

Administrator
Staff member
Нам нужно что-бы маленькие видео располагались поверх демонстрации экрана по правому краю (либо по нижнему), но сейчас эти окна слишком большие и перекрывают контент самой демонстрации.
Можно ли как-то их уменьшить в размере, что-бы они занимали меньше места?
Размер картинок в стандартных лэйаутах вычисляется, исходя из их количества. Поэтому напрямую повлиять на этот размер, к сожалению, нельзя.
Если Вам нужно, чтобы окна участников не перекрывали поток экрана, не используйте режим "картинка в картинке"
Code:
mixer_video_desktop_fullscreen=false
Тогда потоки участников не буду перекрывать поток экрана, а расположатся рядом с ним или под ним.
Если этого недостаточно, тогда только писать собственный лэйаут на языке разметки для демонстрации экрана, но возможности переключаться автоматически на такой лэйаут у нас пока нет. Добавили тикет WCS-3387, сообщим здесь о результатах.
 

Max

Administrator
Staff member
Добрый день.
В сборке 5.2.1091 добавлена возможность описать вариант размещения картинок с демонстрацией экрана для определенного количества участников. Подробности читайте здесь.
 
Top