локальный порт RTP недоступен при использовании mjsip / jmf - PullRequest
2 голосов
/ 21 апреля 2010

Я создаю сеанс sip с mjsip для внешнего провайдера voip. Затем я передаю тестовый wav-файл через rtp провайдеру, используя RtpManager.

Программа работает без ошибок, и я отвечаю на SIP-вызов. Однако звук не передается. Когда я диагностирую сетевой трафик с помощью wireshark, я вижу кучу RTP-трафика от моего локального хоста (за неким натом) к провайдеру voip и ничего не возвращается.

Через некоторое время я получаю ошибку ICMP «Адресат недоступен (Порт недоступен)» от провайдера на мой локальный хост.

Программный линфон работает с использованием одного и того же локального хоста и провайдера voip - хотя он использует другой стек sip.

Есть предложения?

Спасибо

Ответы [ 2 ]

3 голосов
/ 22 апреля 2010

Вы уже ответили на свой вопрос, но да, вы правы: Callee / UAS через некоторое время сочтет, что соединение не было установлено, если оно не получило ACK.

SIP RFC сообщает нам, что транзакция INVITE сервера UAS перейдет в состояние «Завершено», когда отправит 200 OK. Квитанция ACK отправляет его в подтвержденное состояние.

Если, однако, UAS либо имеет транспортную ошибку при отправке 200 OK, либо не получает своевременного получения ACK (срабатывает таймер H (по умолчанию 64 * T1 = 64 * 500 м = 32 секунды), UAS перейдет Прекращенное состояние.

2 голосов
/ 21 апреля 2010

D'ой!

Была обнаружена проблема в том, что я не отправил ACK на сообщение SIP 200, когда мой вызов был принят в моем классе прослушивателя вызовов. Таким образом, 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);
}

Надеюсь, это поможет любому с подобной проблемой

...