我使用的是PJSIP的pjsua撥號器(基於pjsua_app.c,PJSIP 2.0.1)與TCP傳輸和SIP中繼做出手機電話通話中通過TCP。撥號程序通過TCP向SIP服務器註冊,並通過TCP發送出邀請。 UDP傳輸未被使用。使得SIP使用PJSIP
的環境是這樣的 -
PJSIP(後面NAT)< --- SIP通過TCP ---> SIP服務器< --- SIP中繼 - > SIP中繼提供商< - PSTN /移動網關 - >移動電話
所有的呼叫都是由PJSIP通過TCP連接到移動設備。要禁用UDP傳輸創造我插線"cfg->no_udp = true;"
在功能
"static void default_config(struct app_config *cfg)" in pjsua_app.c
結束時,我跟着給here做出了TCP調用指令。
問題是我們沒有收到從移動端發送到PJSIP撥號器的音頻。 但是來自PJSIP撥號器的RTP數據包恰好到達移動端。通話建立後,我們可以聽到移動電話中的音頻。
我們發現從數據包跟蹤,我們不要在PJSIP撥號器接收媒體的原因是,SIP服務器發送接收的SIP中繼RTP數據包的私有IP地址。
但是,當我們切換到UDP註冊並通過TCP發送INVITES調用工作正常(音頻兩端)。
Wireshark的數據包捕獲顯示如下 -
1. PJSIP registers with server over TCP.
2. Server sends 401 with PJ's public IP and port in VIA
3. PJ registers again but inserts its public ip and port in the
contact header in the next REGISTER message sequence.
So far so good. Same sequence of messages seen when UDP is used to REGISTER.
4. INVITE sent over TCP. Dialog establishment works fine.
But in the record-route header nat=yes is missing.
5. Server sends media to private IP. No media received at PJSIP.
這是PJSIP的錯誤嗎?如果是這樣如何解決。 Wireshark數據包追蹤可根據要求提供。 您的幫助和投入非常感謝。