1.引言

在传统的电话网环境中,第三方呼叫控制允许一个实体(这里称为控制器- controller) 建立并管理另外的两方或多方之间的通信关系,而其本身并不参与通信。

第三方呼叫控制经常用于运营商业务 (运营商常常会建立一个呼叫将两个用户连接起来)和会议。

同样地,许多SIP业务都可能通过3PCC实现。这包括从PSTN继承的传统的业务,也包括新的业务,例如点击拨号(click-to-dial)。点击拨号允许用户在他们想与客服代表通话时点击一个Web页面上的链接,之后web服务器便会创建一个用户与客服代表之间的呼叫。这个呼叫可以是Phone2Phone、PC2Phone、或者PC2PC的。

仅使用RFC 3261中的机制,便可以实现3PCC。实际上有多种不同的呼叫流程都是可行的,每种都能在遵从SIP的用户代理上正确的工作。当然,每种流程都有其优点和缺陷。

2.流程1

说明如下:

1. Controller向B发送INVITE,且不携带SDP,B收到INVITE发现其中未含SDP。

2. B向Controller回200响应,其中含有SDP,作为offer。

3. Controller向B发送INVITE,其中携带来自B前面所回的200响应中的SDP作为offer。

4. A分析offer产生answer,并在200响应中返回Controller

5. Controller将answer放在ACK中发送给B

6. Controller向A发送ACK。

这个流程非常简明,Controller 无需处理SDP,可以应用于在任何两端支持的媒体类型。

但是这个流程可能会存在严重的超时问题:如果A不能立即应答呼叫的话,Controller将不能马上向B发送ACK。这会导致B在一定时间内周期性重发200 OK响应(根据RFC 3261 的规定这个时间的时长为64*T1)。如果这段时间之后,ACK仍未到达B,那么这个呼叫就回被认为失败了。

这个流程适用于控制者知道A将会立即应答INVITE消息的场景。通常A为媒体服务器上提供的种自动服务。

3.流程2

针对流程1中的超时问题,流程2进行了改进。

流程2在在流程1的基础上增加消息1~3,用于解决B上的超时问题:C先与A建立了会话(媒体未激活),这保证了之后的(re)INVITE(6)的200(7)响应会立即返回C,使得ACK能够马上发给B,有效避免了超时问题。

流程2中,Controller需要对SDP进行处理。Answer1由Controller生成,是一个所谓黑洞(black hole)SDP,其连接地址为0.0.0.0。Offer2是由Controller基于offer2得来的,可能需要对其中的媒体行进行重组或裁剪。例如,如果offer1含有一个audio和一个video行,但是offer2只含有一个audio行,Controller需要在offer2中加一个video行(将其端口设为0),生成offer2‘。类似地,Controller会基于answer2‘生成answer2,发给B。

4.流程3

流程3是在流程2上变化而来,并降低了复杂性。实际的SIP消息流程完全一样,只是在SDP放置和处理上有所不同。

在消息1~3中,与流程2的不同在于:这里,Offer1中根本没有媒体,也就是说没有 m 行。这是合法的,这暗示了会话的媒体将会在之后通过re-INVITE建立。同样地,Answer1也没有媒体。

之后的流程与流程III的完全一样,但需要进行的处理,即offer2到offer2‘的转换,answer2’到answer2的转换,会简单得多。实际上,这里根本不需要媒体处理,要改变的仅仅是修改origin行,以便offer2‘ 中的origin行之与offer1中的值是合法的 (合法性要求version值增加1,其他参数保持不变)。

关于这个流程也有一些限制。首先,用户A在任何媒体都不建立的情况下被振铃,这意味着用户A将不能根据其媒体构成来接受或拒绝呼叫;其次,A和B都会最终在不知道是否有兼容的媒体之前就应答了呼叫 (例如产生200响应)。这样,如果实际上没有共同的媒体能力,呼叫将会在之后通过一个BYE结束。然而,用户已经被振铃了,造成骚扰,并且还可能产生计费事件。

5.总结

流程1是最简单有效的流程。如果controller确定通信双方中的一方实际上是一个将会立即应答呼叫的自动设备,比如,媒体服务器、会议服务器、消息服务器,等等,那么就应该使用这个流程。可以想象,大多数情况下,3PCC建立的通信中会有一方是自动设备,因此这个流程会很常用。

如果通信的双方都是真实的人,或者是未知类型的实体,推荐使用流程3;流程2也可以使用,但是不会提供更多的好处。

在大多数情况下,包括在推荐的流程中,在完成到B呼叫的呼叫的时候,A会听到一段时间的静默。这会显的不太理想。对于这个问题,可以考虑在完成到B的呼叫的时候,将A连接到一个music-on-hold资源上来解决。

