MinBitrate & MaxBitrate

SergeyP

Member
Добрый день,
Никак не могу подобрать оптимальные значения для параметров webrtc_cc_min_bitrate и webrtc_cc_max_bitrate.
Если поставить слишком высокое значение в webrtc_cc_min_bitrate, например 3Мбит/с для трансляций 320х240, то fps некоторых пользователей проседает до пары кадров в секунду, подозреваю из-за их слабого канала.
Если поставить слишком низкое значение, например 1Мбит/с или ниже, то качество видео становится стабильнее для большинства пользователей, но появляются проблемы со звуком - трески, шуршание, странное эхо.
И самое главное, не смог найти ответ на вопрос, параметры webrtc_cc_*_bitrate задают ограничения индивидуально для видео и аудио или для их суммарного трафика?
У вас случайно нет инструкции, как правильно настроить эти параметры, чтобы у пользователей с хорошим интернетом было хорошее качество видео и аудио, если интернет некачественный то чтобы качество звука и видео понижались, но чтобы ftp в обоих случаях оставался приемлимым?

Я использовал некоторые советы с форума по улучшению качества озвука для кодека Opus, а также другие оптимизации.
Спасибо!

Моя конфигурация сервера:
Code:
ip                     =178.118.210.37
ip_local               =178.118.210.37
port_from              =30000
port_to                =31000
media_port_from        =31001
media_port_to          =64000
waiting_answer         =60
user_agent             =Flashphoner/1.0
balance_header         =balance
cost_header            =cost
video_enabled          =true
domain                 =
outbound_proxy         =
outbound_port          =
log_level              =5
enable_context_logs    =false
rtp_activity_detecting =true,60
sip_msg_listener       =com.flashphoner.sdk.sip.ChangeCallIdListener
call_record_listener   =com.flashphoner.server.client.DefaultCallRecordListener
dtmf                         =rfc2833
auto_login_url         =/usr/local/FlashphonerWebCallServer/conf/account.xml
get_callee_url         =/usr/local/FlashphonerWebCallServer/conf/callee.xml
codecs                   =opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,vp8,h264,flv,mpv
codecs_exclude_sip       =mpeg4-generic,flv,mpv
codecs_exclude_streaming =flv,telephone-event
codecs_exclude_sip_rtmp  =opus,g729,g722,mpeg4-generic,vp8,mpv
on_record_hook_script  =on_record_hook.sh
rtmp_transponder_stream_name_prefix =rtmp_
ws.port                 =8080
wss.port                =8443
wss.keystore.password   =password
wss.cert.password       =password
rtmp.port               =1935
rtmfp.port              =1935
keep_alive.algorithm       =HIGH_LEVEL
keep_alive.peer_interval   =2000
keep_alive.server_interval =5000
keep_alive.probes          =10
video_reliable          =partial
audio_reliable          =partial
audio_frames_per_packet =6
burst_avoidance_count   =100
flush_audio_interval    =80
flush_video_interval    =0
#The part below is moved from server.properties...
#Config

ws.port                 =8080

wss.port                =8443
#File will be located in conf directory
wss.keystore.password   =password
wss.cert.password       =password

rtmp.port               =1935
rtmfp.port                       =1935

#keep_alive_algorithm may be INTERNAL, NONE, HIGH_LEVEL
keep_alive.algorithm       =HIGH_LEVEL
keep_alive.peer_interval   =2000
keep_alive.server_interval =5000
keep_alive.probes          =10


#Reliability: on, partial, off
video_reliable          =partial
audio_reliable          =partial

audio_frames_per_packet =6
burst_avoidance_count   =100
flush_audio_interval    =80
flush_video_interval    =0

hls_server_enabled=true


######### CUSTOM CONFIGS FROM HERE ############

record_streams = false

webrtc_cc_min_bitrate=1000000
webrtc_cc_max_bitrate=3000000

opus_formats=maxplaybackrate=48000,sprop-maxcapturerate=48000,maxaveragebitrate=500000

# logging
enable_extended_logging = true
client_log_level = INFO
keep_extended_logs_max_days=1

# https://bit.ly/2wxdGK1
stun_freshness_timeout=1000000000
# https://bit.ly/2os22vB
webrtc_cc2_bitrate_overuse_event_threshold=1

# https://bit.ly/2wLmImG
webrtc_cc2_twcc=false

