通信系列2: 深入浅出SIP协议

传统电话是电磁波的通信,当电话技术发展到IP技术时代,SIP协议成为了电话通信标准协议,不仅可以通电话、还可以收发信息、视频、开会、放PPT。事实上,今天的通信业已全面采用SIP协议作为通信标准,无论是固定电话、还是移动电话,其后台都是以SIP协议完成通话、交换的。 很多软件也采用SIP协议进行通信,如:Windows Messenger。

学习多天,记录如下:

一、从打电话的过程,理解SIP协议

(一) 分析一下打电话的过程

两个电话之间的一次通话称为一个会话(Session),

首先,通话双方必须有一个电话号码,  通话步骤如下:

1, 电话A拨打电话B的号码, 邀请B通话 (Invite)

2, 电话B振铃(Ring), 同时电话A可以听到电话B在振铃

3, 电话B提机表示确认应答, 双方通话开始

4, 双方通话

5, 通话过程中,如有任何一方挂电话,则通话结束。

上述会话过程 图示如下:

图中箭头表示传递信号的方向。 图中假设B先挂机

在传统电话网中,上述每个信号都是一个电磁波信号.

(二)SIP协议,英文为 Session Initiation Protocol,  中文翻译为会话发起协议。顾名思义,就是在网络上发起会话。

协议(Protocol)是计算机与计算机之间的语言。SIP协议的目的就是在IP网络中实现电话功能。

在IP网络中,通话两端的不是电话机,而是运行在计算机上的软件电话(软电话)。

同传统电话,用SIP协议打一个电话,过程是一样的。两个软电话之间,也有电话号码,也需传递信号。

这时的电话号码是SIP帐号。这时的信号不是一个电磁波信号,而是一个IP数据包(称为SIP消息)。

1, 首先,通话双方都要有一个SIP帐号(也称为URI,  是网络上的电话号码),

不同于全数字的传统电话号码, SIP帐号采用 URI 表示方法, 例如:

sip:[email protected]:5060

其中:

(1)  sip: 表示采用sip协议

(2) peter是用户名, 也称为帐号.  用字母和数字均可。

(3) company.com 是帐号所属的服务器域名( 也可以用IP地址,例如: sip:[email protected])

(4) 最后的5060是端口号。 SIP协议默认端口为5060,  默认采用UDP传输

:5060的意思是,客户端在名为 company.com的服务器的5060端口号上等待对方连接

如果端口号是 5060,也可以省略不写。

则,上述SIP帐号写为:   sip: [email protected]

除了sip:这几个字母, SIP帐号就像一个邮件帐号

没错,SIP协议设计者的意图就是让SIP帐号与邮件帐号一致,方便与邮箱服务整合。

对用户来说方便,你要打电话给我,我的电话号就是邮箱号。

2,  SIP 消息

上面讲过,一个通话过程,两端要传递多种信号。在SIP协议中,这些信号是一种约定格式的IP数据包,称为SIP消息。

SIP消息有好几种,让我们看一个通话过程理解一下

1, 软电话A 向 B 发送一个 SIP消息  INVITE, 邀请B通话

2, 软电话B振铃,向A 回复一个SIP消息 RING,  通知 A 正在振铃中,请A等待

3, 软电话B提机,向A发一个SIP消息 OK,  通知 A 可以通话了

4, 软电话A 向 B 回复一个回应消息 ACK,正式启动通话

5,接下来,双方通话

6,软电话B挂机,向 A 发一个SIP消息 BYE,   通知 A 通话结束

7, 软电话A 向 B 回复一个消息 OK, 通话结束

可以看到,这个过程与人打电话的过程是一模一样的。只不过是采用IP数据包(SIP消息)的形式传递信号而已。

通话过程中有多种SIP消息,每一种消息都是一个IP数据包。

这就是SIP协议,它约定了会话的发起过程 、结束过程。

二、实操查看 SIP协议通话过程

为了深入SIP协议通话过程,我改编了一个Java软电话程序, 名为sip_test (可在这里下载),这个程序用来显示SIP消息的实际过程。 打开sip_test.exe运行程序,界面如下图:

我的电脑IP是192.168.31.131,  软件自动占用端口54320.  生成了一个SIP帐号:sip:[email protected]:54320

在本机上运行两次sip_test, 则形成两个软电话。这两个软电话可以相互通话了。

把两个软电话窗口左右排列,把左边软件电话的 SIP帐号(My URI那个文本框)复制到右边软电话的 Callee URI(Callee 就是被叫的意思),在右边窗口中点击按键Call开始通话(则右边的软电话是主叫,左边是被叫)。下图红字显示了操作步骤:

呼叫开始后,每个软电话均将显示一个小窗口,如下图,再点击左边软电话小窗口中的按键Pickup(提机)接听电话。下图红字显示了操作步骤

则进入通话, 如下图。    然后,点击左边软电话小窗口中的按键Hangup(挂机)结束通话。下图红字显示了操作步骤

按下按键Hangup(挂机)后,左边的小窗口将消失。  如下图。 然后,再按下右边小窗口的 Close 按键,结束。

上述操作过程,完整地操作了一次通话过程:右边的软电话作为主叫,发起呼叫,左边的软电话接听。进入通话,然后左边的软电话先挂机,右边的软电话再Close结束。

软电话的下方文本框中,记录了整个通话过程中发生的SIP消息(如上图)。把右边软电话(主叫) 的记录内容取出来分析一下, 如下:

==================================

2015-02-10 23:53:09,692 SENT to 192.168.31.131/50027

INVITE sip:[email protected]:50027 SIP/2.0  ... ...

==================================

2015-02-10 23:53:09,719 RECEIVED from 192.168.31.131/50027

SIP/2.0 180 Ringing  ... ...

==================================

2015-02-11 00:00:14,040 RECEIVED from 192.168.31.131/50027

SIP/2.0 200 OK  ... ...

==================================

2015-02-11 00:00:14,226 SENT to 192.168.31.131/50027

ACK sip:192.168.31.131:50027;transport=UDP SIP/2.0  ... ...

==================================

2015-02-11 00:04:34,727 RECEIVED from 192.168.31.131/50027

BYE sip:[email protected]:51971;transport=UDP SIP/2.0  ... ...

==================================

2015-02-11 00:04:35,233 SENT to 192.168.31.131/50027

SIP/2.0 200 OK  ... ...

每一段是一个SIP消息,第一行显示消息发生的时间,同时注明为SENT的是向外发送的消息,RECEIVED为收到的消息。 后面的行显示SIP消息的简要内容

右边软电话作为主叫,几个SIP消息依次是:

1, 发送INVITE

2, 收到Ringing

3, 收到OK

4,  发送 ACK

5,  收到BYE (因为对方先挂机)

6,发送OK

同理,再看左边软电话(被叫)的SIP消息,依次是

1, 收到 INVITE

2,发送Ringing

3,  发送OK (当按下Pickup时)

4, 收到 ACK

5, 发送 BYE (当按下Hangup时)

6, 收到 OK

主叫和被叫的SIP消息画成相对应的下图:(软电话A为主叫,B为被叫)

这个实验完整地阐述了SIP协议发起会话、结束会话的典型过程。

话说到这里,大家可能有几个问题:

1, 为什么SIP消息中没有传送语音数据的消息?

答: SIP协议规定了会话的发起过程,但没有规定会话的内容及格式。会话内容可以是文本、语音、视频等。因此,SIP协议要结合其它协议,如:用SDP协议描述要传递的内容格式,用RTP,RTSP流媒体协议传输媒体,才能完成整个通信过程。 SIP协议这样做为了简化协议,留下扩展的灵活性。

对于语音, 处理过程大体是这样:首先把语音录下来成为一组数据,把语音数据进行编码,再发送到对方。对方再解码。

2,SIP消息数据包会不会被偷听?

答:如同 HTTP协议可以叠加SSL保障传输安全。 SIP协议可以叠加TSL安全传输协议。

