SDP:Session Description Protocol——会话描述协议
会话描述协议 SDP 为会话通知、会话初始和其它形式的多媒体会话初始等操作提供了多媒体会话服务。
会话目录主要提供协助组播多媒体会议广告以及其它组播会话过程,并为未来参与者传送相关会话设置信息。SDP 的提出解决这些信息到接收端的传送问题。SDP 完全是一种会话描述格式,它不属于传输协议,其目标是适当地使用不同传输协议,包括会话通知协议 SAP、会话初始协议 SIP、实时流协议 RTSP、MIME 扩展协议以及超文本传输协议 HTTP。
SDP 的设计宗旨是通用性协议,所有它可以应用于大范围的网络环境和应用程序,而不仅仅局限于组播会话目录,但 SDP 不支持会话内容或媒体编码的协商操作。
英特网组播骨干网 Mbone 中,通过会话目录工具、广告多媒体会议传送会议地址和参与者必要的会议特定工具信息该过程由 SDP 完成。SDP 连接好会话后,传送足够的信息给会话参与者。利用会话通知协议 SAP,周期性地多路传送通知数据包,实现将 SDP 信息发送到已知组播地址和端口处。这些信息即 UDP 数据包,其中包含 SAP 协议头和文本有效载荷(text payload)。这里文本有效载荷指的是 SDP 会话描述。此外信息也可以通过电子邮件或 WWW(World Wide Web)进行发送。
SDP 文本信息包括:
会话名称和目标;
会话活动时间;
构成会话的媒体;
有关接收媒体的信息、地址等。
RTSP需要一个表示描述,以便说明一个流媒体会话的基本属性,包括媒体类型和格式、所需要的传输带宽、播放的时间范围、所需Buffer信息等。作为在移动网络中应用的一种对带宽和时延敏感的业务,这些信息对于保证移动终端用户的业务感受是非常重要的。
SDP协议最初用于描述SIP会话中支持的媒体类型,只是一种用于会话描述的格式(协议),它并不是一个传输协议,也不包含在媒体的编解码之中,而是用于在不同传输协议间的传递消息的通知协议,其主要目的是开展多媒体会话通知、邀请和会话的初始化工作。
3GPP的PSS规范中使用SDP协议来实现RTSP的表示描述,并对SDP进行了必要的扩展,以便满足流媒体业务在移动网络中对QoS的需求。
对于移动流媒体应用,3GPP在PSS规范中定义了一些扩展。SDP对移动流媒体的扩展要求包括带宽参数扩展、用于Buffer管理的扩展、完整性保护扩展等。
SDP格式:
Session description
v= (protocol version)
o= (owner/creator 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)
One or more time descriptions ("t=" and "r=" lines, see below)
z=* (time zone adjustments)
k=* (encryption key)
a=* (zero or more session attribute lines)
Zero or more media descriptions
Time description
t= (time the session is active)
r=* (zero or more repeat times)
Media description, if present
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)
以上带"*"号的是可选的,其余的是必须的。一般顺序也按照上面的顺序来排列。
a=*是sdp协议扩展属性定义,除上面以外的,分解时其它的都可以扔掉。
a=charset属性指定协议使用的字符集。一般的是ISO-10646。
示例:
v=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
其中:nettype是IN,代表internet,addrtype是IP4或IP6。unicast-address任务创建计算机的地址。
整个这个属性,是唯一表示一个任务。
e=123@126.com 或 p=+1 616 555-6011
对于一个任务只能两者之中的一个,表示会议控制者的联系方式。邮件地址可以是[email]j.doe@example.com[/email] (Jane Doe)形式,括号里面的是描述联系人的名称,或者Jane Doe <[email]j.doe@example.com[/email]>,前面的是联系人的名称。
c=<nettype> <addrtype> <connection-address>
这个连接数据,可以是传话级别的连接数据,或者是单独一个媒体数据的连接数据。在是多播时,connection-address就该是一个多播组地址,当是单播时,connection-address就该是一个单播地址。对于addrtype是IP4的情况下,connection-address不仅包含IP地址,并且还要包含a time to live value(TTL 0-255),如:c=IN IP4 224.2.36.42/128,IP6没有这个TTL值。还允许象这样的<base multicast address>[/<ttl>]/<number of addresses>格式的connection-address。如:c=IN IP4 224.2.1.1/127/3等同于包含c=IN IP4 224.2.1.1/127, c=IN IP4 224.2.1.2/127, c=IN IP4 224.2.1.3/127三行内容。
b=<bwtype>:<bandwidth> bwtype可以是CT或AS,CT方式是设置整个会议的带宽,AS是设置单个会话的带宽。缺省带宽是千比特每秒。
t=<start-time> <stop-time>,这个可以有行,指定多个不规则时间段,如果是规则的时间段,则r=属性可以使用。start-time和stop-time都遵从NTP(Network Time Protocol),是以秒为单位,自从1900以来的时间。要转换为UNIX时间,减去2208988800。如果stop-time设置为0,则会话没有时间限制。如果start-time也设置为0,则会话被认为是永久的。
r=<repeat-interval> <active duration> <offsets from start-time>重复次数在时间表示里面可以如下表示:
d - days (86400 seconds)
h - hours (3600 seconds)
m - minutes (60 seconds)
s - seconds (allowed for completeness)
z=<adjustment time> <offset> <adjustment time> <offset> ....
k=<method>
k=<method>:<encryption key>
a=<attribute>
a=<attribute>:<value>
m=<media> <port> <proto> <fmt> ...
m=<media> <port>/<number of ports> <proto> <fmt> ...
其中:<media>可以是,"audio","video", "text", "application" and "message"。<port>是媒体传送的端口号,它依赖于c=和<proto>。<proto> 可以是,udp,RTP/AVP和RTP/SAVP。
a=cat:<category>分类,根据分类接收者隔离相应的会话
a=keywds:<keywords>关键字,根据关键字隔离相应的会话
a=tool:<name and version of tool>创建任务描述的工具的名称及版本号
a=ptime:<packet time>在一个包里面的以毫秒为单位的媒体长度
a=maxptime:<maximum packet time>以毫秒为单位,能够压缩进一个包的媒体量。
a=rtpmap:<payload type> <encoding name>/<clock rate> [/<encoding parameters>]
a=recvonly
a=sendrecv
a=sendonly
a=inactive,
a=orient:<orientation>其可能的值,"portrait", "landscape" and "seascape" 。
a=type:<conference type>,建议值是,"broadcast", "meeting", "moderated", "test" and "H332"。
a=charset:<character set>
a=sdplang:<language tag>指定会话或者是媒体级别使用的语言
a=framerate:<frame rate>设置最大视频帧速率
a=quality:<quality>值是0-10
a=fmtp:<format> <format specific parameters>
在SIP协议的包含的内容是SDP时,应该把Content-Type设置成application/sdp。
SDP 由 IETF(www.ietf.org)定义在 RFC 2327
一个SDP例子:
在某情况中,FEC包是作为一个独立的流来进行传输的。这可能意味着它们被发往
与媒体包不同的端口或不同的多播组。这时,必须传达以下几条消息:
oFEC包被发往的地址和端口
oFEC包的荷载类型号
o它保护的是哪个媒体数据流
FEC的荷载类型号是在它所保护的媒体的m行(译者注:媒体描述行,mediadescription
line,见RFC2327)中传送的。由于没有为FEC分配静态的荷载类型值,因此必须使用动态
的荷载类型值。这个值的绑定是通过一个rtpmap属性来指示的,绑定中所使用的名称
为"parityfec"。
FEC的荷载类型号出现在它所保护的媒体的m行中并不意味着FEC包要发送到相同的地
址和端口。事实上,FEC包的端口和地址信息是通过fmtp属性行来传递的。在媒体的m行中
出现FEC荷载类型指示为了指出FEC保护的是哪个媒体流。
FEC的fmtp行的格式如下所示:
a=fmtp:<荷载类型号><端口><网络类型><地址类型><连接地址>
其中“荷载类型号”就是在m行中出现的荷载类型号。“端口”是FEC包将要发送的端
口。其余的三项,网络类型,地址类型和连接地址与SDP的c行中的语法语义是相同的。这
样fmtp行可以部分地用与c行相同的解析器来进行解析。需要注意的是由于FEC不能够分级
编码,<地址数量(numberofaddresses)>参数必须不出现在连接地址中。
下面是一个FEC包的SDP例子:
v=0
o=hamming28908445262890842807INIP4126.16.64.4
s=FECSeminar
c=INIP4224.2.17.12/127
t=00
m=audio49170RTP/AVP078
a=rtpmap:78parityfec/8000
a=fmtp:7849172INIP4224.2.17.12/127
m=video51372RTP/AVP3179
a=rtpmap:79parityfec/8000
a=fmtp:7951372INIP4224.2.17.13/127
在上面的SDP描述中出现两个m行是因为其中存在两个媒体流,一个音频流和一个视频
流。媒体格式为0代表用PCM编码的音频,它被荷载类型号为78的FEC流保护。FEC流被发
往与音频相同的多播组,TTL参数也相同,但端口号大2(49172)。视频流被荷载类型号为
79的FEC流保护,这个FEC流的端口号是一样的,但是多播地址不一样。
SDP学习笔记
需积分: 0 50 浏览量
2008-04-23
11:18:43
上传
评论 2
收藏 11KB RAR 举报
stuart_xu
- 粉丝: 1
- 资源: 2
最新资源
- 基于JavaScript开发的智慧养老微信小程序源码(毕设项目).zip
- kmp算法-基于C语言kmp算法实现的字符串匹配.zip
- kmp算法-使用kmp算法在Golang中实现字符串匹配.zip
- LTC2756 +LTC6244+LTC6655 设计18位乘法串行输入电流输出DAC数模转换器模块硬件(原理图+PCB)工程
- kmp算法-基于C语言实现KMP算法.zip
- DMS智能座舱项目-Python基于深度学习实现驾驶员分心行为监测系统源码.zip
- 2023年数控机床与编程知识点总结归纳(精选试题附答案).docx
- 2023年数控机床与编程考点总结.pdf
- 2023年数控机床与编程考点题型与解题方法(精选试题附答案).docx
- 3CHISS统计软件介绍(Master).pdf
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
评论0