【问题标题】:Get total Latency - UDP Audio Communication获取总延迟 - UDP 音频通信
【发布时间】:2013-07-20 01:07:37
【问题描述】:

好的,我目前正在尝试使用 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 获取数据,将其放入缓冲区并播放。

【问题讨论】:

    标签: networking audio udp latency


    【解决方案1】:

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

    【讨论】:

    • 是的,注意到了,我设置为 4 毫秒,然后我可以获取缓冲提供程序(缓冲持续时间),并将其添加到其中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2012-09-16
    • 2018-07-19
    相关资源
    最近更新 更多