/// <summary>
        /// OnJitterBufferDataAvailable
        /// </summary>
        /// <param name="packet"></param>
        private void OnJitterBufferDataAvailable(Object sender, WinSound.RTPPacket rtp)
        {
            try
            {
                if (Player != null)
                {
                    //Nach Linear umwandeln
                    Byte[] linearBytes = WinSound.Utils.MuLawToLinear(rtp.Data, BitsPerSample, Channels);

                    //Wenn kein Mute
                    if (IsMuteAll == false && IsMute == false)
                    {
                        //Abspielen
                        Player.PlayData(linearBytes, false);
                    }

                    //Wenn Buffer nicht zu gross
                    Queue <List <Byte> > q = StreamClient.DictionaryMixed[sender];
                    if (q.Count < 10)
                    {
                        //Daten Zu Mixer hinzufügen
                        StreamClient.DictionaryMixed[sender].Enqueue(new List <Byte>(linearBytes));
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(String.Format("FormMain.cs | OnJitterBufferDataAvailable() | {0}", ex.Message));
            }
        }
Esempio n. 2
0
 /// <summary>
 /// OnDataAvailable
 /// </summary>
 /// <param name="packet"></param>
 private void OnDataAvailable(Object sender, WinSound.RTPPacket rtp)
 {
     //Nach Linear umwandeln
     Byte[] linearBytes = WinSound.Utils.MuLawToLinear(rtp.Data, Config.BitsPerSample, Config.Channels);
     //Abspielen
     m_Player.PlayData(linearBytes, false);
 }
        private void OnJitterBufferServerDataAvailable(Object sender, WinSound.RTPPacket rtp)
        {
            try
            {
                if (IsServerRunning)
                {
                    if (m_IsFormMain)
                    {
                        //RTP Packet in Bytes umwandeln
                        Byte[] rtpBytes = rtp.ToBytes();

                        //Für alle Clients
                        List <NF.ServerThread> list = new List <NF.ServerThread>(m_Server.Clients);
                        foreach (NF.ServerThread client in list)
                        {
                            //Wenn nicht Mute
                            if (client.IsMute == false)
                            {
                                try
                                {
                                    //Absenden
                                    client.Send(m_PrototolClient.ToBytes(rtpBytes));
                                }
                                catch (Exception)
                                {
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception)
            {
            }
        }
        private void OnProtocolClient_DataComplete(Object sender, Byte[] data)
        {
            try
            {
                //Wenn der Player gestartet wurde
                if (m_PlayerClient != null)
                {
                    if (m_PlayerClient.Opened)
                    {
                        //RTP Header auslesen
                        WinSound.RTPPacket rtp = new WinSound.RTPPacket(data);

                        //Wenn Header korrekt
                        if (rtp.Data != null)
                        {
                            //In JitterBuffer hinzufügen
                            if (m_JitterBufferClientPlaying != null)
                            {
                                m_JitterBufferClientPlaying.AddData(rtp);
                            }
                        }
                    }
                }
                else
                {
                    //Konfigurationsdaten erhalten
                    OnClientConfigReceived(sender, data);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
 private void OnJitterBufferClientDataAvailablePlaying(Object sender, WinSound.RTPPacket rtp)
 {
     try
     {
         if (m_PlayerClient != null)
         {
             if (m_PlayerClient.Opened)
             {
                 if (m_IsFormMain)
                 {
                     //Wenn nicht stumm
                     if (m_Config.MuteClientPlaying == false)
                     {
                         //Nach Linear umwandeln
                         Byte[] linearBytes = WinSound.Utils.MuLawToLinear(rtp.Data, m_Config.BitsPerSampleClient, m_Config.ChannelsClient);
                         //Abspielen
                         m_PlayerClient.PlayData(linearBytes, false);
                     }
                 }
             }
         }
     }
     catch (Exception)
     {
         System.Diagnostics.StackFrame sf = new System.Diagnostics.StackFrame(true);
     }
 }
Esempio n. 6
0
 /// <summary>
 /// ToRTPData
 /// </summary>
 /// <param name="linearData"></param>
 /// <param name="bitsPerSample"></param>
 /// <param name="channels"></param>
 /// <returns></returns>
 private Byte[] ToRTPData(Byte[] data, int bitsPerSample, int channels)
 {
     //Neues RTP Packet erstellen
     WinSound.RTPPacket rtp = ToRTPPacket(data, bitsPerSample, channels);
     //RTPHeader in Bytes erstellen
     Byte[] rtpBytes = rtp.ToBytes();
     //Fertig
     return(rtpBytes);
 }
Esempio n. 7
0
 /// <summary>
 /// OnJitterBufferDataAvailable
 /// </summary>
 /// <param name="packet"></param>
 private void OnJitterBufferDataAvailable(Object sender, WinSound.RTPPacket rtp)
 {
     if (Player != null)
     {
         //Nach Linear umwandeln
         Byte[] linearBytes = WinSound.Utils.MuLawToLinear(rtp.Data, BitsPerSample, Channels);
         //Abspielen
         Player.PlayData(linearBytes, false);
     }
 }
Esempio n. 8
0
        /// <summary>
        /// OnProtocolDataComplete
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        private void OnProtocolDataComplete(Object sender, Byte[] bytes)
        {
            //Wenn initialisiert
            if (IsInitialized)
            {
                if (ServerThread != null && Player != null)
                {
                    try
                    {
                        //Wenn der Player gestartet wurde
                        if (Player.Opened)
                        {
                            //RTP Header auslesen
                            WinSound.RTPPacket rtp = new WinSound.RTPPacket(bytes);

                            ////Wenn Anzeige
                            //if (IsDrawCurve)
                            //{
                            //    TimeMeasurement();
                            //    m_BytesToDraw = rtp.Data;
                            //}

                            //Wenn Header korrekt
                            if (rtp.Data != null)
                            {
                                //Wenn JitterBuffer verwendet werden soll
                                if (JitterBuffer != null && JitterBuffer.Maximum >= 2)
                                {
                                    JitterBuffer.AddData(rtp);
                                }
                                else
                                {
                                    //Nach Linear umwandeln
                                    Byte[] linearBytes = WinSound.Utils.MuLawToLinear(rtp.Data, this.BitsPerSample, this.Channels);
                                    //Abspielen
                                    Player.PlayData(linearBytes, false);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        IsInitialized = false;
                    }
                }
            }
        }
        private void OnDataReceivedFromSoundcard_Client(Byte[] data)
        {
            try
            {
                lock (this)
                {
                    if (IsClientConnected)
                    {
                        //Wenn gewünscht
                        if (m_Config.ClientNoSpeakAll == false)
                        {
                            //Sounddaten in kleinere Einzelteile zerlegen
                            int bytesPerInterval = WinSound.Utils.GetBytesPerInterval((uint)m_Config.SamplesPerSecondClient, m_Config.BitsPerSampleClient, m_Config.ChannelsClient);
                            int count            = data.Length / bytesPerInterval;
                            int currentPos       = 0;
                            for (int i = 0; i < count; i++)
                            {
                                //Teilstück in RTP Packet umwandeln
                                Byte[] partBytes = new Byte[bytesPerInterval];
                                Array.Copy(data, currentPos, partBytes, 0, bytesPerInterval);
                                currentPos += bytesPerInterval;
                                WinSound.RTPPacket rtp = ToRTPPacket(partBytes, m_Config.BitsPerSampleClient, m_Config.ChannelsClient);

                                //Wenn JitterBuffer
                                if (UseJitterBufferClientRecording)
                                {
                                    //In Buffer legen
                                    m_JitterBufferClientRecording.AddData(rtp);
                                }
                                else
                                {
                                    //Alles in RTP Packet umwandeln
                                    Byte[] rtpBytes = ToRTPData(data, m_Config.BitsPerSampleClient, m_Config.ChannelsClient);
                                    //Absenden
                                    m_Client.Send(m_PrototolClient.ToBytes(rtpBytes));
                                }
                            }
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                System.Diagnostics.Debug.WriteLine(ex.Message);
            }
        }
Esempio n. 10
0
 /// <summary>
 /// OnDataReceivedFromSoundcard
 /// </summary>
 /// <param name="linearData"></param>
 private void OnDataReceivedFromSoundcard(Byte[] data)
 {
     try
     {
         lock (this)
         {
             if (IsServerRunning)
             {
                 //Wenn Form noch aktiv
                 if (m_IsFormMain)
                 {
                     //Wenn JitterBuffer
                     if (m_Config.IsTimeSyncClient)
                     {
                         //Sounddaten in kleinere Einzelteile zerlegen
                         int bytesPerInterval = WinSound.Utils.GetBytesPerInterval((uint)m_Config.SamplesPerSecondClient, m_Config.BitsPerSampleClient, m_Config.ChannelsClient);
                         int count            = data.Length / bytesPerInterval;
                         int currentPos       = 0;
                         for (int i = 0; i < count; i++)
                         {
                             //Teilstück in RTP Packet umwandeln
                             Byte[] partBytes = new Byte[bytesPerInterval];
                             Array.Copy(data, currentPos, partBytes, 0, bytesPerInterval);
                             currentPos += bytesPerInterval;
                             WinSound.RTPPacket rtp = ToRTPPacket(partBytes, m_Config.BitsPerSampleClient, m_Config.ChannelsClient);
                             //In Buffer legen
                             m_JitterBuffer.AddData(rtp);
                         }
                     }
                     else
                     {
                         Byte[] rtp = ToRTPData(data, m_Config.BitsPerSampleClient, m_Config.ChannelsClient);
                         //Absenden
                         m_Server.Send(m_PrototolClient.ToBytes(rtp));
                     }
                 }
             }
         }
     }
     catch (Exception ex)
     {
         System.Diagnostics.Debug.WriteLine(ex.Message);
     }
 }
Esempio n. 11
0
        /// <summary>
        /// OnTimerStream
        /// </summary>
        /// <param name="lpParameter"></param>
        /// <param name="TimerOrWaitFired"></param>
        private void OnTimerStream()
        {
            try
            {
                //Wenn noch aktiv
                if (m_IsTimerStreamRunning)
                {
                    if ((m_CurrentRTPBufferPos + m_RTPPartsLength) <= m_FilePayloadBuffer.Length)
                    {
                        //Bytes senden
                        Array.Copy(m_FilePayloadBuffer, m_CurrentRTPBufferPos, m_PartByte, 0, m_RTPPartsLength);
                        m_CurrentRTPBufferPos += m_RTPPartsLength;
                        WinSound.RTPPacket rtp = ToRTPPacket(m_PartByte, m_FileHeader.BitsPerSample, m_FileHeader.Channels);
                        _send(_room, rtp.ToBytes());
                    }
                    else
                    {
                        //Rest-Bytes senden
                        int    rest      = m_FilePayloadBuffer.Length - m_CurrentRTPBufferPos;
                        Byte[] restBytes = new Byte[m_PartByte.Length];
                        Array.Copy(m_FilePayloadBuffer, m_CurrentRTPBufferPos, restBytes, 0, rest);
                        WinSound.RTPPacket rtp = ToRTPPacket(restBytes, m_FileHeader.BitsPerSample, m_FileHeader.Channels);
                        _send(_room, rtp.ToBytes());

                        if (m_Loop == false)
                        {
                            //QueueTimer beenden
                            StopTimerStream();
                        }
                        else
                        {
                            //Von vorne beginnen
                            m_CurrentRTPBufferPos = 0;
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                StopTimerStream();
            }
        }
Esempio n. 12
0
        /// <summary>
        /// OnDataReceived
        /// </summary>
        /// <param name="strMessage"></param>
        public void OnDataReceived(List <Byte[]> audio)
        {
            audio.ForEach(bytes =>
            {
                try
                {
                    //Wenn der Player gestartet wurde
                    if (m_Player.Opened)
                    {
                        //RTP Header auslesen
                        WinSound.RTPPacket rtp = new WinSound.RTPPacket(bytes);

                        //Wenn Anzeige
                        if (IsDrawCurve)
                        {
                            TimeMeasurement();
                            m_BytesToDraw = rtp.Data;
                        }

                        //Wenn Header korrekt
                        if (rtp.Data != null)
                        {
                            //Wenn JitterBuffer verwendet werden soll
                            if (UseJitterBuffer)
                            {
                                m_JitterBuffer.AddData(rtp);
                            }
                            else
                            {
                                //Nach Linear umwandeln
                                Byte[] linearBytes = WinSound.Utils.MuLawToLinear(rtp.Data, Config.BitsPerSample, Config.Channels);
                                //Abspielen
                                m_Player.PlayData(linearBytes, false);
                            }
                        }
                    }
                }
                catch (Exception ex)
                {
                    System.Diagnostics.Debug.WriteLine(String.Format("FormMain.cs | OnDataReceived() | {0}", ex.Message));
                }
            });
        }
Esempio n. 13
0
        /// <summary>
        /// ToRTPPacket
        /// </summary>
        /// <param name="linearData"></param>
        /// <param name="bitsPerSample"></param>
        /// <param name="channels"></param>
        /// <returns></returns>
        private WinSound.RTPPacket ToRTPPacket(Byte[] linearData, int bitsPerSample, int channels)
        {
            //Daten Nach MuLaw umwandeln
            Byte[] mulaws = WinSound.Utils.LinearToMulaw(linearData, bitsPerSample, channels);

            //Neues RTP Packet erstellen
            WinSound.RTPPacket rtp = new WinSound.RTPPacket();

            //Werte übernehmen
            rtp.Data         = mulaws;
            rtp.SourceId     = m_SourceId;
            rtp.CSRCCount    = m_CSRCCount;
            rtp.Extension    = m_Extension;
            rtp.HeaderLength = WinSound.RTPPacket.MinHeaderLength;
            rtp.Marker       = m_Marker;
            rtp.Padding      = m_Padding;
            rtp.PayloadType  = m_PayloadType;
            rtp.Version      = m_Version;

            //RTP Header aktualisieren
            try
            {
                rtp.SequenceNumber = Convert.ToUInt16(m_SequenceNumber);
                m_SequenceNumber++;
            }
            catch (Exception)
            {
                m_SequenceNumber = 0;
            }
            try
            {
                rtp.Timestamp = Convert.ToUInt32(m_TimeStamp);
                m_TimeStamp  += mulaws.Length;
            }
            catch (Exception)
            {
                m_TimeStamp = 0;
            }

            //Fertig
            return(rtp);
        }
Esempio n. 14
0
 /// <summary>
 /// OnJitterBufferDataAvailable
 /// </summary>
 /// <param name="rtp"></param>
 private void OnJitterBufferDataAvailable(Object sender, WinSound.RTPPacket rtp)
 {
     try
     {
         if (IsServerRunning)
         {
             if (m_IsFormMain)
             {
                 //RTP Packet in Bytes umwandeln
                 Byte[] rtpBytes = rtp.ToBytes();
                 //Absenden
                 m_Server.Send(m_PrototolClient.ToBytes(rtpBytes));
             }
         }
     }
     catch (Exception ex)
     {
         ShowError(ex.Message);
     }
 }
Esempio n. 15
0
 /// <summary>
 /// OnDataAvailable
 /// </summary>
 /// <param name="packet"></param>
 private void OnDataAvailable(Object sender, WinSound.RTPPacket rtp)
 {
     try
     {
         if (_send != null)
         {
             if (m_IsFormMain)
             {
                 //RTP Packet in Bytes umwandeln
                 Byte[] rtpBytes = rtp.ToBytes();
                 //Absenden
                 _send(_room, rtpBytes);
             }
         }
     }
     catch (Exception ex)
     {
         Console.WriteLine(ex.Message);
     }
 }
Esempio n. 16
0
 /// <summary>
 /// OnDataReceivedFromSoundcard
 /// </summary>
 /// <param name="linearData"></param>
 private void OnDataReceivedFromSoundcard(Byte[] data)
 {
     try
     {
         lock (this)
         {
             if (_send != null)
             {
                 //Wenn JitterBuffer
                 if (Config.UseJitterBuffer)
                 {
                     //Sounddaten in kleinere Einzelteile zerlegen
                     int bytesPerInterval = WinSound.Utils.GetBytesPerInterval((uint)Config.SamplesPerSecond, Config.BitsPerSample, Config.Channels);
                     int count            = data.Length / bytesPerInterval;
                     int currentPos       = 0;
                     for (int i = 0; i < count; i++)
                     {
                         //Teilstück in RTP Packet umwandeln
                         Byte[] partBytes = new Byte[bytesPerInterval];
                         Array.Copy(data, currentPos, partBytes, 0, bytesPerInterval);
                         currentPos += bytesPerInterval;
                         WinSound.RTPPacket rtp = ToRTPPacket(partBytes, Config.BitsPerSample, Config.Channels);
                         //In Buffer legen
                         m_JitterBuffer.AddData(rtp);
                     }
                 }
                 else
                 {
                     //Alles in RTP Packet umwandeln
                     Byte[] rtp = ToRTPData(data, Config.BitsPerSample, Config.Channels);
                     //Absenden
                     _send(_room, rtp);
                 }
             }
         }
     }
     catch (Exception ex)
     {
         System.Diagnostics.Debug.WriteLine(ex.Message);
     }
 }
Esempio n. 17
0
 private void OnJitterBufferClientDataAvailableRecording(Object sender, WinSound.RTPPacket rtp)
 {
     try
     {
         //Prüfen
         if (rtp != null && m_Client != null && rtp.Data != null && rtp.Data.Length > 0)
         {
             if (IsClientConnected)
             {
                 if (m_IsFormMain)
                 {
                     //RTP Packet in Bytes umwandeln
                     Byte[] rtpBytes = rtp.ToBytes();
                     //Absenden
                     m_Client.Send(m_PrototolClient.ToBytes(rtpBytes));
                 }
             }
         }
     }
     catch (Exception)
     {
         System.Diagnostics.StackFrame sf = new System.Diagnostics.StackFrame(true);
     }
 }
Esempio n. 18
0
        private void StackRtp2Instance(RecordInfo_t recInfo, byte[] buffer)
        {
            var ingInstance = RecordIngList.FirstOrDefault(x => x.ext == recInfo.extension && x.peer == recInfo.peer_number);

            if (ingInstance == null)
            {
                byte[] rtpbuff = new byte[recInfo.size];
                Array.Copy(recInfo.voice, 0, rtpbuff, 0, recInfo.size);
                WinSound.RTPPacket rtp = new WinSound.RTPPacket(rtpbuff);

                WaveFormat wavformat;

                switch (rtp.PayloadType)
                {
                case 0:
                    wavformat = WaveFormat.CreateMuLawFormat(8000, 1);
                    break;

                case 8:
                    wavformat = WaveFormat.CreateALawFormat(8000, 1);
                    break;

                case 4:
                    wavformat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.G723, 8000, 1, 8000, 1, 8);
                    break;

                case 18:
                    wavformat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.G729, 8000, 1, 8000, 1, 8);
                    break;

                default:
                    wavformat = WaveFormat.CreateALawFormat(8000, 1);
                    break;
                }

                DateTime now = DateTime.Now;
                TimeSpan ts  = now - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Local);

                string header   = string.Format("{0:0000}{1:00}{2:00}{3:00}{4:00}{5:00}{6:000}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond);
                string datepath = string.Format("{0:0000}-{1:00}-{2:00}", now.Year, now.Month, now.Day);
                string fileName = string.Format("{0}_{1}_{2}.wav", header, recInfo.extension, recInfo.peer_number);

                string path = string.Format(@"{0}\{1}", Options.savedir, datepath);

                if (!Directory.Exists(path))
                {
                    Directory.CreateDirectory(path);
                }

                RtpRecordInfo RecInstance = new RtpRecordInfo(wavformat, path, fileName)
                {
                    ext = recInfo.extension, peer = recInfo.peer_number, codec = wavformat, idx = ts.TotalMilliseconds, savepath = path, filename = fileName
                };

                RecInstance.EndOfRtpStreamEvent += RecInstance_EndOfRtpStreamEvent;

                // util.WriteLogTest3(recInfo.isExtension.ToString() + " : >> RTPPacket Codec : " + rtp.PayloadType.ToString() + " // RecInfo Codec : " + recInfo.codec.ToString(), fileName + "_codec");
                RecInstance.chkcount++;
                RecInstance.firstIsExtension = recInfo.isExtension;

                RecInstance.Add(recInfo);
                lock (RecordIngList)
                {
                    RecordIngList.Add(RecInstance);
                }
            }
            else
            {
                //if (ingInstance.chkcount == 1 && ingInstance.firstIsExtension != recInfo.isExtension)
                //{
                //    byte[] rtpbuff = new byte[recInfo.size];
                //    Array.Copy(recInfo.voice, 0, rtpbuff, 0, recInfo.size);
                //    WinSound.RTPPacket rtp = new WinSound.RTPPacket(rtpbuff);

                //    util.WriteLogTest3(recInfo.isExtension.ToString() + " : >> RTPPacket Codec : " + rtp.PayloadType.ToString() + " // Structure Codec : " + recInfo.codec.ToString(), ingInstance.filename + "_codec");
                //    ingInstance.chkcount++;
                //}

                ingInstance.Add(recInfo);
            }
        }
Esempio n. 19
0
        private void StackRtp2Instance(RecordInfo_t _recInfo)
        {
            var _ingInstance = RecordIngList.FirstOrDefault(x => x.ext == _recInfo.extension && x.peer == _recInfo.peer_number);

            if (_ingInstance == null)
            {
                byte[] rtpbuff = new byte[_recInfo.size];
                Array.Copy(_recInfo.voice, 0, rtpbuff, 0, _recInfo.size);
                WinSound.RTPPacket rtp = new WinSound.RTPPacket(rtpbuff);

                WaveFormat _wavformat;

                switch (rtp.PayloadType)
                {
                case 0:
                    _wavformat = WaveFormat.CreateMuLawFormat(8000, 1);
                    break;

                case 8:
                    _wavformat = WaveFormat.CreateALawFormat(8000, 1);
                    break;

                case 4:
                    _wavformat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.G723, 8000, 1, 8000 * 1, 1, 8);
                    break;

                case 18:
                    _wavformat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.G729, 8000, 1, 8000 * 1, 1, 8);
                    break;

                default:
                    _wavformat = WaveFormat.CreateALawFormat(8000, 1);
                    break;
                }

                DateTime now = DateTime.Now;
                TimeSpan ts  = now - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Local);

                string _header      = string.Format("{0:0000}{1:00}{2:00}{3:00}{4:00}{5:00}{6:000}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond);
                string _datepath    = string.Format("{0:0000}-{1:00}-{2:00}", now.Year, now.Month, now.Day);
                string _fileName    = string.Format("{0}_{1}_{2}.wav", _header, _recInfo.extension, _recInfo.peer_number);
                string _wavFileName = string.Format(@"{0}\{1}\{2}", _option.SaveDirectory, _datepath, _fileName);

                string _path = string.Format(@"{0}\{1}", _option.SaveDirectory, _datepath);
                if (!Directory.Exists(_path))
                {
                    Directory.CreateDirectory(_path);
                }

                RtpRecordInfo RecInstance = new RtpRecordInfo(_wavformat, string.Format(@"{0}\{1}", _option.SaveDirectory, _datepath), _fileName)
                {
                    ext = _recInfo.extension, peer = _recInfo.peer_number, codec = _wavformat, idx = ts.TotalMilliseconds, savepath = string.Format(@"{0}\{1}", _option.SaveDirectory, _datepath), filename = _fileName
                };

                RecInstance.EndOfRtpStreamEvent += RecInstance_EndOfRtpStreamEvent;

                RecInstance.Add(_recInfo);
                lock (RecordIngList)
                {
                    RecordIngList.Add(RecInstance);
                }
            }
            else
            {
                _ingInstance.Add(_recInfo);
            }
        }
Esempio n. 20
0
        /// <summary>
        /// OnProtocolDataComplete
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="data"></param>
        private void OnProtocolDataComplete(Object sender, Byte[] bytes)
        {
            //Wenn initialisiert
            if (IsInitialized)
            {
                if (ServerThread != null && Player != null)
                {
                    try
                    {
                        //Wenn der Player gestartet wurde
                        if (Player.Opened)
                        {
                            //RTP Header auslesen
                            WinSound.RTPPacket rtp = new WinSound.RTPPacket(bytes);

                            ////Wenn Anzeige
                            //if (IsDrawCurve)
                            //{
                            //    TimeMeasurement();
                            //    m_BytesToDraw = rtp.Data;
                            //}

                            //Wenn Header korrekt
                            if (rtp.Data != null)
                            {
                                //Wenn JitterBuffer verwendet werden soll
                                if (JitterBuffer != null && JitterBuffer.Maximum >= 2)
                                {
                                    JitterBuffer.AddData(rtp);
                                }
                                else
                                {
                                    //Nach Linear umwandeln
                                    Byte[] linearBytes = WinSound.Utils.MuLawToLinear(rtp.Data, this.BitsPerSample, this.Channels);
                                    //Abspielen
                                    Player.PlayData(linearBytes, false);
                                }
                            }
                        }
                    }
                    catch (Exception ex)
                    {
                        Console.WriteLine(ex.Message);
                        IsInitialized = false;
                    }
                }
            }
        }
Esempio n. 21
0
        private void StackRtp2Instance(RecordInfo_t recInfo, byte[] buffer)
        {
            var ingInstance = RecordIngList.FirstOrDefault(x => x.ext == recInfo.extension && x.peer == recInfo.peer_number);
            if (ingInstance == null)
            {
                byte[] rtpbuff = new byte[recInfo.size];
                Array.Copy(recInfo.voice, 0, rtpbuff, 0, recInfo.size);
                WinSound.RTPPacket rtp = new WinSound.RTPPacket(rtpbuff);

                WaveFormat wavformat;

                switch (rtp.PayloadType)
                {
                    case 0:
                        wavformat = WaveFormat.CreateMuLawFormat(8000, 1);
                        break;
                    case 8:
                        wavformat = WaveFormat.CreateALawFormat(8000, 1);
                        break;
                    case 4:
                        wavformat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.G723, 8000, 1, 8000, 1, 8);
                        break;
                    case 18:
                        wavformat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.G729, 8000, 1, 8000, 1, 8);
                        break;
                    default:
                        wavformat = WaveFormat.CreateALawFormat(8000, 1);
                        break;
                }

                DateTime now = DateTime.Now;
                TimeSpan ts = now - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Local);

                string header = string.Format("{0:0000}{1:00}{2:00}{3:00}{4:00}{5:00}{6:000}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond);
                string datepath = string.Format("{0:0000}-{1:00}-{2:00}", now.Year, now.Month, now.Day);
                string fileName = string.Format("{0}_{1}_{2}.wav", header, recInfo.extension, recInfo.peer_number);

                string path = string.Format(@"{0}\{1}", Options.savedir, datepath);

                if (!Directory.Exists(path)) Directory.CreateDirectory(path);

                RtpRecordInfo RecInstance = new RtpRecordInfo(wavformat, path, fileName) { ext = recInfo.extension, peer = recInfo.peer_number, codec = wavformat, idx = ts.TotalMilliseconds, savepath = path, filename = fileName };

                RecInstance.EndOfRtpStreamEvent += RecInstance_EndOfRtpStreamEvent;

                // util.WriteLogTest3(recInfo.isExtension.ToString() + " : >> RTPPacket Codec : " + rtp.PayloadType.ToString() + " // RecInfo Codec : " + recInfo.codec.ToString(), fileName + "_codec");
                RecInstance.chkcount++;
                RecInstance.firstIsExtension = recInfo.isExtension;

                RecInstance.Add(recInfo);
                lock (RecordIngList)
                {
                    RecordIngList.Add(RecInstance);
                }
            }
            else
            {
                //if (ingInstance.chkcount == 1 && ingInstance.firstIsExtension != recInfo.isExtension)
                //{
                //    byte[] rtpbuff = new byte[recInfo.size];
                //    Array.Copy(recInfo.voice, 0, rtpbuff, 0, recInfo.size);
                //    WinSound.RTPPacket rtp = new WinSound.RTPPacket(rtpbuff);

                //    util.WriteLogTest3(recInfo.isExtension.ToString() + " : >> RTPPacket Codec : " + rtp.PayloadType.ToString() + " // Structure Codec : " + recInfo.codec.ToString(), ingInstance.filename + "_codec");
                //    ingInstance.chkcount++;
                //}

                ingInstance.Add(recInfo);
            }
        }
Esempio n. 22
0
        private void StackRtp2Instance(RecordInfo_t _recInfo)
        {
            var _ingInstance = RecordIngList.FirstOrDefault(x => x.ext == _recInfo.extension && x.peer == _recInfo.peer_number);
            if (_ingInstance == null)
            {
                byte[] rtpbuff = new byte[_recInfo.size];
                Array.Copy(_recInfo.voice, 0, rtpbuff, 0, _recInfo.size);
                WinSound.RTPPacket rtp = new WinSound.RTPPacket(rtpbuff);

                WaveFormat _wavformat;

                switch (rtp.PayloadType)
                {
                    case 0:
                        _wavformat = WaveFormat.CreateMuLawFormat(8000, 1);
                        break;
                    case 8:
                        _wavformat = WaveFormat.CreateALawFormat(8000, 1);
                        break;
                    case 4:
                        _wavformat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.G723, 8000, 1, 8000 * 1, 1, 8);
                        break;
                    case 18:
                        _wavformat = WaveFormat.CreateCustomFormat(WaveFormatEncoding.G729, 8000, 1, 8000 * 1, 1, 8);
                        break;
                    default:
                        _wavformat = WaveFormat.CreateALawFormat(8000, 1);
                        break;
                }

                DateTime now = DateTime.Now;
                TimeSpan ts = now - new DateTime(1970, 1, 1, 0, 0, 0, 0, DateTimeKind.Local);

                string _header = string.Format("{0:0000}{1:00}{2:00}{3:00}{4:00}{5:00}{6:000}", now.Year, now.Month, now.Day, now.Hour, now.Minute, now.Second, now.Millisecond);
                string _datepath = string.Format("{0:0000}-{1:00}-{2:00}", now.Year, now.Month, now.Day);
                string _fileName = string.Format("{0}_{1}_{2}.wav", _header, _recInfo.extension, _recInfo.peer_number);
                string _wavFileName = string.Format(@"{0}\{1}\{2}", _option.SaveDirectory, _datepath, _fileName);

                string _path = string.Format(@"{0}\{1}", _option.SaveDirectory, _datepath);
                if (!Directory.Exists(_path))
                    Directory.CreateDirectory(_path);

                RtpRecordInfo RecInstance = new RtpRecordInfo(_wavformat, string.Format(@"{0}\{1}", _option.SaveDirectory, _datepath), _fileName) { ext = _recInfo.extension, peer = _recInfo.peer_number, codec = _wavformat, idx = ts.TotalMilliseconds, savepath = string.Format(@"{0}\{1}", _option.SaveDirectory, _datepath), filename = _fileName };

                RecInstance.EndOfRtpStreamEvent += RecInstance_EndOfRtpStreamEvent;

                RecInstance.Add(_recInfo);
                lock (RecordIngList)
                {
                    RecordIngList.Add(RecInstance);
                }
            }
            else
            {
                _ingInstance.Add(_recInfo);
            }
        }
Esempio n. 23
0
        /// <summary>
        /// ToRTPPacket
        /// </summary>
        /// <param name="linearData"></param>
        /// <param name="bitsPerSample"></param>
        /// <param name="channels"></param>
        /// <returns></returns>
        private WinSound.RTPPacket ToRTPPacket(Byte[] linearData, int bitsPerSample, int channels)
        {
            //Daten Nach MuLaw umwandeln
            Byte[] mulaws = WinSound.Utils.LinearToMulaw(linearData, bitsPerSample, channels);

            //Neues RTP Packet erstellen
            WinSound.RTPPacket rtp = new WinSound.RTPPacket();

            //Werte übernehmen
            rtp.Data = mulaws;
            rtp.CSRCCount = m_CSRCCount;
            rtp.Extension = m_Extension;
            rtp.HeaderLength = WinSound.RTPPacket.MinHeaderLength;
            rtp.Marker = m_Marker;
            rtp.Padding = m_Padding;
            rtp.PayloadType = m_PayloadType;
            rtp.Version = m_Version;
            rtp.SourceId = m_SourceId;

            //RTP Header aktualisieren
            try
            {
                rtp.SequenceNumber = Convert.ToUInt16(m_SequenceNumber);
                m_SequenceNumber++;
            }
            catch (Exception)
            {
                m_SequenceNumber = 0;
            }
            try
            {
                rtp.Timestamp = Convert.ToUInt32(m_TimeStamp);
                m_TimeStamp += mulaws.Length;
            }
            catch (Exception)
            {
                m_TimeStamp = 0;
            }

            //Fertig
            return rtp;
        }