SDP标准规范

在介绍 WebRTC 中的 SDP 之前,先了解一下 SDP 的标准规范。这里有一段 SDP 的示例,如代码 7.1 所示。

v=0
o=- 3409821183230872764 2 IN IP4 127.0.0.1
...
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104
...
a=rtpmap:111 opus/48000/2
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
...

如果你之前从未接触过 SDP,看这段代码时一定会觉得很茫然。实际上这段代码的含义非常简单,由两部分构成,即会话描述和媒体描述。其中,第 1∼3 行代码称为会话描述,第 4 行代码称为媒体描述。

在整个 SDP 中,只能有一个会话描述,而媒体描述可以有多个。通常 SDP 中包含两个媒体描述:一个音频媒体描述,一个视频媒体描述。除会话描述是对整个 SDP 起约束作用外,各媒体描述之间的约束互不影响。图 7.1 清晰地描述了 SDP 的结构。

image 2025 02 23 13 01 23 437
Figure 1. 图7.1 SDP的组织结构

在 SDP 规范中,除定义了 SDP 的结构外,还对 SDP 的内容做了规定。规范中要求所有的描述都以行为单位,描述格式如下:

<type > = <value >

其中,<type> 表示描述的目标,它由单个字符构成;<value> 是对 <type> 的解释或约束。

会话与媒体都有各自的 <type>。会话包含的 <type> 有 v(protocol version,协议版本)、o(owner/creator and session identifier,会话的创建者)、s(session name,会话名)、t(time the session is active,会话时长)。媒体包含的<type>主要是m(media,媒体)。

除了上面介绍的 <type> 外,还有一些 <type> 是公共的,这些类型既可以出现在会话中,也可以出现在媒体中,如 c(connection information,网络信息)、a(attribute,属性)等。尤其是 a 类型,其用法非常复杂,后续会对它做进一步介绍。

以上就是标准规范中对 SDP 的约定,包括 SDP 的结构、内容格式以及类型等。WebRTC 使用 SDP 时,还对标准 SDP 做了修改。