SDP协议

1、SDP介绍
SDP是会话描述协议的缩写,是描述流媒体初始化参数的格式,由IETF作为RFC 4566颁布。流媒体是指在传输过程中看到或听到的内容。一个SDP包含一个会话层部分,后续跟着0个或者多个媒体层部分。会话层起始于“v=”行,直到第一个媒体层部分。每个媒体层都起始于“m=”行,直到下一个媒体层的开始或者直到SDP结束。通常,会话层的属性是全局的,除非被媒体层重写。
(1)会话信息
· 会话名和目的。
· 会话活动时间。

由于参与会话的资源是受限制的,因此包括以下附加信息是非常有用的。
· 会话使用的带宽信息。
· 会话负责人的联系信息。
(2)媒体信息
· 媒体类型,例如视频和音频。
· 传输协议,例如RTP/UDP/IP和H.320。
· 媒体格式,例如H.261视频和MPEG视频。
· 多播地址和媒体传输端口(IP多播会话)。
· 用于联系地址的媒体和传输端口的远端地址(IP单播会话)。
2、SDP格式
SDP描述由许多文本行组成,文本行的格式为<类型>=<值>,<类型>是一个字母,<值>是结构化的文本串,其格式依<类型>而定。
以下带""号的是可选的,其余的是必须的。一般顺序也按照下面的顺序来排列。
(1)会话信息(Session description)
v=(protocol version)//协议版本
o=(owner/creator and session identifier)//发起者和会话标识符
s=(session name)//会话名字
i=
(session information)//会话信息
u=(URI of description)//URI标识符
e=
(email address)//邮件地址
p=(phone number)//电话号码
c=
(connection information - not required if included in all media)
//连接信息,只有在所有的媒体层都有这个字段的时候,会话层属性才可以没有
b=(zero or more bandwidth information lines)//0个或者多个宽带信息
z=
(time zone adjustments)//时域调整
k=(encryption key)//加密秘钥
a=
(zero or more session attribute lines)//0个或者多个会话属性
t=(time the session is active) //会话有效的时间
r=*(zero or more repeat times)//0个或者多个重复的时间

a=*是sdp协议扩展属性定义,除上面以外的,分解时其它的都可以扔掉。
a=charset属性指定协议使用的字符集。一般的是ISO-10646。

举例:
v=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
其中:nettype是IN,代表internet,addrtype是IP4或IP6。unicast-address任务创建计算机的地址。整个这个属性,是唯一表示一个任务。

[email protected] 或 p=+1 616 555-6011
对于一个任务只能两者之中的一个,表示会议控制者的联系方式。

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>

s=<会话名字>
每个会话描述有且仅有一个"s="字段。字段不能为空,并且应该为ISO 10646字体。如果一个会话没有有意义的名字,则此字段的值应为一个空格。

i=<会话描述>
"i="字段提供会话的文本信息。在会话层和媒体层最多只能出现一次。如果有"a=charset"字段,它标识了"i="字段使用的字体集合。如果没有"a=charset"字段,则必须使用UTF-8编码的ISO 10646字体集合。
"i="字段也可以用于每个媒体层,这是用来标识每个媒体轨的。特别在两个媒体轨的媒体类型都是相同的情况下,这个字段就显得特别有意义了。这个字段主要是用来方便人来阅读的,并不适合自动解析。

u=<URI of description>
URI是统一资源描述符,用于WWW的客户端。URI标识的是有关会话信息的外部的一个指针。这个字段是可选的。但是如果一旦出现,就必须先于第一个媒体轨出现,并且不能有多于一个。

e=<电子邮件地址>和p=<电话号码>
这两个字段描述了会议拥有者的联系信息。这个并不一定表示的是发起会话的那个人。这两个字段都是可选的。如果出现这两个字段,则必须先于第一个媒体轨出现。这两个字段都可以出现多次。
电话号码的格式应该以国际化的格式出现。如:
p=+1 617 555-6011
这两个字段都可以包含一个文本信息,通常表示人的名字。例如:
[email protected](Jane Doe)
也可以以以下形式出现:
e=Jane Doe[email protected]
这两个字段的字体必须是ISO 10646或者是ISO-8859-1或者是字段"a=charset"表示的。

c=<网络类型> <地址类型> <链接地址 >
这个字段包含连接数据。一个会话描述必须在每个媒体层都包含"c="字段或者在会话层包含一个"c="字段的值。如果这两个层都出现的话,则媒体层出现的"c=“会覆盖会话层出现的"c=“字段的值。
<网络类型>是一个文本字符串,最初只定义了"IN”,表示"Internet”,未来会定义其他值。
<地址类型>最初只定义了IP4和IP6。
<链接地址>标识连接的地址。后续可能会包含额外的字段,取决于<地址类型>字段。
当<地址类型>为IP4和IP6时,连接地址定义如下:
a、当会话是多播时,地址为多播组地址;当会话是单播地址,并且为媒体数据的源地址。
b、如果地址类型是IPv4的,则还需要给出TTL的值,TTL表示包的生存时间,范围是0~255。IPv6没有TTL。
(2)媒体信息(Media description)
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)//0个或者多个宽带信息
k=
(encryption key)//加密秘钥
a=*(zero or more media attribute lines)//0个或者多个媒体属性

举例:
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>   
m=<媒体类型> <端口> <协议> <格式类型>

猜你喜欢

转载自blog.csdn.net/qq_39660930/article/details/77717190