networking - 补偿抖动

标签 networking audio voip latency

我有一个语音聊天服务,它正在经历数据包之间的延迟变化。我想知道对此的正确 react 是什么,以及如何弥补它?
例如,我应该以某种方式调整我的音频缓冲区吗?

谢谢

最佳答案

您不会说这是您自己开发的应用程序还是您正在使用的应用程序 - 您显然会对前者拥有更多控制权,因此这可能很重要。

无论哪种方式,都可能是您的网络根本不足以支持 VoIP,在这种情况下,您确实需要专注于改进网络或使用不同的网络。

在用户感知问题之前,VoIP 通常需要少于 200 毫秒(毫秒)的端到端延迟。

抖动也很重要——简单来说,它是端到端数据包延迟的变化。例如,数据包 1 和数据包 2 之间的延迟可能是 20 毫秒,但数据包 2 和数据包 3 之间的延迟可能是 30 毫秒。拥有 40 毫秒的 jitter buffer 意味着您的应用程序将在数据包之间等待长达 40 毫秒,因此不会“丢失”任何这些数据包。

在 jitter buffer 窗口内未接收到的任何数据包通常都会被忽略,因此抖动与连接的有效数据包丢失值之间存在关系。数据包丢失通常也会影响用户对 voip 质量的感知 - 不同的代码具有不同的容忍度 - 一个常见的目标可能是它应该低于 1%-5%。如果只是间歇性问题,丢包隐藏技术可以提供帮助。

jitter buffer 要么是静态的,要么是动态的(自适应的)——在任何一种情况下,它们越大,它们在调用中引入延迟的机会就越大,你就会回到上面的延迟问题。典型的 jitter buffer 可能在 20 到 50 毫秒之间,可以静态设置,也可以根据网络条件自动调整。

更多信息的良好引用是:
- http://www.voiptroubleshooter.com/indepth/jittersources.html
- http://www.cisco.com/en/US/tech/tk652/tk698/technologies_tech_note09186a00800945df.shtml

也值得尝试一些常见的互联网连接在线速度测试,因为许多测试都会有特定的 VoIP 测试,可以让您了解您的本地连接是否足以支持 VoIP(尽管请记住,这些测试仅表明条件您运行测试的确切时间)。

关于networking - 补偿抖动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7090268/

相关文章:

audio - 如何通过聊天程序发送某些应用程序的声音(Windows OS)

c# - 计算与源文件相比的wav文件中的噪声量

linux - 本地网络服务器之一上的奇怪路由

c# - 更改音频文件的音调并用NAudio保存

iphone - iPhone 上的实时音调变换

python - Pygame 不会播放音频,但只有在作为守护进程运行时才会播放

android - PJSUA2 sip android 原生应用

postgresql - 无法从 azure 资源连接到 postgres 服务器的 Azure 数据库

networking - Raspberry Pi 上使用 batman-adv 协议(protocol)的无线网状网络

c - 使用套接字将数据包发送到另一个子网/网络