会话描述协议(SDP)为会话通知、会话邀请和其它形式的多媒体会话初始化等目的提供了多媒体会话描述。
会话目录用于协助多媒体会议的通告,并为会话参与者传送相关设置信息。SDP 即用于将这种信息传输到接收端。SDP 完全是一种会话描述格式 ― 它不属于传输协议 ― 它只使用不同的适当的传输协议,包括会话通知协议(SAP)、会话初始协议(SIP)、实时流协议(RTSP)、MIME 扩展协议的电子邮件以及超文本传输协议(HTTP)。
SDP 的设计宗旨是通用性,它可以应用于大范围的网络环境和应用程序,而不仅仅局限于组播会话目录,但 SDP 不支持会话内容或媒体编码的协商。
在因特网组播骨干网(Mbone)中,会话目录工具被用于通告多媒体会议,并为参与者传送会议地址和参与者所需的会议特定工具信息,这由 SDP 完成。SDP 连接好会话后,传送足够的信息给会话参与者。SDP 信息发送利用了会话通知协议(SAP),它周期性地组播通知数据包到已知组播地址和端口处。这些信息是 UDP 数据包,其中包含 SAP 协议头和文本有效载荷(text payload)。这里文本有效载荷指的是 SDP 会话描述。此外信息也可以通过电子邮件或 WWW (World Wide Web) 进行发送。
SDP 文本信息包括:
协议结构
SDP 信息是文本信息,采用 UTF-8 编 码中的 ISO 10646 字符集。SDP 会话描述如下:(标注 * 符号的表示可选字段):
一个或更多时间描述(如下所示):
时间描述
媒体描述
举例说明:
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
[email protected] (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="域或会话描述结束为结束。一个媒体描述域有如下几个子域:
注意:如果是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为媒体格式。