在媒体超时的情况下如何终止来自Kamailio的呼叫

时间:2020-04-27 12:20:29

标签: sip voip rtp kamailio

我正在使用Kamailio版本5.3.3和rtpengine版本8.4.0。 Kamailio和Rtp-Engine都在同一台ubuntu计算机上运行。 rtpengine配置文件中的“超时”值设置为60秒。

我在注册到Kamailio的两个SIP客户端之间建立了呼叫,并且媒体通过rtp引擎中继-可以正常工作

为了测试rtp媒体超时,我阻止了从SIP客户端到rtpengine的UDP流量,并且在指定的时间段之后,我从rtpengine看到以下日志,这似乎表明它已检测到超时

rtpengine[2127]: INFO: [R-RVm58r4SUY7Cz6GW-D5w..]: Closing call due to timeout

但是,即使在此之后,呼叫也会终止。所以我的问题是:

当rtp引擎检测到媒体超时时,如何让Kamailio终止呼叫。为此,需要对kamailio cfg进行哪些更改(如果有)?

更新

在屏蔽IP地址后附加了当前的kamailio.cfg和rtpengine.conf文件

基本上,我的要求是,如果通话中的一个(或两个)SIP客户端被杀死或失去网络或停止发送媒体,则必须有一种方法可以在Kamailio中识别并终止通话。

Kamailio配置:https://pastebin.com/s4akZSfa Rtpengine配置:https://pastebin.com/7xzejiYW

我对此进行了进一步调试,我面临两个单独的问题:

第一期

我前面提到的问题-当我阻止从两个SIP客户端到RTPEngine的RTP通信时,RTP Engine会检测到超时,如从上面提到的日志中看到的那样,但是调用不会结束。根据我的理解,在进一步调试时,rtpengine需要对Kamailio进行RPC调用以告知其结束对话框-为此,我尝试在rtpengine中使用“ b2b-url”和“ xmlrpc-format”配置选项,但是在这里我不清楚以下内容:

a。 rtpengine的“ b2b-url”配置中应设置的端口是什么?一世 尝试使用80和5060,但在以下情况下保持连接被拒绝 rtpengine尝试在媒体超时时发出卷曲请求

b。为此需要加载哪个Kamailio模块- XMLRPC模块,XHTTP RPC模块和JSONRPCS模块-其中之一是 需要这个吗?

第二期: 第二个问题是,如果不是从两个设备都阻止了RTP流量,而是仅从其中一个设备阻止了它-那么看来rtpengine甚至无法检测到媒体超时,这意味着我看不到日志{我在syslog中看到{1}},这是当两个设备的流量都被阻止时看到的。我假设必须有一种方法可以检测到此情况-处理一台设备说出网络松动或停止发送媒体的情况-我如何才能基于此检测并采取措施?

1 个答案:

答案 0 :(得分:0)

好吧,所以我很可能想出了第一个问题-当双方RTP流量都出现故障并且rtpengine能够检测到超时但呼叫没有结束时。

我的配置有2个问题:

  1. 在rtpengine中,我正在127.0.0.1:5060上发送RPC请求,但在kamailio.cfg中,它正在侦听本地IP(10.xxx)-当我在kamailio中将其更改为0.0.0.0时。 cfg,rtpengine能够建立连接

  2. 在rtpengine中,xmlrpc格式的值需要为2而不是1(似乎不太确定)-1表示 teardown 命令,而2表示 dlg.terminate_dlg 命令。此外,对话框模块未加载到kamailio.cfg中。 在kamailio中加载对话框模块并在rtpengine.conf中将值设置为xmlrpc-format到2后-现在,当双方RTP流量都被阻止时,Kamailio会干净地终止呼叫。

但是我仍然无法弄清上面提到的第二个问题-为什么如果只有一侧RTP流量被阻止,rtpengine无法检测到媒体超时