SIP中第三方呼叫控制(3PCC)建立流程的更多相关文章

  1. STUN/TURN/ICE协议在P2P SIP中的应用(一)

    1           说明 本文详细描述了基于STUN系列协议实现的P2P SIP电话过程,其中涉及到了SIP信令的交互,P2P的原理,以及STUN.TURN.ICE的协议交互 本文所提到的各个服务 ...

  2. STUN/TURN/ICE协议在P2P SIP中的应用(二)

    1       说明 2       打洞和穿越的概念... 1 3       P2P中的打洞和穿越... 2 4       使用STUN系列 协议穿越的特点... 2 5       STUN/ ...

  3. SIP中的SDP offer/answer交换初探

    1.引言 SDP的offer/answer模型本身独立与于利用它的高层协议.SIP是使用offer/answer模型的应用之一.RFC 3264 定义了offer/answer模型,但没有规定使用哪个 ...

  4. 开发与测试整体过程中的Git分支merge流程

    开发与测试整体过程中的Git分支merge流程 Git分支merge之开发流程 首先在Gitlab上有个仓库存储着原始的项目代码,其中包含一个叫master的分支.然后可能按功能进行分配,由不同的开发 ...

  5. 【转】SIP 中的Dialog,call,session 和 transaction

    如果你对Sip协议中Call, Dialog, Transaction和Message之间的关系感觉到迷惑,那么,那么我可以告诉你,你并不孤单,因为大多数初学者对于这些名词之间的关系都会感到疑惑.   ...

  6. Sipdroid实现SIP(六): SIP中的请求超时和重传

    目录 一. Sipdroid的请求超时和重传 二. SIP中超时和重传的定义 三. RFC中超时和重传的定义 一. Sipdroid的请求超时和重传 Sipdroid实现SIP协议栈系列, 之前的文章 ...

  7. 转 关于Https协议中的ssl加密解密流程

    关于Https协议中的ssl加密解密流程 2016年09月28日 09:51:15 阅读数:14809 转载自:http://www.cnblogs.com/P_Chou/archive/2010/1 ...

  8. java项目建立流程

    spring mvc 书籍Spring in Action, 4th Edition java项目建立流程 1 使用maven来管理项目中的库.先用marven建立一个框架mvn archetype: ...

  9. 在Web应用中接入微信支付的流程之极简清晰版

    在Web应用中接入微信支付的流程之极简清晰版 背景: 在Web应用中接入微信支付,我以为只是调用几个API稍作调试即可. 没想到微信的API和官方文档里隐坑无数,致我抱着怀疑人生的心情悲愤踩遍了丫们布 ...

随机推荐

  1. JAVA的main方法

    在Java中,main()方法是Java应用程序的入口方法,也就是说,程序在运行的时候,第一个执行的方法就是main()方法,这个方法和其他的方 法有很大的不同,比如方法的名字必须是main,方法必须 ...

  2. Intent Flags

    Activity都是运行在任务栈里面,但如果要从广播接受者BordercastReceiver或者服务Service去启动一个Activity,必须为当前Activity创建一个新的任务栈才能正常显示 ...

  3. spring mvc 返回JSON数据

    servlet相关XML配置 <!--这个不启用会报错--><mvc:annotation-driven /> <bean class="org.springf ...

  4. pip安装软件报错 utf-8 code can't decode byte 0xcf in position7

    pip安装软件报错 utf-8 code can't decode byte 0xcf in position7 根据错误提示的路径找到__init__.py文件 根据错误提示的最后几句话找到对应的行 ...

  5. CockroachDB学习笔记——对此的选择

    无意间了解到TiDB,然后知道了他是一款国产团队开源的NewSQL数据库, 看了一下官网,有很多中文的文档和技术分享挺不错的. 但是安装起来好像挺麻烦的说. 测试的硬件环境 也吓死我了,我只有一台笔记 ...

  6. 阅读随笔 Spring、Mybatis

    一.<Spring+Mybatis 企业应用实战>(第2版本) 本书讲解了Spring.Mybatis及Spring+MyBatis 工作中的常用方法,没有太深入的原理性讲解,介绍 “如何 ...

  7. 【amad】cookiecutter -- 一个命令行工具,使用项目模版来构建项目

    动机 简介 个人评分 动机 一般的框架都有脚手架工具,但是并不会让所有人满意. 简介 cookiecutter1是一个Python实现的命令行工具,可以通过项目模版来构建项目. 它的特性包括: 跨平台 ...

  8. 自助机dmv?鸡肋

    今天终于扛着懒癌去了一趟所谓的dmv自动机(dmv now kiosk),发现此机器只处理有关vehicle的三种事项,比如vehicle的new registration之类的,如果是其它事情还是得 ...

  9. 【ARM-Linux开发】ti CMEM使用

    1.CMEM Overview http://processors.wiki.ti.com/index.php/CMEM_Overview 2.Changing the DVEVM memory ma ...

  10. 【VS开发】QueryPerformanceFrequency与QueryPerformanceCounter的使用

    LARGE_INTEGER tima,timb; QueryPerformanceCounter(&tima); 在 Windows Server 2003 和 WindowsXP 中使用 Q ...