天天看點

SDP協定簡單介紹

一、協定概述

SDP也是MMUSIC工作組的一個産品,在MBONE内容中用得很多。其目的就是在媒體會話中,傳遞媒體流資訊,允許會話描述的接收者去參與會話。SDP基本上在internet上工作。它定義了會話描述的統一格式,但并不定義多點傳播位址的配置設定和SDP消息的傳輸,也不支援媒體編碼方案的協商,這些功能均由下層傳送協定完成。典型的會話傳送協定包括:SAP(Session Announcement Protocol 會話公告協定)、SIP、RTSP、HTTP和使用MIME的E-Mail。(注意:對SAP隻能包含一個會話描述,其它會話傳輸協定的SDP可包含多個會話描述)

SDP包括以下一些方面:

(1)會話的名稱和目的

(2)會話存活時間

(3)包含在會話中的媒體資訊,包括:

    媒體類型(video, audio, etc)

    傳輸協定(RTP/UDP/IP, H.320, etc)

    媒體格式(H.261 video, MPEG video, etc)

    多點傳播或遠端(單點傳播)位址和端口

(4)為接收媒體而需的資訊(addresses, ports, formats等)

(5)使用的帶寬資訊

(6)可信賴的接洽資訊(Contact information)

二、協定格式

SDP描述由許多文本行組成,即一個一個的字元串,是以,隻需要按照格式寫好字元串直接放入SDP裡即可。文本行的格式為<類型>=<值>,<類型>是一個字母,<值>是結構化的文本串,其格式依<類型>而定。

會話描述   格式及舉例
v=(protocolversion) v=0
o=(owner/creator and sessionidentifier)

o=<</FONT>使用者名><</FONT>會話id><</FONT>版本><</FONT>網絡類型><</FONT>位址類型><</FONT>位址>

o=sname12345678900987654321INIP4126.15.64.3

s=(sessionname) 會話名
i=*(sessioninformation) 會話資訊
e=*(emailaddress)

