Asterisk

UAC 應該如何處理 SIP 183 會話進度

  • December 4, 2011

我有以下情況:

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 有效負載中標頭中的 IP
  • Contact標頭中的 IP

特別是,這些 IP 應該都可以被對方訪問。

在您的“inv/407/ack 之後”場景中,對非 2xx 響應的 ACK 應該具有相同的branchid。但是,2xx 響應終止了 INVITE 事務,因此對 2xx 響應的 ACK 將與 INVITE 的不同 branch

(雖然RFC 3261是 SIP 基礎知識的權威資源,但我發現RFC 3665對了解事物的工作方式非常有幫助。)

引用自:https://serverfault.com/questions/337044