В сборке 5.2.607 добавлена функция микшера реального времени. Эта функция, в сочетании с MCU, предназначена для организации видеоконференций в реальном времени. В отличие от предшествующей реализации, микшер реального времени не приостанавливает выходной поток, если какой-либо из входящих потоков начинает запаздывать (как правило, в результате помех на канале публикации), и не ждет восстановления потока, качество которого ухудшилось.
Настройка
Микшер реального времени включен по умолчанию
mixer_realtime=true
Также по умолчанию включено автоматическое создание микшера при публикации потока с именем вида user1#room1
mixer_auto_start=true
Для организации конференций, необходимо также включить поддержку MCU
mixer_mcu_audio=true mixer_mcu_video=true
Рекомендуется уменьшить длительность работы микшера без входящих потоков
mixer_idle_timeout=10000
При необходимости, также может быть включено отображение имени потока
mixer_display_stream_name=true
при этом для потоков с видео надпись выводится в левом нижнем углу, для аудио потоков надпись выводится по центру.
Отображение индикатора речи в виде зеленой рамки включено по умолчанию
mixer_voice_activity=true
Поддерживаются и остальные настройки микшера. Отметим, что не рекомендуется включать собственный losless видеопроцессор, поскольку функция реального времени в этом случае не будет работать.
Управление надписями
Основные параметры и размер шрифта
В зависимости от разрешения выходного потока микшера, может быть изменен размер шрифта надписей:
- для видео потоков размер шрифта по умолчанию составляет 20 пунктов
mixer_font_size=20
- для аудио потоков размер шрифта по умолчанию составляет 40 пунктов
mixer_font_size_audio_only=40
Текст всегда выводится на фоне прямоугольника. Можно управлять следующими параметрами фона:
Параметр | Значение по умолчанию, в пикселях | Описание |
---|---|---|
mixer_text_cut_top | 3 | Обрезка текста сверху |
mixer_text_padding_bottom | 5 | Дополнение фона снизу |
mixer_text_padding_left | 5 | Дополнение фона слева |
mixer_text_padding_right | 4 | Дополнение фона справа |
mixer_text_padding_top | 5 | Дополнение фона сверху |
Цвет текста, фон и прозрачность
В сборке 5.2.741 добавлена возможность управления цветом текста и фона при помощи настроек
mixer_text_colour=0xFFFF00 mixer_text_background_colour=0x006666
Цвет может задаваться в виде шестнадцатеричного значения c префиксом # или 0x, в формате #RRGGBB. При настройках, указанных выше, будет выведен желтый текст на циановом фоне:
Для участников без видео, указанным фоном заливается весь прямоугольник.
В сборке 5.2.770 добавлено управление прозрачностью фона при помощи настройки
mixer_text_background_opacity=100
Прозрачность задается в процентах: 0 соответствует полной прозрачности, 100 процентов соответствуют полной непрозрачности (фон будет окрашен заданным цветом). По умолчанию, значение установлено в 100 (фон непрозрачный).
Шрифт
В сборке 5.2.770 добавлена возможность выбрать шрифт надписей при помощи настройки
mixer_text_font=Serif
По умолчанию установлено значение Serif. Шрифты могут быть выбраны только из списка X11 шрифтов, например:
[root@centos76 ~]# fc-list | grep X11 /usr/share/X11/fonts/Type1/c0611bt_.pfb: Courier 10 Pitch:style=Bold Italic /usr/share/X11/fonts/Type1/UTBI____.pfa: Utopia:style=Bold Italic /usr/share/X11/fonts/Type1/c0419bt_.pfb: Courier 10 Pitch:style=Regular /usr/share/X11/fonts/Type1/c0648bt_.pfb: Bitstream Charter:style=Regular /usr/share/X11/fonts/Type1/cursor.pfa: Cursor:style=Regular /usr/share/X11/fonts/Type1/UTB_____.pfa: Utopia:style=Bold /usr/share/X11/fonts/Type1/c0583bt_.pfb: Courier 10 Pitch:style=Bold /usr/share/X11/fonts/Type1/UTI_____.pfa: Utopia:style=Italic /usr/share/X11/fonts/Type1/c0582bt_.pfb: Courier 10 Pitch:style=Italic /usr/share/X11/fonts/Type1/c0633bt_.pfb: Bitstream Charter:style=Bold Italic /usr/share/X11/fonts/Type1/c0649bt_.pfb: Bitstream Charter:style=Italic /usr/share/X11/fonts/Type1/c0632bt_.pfb: Bitstream Charter:style=Bold /usr/share/X11/fonts/Type1/UTRG____.pfa: Utopia:style=Regular
Имя шрифта необходимо указывать полностью, например
mixer_text_font=Courier 10 Pitch
Если указанного шрифта нет в системе, будет использован шрифт, установленный в системе по умолчанию.
Если выбранный шрифт не содержит символов, которые есть в тексте надписи, эти символы выведены не будут.
Автоматическое масштабирование текста под размер картинки
В сборке 5.2.709 добавлено автоматическое масштабирование надписей под размер картинки. Эта возможность включена по умолчанию настройкой
mixer_text_autoscale=true
Если один или более из потоков публикуют экран, включается специальный вариант размещения картинок, при этом по умолчанию текст для изображения экрана масштабируется независимо от остальных картинок
mixer_autoscale_desktop=true
Минимальный размер шрифта при масштабировании задается настройкой
mixer_minimal_font_size=1
и по умолчанию составляет 1 пункт.
Отображение имени комнаты (микшера)
В сборке 5.2.770 добавлена возможность отключить отображение имени комнаты, указанного в имени потока при автоматическом добавлении в микшер. Это может быть сделано при помощи настройки
mixer_text_display_room=false
При этом для потока "user1#room1" будет отображаться надпись "user1" (без имени комнаты и спецсимвола).
Отображение заданной метки потока
В сборке 5.2.816 добавлена возможность отображения заданной метки потока. Фактически, для отображения может быть задано произвольное имя, в том числе и с использованием национальных алфавитов.
Метка должна быть указана в имени потока как параметр при публикации, например
session.createStream({ streamName: "test1#m1?label=John Doe", display: localDisplay, ... }).publish();
В этом случае в микшере отобразится значение метки, в том числе и для потоков только с аудио
В метках поддерживаются национальные символы, а также
~!@#№$%^*()-_,.;:[]{}<>/|\
Символ '+' при отображении будет заменен на пробел, т.е. в примере выше можно публиковать поток и с меткой
test1#m1?label=John+Doe
Присвоение или изменение метки потока по REST API
В сборке 5.2.1635 добавлена возможность присвоить метку потока при добавлении в микшер REST API запросом /mixer/add
{ "uri": "mixer://mixer1", "remoteStreamName": "stream1", "streamLabel": "John Doe" }
У потока, который уже добавлен в микшер, метку можно изменить запросом /mixer/set_stream_label
{ "uri":"mixer://m1", "remoteStreamName":"stream1", "streamLabel": "Mr. John Doe" }
или
{ "uri":"mixer://m1", "remoteMediaSessionId":"95bf2be8-f459-4f62-9a7f-c588f33e0ad3", "streamLabel": "Mr. John Doe" }
Метку также можно очистить, если передать пустую строку в качестве streamLabel
{ "uri":"mixer://m1", "remoteMediaSessionId":"95bf2be8-f459-4f62-9a7f-c588f33e0ad3", "streamLabel": "" }
В этом случае будет отображаться имя потока, под которым он опубликован
Расположение надписи
Устаревшая настройка в сборках от 5.2.844 до 5.2.1077
Данная настройка не поддерживается в сборке 5.2.1079 и новее!
В сборке 5.2.844 добавлено управление расположением надписей видео потоков. По умолчанию надпись располагается в левом нижнем углу видео.
Добавлена возможность отображения надписи над видео при помощи настройки
mixer_text_outside_frame=TOP
или под видео
mixer_text_outside_frame=BOTTOM
Расстояние между видео и соответствующей ему надписью можно изменить с помощью настройки
mixer_text_outside_frame_padding=70
Размещение надписей над или под картинкой влияет на расположение картинок и в том случае. если отображение надписей отключено.
Актуальная настройка в сборках 5.2.1079 и новее
В сборке 5.2.1079 для управления расположение подписи кадра в микшере добавлена настройка
mixer_text_align=BOTTOM_LEFT
Возможные значения
Значение | Положение надписи |
---|---|
TOP_LEFT | Слева вверху |
TOP_CENTER | Вверху по центру |
TOP_RIGHT | Справа вверху |
CENTER | По центру кадра |
BOTTOM_LEFT | Слева внизу (по умолчанию) |
BOTTOM_CENTER | Внизу по центру |
BOTTOM_RIGHT | Справа внизу |
EXTERNAL_TOP_CENTER | Над картинкой по центру |
EXTERNAL_BOTTOM_CENTER | Под картинкой по центру |
По умолчанию, подписи располагаются в левом нижнем углу картинки.
Значения EXTERNAL_TOP_CENTER
и EXTERNAL_BOTTOM_CENTER
заменяют настройку mixer_text_outside_frame
. Например, значение
mixer_text_align=EXTERNAL_BOTTOM_CENTER
действует так же, как mixer_text_outside_frame=BOTTOM
Управление индикатором речи
Толщина и расположение
Для рамки индикатора речи можно задавать толщину (по умолчанию 6 пикселей)
mixer_voice_activity_frame_thickness=6
По умолчанию, рамка выводится снаружи картинки потока. Однако, если картинки потоков расположены близко друг к другу, например, при использовании CenterNoPaddingGridLayout
, рамка может затрагивать соседние картинки
В этом случае необходимо включить отображение рамки внутри картинки потока
mixer_voice_activity_frame_position_inner=true
Отображение потоков только с аудио
По умолчанию, если в микшер добавить только аудио из потока, этот поток показывается в отдельной рамке с индикатором речи (см выше). Если необходимо добавить к микшеру звук из потока без отображения отдельного участника (например, для комментирования или озвучки), это можно сделать при помощи настройки
mixer_show_separate_audio_frame=false
До сборки 5.2.965 такой поток должен содержать аудио и видео, и должен быть добавлен в микшер запросом /mixer/add
{ "uri": "mixer://mixer1", "remoteStreamName": "stream_dub", "hasVideo":false, "hasAudio":true }
Начиная со сборки 5.2.965, поток, не содержащий видео, также не будет отображаться при использовании данной настройки
Начиная со сборки 5.2.1359, настройка mixer_show_separate_audio_frame
влияет на отображение потока, если аудио фреймы начинают поступать раньше, чем видео. При настройке по умолчанию в этом случае отобразится рамка с индикатором речи, затем, при получении видео фрейма, отобразится видео. При
mixer_show_separate_audio_frame=false
рамка не будет отображаться до поступления видео фреймов.
Отображение аватаров на потоках только с аудио
В сборке 5.2.1710 добавлена возможность присвоить аудио потоку картинку аватара в формате PNG (с поддержкой прозрачности), JPG или BMP. Картинку можно установить при добавлении потока в микшер запросом /mixer/add
:
{ "uri": "mixer://mixer1", "remoteStreamName": "user2", "hasVideo": false, "hasAudio": true, "avatar": "https://mystorage.com/storage/avatar.png" }
или для потока, уже добавленного в микшер, запросом /mixer/set_stream_avatar
:
{ "uri": "mixer://mixer1", "remoteStreamName": "user2", "avatar": "https://mystorage.com/storage/avatar.png" }
Поддерживаются следующие способы указания картинки:
- HTTP URL:
https://mystorage.com/storage/avatar.png
- file URI:
file:///opt/avatar.png
- локальное расположение файла
/opt/avatar.png
Аудио поток в микшере при этом выглядит так
Если в микшере включено отображение имен потоков, имя аудио потока в этом случае будет размещено там же, где и имя видео потока
Убрать картинку аватара можно запросом /mixer/remove_stream_avatar
:
{ "uri": "mixer://mixer1", "remoteStreamName": "user2" }
В сборке 5.2.1858 добавлена возможность назначать картинки аватаров автоматически, не используя REST API, по имени потока. В этом случае файлы картинок должны быть помещены в каталог
avatar_dir=/usr/local/FlashphonerWebCallServer/avatar
Имя файла должно соответствовать имени потока. Например, к потоку stream1
применится аватар stream1.png
. Если поток был добавлен в микшер автоматически, например stream1#mixer1
, имя микшера не используется, только имя потока до символа #
.
Назначение картинки аватара при помощи REST API запроса /mixer/set_stream_avatar
имеет приоритет над автоматическим назначением картинки
Цвет рамки
В сборке 5.2.741 добавлена возможность управления цветом рамки индикатора речи при помощи настройки
mixer_voice_activity_colour=#FF0000
Цвет может задаваться в виде шестнадцатеричного значения c префиксом # или 0x, в формате #RRGGBB. При настройке, указанных выше, рамка индикатора речи будет красной.
Отображение рамки при тишине в аудио потоке
По умолчанию, при обычном темпе речи выступающего рамка индикатора может мигать, что может быть некомфортно для восприятия. В связи с этим, в сборке 5.2.775 добавлена возможность задать интервал времени, в течение которого рамка индикатора речи продолжит отображаться при тишине в потоке. Эта возможность включается настройкой
mixer_voice_activity_switch_delay=500
В данном случае, рамка будет показываться в течение 500 миллисекунд после наступления тишины.
По умолчанию, интервал установлен в 0, рамка индикатора гаснет без задержки.
Управление фоном микшера
По умолчанию, используется черный фон микшера. В сборке 5.2.645 добавлена возможность указать файл PNG, картинка из которого будет использована в качестве фона. Например. чтобы заменить фон на голубой, подготовьте картинку blue.png и укажите в настройке
mixer_video_background_filename=blue.png
Если путь к файлу не указан, картинка должна располагаться в каталоге /usr/local/FlashphonerWebCallServer/conf. Файл может располагаться и в любом другом каталоге, в этом случае в настройке указывается полный путь к файлу
mixer_video_background_filename=/opt/media/blue.png
Картинка будет масштабирована к разрешению выходного потока микшера
Управление соотношением сторон audio only потоков
По умолчанию, соотношение сторон картинки audio only потока установлено в соответствии с соотношение сторон микшера (16:9)
mixer_audio_only_width=640 mixer_audio_only_height=360 mixer_video_width=1280 mixer_video_height=720
При необходимости, это можно изменить вместе с микшером, например к 4:3
mixer_audio_only_width=640 mixer_audio_only_height=480 mixer_video_width=1280 mixer_video_height=960
Отметим, что настройки соотношения сторон картинки audio only потока меняется только при перезапуске сервера.
Поддержка многопоточности и оптимизация для работы в условиях больших нагрузок
В сборке 5.2.793 была добавлена возможность многопоточного микширования для оптимизации работы микшера в условиях большого количества участников. Эта возможность включается настройками
mixer_type=MULTI_THREADED_NATIVE mixer_mcu_multithreaded_mix=true
Количество процессорных потоков для микширования аудио и видео задается следующими настройками
mixer_audio_threads=10 mixer_video_threads=4
Как правило, при использовании MCU микшер кодирует один видео поток и множество аудио, по два потока на каждого участника плюс один общий аудио поток. Поэтому рекомендуется задавать число процессорных потоков для кодирования аудио больше, чем для кодирования видео. Кроме того, если в случае MCU микшера в выходном потоке видны фризы, рекомендуется включить многопоточную доставку результата микширования в основной движок сервера, для дальнейшей раздачи подписчикам
mixer_mcu_multithreaded_delivery=true
Если количество участников меньше, чем заданное количество потоков микширования (например, 3 участника), для микширования будет использоваться один процессорный поток.
Тонкая настройка микшера реального времени
Тонкие настройки микшера реального времени регулируются следующими параметрами
Параметр | Значение по умолчанию | Описание |
---|---|---|
mixer_audio_silence_threshold | -50.00 | Уровень тишины аудиосоставляющей входящего потока, в Дб |
mixer_debug_mode | false | Добавление отладочной информации к подписи под картинкой потока |
mixer_in_buffering_ms | 200 | Размер буфера видеосоставляющей входящего потока, в миллисекундах |
mixer_incoming_time_rate_lower_threshold | 0.95 | Граница отставания времени входящего потока от времени микшера, в относительных единицах |
mixer_incoming_time_rate_upper_threshold | 1.05 | Граница опережения временем входящего потока времени микшера, в относительных единицах |
mixer_video_stable_fps_threshold | 15 | Граница FPS входящего потока, для потоков с низким FPS буферизация видео составляющей не будет запускаться |
audio_mixer_max_delay | 300 | Максимальное время, в течение которого могут отсутствовать аудио пакеты во входящем потоке, в миллисекундах, по истечении этого времени поток не микшируется до поступления новых медиаданных |
Тестирование
1. Для теста используем
- демо-сервер demo.flashphoner.com;
- браузер Chrome;
- веб-приложение MCU Client для организации конференции.
2. Откройте страницу веб-приложения MCU Client. Введите имя пользователя user1 и имя комнаты room1
2. Нажмите кнопку Join. Будет опубликован поток с Вашей веб-камеры и добавлен в микшер, затем отобразится выходной поток микшера без аудио с Вашего микрофона
3. В другой вкладке браузера, в другом браузере или на другом ПК откройте страницу приложения MCU Client. Введите имя пользователя user2 и имя комнаты room1
4. Нажмите кнопку Join. Будет опубликован поток с Вашей веб-камеры и добавлен в микшер от имени пользователя user2, затем отобразится выходной поток микшера с потоками пользователей, но без аудио от user2
5. У пользователя user1 также играется два видеопотока в микшере и аудио от user2
6. Нажмите Leave для выхода из комнаты в обоих вкладках/браузерах
Последовательность выполнения операций
Последовательность выполнения операций при создании конференции на базе микшера реального времени приведена в описании примера MCU Client.
Рекомендации для входящих потоков
При задержках во входящем потоке от одного из участников, в микшере реального времени этот поток будет останавливаться. Для минимизации задержек во входящих потоках, рекомендуется:
1. Для RTMP потоков подбирать параметры кодирования таким образом, чтобы:
- производительности клиентского кодировщика было достаточно для своевременной передачи кадров потока
- разрешение и битрейт потока помещались в канал публикации от клиента до сервера
2. Для WebRTC потоков не поднимать минимальный порог битрейта видео выше, чем задан в настройке сервера webrtc_cc_min_bitrate
. По умолчанию, нижняя граница битрейта установлена в 30 кбит/с
webrtc_cc_min_bitrate=30000
Это даст возможность браузеру публикующего клиента адаптировать поток к ухудшениям качества канала. При снижении битрейта качество картинки также может снизиться, но фризов в потоке участника в этом случае не будет.
Добавление одного потока в несколько микшеров
Начиная со сборки 5.2.732 один поток может быть добавлен в несколько микшеров реального времени одновременно. Отметим, что для этого должен быть включен микшер реального времени
mixer_realtime=true
и отключен собственный losless видеопроцессор
mixer_lossless_video_processor_enabled=false
Известные проблемы
1. При включении собственного losless видеопроцессора функции реального времени отключаются, при этом входящие потоки перестают играть
Симптомы: потоки, добавленные в микшер, перестают играть
Решение: не использовать собственный losless видеопроцессор с микшером реального времени
mixer_lossless_video_processor_enabled=false
2. Для отображения надписей в микшере может потребоваться установка библиотеки fontconfig
Симптомы: потоки не добавляются в микшер, в серверный лог выводится исключение
09:17:11,756 ERROR MixerAgent - MIXER-AGENT-mixer://mixervmixdr52-9d46cd04-5867-4d74-a9d9-baf67f74e7d2 Mixer closed due to error java.lang.InternalError: java.lang.reflect.InvocationTargetException at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:86) at java.base/java.security.AccessController.doPrivileged(AccessController.java:310) at java.desktop/sun.font.FontManagerFactory.getInstance(FontManagerFactory.java:74) at java.desktop/sun.font.SunFontManager.getInstance(SunFontManager.java:247) at java.desktop/sun.font.FontDesignMetrics.getMetrics(FontDesignMetrics.java:265) at java.desktop/java.awt.Font.getStringBounds(Font.java:2606) at java.desktop/java.awt.Font.getStringBounds(Font.java:2516) at com.flashphoner.media.N.A.A.A(Unknown Source) at com.flashphoner.media.mixer.video.presentation.Canvas.computeTextScales(Unknown Source) at com.flashphoner.media.mixer.video.presentation.Canvas.writeNative(Unknown Source) at com.flashphoner.media.N.A.A(Unknown Source) at com.flashphoner.media.N.D.D(Unknown Source) at com.flashphoner.media.N.D.A(Unknown Source) at com.flashphoner.server.remote.B.B.Г™(Unknown Source) at com.flashphoner.server.remote.B.B.run(Unknown Source) Caused by: java.lang.reflect.InvocationTargetException at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500) at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481) at java.desktop/sun.font.FontManagerFactory$1.run(FontManagerFactory.java:84) ... 14 more Caused by: java.lang.NullPointerException at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262) at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225) at java.desktop/sun.awt.FontConfiguration.init(FontConfiguration.java:107) at java.desktop/sun.awt.X11FontManager.createFontConfiguration(X11FontManager.java:719) at java.desktop/sun.font.SunFontManager$2.run(SunFontManager.java:367) at java.base/java.security.AccessController.doPrivileged(AccessController.java:310) at java.desktop/sun.font.SunFontManager.<init>(SunFontManager.java:312) at java.desktop/sun.awt.FcFontManager.<init>(FcFontManager.java:35) at java.desktop/sun.awt.X11FontManager.<init>(X11FontManager.java:56) ... 20 more
Решение: установить библиотеку fontconfig
sudo yum install -y fontconfig
3. При большом количестве участников в микшере, имя участника может отрисовываться поверх рамки индикатора речи
Симптомы: при небольшом размере картинки участника (например, в режиме публикации экрана в микшер) имя участника отображается поверх рамки индикатора речи
Решение: включить отрисовку рамки индикатора речи внутри картинки участника и уменьшить толщину рамки
mixer_voice_activity_frame_position_inner=true mixer_voice_activity_frame_thickness=2
4. При публикации в микшер потока, необходимо избегать B-фреймов в потоке, либо увеличивать буфер на входе микшера
Симптомы: при публикации в микшер потока, закодированного по профилю Main с B-фреймами, выходной поток микшера играет не плавно, есть короткие фризы с пропаданием звука
Решение:
a) кодировать поток без B-фреймов (предпочтительно)
b) увеличить размер буфера на входе микшера (может дать дополнительную задержку)
mixer_in_buffering_ms=600
5. Публикация видео 60 FPS в микшер дает дополнительную нагрузку на CPU и системную память
Симптомы: возрастание нагрузки на CPU, расход системной памяти (не Java heap) при публикации в микшер потока 60 FPS
Решение: публиковать в микшер потоки 30 FPS либо использовать более мощный сервер
6. При большом количестве участников надписи могут подергиваться
Симптомы: при большом (более 10) количестве участников в микшере надписи на картинках участников подергиваются
Решение: применить следующие настройки
mixer_text_bulk_write=false mixer_text_bulk_write_with_buffer=false
7. При одновременном разговоре большого количества участников некоторых участников слышно хуже, чем других. Проблема характерна для микширования WebRTC потоков, и проявляется в любых решениях, использующих WebRTC и микширование звука, например, в Discord: чем больше данных приходится кодировать в один поток, тем больше семплов аудио может быть отброшено из-за фиксированной частоты дискретизации.
Симптомы: при одновременном разговоре трех и более участников одного из них слышно хуже, чем двух других
Решение: увеличить битрейт публикации звука и таким образом отправить больше данных на одного участника
constraints: { audio: { bitrate: 128000 } }
и увеличить битрейт кодирования в Opus на сервере
opus.encoder.bitrate=128000
8. При остановке трафика во входящем потоке, этот поток больше не будет кодироваться в микшере
Симптомы: при остановке трафика, например, при сворачивании окна приложения, с которого захватывается поток скриншаринга, в микшере этот поток фризит без восстановления
Решение: снизить минимальный порог FPS для потоков, входящих в микшер
mixer_video_stable_fps_threshold=0
9. При снижении битрейта или fps публикации битрейт потока микшера может быть нестабильным
Симптомы: при снижении битрейта и/или fps входящего потока битрейт выходного потока микшера становится нестабильным
Решение: обновить WCS до сборки 5.2.1843 или новее и включить настройку
h264_encoder_filler_data_padding=true
10. Для потока, публикуемого в микшер с потерями на канале, в аудио в микшере могут быть слышны щелчки
Симптомы: щелчки и микрофризы потока в микшере
Решение: увеличить глубину буфера для входящих потоков микшера
mixer_in_buffering_ms=1000