获取总延迟 - UDP音频通信

时间:2013-07-21 01:27:59

标签: networking audio udp latency

好的,我目前正在尝试使用NAudio和c#制作语音聊天软件。

但是我目前遇到了问题,延迟似乎越来越差,应用程序运行的时间越长越好。

现在,我是一个初学者,所以我不知道它的原因是什么。

但是要排除故障,我想知道我是否可以获得总延迟,看看它随着时间的推移会增加多少。

总延迟=输入缓冲区+网络延迟+输出缓冲区(如果有的话,还有更多,我正在使用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);


            }

这是接收部分,它更简单,它只是从UDP获取数据,将它放到缓冲区并播放它。

1 个答案:

答案 0 :(得分:0)

通过了解WaveIn和WaveOut的缓冲区大小,您可以大致计算输入和输出延迟。默认情况下,NAudio每个都是100毫秒。 对于网络延迟,您可以尝试对音频数据包加时间戳,尽管两台机器的时钟需要同步。