Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 18 Next »

В сборке 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_top3Обрезка текста сверху
mixer_text_padding_bottom5Дополнение фона снизу
mixer_text_padding_left5Дополнение фона слева
mixer_text_padding_right4Дополнение фона справа
mixer_text_padding_top5Дополнение фона сверху

Цвет текста, фон и прозрачность

В сборке 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" (без имени комнаты и спецсимвола).

Управление индикатором речи

Для рамки индикатора речи можно задавать толщину (по умолчанию 6 пикселей)

mixer_voice_activity_frame_thickness=6

По умолчанию, рамка выводится снаружи картинки потока. Однако, если картинки потоков расположены близко друг к другу, например, при использовании CenterNoPaddingGridLayout, рамка может затрагивать соседние картинки

В этом случае необходимо включить отображение рамки внутри картинки потока

mixer_voice_activity_frame_position_inner=true

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

mixer_show_separate_audio_frame=false

В сборке 5.2.741 добавлена возможность управления цветом рамки индикатора речи при помощи настройки

mixer_voice_activity_colour=#FF0000

Цвет может задаваться в виде шестнадцатеричного значения c префиксом # или 0x, в формате #RRGGBB. При настройке, указанных выше, рамка индикатора речи будет красной.

Управление фоном микшера

По умолчанию, используется черный фон микшера. В сборке 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 потока меняется только при перезапуске сервера.

Тонкая настройка микшера реального времени

Тонкие настройки микшера реального времени регулируются следующими параметрами

Параметр

Значение по умолчанию

Описание

mixer_audio_silence_threshold-50.00Уровень тишины аудиосоставляющей входящего потока, в Дб
mixer_debug_modefalseДобавление отладочной информации к подписи под картинкой потока

mixer_in_buffering_ms

200

Размер буфера видеосоставляющей входящего потока, в миллисекундах

mixer_incoming_time_rate_lower_threshold0.95Граница отставания времени входящего потока от времени микшера, в относительных единицах
mixer_incoming_time_rate_upper_threshold1.05Граница опережения временем входящего потока времени микшера, в относительных единицах
mixer_video_stable_fps_threshold15Граница FPS входящего потока, для потоков с низким FPS буферизация видео составляющей не будет запускаться

Тестирование

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

2. При большом количестве участников в микшере, имя участника может отрисовываться поверх рамки индикатора речи

Симптомы: при небольшом размере картинки участника (например, в режиме публикации экрана в микшер) имя участника отображается поверх рамки индикатора речи

Решение: включить отрисовку рамки индикатора речи внутри картинки участника и уменьшить толщину рамки

mixer_voice_activity_frame_position_inner=true
mixer_voice_activity_frame_thickness=2
  • No labels