我使用mjsip创建到外部voip提供商的sip会话。然后,我使用RtpManager将测试wav文件通过rtp传输到提供商。
程序运行时没有错误,我接听了sip呼叫。但是,不会传输任何音频。当我使用wireshark诊断网络流量时,我看到从我的本地主机(在某种nat之后)到voip提供商的一堆RTP流量,并且没有任何返回。
过了一段时间后,我收到从提供者到我的本地主机的ICMP错误"Destination unreachable (Port unreachable)“。
软件linphone使用相同的本地主机和voip提供商工作-尽管它使用不同的sip堆栈。
有什么建议吗?
谢谢
发布于 2010-04-22 21:37:39
您已经回答了自己的问题,但是,是的,您是对的:在一段时间之后,如果没有收到ACK,Callee/UAS将认为连接建立失败。
SIP RFC告诉我们,当发送200OK时,UAS的服务器INVITE事务将进入已完成状态。收到ACK会将其发送到已确认状态。
然而,如果UAS在发送200OK时出现传输错误或未能及时接收ACK (定时器H触发(默认情况下64_T1= 64_500m = 32秒)),则UAS将进入终止状态。
发布于 2010-04-21 05:48:59
哦!
发现问题是,当我的呼叫在呼叫侦听器类中被接受时,我没有向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);
}希望这篇文章能帮助任何有类似问题的人
https://stackoverflow.com/questions/2678331
复制相似问题