3,上面过程为什么只是点对点的(P2P)

答:SIP协议规定的是点对点的协议(P2P)。 通话内容的过程可以不需要服务器参与。

实际运用中,大多数情况都有一个代理服务器(Proxy),每个软电话与服务器进行SIP通信即可。

这个服务器就是电话交换机,所有的消息和话音都可以由这个服务器进行转发。

三、深入了解SIP消息的内容和结构

上一章展示了SIP消息的种类,本章将深入分析SIP消息的内容和数据格式

首先,在软电话中勾选 Show SIP Message Detail (如下图), 把上一章的操作过程重做一遍。

则可以得到,每一个SIP消息的全部数据内容。我们逐一分析一下:

1、INVITE 消息

下面是一个完整的INVITE消息的数据内容

INVITE sip:[email protected]:50027 SIP/2.0
Via: SIP/2.0/UDP 192.168.31.131:51971;rport;branch=z9hG4bKiYblddPPX
Max-Forwards: 70
To: <sip:[email protected]:50027>
From: <sip:[email protected]>;tag=Prf3c3Xc
Call-ID: [email protected]
CSeq: 1 INVITE
Content-Length: 215
Content-Type: application/sdp
Contact: <sip:[email protected]:51971;transport=UDP>

v=0
o=user1 685988692 621323255 IN IP4 192.168.31.131
s=-
c=IN IP4 192.168.31.131
t=0 0
m=audio 49432 RTP/AVP 0 8 101
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=sendrecv

SIP协议是由国际互联网协会(IETF)制定的,这个协会也制订了HTTP协议。所以,这两个协议有很多地方是相似的。

与HTTP协议相同,SIP协议也采用Client/Server模式,Client发请求,Server响应,请求和响应消息均采用纯文本方式。

INVITE 是主叫做为Client, 被叫做为Server, 发起的一个请求 (类似HTTP请求,例如POST)

请求消息分成几个部分,一是起始行(start line),  二是消息头部(message head),内含一个或多个头字段(head field), 三是一个空行(empty line),表示头部的结束。四是一个消息体(message body).  格式如下:

generic-message = start-line

*message-header

CRLF

[message-body]

(1)起始行(start-line):

INVITE sip:[email protected]:50027 SIP/2.0

请求消息的起始行包括三个参数,格式:  Request start-line = Method URI SIP_VERSION

Method是请求方法,本例是INVITE,   SIP协议规定的Method有六种: INVITE, ACK, CANCEL用于创建对话,BYE用于结束对话, REGISTER用于登记,OPTIONS用于查询服务器能力

URI表示所请求的用户或服务器,  也支持 "tel" URI, 本例是sip:[email protected]:50027,

SIP_VERSION是 SIP版本号,本例是 SIP/2.0

(2)消息头部(header)

头部包含一个或多个头字段(head field), 每个字段一行。

一个字段行 = name : value ;  value;

一个请求消息头部至少要包含六个字段:Via, To, From, CSeq, Caller-ID, Max-Forwards

Via: SIP/2.0/UDP 192.168.31.131:51971;rport;branch=z9hG4bKiYblddPPX

Max-Forwards: 70

To: <sip:[email protected]:50027>

From: <sip:[email protected]>;tag=Prf3c3Xc

Call-ID: [email protected]

CSeq: 1 INVITE

Content-Length: 215

Content-Type: application/sdp

Contact: <sip:[email protected]:51971;transport=UDP>

以下逐个解释每个字段的含义

I.  Via字段

Via: SIP/2.0/UDP 192.168.31.131:51971;rport;branch=z9hG4bKiYblddPPX

Via头字段保存所经过SIP网元(客户端或Proxy)的主机名或网络地址(可能还有端口号),消息中的所有Via头字段对请求消息而言,从下至上依次表示到当前所在SIP网元为止,请求消息所经过的路径;对响应消息而言,从上至下依次表示从当前网元开始,响应所应遵循的路径。

Via字段包含SIP协议版本以及消息传输所用的传输协议, 此例为:  SIP/2.0/UDP

