Пример #1
0
        async void IpDiscover(object sender, PacketReceivedEventArgs args)
        {
            var    packet = (byte[])args.Message;
            string ip     = "";
            int    port   = 0;

            try
            {
                ip   = Encoding.UTF8.GetString(packet, 4, 70 - 6).TrimEnd('\0');
                port = (packet[68] << 8) | packet[69];
            }
            catch /*(Exception exception)*/
            {
                //App.NavigateToBugReport(exception);
            }

            var info = new UdpProtocolInfo()
            {
                Address = ip,
                Port    = port,
                Codecs  = new List <Codec>()
                {
                    new Codec()
                    {
                        Name           = "opus",
                        payloadType    = 120,
                        Priority       = 1000,
                        Type           = "audio",
                        rtxPayloadType = 120
                    },
                    new Codec()
                    {
                        Name           = "VP8",
                        payloadType    = 101,
                        Priority       = 1000,
                        Type           = "video",
                        rtxPayloadType = 102
                    }
                }.ToArray(),
                Mode = "xsalsa20_poly1305" //"_suffix"
            };

            var payload = new SelectProtocol()
            {
                Protocol = "udp",
                Data     = info
            };

            SocketFrame package = new SocketFrame()
            {
                Operation = (int)OperationCode.SelectProtocol,
                Payload   = payload,
                Type      = EventNames.SELECT_PROTOCOL
            };

            _udpSocket.MessageReceived -= IpDiscover;
            _udpSocket.MessageReceived += processUdpPacket;

            await _webMessageSocket.SendJsonObjectAsync(package);
        }
Пример #2
0
        protected override void PacketRecieved(string packetstr) {
            VoicePacket packet = new VoicePacket(packetstr);
            VoicePacketType type = packet.GetPacketType();

            if (type == VoicePacketType.Hello) {
                Logger.Info("Voice server says hello!");
                SendIdentityPacket();
            } else if (type == VoicePacketType.Ready) {
                readyData = packet.GetData<VoiceChannelReady>();

                try {
                    stream = new AudioStream(readyData);
                    stream.Connect();

                    BasicPacket spacket = new SelectProtocol(readyData.ip, readyData.port);
                    Send(spacket);
                } catch (Exception e) {
                    Logger.Error($"AudioStream connection error: {e.Message}");
                    Disconnect();
                }
            } else if (type == VoicePacketType.ClientDisconnect) {
                Disconnect();
            } else if (type == VoicePacketType.CodecInformation) {
                CodecInformation codecinfo = packet.GetData<CodecInformation>();
                Logger.Info($"Audio codec is {codecinfo.audio_codec}");
                stream.SetCodec(codecinfo.audio_codec);
            } else {
                Logger.Debug($"Unchecked type: {type}");
            }
        }
Пример #3
0
        private async void WebrtcManagerOnIpAndPortObtained(object sender, Tuple <string, ushort> e)
        {
            var info = new UdpProtocolInfo()
            {
                Address = e.Item1,
                Port    = e.Item2,
                Codecs  = new List <Codec>()
                {
                    new Codec()
                    {
                        Name           = "opus",
                        payloadType    = 120,
                        Priority       = 1000,
                        Type           = "audio",
                        rtxPayloadType = 120,
                    },
                    new Codec()
                    {
                        Name           = "VP8",
                        payloadType    = 101,
                        Priority       = 1000,
                        Type           = "video",
                        rtxPayloadType = 102,
                    },
                }.ToArray(),
                Mode = "xsalsa20_poly1305", //"_suffix"
            };

            var payload = new SelectProtocol()
            {
                Protocol = "udp",
                Data     = info,
            };

            SocketFrame package = new SocketFrame()
            {
                Operation = (int)OperationCode.SelectProtocol,
                Payload   = payload,
                Type      = EventNames.SELECT_PROTOCOL,
            };

            await _webMessageSocket.SendJsonObjectAsync(package);
        }