缓冲在 Asterisk 服务器链中如何工作?

缓冲在 Asterisk 服务器链中如何工作?

我在这样的链中拥有两个 Asterisk 服务器:

SIP 客户端(G.729)<-SIP-> Asterisk 1(将 G.729 转换为 G.711)<-IAX2-> Asterisk 2 -> 终止于模拟线路。

当在任何一个 Asterisk 上都没有配置缓冲时,在模拟线路上接收时的声音会很糟糕(在另一个方向上声音完全没问题 - 我认为 SIP 客户端已经启用了接收缓冲。)

由于两个 Asterisk 服务器位于 LAN 上,我认为面向远程 SIP 客户端的 Asterisk 1 上的缓冲最有意义。

但是,在 Asterisk 1 上启用缓冲对声音质量没有影响。在 Asterisk 2 上启用缓冲不知何故成功了

观察 Asterisk 2 上的统计数据可以证实这一点:

CLI> iax2 show netstats
                           -------- LOCAL ---------------------  -------- REMOTE --------------------
Channel               RTT  Jit  Del  Lost   %  Drop  OOO  Kpkts  Jit  Del  Lost   %  Drop  OOO  Kpkts FirstMsg    LastMsg
IAX2/ast1-5936       1   60  140    79   0    43 16712     64    0   40     0   0     0    0      0 Rx:NEW      Rx:ACK    

如您所见,大约 25% 的接收数据包是无序的(OOO),我认为这是通过配置的抖动缓冲区来解决的。

我的问题是:

  1. 错误顺序的数据包如何能够通过 Asterisk 1 上的编解码器转换并到达 Asterisk 2?
  2. jitterbuffer 如何修复由一跳之外引入的错误(我确信罪魁祸首是 SIP 客户端 - CsipSimple- 因为其他 SIP 客户端在没有缓冲的情况下听起来比这个好得多)以及为什么较近的服务器上的 jitterbuffer 无法做到这一点?

答案1

您发布的信息听起来不对。第一个接收数据包的星号(面向外部)服务器可能会遇到高数据包延迟、数据包乱序等问题。您通常会在此处添加抖动缓冲区。

如果第二台服务器显示流量延迟高或数据包乱序,并且这两台主机位于同一 LAN 段,则您的 LAN 可能存在问题。嗅探您的 LAN 以查看那里发生了什么(使用 wireshark)。如果您看到大量重新传输,则可能是连接/接线/NIC/等有问题。

相关内容