CDN 2.0 и Stopped by publisher stop

Maksym

Member
Добрый день.
Наблюдаю проблему следующего характера
Есть 4 WCS сервера.
  • 1 для отправки стрима (A)
  • 1 как Origin (B)
  • 1 как Edge (C)
  • 1 для просмотра (D)
На (A) подключаюсь к (B) и начинаю стрим. На (D) подключаюсь к (C) и начинаю просмотр.
Спустя некоторое время(15-30 с.) на (D) стрим отключается с уведомлением Stopped by publisher stop, на (A) стрим все еще активен. При повторном подключении стрим появляется, но спустя небольшой промежуток времени опять пропадает с уведомлением Stopped by publisher stop.
Что интересно, если стримить с (A) на (B) и подключиться для просмотра с (D) на (B) то проблем в течении 4 минут не наблюдаю
Code:
###
cdn_enabled=true
cdn_ip=172.31.27.235
#cdn_ip = 172.31.27.235
cdn_role=origin
#cdn_port=8084
Code:
###
cdn_enabled=true
cdn_ip=172.31.30.211
cdn_point_of_entry=18.197.137.44
cdn_role=edge
cdn_port=8084
cdn_point_of_entry=18.197.137.44 это публичный IP, но поскольку если его прописать на ориджине, то CDN е стартует(можно указать DNS и все ОК) то решил длятеста прописать приватный. Но это не влияет на суть проблемы
 

Max

Administrator
Staff member
В логе сервера C есть сообщение:
Code:
13:58:49,202 WARN  RtpActivityTimerTask - Flashphoner-RtpActivityTimer-31038 RTP ACTIVITY EVENT DETECTED!
Скорее всего в этом причина обрыва.
Попробуйте на всех серверах
1. Выставить
Code:
custom_ice_agent=true
в конфиге flashphoner.properties
2. Обновиться до последней версии.
Code:
service webcallserver update
Если не поможет, отключить RTP activity detecting в flashphoner.properties
Code:
rtp_activity_detecting = false,60
 
Last edited:

Max

Administrator
Staff member
Отключение RTP Activity таймера устраняет сброс потока. Но в продакшене отключать не рекомендуется. Эти таймеры отключают потоки, если по ним не идет аудио или видео.
Поэтому они полезны.

У вас в логе сервера C по времени 13:57:48,970 формируются следующие кандидаты для аудио:
Code:
a=candidate:2 1 udp 2130706431 172.31.30.211 31038 typ host
a=candidate:2 2 udp 2130706431 172.31.30.211 31038 typ host
a=candidate:1 1 udp 1694498815 18.196.172.243 31038 typ srflx raddr 172.31.30.211 rport 31038
a=candidate:1 2 udp 1694498815 18.196.172.243 31038 typ srflx raddr 172.31.30.211 rport 31038
По-хорошему должно быть только это:
Code:
a=candidate:1 1 udp 1694498815 18.196.172.243 31038 typ srflx raddr 172.31.30.211 rport 31038
a=candidate:1 2 udp 1694498815 18.196.172.243 31038 typ srflx raddr 172.31.30.211 rport 31038
Поэтому правильным фиксом будет включение нового ICE
Code:
custom_ice_agent=true
Эта настройка будет действовать по-умолчанию в будущих версиях.
 

Maksym

Member
Поэтому правильным фиксом будет включение нового ICE
Я так пробовал - результат отрицательный. В смысле, что ничего не произошло и стрим отваливался как и ранее.
Все сделал по инструкции во втором посте, кроме наверное того, что сразу обновился на всех серверах.
 

Max

Administrator
Staff member
Получается, по факту вы используете только два сервера: B и C.
Серверы A и D для стриминга не используются и с них вы просто скачиваете HTML-страницу, в первом случае для того чтобы отправить поток, во втором случае чтобы проиграть.
Т.е. схему можно упростить до серверов B и C.
Подскажите, какая версия сервера установлена на B и C и какие настройки в конфиге flashphoner.properties для ip и ip_local?
CDN деплой мы пока не тестировали с использованием внутренних адресов. Возможно там есть какая-то проблема. Нужно проверить.
 

Maksym

Member
Т.е. схему можно упростить до серверов B и C.
Да. Именно так.
Версия 5.0.2894
Настройки:
ip =18.197.137.44
ip_local =172.31.27.235
port_from =30000
port_to =31000
media_port_from =31001
media_port_to =32000
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
rtp_activity_detecting =false,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,h264,vp8,flv,mpv
codecs_exclude_sip =mpeg4-generic,flv,mpv
codecs_exclude_streaming =flv,telephone-event
codecs_exclude_sip_rtmp =opus,g729,g722,mpeg4-generic,telephone-event,vp8,mpv
on_record_hook_script =on_record_hook.sh

rtmp_transponder_stream_name_prefix =rtmp_

client_mode=false

rtc_ice_add_local_component=true

###
cdn_enabled=true
cdn_ip=172.31.27.235
#cdn_ip = 172.31.27.235
cdn_role=origin
#cdn_port=8084
#custom_ice_agent=true
ip =18.196.172.243
ip_local =172.31.30.211
port_from =30000
port_to =31000
media_port_from =31001
media_port_to =32000
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
rtp_activity_detecting =false,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,h264,vp8,flv,mpv
codecs_exclude_sip =mpeg4-generic,flv,mpv
codecs_exclude_streaming =flv,telephone-event
codecs_exclude_sip_rtmp =opus,g729,g722,mpeg4-generic,telephone-event,vp8,mpv
on_record_hook_script =on_record_hook.sh

rtmp_transponder_stream_name_prefix =rtmp_

client_mode=false

rtc_ice_add_local_component=true

###
cdn_enabled=true
cdn_ip=172.31.30.211
cdn_point_of_entry=18.197.137.44
cdn_role=edge
cdn_port=8084

#custom_ice_agent=true
какие настройки в конфиге flashphoner.properties для ip и ip_local?
Эти параметры выставляются ини скриптом, при старте WCS(Разворачивал через AMI), но могу поправить...
 
Last edited:

Max

Administrator
Staff member
Проверим конфигурацию на наших AWS серверах. Отпишем по результатам.
 

Max

Administrator
Staff member
Здравствуйте.

Протестировали на двух Amazon EC2 серверах со сборкой WCS 2899.
Проблема не воспроизводится.
Тестировали с новым и старым ICE: custom_ice_agent=true (custom_ice_agent=false)
Остальные настройки по-умолчанию.

Настройки Origin и Edge:
Code:
cdn_ip = local IP
Т.е. сюда выставили 172.x.x.x

Настройки Edge:
Code:
cdn_point_of_entry = Origin local или public IP
Т.е. здесь можно выставить как local так и public IP.

Тестируем на двух серверах. Публикуем поток из браузера на Origin. Играем на Edge.

WebRTC as WebRTC: публикация на Origin, воспроизведение на Edge - RTP Activity таймер не сбрасывается, поток не отлючается - то есть, описанная проблема не воспроизводится.

Проверьте пожалуйста с двумя серверами. Если проблема по-прежнему воспроизводится, нам понадобится SSH и web-доступ к этим двум серверам чтобы воспроизвести проблему и зафиксировать баг.
 
Last edited:

Maksym

Member
Разобрался. Проблема в том сервере(A) с которого стримил. Походу что-то там не так(давно ставил и при апгрейде был глюк). Видать тянется еще с тех времен.
Если поменять местами сервера (A) и (D) то все нормально. Так же все ОК, если стримить с чистых серверов.
Спасибо
 
Top