branch参数:  在SIP网元(UAC或Proxy)发出或转发请求消息时,在其插入的Via字段中必须包含branch参数,该参数用于标识此请求消息所创建的事务。branch 参数可以用做loop detection,这时参数必须被分成两部分:第一部分符合一般的原则(对于RFC3261,z9hG4bK),第二部分(此例为iYblddPPX)被用来实现loop detection以用来区分loop和spiral。loop和spiral均指Proxy收到一个请求后转发,然后此转发的请求又重新到达该Proxy,区别是loop中请求的Request-URI以及其他影响Proxy处理的头字段均不变,而Spiral请求中这些部分必需有某个发生改变,spiral发生的典型情况是Request-URI发生改变。Proxy在插入Via字段前,其branch
参数的loop.  detection部分依据以下元素编码:To Tag,From Tag,Call-ID字段,Request-URI,Topmost Via字段,Cseq的序号部分(即与request method无关),以及proxy-require字段,proxy authorization字段。注意:request method不能用于计算branch参数,比如CANCEL以及非2XX response的ACK与其所cancel的request或对应的INVITE属于同一个事务,即其branch参数相同。见RFC3261
P22 P25 P39 P95 P105

II. Max-Forwards 字段

Max-Forwards: 70

Max-Forwards 字段表示request到达UAS的跳数的限制。是一个整数,经过每一跳时减去一。如果Max-Forwards已经是零,可是request还没有到达目的地,则就会产生一个483(too many hops)响应

III. To字段

To: <sip:[email protected]:50027>

To字段表示消息的接收者

To 字段可以有一个tag参数,to tag代表dialog的对等参与者(peer)。在UAC发出一个初始Dialog的请求(如INVITE)时,即发出out-of-dialog请求时,由于dialog还没有建立,不含to tag参数。当UAS收到INVITE请求时,在其发出的2xx或101-199响应中设置to tag参数,与UAC设置的From Tag参数以及Call-ID(呼叫唯一标识)一起作为一个Dialog ID(对话唯一标识,包含To tag,From Tag,Call-ID)的一个部分。RFC3261规定只有INVITE请求与2xx或101-199响应可以建立Dialog(由101-199响应创建的Dialog称为early
dialog)。见RFC3261 P70

IV. From字段

From: <sip:[email protected]>;tag=Prf3c3Xc

From字段表示消息的发送者

From字段必须包含tag参数,在UAC发出一个out-of-dialog请求(对话建立请求)时,必须设置一个唯一的tag参数,作为Dialog ID的一个部分。

见RFC3261 P37,P159,P172

V. Call-ID字段

Call-ID: [email protected]

是一个邀请(Invitation)或来自同一个UAC用户的所有登记请求

(Registeration,包括更新登记,取消登记)以及由此产生的一组响应的唯一标识。一个邀请可以建立多个Dialog(当被叫用户有多个联系方式时),这成为Forking,因而Call-ID只是一次呼叫邀请的唯一标识,Call-ID与UAC在发出请求中设置的From Tag字段以及UAS在其相映中设置的To Tag字段三者一起作为一个Dialog-ID。

在一个Dialog中,所有的requests和responses的Call-ID必须一致 同一UA的每一个register 的Call-ID必须一致。 见RFC3261 P37,P159,P166

VI. CSeq 字段

CSeq: 1 INVITE

用于在同一个Dialog中标识及排序事务(transaction)以及区分新的请求 与请求的重发。

CSeq包括顺序号和方法(method),方法必须和它所对应的request相匹配。对于out-of-dialog的非register request,取值任意。

对于dialog内的每一个新的request(如BYE,re-INVITE,OPTION),Cseq的序号加1。但是对于CANCEL,ACK除外。对于ACK而言,Cseq的序号必须与其所对应的request相同。对于CANCEL而言,Cseq的序号也必须与其cancel掉的request相同。

