2013-07-21 198 views
0

好吧,我目前正在嘗試使用NAudio和c#製作語音聊天軟件。獲取總延遲 - UDP音頻通信

但我目前有一個問題,延遲似乎打賭越來越糟,越長的應用程序運行。

現在,我是一個初學者,所以我不知道可能是什麼原因。

但要排除故障,我想知道是否可以得到總延遲,看看它隨着時間的推移會增加多少。

總延遲時間=輸入緩衝區+網絡延遲時間+輸出緩衝區(如果有的話,我用的是UDP)。

所以,如果我有這樣的:

Label.text = TotalLatency();

它會一直更新。

  while (!bStop) 
      { 
       byte[] datanbefore = waveStream.GetBuffer(); 

       autoResetEvent.WaitOne(); 
       waveStream.Position = 0; 
       captureBuffer.Read(offset, waveStream, halfBuffer, LockFlag.None); 
       readFirstBufferPart = !readFirstBufferPart; 
       offset = readFirstBufferPart ? 0 : halfBuffer; 

       //TODO: Fix this ugly way of initializing differently. 

       //Mute Mic when button is checked 
       if (MuteMic.Checked) 
       { 
        waveStream = new MemoryStream(halfBuffer); 
       } 

       byte[] datanaudio = waveStream.GetBuffer(); 
       udpClient.Send(datanaudio, datanaudio.Length, otherPartyIP.Address.ToString(), 5550); 


      } 

所以這裏是發送部分。我不確定緩衝是如何工作的,因爲我使用免費的樣本開始了應用程序,並且一直在不斷改變它,但是有些部分仍然存在,但我認爲緩衝區可以改進。

while (!bStop) 
      { 

       //Receive data. 
       byte[] byteData = udpClient.Receive(ref remoteEP); 
       waveProvider.AddSamples(byteData, 0, byteData.Length); 


      } 

這裏是接收部分,it's簡單得多,它只是從UDP get's的數據,屁股緩衝和播放。

回答

0

通過了解WaveIn和WaveOut的緩衝區大小,可以粗略計算輸入和輸出延遲。在NAudio中,默認情況下它們每100ms。 對於網絡延遲,您可以嘗試對音頻數據包進行時間戳記,儘管兩臺計算機的時鐘都需要同步。

+0

是啊,注意到,andi設置爲4ms,那麼我可以得到緩衝提供者(Buffer Duration),並將其添加到它。 – Zerowalker