# https://docs.flashphoner.com/display/WCS5EN/Server+tuning+recommendations
rtp_receive_buffer_size=131072
rtp_send_buffer_size =131072
 

Max

Administrator
Staff member
Добрый день.

Настройка webrtc_cc_min_bitrate применяется только для видео и применяется глобально для всего сервера.
Настройки webrtc_cc_min_bitrate и webrtc_cc_max_bitrate задают диапазон, в котором WCS сервер может воздействовать на битрейт браузера.
WCS отправляет браузеру REMB пакеты (команды управления битрейтом).
И если например задан webrtc_cc_min_bitrate=30000, то WCS сервер не будет отправлять команды на понижение битрейта ниже 30 kbps.
Однако это не означает что сам браузер не понизит битрейт в соответствии со своими алгоритмами или особенностями.

Поэтому, если вы задаете min битрейт 1Mbps, WCS не шлет команд на понижение даже если такое понижение необходимо.
Попробуйте убрать эту настройку совсем или понизить до 30000 (стандартное значение).
Пропадут ли шумы аудио в этом случае?
Code:
opus_formats=maxplaybackrate=48000,sprop-maxcapturerate=48000,maxaveragebitrate=500000
Эту настройку лучше убрать.
И выяснить что будет с шумами аудио без нее.
Попробуйте проверить, есть ли шум в аудио при стандартных настройках сервера.
Как тестируете?
Можно ли воспроизвести проблемы с аудио при использовании стандартного примера Two Way Streaming? В каком браузере?
 

SergeyP

Member
Мы тестировали на триальной лицензией со стандартными настройками (битрейт 30К-10М), во всех интересных нам браузерах все было в порядке и качество видео/аудио было приемлимое. Потом мы выкатили видеочат на прод для реальных пользователей и тут всплыли всякие разные проблемы у отдельных групп пользователей.
Две крупные проблемы в дефолтными настройками:
1) Ужасное качество звука, квакание, треск, пропадание звука
2) При статичном изображении все нормально, как только начинается движение и изображение начинало рассыпаться на крупные пиксели

Текущая конфигурация (см. первый пост) - это результат применения советов, найденных тут же на форуме.

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

Удалить параметр opus_formats я могу конечно, но все вернется к тому что было - еще худшему звуку, разве нет? И каким образом понижение webrtc_cc_min_bitrate до 30Кбит/с может решить проблемы звука, если в том же сообщении вы написали что webrtc_cc_min_bitrate влияет только на видеоизображение? Ширины канала у нас хватает.

Повышение webrtc_cc_min_bitrate с 30Кбит/с до 1Мбит/с решило вопрос качества изображения, при движении в видеоряде уже не ухудшается качество (ни на h264, ни на vp8). Но у некоторых пользователей при этом стало недостаточное количество кадров в секунду, выпадают отдельные кадры и проигрывается рывками, а у отдельных пользователей изображение вообще зависает и меняется раз в несколько секунд по кадру. Второй мой вопрос - что можно еще попробовать при таких симптомах? Как диагностировать проблему этих пользователей? У большинства пользователей видеоизображение приемлимого качества с нормальным fps.

При любых проблемах рекомендуем пользователям использовать браузер Chrome, но это не меняет ситуацию для них.
У нас установлен TURN сервер по инструкции.
Буду рад любым советам как можно диагностировать озвученные проблемы у конкретных пользователей.
 

Max

Administrator
Staff member
1 Mbps также может быть завышен для конкретного пользователя.
Попробуйте уменьшить до 300-500 kbps и далее до 100-200 kbps

И каким образом понижение webrtc_cc_min_bitrate до 30Кбит/с может решить проблемы звука, если в том же сообщении вы написали что webrtc_cc_min_bitrate влияет только на видеоизображение?
Дело в том, что если реальный канал связи пользователя с сервером перегружен, то будут сбрасываться UDP пакеты.
Если канал перегружен видео, могут сбрасываться аудио UDP пакеты и наоборот.
Поэтому в отсутствии перегрузки канала должны быть минимальные потери и наилучшее качество и на аудио и на видео.

Второй мой вопрос - что можно еще попробовать при таких симптомах?
Сколько реальной RAM памяти на сервере?
И какие настройки в конфиге WCS_HOME/conf/wcs-core.properties
https://docs.flashphoner.com/displa...#Servertuningrecommendations-Heapmemorytuning
Покажите лог WCS_HOME/gc-core.log
Нет ли в нем записей Full GC.

