Пример #1
0
    public void SendDescription(ref RTCSessionDescription desc)
    {
        Debug.Log($"Send {desc.type}");
        var json = JsonUtility.ToJson(SignalingMessage.FromDesc(ref desc));

        socket.SendText(json);
    }
Пример #2
0
    public void Send(string id, RTCIceCandidate cand)
    {
        Debug.Log($"Send Candidate to {id}");
        var json = JsonUtility.ToJson(SignalingMessage.fromCand(cand));

        server.WebSocketServices["/"].Sessions[id].Context.WebSocket.Send(json);
    }
Пример #3
0
    private IEnumerator OnCreateAnswerSuccess(RTCSessionDescription desc)
    {
        Debug.Log("SetLocalDescription start");
        var op = pc.SetLocalDescription(ref desc);

        yield return(op);

        if (!op.IsError)
        {
            Debug.Log("SetLocalDescription succeed");
        }
        else
        {
            Debug.Log("SetLocalDescription failed");
        }
        var message = new SignalingMessage {
            type = "answer",
            data = new SignalingMessageData {
                type = "answer",
                sdp  = desc.sdp
            }
        };

        SendMessage(message);
    }
Пример #4
0
        private void SendViaSocket(SignalingMessage msg)
        {
            var json  = JsonConvert.SerializeObject(msg);
            var nsMsg = new NSString(json, NSStringEncoding.UTF8);

            _socket.Send(nsMsg);
        }
Пример #5
0
    public void Send(string id, ref RTCSessionDescription desc)
    {
        Debug.Log($"Send {desc.type} to {id}");
        var json = JsonUtility.ToJson(SignalingMessage.fromDesc(ref desc));

        server.WebSocketServices["/"].Sessions[id].Context.WebSocket.Send(json);
    }
Пример #6
0
    IEnumerator proccessOffer(WebSocket client)
    {
        Debug.Log("Create Offer");
        var op = pc.CreateOffer(ref offerOptions);

        yield return(op);

        if (!op.isError)
        {
            var ret = pc.SetLocalDescription(ref op.desc);
            yield return(ret);

            if (ret.isError)
            {
                log.Print($"offer setLocalDescription error:{ret.error}");
            }
            else
            {
                var offer = new SignalingMessage("offer", op.desc.sdp);
                var msg   = JsonUtility.ToJson(offer);
                Debug.Log("Send Offer");
                client.Send(msg);
            }
        }
        else
        {
            log.Print("create offer error");
        }
    }
Пример #7
0
    public void SendIce(RTCIceCandidate cand)
    {
        Debug.Log($"Send Candidate");
        var json = JsonUtility.ToJson(SignalingMessage.FromCand(cand));

        socket.SendText(json);
    }
Пример #8
0
        private void SendSdp(RTCSessionDescription sdp)
        {
            var signal = new SignalingMessage()
            {
                Type = sdp.Type.ToString(),
                Sdp  = sdp.Sdp,
            };

            SendViaSocket(signal);
        }
Пример #9
0
    private void OnIceCandidate(RTCIceCandidate candidate)
    {
        var message = new SignalingMessage();
        var data    = new SignalingMessageData();

        data.candidate     = candidate.Candidate;
        data.sdpMid        = candidate.SdpMid;
        data.sdpMLineIndex = candidate.SdpMLineIndex;
        message.type       = "candidate";
        message.data       = data;
        SendMessage(message);
    }
Пример #10
0
 private void ConnectButton(object sender, EventArgs e)
 {
     _webRtcClient.Connect((sdp, err) =>
     {
         if (string.IsNullOrEmpty(err))
         {
             var signal = new SignalingMessage()
             {
                 Type = sdp.Type.ToString(),
                 Sdp  = sdp.Description,
             };
             SendViaSocket(signal);
         }
     });
 }
Пример #11
0
        private void SendCandidate(RTCIceCandidate iceCandidate)
        {
            var can = new Candidate()
            {
                Sdp           = iceCandidate.Sdp,
                SdpMLineIndex = iceCandidate.SdpMLineIndex,
                SdpMid        = iceCandidate.SdpMid
            };
            var signal = new SignalingMessage()
            {
                Candidate = can
            };

            SendViaSocket(signal);
        }
Пример #12
0
    private void GreetNode()
    {
        var message = new SignalingMessage {
            type = "message",
            data = new SignalingMessageData {
                message = "Hello Node!"
            }
        };

        SendMessage(message);

        var message1 = new SignalingMessage {
            type = "start"
        };

        SendMessage(message1);
    }
Пример #13
0
        public void OnGenerateCandiate(IceCandidate iceCandidate)
        {
            System.Diagnostics.Debug.WriteLine($"{nameof(OnGenerateCandiate)}");

            var can = new Candidate()
            {
                Sdp           = iceCandidate.Sdp,
                SdpMLineIndex = iceCandidate.SdpMLineIndex,
                SdpMid        = iceCandidate.SdpMid
            };
            var signal = new SignalingMessage()
            {
                Candidate = can
            };

            SendViaSocket(signal);
        }
