WebRTC中SDP的应用
hyr このページを編集 2 ヶ月 前

1. 什么是 SDP?

SDP(Session Description Protocol)是一种用于描述多媒体会话的文本格式协议。它定义了会话的各种参数,如媒体类型、编解码器、网络地址和端口等。SDP 本身不传输数据,而是用于描述如何设置和管理会话。

SDP 的基本结构

SDP 描述通常包含以下部分:

  • v=:版本号
  • o=:会话的所有者/创建者和会话标识符
  • s=:会话名称
  • c=:连接信息(网络类型、地址类型、连接地址)
  • t=:时间描述(会话的起始和结束时间)
  • m=:媒体描述(媒体类型、传输端口、传输协议、格式列表)
  • a=:属性(会话级或媒体级属性)

2. WebRTC 和 SDP 的关系

在 WebRTC 中,SDP 用于描述和协商音视频会话的参数。具体来说,SDP 在 WebRTC 中的主要作用包括:

2.1. 会话描述

SDP 用于描述 WebRTC 会话的各种参数,如媒体类型、编解码器、网络地址和端口等。这些描述信息在会话建立过程中通过信令通道(如 WebSocket 或 HTTP)在通信双方之间交换。

2.2. 会话协商

WebRTC 使用 SDP 进行会话协商,确保通信双方能够理解和处理对方的媒体流。会话协商的过程通常包括以下步骤:

  1. 创建 Offer:一方(通常是呼叫发起方)创建一个 SDP Offer,描述其支持的媒体类型、编解码器、网络地址等。
  2. 发送 Offer:将 SDP Offer 通过信令通道发送给对方。
  3. 接收 Offer:对方接收到 SDP Offer,并解析其中的会话参数。
  4. 创建 Answer:对方根据 SDP Offer 创建一个 SDP Answer,描述其支持的媒体类型、编解码器、网络地址等。
  5. 发送 Answer:将 SDP Answer 通过信令通道发送回发起方。
  6. 接收 Answer:发起方接收到 SDP Answer,并解析其中的会话参数。

通过这个过程,通信双方能够协商出一个共同支持的会话参数集,从而建立音视频通信。

2.3. ICE(Interactive Connectivity Establishment)

SDP 还用于描述 ICE 候选(候选网络路径),帮助 WebRTC 进行 NAT 穿越和连接建立。ICE 过程包括收集候选地址、交换候选地址、连接检查等步骤。

3. SDP 在 WebRTC 中的具体使用

在 WebRTC 中,SDP 主要通过以下 API 使用:

3.1. RTCPeerConnection

RTCPeerConnection 是 WebRTC 的核心 API,用于管理和控制音视频会话。以下是一些关键方法:

  • createOffer():创建一个 SDP Offer。
  • createAnswer():创建一个 SDP Answer。
  • setLocalDescription():设置本地 SDP 描述(Offer 或 Answer)。
  • setRemoteDescription():设置远程 SDP 描述(Offer 或 Answer)。

3.2. 示例代码

以下是一个简单的示例,展示了如何使用 RTCPeerConnection 和 SDP 进行会话协商:

// 创建 RTCPeerConnection 对象
const pc = new RTCPeerConnection();

// 创建 SDP Offer
pc.createOffer().then(offer => {
  // 设置本地描述
  return pc.setLocalDescription(offer);
}).then(() => {
  // 发送 SDP Offer 给对方(通过信令通道)
  sendSignalingMessage(pc.localDescription);
});

// 接收 SDP Answer
function onSignalingMessage(message) {
  if (message.type === 'answer') {
    // 设置远程描述
    pc.setRemoteDescription(new RTCSessionDescription(message));
  }
}

// 发送信令消息的示例函数
function sendSignalingMessage(message) {
  // 通过 WebSocket 或其他信令通道发送消息
  signalingChannel.send(JSON.stringify(message));
}

4. SDP 的示例

以下是一个简单的 SDP 示例,展示了会话描述的基本结构:

v=0
o=- 46117319 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS
m=audio 9 UDP/TLS/RTP/SAVPF 111 103 104
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:someufrag
a=ice-pwd:somepwd
a=ice-options:trickle
a=fingerprint:sha-256 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF
a=setup:actpass
a=mid:audio
a=sendrecv
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 ccm fir
a=rtcp-fb:111 nack
a=rtcp-fb:111 goog-remb
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
m=video 9 UDP/TLS/RTP/SAVPF 100 101 102
c=IN IP4 0.0.0.0
a=rtcp:9 IN IP4 0.0.0.0
a=ice-ufrag:someufrag
a=ice-pwd:somepwd
a=ice-options:trickle
a=fingerprint:sha-256 12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF:12:34:56:78:90:AB:CD:EF
a=setup:actpass
a=mid:video
a=sendrecv
a=rtcp-mux
a=rtpmap:100 VP8/90000
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 goog-remb
a=rtpmap:101 VP9/90000
a=rtpmap:102 H264/90000

总结

  • SDP:一种用于描述多媒体会话的协议,定义了会话的各种参数。
  • SDP和WebRTC关系:WebRTC 使用 SDP 来描述和协商音视频会话的参数,通过信令通道交换 SDP 描述,确保通信双方能够理解和处理对方的媒体流。

通过理解 WebRTC 和 SDP 之间的关系,可以更好地掌握 WebRTC 的工作原理,并在实际应用中有效地进行音视频会话的设置和管理。