一、协议概述
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等)(6)可信赖的接洽信息(Contact information)
二、协议格式SDP描述由许多文本行组成,即一个一个的字符串,因此,只需要按照格式写好字符串直接放入SDP里即可。文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串,其格式依<类型>而定。
会话描述 |
格式及举例 |
v=(protocolversion) |
v=0 |
o=(owner/creator and sessionidentifier) |
o=<</FONT>用户名><</FONT>会话id><</FONT>版本><</FONT>网络类型><</FONT>地址类型><</FONT>地址> o=sname12345678900987654321INIP4126.15.64.3 |
s=(sessionname) |
会话名 |
i=*(sessioninformation) |
会话信息 |
e=*(emailaddress) |
[email protected](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=*(zeroormoremediaattributelines) |
两种形式:(也同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 [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
三、各type的详细解释
1、Protocol Version(协议版本)
格式:v=<version>
例子:v=0
说明:目前协议版本为0,没有子版本。
2、Origin(会话源)
格式:o=<username> <session id> <version> <network type> <address type><address>
(1)<username>:用于登陆创建主机的ID,若该主机不支持则应为"-",该字段内不能包含空格
(2)<session id>:用于唯一的标示该会话描述,一般为数字串,其分配由创建工具决定,建议采用Network Time Protocol (NTP)的时间戳来保证唯一性
(3)<version>:该公告的版本号,用于区别同个会话内的多个公告,供公告代理服务器检测同一会话的若干个公告哪个是最新公告。基本要求是会话数据修改后该版本值递增,建议用NTP时戳(5)<address type>:地址类型,为文本串“IP4“或”IP6”
(6)<address>:该会话创建者的地址,按照上述的IP4或者IP6格式写出
3、Session Name(会话名称)
格式:s=<session name>
说明:会话名称,每个会话仅有一个。
4、Session and Media Information例子: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地址格式:[email protected] (Mark Handley) or e=Mark Handley <[email protected]>
电话号码的格式: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。(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>说明:媒体描述具备任意个“媒体级”的属性,用于附加表示媒体流的信息属性也可以被加在第一个媒体域,这些“会话级”属性用于附带表示会议的信息属性域。该描述常被用于扩展SDP协议,分成“会话级”和“媒体级”两种属性
(1)会话级:
a=cat:<类别>//给出点分层次式会话分类号,供接收方筛选会话
a=keywds:<关键词>//供接收方筛选会话
a=tool:<工具名和版本号>//创建会话描述的工具名和版本号
a=recvonly/sendrecv/sendonly//收发模式
a=type:<会议类型>//有:广播,聚会,主席主持,测试,H.323
a=charset:<字符集>//显示会话名和信息数据的字符集
a=sdplang:<语言标记>//描述所有语言
a=lang:<语言标记>//会话描述的缺省语言或媒体描述的语言
a=framerate:<帧速率>//单位:帧/秒
a=quality:<质量>//视频的建议质量(10/5/0)
a=fmtp:<格式><格式特定参数>//定义指定格式的附加参数
(2)媒体级:
a=ptime:<分组时间>//媒体分组的时长(单位:秒)
a=recvonly/sendrecv/sendonly//收发模式
a=orient:<白板方向>//指明白板在屏莫上的方向
a=sdplang:<语言标记>//描述所有语言
a=lang:<语言标记>//会话描述的缺省语言或媒体描述的语言
12、Media Announcements例子:m=video 49170/2 RTP/AVP 31
定义了两对的RTP/RTCP端口,49170 19171和49172 49173
(2)<transport>:传输协议类型,该项的值依赖于"c="域中的网络类型IP4,如果某个应用采用在UDP上使用单一组合了所有媒体格式和传输协议的模式传输,简单的方法是将传输协议指定为UDP,采用格式列表区别组合的协议,区别传输类型和媒体格式是必要的。
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