天天看點

SIP交換中的SDP及RTP的工作過程

  下面是一個典型的SIP 會話

SIP交換中的SDP及RTP的工作過程

要傳送媒體首先要建立一個媒體會話(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 請求  

SIP交換中的SDP及RTP的工作過程

  1.2         被叫方回給主叫方的183 消息  

SIP交換中的SDP及RTP的工作過程

二、RTP 媒體流 2.1         主叫方發給被叫方的一個RTP 包,UDP 端口号是SDP 協商好的,包的序列号是28590

SIP交換中的SDP及RTP的工作過程

2.2         主叫方發給被叫方的下一個RTP 包,UDP 端口号是SDP 協商好的,包的序列号是28591  

SIP交換中的SDP及RTP的工作過程

  三、RTCP 媒體流 3.1         每發完一批RTP 包的時候,就發一個RTCP 包,告訴接收方我剛才發了多少RTP 包,多少個位元組  

SIP交換中的SDP及RTP的工作過程

本文轉自: https://wenku.baidu.com/view/854dd3e55ef7ba0d4a733bed.html

繼續閱讀