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