...
Code Block | ||
---|---|---|
| ||
test1#m1?label=John+Doe |
Расположение надписи
Устаревшая настройка в сборках от 5.2.844 до 5.2.1077
Warning |
---|
Данная настройка не поддерживается в сборке 5.2.1079 и новее! |
В сборке 5.2.844 добавлено управление расположением надписей видео потоков. По умолчанию надпись располагается в левом нижнем углу видео.
Добавлена возможность отображения надписи над видео при помощи настройки
Code Block | ||
---|---|---|
| ||
mixer_text_outside_frame=TOP |
или под видео
Code Block | ||
---|---|---|
| ||
mixer_text_outside_frame=BOTTOM |
Расстояние между видео и соответствующей ему надписью можно изменить с помощью настройки
Code Block | ||
---|---|---|
| ||
mixer_text_outside_frame_padding=70 |
Размещение надписей над или под картинкой влияет на расположение картинок и в том случае. если отображение надписей отключено.
Актуальная настройка в сборках 5.2.1079 и новее
В сборке 5.2.1079 для управления расположение подписи кадра в микшере добавлена настройка
Code Block | ||
---|---|---|
| ||
mixer_text_align=BOTTOM_LEFT |
Возможные значения
...
По умолчанию, подписи располагаются в левом нижнем углу картинки.
...
Присвоение или изменение метки потока по REST API
В сборке 5.2.1635 добавлена возможность присвоить метку потока при добавлении в микшер REST API запросом /mixer/add
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri": "mixer://mixer1",
"remoteStreamName": "stream1",
"streamLabel": "John Doe"
} |
У потока, который уже добавлен в микшер, метку можно изменить запросом /mixer/set_stream_label
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri":"mixer://m1",
"remoteStreamName":"stream1",
"streamLabel": "Mr. John Doe"
} |
или
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri":"mixer://m1",
"remoteMediaSessionId":"95bf2be8-f459-4f62-9a7f-c588f33e0ad3",
"streamLabel": "Mr. John Doe"
} |
Метку также можно очистить, если передать пустую строку в качестве streamLabel
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri":"mixer://m1",
"remoteMediaSessionId":"95bf2be8-f459-4f62-9a7f-c588f33e0ad3",
"streamLabel": ""
} |
В этом случае будет отображаться имя потока, под которым он опубликован
Расположение надписи
Устаревшая настройка в сборках от 5.2.844 до 5.2.1077
Warning |
---|
Данная настройка не поддерживается в сборке 5.2.1079 и новее! |
В сборке 5.2.844 добавлено управление расположением надписей видео потоков. По умолчанию надпись располагается в левом нижнем углу видео.
Добавлена возможность отображения надписи над видео при помощи настройки
Code Block | ||
---|---|---|
| ||
mixer_text_align=EXTERNAL_BOTTOM_CENTER |
...
outside_frame= |
...
TOP |
Управление индикатором речи
Толщина и расположение
Для рамки индикатора речи можно задавать толщину (по умолчанию 6 пикселей)
или под видео
Code Block | ||
---|---|---|
| ||
mixer_voicetext_activityoutside_frame_thickness=6 |
По умолчанию, рамка выводится снаружи картинки потока. Однако, если картинки потоков расположены близко друг к другу, например, при использовании CenterNoPaddingGridLayout
, рамка может затрагивать соседние картинки
В этом случае необходимо включить отображение рамки внутри картинки потока
Code Block | ||
---|---|---|
| ||
mixer_voice_activity_frame_position_inner=true |
Отображение потоков только с аудио
По умолчанию, если в микшер добавить только аудио из потока, этот поток показывается в отдельной рамке с индикатором речи (см выше). Если необходимо добавить к микшеру звук из потока без отображения отдельного участника (например, для комментирования или озвучки), это можно сделать при помощи настройки
Code Block | ||
---|---|---|
| ||
mixer_show_separate_audio_frame=false |
...
BOTTOM |
Расстояние между видео и соответствующей ему надписью можно изменить с помощью настройки
Code Block | ||
---|---|---|
| ||
mixer_text_outside_frame_padding=70 |
Размещение надписей над или под картинкой влияет на расположение картинок и в том случае. если отображение надписей отключено.
Актуальная настройка в сборках 5.2.1079 и новее
В сборке 5.2.1079 для управления расположение подписи кадра в микшере добавлена настройка
Code Block | ||
---|---|---|
| ||
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
. Например, значение
Code Block | ||
---|---|---|
| ||
mixer_text_align=EXTERNAL_BOTTOM_CENTER |
действует так же, как mixer_text_outside_frame=BOTTOM
Управление индикатором речи
Толщина и расположение
Для рамки индикатора речи можно задавать толщину (по умолчанию 6 пикселей)
Code Block | ||
---|---|---|
| ||
mixer_voice_activity_frame_thickness=6 |
По умолчанию, рамка выводится снаружи картинки потока. Однако, если картинки потоков расположены близко друг к другу, например, при использовании CenterNoPaddingGridLayout
, рамка может затрагивать соседние картинки
В этом случае необходимо включить отображение рамки внутри картинки потока
Code Block | ||
---|---|---|
| ||
mixer_voice_activity_frame_position_inner=true |
Отображение потоков только с аудио
По умолчанию, если в микшер добавить только аудио из потока, этот поток показывается в отдельной рамке с индикатором речи (см выше). Если необходимо добавить к микшеру звук из потока без отображения отдельного участника (например, для комментирования или озвучки), это можно сделать при помощи настройки
Code Block | ||
---|---|---|
| ||
mixer_show_separate_audio_frame=false |
До сборки 5.2.965 такой поток должен содержать аудио и видео, и должен быть добавлен в микшер запросом /mixer/add
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri": "mixer://mixer1",
"remoteStreamName": "stream_dub",
"hasVideo":false,
"hasAudio":true
} |
Начиная со сборки 5.2.965, поток, не содержащий видео, также не будет отображаться при использовании данной настройки
Начиная со сборки 5.2.1359, настройка mixer_show_separate_audio_frame
влияет на отображение потока, если аудио фреймы начинают поступать раньше, чем видео. При настройке по умолчанию в этом случае отобразится рамка с индикатором речи, затем, при получении видео фрейма, отобразится видео. При
Code Block | ||
---|---|---|
| ||
mixer_show_separate_audio_frame=false |
рамка не будет отображаться до поступления видео фреймов.
Отображение аватаров на потоках только с аудио
Warning |
---|
В сборках 5.2.1710 - 5.2.1725 данная возможность поддерживается только на Ubuntu 20.04 и других системах с glibc 2.31 и новее Начиная со сборки 5.2.1727, данная возможность поддерживается в Centos 7.6 (glibc 2.17) и более новых системах |
В сборке 5.2.1710 добавлена возможность присвоить аудио потоку картинку аватара в формате PNG (с поддержкой прозрачности), JPG или BMP. Картинку можно установить при добавлении потока в микшер запросом /mixer/add
:
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri": "mixer://mixer1",
"remoteStreamName": "user2",
"hasVideo": false,
"hasAudio": true,
"avatar": "https://mystorage.com/storage/avatar.png"
} |
или для потока, уже добавленного в микшер, запросом /mixer/set_stream_avatar
:
Code Block | ||||
---|---|---|---|---|
| ||||
{
"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
:
Code Block | ||||
---|---|---|---|---|
| ||||
{
"uri": "mixer://mixer1",
"remoteStreamName": "stream_dub",
"hasVideo":false,
"hasAudio":true
} |
...
user2"
} |
В сборке 5.2.1858 добавлена возможность назначать картинки аватаров автоматически, не используя REST API, по имени потока. В этом случае файлы картинок должны быть помещены в каталог
Code Block | ||
---|---|---|
| ||
avatar_dir=/usr/local/FlashphonerWebCallServer/avatar |
Имя файла должно соответствовать имени потока. Например, к потоку stream1
применится аватар stream1.png
. Если поток был добавлен в микшер автоматически, например stream1#mixer1
, имя микшера не используется, только имя потока до символа #
.
Warning |
---|
Назначение картинки аватара при помощи REST API запроса |
Цвет рамки
В сборке 5.2.741 добавлена возможность управления цветом рамки индикатора речи при помощи настройки
...
Code Block | ||
---|---|---|
| ||
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
Code Block | ||||
---|---|---|---|---|
| ||||
sudo yum install -y fontconfig |
3. При большом количестве участников в микшере, имя участника может отрисовываться поверх рамки индикатора речи
Симптомы: при небольшом размере картинки участника (например, в режиме публикации экрана в микшер) имя участника отображается поверх рамки индикатора речи
...
sun.awt.X11FontManager.<init>(X11FontManager.java:56)
... 20 more |
Решение: установить библиотеку fontconfig
Code Block | ||||
---|---|---|---|---|
| ||||
sudo yum install -y fontconfig |
3. При большом количестве участников в микшере, имя участника может отрисовываться поверх рамки индикатора речи
Симптомы: при небольшом размере картинки участника (например, в режиме публикации экрана в микшер) имя участника отображается поверх рамки индикатора речи
Решение: включить отрисовку рамки индикатора речи внутри картинки участника и уменьшить толщину рамки
Code Block | ||
---|---|---|
| ||
mixer_voice_activity_frame_position_inner=true
mixer_voice_activity_frame_thickness=2 |
4. При публикации в микшер потока, необходимо избегать B-фреймов в потоке, либо увеличивать буфер на входе микшера
Симптомы: при публикации в микшер потока, закодированного по профилю Main с B-фреймами, выходной поток микшера играет не плавно, есть короткие фризы с пропаданием звука
Решение:
a) кодировать поток без B-фреймов (предпочтительно)
b) увеличить размер буфера на входе микшера (может дать дополнительную задержку)
Code Block | ||
---|---|---|
| ||
mixer_voicein_activity_frame_position_inner=true mixer_voice_activity_frame_thickness=2 |
4. При публикации в микшер потока, необходимо избегать B-фреймов в потоке, либо увеличивать буфер на входе микшера
Симптомы: при публикации в микшер потока, закодированного по профилю Main с B-фреймами, выходной поток микшера играет не плавно, есть короткие фризы с пропаданием звука
Решение:
a) кодировать поток без B-фреймов (предпочтительно)
b) увеличить размер буфера на входе микшера (может дать дополнительную задержку)
buffering_ms=600 |
5. Публикация видео 60 FPS в микшер дает дополнительную нагрузку на CPU и системную память
Симптомы: возрастание нагрузки на CPU, расход системной памяти (не Java heap) при публикации в микшер потока 60 FPS
Решение: публиковать в микшер потоки 30 FPS либо использовать более мощный сервер
6. При большом количестве участников надписи могут подергиваться
Симптомы: при большом (более 10) количестве участников в микшере надписи на картинках участников подергиваются
Решение: применить следующие настройки
Code Block | ||
---|---|---|
| ||
mixer_in_buffering_ms=600 |
5. Публикация видео 60 FPS в микшер дает дополнительную нагрузку на CPU и системную память
Симптомы: возрастание нагрузки на CPU, расход системной памяти (не Java heap) при публикации в микшер потока 60 FPS
Решение: публиковать в микшер потоки 30 FPS либо использовать более мощный сервер
6. При большом количестве участников надписи могут подергиваться
Симптомы: при большом (более 10) количестве участников в микшере надписи на картинках участников подергиваются
Решение: применить следующие настройки
Code Block | ||
---|---|---|
| ||
mixer_text_bulk_write=false
mixer_text_bulk_write_with_buffer=false |
7. При одновременном разговоре большого количества участников некоторых участников слышно хуже, чем других. Проблема характерна для микширования WebRTC потоков, и проявляется в любых решениях, использующих WebRTC и микширование звука, например, в Discord: чем больше данных приходится кодировать в один поток, тем больше семплов аудио может быть отброшено из-за фиксированной частоты дискретизации.
Симптомы: при одновременном разговоре трех и более участников одного из них слышно хуже, чем двух других
Решение: увеличить битрейт публикации звука и таким образом отправить больше данных на одного участника
Code Block | ||||
---|---|---|---|---|
| ||||
constraints: {
audio: {
bitrate: 128000
}
} |
и увеличить битрейт кодирования в Opus на сервере
Code Block | ||
---|---|---|
| ||
opus.encoder.bitrate=128000_text_bulk_write=false mixer_text_bulk_write_with_buffer=false |
7. При одновременном разговоре большого количества участников некоторых участников слышно хуже, чем других. Проблема характерна для микширования WebRTC потоков, и проявляется в любых решениях, использующих WebRTC и микширование звука, например, в Discord: чем больше данных приходится кодировать в один поток, тем больше семплов аудио может быть отброшено из-за фиксированной частоты дискретизации.
Симптомы: при одновременном разговоре трех и более участников одного из них слышно хуже, чем двух других
Решение: увеличить битрейт публикации звука и таким образом отправить больше данных на одного участника
Code Block | ||||
---|---|---|---|---|
| ||||
constraints: {
audio: {
bitrate: 128000
}
} |
и увеличить битрейт кодирования в Opus на сервере
Code Block | ||
---|---|---|
| ||
opus.encoder.bitrate=128000 |
8. При остановке трафика во входящем потоке, этот поток больше не будет кодироваться в микшере
Симптомы: при остановке трафика, например, при сворачивании окна приложения, с которого захватывается поток скриншаринга, в микшере этот поток фризит без восстановления
Решение: снизить минимальный порог FPS для потоков, входящих в микшер
Code Block | ||
---|---|---|
| ||
mixer_video_stable_fps_threshold=0 |
9. При снижении битрейта или fps публикации битрейт потока микшера может быть нестабильным
Симптомы: при снижении битрейта и/или fps входящего потока битрейт выходного потока микшера становится нестабильным
Решение: обновить WCS до сборки 5.2.1843 или новее и включить настройку
Code Block | ||
---|---|---|
| ||
h264_encoder_filler_data_padding=true |