我在这样的链中拥有两个 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),我认为这是通过配置的抖动缓冲区来解决的。
我的问题是:
- 错误顺序的数据包如何能够通过 Asterisk 1 上的编解码器转换并到达 Asterisk 2?
- jitterbuffer 如何修复由一跳之外引入的错误(我确信罪魁祸首是 SIP 客户端 -
CsipSimple
- 因为其他 SIP 客户端在没有缓冲的情况下听起来比这个好得多)以及为什么较近的服务器上的 jitterbuffer 无法做到这一点?
答案1
您发布的信息听起来不对。第一个接收数据包的星号(面向外部)服务器可能会遇到高数据包延迟、数据包乱序等问题。您通常会在此处添加抖动缓冲区。
如果第二台服务器显示流量延迟高或数据包乱序,并且这两台主机位于同一 LAN 段,则您的 LAN 可能存在问题。嗅探您的 LAN 以查看那里发生了什么(使用 wireshark)。如果您看到大量重新传输,则可能是连接/接线/NIC/等有问题。