WebRTC

medooze源码分析--SDP

2018-11-21  本文已影响109人  音视频直播技术专家

前言

SDP(Session Description Protocol) 的目的是在媒体会话中传递媒体信息。SDP在很多地方使用,WebRTC也会使用它做媒体信息交换。

下面我们就来详细描述一下SDP。

SDP的内容

SDP主要包括以下信息:

SDP的格式

SDP是由多个<type>=<value>组成的。其中<type>是一个字符, <value>是一个字符串。需要特别注意的是,=两边是不能有空格的。

SDP会话描述由一个会话级描述(session_level description)和多个媒体级描述(media_level description)组成。

会话级(session_level)的作用域是整个会话。其位置是从’v=’行开始到第一个媒体描述为止。

媒体级(media_level)描述是对单个的媒体流进行描述,其位置是从’m=’行开始到下一个媒体描述为止。

总之,除非媒体部分重载,会话级的值是各个媒体的缺省默认值。

SDP的结构

Session description

Time description

Media description

类型字段含义

Version(必选)

v=0 SDP的版本号,不包括次版本号。

origion(必选)

o=<username> <session id> <version> <network type> <address type> <address>

Session Name(必选)

s=<session name> 会话名,在整个会话中有且只有一个”s=”。

Connection Data(可选)

c=<network type> <address type> <connection address>

表示媒体连接信息。 一个会话声明中,会话级描述中必须有”c=”项或者在每个媒体级描述中有一个”c=”项。

可能在会话级描述和每个媒体级描述中都有”c=”项。

Bandwidth(可选)

b=<modifier>:<bandwidth-value>

描述了建议的带宽,单位kilobits per second,可选。

Times(必选)

t=<start time> <stop time>

描述了会话的开始时间和结束时间。 <start time> 和<stop time> 为NTP时间,单位是秒。假如<stop time>为零表示过了<start time>时间后会话一直持续。当<start time> 和<stop time>均为零时表示持久会话。

建议start time和stop time不要设为0。因为不知道此会话的开始和结束时间,增加了调度(scheduling)的难度。

Media Announcements (必选)

m=<media> <port> <transport> <fmt list>

一个会话描述包括几个媒体描述。一个媒体描述以”m=”开始到下一个”m=”结束。

rtpmap(可选)

a=rtpmap:<payload type> <encoding name>/<clock rate>[/<encodingparameters>]

a=rtpmap:<负载类型><编码名>/<时钟速率>[/<编码参数>]

m=audio 49230 RTP/AVP 96 97 98 a=rtpmap:96 L8/8000 a=rtpmap:97 L16/8000 a=rtpmap:98 L16/11025/2

在rtpmap中,实验性的编码方案也可以用。其格式名前一定为”X-”例:一种新的实验性的被称为GSMLPC的音频流,使用的动态负载类型为99。 m=video 49232 RTP/AVP 99 a=rtpmap:99 X-GSMLPC/8000 9.Suggested Attributes(可选) a=<TYPE>或 a=<TYPE>:<VALUES> a=framerate:<帧速率>//单位:帧/秒 a=lang:<语言标记>//会话描述的缺省语言或媒体描述的语言

注: 如果SDP语法分析器不能识别某一类型(Type),则整个描述丢失。 如果”a=”的某属性值不理解,则予以丢失此属性。 会话级的描述就是媒体级描述的。

上一篇下一篇

猜你喜欢

热点阅读