/// <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; } }
/// <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)); } } }
/// <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)); } } }
/// <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; } } }
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)); } } }
/// <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..."); }
//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; } } }