Ejemplo n.º 1
0
 public IPEndPoint FindStunAddress()
 {
     JingleMediaSession session = new JingleMediaSession(localEp);
     session.AudioRTPStream = stream;
     IPEndPoint ep = session.PerformSTUNRequest(new DnsEndPoint("stun.ekiga.net", 3478), 4000);
     IPEndPoint ep1 = session.PerformSTUNRequest(new DnsEndPoint("stun.ekiga.net", 3478), 4000);
     Log(ep.ToString());
     Log(ep1.ToString());
     return ep;
 }
Ejemplo n.º 2
0
        public IPEndPoint FindStunAddress()
        {
            JingleMediaSession session = new JingleMediaSession(localEp);

            session.AudioRTPStream = stream;
            IPEndPoint ep  = session.PerformSTUNRequest(new DnsEndPoint("stun.ekiga.net", 3478), 4000);
            IPEndPoint ep1 = session.PerformSTUNRequest(new DnsEndPoint("stun.ekiga.net", 3478), 4000);

            Log(ep.ToString());
            Log(ep1.ToString());
            return(ep);
        }
Ejemplo n.º 3
0
        public void MicrophoneThreadFunction()
        {
            StartMic();

            JingleMediaSession session = MediaSession;

            if (session == null)
            {
                return;
            }

            int nSamplesPerPacket = MediaSession.AudioRTPStream.AudioCodec.AudioFormat.CalculateNumberOfSamplesForDuration(TimeSpan.FromMilliseconds(MediaSession.AudioRTPStream.PTimeTransmit));
            int nBytesPerPacket   = nSamplesPerPacket * MediaSession.AudioRTPStream.AudioCodec.AudioFormat.BytesPerSample;


            // Min size in ICS was 1280 or 40 ms


            TimeSpan tsPTime = TimeSpan.FromMilliseconds(MediaSession.AudioRTPStream.PTimeTransmit);
            DateTime dtNextPacketExpected = DateTime.Now + tsPTime;

            int nUnavailableAudioPackets = 0;

            while (m_bCallActive == true)
            {
                dtNextPacketExpected = DateTime.Now + tsPTime;
                if (MicrophoneQueue.Size >= nBytesPerPacket)
                {
                    byte[] buffer = MicrophoneQueue.GetNSamples(nBytesPerPacket);
                    session.AudioRTPStream.SendNextSample(buffer);
                }
                else
                {
                    nUnavailableAudioPackets++;
                }

                if (MicrophoneQueue.Size > nBytesPerPacket * 6)
                {
                    MicrophoneQueue.GetNSamples(MicrophoneQueue.Size - nBytesPerPacket * 5);
                }

                TimeSpan tsRemaining  = dtNextPacketExpected - DateTime.Now;
                int      nMsRemaining = (int)tsRemaining.TotalMilliseconds;
                if (nMsRemaining > 0)
                {
                    System.Threading.Thread.Sleep(nMsRemaining);
                }
            }

            StopMic();
        }
Ejemplo n.º 4
0
        public void SpeakerThreadFunction()
        {
            /// Send the data to our AudioStreamSource
            ///
            TimeSpan tsPTime           = TimeSpan.FromMilliseconds(MediaSession.AudioRTPStream.PTimeReceive);
            int      nSamplesPerPacket = MediaSession.AudioRTPStream.AudioCodec.AudioFormat.CalculateNumberOfSamplesForDuration(tsPTime);
            int      nBytesPerPacket   = nSamplesPerPacket * MediaSession.AudioRTPStream.AudioCodec.AudioFormat.BytesPerSample;

            JingleMediaSession session = MediaSession;

            if (session == null)
            {
                return;
            }

            byte[] bDummySample = new byte[nBytesPerPacket];

            source.PacketSize = nBytesPerPacket;

            session.AudioRTPStream.IncomingRTPPacketBuffer.InitialPacketQueueMinimumSize = 4;
            session.AudioRTPStream.IncomingRTPPacketBuffer.PacketSizeShiftMax            = 10;

            Deployment.Current.Dispatcher.BeginInvoke(new EventHandler(SafeStartMediaElement), null, null);

            int nMsTook = 0;

            /// Get first packet... have to wait for our rtp buffer to fill
            byte[] bData = session.AudioRTPStream.WaitNextPacketSample(true, MediaSession.AudioRTPStream.PTimeReceive * 5, out nMsTook);
            if ((bData != null) && (bData.Length > 0))
            {
                source.Write(bData);
            }



            DateTime dtNextPacketExpected = DateTime.Now + tsPTime;

            System.Diagnostics.Stopwatch WaitPacketWatch = new System.Diagnostics.Stopwatch();
            int nDeficit = 0;

            while (m_bCallActive == true)
            {
                bData = session.AudioRTPStream.WaitNextPacketSample(true, MediaSession.AudioRTPStream.PTimeReceive, out nMsTook);
                if ((bData != null) && (bData.Length > 0))
                {
                    source.Write(bData);
                }

                //int nRemaining = MediaSession.AudioRTPStream.PTimeReceive - nMsTook;
                //if (nRemaining > 0)
                //    System.Threading.Thread.Sleep(nRemaining);

                //dtNextPacketExpected = dtLastPacket + tsPTime;
                //byte[] bData = session.AudioRTPStream.GetNextPacketSample(false);
                //if ((bData != null) && (bData.Length > 0))
                //    source.Write(bData);
                //else
                //    source.Write(bDummySample);

                TimeSpan tsRemaining  = dtNextPacketExpected - DateTime.Now;
                int      nMsRemaining = (int)tsRemaining.TotalMilliseconds;
                if (nMsRemaining > 0)
                {
                    nMsRemaining += nDeficit;
                    if (nMsRemaining > 0)
                    {
                        System.Threading.Thread.Sleep(nMsRemaining);
                    }
                    else
                    {
                        nDeficit = nMsRemaining;
                    }
                }
                else
                {
                    nDeficit += nMsRemaining;
                }

                dtNextPacketExpected += tsPTime;
            }

            Deployment.Current.Dispatcher.BeginInvoke(new EventHandler(SafeStopMediaElement), null, null);
        }