На сколько я понимаю если все edge в норме, то клиент не может получить стрим от origin ? Я бы хотел полноценно юзать origin как edge, только + ко всему с него пересылать поток на соседа.В самой минимальной конфигурации, вы можете настроить Origin и Edge1
В этом случае если проблемы при воспроизведении с Edge1 переключаться напрямую на Origin.
Нет. Origin не имеет ограничений на прямые подключения. Поэтому его вполне нормально использовать как Edge.На сколько я понимаю если все edge в норме, то клиент не может получить стрим от origin ?
Так и будет работать в связке Origin + Edge1.Я бы хотел полноценно юзать origin как edge, только + ко всему с него пересылать поток на соседа.
Более того, Edge тоже не имеет ограничений на прямые подключения и на него тоже можно публиковать потоки напрямую.Нет. Origin не имеет ограничений на прямые подключения. Поэтому его вполне нормально использовать как Edge.
Отл!!!Более того, Edge тоже не имеет ограничений на прямые подключения и на него тоже можно публиковать потоки напрямую.
Разница между Origin и Edge только в том, что с Edge-сервера можно воспроизвести поток, опубликованный на Origin.
А с Origin сервера нельзя воспроизвести поток, опубликованный на Edge, т.к. Edge не делится своими потоками с другими нодами CDN.
При попытке подключиться edge сервером к origin в логах edge - ошибка:Нет. Origin не имеет ограничений на прямые подключения. Поэтому его вполне нормально использовать как Edge.
Так и будет работать в связке Origin + Edge1.
При этом, CDN работает по "ленивой" схеме. Поток с Origin на Edge1 начнет реально пересылаться только тогда, когда на Edge1 его попытается воспроизвести первый зритель.
Это сильно экономит ресурсы при публикации множества потоков.
Если же хочется ретранслировать поток вручную, без CDN, то можно так:
https://docs.flashphoner.com/pages/viewpage.action?pageId=1049038
CDNNodes - com.flashphoner.cdn.node.CDNNodes Failed to connect to node origin.domain.com
17:46:24,084 INFO C - CDNOutbound-BOSS-pool-34-thread-1 Exception on channel [id: 0x46dcfcfa]
14:43:00,823 ERROR CDNNodes - com.flashphoner.cdn.node.CDNNodes Failed to connect to node 77.112.112.112
14:43:01,847 INFO C - CDNOutbound-BOSS-pool-34-thread-1 Exception on channel [id: 0x751729ad]
16:33:01,078 ERROR HandlerUtils - API-ASYNC-pool-12-thread-1 Failed to invoke method playStream for client WSClient{channel=[id: 0x5892c19c, /222.222.222.222:58212 => /192.168.0.2:8443], handler=com.flashphoner.server.client.handler
.DelegateHandler@6eb42cb7, closed=false, pageUrl='null', countUnansweredPing=0}
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.flashphoner.server.client.handler.HandlerUtils.lambda$processThroughREST$0(Unknown Source)
at java.util.concurrent.CompletableFuture.uniWhenComplete(CompletableFuture.java:760)
at java.util.concurrent.CompletableFuture$UniWhenComplete.tryFire(CompletableFuture.java:736)
at java.util.concurrent.CompletableFuture$Completion.run(CompletableFuture.java:442)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NoClassDefFoundError: Could not initialize class com.flashphoner.server.D
at com.flashphoner.server.client.handler.wcs4.media.MediaHandlerUtils.playCDNStream(Unknown Source)
at com.flashphoner.server.client.handler.wcs4.media.MediaHandlerUtils.playStream(Unknown Source)
at com.flashphoner.server.client.handler.wcs4.media.MediaHandler.playStream(Unknown Source)
... 11 more
16:33:01,079 ERROR HandlerUtils - API-ASYNC-pool-12-thread-1 Stream Stream{mediaSessionId='5fb63b00-36a6-11e9-af31-5bf8680dd3cf', remoteMediaElementId='null', name='cam_test', published=false, hasVideo=true, hasAudio=true, status=
PENDING, sdp='v=0
o=- 5270075598498615998 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:00fN
a=ice-pwd:WV0DaJP6UJ+3mhytBkGfJtth
a=ice-options:trickle
a=fingerprint:sha-256 6D:07:81:E9:8C:5B:EC:D5:89:39:52:E2:E5:EC:5F:F1:1C:4C:A9:A6:CA:E9:25:D3:7B:27:5A:C4:CB:56:A3:AB
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=recvonly
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 123 127 122 125 107 108 109 124
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:00fN
a=ice-pwd:WV0DaJP6UJ+3mhytBkGfJtth
a=ice-options:trickle
a=fingerprint:sha-256 6D:07:81:E9:8C:5B:EC:D5:89:39:52:E2:E5:EC:5F:F1:1C:4C:A9:A6:CA:E9:25:D3:7B:27:5A:C4:CB:56:A3:AB
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:3gpp:video-orientation
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=extmap:10 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07
a=recvonly
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 H264/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:123 rtx/90000
a=fmtp:123 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:122 rtx/90000
a=fmtp:122 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 red/90000
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:124 ulpfec/90000
', audioCodec='null', videoCodec='null', info='null', record=false, recordName='null', width=0, height=0, bitrate=0, minBitrate=0, maxBitrate=0, quality=0, rtmpUrl='null', parentMediaSessionId='null', createDate=null, endDate=null, streamInfo=Context{custom={}, nodeId='null', appKey='null', sessionId='null'}, mediaProvider='WebRTC', timeShift='null'} Context{custom={origin=https://wcs.domain.name:8888}, nodeId='null', appKey='defaultApp', sessionId='/222.222.222.222:58212/192.168.0.2:8443'}
OriginВозможно порт 8084, по которому работает сигналинг внутри CDN закрыт.
Или домен не резолвится, например если
Покажите настройки на Origin и на Edge.Code:cdn_nodes_resolve_ip=false
ip =78.222.222.222
ip_local =192.168.0.1
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
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 =alaw,ulaw,h264,mpeg4-generic
codecs_exclude_sip =mpeg4-generic,flv,mpv
codecs_exclude_streaming =flv,telephone-event
#codecs_exclude_sip_rtmp =opus,g729,g722,mpeg4-generic,vp8,mpv
codecs_exclude_sip_rtmp =opus,g729,g722,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
# For push stream from OBS.
# https://forum.flashphoner.com/threads/open-broadcast-software-as-stream-source.10949/
# https://forum.flashphoner.com/threads/%D0%9D%D0%B5-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D0%B5%D1%82%D1%81%D1%8F-%D0%B2%D0%BE%D1%81%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA-%D1%81-ffmpeg-%D0%B2-%D0%BF%D0%BB%D0%B5%D0%B5%D1%80%D0%B5-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-ws.10992/page-2
keep_alive.enabled=websocket,rtmfp
#keep_alive.algorithm =NONE
#
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
# Декодирование потока
# https://docs.flashphoner.com/pages/viewpage.action?pageId=3050530
streaming_video_decoder_fast_start=false
# Disable transcoding
force_client_requested_video_resolution=false
# Enable monitoring live stream
disable_manager_rmi=false
####
## CDN
###
cdn_enabled=true
cdn_ip=wcs.origin.doamin.name
cdn_nodes_resolve_ip=false
cdn_role=origin
# Config flashphoner.properties
# To get more settings:
# ssh -p 2001 admin@localhost
# default password: admin
# show node-settings
# show node-settings | grep port
#server ip
ip =194.222.222.222
ip_local =194.222.222.222
#webrtc ports range
#Beginning of media ports range for ICE, RTP, SRTP, RTCP
media_port_from =31001
media_port_to =32000
#codecs
#codecs =opus,alaw,ulaw,g729,speex16,g722,mpeg4-generic,telephone-event,h264,vp8,flv,mpv
codecs =alaw,ulaw,h264,mpeg4-generic
codecs_exclude_sip =mpeg4-generic,flv,mpv
codecs_exclude_streaming =flv,telephone-event
codecs_exclude_sip_rtmp =opus,g729,g722,mpeg4-generic,vp8,mpv
#websocket ports
ws.port =8080
wss.port =8443
keep_alive.algorithm =HIGH_LEVEL
# For push stream from OBS.
# https://forum.flashphoner.com/threads/open-broadcast-software-as-stream-source.10949/
# https://forum.flashphoner.com/threads/%D0%9D%D0%B5-%D0%BF%D0%BE%D0%BB%D1%83%D1%87%D0%B0%D0%B5%D1%82%D1%81%D1%8F-%D0%B2%D0%BE%D1%81%D0%BF%D1%80%D0%BE%D0%B8%D0%B7%D0%B2%D0%B5%D1%81%D1%82%D0%B8-%D0%BF%D0%BE%D1%82%D0%BE%D0%BA-%D1%81-ffmpeg-%D0%B2-%D0%BF%D0%BB%D0%B5%D0%B5%D1%80%D0%B5-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-ws.10992/page-2
keep_alive.enabled=websocket,rtmfp
# Декодирование потока
# https://docs.flashphoner.com/pages/viewpage.action?pageId=3050530
streaming_video_decoder_fast_start=false
# Disable transcoding
force_client_requested_video_resolution=false
# Enable monitoring live stream
disable_manager_rmi=false
####
##CDN
####
cdn_enabled=true
cdn_ip=wcs.edge.domain.name
cdn_nodes_resolve_ip=false
cdn_point_of_entry=wcs.origin.domain.name
cdn_role=edge
codecs_exclude_cdn=aac,g729,speex16,g722,telephone-event,mpv
1. Попробуйте в настройках CDN везде использовать IP адреса и cdn_nodes_resolve_ip=false
Пробовал оба варианта, результат одинаковый, на edge прежние ошибки.2. Использовать в настройках CDN везде домены и cdn_nodes_resolve_ip=true
Домен резолвится.Возможно порт 8084, по которому работает сигналинг внутри CDN закрыт.
Или домен не резолвится, например если
Покажите настройки на Origin и на Edge.Code:cdn_nodes_resolve_ip=false
Указав локальный ip(который за nat) в параметре cdn_ip, в слушателях появился порт ip:8084. Но ошибка осталась прежней, по tcpdump на origin так же видны попытки подключения с edge .Домен резолвится.
На origin сервере в слушателях должен быть 8084 порт ?
По tcpdump на origin я вижу попытки подключения с edge->origin . Основной сетевой интерфейс за NAT (провайдер так предоставляет услугу) это может влиять на работу CDN ?
А как быть с воспроизведением видео при включенном CDN ? Писал в нескольких постах выше.Добрый день.
Проблема в том, что Origin расположен за NAT, а Edge имеет публичный IP адрес. В этом случае на NAT должен быть корректно настроен проброс всех портов на Origin, как на вход, так и на выход. Если настроить не получается, то единственное решение - вынести Origin за пределы локальной сети, на публичный IP адрес.