protected override async void OnOpen() { base.OnOpen(); logger.LogDebug($"Web socket client connection from {Context.UserEndPoint}."); _pc = await CreatePeerConnection().ConfigureAwait(false); _pc.onicecandidate += (iceCandidate) => { if (_pc.signalingState == RTCSignalingState.have_remote_offer) { Context.WebSocket.Send(iceCandidate.toJSON()); } }; if (base.Context.QueryString["role"] != "offer") { var offerSdp = _pc.createOffer(OfferOptions); await _pc.setLocalDescription(offerSdp).ConfigureAwait(false); logger.LogDebug($"Sending SDP offer to client {Context.UserEndPoint}."); logger.LogDebug(offerSdp.sdp); Context.WebSocket.Send(offerSdp.toJSON()); } }
protected override async void OnOpen() { base.OnOpen(); logger.LogDebug($"Web socket client connection from {Context.UserEndPoint}."); _pc = CreatePeerConnection(); var offerSdp = _pc.createOffer(null); await _pc.setLocalDescription(offerSdp); _pc.onicecandidate += (iceCandidate) => { if (_pc.signalingState == RTCSignalingState.have_remote_offer) { Context.WebSocket.Send(iceCandidate.toJSON()); } }; logger.LogDebug($"Sending SDP offer to client {Context.UserEndPoint}."); logger.LogDebug(offerSdp.sdp); Context.WebSocket.Send(JsonConvert.SerializeObject(offerSdp, new Newtonsoft.Json.Converters.StringEnumConverter())); }
private async Task <string> OnMessage(string jsonStr, RTCPeerConnection pc) { if (RTCIceCandidateInit.TryParse(jsonStr, out var iceCandidateInit)) { logger.LogDebug("Got remote ICE candidate."); pc.addIceCandidate(iceCandidateInit); } else if (RTCSessionDescriptionInit.TryParse(jsonStr, out var descriptionInit)) { logger.LogDebug($"Got remote SDP, type {descriptionInit.type}."); var result = pc.setRemoteDescription(descriptionInit); if (result != SetDescriptionResultEnum.OK) { logger.LogWarning($"Failed to set remote description, {result}."); pc.Close("failed to set remote description"); } if (descriptionInit.type == RTCSdpType.offer) { var answerSdp = pc.createAnswer(null); await pc.setLocalDescription(answerSdp); return(answerSdp.toJSON()); } } else { logger.LogWarning($"node-dss could not parse JSON message. {jsonStr}"); } return(null); }
/// <summary> /// Creates a new WebRTC peer connection and send an SDP offer to the REST server. /// </summary> private async Task SendOffer(HttpClient httpClient) { logger.LogDebug("webrtc-rest sending initial SDP offer to server."); var offerSdp = _pc.createOffer(OfferOptions); await _pc.setLocalDescription(offerSdp).ConfigureAwait(false); await SendToSignalingServer(httpClient, offerSdp.toJSON(), WebRTCSignalTypesEnum.sdp).ConfigureAwait(false); }
/// <summary> /// Creates a new WebRTC peer connection and send an SDP offer to the node DSS server. /// </summary> private async Task SendOffer(HttpClient httpClient) { logger.LogDebug("node-dss sending initial SDP offer to server."); var offerSdp = _pc.createOffer(null); await _pc.setLocalDescription(offerSdp); await SendToNSS(httpClient, offerSdp.toJSON()); }
protected override async void OnMessage(MessageEventArgs e) { //logger.LogDebug($"OnMessage: {e.Data}"); if (RTCIceCandidateInit.TryParse(e.Data, out var iceCandidateInit)) { logger.LogDebug("Got remote ICE candidate."); bool useCandidate = true; if (FilterRemoteICECandidates != null && !string.IsNullOrWhiteSpace(iceCandidateInit.candidate)) { useCandidate = FilterRemoteICECandidates(iceCandidateInit); } if (!useCandidate) { logger.LogDebug($"WebRTCWebSocketPeer excluding ICE candidate due to filter: {iceCandidateInit.candidate}"); } else { _pc.addIceCandidate(iceCandidateInit); } } else if (RTCSessionDescriptionInit.TryParse(e.Data, out var descriptionInit)) { logger.LogDebug($"Got remote SDP, type {descriptionInit.type}."); var result = _pc.setRemoteDescription(descriptionInit); if (result != SetDescriptionResultEnum.OK) { logger.LogWarning($"Failed to set remote description, {result}."); _pc.Close("failed to set remote description"); this.Close(); } else { if (_pc.signalingState == RTCSignalingState.have_remote_offer) { var answerSdp = _pc.createAnswer(AnswerOptions); await _pc.setLocalDescription(answerSdp).ConfigureAwait(false); logger.LogDebug($"Sending SDP answer to client {Context.UserEndPoint}."); //logger.LogDebug(answerSdp.sdp); Context.WebSocket.Send(answerSdp.toJSON()); } } } else { logger.LogWarning($"websocket-server could not parse JSON message. {e.Data}"); } }
private async Task <string> OnMessage(string signal, RTCPeerConnection pc) { string sdpAnswer = null; if (RTCIceCandidateInit.TryParse(signal, out var iceCandidateInit)) { logger.LogDebug($"Got remote ICE candidate, {iceCandidateInit.candidate}"); bool useCandidate = true; if (FilterRemoteICECandidates != null && !string.IsNullOrWhiteSpace(iceCandidateInit.candidate)) { useCandidate = FilterRemoteICECandidates(iceCandidateInit); } if (!useCandidate) { logger.LogDebug($"WebRTCRestPeer excluding ICE candidate due to filter: {iceCandidateInit.candidate}"); } else { _pc.addIceCandidate(iceCandidateInit); } } else if (RTCSessionDescriptionInit.TryParse(signal, out var descriptionInit)) { logger.LogDebug($"Got remote SDP, type {descriptionInit.type}."); //logger.LogDebug(descriptionInit.sdp); var result = pc.setRemoteDescription(descriptionInit); if (result != SetDescriptionResultEnum.OK) { logger.LogWarning($"Failed to set remote description, {result}."); pc.Close("failed to set remote description"); } else if (descriptionInit.type == RTCSdpType.offer) { var answerSdp = pc.createAnswer(AnswerOptions); await pc.setLocalDescription(answerSdp).ConfigureAwait(false); sdpAnswer = answerSdp.toJSON(); } } else { logger.LogWarning($"webrtc-rest could not parse JSON message. {signal}"); } return(sdpAnswer); }