SDP與SIP的使用在SDP提議回答RFC 3264中給出。SIP中的默認(rèn)消息體類型是 application / sdp 。
主叫方列出他們?cè)敢庠赟DP中接收的媒體能力,通常在INVITE或ACK中。
被叫方在對(duì)INVITE的200 OK響應(yīng)中列出它們的媒體能力。
SDP的典型SIP使用包括以下字段:版本,起源,主題,時(shí)間,連接以及一個(gè)或多個(gè)媒體和屬性。
主題和時(shí)間字段不由SIP使用,但包括為了兼容性。
在SDP標(biāo)準(zhǔn)中,主題字段是必填字段,必須包含至少一個(gè)字符,如果沒有主題,建議為s = - 。
時(shí)間字段通常設(shè)置為t = 00.SIP使用連接,媒體和屬性字段在UA之間建立會(huì)話。
原始字段對(duì)SIP的使用有限。
session-id通常在整個(gè)SIP會(huì)話中保持不變。
每次更改SDP時(shí),版本都會(huì)增加。如果發(fā)送的SDP與之前發(fā)送的SDP沒有變化,則版本保持不變。
由于要使用的媒體會(huì)話和編解碼器的類型是連接協(xié)商的一部分,SIP可以使用SDP來指定多個(gè)替代媒體類型并且選擇性地接受或拒絕那些媒體類型。
offer / answer規(guī)范RFC 3264建議對(duì)每個(gè)媒體字段使用包含a = rtpmap:的屬性。 通過將SDP響應(yīng)中相應(yīng)的媒體字段的端口號(hào)設(shè)置為零來拒絕媒體流。
在以下示例中,呼叫者Tesla想要使用兩個(gè)可能的音頻編解碼器和在初始INVITE中攜帶的SDP中的視頻編解碼器來建立音頻和視頻呼叫 -
v = 0 o = John 0844526 2890844526 IN IP4 172.22.1.102 s = - c = IN IP4 172.22.1.102 t = 0 0 m = audio 6000 RTP/AVP 97 98 a = rtpmap:97 AMR/16000/1 a = rtpmap:98 AMR-WB/8000/1 m = video 49172 RTP/AVP 32 a = rtpmap:32 MPV/90000
編解碼器由RTP / AVP配置文件編號(hào)97,98引用。
被叫方Marry應(yīng)答呼叫,為第一媒體字段選擇第二編解碼器,并且拒絕第二媒體字段,只想要AMR會(huì)話。
v = 0 o = Marry 2890844526 2890844526 IN IP4 172.22.1.110 s = - c = IN IP4 200.201.202.203 t = 0 0 m = audio 60000 RTP/AVP 8 a = rtpmap:97 AMR/16000 m = video 0 RTP/AVP 32
如果此僅音頻呼叫不可接受,則Tom將發(fā)送ACK,然后發(fā)送BYE以取消呼叫。否則,將建立音頻會(huì)話并交換RTP分組。
如該示例所示,除非保持媒體字段的數(shù)量和順序,否則呼叫方將不知道被叫方正在接受和拒絕哪些媒體會(huì)話。
提供/回答規(guī)則在以下部分中總結(jié)。
SDP報(bào)價(jià)必須包括所有必需的SDP字段(這包括v =,o =,s =,c =和t =)。 這些是SDP中的必填字段。
它通常包括一個(gè)媒體字段( m = ),但它不必。 媒體行包含按優(yōu)先順序列出的所有編解碼器。唯一的例外是,如果端點(diǎn)支持大量的編解碼器,最可能被接受或最優(yōu)選應(yīng)該被列出。不同的媒體類型包括音頻,視頻,文本,MSRP,BFCP等。
SDP對(duì)報(bào)價(jià)的回答必須根據(jù)以下規(guī)則構(gòu)建:
答案必須具有與答案相同順序的相同數(shù)量的 m = 行。
可以通過將端口號(hào)設(shè)置為0來拒絕單個(gè)媒體流。
通過發(fā)送非零端口號(hào)接受流。
每個(gè)媒體類型的列出的有效載荷必須是報(bào)價(jià)中列出的有效載荷的子集。
對(duì)于動(dòng)態(tài)有效載荷,不需要在每個(gè)方向上使用相同的動(dòng)態(tài)有效載荷數(shù)。通常,只選擇單個(gè)有效載荷。
任一方可以發(fā)起另一個(gè)提議/應(yīng)答交換以修改會(huì)話。修改會(huì)話時(shí),必須遵循以下規(guī)則:
原始( o = )線路版本號(hào)必須與發(fā)送的最后一個(gè)版本號(hào)相同,這表示此SDP與前一個(gè)交換相同,或者可以遞增一,表示新 必須解析的SDP。
優(yōu)惠必須包含所有現(xiàn)有媒體行,并且必須按相同的順序發(fā)送。
附加的媒體流可以添加到 m = 行列表的末尾。
可以通過將端口號(hào)設(shè)置為0來刪除現(xiàn)有媒體流。此媒體行必須保留在SDP中以及此會(huì)話的所有將來的提供/應(yīng)答交換。
呼叫中的一方可以暫時(shí)將另一方暫停。這通過發(fā)送具有與原始INVITE的SDP相同的SDP但具有 a = sendonly 屬性的INVITE來完成。
通過發(fā)送具有 a = sendrecv 屬性的另一個(gè)INVITE,該調(diào)用再次激活。下圖顯示了呼叫保持的呼叫流程。
更多建議: