會話描述協議(SDP)為會話通知、會話邀請和其它形式的多媒體會話初始化等目的提供了多媒體會話描述。
會話目錄用於協助多媒體會議的通告,並為會話參與者傳送相關設定資訊。 SDP 即用於將這種資訊傳輸到接收端。SDP 完全是一種會話描述格式――它不屬於傳輸協議 ――它只使用不同的適當的傳輸協議,包括會話通知協議(SAP) 、工作階段初始通訊協定(SIP)、即時資料流通訊協定 (RTSP)、 MIME 擴充協議的電子郵件以及超文字傳輸通訊協定 (HTTP)(HTTP)。
SDP 的設計宗旨是通用性,它可以應用於大範圍的網路環境和應用程式,而不僅僅局限於組播會話目錄,但 SDP 不支援會話內容或媒體編碼的協商。
在網際網路組播骨幹網 (Mbone) 中,會話目錄工具被用於通告多媒體會議,並為參與者傳送會議地址和參與者所需的會議特定工具資訊,這由 SDP 完成。 SDP 串連好會話後,傳送足夠的資訊給會話參與者 。 SDP 資訊發送利用了會話通知協議(SAP),它周期性地組播通知數據包到已知組播地址和連接埠處。這些資訊是 UDP 資料包,其中包含 SAP 協議頭和文本有效載荷(text payload)。這裡文本有效載荷指的是 SDP 會話描述。此,外資訊也可以通過電子郵件或 WWW (World Wide Web) 進行發送。
SDP 文本資訊包括:
- 會話名稱和意圖
- 會話期間
- 構成會話的媒體
- 有關接收媒體的資訊 (地址等)
SDP 資訊是文本資訊,採用 UTF-8 編碼中的 ISO 10646 字元集。 SDP 會話描述如下: ( 標註 * 符號的表示可選欄位 ) :
1、會話描述:
v= (協議版本)
o= (所有者/建立者和工作階段識別項)
s= (會話名稱)
i=* (會話資訊)
u=* (URI 描述)
e=* (Email 地址)
p=* (電話號碼)
c=* (串連資訊 ― 如果包含在所有媒體中,則不需要該欄位)
b=* (頻寬資訊)
一個或更多時間描述(如下所示)
z=* (時間地區調整)
k=* (加密金鑰)
a=* (0 個或多個會話屬性行)
0個或多個媒體描述(如下所示)
2、時間描述
t= (會話啟用時間)
r=* (0或多次重複次數)
3、媒體描述
m= (媒體名稱和傳輸地址)
i=* (媒體標題)
c=* (串連資訊 — 如果包含在會話層則該欄位可選)
b=* (頻寬資訊)
k=* (加密金鑰)
a=* (0 個或多個媒體屬性行)
舉例說明:
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
協議版本
v=0
"v="域指示協議版本
起源
o=<username> <session id> <version> <network type> <address type>
<address>
"o="域指示會話起源
<username> 是登入工作階段起源主機的使用者ID,如果會話起源主機沒有使用者ID的概念用"-"表示。使用者ID不能包含空格。
<session id> 是數字串,<username>, <session id>, <network type>,<address type> 和 <address> 在一個會話中是全域唯一的。 <session id> 的分配方法依賴於建立工具,但通常建議用網路時間協議Network Time Protocol (NTP)的時間戳記以保證它的唯一性。
<version>是宣告(announcement)的版本號碼。代理宣告(proxy announcements)需要使用它來探測同一個會話中哪些宣告是最近的,另外,它的使用依賴於建立工具。每一次會話資料的修改,需要增加<version>,建議(並非強制)使用NTP的時間戳記。
<network type> 是描述網路類型的字串。"IN"表示"Internet"。
<address type>是描述地址類型的字串。目前定義了"IP4"、"IP6"。
<address> 是建立會話的機器的唯一全域地址。對於IP4類型,它是機器名或點號分割的IP地址。如果離開區域網路,不要使用本地IP,因為這個IP已經沒有什麼意義。
通常,"o=" 域作為一個版本(version)會話描述的唯一表示,除了version 子域外,其他子域均不會改變。
會話名
s=<session name>
"s=" 域指示會話名,每一個會話有且只有一個"s=" 域. ISO 10646 字元集。
會話和媒體資訊
i=<session description>
"i=" 域指示會話相關資訊。 會話描述層至多可以有一個"i="域,每個媒體也可以至多有一個"i="域。"i="域是非強制的,可以省略。在媒體定義中,"i=" 域主要是標識一個媒體流。對於一種媒體類型有多個媒體流是很有用的,比如:有兩個白板,一個用於放映幻燈,一個用於交流。
URI
u=<URI>
一個URI是一個WWW資源的唯一資源標識符(Universal Resource Identifier);一個URI應該是一個會議的額外資訊指標;這個域是可選的,但是如果指定,它應該在第一個媒體域之前出現;每一個會話描述不能有超過一個的URI域。
Email地址與電話號碼
e=<email address>
p=<phone number>
串連資料
c=<network type> <address type> <connection address>
"c="域包含串連資料。
一個會話宣告的每一個媒體必須有一個"c="域或者是在會話層(session-level)有一個"c="域。媒體層的"c="域優先於會話層。
第一個子域指示網路類型,"IN"標識"Internet"。
第二個子域指示地址類型,比如:IP4。
第三個子域指示串連地址。依據<address type> 域的不同,可能有其他不同的擴充子域。
對於IP4地址類型,串連地址定義如下:
典型的串連地址是一個D類IP多播地址,如果這個會話不是多播的,那麼串連地址是一個機器名或唯一的IP單播地址,相關的資料來源、資料轉寄、資料目標在其他屬性域中定義。雖然在宣告為多播的會話中使用機器名或單播地址沒有被禁止,但是結果卻不可預期。如果一個單播地址通過NAT(network address translator),建議使用完全意義的機器網域名稱,相反一個多重主機主機(multi-homed host)使用某個特殊的網路介面時建議使用IP地址,因此,本規範沒有強制規定如何使用,完全由應用程式決定,但是應用程式必須能處理這些情況。
會議使用多播地址時除了地址外還需要一個存留時間(time to live (TTL))。TTL與地址一到決定哪些多播包應該被發送。TTL值的範圍是0-255。
TTL使用斜線分割符附加到地址後面,例如:
c=IN IP4 224.2.1.1/127
<base multicast address>/<ttl>/<number of addresses>
c=IN IP4 224.2.1.1/127/3
表示:
c=IN IP4 224.2.1.1/127
c=IN IP4 224.2.1.2/127
c=IN IP4 224.2.1.3/127
媒體宣告
m=<media> <port> <transport> <fmt list>
一個會話描述可以包含多個媒體描述。每一個媒體描述以"m="域開始,以下一個"m="域或會話描述結束為結束。一個媒體描述域有如下幾個子域:
- 第一個子域是媒體類型域。雖然這個子域可能被擴充,現在主要有"audio", "video", "application", "data" 和 "control"。
- 第二個子域是媒體流的傳送埠。
注意:如果是UDP,連接埠範圍應該是(1024 - 65535),考慮與RTP的相容性,應該是偶數。
如果是媒體類型是applications,可能它的多層(hierarchically)編碼媒體流被發送到一個單播地址需要多個連接埠,採用如下方式表示:
m=<media> <port>/<number of ports> <transport> <fmt list>
這種情況連接埠的使用依賴與協議,對於RTP只有偶數被使用,比這個連接埠大一的連接埠被RTCP使用。例如:
m=video 49170/2 RTP/AVP 31
連接埠49170 和 49171 為一個RTP/RTCP 對,連接埠49172 和 49173 為另一個RTP/RTCP 對。RTP/AVP 為傳輸協議,31為媒體格式。
- 第三個子域是媒體協議。現在主要有"RTP/AVP", "udp"。
- 第四個子域是媒體格式。對於音頻、視頻,它通常是媒體載荷類型。
SDP更多訊息資訊,參見由 IETF(www.ietf.org)定義在 RFC 2327。