Esempio n. 1
0
    /// <summary>
    /// 挂断
    /// </summary>
    public void Hang()
    {
        if (CallID != 0)
        {
            ProtocolDataModel pd = new ProtocolDataModel();
            pd.Type    = ProtocolType.TYPE_IM;
            pd.Request = IMProtocol.IM_HANG_CRES;

            IMInfo info = new IMInfo();
            info.PeerID = ChatPeerID;
            pd.Message  = info.ToByteArray();

            NetWorkManager.Instance.Send(pd);

            //send udp hang
            CallInfo callInfo = new CallInfo();
            callInfo.CallID = CallID;

            UdplDataModel model = new UdplDataModel();
            model.Request      = RequestByte.REQUEST_HANG;
            model.ChatInfoData = callInfo.ToByteArray();
            byte[] data = UdpMessageCodec.Encode(model);

            UdpSocketManager.Instance.Send(UdpMessageCodec.Encode(model));

            //结束udp传输
            ChatDataHandler.Instance.StopChat();

            CallID = 0;
        }
    }
Esempio n. 2
0
    /// <summary>
    /// 发送视频数据
    /// </summary>
    void SendVideo()
    {
        //获取SDK捕捉的视频数据
        VideoPacket packet = UnityChatSDK.Instance.GetVideo();

        if (packet != null)
        {
            packet.Id = ChatManager.Instance.UserID;
            byte[] video = GetPbVideoPacket(packet).ToByteArray();

            udpPacketIndex++;
            List <UdpPacket> list = UdpPacketSpliter.Split(udpPacketIndex, video, ChunkLength);
            for (int i = 0; i < list.Count; i++)
            {
                UdplDataModel model = new UdplDataModel();
                model.Request = RequestByte.REQUEST_VIDEO;

                CallInfo info = new CallInfo();
                info.UserID = ChatManager.Instance.UserID;
                info.CallID = ChatManager.Instance.CallID;
                info.PeerList.Add(ChatManager.Instance.ChatPeerID);

                model.ChatInfoData = info.ToByteArray();
                model.ChatData     = UdpPacketEncode(list[i]);

                UdpSocketManager.Instance.Send(UdpMessageCodec.Encode(model));
            }
        }
    }
    /// <summary>
    /// Send audio data
    /// </summary>
    void SendAudio()
    {
        //Get audio data by SDK
        AudioPacket packet = UnityChatSDK.Instance.GetAudio();

        if (packet != null)
        {
            packet.Id = ChatManager.Instance.UserID;
            byte[] audio = GetPbAudioPacket(packet).ToByteArray();

            //UDP Send data to server
            if (audio != null)
            {
                UdplDataModel model = new UdplDataModel();
                model.Request = UdpRequest.REQUEST_AUDIO;

                IMInfo info = new IMInfo();
                info.UserID = ChatManager.Instance.UserID;
                info.CallID = ChatManager.Instance.CallID;
                info.UserList.Add(ChatManager.Instance.ChatPeers);

                model.ChatInfoData = info.ToByteArray();
                model.ChatData     = audio;

                UdpSocketManager.Instance.Send(UdpMessageCodec.Encode(model));
            }
        }
    }
Esempio n. 4
0
    /// <summary>
    /// 发送音频数据
    /// </summary>
    void SendAudio()
    {
        //获取SDK捕捉的音频数据
        AudioPacket packet = UnityChatSDK.Instance.GetAudio();

        if (packet != null)
        {
            packet.Id = ChatManager.Instance.UserID;
            byte[] audio = GetPbAudioPacket(packet).ToByteArray();
            //UDP发送数据到服务器(可更改为自己的服务器发送接口)
            if (audio != null)
            {
                UdplDataModel model = new UdplDataModel();
                model.Request = RequestByte.REQUEST_AUDIO;

                CallInfo info = new CallInfo();
                info.UserID = ChatManager.Instance.UserID;
                info.CallID = ChatManager.Instance.CallID;
                info.PeerList.Add(ChatManager.Instance.ChatPeerID);

                model.ChatInfoData = info.ToByteArray();
                model.ChatData     = audio;

                UdpSocketManager.Instance.Send(UdpMessageCodec.Encode(model));
            }
        }
    }
