2010-04-20 4 views
2

mjsip을 사용하여 외부 VoIP 공급자에게 SIP 세션을 만듭니다. 그런 다음 rtpManager를 사용하여 rtp를 통해 테스트 wav 파일을 공급자에게 전송합니다.mjsip/jmf를 사용할 때 로컬 RTP 포트에 연결할 수 없습니다.

프로그램이 오류없이 실행되고 SIP 전화에 응답합니다. 그러나 오디오는 전송되지 않습니다. wireshark를 사용하여 네트워크 트래픽을 진단 할 때 localhost (일종의 nat 뒤에 있음)에서 VoIP 공급자에게 RTP 트래픽이 많이 표시되는 것을 볼 수 있습니다.

잠시 후 제공 업체의 "local unreachable (Port unreachable)"이라는 ICMP 오류가 내 localhost로 전송됩니다.

소프트웨어 linphone은 동일한 로컬 호스트와 VoIP 공급자를 사용하여 작동하지만 다른 SIP 스택을 사용하고 있습니다.

제안 사항?

감사합니다.

+0

안녕하세요, 저는 프로젝트에서 정말로 인터레이스되어 있습니다. mjsip으로 전화를 한 방법을 알려주시겠습니까? 테스트 wav 파일을 스트리밍하려면 어떻게해야합니까? – B770

답변

3

이미 자신의 질문에 대답 한 당신 비슷한 문제로 사람을 도움이되지만 그래, 당신 말이 맞아요 : 호출 수신자/UAS는, 일정 기간 후를 생각한다 연결이 ACK를 수신하지 못한 경우 연결이 실패한 것으로 간주합니다.

SIP RFC은 UAS의 서버 INVITE 트랜잭션이 200 OK를 전송할 때 완료 상태가 될 것이라고 말합니다. ACK를 수신하면 확인 상태가됩니다. 그러나 UAS는 200 OK를 전송할 때 전송 오류가 발생하거나 시간 지연으로 ACK를 수신하지 못하면 (Timer 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); 
} 

는 희망이