注意:在同一个对话中的UAC和UAS分别维护自己的CSeq序号,他们发出请求的CSeq序号是不相关的。见RFC3261 P218 见RFC3261 P38,P159,P170,P218

VII. Contact 字段

Contact: <sip:[email protected]:51971;transport=UDP>

对于非Register事务,Contact header field 主要提供了UAC或UAS的 直接联系SIP URI,UAC在发出的对话建立(out-of-dialog)INVITE请求的Contact字段中提供自己的直接联系SIP URI,在UAS收到该请求后在其发出响应的Contact字段中提供自己的直接联系SIP URI,这样在建立对话后,UA间可以通过对方的直接联系SIP URI绕过Proxy直接发送请求。  对于Register事务,表示地址绑定中的contact address(vs.
address-of-record)

VIII. Content-Type字段

Content-Type: application/sdp

主要表示发给接收器的消息体的媒体类型。如果消息体不是空的,则Content-type header field一定要存在。如果Content-type header field存在,而消息体是空的,表明该

类型的媒体流长度是0。

VIIII. Content-Length字段

Content-Length: 215

表示消息体的长度。是十进制数。

(3)消息体(message body)

编码方式主要是由头部确定,现在为一般为SDP。

v=0            //版本号为0

o=user1 685988692 621323255 IN IP4 192.168.31.131

//建立者用户名+会话ID+版本+网络类型+地址类型+地址

s=-            //会话名

c=IN IP4 192.168.31.131  //连接信息:网络类型+地址类型+地址

t=0 0         //会话活动时间 起始时间+终止时间

m=audio 49432 RTP/AVP 0 8 101

//媒体描述:媒体+端口+传送+格式列表

音频 + 端口49432 + 传输协议RTP + 格式AVP,有效负荷0(u率PCM编码)

a=rtpmap:0 PCMU/8000

//0或多个会话属性: 属性 + 有效负荷+ 编码名称 + 抽样频率。

//                                   rtpmap +   0型  +  PCMU  +  8KHz

a=rtpmap:8 PCMA/8000

//a 可以有多个, 见SDP协议

a=rtpmap:101 telephone-event/8000

a=sendrecv

2、Ringing 消息

Ringing消息是被叫对主叫INVITE请求消息的响应消息, 表示被叫正在振铃

SIP/2.0 180 Ringing

From: <sip:[email protected]>;tag=Prf3c3Xc

Call-ID: [email protected]

CSeq: 1 INVITE

Via: SIP/2.0/UDP 192.168.31.131:51971;rport=51971;branch=z9hG4bKiYblddPPX

To: <sip:[email protected]:50027>;tag=AM1g60xRvq

Contact: <sip:192.168.31.131:50027;transport=UDP>

首行(start-line)格式是: SIP协议号 代码 文本描述

Ring消息的代码是180

消息头部其它字段均复制INVITE消息

3、OK 消息

OK消息是被叫对主叫INVITE请求消息的最终响应消息, 表示被叫已提机接听

SIP/2.0 200 OK

From: <sip:[email protected]>;tag=Prf3c3Xc

Call-ID: [email protected]

CSeq: 1 INVITE

Via: SIP/2.0/UDP 192.168.31.131:51971;rport=51971;branch=z9hG4bKiYblddPPX

To: <sip:[email protected]:50027>;tag=AM1g60xRvq

Content-Length: 214

Content-Type: application/sdp

Contact: <sip:192.168.31.131:50027;transport=UDP>

v=0

o=user1 77115499 915054303 IN IP4 192.168.31.131

s=-

c=IN IP4 192.168.31.131

t=0 0

m=audio 49434 RTP/AVP 0 8 101

a=rtpmap:0 PCMU/8000

a=rtpmap:8 PCMA/8000

a=rtpmap:101 telephone-event/8000

a=sendrecv

首行(start-line)格式是: SIP协议号 代码 文本描述

Ring消息的代码是180

消息头部其它字段均复制INVITE消息

消息体是被叫的SDP描述

4、ACK 消息

主叫在接收到OK响应消息后,向被叫发送ACK请求消息的响应消息, 正式启动通话

