2010-04-20 51 views
2

我使用mjsip爲外部voip提供程序創建sip會話。然後,我使用RtpManager將一個測試wav文件通過rtp傳輸給提供者。使用mjsip/jmf時本地RTP端口無法訪問

該程序運行沒有錯誤,我回答了SIP呼叫。但是,不傳輸音頻。當我使用wireshark診斷網絡流量時,我看到一些來自本地主機(位於某種nat後面)的RTP流量到voip提供商,並且沒有任何迴應。

過了一段時間,我從提供程序得到ICMP錯誤「Destination unreachable(Port unreachable)」到我的本地主機。

linphone軟件使用相同的本地主機和voip提供程序 - 雖然它使用不同的SIP堆棧。

有什麼建議嗎?

謝謝

+0

嗨,我真的對你的項目感興趣,你能告訴我你是如何使用mjsip調用的嗎?你如何流測試wav文件? – B770 2013-07-07 11:58:43

回答

3

你已經回答了你自己的問題,但是,是的,你說得對:被叫方/ UAS會,一段時間之後,視如果連接沒有收到ACK,連接失敗。

SIP RFC告訴我們,UAS的服務器INVITE事務在發送200 OK時會進入Completed狀態。收到ACK會將其發送到確認狀態。

但是,如果UAS在發送200 OK時發生傳輸錯誤或未能及時收到ACK(定時器H發生(默認爲64 * T1 = 64 * 500m = 32秒),則UAS將移動到終止狀態

2

D'oh!

發現問題是我的呼叫監聽器類中接受了我的呼叫時,我沒有向SIP 200消息發送ACK。所以voip客戶端忽略了相應的rtp請求。

public void onCallAccepted(Call call, String sdp, Message resp){ 
    System.out.println("call accepted"); 
    call.ackWithAnswer(sdp); //this was the missing line I needed 
    this.setupRtpSession(call); 
} 

希望這有助於任何人有類似的問題