因为SIP网络技术存在了很多年,一些终端设备可能仅支持RFC2543,另外一些比较新的终端设备可能同时支持了RFC2543和RFC3264,为了完成成功的呼叫等待,双方终端通常需要两种协议都能支持才能实现。下面的示例是一个关于SIP 呼叫等待中SDP的交互流程(这里假设已正常通话,无NAT问题),通过SDP的交互双方实现呼叫等待和重启呼叫的流程。
![](http://www.ctiforum.com/uploadfile/2021/1101/20211101104229528.jpg)
在以上的处理流程中,事实上,呼叫方执行呼叫等待时在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