videocalling
Illustration of SDP(会话描述协议) in video calling

SDP(会话描述协议)

协议

在连接建立过程中描述媒体流参数的标准格式。

什么是 SDP?

会话描述协议(SDP)是一种用于描述多媒体通信会话的格式,用于会话通告和会话邀请。在 WebRTC 中,它是信令过程中交换的关键数据载荷,用于建立点对点连接。

可以将 SDP 想象成设备交换的名片。它告诉对方:“这是我的信息,这些是我支持的音视频编解码器,这是我的 IP 地址和端口(候选地址),这是我使用的加密方式。”

在 Offer/Answer 模型中的角色

WebRTC 使用 Offer/Answer 模型来建立通话,SDP 是两者使用的语言:

  • Offer(提议):一端生成一个 SDP 描述,说明其能力和开始会话的意图。
  • Answer(应答):接收端接受提议并生成自己的 SDP 描述作为响应,确认其支持的内容。

一旦双方交换并设置了这些 SDP(使用 setLocalDescriptionsetRemoteDescription),媒体就可以开始传输了。

SDP 数据包的结构

SDP 是基于文本的,由一系列 <type>=<value> 格式的行组成。以下是你可能看到的常见行:

  • v=0:协议版本。
  • o=...:发起者和会话标识符。
  • s=...:会话名称。
  • c=...:连接信息(IP 地址)。
  • m=...:媒体描述(例如 m=audio 54312 RTP/SAVPF 111)。该行定义了媒体类型、端口、协议和编解码器负载类型。
  • a=...:属性(例如 a=rtpmap:111 opus/48000/2)。这些提供媒体行的详细信息,如编解码器名称和候选地址信息。

为什么 SDP 很重要?

没有 SDP,两台设备将不知道如何相互通信。一台可能使用“VP8”视频,而另一台期望“H.264”。一台可能在端口 5000 监听,而另一台向端口 6000 发送。SDP 在通话开始前解决所有这些差异。

SDP 还携带由 ICE 代理收集的关键 ICE 候选地址(IP 地址和端口),这些对于穿越 NAT 和防火墙是必需的。