Как диагностировать проблему этих пользователей?
https://docs.flashphoner.com/display/WCS5EN/Release+notes
В последних сборках 5.1.x, начиная с 3506 была добавлена возможность включения отладчика на сессии отдельного пользователя.
Включите отладчик на пользователя у которого есть проблемы с воспроизведением или публикацией потока и пришлите логи на support@flashphoner.com
Тогда сможем проанализировать и посоветовать способы решения.
Документация по включению отладчика через REST API здесь.
 

SergeyP

Member
Уменьшил webrtc_cc_min_bitrate до 500Кбпс, потом до 400. С подвисанием видеоизображения пока проблем не решило, буду уменьшать еще пока на качество не начнет влиять.

На сервере 64Гб ОЗУ, приложению выделено 16Гб, в принципе если нужно могу выделить еще.
Code:
[root@server]# free
              total        used        free      shared  buff/cache   available
Mem:       65698384    18206716    22168492     3253548    25323176    43607620
Swap:      16777212           0    16777212
wcs-core.properties выглядит так:
Code:
### SERVER OPTIONS ###
# Set this property to false to disable session debug
-DsessionDebugEnabled=false
# Disable SSLv3
-Djdk.tls.client.protocols="TLSv1,TLSv1.1,TLSv1.2"

### JVM OPTIONS ###
#-Xcheck:jni
-Xms16g -Xmx16g

# Can be a better GC setting to avoid long pauses
-XX:+UseConcMarkSweepGC -XX:NewSize=1024m
#-XX:+CMSIncrementalMode
#-XX:+UseParNewGC"

#Disable heuristic rules
-XX:+UseCMSInitiatingOccupancyOnly
#Reduce Old Gen threshold
-XX:CMSInitiatingOccupancyFraction=70

# Uncomment to fix multicast crosstalk problem when streams share multicast port
-Djava.net.preferIPv4Stack=true

# Default monitoring port is 50999. Make sure the port is closed on firewall. Use ssh tunel for the monitoring.
-Dcom.sun.management.jmxremote=true
-Dcom.sun.management.jmxremote.local.only=false
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.port=50999
-Djava.rmi.server.hostname=localhost

-XX:ErrorFile=/usr/local/FlashphonerWebCallServer/logs/error%p.log
-XX:+PrintGCDateStamps
-XX:+PrintGCDetails
-Xloggc:/usr/local/FlashphonerWebCallServer/logs/gc-core-
# Use System.gc() concurrently in CMS
-XX:+ExplicitGCInvokesConcurrent
# Disable System.gc() for RMI, for 10000 hours
-Dsun.rmi.dgc.client.gcInterval=36000000000
-Dsun.rmi.dgc.server.gcInterval=36000000000
Приаттачил логи сборщика мусора за полные сутки включая прайм-тайм, не заметил там полной сборки, может вы что-нибудь заметите.
 

Attachments

Max

Administrator
Staff member
Пожалуйста, предоставьте нам SSH доступ к Вашему серверу на support@flashphoner.com. Наши специалисты проверят настройки и посмотрят, что можно сделать.
 

Max

Administrator
Staff member
Добрый день.
На нагрузочных тестах воспроизвели проблемы с аудио.
Выяснили что на них может влиять запрос статистики http://host:8081?action=stat
Проблема в нашем случае решилась отключением сбора системной статистики:
Code:
parse_system_stats=false
Шумы и разрывы аудио ушли. Тестировали около 1000 зрителей.
 

SergeyP

Member
Спасибо, попробую и через пару дней отчитаюсь о результатах.
А есть еще параметры или дополнительная функциональность вроде статистики, которые на практике или в теории могут негативно влиять на производительность аудио/видео или их качество? Имеет смысл рассмотреть их необходимость и отключить в угоду качеству видеотрансляций.
 

Max

Administrator
Staff member
Еще в одном месте вызывалась системная статистика.
Убрали в сборке 3665.
https://docs.flashphoner.com/display/WCS5EN/Release+notes
Другие параметры статистики, по нашим тестам, на производительность и качество аудио не влияют.
Проблема была именно в той статистике, которая обращалась к системным программам, таким как pmap, netstat, и т.д.
 
Top