public static FecSenderPacketData Parse(byte[] packetBytes) { var reader = new BinaryReader(new MemoryStream(packetBytes)); reader.BaseStream.Position = 5; var fecSenderPacketData = new FecSenderPacketData(); fecSenderPacketData.frameId = reader.ReadInt32(); fecSenderPacketData.packetIndex = reader.ReadInt32(); fecSenderPacketData.packetCount = reader.ReadInt32(); fecSenderPacketData.bytes = reader.ReadBytes(packetBytes.Length - (int)reader.BaseStream.Position); return(fecSenderPacketData); }
public void Run(KinectReceiver kinectReceiver, int senderSessionId, ConcurrentQueue <VideoSenderPacketData> videoPacketDataQueue, ConcurrentQueue <FecSenderPacketData> fecPacketDataQueue, ConcurrentQueue <AudioSenderPacketData> audioPacketDataQueue) { SocketError error = SocketError.WouldBlock; while (true) { var packet = kinectReceiver.udpSocket.Receive(out error); if (packet == null) { break; } int sessionId = PacketHelper.getSessionIdFromSenderPacketBytes(packet); var packetType = PacketHelper.getPacketTypeFromSenderPacketBytes(packet); if (sessionId != senderSessionId) { continue; } if (packetType == SenderPacketType.Frame) { videoPacketDataQueue.Enqueue(VideoSenderPacketData.Parse(packet)); } else if (packetType == SenderPacketType.Fec) { fecPacketDataQueue.Enqueue(FecSenderPacketData.Parse(packet)); } else if (packetType == SenderPacketType.Audio) { audioPacketDataQueue.Enqueue(AudioSenderPacketData.Parse(packet)); } } if (error != SocketError.WouldBlock) { UnityEngine.Debug.Log($"Error from receiving packets: {error.ToString()}"); } }