Пример #1
0
        internal void UnpackOpusVoicePacket(byte[] plainTextMessage)
        {
            NumPacketsRecv++;
            byte typeByte = plainTextMessage[0];

            //int target = typeByte & 31;
            //Debug.Log("len = " + plainTextMessage.Length + " typeByte = " + typeByte);

            using (var reader = new UdpPacketReader(new MemoryStream(plainTextMessage, 1, plainTextMessage.Length - 1)))
            {
                UInt32 session = 0;
                if (!_mumbleClient.UseLocalLoopBack)
                {
                    session = (uint)reader.ReadVarInt64();
                }
                else
                {
                    session = _mumbleClient.OurUserState.session;
                }

                Int64 sequence = reader.ReadVarInt64();


                //We assume we mean OPUS
                int size = (int)reader.ReadVarInt64();
                //Debug.Log("Seq = " + sequence + " Ses: " + session + " Size " + size + " type= " + typeByte + " tar= " + target);
                bool isLast = (size & 8192) == 8192;
                if (isLast)
                {
                    Debug.Log("Found last byte in seq");
                }

                //Apply a bitmask to remove the bit that marks if this is the last packet
                size &= 0x1fff;

                //Debug.Log("Received sess: " + session);
                //Debug.Log(" seq: " + sequence + " size = " + size + " packetLen: " + plainTextMessage.Length);

                if (size == 0)
                {
                    return;
                }

                byte[] data = reader.ReadBytes(size);

                if (data == null || data.Length != size)
                {
                    Debug.LogError("empty or wrong sized packet");
                    return;
                }

                long remaining = reader.GetRemainingBytes();
                if (remaining != 0)
                {
                    Debug.LogWarning("We have " + remaining + " bytes!");
                }
                _mumbleClient.ReceiveEncodedVoice(session, data, sequence);
            }
        }