
SDP(会话描述协议)
协议在连接建立过程中描述媒体流参数的标准格式。
什么是 SDP?
会话描述协议(SDP)是一种用于描述多媒体通信会话的格式,用于会话通告和会话邀请。在 WebRTC 中,它是信令过程中交换的关键数据载荷,用于建立点对点连接。
可以将 SDP 想象成设备交换的名片。它告诉对方:“这是我的信息,这些是我支持的音视频编解码器,这是我的 IP 地址和端口(候选地址),这是我使用的加密方式。”
在 Offer/Answer 模型中的角色
WebRTC 使用 Offer/Answer 模型来建立通话,SDP 是两者使用的语言:
- Offer(提议):一端生成一个 SDP 描述,说明其能力和开始会话的意图。
- Answer(应答):接收端接受提议并生成自己的 SDP 描述作为响应,确认其支持的内容。
一旦双方交换并设置了这些 SDP(使用 setLocalDescription 和 setRemoteDescription),媒体就可以开始传输了。
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 和防火墙是必需的。