会话描述协议(SDP)为会话通知、会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述。它只是用来描述,而不是一种传输协议。举例,在SIP协议的Message Header的Content-type字段为application/sdp,表明使用的是SDP协议。
SDP 会话描述如下:(标注 * 符号的表示可选字段):
协议结构
v = (协议版本) (v=0表明使用RFC4566)
o = (所有者/创建者和会话标识符) o=<username> <session id> <version> <network type> <address type><address>
<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已经没有什么意义。
i = * (会话信息) i=<session description>
"i=" 域指示会话相关信息。 会话描述层至多可以有一个"i="域,每个媒体也可以至多有一个"i="域。"i="域是非强制的,可以省略。在媒体定义中,"i=" 域主要是标识一个媒体流。对于一种媒体类型有多个媒体流是很有用的,比如:有两个白板,一个用于放映幻灯,一个用于交流。
u = * (URI 描述) u=<URI>
p = * (电话号码) p=<phone number>c = * (连接信息 ― 如果包含在所有媒体中,则不需要该字段)
b = * (带宽信息)
z = * (时间区域调整)
k = * (加密密钥)
a = * (0 个或多个会话属性行)
时间描述
t = (会话活动时间)
r = * (0或多次重复次数)
媒体描述
m = (媒体名称和传输地址) (常见的有‘audio’语音。‘video’视频)
i = * (媒体标题)
c = * (连接信息 — 如果包含在会话层则该字段可选)
b = * (带宽信息)
k = * (加密密钥)
a = * (0 个或多个会话属性行)