天天看點

會話描述協定(SDP)介紹

轉載自:http://blog.sina.com.cn/s/blog_6b10255301012eoq.html

1、SDP的引入

SDP最初用于Mbone(多點傳播骨幹網)上的多媒體會議。Mbone 是Internet的一部分,它的主要特征是對IP多點傳播技術的使用。IP多點傳播技術比較适合實作多方會話。

基于多點傳播的會議稱為松耦合會議(loosely coupledconferences),它的主要特點是:

1)基于多點傳播位址完成多方之間的媒體傳送,每個參與方都向指定的多點傳播位址發送媒體,并且都能接收到發往該多點傳播位址上的媒體;

2)參與方之間沒有緊密的信令關系,沒有控制中心點或會議伺服器。

松耦合會議的建立過程比較簡單,基本上完全由會議建立者來完成,具體來說分兩步:

1)申請會議所需的多點傳播位址,并确定會議的媒體構成以及每個媒體的格式的連接配接端口号;

2)以某種形式描述這些資訊,釋出出去,參與者獲得這些資訊後,即可據此加入這個會話。

顯然在松耦合會議的建立過程中,對會話資訊的描述是非常重要一步。必須要有一種标準規範的形式來進行會話描述,這樣才能保證會議建立者和參與者能夠對一個會話描述有一緻的認識。在IETFRFC2327中定義了SDP(會話描述協定),用來完成對會話的描述。通常,将基于SDP描述的會話資訊稱為SDP描述。SDP描述中包含了構成會話的媒體,媒體流的連接配接位址等資訊。根據一個SDP描述,使用者即可加入一個會話。

具體來說,一個SDP描述主要包括:會話名、會話目的、會話有效時間、構成會話的媒體及接受這些媒體的資訊 (位址、端口、格式)等等。

一個簡單的SDP描述的例子如下:

v=0

s=SDP Seminar

c=IN IP4 224.2.17.12/127

t=3034423519 3042462419

m=audio 49170 RTP/AVP 0

m=video 51372 RTP/AVP 31

這個例子描述了這樣一個會話:會議的标題是“SDPSeminar”,即“SDP研讨會”;會議使用連接配接位址是一個IP播組位址:224.2.17.12;會議的開始時間是3034423519,結束時間是3042462419;會議由音頻和視訊兩種媒體構成,使用的傳輸端口分别是49170和51372。

得到這個SDP描述後,參與者隻需加入到播組位址(224.2.17.12)指定的多點傳播組中,并以指定的媒體格式向指定的端口上發送音頻和視訊即可參加會議。

在松耦合會議中,完成了會話描述後,會話描述的釋出相對比較簡單,實際上在不同的情況下可有有多種方法可用,例如HTTP、MIME擴充的Email等等。

2、SDP規範簡介

SDP會話描述完全是純文字的,使用ISO 10646 字元集,UTF-8 編碼。

形式上一個SDP會話描述包含若幹行以下形式的文本:<type>=<value>

<type>恰好是一個字元,并且是大小寫敏感的。<value>一個結構化的文本字元串,其格式依賴于<type>。它通常也是大小寫敏感的,除非特定的域有明确定義。通常<value>或者是若幹以單個空格分界的字段,或者是一個自由格式的字元串。

内容上,一個會話描述包括一個會話級部分,後面跟随0個或多個媒體級部分。會話級部分以 `v='行開始,直到第一個媒體級部分。媒體描述以 `m=' 行開始,直到下一個媒體描述或整個會話描述的結束。

具體來說一個會話描述的構成如下:

會話描述協定(SDP)介紹

