Пример #1
0
        private async void _conductor_OnIceCandidate(string sdp_mid, int sdp_mline_index, string sdp)
        {
            var candidate = new WebRTCIceCandidate()
            {
                SdpMid        = sdp_mid,
                SdpMLineIndex = (ushort)sdp_mline_index,
                Candidate     = sdp,
            };

            if (!_canSendIceCandidates)
            {
                _pendingCandidates.Add(candidate);
            }
            else
            {
                try
                {
                    await _signalingTransporter.SendRequestAsync <WebRTCIceCandidateRequest, WebRTCIceCandidateResponse>(new WebRTCIceCandidateRequest()
                    {
                        Candidate = candidate,
                    }, new ResonanceRequestConfig()
                    {
                        Timeout = TimeSpan.FromSeconds(10)
                    });
                }
                catch (Exception ex)
                {
                    Logger.LogError(ex, "Error sending ice candidate.");
                }
            }
        }
Пример #2
0
        private async void FlushIceCandidates()
        {
            Logger.LogInformation("Flushing queued ice candidates...");

            _canSendIceCandidates = true;
            var pending = _pendingCandidates.ToList();

            _pendingCandidates.Clear();

            foreach (var iceCandidate in pending)
            {
                var candidate = new WebRTCIceCandidate()
                {
                    Candidate        = iceCandidate.candidate,
                    SdpMid           = iceCandidate.sdpMid,
                    SdpMLineIndex    = iceCandidate.sdpMLineIndex,
                    UserNameFragment = iceCandidate.usernameFragment
                };

                try
                {
                    Logger.LogInformation("Sending ice {@candidate} to remote peer.", candidate);

                    await _signalingTransporter.SendRequestAsync <WebRTCIceCandidateRequest, WebRTCIceCandidateResponse>(new WebRTCIceCandidateRequest()
                    {
                        ChannelName = ChannelName,
                        Candidate   = candidate
                    }, new ResonanceRequestConfig()
                    {
                        Timeout = TimeSpan.FromSeconds(10)
                    });
                }
                catch (Exception ex)
                {
                    Logger.LogError(ex, "Error sending ice {@candidate} request.", candidate);
                }
            }
        }
Пример #3
0
        private async void OnIceCandidateAvailable(RTCIceCandidate iceCandidate)
        {
            var candidate = new WebRTCIceCandidate()
            {
                Candidate        = iceCandidate.candidate,
                SdpMid           = iceCandidate.sdpMid,
                SdpMLineIndex    = iceCandidate.sdpMLineIndex,
                UserNameFragment = iceCandidate.usernameFragment
            };

            if (_canSendIceCandidates)
            {
                Logger.LogInformation("New ice candidate found. Sending ice {@candidate} to remote peer.", candidate);

                try
                {
                    await _signalingTransporter.SendRequestAsync <WebRTCIceCandidateRequest, WebRTCIceCandidateResponse>(new WebRTCIceCandidateRequest()
                    {
                        ChannelName = ChannelName,
                        Candidate   = candidate
                    }, new ResonanceRequestConfig()
                    {
                        Timeout = TimeSpan.FromSeconds(10)
                    });
                }
                catch (Exception ex)
                {
                    Logger.LogError(ex, "Error sending ice {@candidate} request.", candidate);
                }
            }
            else
            {
                Logger.LogInformation("New ice candidate found. queuing {@candidate}.", candidate);

                _pendingCandidates.Add(iceCandidate);
            }
        }