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