拨叫网络电话时,SIP客户端工作流程

拨叫网络电话时,SIP客户端工作流程,第1张

根据asterisk的代码,推测出sip server的工作流程如下:

1 客户端A通过sip发INVITE时,带的是内网IP和端口。

2 服务器收到后,转发给客户端B时,先创建两个音视频端口port1,port2,加到客户端A sdp中,然后发给B。

3 B收到后,肯定是同意了如果拒绝,以下就不走了。

4 B本地也创建两个端口,连接port1,port2,带stun协议,返回自己的公网IP和端口。(这一步可选)

5 B向服务器回复同时,sdp上带本地的IP和端口。(这一步必须)

6 服务器收到B同意的回复后,再创建两个端口port3,port4,同时加到sdp中,返回给客户端A。

7 客户端A收到sdp后,得到其中的两个端口,然后本地也创建两个端口,分别向服务器的两个端口发数据,(也可以直接向对方的IP和端口发,但对方是内网的,可能收到,也可能收不到,稍后再讨论怎么P2P)。

8 客户端B应该也要创建两个端口,向服务器的端口发数据。(如果执行过4,这一步直接发数据就行了)。

9 因为端口是一一对应关系,服务器端根据端口号可以知道是哪个用户发来的,并发往表现哪里的。

10 用户发bye,或掉线,服务器通知对方结束会话,同时close掉这4个端口。

以上,服务器创建rtp端口的同时,还要创建rtcp端口。

上面的流程是服务器直接在两点间中转,不包括经过多服务器间流转。

如果要做到两客户端之间直接点对点,AB双方的音视频端口,应该先连stun,取到自己的外网IP和端口后,再发INVITE,这时SDP中带的是自己的外网IP和端口,双方直接传很大可能是收的到的。

大致流程应该是这样的,可能还有些出入,毕竟是看代码得出的结论,不是看RFC协议。

只能说发明SIP和RTP的人,大脑复杂度远超普通人。当初以为HTTP已经够麻烦的了,不过人家也不过只用了一个端口就可以传所有数据。rtp的创始人应该是电信背景,可能认为每个端口号相当于电信中的每一路通话了。

MicroSip首先注册到SIP服务器,与SIP服务器之间的整个通信数据包如下

从上图可以看到,MicroSip直接发送注册信息包到SIP服务器,SIP服务器回复一个200OK,整个注册流程结束,下面拨打电话流程

基于sip的voip网络通话基本过程是:(1),建立sip服务器,关于如何搭建sip服务器,请参考我的博客点击打开链接 (2)需要参与通话的所有客户端注册用户到sip服务器(3)一个客户端发起sip通话到另一个客户端,这个消息首先发到sip服务器,sip服务器收到消息后转发到目的客户端(4)目的客户端接收电话

<uses-permission android:name="androidpermissionUSE_SIP" />

<uses-permission android:name="androidpermissionINTERNET" />

<uses-permission android:name="androidpermissionVIBRATE" />

<uses-permission android:name="androidpermissionACCESS_WIFI_STATE" />

<uses-permission android:name="androidpermissionWAKE_LOCK" />

<uses-permission android:name="androidpermissionRECORD_AUDIO" />

<uses-permission android:name="androidpermissionMODIFY_AUDIO_SETTINGS" />

<uses-feature android:name="androidhardwaresipvoip" android:required="true" />

<uses-feature android:name="androidhardwarewifi" android:required="true" />

<uses-feature android:name="androidhardwaremicrophone" android:required="true" />

版权声明:本文为博主原创文章,转载请附上博文链接!

SIP是一个分层结构的协议,这意味着它的行为根据一组平等独立的处理阶段来描述,每一阶段之间只是奇偶合。协议分层描述是为了表达,从而允许功能的描述可在一个部分跨越几个元素。它不指定任何方式的实现。当我们说某元素包含某层,我们是指它顺从该层定义的规则集。

不是协议规定的每个元素都包含各层。而且,由SIP规定的元素是逻辑元素,不是物理元素。一个物理实现可以选择作为不同的逻辑元素,甚至可能在一个个事务的基础上。

SIP的最底层是语法和编码。它的编码使用增强Backus-Nayr形式语法(BNF)来规定。

第二层是传输层。它定义了网络上一个客户机如何发送请求和接收响应以及一个服务器如何接收请求和发送响应。所有的SIP元素包含传输层。

第三层是事务层。事务是SIP的基本元素。一个事务是由客户机事务发送给服务器事务的请求(使用传输层),以及对应该请求的从服务器事务发送回客户机的所有响应组成。事务层处理应用层重传,匹配响应到请求,以及应用层超时。任何用户代理客户机(UAC)完成的任务使用一组事务产生。用户代理包含一个事务层,有状态的代理也有。无状态的代理不包含事务层。事务层具有客户机组成部分(称为客户机事务)和服务器组成部分(称为服务器事务),每个代表有限的状态机,它被构造来处理特定的请求。

事务层之上的层称为事务用户(TU)。每个SIP实体,除了无状态代理,都是事务用户。当一个TU希望发送请求,它生成一个客户机事务实例并且向它传递请求和IP地址,端口,和用来发送请求的传输机制。一个TU生成客户机事务也能够删除它。当客户机取消一个事务时,它请求服务器停止进一步的处理,将状态恢复到事务初始化之前,并且生成特定的错误响应到该事务。这由CANCEL请求完成,它构成自己的事务,但涉及要取消的事务。

SIP通过EMAIL形式的地址来标明用户地址。每一用户通过一等级化的URL来标识,它通过诸如用户电话号码或主机名等元素来构造(例如:SIP:user at company dot com)。因为它与EMAIL地址的相似性,SIP URLs容易与用户的EMAIL地址关联。

SIP提供它自己的可靠性机制从而独立于分组层,并且只需不可靠的数据包服务即可。SIP可典型地用于UDP或TCP之上。

SIP提供必要的协议机制以保证终端系统和代理服务器提供以下业务:

● 用户定位

● 用户能力

● 用户可用性

● 呼叫建立

● 呼叫处理

● 呼叫前转,包括:⑴等效800类型的呼叫,⑵无应答呼叫前转,⑶遇忙呼叫前转,⑷无条件呼叫前转

●呼叫号码传递,该号码可以是任何命名机制。

● 个人移动性,例如通过一个单一的、位置无关的地址来到达被呼叫方,即使被呼叫方改变了终端。

●终端类型的协商和选择:呼叫者可以给出选择如何到达对方,例如通过因特网电话,移动电话或应答业务等。

● 终端能力协商

● 呼叫者和被呼叫者鉴权

● 不知情和指导式的呼叫转移

● 多播会议的邀请

当一用户希望呼叫另一用户,呼叫者用INⅥTE请求初始呼叫,请求包含足够的信息用以被呼叫方参与会话。如果客户机知道另一方的位置它能够直接将请求发送到另一方的IP地址。如果不知道,客户机将请求发送到本地配置的SIP网络服务器。如果服务器是代理服务器它将解析被呼叫用户的位置并且将请求发送给它们。有很多方法完成上步,例如搜索DNS或访问数据库。服务器也可以是重定向服务器,它可以返回被呼叫用户的位置到呼叫客户机用以它直接与用户联系。在定位用户的过程中,SIP网络服务器当然能够代理或重定向呼叫到其它的服务器,直到到达一个明确地知道被呼叫用户IP地址的服务器。

一旦发现用户地址,请求就发送给该用户,此时将产生几种选择。在最简单的情况,用户电话客户机接收请求——也就是,用户的电话振铃。如果用户接受呼叫,客户机用客户机软件的指定能力响应请求并且建立连接。如果用户拒绝呼叫,会话将被重定向到语音邮箱服务器或另一用户。“指定能力”参照用户想启用的功能。例如,客户机软件可以支持视频会议,但用户只想使用音频会议,那则只会启用音频功能。

SIP还具有另外两个有重要意义的特征。第一个是有状态SIP代理服务器具有分割入呼叫或复制入呼叫的能力,从而可以同时运行几个扩展分支。第一个应答的分支接受呼叫。该特征在用户工作在两位置之间(例如实验室和办公室)或者同时对经理和其秘书振铃时是非常便利的。

第二个特征是SIP独特的返回不同媒体类型的能力。举个用户联系公司的例子。当SIP服务器接收到客户机的连接请求,它能够通过WEB交互式语音响应页面来返回到顾客的客户机,该页面具有可获得的部门分支或提供在列表上的用户。点击适当的链接后将发送一请求到所点击选择的用户从而建立起呼叫。

需要的硬件:

1 服务器;服务器能够稳定的保证VOIP软件系统稳定的运行,保证数据安全、完整、无误差。一般根据“软交换”软件的需要来安装windows或linux系统,以便满足“软交换”的安装要求;

2 中继网关;(局端使用)负责把服务器传输过来的数字信号转行成模拟信号,送达被叫完成通话服务(语音或数据传输。打电话是语音,文字消息、传真等业务称之为数据);

3 小网关:专业的叫法是叫IAD,负责把普通的模拟信号转换成数字信号在互联网上进行传输;

以上3个可以形成一个完整的呼叫流程,如下:

主叫用户使用IAD发起呼叫-->服务器-->中继网关-->被叫接听-->通话结束后挂机-->完成通话。

需要的软件:

1 软交换:服务端软件,安装在服务器上,软件交换系统,俗称“软交换”。负责对电话的呼入呼出进行交换,根据不同的被叫前缀、区号、号码段讲电话交换到对应的线路上。

2 软电话:(专业名词为:softphone,按目前主流协议是sip协议,也可称之为sip phone,如目前最常见的MSN就是sip协议的)客户端软件,可接、打电话,有的支持视频、文字聊天(如:skype、uucall、gtalk、QQ都属于此类软件),使用服务端提供的账号密码进行使用。

软硬件完整的呼叫流程:

主叫发起呼叫(IAD或软电话)-->软交换认证账号密码是否正确,余额是否够通话-->完成验证后,放行本次通话并根据被叫号码进行判断,讲呼叫传输至对应的中继网关-->被叫振铃-->被叫接听-->开始通话-->通话结束-->软交换根据被叫挂机信令进行计费并写入数据库形成话单-->结束本次任务。

你的问题如果要完整的回答,需要有写一本书的信息量才能完整的进行解答,很抱歉,我只能写个大概。希望能对你有所帮助。

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 拨叫网络电话时,SIP客户端工作流程

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情