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. apt如何列出所有已经安装的软件包

    apt如何列出所有已经安装的软件包 转 https://www.helplib.com/ubuntu/article_155294 问题: 我想将所有已安装软件包的列表输出到文本文件中,以便我可以查看 ...

  2. js常用时间转换函数

    1.秒转换为时分秒 // 秒转换为时分秒 export function secExchangeMoment(value = 0){ let secondTime = parseInt(value); ...

  3. <frameset>和<body>不能共用

    frameset 定义: frameset 元素可定义一个框架集.它被用来组织多个窗口(框架).每个框架存有独立的文档.在其最简单的应用中,frameset 元素仅仅会规定在框架集中存在多少列或多少行 ...

  4. 阶段5 3.微服务项目【学成在线】_day05 消息中间件RabbitMQ_1.页面发布-需求分析

    先静态化,并存储到gridFS 然后,发消息给MQ,MQ接收到消息通知给所有监听他的Cms Client. Cms client从gridFS读取页面下载到自己的服务 业务流程如下:1.管理员进入管理 ...

  5. java+断点续传

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 先说下要求: PC端全平台支持,要求支持Windows,Mac,Linux 支持所 ...

  6. 用SSMS连接Azure Sql Database 与连接本地库的一些操作区别

    背景 我们知道Azure Sql Database 可以降低运维成本.是一种Pass模式,有资源弹性设置,可以自由调整资源自动对应不同业务高峰(当然也可以降低费用成本),也方便项目后期的资源扩展,以及 ...

  7. 微信小程序 请求签名接口超时 踩坑路。。

    我们公司一般做开发都是先用测试机的接口调试功能,等功能都调试的差不多了,再换成线上的正式接口,因为正式接口要验证签名. 这几个功能都调试的差不多了,准备换成线上正式接口了,结果却出了问题,提示请求超时 ...

  8. python 智能玩别踩白块

    # encoding :utf-8import pyautoguifrom PIL import Imageimport time pyautogui.FAILSAFE = True time.sle ...

  9. 【计算机视觉】双目测距(六)--三维重建及UI显示

    原文: http://blog.csdn.NET/chenyusiyuan/article/details/5970799 在获取到视差数据后,利用 OpenCV 的 reProjectImageTo ...

  10. 31.网络协议介绍tcp/udp

    网络协议 TCP:网络中传输数据的协议,打电话 解决了我可能在网络中找不到别人(数据无法传输到) 保证数据传输的稳定性,可靠性 保证数据的安全性,完整性 对方要有响应 尝试重新发送 UDP:传输数据的 ...