用webrtc做云游戏项目做了一年多了,最近有空,准备对webrtc做一些总结并输出一些东西。初期文档可能会比较简陋,后面会慢慢丰富。
这篇文章主要记录代码级别STUN 的细节,内容比较粗糙,仅供参考。
连接信令信令服务器后,解析stun server配置调用路径 ,解析好stun server uri,保存备用:
Conductor::OnPeerConnected
Conductor::ConnectToPeer
Conductor::InitializePeerConnection
Conductor::CreatePeerConnection PeerConnectionFactory::CreatePeerConnection
PeerConnection::Initialize
ParseIceServers
ParseIceServerUrl
然后收集通讯用“网络接口”--gathering
Conductor::OnSuccess
PeerConnection::SetLocalDescription
PeerConnection::DoSetLocalDescription
JsepTransportController::MaybeStartGathering
异步触发下一个调用
JsepTransportController::MaybeStartGathering
P2PTransportChannel::MaybeStartGathering
PortAllocator::CreateSession
BasicPortAllocator::CreateSessionInternal
BasicPortAllocatorSession::BasicPortAllocatorSession
BasicNetworkManager::StartUpdating
异步触发下一个调用
BasicNetworkManager::OnMessage rtc::BasicNetworkManager::UpdateNetworksContinually rtc::BasicNetworkManager::UpdateNetworksOnce cricket::BasicPortAllocatorSession::OnNetworksChanged cricket::BasicPortAllocatorSession::GetNetworks //枚举本地Ip, 过滤无效ip,如127.0.0.1在拿 到可用于通信用的 ip_port后,创建端口(含音频、视频),绑定并用其发送到stun server
AllocationSequence::OnMessage AllocationSequence::CreateUDPPorts BasicPortAllocatorSession::AddAllocatedPort UDPPort::PrepareAddress UDPPort::OnLocalAddressReady UDPPort::MaybePrepareStunCandidate UDPPort::SendStunBindingRequests UDPPort::SendStunBindingRequest StunRequestManager::Send StunRequestManager::SendDelayed在拿到回复后,添加外网ip到 candidate集合,供后面发送给对端(peer)用
AllocationSequence::OnReadPacket UDPPort::OnReadPacket //这里会解析是不是stun消息 StunRequestManager::CheckResponse StunBindingRequest::OnResponse UDPPort::OnStunBindingRequestSucceeded Port::FinishAddingAddress BasicPortAllocatorSession::OnCandidateReady
以下是对前面几个异步调用的汇总:
P2PTransportChannel::MaybeStartGathering
PeerConnectionProxyWithInternal::SetLocalDescription
PeerConnection::SetLocalDescription
JsepTransportController::MaybeStartGathering
P2PTransportChannel::MaybeStartGathering
PortAllocator::CreateSession
BasicPortAllocatorSession::GetNetworks
BasicPortAllocatorSession::StartGettingPorts
BasicPortAllocatorSession::GetPortConfigurations异步调用
BasicPortAllocatorSession::DoAllocate
AllocationSequence::Start
AllocationSequence::CreateUDPPorts 异步
UDPPort::PrepareAddress
BasicPortAllocatorSession::AddAllocatedPort
UDPPort::OnLocalAddressReady
BasicPortAllocatorSession::OnCandidateReady
下面我截取了相关日志,对照上面的函数调用看
[15924] (conductor.cc:88): OnSuccess [15924] (conductor.cc:1009): push message to queue{ "sdp" : "v=0\r\no=- 2681105373476736670 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=msid-semantic: WMS stream_id\r\na=ice-lite\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:P9fv\r\na=ice-pwd:ujCApub95WQIFW>YdsHw9C7J\r\na=ice-options:trickle\r\na=fingerprint:sha-256 52:5A:6D:21:1B:19:74:35:A8:2B:64:0D:23:1A:B9:AB:05:CF:5D:34:FE:95:14:4D:C2:AC:C5:44:96:B0:1B:E9\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:stream_id audio_label\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:4189126505 cname:W>ceK9SMMPTXzMe>\r\na=ssrc:4189126505 msid:stream_id audio_label\r\na=ssrc:4189126505 mslabel:stream_id\r\na=ssrc:4189126505 label:audio_label\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 123 125 122 124 121 114\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:P9fv\r\na=ice-pwd:ujCApub95WQIFW>YdsHw9C7J\r\na=ice-options:trickle\r\na=fingerprint:sha-256 52:5A:6D:21:1B:19:74:35:A8:2B:64:0D:23:1A:B9:AB:05:CF:5D:34:FE:95:14:4D:C2:AC:C5:44:96:B0:1B:E9\r\na=setup:actpass\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:3gpp:video-orientation\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07\r\na=extmap:9 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:stream_id video_label\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 H264/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 H264/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:123 rtx/90000\r\na=fmtp:123 apt=127\r\na=rtpmap:125 H265/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:122 rtx/90000\r\na=fmtp:122 apt=125\r\na=rtpmap:124 red/90000\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=124\r\na=rtpmap:114 ulpfec/90000\r\na=ssrc-group:FID 3507601420 2605932876\r\na=ssrc:3507601420 cname:W>ceK9SMMPTXzMe>\r\na=ssrc:3507601420 msid:stream_id video_label\r\na=ssrc:3507601420 mslabel:stream_id\r\na=ssrc:3507601420 label:video_label\r\na=ssrc:2605932876 cname:W>ceK9SMMPTXzMe>\r\na=ssrc:2605932876 msid:stream_id video_label\r\na=ssrc:2605932876 mslabel:stream_id\r\na=ssrc:2605932876 label:video_label\r\n", "type" : "offer" }
[8376] (basic_port_allocator.cc:115): Filtered out ignored networks: //过滤本地无效网络接口或者叫Ip也行 [8376] (basic_port_allocator.cc:117): Net[Software:::1/128:Loopback:id=2] [8376] (basic_port_allocator.cc:117): Net[Software:127.0.0.1/32:Loopback:id=1] [8376] (basic_port_allocator.cc:885): Network manager has started [8376] (basic_port_allocator.cc:115): Filtered out ignored networks: [8376] (basic_port_allocator.cc:117): Net[Software:::1/128:Loopback:id=2] [8376] (basic_port_allocator.cc:117): Net[Software:127.0.0.1/32:Loopback:id=1] [8376] (basic_port_allocator.cc:885): Network manager has started [8376] (basic_port_allocator.cc:115): Filtered out ignored networks: [8376] (basic_port_allocator.cc:117): Net[Software:::1/128:Loopback:id=2] [8376] (basic_port_allocator.cc:117): Net[Software:127.0.0.1/32:Loopback:id=1] [8376] (basic_port_allocator.cc:800): Allocate ports on 1 networks [8376] (basic_port_allocator.cc:115): Filtered out ignored networks: [8376] (basic_port_allocator.cc:117): Net[Software:::1/128:Loopback:id=2] [8376] (basic_port_allocator.cc:117): Net[Software:127.0.0.1/32:Loopback:id=1] [8376] (basic_port_allocator.cc:800): Allocate ports on 1 networks [8376] (basic_port_allocator.cc:1377): Net[Realtek:192.168.17.240/32:Ethernet:id=3]: Allocation Phase=Udp [8376] (port.cc:185): Port[850b640::1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Port created with network cost 0 [8376] (basic_port_allocator.cc:1448): AllocationSequence: UDPPort will be handling the STUN candidate generation. [8376] (basic_port_allocator.cc:909): Adding allocated port for 0 [8376] (basic_port_allocator.cc:930): Port[850b640:0:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Added port to allocator [8376] (basic_port_allocator.cc:948): Port[850b640:0:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Gathered candidate: Cand[:850302414:1:udp:2122260223:192.168.17.240:58000:local::0:P9fv:ujCApub95WQIFW>YdsHw9C7J:3:0:0] [8376] (basic_port_allocator.cc:981): Port[850b640:0:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Port ready. [8376] (physical_socket_server.cc:557): Socket::OPT_DSCP not supported. [8376] (p2p_transport_channel.cc:842): Port[850b640:0:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: SetOption(5, 0) failed: 0 [8376] (basic_ice_controller.cc:541): Sorting 0 available connections [15924] (conductor.cc:598): OnIceCandidate 0 [8376] (stun_request.cc:265): Sent STUN request 1; resend delay = 250 [15924] (conductor.cc:1009): push message to queue{ "candidate" : "candidate:850302414 1 udp 2122260223 192.168.17.240 58000 typ host generation 0 ufrag P9fv network-id 3", "sdpMLineIndex" : 0, "sdpMid" : "0" }
[8376] (basic_port_allocator.cc:1377): Net[Realtek:192.168.17.240/32:Ethernet:id=3]: Allocation Phase=Udp [8376] (port.cc:185): Port[8509b38::1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Port created with network cost 0 [8376] (basic_port_allocator.cc:1448): AllocationSequence: UDPPort will be handling the STUN candidate generation. [8376] (basic_port_allocator.cc:909): Adding allocated port for 1 [8376] (basic_port_allocator.cc:930): Port[8509b38:1:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Added port to allocator [8376] (basic_port_allocator.cc:948): Port[8509b38:1:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Gathered candidate: Cand[:850302414:1:udp:2122260223:192.168.17.240:58001:local::0:P9fv:ujCApub95WQIFW>YdsHw9C7J:3:0:0] [8376] (basic_port_allocator.cc:981): Port[8509b38:1:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Port ready. [8376] (physical_socket_server.cc:557): Socket::OPT_DSCP not supported. [8376] (p2p_transport_channel.cc:842): Port[8509b38:1:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: SetOption(5, 0) failed: 0 [8376] (basic_ice_controller.cc:541): Sorting 0 available connections
[15924] (conductor.cc:598): OnIceCandidate 1 [8376] (stun_request.cc:265): Sent STUN request 1; resend delay = 250 [15924] (conductor.cc:1009): push message to queue{ "candidate" : "candidate:850302414 1 udp 2122260223 192.168.17.240 58001 typ host generation 0 ufrag P9fv network-id 3", "sdpMLineIndex" : 1, "sdpMid" : "1" }
[15924] (win32_socket_server.cc:614): WSAAsync:connect (34 ms) [15924] (peer_connection_client.cc:235): PeerConnectionClient::OnConnect send data:POST /message?peer_id=29&to=30 HTTP/1.0 Content-Length: 4797 Content-Type: text/plain
{ "sdp" : "v=0\r\no=- 2681105373476736670 2 IN IP4 127.0.0.1\r\ns=-\r\nt=0 0\r\na=group:BUNDLE 0 1\r\na=msid-semantic: WMS stream_id\r\na=ice-lite\r\nm=audio 9 UDP/TLS/RTP/SAVPF 111 103 104 9 102 0 8 106 105 13 110 112 113 126\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:P9fv\r\na=ice-pwd:ujCApub95WQIFW>YdsHw9C7J\r\na=ice-options:trickle\r\na=fingerprint:sha-256 52:5A:6D:21:1B:19:74:35:A8:2B:64:0D:23:1A:B9:AB:05:CF:5D:34:FE:95:14:4D:C2:AC:C5:44:96:B0:1B:E9\r\na=setup:actpass\r\na=mid:0\r\na=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:stream_id audio_label\r\na=rtcp-mux\r\na=rtpmap:111 opus/48000/2\r\na=rtcp-fb:111 transport-cc\r\na=fmtp:111 minptime=10;useinbandfec=1\r\na=rtpmap:103 ISAC/16000\r\na=rtpmap:104 ISAC/32000\r\na=rtpmap:9 G722/8000\r\na=rtpmap:102 ILBC/8000\r\na=rtpmap:0 PCMU/8000\r\na=rtpmap:8 PCMA/8000\r\na=rtpmap:106 CN/32000\r\na=rtpmap:105 CN/16000\r\na=rtpmap:13 CN/8000\r\na=rtpmap:110 telephone-event/48000\r\na=rtpmap:112 telephone-event/32000\r\na=rtpmap:113 telephone-event/16000\r\na=rtpmap:126 telephone-event/8000\r\na=ssrc:4189126505 cname:W>ceK9SMMPTXzMe>\r\na=ssrc:4189126505 msid:stream_id audio_label\r\na=ssrc:4189126505 mslabel:stream_id\r\na=ssrc:4189126505 label:audio_label\r\nm=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 127 123 125 122 124 121 114\r\nc=IN IP4 0.0.0.0\r\na=rtcp:9 IN IP4 0.0.0.0\r\na=ice-ufrag:P9fv\r\na=ice-pwd:ujCApub95WQIFW>YdsHw9C7J\r\na=ice-options:trickle\r\na=fingerprint:sha-256 52:5A:6D:21:1B:19:74:35:A8:2B:64:0D:23:1A:B9:AB:05:CF:5D:34:FE:95:14:4D:C2:AC:C5:44:96:B0:1B:E9\r\na=setup:actpass\r\na=mid:1\r\na=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\na=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\na=extmap:13 urn:3gpp:video-orientation\r\na=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\na=extmap:12 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\na=extmap:11 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\na=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\na=extmap:8 http://tools.ietf.org/html/draft-ietf-avtext-framemarking-07\r\na=extmap:9 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\na=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\na=extmap:5 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\na=extmap:6 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\na=sendrecv\r\na=msid:stream_id video_label\r\na=rtcp-mux\r\na=rtcp-rsize\r\na=rtpmap:96 H264/90000\r\na=rtcp-fb:96 goog-remb\r\na=rtcp-fb:96 transport-cc\r\na=rtcp-fb:96 ccm fir\r\na=rtcp-fb:96 nack\r\na=rtcp-fb:96 nack pli\r\na=fmtp:96 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:97 rtx/90000\r\na=fmtp:97 apt=96\r\na=rtpmap:98 H264/90000\r\na=rtcp-fb:98 goog-remb\r\na=rtcp-fb:98 transport-cc\r\na=rtcp-fb:98 ccm fir\r\na=rtcp-fb:98 nack\r\na=rtcp-fb:98 nack pli\r\na=fmtp:98 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\na=rtpmap:99 rtx/90000\r\na=fmtp:99 apt=98\r\na=rtpmap:100 H264/90000\r\na=rtcp-fb:100 goog-remb\r\na=rtcp-fb:100 transport-cc\r\na=rtcp-fb:100 ccm fir\r\na=rtcp-fb:100 nack\r\na=rtcp-fb:100 nack pli\r\na=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\na=rtpmap:101 rtx/90000\r\na=fmtp:101 apt=100\r\na=rtpmap:127 H264/90000\r\na=rtcp-fb:127 goog-remb\r\na=rtcp-fb:127 transport-cc\r\na=rtcp-fb:127 ccm fir\r\na=rtcp-fb:127 nack\r\na=rtcp-fb:127 nack pli\r\na=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\na=rtpmap:123 rtx/90000\r\na=fmtp:123 apt=127\r\na=rtpmap:125 H265/90000\r\na=rtcp-fb:125 goog-remb\r\na=rtcp-fb:125 transport-cc\r\na=rtcp-fb:125 ccm fir\r\na=rtcp-fb:125 nack\r\na=rtcp-fb:125 nack pli\r\na=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\na=rtpmap:122 rtx/90000\r\na=fmtp:122 apt=125\r\na=rtpmap:124 red/90000\r\na=rtpmap:121 rtx/90000\r\na=fmtp:121 apt=124\r\na=rtpmap:114 ulpfec/90000\r\na=ssrc-group:FID 3507601420 2605932876\r\na=ssrc:3507601420 cname:W>ceK9SMMPTXzMe>\r\na=ssrc:3507601420 msid:stream_id video_label\r\na=ssrc:3507601420 mslabel:stream_id\r\na=ssrc:3507601420 label:video_label\r\na=ssrc:2605932876 cname:W>ceK9SMMPTXzMe>\r\na=ssrc:2605932876 msid:stream_id video_label\r\na=ssrc:2605932876 mslabel:stream_id\r\na=ssrc:2605932876 label:video_label\r\n", "type" : "offer" }
[8376] (basic_port_allocator.cc:948): Port[850b640:0:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Gathered candidate: Cand[:4263750237:1:udp:1686052607:14.18.236.94:58000:stun:192.168.17.240:58000:P9fv:ujCApub95WQIFW>YdsHw9C7J:3:0:0] [8376] (basic_port_allocator.cc:1089): Port[850b640:0:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Port completed gathering candidates.
[15924] (conductor.cc:598): OnIceCandidate 0 [15924] (conductor.cc:1009): push message to queue{ "candidate" : "candidate:4263750237 1 udp 1686052607 14.18.236.94 58000 typ srflx raddr 192.168.17.240 rport 58000 generation 0 ufrag P9fv network-id 3", "sdpMLineIndex" : 0, "sdpMid" : "0" }
[8376] (basic_port_allocator.cc:948): Port[8509b38:1:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Gathered candidate: Cand[:4263750237:1:udp:1686052607:14.18.236.94:58001:stun:192.168.17.240:58001:P9fv:ujCApub95WQIFW>YdsHw9C7J:3:0:0]
[8376] (basic_port_allocator.cc:1089): Port[8509b38:1:1:0:local:Net[Realtek:192.168.17.240/32:Ethernet:id=3]]: Port completed gathering candidates. [15924] (conductor.cc:598): OnIceCandidate 1 [15924] (conductor.cc:1009): push message to queue{ "candidate" : "candidate:4263750237 1 udp 1686052607 14.18.236.94 58001 typ srflx raddr 192.168.17.240 rport 58001 generation 0 ufrag P9fv network-id 3", "sdpMLineIndex" : 1, "sdpMid" : "1" }