Пример #14
0
 void setupPeer(WebSocket client)
 {
     pc = new RTCPeerConnection(ref conf);
     pc.OnIceCandidate = candidate =>
     {
         log.Print($"onIceCandidate");
         var sm  = new SignalingMessage(candidate.candidate, candidate.sdpMid, candidate.sdpMLineIndex);
         var msg = JsonUtility.ToJson(sm);
         ws.Send(msg);
     };
     foreach (var track in videoStream.GetTracks())
     {
         pc.AddTrack(track);
     }
     foreach (var track in audioStream.GetTracks())
     {
         pc.AddTrack(track);
     }
     StartCoroutine(proccessOffer(client));
 }
Пример #15
0
        public WebRTCSignalingClient(string serverIp, int port)
        {
            IntPtr zero = IntPtr.Zero;

            ValidationUtil.ValidateIsNullOrEmpty(serverIp, nameof(serverIp));

            _signalingMessageCallback = (type, message, _) =>
            {
                Log.Info(WebRTCLog.Tag, $"type:{type}, message:{message}");

                if (type == SignalingMessageType.Connected)
                {
                    _isConnected = true;
                }

                SignalingMessage?.Invoke(this, new WebRTCSignalingEventArgs(type, message));
            };

            SignalingClient.Connect(serverIp, port, _signalingMessageCallback, zero, out _handle).
            ThrowIfFailed("Failed to connect to server");
        }
Пример #16
0
    private void HandleWebsocketMessage(byte[] data)
    {
        SignalingMessage message = JsonUtility.FromJson <SignalingMessage>(Encoding.UTF8.GetString(data));

        Debug.LogFormat("Receivied message with type {0}", message.type);

        if (localConnection == null)
        {
            CreatePeerConnection();
        }

        if (!string.IsNullOrEmpty(message.sdp))
        {
            StartCoroutine(SetDescription(message.ToDesc(), Side.Remote));
        }

        if (!string.IsNullOrEmpty(message.candidate))
        {
            localConnection.AddIceCandidate(message.ToCand());
        }
    }
Пример #17
0
 private void ReadMessage(SignalingMessage msg)
 {
     if (msg.Type?.Equals(SessionDescription.SdpType.Offer.ToString(), StringComparison.OrdinalIgnoreCase) == true)
     {
         _webRtcClient.ReceiveOffer(
             new SessionDescription(
                 SessionDescription.SdpType.Offer,
                 msg.Sdp),
             (sdp, err) =>
         {
             if (string.IsNullOrEmpty(err))
             {
                 var signal = new SignalingMessage()
                 {
                     Type = sdp.Type.ToString(),
                     Sdp  = sdp.Description,
                 };
                 SendViaSocket(signal);
             }
         });
     }
     else if (msg.Type?.Equals(SessionDescription.SdpType.Answer.ToString(), StringComparison.OrdinalIgnoreCase) == true)
     {
         _webRtcClient.ReceiveAnswer(
             new SessionDescription(
                 SessionDescription.SdpType.Answer,
                 msg.Sdp),
             (sdp, err) =>
         {
         });
     }
     else if (msg.Candidate != null)
     {
         _webRtcClient.ReceiveCandidate(new IceCandidate(
                                            msg.Candidate.SdpMid,
                                            msg.Candidate.SdpMLineIndex,
                                            msg.Candidate.Sdp));
     }
 }
Пример #18
0
 private void ReadMessage(SignalingMessage msg)
 {
     if (msg.Type?.Equals(RTCSdpType.Offer.ToString(), StringComparison.OrdinalIgnoreCase) == true)
     {
         _webRtcClient.ReceiveOffer(new RTCSessionDescription(RTCSdpType.Offer, msg.Sdp), (sdp, err) =>
         {
             if (err == null)
             {
                 SendSdp(sdp);
             }
         });
     }
     else if (msg.Type?.Equals(RTCSdpType.Answer.ToString(), StringComparison.OrdinalIgnoreCase) == true)
     {
         _webRtcClient.ReceiveAnswer(new RTCSessionDescription(RTCSdpType.Answer, msg.Sdp), (sdp, err) =>
         {
         });
     }
     else if (msg.Candidate != null)
     {
         _webRtcClient.ReceiveCandidate(new RTCIceCandidate(msg.Candidate.Sdp, msg.Candidate.SdpMLineIndex, msg.Candidate.SdpMid));
     }
 }
Пример #19
0
 private void SendMessage(SignalingMessage msg)
 {
     Debug.Log($"Send a(an) \"{msg.type}\" to Node:\n {JsonUtility.ToJson(msg.data, true)}");
     ws.Send(JsonUtility.ToJson(msg));
 }
Пример #20
0
        private void SendViaSocket(SignalingMessage msg)
        {
            var json = JsonConvert.SerializeObject(msg);

            _socket.Send(json);
        }