[email protected](generaltext

或e=Mr.Wang

p=*(phonenumber)

p=+86-0755-26773000-7110(wang)

orp=+16172536011

c=*(connectioninformation-如已經包含在所有媒體中則該行不需要)

c=<</FONT>網絡類型><</FONT>位址資訊><</FONT>多點會議包括TTL連接配接位址:的address>//

c=INIP4224.2.13.23/127

c=INIP4224.2.1.1/127/3

b=*(bandwidthinformation)

b=<</FONT>修改量(CTConferenceTotal

IASApplication-specificMax)>:<</FONT>帶寬

值(kb/s)>

b=CT:120

一個或更多時間描述
z=*(time zoneadjustments) 時區調整
k=*(encryption key) k=<</FONT>方法>:<</FONT>密鑰>或k=<</FONT>方法>
a=*(zero or more sessionattributelines) a=<</FONT>屬性>或a=<</FONT>屬性>:<</FONT>值>
時間描述
t=(timethesessionisactive)

<</FONT>開始時間><</FONT>結束時間>,機關秒,十進制NTP

t=28733974682873404969

r=*(zero or more repeattimes) <</FONT>重複時間><</FONT>活動持續時間以開始時刻為參考的偏移清單>機關秒r=604800366690000或寫成r=7d1h025h
媒體描述
m=(media name andtransportaddress)

m=<</FONT>媒體><</FONT>端口><</FONT>傳送><</FONT>格式清單>

m=audio49170RTP/AVP03

協定為RTP,剖面為AVP,參考rtp-parameters.txt

i=*(mediatitle) 媒體稱呼
c=*(connectioninformation) 如已經包含在會話級描述則為可選
b=*(bandwidthinformation 同c
k=*(encryptionkey) 會話級為摸認值,同c
a=*(zeroormoremediaattributelines)

兩種形式:(也同c)(見後說明)a=如:

a=recvonly

a=:

說明:

(1)v、o、s、t、m為必須的,其他項為可選。

(2)如果SDP文法分析器不能識别某一類型(Type),則整個描述丢失。

(3)如果”a=”的某屬性值不了解,則予以丢失。

(4)整個協定區分大小寫。

(5)“=”兩側不允許有空格。

(6)會話級的描述就是媒體級描述的預設值。

(7)所有格式均為<type>=<value>。

一個簡單的例子:

v=0
o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.example.com/seminars/sdp.pdf
[email protected] (Jane Doe)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 99
a=rtpmap:99 h263-1998/90000
           

三、各type的詳細解釋

1、Protocol Version(協定版本)

格式:v=<version>

例子:v=0

說明:目前協定版本為0,沒有子版本。

2、Origin(會話源)

格式:o=<username> <session id> <version> <network type> <address type><address>

例子:o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4

說明:o标示了該會話的全局唯一性

(1)<username>:用于登陸建立主機的ID,若該主機不支援則應為"-",該字段内不能包含空格

(2)<session id>:用于唯一的标示該會話描述,一般為數字串,其配置設定由建立工具決定,建議采用Network Time Protocol (NTP)的時間戳來保證唯一性

(3)<version>:該公告的版本号,用于差別同個會話内的多個公告,供公告代理伺服器檢測同一會話的若幹個公告哪個是最新公告。基本要求是會話資料修改後該版本值遞增,建議用NTP時戳

(4)<network type>:網絡類型,為文本串“IN”(Internet)

(5)<address type>:位址類型,為文本串“IP4“或”IP6”

(6)<address>:該會話建立者的位址,按照上述的IP4或者IP6格式寫出

3、Session Name(會話名稱)

格式:s=<session name>

例子:s=SDP Seminar

說明:會話名稱,每個會話僅有一個。

4、Session and Media Information

格式: i=<session description>

例子:i=A Seminar on the session description protocol

說明:會話資訊,每個會話至多有一個,每個媒體至多有一個,常用于辨別一個會話内多個同類型的媒體流。

5、URI

格式:u=<URI>

例子:u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps

說明:該會話的URI(Universal Resource Identifier)位址

6、Email Address and Phone Number

格式:e=<email address>

            p=<phone number>

例子:EMAIL位址格式:[email protected] (Mark Handley) or e=Mark Handley <[email protected]>

            電話号碼的格式:p=+44-171-380-7777 or p=+1 617 253 6011

說明:添加會話負責人的私人資訊,該人不一定是建立會議公告的人。

7、Connection Data(連接配接資料)

格式:c=<network type> <address type> <connection address>

例子:c=IN IP4 224.2.17.12/127

說明:媒體連接配接資料,每個會話公告應包含一個連接配接描述在每個媒體描述中,單點傳播的時候通過該IP位址發送,多點傳播時通過TTL與IP位址共同決定那些包将被發送。會話級為媒體級的預設值。

8、Bandwidth(帶寬)

格式:b=<modifier>:<bandwidth-value>

說明:提供此次會話的帶寬,機關為kbit/s。

(1)<modifier>:修改量

(2)b=CT(Conference Total):固有的最大帶寬值與多點傳播骨幹網的TTL值或一個特指的多點傳播範圍區相關連如果某一會話或媒體的帶寬與最大帶寬值不同,則通過該參數提供一個最大的限定值。該參數指定多個媒體總和的值。

(3)b=AS(Application-Specific Maximum):該參數指定一個特殊應用的帶寬,指定單一媒體的值。

(4)b=X-:Extension Mechanism,擴充的帶寬定義

9、Times, Repeat Times and Time Zones

格式:t=<start time>  <stop time>

例子:t=2873397496 2873404696

說明:描述該會議的開始和結束時間,如果該會議在多個不規則的時間間隔内激活,可以使用多行t:描述,如果時間間隔為規則的,可以使用"r="重複定義。

(1)<start time>:開始時間,以秒表示的NTP時間,開始結束時間都為0時被認為時永久的會議

(2)<stop time>:結束時間,以秒表示的NTP時間,結束時間為0時,該會議直到過了開始時間才開始

格式:r=<repeat interval> <active duration> <list of offsets from start-time>

說明:

(1)<repeat interval>:重複間隔

(2)<active duration>:持續時間

(3)<list of offsets from start-time>:相對開始時間的偏移

格式:z=<adjustment time> <offset> <adjustment time> <offset> ....

例子:z=2882844526 -1h 2898848070 0

說明:(1)<adjustment time>:調整時間

(2)<offset>:偏移

10、Encryption Keys(加密密鑰)

格式:k=<method>

k=<method>:<encryption key>

k=clear:<encryption key>         //<加密密鑰>密鑰沒有變換

k=base64:<encoded encryption key>     //經base64加密的密鑰,因為它含有SDP禁用的字元

k=uri:<URI to obtain key>         //URI攜帶密鑰

k=prompt                 //不采用密碼,SDP沒有提供密鑰但該會話或媒體流是要求加密的。

11、Attributes

格式:a=<attribute>

            a=<attribute>:<value>

例子:a=recvonly

            a=orient:portrait

說明:媒體描述具備任意個“媒體級”的屬性,用于附加表示媒體流的資訊屬性也可以被加在第一個媒體域,這些“會話級”屬性用于附帶表示會議的資訊屬性域。該描述常被用于擴充SDP協定,分成“會話級”和“媒體級”兩種屬性

(1)會話級:

a=cat:<類别>//給出點分層次式會話分類号,供接收方篩選會話 

a=keywds:<關鍵詞>//供接收方篩選會話                                                    

a=tool:<工具名和版本号>//建立會話描述的工具名和版本号                                     

a=recvonly/sendrecv/sendonly//收發模式                                                 

a=type:<會議類型>//有:廣播,聚會,主席主持,測試,H.323                                   

a=charset:<字元集>//顯示會話名和資訊資料的字元集                                         

a=sdplang:<語言标記>//描述所有語言                                                    

a=lang:<語言标記>//會話描述的預設語言或媒體描述的語言                                     

a=framerate:<幀速率>//機關:幀/秒                                                      

a=quality:<品質>//視訊的建議品質(10/5/0)                                               

a=fmtp:<格式><格式特定參數>//定義指定格式的附加參數

(2)媒體級:

a=ptime:<分組時間>//媒體分組的時長(機關:秒)

a=recvonly/sendrecv/sendonly//收發模式

a=orient:<白闆方向>//指明白闆在屏莫上的方向

a=sdplang:<語言标記>//描述所有語言

a=lang:<語言标記>//會話描述的預設語言或媒體描述的語言

12、Media Announcements

格式:m=<media> <port> <transport> <fmt list>

說明:每個會話可以包含許多的媒體描述,<media>:媒體類型,包括audio/video/application/data/control  (音頻/視訊/應用(如:白闆資訊)/資料(不要向使用者顯示)/控制)。當有新的媒體類型出項時,這些值将被擴充。

(1)<port>:端口類型,該值的确定取決于對應的"c="域中指定的網絡和在第三個子項中定義的傳輸協定,UDP端口隻能在1024-65535之間RTP端口可以是任意有效的範圍,RTCP端口定義為大于對應RTP端口的奇數,當分級的多個媒體流編碼通過單一的位址發送時,我們必須指定多個端口用于傳輸。 采用跟"c="域中定義多個IP位址的格式一樣,m=<media> <port>/<number of ports> <transport> <fmt list>

例子:m=video 49170/2 RTP/AVP 31

定義了兩對的RTP/RTCP端口,49170 19171和49172 49173

(2)<transport>:傳輸協定類型,該項的值依賴于"c="域中的網絡類型IP4,如果某個應用采用在UDP上使用單一組合了所有媒體格式和傳輸協定的模式傳輸,簡單的方法是将傳輸協定指定為UDP,采用格式清單差別組合的協定,差別傳輸類型和媒體格式是必要的。

(3)<fmt list>:格式清單,對音頻和視訊應用,該值表示媒體的有效負荷類型 一旦這個格式清單被限定,在這個會話過程中都将使用清單裡面的有效負荷類型,但第一個類型将被作為預設值。如果媒體流的傳輸模式不是RTP/UDP,格式将在附加的檔案中進行定義。如果通過RTP傳輸,SDP可以提供靜态和動态綁定的兩種RTP編碼有效負荷類型。靜态綁定類型的類型值提供确定的有效負荷類型,動态綁定必須通過後續的選項來進一步的說明。

例如:m=video 49232 RTP/AVP 0 //定義負荷類型為0的媒體流從49232端口發送

            m=video 49232 RTP/AVP 98

            a=rtpmap:98 L16/16000/2 //采用采樣頻率為16KHZ 16bit的立體聲線性編碼

rtpmap屬性對"m="描述的格式清單的負荷類型進行詳細說明,

通用的rtpmap屬性的格式為:

a=rtpmap:<payload type> <encoding name>/<clock rate>[/<encoding parameters>]

a=rtpmap:<淨荷類型号><編碼名>/<時鐘速率>[/<編碼參數>]對音頻,編碼參數為音頻信道數;對視訊沒有定義。

RTP格式清單沒提供對每個媒體包包括幾個采樣點進行說明,如果沒有預設值,需要通過"ptime"說明。非RTP媒體采用MIME文本類型編碼,如:m=application 32416 udp wb

參考:

http://blog.sina.com.cn/s/blog_737adf5301013geh.html

http://www.cnblogs.com/moonvan/archive/2011/10/22/2221261.html

http://tools.ietf.org/html/rfc4566