webrtc两个client配对交互信令流程

目录

​编辑

总体流程概览

一、信令协商阶段 (HTTP 8080)

步骤1:客户端注册与等待

[步骤2:SDP Offer/Answer交换](#步骤2:SDP Offer/Answer交换)

步骤3:ICE候选地址交换

二、TURN中继协商阶段 (UDP 3478)

步骤4:STUN地址发现

步骤5:TURN中继分配

步骤6:对端权限创建

三、连接建立阶段

步骤7:ICE连通性检查

步骤8:DTLS安全握手

步骤9:媒体数据传输

[🔑 核心协议类型速查](#🔑 核心协议类型速查)


总体流程概览

WebRTC两个客户端的配对过程分为两大阶段信令协商 (通过HTTP 50920)和连接建立(通过TURN 3478)。整个过程涉及4个核心实体:Client A、Client B、Signaling Server、Coturn Server。


一、信令协商阶段 (HTTP 8080)

步骤1:客户端注册与等待

text

复制代码
Client A → Signaling Server: POST /sign_in?uid=A
Client A → Signaling Server: GET /wait?peer_id=A (长轮询)
Client B → Signaling Server: POST /sign_in?uid=B  
Client B → Signaling Server: GET /wait?peer_id=B (长轮询)

关键点:双方建立长轮询连接,随时等待对方消息。

步骤2:SDP Offer/Answer交换

text

复制代码
Client A → Signaling Server: POST /message?from=A&to=B (包含SDP Offer)
Signaling Server → Client B: (通过/wait响应转发Offer)
Client B → Signaling Server: POST /message?from=B&to=A (包含SDP Answer)
Signaling Server → Client A: (通过/wait响应转发Answer)

关键点:交换媒体能力信息(编解码器、ICE信息等)。

步骤3:ICE候选地址交换

text

复制代码
Client A → Signaling Server: POST /message?from=A&to=B (包含ICE候选)
Signaling Server → Client B: 转发ICE候选
Client B → Signaling Server: POST /message?from=B&to=A (包含ICE候选)
Signaling Server → Client A: 转发ICE候选

关键点:交换网络地址信息(Host/Srflx/Relay候选)。


二、TURN中继协商阶段 (UDP 3478)

步骤4:STUN地址发现

text

复制代码
Client → Coturn: STUN Binding Request (0x0001)
Coturn → Client: STUN Binding Success (XOR-MAPPED-ADDRESS)

关键点:获取客户端的公网映射地址(用于Srflx候选)。

步骤5:TURN中继分配

text

复制代码
Client → Coturn: Allocate Request (首次, 0x0003)
Coturn → Client: 401 Unauthorized (NONCE, REALM)
Client → Coturn: Allocate Request (带鉴权)
Coturn → Client: Allocate Success (中继IP:端口, 如1.2.3.4:60000)

关键点:分配中继端口,获得Relay候选地址。

步骤6:对端权限创建

text

复制代码
Client → Coturn: CreatePermission Request (对端的中继地址)
Coturn → Client: CreatePermission Success

关键点:授权TURN服务器转发数据给特定对端。


三、连接建立阶段

步骤7:ICE连通性检查

text

复制代码
Client A → Coturn: STUN Binding Request (发往B的中继地址)
Coturn → Client B: Data Indication (转发STUN请求)
Client B → Coturn: STUN Binding Success (通过Send Indication)
Coturn → Client A: Data Indication (转发STUN响应)

关键点:通过TURN中继测试连通性,确认路径可用。

步骤8:DTLS安全握手

text

复制代码
Client A → Coturn: Send Indication (DTLS ClientHello)
Coturn → Client B: Data Indication (转发)
Client B → Coturn: Send Indication (DTLS ServerHello/Finished)
Coturn → Client A: Data Indication (转发)

关键点:建立端到端加密通道(DTLS over TURN)。

步骤9:媒体数据传输

text

复制代码
Client A → Coturn: Send Indication / ChannelData (SRTP/SCTP)
Coturn → Client B: Data Indication / ChannelData (转发)
Client B → Coturn: Send Indication / ChannelData (SRTP/SCTP)
Coturn → Client A: Data Indication / ChannelData (转发)

关键点:音视频数据通过TURN中继进行双向传输。


🔑 核心协议类型速查

阶段 协议 报文类型 作用 端口
信令 HTTP POST /sign_in 用户注册 50920
信令 HTTP GET /wait 长轮询等待 50920
信令 HTTP POST /message 消息发送 50920
地址发现 STUN Binding Request (0x0001) 获取映射地址 3478
中继分配 TURN Allocate Request (0x0003) 申请中继端口 3478
权限创建 TURN CreatePermission (0x0008) 授权对端 3478
数据传输 TURN Send/Data Indication (0x0006/7) 媒体转发 动态
安全握手 DTLS ClientHello/Finished 加密协商 动态
相关推荐
换个昵称都难12 分钟前
WebRTC 完整调用流程(前端纯 JS 实现,最简可运行)
webrtc
换个昵称都难20 小时前
webrtc 拥塞控制GCC 和PCC
webrtc
Cxiaomu21 小时前
React接入WebRTC实时视频实践
react.js·音视频·webrtc
AndyHuang19761 天前
WebRTC 强制 Relay 模式下 TCP 重连失败深度排查与优化实战
webrtc
换个昵称都难1 天前
webrtc pacing 平滑发包模块
webrtc
换个昵称都难1 天前
webrtc 音频混音介绍
音视频·webrtc
换个昵称都难2 天前
webrtc QOS-RemoteBitrateEstimator接收端带宽估计(1)
webrtc
换个昵称都难2 天前
webrtc QOS-RemoteBitrateEstimator接收端带宽估计-四个实例(2)
webrtc
都在酒里2 天前
【极致低延时】香橙派部署 MediaMTX 实现 WebRTC 推流,延时仅 500-800ms,比局域网 ffmpeg 拉流快近 10 倍!(附踩坑全记录)
linux·arm开发·ffmpeg·webrtc·orangepi·嵌入式软件
换个昵称都难2 天前
WebRTC QoS 实战:从原理到弱网优化
开发语言·php·webrtc