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 數據包,然後儘力平滑語音的混音過程。另外,我們不得不指出,這顯然增加了服務器的 工作負荷。

留言

此網誌的熱門文章

miniSIPServer 新 web 界面

外線的 RequestURI 參數

在 Debian 12 (bookworm) 系統中運行 miniSIPServer