SDP(Session Description Protocol)是一种通用的会话描述协议,主要用来描述多媒体会话,用途包括会话声明、会话邀请、会话初始化等。
WebRTC主要在连接建立阶段用到SDP,连接双方通过信令服务交换会话信息,包括音视频编解码器(codec)、主机候选地址、网络传输协议等。

协议版本号
v=0
会话发起者
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地址。
连接数据:c=
格式如下:
c=<nettype> <addrtype> <connection-address>
每个SDP至少需要包含一个会话级别的c=字段,或者在每个媒体描述后面各包含一个c=字段。(媒体描述后的c=会覆盖会话级别的c=)
- nettype:网络类型,比如
IN,表示 Internet。 - addrtype:地址类型,比如
IP4、IP6。 - connection-address:如果是广播,则为广播地址组;如果是单播,则为单播地址;
举例01:
c=IN IP4 224.2.36.42/127
举例02:
c=IN IP4 host.anywhere.com
媒体描述:m=
SDP可能同时包含多个媒体描述。格式如下:
m=<media> <port> <proto> <fmt> ...
其中:
- media:媒体类型。包括 video、audio、text、application、message等。
- port:传输媒体流的端口,具体含义取决于使用的网络类型(在
c=中声明)和使用的协议(proto,在m=中声明)。 - proto:传输协议,具体含义取决于
c=中定义的地址类型,比如c=是IP4,那么这里的传输协议运行在IP4之上。比如:- UDP:传输层协议是UDP。
- RTP/AVP:针对视频、音频的RTP协议,跑在UDP之上。
- RTP/SAVP:针对视频、音频的SRTP协议,跑在UDP之上。
- fmt:媒体格式的描述,可能有多个。根据 proto 的不同,fmt 的含义也不同。比如 proto 为 RTP/SAVP 时,fmt 表示 RTP payload 的类型。如果有多个,表示在这次会话中,多种payload类型可能会用到,且第一个为默认的payload类型。
举例,下面表示媒体类型是视频,采用SRTP传输流媒体数据,且RTP包的类型可能是122、102...119,默认是122。
m=video 9 UDP/TLS/RTP/SAVPF 122 102 100 101 124 120 123 119
对于 RTP/SAVP,需要注意的是,payload type 又分两种类型:静态类型,动态类型(在a=fmtp:里进行定义)
举例,下面的SDP中:
- 对于audio,111 是动态类型,表示
opus/48000/2

最低0.47元/天 解锁文章
609

被折叠的 条评论
为什么被折叠?



