5. SDP Specification (SDP规范)
SDP会话描述由媒体类型 "application/sdp" 表示(参见第8节)。
SDP会话描述完全使用UTF-8编码的ISO 10646字符集的文本形式。SDP字段名和属性名仅使用UTF-8的US-ASCII子集,但文本字段和属性值可以 (MAY) 使用完整的ISO 10646字符集。使用完整UTF-8字符集的字段和属性值永远不会被直接比较,因此不需要UTF-8规范化。选择文本形式(而不是二进制编码如ASN.1或XDR)是为了增强可移植性,支持各种传输方式,并允许使用灵活的基于文本的工具包来生成和处理会话描述。
SDP描述格式
SDP会话描述由多行文本组成,格式为:
<type>=<value>
其中 <type> 必须 (MUST) 是恰好一个区分大小写的字符,<value> 是结构化文本,其格式取决于 <type>。
SDP描述结构
SDP会话描述由一个会话级部分和零个或多个媒体级部分组成。描述中的某些行是必需的 (REQUIRED),某些是可选的 (OPTIONAL),但所有行必须 (MUST) 按照这里给出的顺序出现。可选项用"*"标记。
会话描述 (Session description):
v=(协议版本)o=(发起者和会话标识符)s=(会话名称)i=* (会话信息)u=* (描述的URI)e=* (电子邮件地址)p=* (电话号码)c=* (连接信息 - 如果所有媒体中都包含则不需要)b=* (零个或多个带宽信息行)- 一个或多个时间描述 ("t=" 和 "r=" 行)
z=* (时区调整)k=* (加密密钥)a=* (零个或多个会话属性行)- 零个或多个媒体描述
时间描述 (Time description):
t=(会话活跃的时间)r=* (零个或多个重复时间)
媒体描述 (Media description, if present):
m=(媒体名称和传输地址)i=* (媒体标题)c=* (连接信息 - 如果在会话级包含则可选)b=* (零个或多个带宽信息行)k=* (加密密钥)a=* (零个或多个媒体属性行)
SDP示例
v=0
o=jdoe 2890844526 2890842807 IN IP4 10.47.16.5
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.example.com/seminars/sdp.pdf
[email protected] (Jane Doe)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 99
a=rtpmap:99 h263-1998/90000
子章节
5.1 Protocol Version ("v=") (协议版本)
v=0
"v=" 字段给出会话描述协议的版本。本备忘录定义版本0。没有次版本号。
5.2 Origin ("o=") (发起者)
o=<username> `<sess-id>` `<sess-version>` <nettype> <addrtype> `<unicast-address>`
"o=" 字段给出会话的发起者(其用户名和用户主机的地址)以及会话标识符和版本号。
5.3 Session Name ("s=") (会话名称)
s=<session name>
"s=" 字段是文本会话名称。每个会话描述必须 (MUST) 有且只有一个 "s=" 字段。
5.4 Session Information ("i=") (会话信息)
i=<session description>
"i=" 字段提供关于会话的文本信息。每个会话描述最多可以有一个会话级 "i=" 字段,每个媒体最多可以有一个 "i=" 字段。
5.5 URI ("u=")
u=<uri>
"u=" 字段包含指向会话更多信息的URI。
5.6 Email Address and Phone Number ("e=" and "p=") (电子邮件地址和电话号码)
e=`<email-address>`
p=`<phone-number>`
"e=" 字段包含负责会议的人员的电子邮件地址。"p=" 字段包含负责会议的人员的电话号码。
5.7 Connection Data ("c=") (连接数据)
c=<nettype> <addrtype> `<connection-address>`
"c=" 字段包含连接数据所需的信息。
5.8 Bandwidth ("b=") (带宽)
b=<bwtype>:<bandwidth>
"b=" 字段表示建议的会话带宽。
5.9 Timing ("t=") (时间)
t=`<start-time>` `<stop-time>`
"t=" 行指定会话的开始和停止时间。
5.10 Repeat Times ("r=") (重复时间)
r=<repeat interval> <active duration> `<offsets from start-time>`
"r=" 行指定重复会话的时间。
5.11 Time Zones ("z=") (时区)
z=<adjustment time> <offset> <adjustment time> <offset> ...
"z=" 行指定用于补偿夏令时或其他时区偏移变化的时区调整。
5.12 Encryption Keys ("k=") (加密密钥)
k=<method>
k=<method>:<encryption key>
"k=" 字段用于传达加密密钥。
5.13 Attributes ("a=") (属性)
a=<attribute>
a=<attribute>:<value>
属性是扩展SDP的主要手段。属性可以定义在会话级或媒体级。
5.14 Media Descriptions ("m=") (媒体描述)
m=<media> <port> <proto> <fmt> ...
媒体描述开始于 "m=" 行,包含足够的信息来描述媒体流。
注意: 第5章包含大量技术细节和ABNF语法定义。完整规范请参考 RFC 4566官方文档。