注意,一些描述行是必需的,一些描述行是可選的,但是所有的出現的行必須以上面給出的順序出現。可選描述行以`*'标記。

下面介紹一下主要的描述行。

"v=" 行:給出SDP的版本。例如 v=0

"s=" 行:給出會話名。每個會話描述中必須有且僅有一個會話名。例如 s=SDP Seminar

"o="行:給出會話的發起者資訊(使用者名、主機位址),以及會話辨別和會話版本号。具體形式為:o=<username><session id><version> <networktype> <address type><address>。其中:

  • <network type>文本串給出網絡類型。最初定義的是"IN",含義是指"Internet"。<addresstype> 文本串,給出之後的位址的類型。最初定義了 "IP4" 和 "IP6"兩種類型。
  • <address> 是建立會話的機器的位址。
  • <username> 是登入在發起主機上的使用者的名。
  • <session id>是一個數字串。<session id>的配置設定方法取決于會話描述的建立工具,但是SDP規範建議使用NTP時間戳以保證其唯一性。

      五元組 <username>,<session id>, <networktype>, <address type>和 <address> 形成了一個全局唯一的會話辨別。

  • <version>是會話描述的版本号。同樣,它的使用取決于會話描述建立工具,隻要保證修改會話資料時<version>是遞增的即可。同樣,推薦使用NTP時間戳。

一般來說,"o=" 域唯一的辨別了本會話描述的目前版本。

"c=" 行:給出連接配接參數。具體形式為:c=<networktype> <address type><connection address>。其中:

  • <networktype>是網絡類型。最初定義的是"IN",含義是指"Internet"。
  • <address type>是位址類型。這允許SDP被用于不是基于IP的會話。目前隻定義了IP4。
  • <connectionaddress>是連接配接位址。可選的附加子域可以加在連接配接位址後面,這取決于<address type> 域的值。位址類型是 IP4的情況,典型的連接配接位址将會是D類的 IP 多點傳播組位址。使用IP多點傳播組位址作為連接配接位址時必須增加有一個會話的存活時間 (TTL)值TTL 值範圍是 0-255。。TTL和IP多點傳播組位址一起定義了會議中的多點傳播包發送的範圍。會話的TTL加在位址的後面,通過一個斜杠分隔。

一個例子:c=IN IP4 224.2.1.1/127。

"m="行:給出對媒體流的描述。其形式為:m=<media><port><transport> <fmtlist>。其中:

  • <media>給出媒體的類型。目前已定義的媒體類型有"audio"、"video"、 "application"、 "data" 和"control"。将來可能會由于新的通信形式(例如, telepresense)的出現而擴充新的媒體類型。
  • <port>給出接受媒體流傳輸端口。傳輸端口的含義取決于在相關的"c="行中指定的網絡類型,後面的<transport>中給出的傳輸協定。比如,對于基于UDP的端口,端口值範圍為[1024~65535] 。為了符合RTP,應該是偶數。例如:m=video 49170/2 RTP/AVP 31 指定49170端口 和49171端口形成一個 RTP/RTCP 對,49172 端口 和 49173 端口形成第二個 RTP/RTCP 對。
  • <transport> 給出傳輸協定。傳輸協定值依賴于 "c="域的位址類型。對于 IP4,絕大多數媒體流通過 RTP/UDP傳送。
  • <fmt list> 給出媒體的格式清單。對于 audio 和video,通常會有媒體淨荷類型在 RTP Audio/Video Profile中定義。當一個格式清單被給出時,這暗示了其中指定的格式的可能被用于這個會話,但是第一個格式是這個會話的預設格式。例如 m=audio49230 RTP/AVP 96 97 98 中給出了三種媒體格式96 97 98。

3、總結與後繼

SDP最初被用于描述基于多點傳播會話的松耦合會議中,但目前更廣泛地應用于點到點的兩方會話中。

在松耦合會議中,會話參數完全由會議建立者來确定,參與者能做的僅僅是根據這些會話參數來加入會議(當然也可以選擇不加入)。這種情況下,主要要做的就是會話描述,在這裡SDP本身就足夠了。

但是在更為普遍的兩方會話的情況下,由于使用者終端能力的差異,任何一方不能假設對方一定支援某種會話參數,是以必須雙方協商來最終就會話的參數達成一緻。顯然,SDP能做到準确的描述會話的參數,但是它缺少雙方如何根據各自提供的會話描述形成最終一緻的會話描述的語義及操作上的細節。在RFC3264中定義了一個基于SDP的簡單的提議/應答模型來實作這一點。

本部落格将會有後繼的文章介紹基于SDP的提議/應答模型,敬請關注。

繼續閱讀