Esempio n. 5
0
    /// <summary>
    /// Hang up call
    /// </summary>
    public void Hang()
    {
        if (CallID != 0)
        {
            DataModel model = new DataModel();
            model.Type    = ChatProtocolType.TYPE_IM;
            model.Request = IMProtocol.IM_HANG;

            IMInfo info = new IMInfo();
            info.UserID = UserID;
            info.CallID = CallID;
            info.UserList.AddRange(ChatPeers);

            model.Message = info.ToByteArray();

            ChatNetworkManager.Instance.Send(model);

            //send udp hang
            UdplDataModel udp = new UdplDataModel();
            udp.Request      = UdpRequest.REQUEST_HANG;
            udp.ChatInfoData = model.Message;
            byte[] udpData = UdpMessageCodec.Encode(udp);

            UdpSocketManager.Instance.Send(udpData);

            //stop udp
            ChatDataHandler.Instance.StopChat();

            CallID = 0;
            ChatPeers.Clear();
            isChatting = false;
        }
    }
    /// <summary>
    /// Send audio data
    /// </summary>
    void SendAudio()
    {
        //Get audio data by SDK
        AudioPacket packet = UnityChatSDK.Instance.GetAudio();

        if (packet != null)
        {
            packet.Id = ChatManager.Instance.UserID;
            byte[] audio = GetPbAudioPacket(packet).ToByteArray();

            switch (NetType)
            {
            case NetType.UdpStream:
                //UDP Send data to server
                if (audio != null)
                {
                    UdplDataModel model = new UdplDataModel();
                    model.Request = UdpRequest.REQUEST_AUDIO;

                    IMInfo info = new IMInfo();
                    info.UserID = ChatManager.Instance.UserID;
                    info.CallID = ChatManager.Instance.CallID;
                    info.UserList.Add(ChatManager.Instance.ChatPeers);

                    model.ChatInfoData = info.ToByteArray();
                    model.ChatData     = audio;

                    UdpSocketManager.Instance.Send(UdpMessageCodec.Encode(model));
                }
                break;

            case NetType.TcpStream:

                if (audio != null)
                {
                    DataModel model = new DataModel();
                    model.Type    = ChatProtocolType.TYPE_CHATDATA;
                    model.Request = ChatDataProtocol.CHAT_AUDIO;
                    model.Message = audio;
                    ChatNetworkManager.Instance.Send(model);
                }

                break;

            default:
                break;
            }
        }
    }
Esempio n. 7
0
    private static void Hang()
    {
        //send udp hang
        CallInfo callInfo = new CallInfo();

        callInfo.UserID = ConfigManager.LOCAL_ID;
        callInfo.CallID = ConfigManager.CALL_ID;

        UdplDataModel model = new UdplDataModel();

        model.Request      = RequestByte.REQUEST_HANG;
        model.ChatInfoData = callInfo.ToByteArray();
        byte[] data = UdpMessageCodec.Encode(model);

        UdpSocketManager.Instance.Send(data);
    }
    /// <summary>
    /// Send video data
    /// </summary>
    IEnumerator SendVideo()
    {
        //Get video data by SDK
        VideoPacket packet = UnityChatSDK.Instance.GetVideo();

        if (UnityChatSDK.Instance.EnableSync)
        {
            if (packet != null)
            {
                videoPacketQueue.Enqueue(packet);
            }

            if (videoPacketQueue.Count >= UnityChatSDK.Instance.Framerate / UnityChatSDK.Instance.AudioSample)
            {
                packet = videoPacketQueue.Dequeue();
            }
            else
            {
                yield return(null);
            }
        }

        if (packet != null)
        {
            packet.Id = ChatManager.Instance.UserID;
            byte[] video = GetPbVideoPacket(packet).ToByteArray();

            udpPacketIndex++;
            List <UdpPacket> list = UdpPacketSpliter.Split(udpPacketIndex, video, ChunkLength);

            UdplDataModel model = new UdplDataModel();
            model.Request = UdpRequest.REQUEST_VIDEO;
            IMInfo info = new IMInfo();
            info.UserID = ChatManager.Instance.UserID;
            info.CallID = ChatManager.Instance.CallID;
            info.UserList.Add(ChatManager.Instance.ChatPeers);
            model.ChatInfoData = info.ToByteArray();

            for (int i = 0; i < list.Count; i++)
            {
                model.ChatData = UdpPacketEncode(list[i]);
                UdpSocketManager.Instance.Send(UdpMessageCodec.Encode(model));
                yield return(new WaitForSeconds(0.01f));
            }
        }
    }
