1.概述
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 and so on)
5)使用的帶寬信息
6)可信賴的接洽信息(Contact information)
7)等......
2.協議
Session description //格式及舉例
v= (protocol version) //v=0
o= (owner/creator and session identifier)
//o=<用戶名><會話id><版本><網絡類型><地址類型><地址>
//o=sname 1234567890 0987654321 I IP4 126.15.64.3
s= (session name) //會話名
i=* (session information) //會話信息
u=* (URI of description) //u=http://www.zte.com.cn/staff/sdp.ps
e=* (email address) //e=zte@isi.edu(general text如:王先生)
//或e=Mr. Wang<wang@zte.com>
p=* (phone number) //p=+86-0755-26773000-7110(wang) or p=+1 617 253 6011
c=* (connection information -如已經包含在全部媒體中則該行不須要)
//c=<網絡類型><地址信息><鏈接地址>
//多點會議包括TTL
//鏈接地址: <base multicast address>/<ttl>/<number of addresses>
//c=IN IP4 224.2.13.23/127
//c=IN IP4 224.2.1.1/127/3
b=* (bandwidth information) //b=<修改量(CT Conference Total
//IAS Application-specific Max)>:<帶寬值(kb/s)>
//b=CT:120
One or more time descriptions (see below)
z=* (time zone adjustments) //時區調整
k=* (encryption key) //k=<方法>:<密鑰>或k=<方法>
a=* (zero or more session attribute lines
//a=<屬性> 或a=<屬性>:<值>
Zero or more media descriptions (see below)
各行嚴格按順序,其中:
時間描述:
t= (time the session is active) //<開始時間><結束時間>,單位秒,十進制NTP
//t=2873397468 2873404969
r=* (zero or more repeat times) //<重複時間><活動持續時間以開始時刻爲參考的偏移列表>單位秒
//r=604800 3666 90000 或寫成r=7d 1h 0 25h
媒體描述:
m= (media name and transport address)
//m=<媒體><端口><傳送><格式列表>
//m=audio 49170 RTP/AVP 0 3
//協議爲RTP,剖面爲AVP
//參考rtp-parameters.txt
i=* (media title) //媒體稱呼
c=* (connection information – 如已經包含在會話級描述則爲可選)
b=* (bandwidth information) //同c
k=* (encryption key) //會話級爲摸認值,同c
a=* (zero or more media attribute lines)
//兩種形式:(也同c)(見後說明)
//a=<attribute>如:
//a=recvonly
//a=<attribute>:<value>
注:v,o,s,t,m爲必須的,其餘項爲可選。
若是SDP語法分析器不能識別某一類型(Type),則整個描述丟失;[?什麼意思]
若是」a=」的某屬性值不理解,則予以丟失
整個協議區分大小寫
「=」兩側不容許有空格
會話級的描述就是媒體級描述的缺省值
全部均格式爲<type>=<value>
An example SDP description is:
v=0
o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
e=mjh@isi.edu (Mark Handley)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 31
m=application 32416 udp wb
a=orient:portrait
//////////////////////////////////////////////////////////
Protocol Version
v=<version>
// v=0
v:該SDP協議的版本號
Origin
o=<username> <session id> <version> <network type> <address type><address>
// o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4
o:標示了該會話的全局惟一性
<username>:用於登錄建立主機的ID,若該主機不支持側應爲"-",該字段內不能包含空格
<session id>:用於惟一的標示該會話描述,建議採用Network Time Protocol (NTP)的時間戳來保證惟一性
<version>:該公告的版本號,用於區別同個會話內的多個公告
<network type>:網絡類型 IN(Internet)
<address type>:地址類型 IP4/IP6
<address>:該會話建立者的地址
Session Name
s=<session name>
// s=SDP Seminar
s:會話名,每一個會話僅有一個
Session and Media Information
i=<session description>
// i=A Seminar on the session description protocol
i:會話信息,每一個會話至多有一個,每一個媒體至多有一個,經常使用於標識一個會話內多個同類型的媒體流。
URI
u=<URI>
// u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
u:該會話的URI(Universal Resource Identifier)地址
Email Address and Phone Number
e=<email address>
p=<phone number>
e/p:添加會話負責人的私人信息
// EMAIL地址格式:e=mjh@isi.edu (Mark Handley) or e=Mark Handley <mjh@isi.edu>
// 電話號碼的格式:p=+44-171-380-7777 or p=+1 617 253 6011
Connection Data
c=<network type> <address type> <connection address>
// c=IN IP4 224.2.17.12/127
c:鏈接數據,每一個會話公告應包含一個鏈接描述在每一個媒體描述中,
單播的時候經過該IP地址發送,多播時經過TTL與IP地址共同決定那些包將被髮送
<connection address>:IP addr/TTL[/IP NUMS] example:192.168.1.2/127[/2],單播[多播]
IP address together with TTL define which muticast pakets will be
sent in this conference.
Bandwidth
b=<modifier>:<bandwidth-value>
//....
b:提供這次會話的帶寬
<modifier>:修改量
CT Conference Total:固有的最大帶寬值與多播骨幹網的TTL值或一個特指的多播範圍區相關連
若是某一會話或媒體的帶寬與最大帶寬值不一樣,則經過該參數提供一個最大的限定值。該參數指定多個媒體總和的值。
AS Application-Specific Maximum:該參數指定一個特殊應用的帶寬,指定單一媒體的值。
Extension Mechanism:X-..擴展的帶寬定義
Times, Repeat Times and Time Zones
t=<start time> <stop time>
// t=2873397496 2873404696
t:描述該會議的開始和結束時間,若是該會議在多個不規則的時間間隔內激活,可使用多行t:描述
若是時間間隔爲規則的,可使用"r="重複定義。
<start time>:開始時間,以秒錶示的NTP時間,開始結束時間都爲0時被認爲時永久的會議
<stop time>:結束時間,以秒錶示的NTP時間,結束時間爲0時,該會議直到過了開始時間纔開始
r=<repeat interval> <active duration> <list of offsets from start-time>
<repeat interval>:重複間隔
<active duration>:持續時間
<list of offsets from start-time>:相對開始時間的偏移
z=<adjustment time> <offset> <adjustment time> <offset> ....
// z=2882844526 -1h 2898848070 0
z:<調整時間> <偏移>
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沒有提供密鑰但該會話或媒體流是要求加密的。
Attributes //該描述常被用於擴展SDP協議,分紅「會話級」和「媒體級」兩種屬性
a=<attribute>
a=<attribute>:<value>
// a=recvonly
// a=orient:portrait
a:媒體描述具有任意個「媒體級」的屬性,用於附加表示媒體流的信息
屬性也能夠被加在第一個媒體域,這些「會話級」屬性用於附帶表示會議的信息
屬性域通常有兩種格式:
<attribute>:性質屬性,描述當前會話的性質
<value>:
Media Announcements
m=<media> <port> <transport> <fmt list>
每一個會話能夠包含許多的媒體描述,
<media>:媒體類型,包括audio/video/application/data/control,
(音頻/視頻/應用[如:白板信息]/數據[不要向用戶顯示]/控制)
當有新的媒體類型出項時,這些值將被擴展。
<port>:端口類型,該值的肯定取決於對應的"c="域中指定的網絡和在第三個子項中定義的傳輸協議,UDP端口只能在1024-65535之間RTP端口能夠是任意有效的範圍,RTCP端口定義爲大於對應RTP端口的奇數,當分級的多個媒體流編碼經過單一的地址發送時,咱們必須指定多個端口用於傳輸。 採用跟"c="域中定義多個IP地址的格式同樣,
m=<media> <port>/<number of ports> <transport> <fmt list>
example: m=video 49170/2 RTP/AVP 31
定義了兩對的RTP/RTCP端口,49170 19171和49172 49173
<transport>:傳輸協議類型,該項的值依賴於"c="域中的網絡類型
IP4
若是某個應用採用在UDP上使用單一組合了所有媒體格式和傳輸協議的模式傳輸,簡單的方法是將傳輸協議指定爲UDP,採用格式列表區別組合的協議,區別傳輸類型和媒體格式是必要的。
<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>]
<payload type>
<encoding name>:編碼名,擴展的用X-開始
<clock rate>:採樣頻率
<encoding parameters>:對語音編碼來講,該參數表示語音聲道。
對視頻編碼不提供該參數。
RTP格式列表沒提供對每一個媒體包包括幾個採樣點進行說明,若是沒有默認值,須要經過"ptime"說明。
非RTP媒體採用MIME文本類型編碼,如:m=application 32416 udp wb
Suggested Attributes
推薦的屬性
a=cat:<category>
cat:描述離散分級的會話類型,使接受者經過該參數過率不想要的會話類型
a=keywds:<keywords>
keywds:該參數輔助接收者根據關鍵字過慮會話,鑑別想要會話類型。
a=tool:<name and version of tool>
tool:該參數提供給SDP建立者名字和版本號。
a=ptime:<packet time>
ptime:該參數提供一個以毫秒爲單位的打包長度,媒體級屬性
a=recvonly
a=sendrecv
a=sendonly
發送模式,會話級屬性。
a=orient:<whiteboard orientation>
該參數指定白板應用中屏幕的方向性,
容許值爲`portrait',`landscape' and `seascape' (upside down landscape).
a=type:<conference type>
該參數指定會議類型,
容許值爲:`broadcast', `meeting', `moderated', `test' and `H332'.
broadcast會話默認爲recvonly
meeting默認sendrecv
a=charset:<character set>
該參數指定會話名和信息值的字符集
a=charset:ISO-8859-1
a=sdplang:<language tag>
描述該會話的描述的語言
a=lang:<language tag> "session-level" and "media-level"
SDP描述使用的語言,媒體的語言
a=framerate:<frame rate>
該參數描述視頻的最大幀數(frames/sec),容許(整數.小數)格式
a=quality:<quality>
該參數用0-10的整數值描述建議的編碼質量,
對視頻來講爲了在幀速率和持續圖像質量間指定一個非默認的平衡值
10 - 最佳圖像質量
5 - 無質量建議
0 - 最差圖像質量
a=fmtp:<format> <format specific parameters>
該屬性值指定一個SDP不瞭解的特殊格式,該格式是媒體的格式的一種。定義指定格式的附加參數
參考:
http://tools.ietf.org/html/rfc4566
html