dwk00 Ответов: 1

Проблема буфера приложения Naudio chat


Я создал TCP-аудиочат(базовый) ...
Он работает около 1 секунды, а затем говорит, что буфер заполнен

Я хочу использовать это как планшет для домофона планшета входной двери

Сервер
 WaveIn waveIn = new WaveIn();
// int deviceID = Cmb_InputDevices.SelectedIndex;
waveIn.BufferMilliseconds = 50;
waveIn.DeviceNumber = 0;


 waveIn.WaveFormat = new WaveFormat(44100, 1);//, WaveIn.GetCapabilities(deviceID).Channels); 


 // Lamewriter = new LameMP3FileWriter(Application.StartupPath + @"\128bits.mp3", waveIn.WaveFormat, LAMEPreset.ABR_128);


 waveIn.DataAvailable += WaveIn_DataAvailable;
waveIn.StartRecording();


private void WaveIn_DataAvailable(object sender, WaveInEventArgs e)
 {
 try
 {

byte[] decodedData = null;
 decodedData = G711.Encode_aLaw(e.Buffer, 0, e.Buffer.Length);
 Stream.Write(decodedData, 0, decodedData.Length); // NetworkStream
 }
 catch (Exception ex)
 {
 // MessageBox.Show(ex.ToString());
 }
 }
>

Клиент


<
 WaveOut waveOut;
 WaveIn sourceStream;
 waveOut = null;

 sourceStream = null;
 waveOut = new WaveOut();


 sourceStream = new WaveIn();
 sourceStream.BufferMilliseconds = 50;
 sourceStream.DeviceNumber = 0;
 sourceStream.WaveFormat = new WaveFormat(44100, 1);//bitRate, bitDepth);


 waveProvider = new BufferedWaveProvider(sourceStream.WaveFormat);


 waveOut.Init(waveProvider);
 waveOut.Play();


 //  sourceStream.StartRecording();
            byte[] decodedData = null;//new byte[44100]; 
            byte[] bytes = new byte[1024];
            try
            {
                
                while(true)
                {
                    textBox1.AppendText(Encoding.ASCII.GetString(bytes, 0, bytes.Length));
                   stream.Read(bytes, 0, bytes.Length);
                    decodedData = G711.Decode_aLaw(bytes, 0, bytes.Length);


                    waveProvider.AddSamples(decodedData, 0, decodedData.Length);
                   // waveOut.Play();
                    
                }
            }catch(Exception ex) {    }


Проблема заключается в буферных байтах ...

Что я уже пробовал:

Я пробовал много версий этого, включая использование

sourceStream.DataAvailable += SourceStream_DataAvailable;


Никакая радость

Я надеюсь, что есть решение ...

1 Ответов

Рейтинг:
0

0x01AA

Основываясь на информации, которую вы дали, трудно помочь. Но в любом случае я вижу по крайней мере две проблемы:

1.) для потоковой передачи аудио я бы использовал UDP вместо TCP.

2.) Клиент

2.а) цикл while в вашем клиенте является/может быть большой нагрузкой для процессора, вы должны заменить его кодом на основе событий. Значит, когда что-то (но достаточное для декодирования) поступает в поток, только тогда вы должны декодировать.

2.б) textBox1.AppendText, вероятно, только для отладки. Для отладки должно быть достаточно показать только длину буфера, а не все содержимое.

Я надеюсь, что это немного поможет.


dwk00

Спасибо...