Esempio n. 9
0
    /// <summary>
    /// 发送视频数据
    /// </summary>
    private async void SendVideo()
    {
        //获取SDK捕捉的视频数据
        VideoPacket packet = await CameraHelper.Instance.GetVideo();

        if (ConfigManager.ENABLE_SYNC)
        {
            if (packet != null)
            {
                videoPacketQueue.Enqueue(packet);
            }

            if (videoPacketQueue.Count >= ConfigManager.FRAME_RATE / ConfigManager.AUDIO_SAMPLE)
            {
                packet = videoPacketQueue.Dequeue();
            }
            else
            {
                return;
            }
        }

        if (packet != null)
        {
            packet.Id = ConfigManager.LOCAL_ID;
            byte[] video = VideoPack2ProtobufPack(packet).ToByteArray();

            udpPacketIndex++;
            List <UdpPacket> list = UdpPacketSpliter.Split(udpPacketIndex, video, ChunkLength);
            for (int i = 0; i < list.Count; i++)
            {
                UdplDataModel model = new UdplDataModel();
                model.Request = RequestByte.REQUEST_VIDEO;

                CallInfo info = new CallInfo();
                info.UserID = ConfigManager.LOCAL_ID;
                info.CallID = ConfigManager.CALL_ID;
                info.PeerList.Add(ConfigManager.REMOTE_ID);

                model.ChatInfoData = info.ToByteArray();
                model.ChatData     = UdpPacketEncode(list[i]);

                UdpSocketManager.Instance.Send(UdpMessageCodec.Encode(model));
            }
        }
    }
    //发送udp心跳包
    IEnumerator sendHeart()
    {
        print("start heart...");
        while (isRunning)
        {
            yield return(new WaitForSeconds(2));

            CallInfo callInfo = new CallInfo();
            callInfo.UserID = ChatManager.Instance.UserID;

            UdplDataModel model = new UdplDataModel();
            model.ChatInfoData = callInfo.ToByteArray();
            model.Request      = RequestByte.REQUEST_HEART;

            byte[] data = UdpMessageCodec.Encode(model);
            Send(data);
        }
        print("stop heart...");
    }
    //发送udp心跳包
    private IEnumerator SendHeart()
    {
        Debug.Log("start heart...");
        while (isRunning)
        {
            yield return(new WaitForSeconds(2));

            CallInfo callInfo = new CallInfo();
            // TODO
            callInfo.UserID = ConfigManager.LOCAL_ID;

            UdplDataModel model = new UdplDataModel();
            model.ChatInfoData = callInfo.ToByteArray();
            model.Request      = RequestByte.REQUEST_HEART;

            byte[] data = UdpMessageCodec.Encode(model);
            Send(data);
        }
        Debug.Log("stop heart...");
    }
Esempio n. 12
0
    //Send udp heartbeat packet
    IEnumerator SendHeartbeat()
    {
        print("start heartbeat...");
        while (isRunning)
        {
            yield return(new WaitForSeconds(0.5f));

            IMInfo info = new IMInfo();
            info.UserID = ChatManager.Instance.UserID;
            info.CallID = ChatManager.Instance.CallID;

            UdplDataModel model = new UdplDataModel();
            model.ChatInfoData = info.ToByteArray();
            model.Request      = UdpRequest.REQUEST_HEART;

            byte[] data = UdpMessageCodec.Encode(model);
            Send(data);
        }
        print("stop heartbeat...");
    }
    /// <summary>
    /// Send video data
    /// </summary>
    IEnumerator SendVideo()
    {
        //Get video data by SDK
        VideoPacket packet = UnityChatSDK.Instance.GetVideo();

        if (UnityChatSDK.Instance.EnableSync)
        {
            if (packet != null)
            {
                videoPacketQueue.Enqueue(packet);
            }

            if (videoPacketQueue.Count >= UnityChatSDK.Instance.Framerate / UnityChatSDK.Instance.AudioSample)
            {
                packet = videoPacketQueue.Dequeue();
            }
            else
            {
                yield return(null);
            }
        }

        if (packet != null)
        {
            packet.Id = ChatManager.Instance.UserID;
            byte[] video = GetPbVideoPacket(packet).ToByteArray();

            switch (NetType)
            {
            case NetType.UdpStream:

                udpPacketIndex++;
                List <UdpPacket> list = UdpPacketSpliter.Split(udpPacketIndex, video, ChunkLength);

                UdplDataModel model = new UdplDataModel();
                model.Request = UdpRequest.REQUEST_VIDEO;
                IMInfo info = new IMInfo();
                info.UserID = ChatManager.Instance.UserID;
                info.CallID = ChatManager.Instance.CallID;
                info.UserList.Add(ChatManager.Instance.ChatPeers);
                model.ChatInfoData = info.ToByteArray();

                for (int i = 0; i < list.Count; i++)
                {
                    model.ChatData = UdpPacketEncode(list[i]);
                    UdpSocketManager.Instance.Send(UdpMessageCodec.Encode(model));
                    yield return(new WaitForSeconds(0.01f));
                }

                break;

            case NetType.TcpStream:

                if (video != null)
                {
                    DataModel tcpVideoData = new DataModel();
                    tcpVideoData.Type    = ChatProtocolType.TYPE_CHATDATA;
                    tcpVideoData.Request = ChatDataProtocol.CHAT_VIDEO;
                    tcpVideoData.Message = video;
                    ChatNetworkManager.Instance.Send(tcpVideoData);
                }

                break;

            default:
                break;
            }
        }
    }