2

mjsipを使用して外部VoIPプロバイダーへのSIPセッションを作成します。次に、RtpManagerを使用してrtp経由でテストwavファイルをプロバイダーに送信します。

プログラムはエラーなしで実行され、私はsip呼び出しに応答します。ただし、音声は送信されません。Wiresharkでネットワークトラフィックを診断すると、ローカルホスト(ある種のNATの背後)からVoIPプロバイダーへのRTPトラフィックが大量に表示されますが、何も返されません。

しばらくすると、プロバイダーからローカルホストへのICMPエラー「Destinationunreachable(Port unreachable)」が表示されます。

ソフトウェアlinphoneは、同じlocalhostおよびvoipプロバイダーを使用して動作しますが、異なるsipスタックを使用しています。

助言がありますか?

ありがとう

4

2 に答える 2

3

あなたはすでにあなた自身の質問に答えました、しかしそうです、あなたは正しいです:Callee / UASは、しばらくすると、ACKを受け取らなかった場合に接続が確立されなかったとみなします。

SIP RFCは、UASのサーバーINVITEトランザクションが200 OKを送信すると、完了状態になることを示しています。ACKを受信すると、確認済み状態になります。

ただし、UASが200 OKを送信するときにトランスポートエラーが発生するか、ACKをタイムリーに受信できない場合(タイマーHが起動します(デフォルトでは64 T1 = 64 500m = 32秒)、UASは終了状態に移行します。

于 2010-04-22T13:37:38.850 に答える
2

D'oh!

問題は、コールリスナークラスでコールが受け入れられたときに、SIP200メッセージに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);
}

うまくいけば、これは同様の問題を抱えている人に役立つでしょう

于 2010-04-20T21:48:58.607 に答える