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:[email protected]: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:[email protected]>;tag=887892942
To: <sip:[email protected]>;tag=527292637
Call-ID: [email protected]
CSeq: 1174960511 INVITE
Contact: <sip:[email protected]: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:[email protected]>;tag=887892942
To: <sip:[email protected]>;tag=527292637
Call-ID: [email protected]
CSeq: 1174960511 INVITE
Contact: <sip:[email protected]: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就更普遍一些。

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章