您当前的位置是:  首页 > 资讯 > 文章精选 >
 首页 > 资讯 > 文章精选 >

SIP-SDP经典示例-呼叫等待是如何实现的-关于Call Hold-呼叫等待处理流程

--RFC2543和RFC3264兼容性处理

2021-11-01 10:41:06   作者:james.zhu   来源:Asterisk开源派   评论:0  点击:


  在我们使用电话系统或者IPPBX时,很多用户会使用其核心功能-call hold 呼叫等待。简单来说,在我们进行正常双方通话时,如果其中一方有其他事情紧急处理,或者需要暂时停止双方之间通话来处理其他的事情,用户就可以使用呼叫等待功能,通话暂时终止一段时间,对端暂时处于等待状态。待摁等待键的用户完成工作以后,再摁Hold键重新开启双方通话。用户在实际操作中没有感觉其流程的复杂性,但是在实际系统的处理方面却经过了几次SDP的协商, 并且通过了RFC2543和RFC3264的混合处理来实现兼容性方面的要求。
  因为SIP网络技术存在了很多年,一些终端设备可能仅支持RFC2543,另外一些比较新的终端设备可能同时支持了RFC2543和RFC3264,为了完成成功的呼叫等待,双方终端通常需要两种协议都能支持才能实现。下面的示例是一个关于SIP 呼叫等待中SDP的交互流程(这里假设已正常通话,无NAT问题),通过SDP的交互双方实现呼叫等待和重启呼叫的流程。
  在以上的处理流程中,事实上,呼叫方执行呼叫等待时在SDP中修改了c行的地址, 地址为0.0.0.0,这个流程是根据RFC2543来实现的。通过修改c行地址为0.0.0.0 表示不再接收媒体流。但是,这个处理方式在RFC3264中是一种不再推荐的处理方式,因为这样处理的话,它不能支持RTCP对媒体流的控制。另外,如果使用IPv6的话,可能会破坏和源媒体的连接。RFC3264支持了拓展方式,它支持了四种不同的a行的属性设置。如果呼叫方需要重启已处于呼叫等待状态的呼叫,摁Hold 按键,发送SDP的a=sendrecv重新开启双向媒体流,开始正常通话处理。
  参考资料:
  • www.dinstar.cn
  • https://www.rfc-editor.org/rfc/rfc3264.html
  • www.asterisk.org.cn
【免责声明】本文仅代表作者本人观点,与CTI论坛无关。CTI论坛对文中陈述、观点判断保持中立,不对所包含内容的准确性、可靠性或完整性提供任何明示或暗示的保证。请读者仅作参考,并请自行承担全部责任。

相关阅读:

专题

CTI论坛会员企业