在当时基于网络实现的多媒体技术越来越普遍的时候, 急切需要一个标准来描述多媒体的流信息,sdp便是这些标准的一份子。
sdp 只是一种基准格式协议,不涉及传输协议, 但是很多传输协议都采用了 sdp 格式来做信息的传输格式,下面就是这些协议的说明。
- sip 会话交互协议使用 sdp 格式 来完成 创建 修改和结束会话的通信
- rtsp 使用 sdp 格式来完成多媒体流的描述
- 电子邮箱和万维网也使用了 application/sdp 来做数据说明传输说明
- 组播会议通信的会话描述
一个sdp中有以下部分
- 会话名称和目的
- 会话使能时间点
- 该会话包含的媒体信息
- 处理媒体需要的参数(地址,端口,格式等)
一些资源可能有些特定的描述,也可以可能需要扩展描写信息,如:
- 会话需要使用的宽带信息
- 会话负责人的联系信息
通常,可能对加入会话的成员还需要一些认证信息。
多媒体相关参数
- 多媒体的类型(视频, 音频等)
- 传输协议(RTP/UDP/IP, H.320等)
- 多媒体的数据格式(H.261 , mpeg 等)
如果多媒体是组播,还需要 - 组播地址
- 组播端口
如果是单播,需要 - 媒体的地址
- 媒体的端口
会话可能有时间上的限制,比如数据包的有效时间,sdp 可以传输:
- 限制会话的开始和结束时间的任意列表
- 对于每个范围,请重复以下时间,例如“每个星期三上午10点 一小时”
sdp 特性
- sdp包是指Content-Type为application/sdp的包
Content-Type: application/sdp
sdp数据的基本格式为:
<type>=<value>
参数 | 描述 | 是否必选 | 备注 |
---|---|---|---|
v= | (protocol version) | 是 | |
o= | (originator and session identifier) | 是 | |
s= | (session name) | 是 | |
i=* | (session information) | 否 | |
u=* | (URI of description) | 否 | |
e=* | (email address) | 否 | |
p=* | (phone number) | 否 | |
c=* | (connection information – not required if included in all media) | 否 | |
b=* | (zero or more bandwidth information lines) | 否 | |
z=* | (time zone adjustments) | 否 | |
k=* | (encryption key) | 否 | |
a=* | (zero or more session attribute lines) | 否 |
时间描述:
参数 | 描述 | 是否必选 | 备注 |
---|---|---|---|
t= | (time the session is active) | 是 | |
r=* | (zero or more repeat times) | 否 |
数据流描述,数据流的描述可以多组,可以没有:
参数 | 描述 | 是否必选 | 备注 |
---|---|---|---|
m= | (media name and transport address) | 是 | |
i=* | (media title) | 否 | |
c=* | (connection information – optional if included at session level) | 否 | |
b=* | (zero or more bandwidth information lines) | 否 | |
k=* | (encryption key) | 否 | |
a=* | (zero or more media attribute lines) | 否 |
注意: 上面的描述虽然很多是可选的,但是顺序不能换,官方文档说,这样既可以简化解析器又可以让错误检测规则加强。
这里的类型字母必须是小写,并且不会做大写的扩展,如果遇到不是小写的类型的字母或者其他不能识别的类型字母,sdp的解析器就会忽略掉。
sdp 还可以使用 a= 来完成扩展,如果sdp解析器不知道这些扩展属性,sdp解析器就会放弃扩展属性。
c= 和 a= 参数的会在所有的流起作用,除非被后面相同的参数覆盖。
像会话名和会话信息都是文本字段,使用八进制的字符串记录的,除了 0x00,0x0a换行,0x0d回车字符都可以包括。
会话 CRLF(0x0d0a) 来结束一个记录。当然,如果存在 a=charset 描述,那编码可能就不同了。
参考