sdp,sip

sdp

在SIP协议的包含的内容是SDP时,应该把Content-Type设置成application/sdp。

b=<bwtype>:<bandwidth> bwtype可以是CT或AS,CT方式是设置整个会议的带宽,AS是设置单个会话的带宽。缺省带宽是千比特每秒。

TIAS = Transport Independent Application Specific maximum, a bandwidth modifier,详见http://www.networksorcery.com/enp/rfc/rfc3890.txt。

 

sip

100 trying是临时响应。 比如服务器给你一个回应,意思你的请求已经收到,在处理中。
200 OK 是针对SIP INVITE消息,作为final reponse,SDP的内容部分双方已经交换完毕。
180 ring 是振铃,代表invite消息已经送到到 被叫侧,通知主叫侧被叫已经振铃。

时序图:

sip->hold

实现由很多种,不知道哪个是标注?

说法1:c=IN IP4 0.0.0.0   就hold了。

说法2:sip属性设置
sendonly
sendrecv
recvonly

说法3:SIP的Hold是通过给对方发送特殊的Invite实现的,消息格式如下,注意SDP消息里三个特殊的地方:
     c=IN IP4 0.0.0.0
     s=Session Hold
     a=sendonly

INVITE sip:900@10.2.4.107:5060 SIP/2.0
Via: SIP/2.0/UDP 10.2.4.105:5060;rport;branch=z9hG4bK1719108605
Route: <sip:10.2.4.200;ftag=887892942;lr=on>
From: 800 <sip:800@10.2.4.200>;tag=887892942
To: <sip:900@10.2.4.200>;tag=527292637
Call-ID: 1721169583@10.2.4.105
CSeq: 1174960511 INVITE
Contact: <sip:800@10.2.4.105:5060>
Max-Forwards: 70
User-Agent:
Content-Type: application/sdp
Content-Length:   181

v=0
o=800 1174960510 1174960511 IN IP4 10.2.4.105
s=Session Hold
c=IN IP4 0.0.0.0
t=0 0
m=audio 5000 RTP/AVP 18 100
a=rtpmap:100 telephone-event/8000
a=sendonly
a=ptime:20

对方回复的200 OK 也是在SDP消息里有所区别:
  s=Session be-Hold
  c=IN IP4 0.0.0.0
  a=recvonly

SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.2.4.105:5060;rport=5060;branch=z9hG4bK1719108605
Record-Route: <sip:10.2.4.200;ftag=887892942;lr=on>
From: 800 <sip:800@10.2.4.200>;tag=887892942
To: <sip:900@10.2.4.200>;tag=527292637
Call-ID: 1721169583@10.2.4.105
CSeq: 1174960511 INVITE
Contact: <sip:900@10.2.4.107:5060>
Supported: 100rel
Supported: tdialog
Supported: timer
Allow: INVITE, ACK, OPTIONS, BYE, CANCEL, INFO, REFER, NOTIFY, PRACK, MESSAGE, UPDATE
Content-Type: application/sdp
Accept: application/sdp
Content-Length:   184

v=0
o=800 1174960510 1174960511 IN IP4 10.2.4.105
s=Session be-Hold
c=IN

Cancel请求

Cancel请求是用来取消一个之前已经发送过得请求的,如果这个请求已经得到了应答,那么Cancel请求是失效的。所以Cancel请求一般都用是用来取消invite请求的,因为invite的请求得到最终应答的时间比较长。对于一个有状态的UAS来说,Cancel请求是点对点的,就是Cancel请求需要每个proxy服务器进行处理和应答。而无状态服务器只是转发这个cancel请求。

update

如果会话未建立,则UPDATE用于修改会话的状态。用户可以使用UPDATE更改编解码器。

 

如果会话建立,则使用重新邀请来更改/更新会话。

Re-invite和Update的区别

在SIP中,re-invite和update都是用来修改变session参数的。不同的是,update对dialog的状态没有影响,而re-invite会改变对话的状态。所以update可以在第一个invite被应答之前发送(即收到invite的200ok之前)。也就是说,update可以被用来控制早期媒体。而re-invite只能在第一个invite被应答之后发送(即在通话已经建立之后)。

    一般来说,在通话建立以后用update和re-invite改变session参数都可以。但是此时多用re-invite。因为update要立即被响应。这样,如果session参数的修改需要用户参与的话,用update就不合适了。大多数时候,呼叫建立起来之后再修改session参数的话,都需要用户的参与,比如点一个同意对话框,所以用re-invite就更普遍一些。

 

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值