ACK消息没有消息体

ACK sip:192.168.31.131:50027;transport=UDP SIP/2.0

Via: SIP/2.0/UDP 192.168.31.131:51971;rport;branch=z9hG4bKEfwYu4LbB

To: <sip:[email protected]:50027>;tag=AM1g60xRvq

From: <sip:[email protected]>;tag=Prf3c3Xc

Call-ID: [email protected]

CSeq: 3 ACK

Max-Forwards: 70

5、BYE 消息

通话过程中,主动挂机的一方向另一方发送BYE请示消息,表示请求结束通话

另一方接到BYE消息后,应回复OK消息

BYE sip:[email protected]:51971;transport=UDP SIP/2.0

Via: SIP/2.0/UDP 192.168.31.131:50027;rport;branch=z9hG4bKvtPAT0lfO

To: <sip:[email protected]>;tag=Prf3c3Xc

From: <sip:[email protected]:50027>;tag=AM1g60xRvq

Call-ID: [email protected]

CSeq: 711793880 BYE

Max-Forwards: 70

花了很长的篇幅,说了一下SIP消息的结构。有些难懂。

了解所有的数据结构,可以最终实现一个自己的SIP。看来,还有一段长路要走。

四、构建自己的VOIP电话系统

SIP协议是用于在IP网络中实现通话的,也就是VOIP(Voice Over IP)。

有很多开源软件实现了SIP协议,可以很容易构建一套属于自己的VOIP系统。这样,就可以在IP网络中打电话、发短信、视频了。

一个VOIP系统中最少有两个部件:  一个SIP服务器,   多个SIP客户端

SIP客户端分为SIP软件和SIP话机两种。

SIP软件可以安装在手机或PC上,用它来打电话。

SIP软件手机版的推荐两个:   CSipSimple,   Linphone ,   在各个手机应用市场中均可下载。  PC版的我还觉得不好用,毕竞我们很少用PC打电话.

SIP话机外形与普通电话机一样,不同的是它不是连接在电话线上,而是直接连在网络上,像电话一样使用。

SIP服务器是相当于电话交换机(PBX), 用于连接各个客户端,可以架在公网上实现随处打电话,  也可以架在局域网上实现办公室内打电话。

SIP服务器多用Linux操作系统,安装SIP服务器软件。 软件我推荐用 Asterisk, 这是最老牌最成熟的SIP服务器,已经被集成在Debian, Ubuntu、CentOS、OpenWrt等多个Linux发行版中,安装很容易。  很多IP-PBX也采用Asterisk作为内核。

关于如何构建自己的电话系统, 通信系列的下一篇将详细介绍。

时间: 2024-12-31 03:23:12

通信系列2: 深入浅出SIP协议的相关文章

通信系列1: 电话的前世今生

