Asterisk
UAC 應該如何處理 SIP 183 會話進度
我有以下情況:
2 UAC 正在嘗試通過遠端 SIP 伺服器 (openSER/Kamailio 3.1.3) = 客戶端基礎設施進行交談。UAC 軟體是在使用 Asterisk 的本地測試基礎設施上開發的,可以在其中建立正常呼叫。
問題是在客戶端基礎設施上測試沒有音頻。
我不了解完整的客戶端基礎架構,但從伺服器的日誌/響應(路由標頭欄位)可以得出結論,有一個代理授權伺服器、一個 CiscoSystem SIP GW 以及 PSTN。尤其是我們在 NAT 之後,客戶端也在 NAT 之後。AFAIK 沒有使用 STUN 伺服器。
呼叫流程的主要區別在於,在測試基礎設施中,我們總是收到 180 條消息(響鈴),而在客戶端基礎設施中,我們收到 183 個正在進行的會話。在日誌中可以看到兩個設備都開始發送 rtp 流,但仍然沒有音頻。
我還有一個商業軟體,我們用它測試了客戶端基礎設施並且它可以工作。我們對比了商業軟體發送的消息,和我們的客戶端幾乎沒有區別。
我能找到的唯一區別是在 inv/407/ack 循環之後的消息中:
商業軟體:
重新開始新的分支編號 x
- 發送 inv + auth string - branch/trans num x
- 得到響應 - 分支/trans num x
- 發送確認消息 - 分支/傳輸數 x
我們的客戶:
重新開始新的分支編號 y
- 發送 inv + auth string - branch/trans num y
- 得到響應 - 分支/trans num y
- 發送確認消息 - 一個新的新分支/事務 - z
這可能是導致音頻失去問題的原因嗎?同樣的場景在 Asterisk 中也可以正常工作。
(我假設所涉及的實體是 RFC 3261 SIP 設備,並且忽略了與 RFC 2543 設備的互操作。)
如果涉及 NAT,您首先應該檢查的是
c=
SDP 有效負載中標頭中的 IPContact
標頭中的 IP特別是,這些 IP 應該都可以被對方訪問。
在您的“inv/407/ack 之後”場景中,對非 2xx 響應的 ACK 應該具有相同的
branch
id。但是,2xx 響應終止了 INVITE 事務,因此對 2xx 響應的 ACK 將與 INVITE 的不同branch
。