织梦CMS - 轻松建站从此开始!

罗索

SIP Using SDP with Offer/Answer Model

jackyhwei 发布于 2011-10-25 22:17 点击:次 
根据RFC3261-13.2.1所述,SIP使用的Offer/Answer模型是建立在对话环境下的。RFC中还特意对Offer/Answer交互有限制
TAG:

根据RFC3261-13.2.1所述,SIP使用的Offer/Answer模型是建立在对话环境下的。RFC中还特意对Offer/Answer交互有限制:

1.初始Offer必须在INVITE消息或者第一个可靠的非失败型响应中。注:当时RFC3261中可靠效应只有2**,接下来将讲到1**(除100外)也可为可靠性效应。

2.如果初始Offer在INVITE消息中,Answer必须出现在一个可靠的非失败型响应中。可能在1**中就带有Answer(但该Answer必须与之后的2**中的一致),UAC将忽略同一事务之后出现的回应中的Answer。

3.如果初始Offer出现在第一个可靠的非失败型响应中,Answer必须出现在对该响应的确认消息中(ACK)。

4.如果已经发送或接受对于第一个Offer的Answer,UAC可以继续发送新的Offer;相反的,如果没有确认对前一个Offer的Answer,不能发送新的Offer。

5.如果已经发送或接受对于初始Offer的Answer,UAS禁止在之后同一个事务的响应消息中带上新的Offer。

根据RFC3262-5所述,对于Offer/Anwer模型引入了新的扩展。

1.如果INVITE消息带有Offer,UAS必须在一个可靠的非失败型的响应中提供Answer。这将在呼叫完成之前建立好会话。同样,Answer可以出现在1**中,因为RFC3262提供了PRACK方法来保证1**消息为可靠消息。

2.如果UAC接收到1**中的Offer,必须在PRACK方法中带有Answer。但是如果UAC收到1**中的Answer,则可能在PRACK带上新的Offer。如果UAS接收到PRACK中的Offer,则必须在2**中带上Answer。

3.如果Offer/Answer交互成功的话,在INVITE事务没有完成之前也能建立好会话。

4.如果在1**中带有Offer的话,UAS在没有收到对1**的确认之前不能发送2**。

根据RFC3264所述,Offer建立媒体选择项(高层如SIP提供),而Answer端可以接受或拒绝,取决于高层。UA可以通过新的Offer/Answer交互来进行会话更新,但旧的Offer/Answer交互未结束之前不可发起新的Offer。

1.发起初始Offer:虽然SDP(RFC4566)允许在一个SDP消息中支持多个会话,但具有Offer/Answer模型的SDP消息只能包含一个对话描述。

2.Offer可以包含0个或更多的媒体流(每个媒体流使用一个“m=”行和相关的属性来描述的)。0个媒体流代表只是连接,之后可以通过新的Offer来更新会话。

3.构建单点传播媒体Offer:1)媒体流方向,包含recvonly、sendrecv(默认)、sendonly及inactive。但需要注意的是在RTP协议中,RTCP不会受该方向影响,即任何设置情况下均处于工作状态。

4.对于recvonly和sendrecv方向的媒体流来说,Offer中的端口号码和地址指示了提供方接受媒体流的地方。对于sendonly方向的媒体流来说,Offer中的端口号码和地址间接指示了提供方接受RTCP的地方(除非特殊说明,RTCP的端口比对应RTP端口高一位)。如果端口是0,则只提供、拒绝或终止媒体流。

5.对于sendonly和sendrecv流来说,Answer可能对于同一编码指示不同的负载类型编号(Payload Type Number),在这种情况下,Offer必须采取Answer中的编号值。

6.对于RTP流,媒体描述需要使用"a=rtpmap"来映射RTP媒体负载类型编号,如果没有对应的"a=rtpmap"行,则使用当前默认的配置(RFC 1890)。

7.“m=”行中所列的编码必须采取优先顺序排列。

8.对于Offer中的每个“m=”行,Answer中必须有对应的“m=”行。Answer中的“t=”行必须与Offer行的一致。

9.拒绝某个Offer的流,该流的端口值必须设置为0.

10.Offer如果是sendonly,则Answer必须为recvonly或者inactive;Offer如果是recvonly,则Answer必须为sendonly或者inactive;Offer如果是sendrecv,则Answer必须为sendrecv、recvonly、sendonly或者inactive;Offer如果是inactive,则Answer必须为inactive。

11.即使Offer是senonly型,Answer的地址和端口也必须存在,因为需要传送RTCP。

12.如果是RTP,Offer使用特定负载编号来与某编码相对应,Answer应该保持这种对应关系。

13.Answer中的“m=”行编码应具有优先顺序,以便Offer能采用最高优先级的选项。但即便如此,建议Answer采取与Offer相同的优先顺序。

14.ptime指示接受的打包间隔,但并不要求双方的ptime值一致。但发送媒体流时应该按照ptime指示的打包间隔来发送。

15.如果是RTP流,Answer应该采用Offer提供的负载编码编号。

16.当Offer收到Answer后,必须采用Answer中的媒体类型中的一个,最后应该采用排列的第一个。

按照上述,

Offer/Answer模型的交互情况将如下:

图1 Offer/Answer模型交互图

SIP使用Offer/Answer模型的交互情况如下:

图2 SIP利用Offer/Answer模型交互1图

图3 SIP利用Offer/Answer模型交互2图

图4 SIP利用Offer/Answer模型交互3图

图5 SIP利用Offer/Answer模型交互4图

注:图中NULL代表Offer/Answer模型已经完成交互,并不是SDP为空,此时SDP内媒体选项已经确定,所以不会再改变。

(二十四桥明月夜)
本站文章除注明转载外,均为本站原创或编译欢迎任何形式的转载,但请务必注明出处,尊重他人劳动,同学习共成长。转载请注明:文章转载自:罗索实验室 [http://www.rosoo.net/a/201110/15198.html]
本文出处:http://hi.baidu.com/%C3%F7%D4% 作者:二十四桥明月夜
顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
用户名: 验证码:点击我更换图片
栏目列表
将本文分享到微信
织梦二维码生成器
推荐内容