SDP協議

1、SDP介紹
SDP是會話描述協議的縮寫,是描述流媒體初始化參數的格式,由IETF作爲RFC 4566頒佈。流媒體是指在傳輸過程中看到或聽到的內容。一個SDP包含一個會話層部分,後續跟着0個或者多個媒體層部分。會話層起始於“v=”行,直到第一個媒體層部分。每個媒體層都起始於“m=”行,直到下一個媒體層的開始或者直到SDP結束。通常,會話層的屬性是全局的,除非被媒體層重寫。
(1)會話信息
· 會話名和目的。
· 會話活動時間。

由於參與會話的資源是受限制的,因此包括以下附加信息是非常有用的。
· 會話使用的帶寬信息。
· 會話負責人的聯繫信息。
(2)媒體信息
· 媒體類型,例如視頻和音頻。
· 傳輸協議,例如RTP/UDP/IP和H.320。
· 媒體格式,例如H.261視頻和MPEG視頻。
· 多播地址和媒體傳輸端口(IP多播會話)。
· 用於聯繫地址的媒體和傳輸端口的遠端地址(IP單播會話)。
2、SDP格式
SDP描述由許多文本行組成,文本行的格式爲<類型>=<值>,<類型>是一個字母,<值>是結構化的文本串,其格式依<類型>而定。
以下帶”*”號的是可選的,其餘的是必須的。一般順序也按照下面的順序來排列。
(1)會話信息(Session description)
v=(protocol version)//協議版本
o=(owner/creator and session identifier)//發起者和會話標識符
s=(session name)//會話名字
i=*(session information)//會話信息
u=*(URI of description)//URI標識符
e=*(email address)//郵件地址
p=*(phone number)//電話號碼
c=*(connection information - not required if included in all media)
//連接信息,只有在所有的媒體層都有這個字段的時候,會話層屬性纔可以沒有
b=*(zero or more bandwidth information lines)//0個或者多個寬帶信息
z=*(time zone adjustments)//時域調整
k=*(encryption key)//加密祕鑰
a=*(zero or more session attribute lines)//0個或者多個會話屬性
t=(time the session is active) //會話有效的時間
r=*(zero or more repeat times)//0個或者多個重複的時間

a=*是sdp協議擴展屬性定義,除上面以外的,分解時其它的都可以扔掉。
a=charset屬性指定協議使用的字符集。一般的是ISO-10646。

舉例:
v=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
其中:nettype是IN,代表internet,addrtype是IP4或IP6。unicast-address任務創建計算機的地址。整個這個屬性,是唯一表示一個任務。

[email protected] 或 p=+1 616 555-6011
對於一個任務只能兩者之中的一個,表示會議控制者的聯繫方式。

c=<nettype> <addrtype> <connection-address>
這個連接數據,可以是傳話級別的連接數據,或者是單獨一個媒體數據的連接數據。在是多播時,connection-address就該是一個多播組地址, 當是單播時,connection-address就該是一個單播地址。對於addrtype是IP4的情況下,connection-address不 僅包含IP地址,並且還要包含a time to live value(TTL 0-255),如:c=IN IP4 224.2.36.42/128,IP6沒有這個TTL值。還允許象這樣的<base multicast address>[/<ttl>]/<number of addresses>格式的connection-address。如: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三行內容。

b=<bwtype>:<bandwidth> bwtype可以是CT或AS,CT方式是設置整個會議的帶寬,AS是設置單個會話的帶寬。缺省帶寬是千比特每秒。

t=<start-time> <stop-time>,這個可以有行,指定多個不規則時間段,如果是規則的時間段,則r=屬性可以使用。start-time和stop- time都遵從NTP(Network Time Protocol),是以秒爲單位,自從1900以來的時間。要轉換爲UNIX時間,減去2208988800。如果stop-time設置爲0,則會話 沒有時間限制。如果start-time也設置爲0,則會話被認爲是永久的。

r=<repeat-interval> <active duration> <offsets from start-time>重複次數在時間表示裏面可以如下表示:
d - days (86400 seconds)
h - hours (3600 seconds)
m - minutes (60 seconds)
s - seconds (allowed for completeness)

z=<adjustment time> <offset> <adjustment time> <offset> ….

k=<method>
k=<method>:<encryption key>

a=<attribute>
a=<attribute>:<value>

