標籤:
[轉] SDP協議
http://blog.csdn.net/dxpqxb/article/details/18706471
1.SDP協議概述
SDP(Session Description Protocol)是一個用來描述多媒體會話的應用程式層控制協議,為會話通知、會話邀請和其它形式的多媒體會話初始化等目的提供了多媒體會話描述;它是一個基於文本的協議,這樣就能保證協議的可擴充性比較強,這樣就使其具有廣泛的應用範圍;SDP 完全是一種會話描述格式 ― 它不屬於傳輸協議 ― 它只使用不同的適當的傳輸協議,包括會話通知協議(SAP)、工作階段初始通訊協定(SIP)、即時資料流通訊協定(RTSP)、MIME 擴充協議的電子郵件以及超文字傳輸通訊協定 (HTTP)(HTTP)。SDP 不支援會話內容或媒體編碼的協商,所以在流媒體中只用來描述媒體資訊。媒體協商這一塊要用RTSP來實現。
會話目錄用於協助多媒體會議的通告,並為會話參與者傳送相關設定資訊。SDP 即用於將這種資訊傳輸到接收端。在網際網路組播骨幹網(Mbone)中,會話目錄工具被用於通告多媒體會議,並為參與者傳送會議地址和參與者所需的會議特定工具資訊,這由 SDP 完成。SDP 串連好會話後,傳送足夠的資訊給會話參與者。SDP 資訊發送利用了會話通知協議(SAP),它周期性地組播通知數據包到已知組播地址和連接埠處。這些資訊是 UDP 資料包,其中包含 SAP 協議頭和文本有效載荷(text payload)。這裡文本有效載荷指的是 SDP 會話描述。此外資訊也可以通過電子郵件或 WWW (World Wide Web) 進行發送。
SDP 文本資訊包括:會話名稱和意圖; 會話期間; 構成會話的媒體; 有關接收媒體的資訊(地址等)。
2.SDP協議結構
SDP協議的資訊是文本資訊,採用 UTF-8 編 碼中的 ISO 10646 字元集。
SDP描述由許多文本行組成,文本行的格式為<類型>=<值>,<類型>是一個字母,<值>是結構化的文本串,其格式依<類型>而定。<type>=<value>[CRLF]
SDP會話描述如下:(標註 * 符號的表示可選欄位):
v = (協議版本) o = (所有者/建立者和工作階段識別項) s = (會話名稱) i = * (會話資訊) u = * (URI 描述) e = * (Email 地址) p = * (電話號碼) c = * (串連資訊 ― 如果包含在所有媒體中,則不需要該欄位) b = * (頻寬資訊)
一個或更多時間描述(如下所示):
z = * (時間地區調整) k = * (加密金鑰) a = * (0 個或多個會話屬性行) 0個或多個媒體描述(如下所示)
時間描述
t = (會話啟用時間) r = * (0或多次重複次數)
媒體描述
m = (媒體名稱和傳輸地址) i = * (媒體標題) c = * (串連資訊 — 如果包含在會話層則該欄位可選) b = * (頻寬資訊) k = * (加密金鑰) a = * (0 個或多個會話屬性行)
三、SDP協議例子:
訊息本文格式:
v=0 //該行指示協議的版本
o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4 //o行中包含與會話所有者有關的參數
l 第一個參數表明會話發起者的名稱,該參數可不填寫,如填寫和SIP訊息中,from訊息頭的內容一致。
l 第二個參數為主叫方的工作階段識別項。
l 第三個參數為主叫方會話的版本,會話資料有改變時,版本號碼遞增。
l 第四個參數定義了網路類型,IN表示Internet網路類型,目前僅定義該網路類型。
l 第五個參數為地址類型,目前支援IPV4和IPV6兩種地址類型。
l 第六個參數為地址:表明會話發起者的IP地址,該地址為信令面的IP地址,信令PDP啟用時為手機分配。
s=SDP Seminar //表明本次會話的標題,或會話的名稱
i=A Seminar on the session description protocol //會話的描述
u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps //會話的URI,通過該地址可以查閱到會話的更多內容
[email protected] (Mark Handley) //會話責任人的EMIAL地址
c=IN IP4 224.2.17.12/127 //C行包含為多媒體會話而建立的串連的資訊,其中指出了真正的媒體流使用的IP地址
l 第一個參數為網路類型,目前僅定義INTERNET網路類型。用“IN”表示。
l 第二個參數為地址類型,目前支援兩種地址類型:IPV4和IPV6。
l 第三個參數為地址,該地址為多媒體流使用的IP地址。
t=2873397496 2873404696 //表示會話的開始時間和結束時間
l 第一個參數表明會話的開始時間,數字表明從1900年1月1日00:00以來所經過的秒數。
l 第二個參數表明會話的結束時間,數字表明從1900年1月1日00:00以來所經過的秒數。
m=audio 3458 RTP/AVP 0 96 97 // m行又稱媒體行,描述了發送方所支援的媒體類型等資訊
l 第一個參數為媒體名稱:表明支援音訊類型。
l 第二個參數為連接埠號碼,表明UE在本地連接埠為3458上發送音頻流。
l 第三個參數為傳輸協議,一般為RTP/AVP協議。
l 四-七參數為所支援的四種淨荷類型編號
a=rtpmap:0 PCMU //a行為媒體的屬性行,以屬性的名稱:屬性值的方式表示。
格式為:a=rtpmap:<淨荷類型><編碼名稱>
l 淨荷類型0固定分配給了PCMU,
l 淨荷類型96對應的編碼方案為G.726,為動態分配的。
l 淨荷類型97對應的編碼方式為自適應多速率寬頻編碼(AMR-WB),為動態分配的。
a=rtpmap:96 G726-32/8000
a=rtpmap:97 AMR-WB
m=video 3400 RTP/AVP 98 99 //m行又稱媒體行,描述了發送方所支援的媒體類型等資訊
l 第一個參數為媒體名稱:表明可使用視訊類型。
l 第二個參數為連接埠號碼,表明UE在本地連接埠為3400上發送視頻流。
l 第三個參數為傳輸協議,一般為RTP/AVP協議。
l 四、五參數給出了兩種淨荷類型編號
格式為:a=rtpmap:<淨荷類型><編碼名稱>
a=rtpmap:98 MPV
a=rtpmap:99 H.261
l 淨荷類型98對應的編碼方案為MPV,為動態分配的。
l 淨荷類型97對應的編碼方式為H.261,為動態分配的。
a=rtpmap:98 MPV
a=rtpmap:99 H.261
下面是一個helix 流媒體伺服器的RTSP協議中的SDP協議:
v=0 //SDP version
// o field定義的源的一些資訊。其格式為:o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
o=- 1271659412 1271659412 IN IP4 10.56.136.37 s=<No title>
i=<No author> <No copyright> //session的資訊
c=IN IP4 0.0.0.0 //connect 的資訊,分別描述了:網路通訊協定,地址的類型,串連地址。
c=IN IP4 0.0.0.0
t=0 0 //時間資訊,分別表示開始的時間和結束的時間,一般在流媒體的直播的時移中見的比較多。
a=SdpplinVersion:1610641560 //描述性的資訊
a=StreamCount:integer;2 //用來描述媒體流的資訊,表示有兩個媒體流。integer表示資訊的格式為整數。
a=control:*
a=DefaultLicenseValue:integer;0 //License資訊
a=FileType:string;"MPEG4" ////用來描述媒體流的資訊說明當前協商的檔案是mpeg4格式的檔案
a=LicenseKey:string;"license.Summary.Datatypes.RealMPEG4.Enabled"
a=range:npt=0-72.080000 //用來表示媒體流的長度
m=audio 0 RTP/AVP 96 //做為媒體描述資訊的重要組成部分描述了媒體資訊的詳細內容:表示session的audio是通過RTP來格式傳送的,其payload值為96傳送的連接埠還沒有定。
b=as:24 //audio 的bitrate
b=RR:1800
b=RS:600
a=control:streamid=1 //通過媒體流1來發送音頻
a=range:npt=0-72.080000 //說明媒體流的長度。
a=length:npt=72.080000
a=rtpmap:96 MPEG4-GENERIC/32000/2 //rtpmap的資訊,表示音頻為AAC的其sample為32000
a=fmtp:96 profile-level-id=15;mode=AAC-hbr;sizelength=13;indexlength=3;indexdeltalength=3;config=1210 //config為AAC的詳細格式資訊
a=mimetype:string;"audio/MPEG4-GENERIC"
a=Helix-Adaptation-Support:1
a=AvgBitRate:integer;48000
a=HasOutOfOrderTS:integer;1
a=MaxBitRate:integer;48000
a=Preroll:integer;1000
a=OpaqueData:buffer;"A4CAgCIAAAAEgICAFEAVABgAAAC7gAAAu4AFgICAAhKIBoCAgAEC"
a=StreamName:string;"Audio Track"
下面是video的資訊基本和audio的資訊相對稱,這裡就不再說了。
m=video 0 RTP/AVP 97
b=as:150
b=RR:11250
b=RS:3750
a=control:streamid=2
a=range:npt=0-72.080000
a=length:npt=72.080000
a=rtpmap:97 MP4V-ES/2500
a=fmtp:97 profile-level-id=1;
a=mimetype:string;"video/MP4V-ES"
a=Helix-Adaptation-Support:1
a=AvgBitRate:integer;300000
a=HasOutOfOrderTS:integer;1
a=Height:integer;240 //影片的長度
a=MaxBitRate:integer;300000
a=MaxPacketSize:integer;1400
a=Preroll:integer;1000
a=Width:integer;320 //影片的寬度
a=OpaqueData:buffer;"AzcAAB8ELyARAbd0AAST4AAEk+AFIAAAAbDzAAABtQ7gQMDPAAABAAAAASAAhED6KFAg8KIfBgEC"
a=StreamName:string;"Video Track"
[轉] SDP協議