作为一个通信人,讲一讲关于电话的故事和原理 这第一篇是比较通俗的,目标是每个人都看得懂. 一.在没有电话之前 在没有电话之前,如果一个人想把声音传给远处的人,只有靠大声讲话了. 后来,人们弄了一个方法,就是,两人拿一根竹筒,一个人在这头讲,另一个人在那头听.这样声音可以传得远些.清晰一些. 从物理学角度上看,声音是空气振动产生的机械波,称声波. 竹筒的作用是让声波在传播的途中减少衰减,从而传得更远 二,贝尔发明电话 1875年,亚历山大·格雷厄姆·贝尔 (Alexander Graham Bel

Android网络编程系列 一 TCP/IP协议族

在学习和使用Android网路编程时,我们接触的仅仅是上层协议和接口如Apache的httpclient或者Android自带的httpURlconnection等等.对于这些接口的底层实现我们也有必要进一步的了解,这就要我们了解网络通信层了,提到网络通信层不得不说起ISO-OSI的七层协议经典架构,如图所示: 上图的左边部分就是osi架构模型了, ISO/OSI模型,即开放式通信系统互联参考模型(Open System Interconnection Reference Model),是国际标

“基于GBT28181:SIP协议组件开发”-----------第一篇环境搭建

SIP协议在安防视频系统的国标中,有重要应用.从本文开始,讲解并开发一套SIP协议组件.现在一般在开发这类系统时,采用的exosip2和osip2库,这是个开源的SIP协议栈库.实际遵从国标开发时并不能满足实际的需要.所以本文依照GBT28181开发的一套SIP组件.该组件支持代理服务器UAS和代理客户端UAC两重角色.组件实现了RFC3261基本的会话初始协议(SIP协议)的一个功能子集.SIP组件中实现了REGISTER,MESSAGE,NOTIFY,SUBSCRIBE,INVITE,ACK

sip协议呼叫流程详解

1.SIP业务基本知识 1.1 业务介绍会话初始协议(Session Initiation Protocol)是一种信令协议,用于初始.管理和终止网络中的语音和视频会话,具体地说就是用来生成.修改和终结一个或多个参与者之间的会话.SIP的业务模式是一个点对点协议,其中有两个要素——SIP用户代理和SIP网络服务器.用户代理是呼叫的终端系统元素,而SIP服务器是处理与多个呼叫相关联信令的网络设备.用户代理本身具有一客户机元素(用户代理客户机UAC)和一服务器元素(用户代理服务器UAS).客户机元素

基于GBT28181:SIP协议组件开发-----------第二篇SIP组件开发原理

上一节中讲的SIP组件,即GBT28181SipComponent动态.so库工程,生成libGBT28181SipComponent.so库文件和IGBT28181Comm.h编程接口,在该库中实现了REGISTER, MESSAGE,NOTIFY,SUBSCRIBE,INVITE,ACK,BYE,CALL_MESSAGE等GB/T28181-2011 <安全防范视频监控联网系统信息传输.交换.控制技术要求>要求的SIP方法, 后期有新的需求可以添加.该库已经成功用于电网的多家视频安防企业中

【转】SIP协议 会话发起协议

转自:https://www.cnblogs.com/gardenofhu/p/7299963.html 会话发起协议(SIP)是VoIP技术中最常用的协议之一.它是一种应用层协议,与其他应用层协议协同工作,通过Internet控制多媒体通信会话. SIP - 概述 以下是有关SIP的几点注意事项 - SIP是用于通过因特网协议创建,修改和终止多媒体会话的信令协议.会话只不过是两个端点之间的简单调用.端点可以是智能电话,笔记本电脑或可以通过因特网接收和发送多媒体内容的任何设备. SIP是由IET

SIP 协议详解

SIP 协议详解 一.Sip协议简介: SIP(Session Initiation Protocol,会话初始协议)是由IETF(Internet Engineering Task Force,因特网工程任务组)制定的多媒体通信协议.广泛应用于CS(Circuit Switched,电路交换).NGN(Next Generation Network,下一代网络)以及IMS(IP Multimedia Subsystem,IP多媒体子系统)的网络中,可以支持并应用于语音.视频.数据等多媒体业务,

浏览器扩展系列————异步可插入协议(pluggable protocol)的实现

原文:浏览器扩展系列----异步可插入协议(pluggable protocol)的实现 IE中有很多我们比较熟悉的协议,如http,https,mailto,ftp等.当然你也可以实现自己定义的协议,稍微谈一下这里所说的协议,从我的理解来说这里的协议只有当你的网页引用某个资源时才会调用,而不是随便在某个属性的值前面加上某个协议的名称就可以了.常见的协议调用如img的src属性中,很多元素style中的background-image属性中,还有a标签的href属性中. 言归正传,前面说到的实现

安卓平台基于SIP协议实现注册,聊天功能

============问题描述============ 不涉及音频,视频发送,只要实现注册,和聊天功能就行, 网上下了sipdroid的源码,但是XML中配置的<uses-sdk android:minSdkVersion="3" android:targetSdkVersion="4"/> 这段没明白,资料里说安卓最低支持SIP协议的API level是9,但是这版本不匹配呀,有大牛指导下么 ============解决方案1============