SIP:等待Callee站点上的ACK数据包启动RTP会话

时间:2011-10-05 08:45:13

标签: sip asterisk

情况:

我有一个关于 ACK 消息(黄色)的问题,在Callee发送 200 OK + SDP 消息(紫色)。我所说的Asterisk呼叫流程如下:

我的测试网络:

笔记本电脑+软电话----星号----笔记本电脑+软电话

问题:

我所有经过测试的Linux软电话(Twinkle,SFLPhone,Ekiga-Softon,Linphone和QuteCom)都没有等待ACK启动RTP会话。我在Asterisk服务器上使用iptables过滤了ACK消息,并且无论如何都开始了RTP会话。但是由于我的项目意图,我想等待ACK消息,然后启动RTP会话。是否有方法,切换,命令或首选项让软电话等待RTP流,直到收到ACK消息?

附加:

我google了很多,发现了一些设备,例如 iiNet品牌Belkin VoIP路由器,其中包含以下选项:在接收ACK之前启动RTP会话[默认:关闭] 因此我想必须有办法让RTP会话启动收到ACK后。

同时我发现最佳做法是在发送200 OK + SDP后直接启动会话。但是如上所述,这对我的项目来说还不够。


图的来源:

http://www.panoramisk.com/101/asterisk-and-voice-transport/en/

1 个答案:

答案 0 :(得分:4)

简短的回答是否定的;不会有广泛支持的设置允许您在ACK之后强制启动RTP。充其量你会找到一些设备/软电话,例如你提到的设备/软电话,它们具有允许它的设置。我之前在SIP实施者邮件列表上看到了这个查询,如果我没记错的话,RFC实际上并不确定RTP是应该在2xx响应之后还是在ACK之后启动,但一般例外的前提是它是2xx响应

你可以探索的另一个角度是寻找一个设置,或者甚至可能对你的防火墙规则感到棘手,发送没有SDP的初始INVITE。 RFC 3261支持没有SDP的INVITE,当它们被接收时,它表示2xx响应应包含初始SDP提供,随后的ACK将具有SDP响应。使用该机制,RTP将无处可去,直到发送ACK为止。