RTSP协议里,客户端发送DESCRIBE请求时,服务器端需要返回SDP消息,那什么是SDP呢?
SDP是会话描述协议的缩写,是描述流媒体初始化参数的格式,由IETF作为RFC 4566颁布。流媒体是指在传输过程中看到或听到的内容,SDP包通常包括以下信息:
(1)会话信息
· 会话名和目的。
· 会话活动时间。
由于参与会话的资源是受限制的,因此包括以下附加信息是非常有用的。
· 会话使用的带宽信息。
· 会话负责人的联系信息。
(2)媒体信息
· 媒体类型,例如视频和音频。
· 传输协议,例如RTP/UDP/IP和H.320。
· 媒体格式,例如H.261视频和MPEG视频。
· 多播地址和媒体传输端口(IP多播会话)。
· 用于联系地址的媒体和传输端口的远端地址(IP单播会话)。
SDP描述由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构 化的文本串,其格式依<类型>而定。
协议的详细说明如下:
Session description //格式及举例
v= (protocol version) //v=0
o= (owner/creator and session identifier). //o=<用户名><会话id><版本><网络类
//型><地址类型><地址>
//o=sname 1234567890 0987654321 IN
//IP4 126.15.64.3
s= (session name) //会话名
i=* (session information) //会话信息
u=* (URI of description) //u=http://www.zte.com.cn/staff/sdp.ps
e=* (email address) //e=zte@isi.edu(general text如:王生)
//或e=Mr. Wang<wang@zte.com>
p=* (phone number) //p=+86-0755-26773000-7110(wang)
//or p=+1 617 253 6011
c=* (connection information -如已经包含在所有媒体中则该行不需要)
//c=<网络类型><地址信息><连接地址>
//多点会议包括TTL
//连接地址: <base multicast
//address>/<ttl>/<number of addresses>
//c=IN IP4 224.2.13.23/127
//c=IN IP4 224.2.1.1/127/3
b=* (bandwidth information) //b=<修改量(CT Conference Total
//IAS Application-specific Max)>:<带宽
//值(kb/s)>
//b=CT:120
One or more time descriptions (see below)
z=* (time zone adjustments) //时区调整
k=* (encryption key) //k=<方法>:<密钥>或k=<方法>
a=* (zero or more session attribute lines) //a=<属性> 或a=<属性>:<值>
Zero or more media descriptions (see below)
各行严格按顺序,其中:
时间描述:
t= (time the session is active) //<开始时间><结束时间>,单位秒,十
//进制NTP
//t=2873397468 2873404969
r=* (zero or more repeat times) //<重复时间><活动持续时间
//以开始时刻为参考的偏移列表>单位秒
//r=604800 3666 90000 或写成
//r=7d 1h 0 25h
媒体描述:
m= (media name and transport address) //m=<媒体><端口><传送><格式列表>
//m=audio 49170 RTP/AVP 0 3
//协议为RTP,剖面为AVP
//参考rtp-parameters.txt
i=* (media title媒体称呼) //
c=* (connection information – 如已经包含在会话级描述则为可选)
b=* (bandwidth information) //同c
k=* (encryption key) //会话级为摸认值,同c
a=* (zero or more media attribute lines) //两种形式:(也同c)(见后说明)
//a=<attribute>如:
// a=recvonly
//a=<attribute>:<value>
注:v,o,s,t,m为必须的,其他项为可选。
如果SDP语法分析器不能识别某一类型(Type),则整个描述丢失;
如果”a=”的某属性值不理解,则予以丢失
整个协议区分大小写
“=”两侧不允许有空格
会话级的描述就是媒体级描述的缺省值
所有均格式为<type>=<value>
--------------------------------------------------------------------------------------------
这个东西让我挣扎了好久,我只能说,一个个地读出来赋值并不是一个简单的过程,或者是我太弱……