下面是一個典型的SIP 會話
要傳送媒體首先要建立一個媒體會話(Session )。建立媒體會話實際上就是通過SDP offer/answer 交換進行就會話的媒體參數進行協商的一個過程。但在SIP 中沒有規定使用哪個SIP 消息來攜帶一個SDP (offer 或answer )。理論上,任何SIP 消息的正文中都可以包含會話描述部分。但是,一個SIP 中的會話描述并不一定是一個offer 或一個answer, 隻有符合在SIP 标準RFCs 中所描述的規則的會話描述才會被解釋為一個offer 或一個answer 。offer/answer 模型定義會話的更新。在SIP 中,對話(dialog )用于将offer/answer 交換及其要更新的會話聯系起來。換句話說,隻有在某個SIP 對話中進行的offer/answer 交換,才能更新該對話所管理的會話。 在SIP 消息中承載offer/answer 的規則定義在RFC 3261[1], RFC 3262 [2] 以及RFC 3311 [4] 中。在這些RFCs 中定義了 六種 在SIP 消息中交換offer/answer 的模式。 模式1 和模式2 是在RFC3261 中定義 的,用于不支援可靠臨時響應消息(1xx-rel )的SIP 實體之間的會話建立。 模式 1 :UAC 在 INVITE 請求中攜帶一個 offer, UAS 在 200 INVITE 響應中傳回answer 。這是最常用的一種模式。 模式 2 :UAC 在 INVITE 請求中沒有攜帶 offer 。UAS 在 200 INVITE 響應中攜帶一個offer ,UAC 通過ACK 傳回answer 。這種模式通常用于3PCC 中。 模式3 、模式4 、模式5 都是在RFC3262 中 定義的,可用在支援100rel (可靠臨時響應)擴充的SIP 實體之間。其中模式3 、模式4 可用于會話建立。模式5 隻能用于會話參數更新。它們利用 1xx-rel 響應消息來攜帶offer 或answer 來建立會話。 模式 3 :UAC 在 INVITE 請求中攜帶一個offer, UAS 在 1xx-rel 響應中傳回answer 。這樣,在呼叫完成之前(UAC 沒有收到200 INVITE 消息)會話已建立。此後,會話參數還可以被更新,具體見模式5 及模式6 。 模 式 4 : UAC 在 INVITE 請求中沒有攜帶offer 。UAS 在 1xx-rel 可靠響應中攜帶一個offer ,UAC 通過PRACK 傳回answer 。同樣地, 在呼叫完成之前(UAC 沒有收到200 INVITE 消息)會話已建立。此後,會話參數還可以被更新,具體見模式6 。 模式 5 : 當UAC 與UAS 采用模式3 建立會話 後,呼叫并未完成(見模式3 )。之後,可以使用模式5 對已建立的會話參數進行更新:UAC 在 PRACK 請求中攜帶一個新的offer, UAS 在 200 PRACK 響應中傳回answer 。這樣,會話參數便被更新。 模式6 在RFC3311 中定義,主要用于在早期 對話中更新已建立的會話參數,會話可能是通過模式3 ,也可能是通過模式4 建立的。 模式6 還可以對會話進行多次更新。例如,之前已認證模 式5 更新過的會話還可以使用模式6 更新;甚至通過模式6 更新過的會話還可以再次使用模式6 更新。 模 式 6 :UAC (或UAS )發送 UPDATE 請求其中攜帶一個新的offer, AS (或UAC )在 200 UPDATE 中傳回一個offer 。這樣,會話參數便被更新。注意,UAS 或UAC 在發送UPDATE 進行會話更新之前,必須保證之前的會話更新過程已經 完成。也就是說,發出的offer 已經收到answer ,或者收到的offer 已經産生了answer 。 總 結 INVITE 方法提供了會話建立過程。 在沒有100rel 選項時,會話建立過程非常簡單,隻能使用200INVITE 響應消息傳送會話描述,這些會話描述可能是answer( 模式1), 也可能是 offer (模式2 )。無論使用何種模式,會話都隻能呼叫完成後才能建立,在呼叫完成之前和呼叫完成之後隻能有一個會話 – 用于最終通話的正常會話,因而,不能建立所謂的“早期媒體會話”。 在引入100rel 選項後,會話建立過程變得複雜,通過可靠的臨時消 息消息也可以傳送會話描述,這些會話描述可能是answer( 模式3), 也可能是offer (模式4 )。模式3 和模式4 都能夠在呼叫完成前建立會話。并且 在呼叫完成之前,這些會話還可以被更新。這樣就能夠建立與正常會話不同的“早期媒體會話”,完成回鈴音的産生等功能。 PRACK 方法可 用于更新已建立的會話的參數(模式5 ) UPDATE 方法可用于多次更新已建立的會話的參數(模式6 ),發起更新的可以是UAC 也可以是 UAS 。 SDP 及RTP 的工作過程: 一、SIP 協定告知對方UDP 端口号,協商媒體類型 1.1 主叫方發給被叫方的INVITE 請求
1.2 被叫方回給主叫方的183 消息
二、RTP 媒體流 2.1 主叫方發給被叫方的一個RTP 包,UDP 端口号是SDP 協商好的,包的序列号是28590
2.2 主叫方發給被叫方的下一個RTP 包,UDP 端口号是SDP 協商好的,包的序列号是28591
三、RTCP 媒體流 3.1 每發完一批RTP 包的時候,就發一個RTCP 包,告訴接收方我剛才發了多少RTP 包,多少個位元組
本文轉自: https://wenku.baidu.com/view/854dd3e55ef7ba0d4a733bed.html