什么是SDP
SDP(Session Description Protocol)是一种通用的会话描述协议,主要用来描述多媒体会话,用途包括会话声明、会话邀请、会话初始化等。
WebRTC主要在连接建立阶段用到SDP,连接双方通过信令服务交换会话信息,包括音视频编解码器(codec)、主机候选地址、网络传输协议等。
下面先简单介绍下SDP的格式、常用属性,然后通过WebRTC连接建立过程生成的SDP实例进行进一步讲解。
协议格式说明
SDP的格式非常简单,由多个行组成,每个行都是如下格式。
<type>=<value>
其中:
<type>
:大小写敏感的一个字符,代表特定的属性,比如v
代表版本;<value>
:结构化文本,格式与属性类型有关,UTF8编码;=
两边不允许存在空格;=*
表示是可选的;
常见属性
以下面的SDP为例:
v=0
o=alice 2890844526 2890844526 IN IP4 host.anywhere.com
s=
c=IN IP4 host.anywhere.com
t=0 0
m=audio 49170 RTP/AVP 0
a=rtpmap:0 PCMU/8000
m=video 51372 RTP/AVP 31
a=rtpmap:31 H261/90000
m=video 53000 RTP/AVP 32
a=rtpmap:32 MPV/90000
协议版本号:v=
格式如下,注意,没有子版本号。
v=0
会话发起者:o
格式如下,其中,username、session-id、nettype、addrtype、unicast-address 一起,唯一标识一个会话。
o=<username> <sess-id> <sess-version> <nettype> <addrtype> <unicast-address>
各字段含义如下:
- username:发起者的用户名,不允许存在空格,如果应用不支持用户名,则为
-
。 - sess-id:会话id,由应用自行定义,规范的建议是NTP(Network Time Protocol)时间戳。
- sess-version:会话版本,用途由应用自行定义,只要会话数据发生变化时(比如编码),sess-version随着递增就行。同样的,规范的建议是NTP时间戳。
- nettype:网络类型,比如
IN
表示Internet
。 - addrtype:地址类型,比如
IP4
、IV6
- unicast-address:域名,或者IP地址。
会话名 s=
必选,有且仅有一个s=
字段,且不能为空。如果实在没有有意义的会话名,可以赋一个空格,即s=
。
s=<session name>
连接数据:c=
格式如下:
c=<nettype> <addrtype> <connection-address>