一、协议概述
SDP也是MMUSIC工作组的一个产品,在MBONE内容中用得很多。其目的就是在媒体会话中,传递媒体流信息,允许会话描述的接收者去参与会话。SDP基本上在internet上工作。它定义了会话描述的统一格式,但并不定义多播地址的分配和SDP消息的传输,也不支持媒体编码方案的协商,这些功能均由下层传送协议完成。典型的会话传送协议包括:SAP(Session Announcement Protocol 会话公告协议)、SIP、RTSP、HTTP和使用MIME的E-Mail。(注意:对SAP只能包含一个会话描述,其它会话传输协议的SDP可包含多个会话描述)
SDP包括以下一些方面:(1)会话的名称和目的
(2)会话存活时间(3)包含在会话中的媒体信息,包括:
媒体类型(video, audio, etc)传输协议(RTP/UDP/IP, H.320, etc)
媒体格式(H.261 video, MPEG video, etc)多播或远端(单播)地址和端口
(4)为接收媒体而需的信息(addresses, ports, formats等)(5)使用的带宽信息
(6)可信赖的接洽信息(Contact information)
二、协议格式SDP描述由许多文本行组成,即一个一个的字符串,因此,只需要按照格式写好字符串直接放入SDP里即可。文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串,其格式依<类型>而定。
会话描述 | 格式及举例 |
v=(protocolversion) | v=0 |
o=(owner/creator and sessionidentifier) | o=<</FONT>用户名><</FONT>会话id><</FONT>版本><</FONT>网络类型><</FONT>地址类型><</FONT>地址> o=sname1234567890098765432 |
s=(sessionname) | 会话名 |
i=*(sessioninformation) | 会话信息 |
e=*(emailaddress) | e=zte@isi.edu(generaltext 或e=Mr.Wang |
p=*(phonenumber) | p=+86-0755-26773000-7110(wang) orp=+16172536011 |
c=*(connectioninformation-如已经包含在所有媒体中则该行不需要) | c=<</FONT>网络类型><</FONT>地址信息><</FONT>多点会议包括TTL连接地址:的address>// c=INIP4224.2.13.23/127 c=INIP4224.2.1.1/127/3 |
b=*(bandwidthinformation) | b=<</FONT>修改量(CTConferenceTotal IASApplication-specificMax)>:<</FONT>带宽 值(kb/s)> b=CT:120 |
一个或更多时间描述 | |
z=*(time zoneadjustments) | 时区调整 |
k=*(encryption key) | k=<</FONT>方法>:<</FONT>密钥>或k=<</FONT>方法> |
a=*(zero or more sessionattributelines) | a=<</FONT>属性>或a=<</FONT>属性>:<</FONT>值> |
时间描述 | |
t=(timethesessionisactive) | <</FONT>开始时间><</FONT>结束时间>,单位秒,十进制NTP t=28733974682873404969 |
r=*(zero or more repeattimes) | <</FONT>重复时间><</FONT>活动持续时间以开始时刻为参考的偏移列表>单位秒r=604800366690000或写成r=7d1h025h |
媒体描述 | |
m=(media name andtransportaddress) | m=<</FONT>媒体><</FONT>端口><</FONT>传送><</FONT>格式列表> m=audio49170RTP/AVP03 协议为RTP,剖面为AVP,参考rtp-parameters.txt |
i=*(mediatitle) | 媒体称呼 |
c=*(connectioninformation) | 如已经包含在会话级描述则为可选 |
b=*(bandwidthinformation | 同c |
k=*(encryptionkey) | 会话级为摸认值,同c |
a=*(zeroormoremediaattribute | 两种形式:(也同c)(见后说明)a=如: a=recvonly a=: |
说明:
(1)v、o、s、t、m为必须的,其他项为可选。
(2)如果SDP语法分析器不能识别某一类型(Type),则整个描述丢失。
(3)如果”a=”的某属性值不理解,则予以丢失。
(4)整个协议区分大小写。
(5)“=”两侧不允许有空格。
(6)会话级的描述就是媒体级描述的缺省值。(7)所有格式均为<type>=<value>。
一个简单的例子:
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
e=j.doe@example.com (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
三、各type的详细解释
1、Protocol Version(协议版本)
格式:v=<version>
例子:v=0
说明:目前协议版本为0,没有子版本。
2、Origin(会话源)
格式:o=<username> <session id> <version> <network type> <address type><address>
说明:o标示了该会话的全局唯一性
(1)<username>:用于登陆创建主机的ID,若该主机不支持则应为"-",该字段内不能包含空格
(2)<session id>:用于唯一的标示该会话描述,一般为数字串,其分配由创建工具决定,建议采用Network Time Protocol (NTP)的时间戳来保证唯一性
(3)<version>:该公告的版本号,用于区别同个会话内的多个公告,供公告代理服务器检测同一会话的若干个公告哪个是最新公告。基本要求是会话数据修改后该版本值递增,建议用NTP时戳(4)<network type>:网络类型,为文本串“IN”(Internet)
(5)<address type>:地址类型,为文本串“IP4“或”IP6”
(6)<address>:该会话创建者的地址,按照上述的IP4或者IP6格式写出
3、Session Name(会话名称)
格式:s=<session name>
说明:会话名称,每个会话仅有一个。
4、Session and Media Information格式: i=<session description>
例子:i=A Seminar on the session description protocol
说明:会话信息,每个会话至多有一个,每个媒体至多有一个,常用于标识一个会话内多个同类型的媒体流。
5、URI
格式:u=<URI>
例子:u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
说明:该会话的URI(Universal Resource Identifier)地址
6、Email Address and Phone Number
格式:e=<email address>
p=<phone number>
例子:EMAIL地址格式:e=mjh@isi.edu (Mark Handley) or e=Mark Handley <mjh@isi.edu>
电话号码的格式:p=+44-171-380-7777 or p=+1 617 253 6011
说明:添加会话负责人的私人信息,该人不一定是创建会议公告的人。
格式:c=<network type> <address type> <connection address>
例子:c=IN IP4 224.2.17.12/127
说明:媒体连接数据,每个会话公告应包含一个连接描述在每个媒体描述中,单播的时候通过该IP地址发送,多播时通过TTL与IP地址共同决定那些包将被发送。会话级为媒体级的默认值。
8、Bandwidth(带宽)
格式:b=<modifier>:<bandwidth-value>
说明:提供此次会话的带宽,单位为kbit/s。(1)<modifier>:修改量
(2)b=CT(Conference Total):固有的最大带宽值与多播骨干网的TTL值或一个特指的多播范围区相关连如果某一会话或媒体的带宽与最大带宽值不同,则通过该参数提供一个最大的限定值。该参数指定多个媒体总和的值。
(3)b=AS(Application-Specific Maximum):该参数指定一个特殊应用的带宽,指定单一媒体的值。
(4)b=X-:Extension Mechanism,扩展的带宽定义
9、Times, Repeat Times and Time Zones
格式:t=<start time> <stop time>
例子:t=2873397496 2873404696
说明:描述该会议的开始和结束时间,如果该会议在多个不规则的时间间隔内激活,可以使用多行t:描述,如果时间间隔为规则的,可以使用"r="重复定义。
(1)<start time>:开始时间,以秒表示的NTP时间,开始结束时间都为0时被认为时永久的会议
(2)<stop time>:结束时间,以秒表示的NTP时间,结束时间为0时,该会议直到过了开始时间才开始
格式:r=<repeat interval> <active duration> <list of offsets from start-time>
说明:
(1)<repeat interval>:重复间隔
(2)<active duration>:持续时间
(3)<list of offsets from start-time>:相对开始时间的偏移
格式:z=<adjustment time> <offset> <adjustment time> <offset> ....
例子:z=2882844526 -1h 2898848070 0
说明:(1)<adjustment time>:调整时间
(2)<offset>:偏移
10、Encryption Keys(加密密钥)
格式:k=<method>
k=<method>:<encryption key>
k=clear:<encryption key> //<加密密钥>密钥没有变换
k=uri:<URI to obtain key> //URI携带密钥
k=prompt //不采用密码,SDP没有提供密钥但该会话或媒体流是要求加密的。
11、Attributes
格式:a=<attribute>
a=<attribute>:<value>例子:a=recvonly
a=orient:portrait
说明:媒体描述具备任意个“媒体级”的属性,用于附加表示媒体流的信息属性也可以被加在第一个媒体域,这些“会话级”属性用于附带表示会议的信息属性域。该描述常被用于扩展SDP协议,分成“会话级”和“媒体级”两种属性
(1)会话级:
a=cat:<类别>//给出点分层次式会话分类号,供接收方筛选会话
a=tool:<工具名和版本号>//创建会话描述的工具名和版本号
a=recvonly/sendrecv/sendonly//收发模式
a=type:<会议类型>//有:广播,聚会,主席主持,测试,H.323
a=sdplang:<语言标记>//描述所有语言
a=lang:<语言标记>//会话描述的缺省语言或媒体描述的语言
a=framerate:<帧速率>//单位:帧/秒
a=quality:<质量>//视频的建议质量(10/5/0)
a=fmtp:<格式><格式特定参数>//定义指定格式的附加参数
(2)媒体级:
a=ptime:<分组时间>//媒体分组的时长(单位:秒)
a=recvonly/sendrecv/sendonly//收发模式
格式:m=<media> <port> <transport> <fmt list>
说明:每个会话可以包含许多的媒体描述,<media>:媒体类型,包括audio/video/application/data/control (音频/视频/应用(如:白板信息)/数据(不要向用户显示)/控制)。当有新的媒体类型出项时,这些值将被扩展。
(1)<port>:端口类型,该值的确定取决于对应的"c="域中指定的网络和在第三个子项中定义的传输协议,UDP端口只能在1024-65535之间RTP端口可以是任意有效的范围,RTCP端口定义为大于对应RTP端口的奇数,当分级的多个媒体流编码通过单一的地址发送时,我们必须指定多个端口用于传输。 采用跟"c="域中定义多个IP地址的格式一样,m=<media> <port>/<number of ports> <transport> <fmt list>
例子:m=video 49170/2 RTP/AVP 31
定义了两对的RTP/RTCP端口,49170 19171和49172 49173
(2)<transport>:传输协议类型,该项的值依赖于"c="域中的网络类型IP4,如果某个应用采用在UDP上使用单一组合了所有媒体格式和传输协议的模式传输,简单的方法是将传输协议指定为UDP,采用格式列表区别组合的协议,区别传输类型和媒体格式是必要的。
例如:m=video 49232 RTP/AVP 0 //定义负荷类型为0的媒体流从49232端口发送
m=video 49232 RTP/AVP 98
a=rtpmap:98 L16/16000/2 //采用采样频率为16KHZ 16bit的立体声线性编码
rtpmap属性对"m="描述的格式列表的负荷类型进行详细说明,
通用的rtpmap属性的格式为:a=rtpmap:<payload type> <encoding name>/<clock rate>[/<encoding parameters>]
a=rtpmap:<净荷类型号><编码名>/<时钟速率>[/<编码参数>]对音频,编码参数为音频信道数;对视频没有定义。
参考:
http://blog.sina.com.cn/s/blog_737adf5301013geh.html
http://www.cnblogs.com/moonvan/archive/2011/10/22/2221261.html
http://tools.ietf.org/html/rfc4566