SDP协议简单介绍
时间:2023-09-05 14:07:02
一、协议概述
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=<用户名><会话id><版本><网络类型><地址类型><地址> 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=<网络类型><地址信息><多点会议包括TTL连接地址:的address>// c=INIP4224.2.13.23/127 c=INIP4224.2.1.1/127/3 |
b=*(bandwidthinformation) |
b=<修改量(CTConferenceTotal IASApplication-specificMax)>:<带宽 值(kb/s)> b=CT:120 |
一个或更多时间描述 |
|
z=*(time zoneadjustments) |
时区调整 |
k=*(encryption key) |
k=<方法>:<密钥>或k=<方法> |
a=*(zero or more sessionattributelines) |
a=<属性>或a=<属性>:<值> |
时间描述 |
|
t=(timethesessionisactive) |
<开始时间><结束时间>,单位秒,十进制NTP t=28733974682873404969 |
r=*(zero or more repeattimes) |
<重复时间><活动持续时间以开始时刻为参考的偏移列表>单位秒r=604800366690000或写成r=7d1h025h |
媒体描述 |
|
m=(media name andtransportaddress) |
m=<媒体><端口><传送><格式列表> 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)所有格式均为
一个简单的例子:
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=
例子:v=0
说明:目前协议版本为0,没有子版本。
2、Origin(会话源)
格式:o=
说明:o标示了该会话的全局唯一性
(1)
(2)
(4)
(5)
:地址类型,为文本串“IP4“或”IP6”(6)
:该会话创建者的地址,按照上述的IP4或者IP6格式写出3、Session Name(会话名称)
格式:s=
说明:会话名称,每个会话仅有一个。
4、Session and Media Information格式: i=
例子:i=A Seminar on the session description protocol
说明:会话信息,每个会话至多有一个,每个媒体至多有一个,常用于标识一个会话内多个同类型的媒体流。
5、URI
格式:u=
例子:u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
说明:该会话的URI(Universal Resource Identifier)地址
6、Email Address and Phone Number
格式:e=
p=
例子:EMAIL地址格式:e=mjh@isi.edu (Mark Handley) or e=Mark Handley
电话号码的格式:p=+44-171-380-7777 or p=+1 617 253 6011
说明:添加会话负责人的私人信息,该人不一定是创建会议公告的人。
格式:c=
例子:c=IN IP4 224.2.17.12/127
说明:媒体连接数据,每个会话公告应包含一个连接描述在每个媒体描述中,单播的时候通过该IP地址发送,多播时通过TTL与IP地址共同决定那些包将被发送。会话级为媒体级的默认值。
8、Bandwidth(带宽)
格式:b=
(1)
(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=
例子:t=2873397496 2873404696
说明:描述该会议的开始和结束时间,如果该会议在多个不规则的时间间隔内激活,可以使用多行t:描述,如果时间间隔为规则的,可以使用"r="重复定义。
(1)
(2)
格式:r=
说明:
(1)
(2)
(3):相对开始时间的偏移
格式:z=
例子:z=2882844526 -1h 2898848070 0
说明:(1)
(2)
10、Encryption Keys(加密密钥)
格式:k=
k=
k=clear:
k=uri:
k=prompt //不采用密码,SDP没有提供密钥但该会话或媒体流是要求加密的。
11、Attributes
格式:a=
例子: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=
说明:每个会话可以包含许多的媒体描述,
(1)
例子:m=video 49170/2 RTP/AVP 31
定义了两对的RTP/RTCP端口,49170 19171和49172 49173
(2)
例如: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:
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