ptime=20, 30, 40
在 SIP 会话中, 我们常常在 SDP 中设置 ptime 参数,用于指示呼叫的双方协商 RTP 数据包的大小。如果呼叫中的一方对 RTP 数据包的大小有不同的看法, 它可以在呼叫中设置自己期望的 ptime 参数。但是世界是如此的多样而复杂,有一些 SIP 设备根本就不关心 ptime 参数,并且它们也根本不会告诉呼叫的另一方自己期望的 ptime 参数,往往就是直接开始发送 RTP 包。这种做法就极可能导致问题。
比如,“呼叫记录”业务要求 miniSIPServer 混合从呼叫双方收到的语音流。为了让工作轻松、简单,miniSIPServer 会设置 ptime 参数为20,也就是要求呼叫的双方每20毫秒发送一个 RTP 数据包,因此 miniSIPServer 每20毫秒从双方获得数据包并进行混音、保存在本地文件中。让人毫不意外的是,有些 SIP 设备每30毫秒发送一个包、有些设备每40毫秒发送一个包。当 miniSIPServer 拿到这些大小不一的包进行混音时,时间不一致、大小不一致,有些数据就不得不丢弃。这就导致最后混音的本地语音文件语音质量欠佳。
当然,理想的解决方案是各家设备都尊重 ptime 参数,但是我们对此毫不指望。
因此不得不升级 miniSIPServer 至 V40(build 20220922)来解决这个问题。新版本试图缓存从呼叫双方获得的 RTP 数据包,然后尽力平滑语音的混音过程。另外,我们不得不指出,这显然增加了服务器的 工作负荷。