跳到主要内容

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官方文档.