s=<會話名字>
每個會話描述有且僅有一個”s=”字段。字段不能爲空,並且應該爲ISO 10646字體。如果一個會話沒有有意義的名字,則此字段的值應爲一個空格。

i=<會話描述>
“i=”字段提供會話的文本信息。在會話層和媒體層最多隻能出現一次。如果有”a=charset”字段,它標識了”i=”字段使用的字體集合。如果沒有”a=charset”字段,則必須使用UTF-8編碼的ISO 10646字體集合。
“i=”字段也可以用於每個媒體層,這是用來標識每個媒體軌的。特別在兩個媒體軌的媒體類型都是相同的情況下,這個字段就顯得特別有意義了。這個字段主要是用來方便人來閱讀的,並不適合自動解析。

u=<URI of description>
URI是統一資源描述符,用於WWW的客戶端。URI標識的是有關會話信息的外部的一個指針。這個字段是可選的。但是如果一旦出現,就必須先於第一個媒體軌出現,並且不能有多於一個。

e=<電子郵件地址>和p=<電話號碼>
這兩個字段描述了會議擁有者的聯繫信息。這個並不一定表示的是發起會話的那個人。這兩個字段都是可選的。如果出現這兩個字段,則必須先於第一個媒體軌出現。這兩個字段都可以出現多次。
電話號碼的格式應該以國際化的格式出現。如:
p=+1 617 555-6011
這兩個字段都可以包含一個文本信息,通常表示人的名字。例如:
[email protected](Jane Doe)
也可以以以下形式出現:
e=Jane Doe[email protected]
這兩個字段的字體必須是ISO 10646或者是ISO-8859-1或者是字段”a=charset”表示的。

c=<網絡類型> <地址類型> <鏈接地址 >
這個字段包含連接數據。一個會話描述必須在每個媒體層都包含”c=”字段或者在會話層包含一個”c=”字段的值。如果這兩個層都出現的話,則媒體層出現的”c=”會覆蓋會話層出現的”c=”字段的值。
<網絡類型>是一個文本字符串,最初只定義了”IN”,表示”Internet”,未來會定義其他值。
<地址類型>最初只定義了IP4和IP6。
<鏈接地址>標識連接的地址。後續可能會包含額外的字段,取決於<地址類型>字段。
當<地址類型>爲IP4和IP6時,連接地址定義如下:
a、當會話是多播時,地址爲多播組地址;當會話是單播地址,並且爲媒體數據的源地址。
b、如果地址類型是IPv4的,則還需要給出TTL的值,TTL表示包的生存時間,範圍是0~255。IPv6沒有TTL。
(2)媒體信息(Media description)
m=(media name and transport address)//媒體名字和傳輸地址
i=*(media title)//媒體標題
c=*(connection information - optional if included at session-level)
//連接信息,如果在會話層中出現,則這裏可以不出現
b=*(zero or more bandwidth information lines)//0個或者多個寬帶信息
k=*(encryption key)//加密祕鑰
a=*(zero or more media attribute lines)//0個或者多個媒體屬性

舉例:
m=<media> <port> <proto> <fmt> ...
m=<media> <port>/<number of ports> <proto> <fmt> ...

其中:<media>可以是,”audio”,”video”, “text”, “application” and “message”。<port>是媒體傳送的端口號,它依賴於c=和<proto><proto> 可以是,udp,RTP/AVP和RTP/SAVP。

a=cat:<category>分類,根據分類接收者隔離相應的會話
a=keywds:<keywords>關鍵字,根據關鍵字隔離相應的會話
a=tool:<name and version of tool>創建任務描述的工具的名稱及版本號
a=ptime:<packet time>在一個包裏面的以毫秒爲單位的媒體長度
a=maxptime:<maximum packet time>以毫秒爲單位,能夠壓縮進一個包的媒體量。
a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding parameters>]
a=recvonly
a=sendrecv
a=sendonly
a=inactive,
a=orient:<orientation>其可能的值,”portrait”, “landscape” and “seascape” 。
a=type:<conference type>,建議值是,”broadcast”, “meeting”, “moderated”, “test” and “H332”。
a=charset:<character set>
a=sdplang:<language tag>指定會話或者是媒體級別使用的語言
a=framerate:<frame rate>設置最大視頻幀速率
a=quality:<quality>值是0-10
a=fmtp:<format> <format specific parameters>   
m=<媒體類型> <端口> <協議> <格式類型>

發佈了50 篇原創文章 · 獲贊 58 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章