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 加密协商 动态
相关推荐
REDcker15 小时前
WebRTC 源码架构深度解析
架构·webrtc
EasyDSS21 小时前
EasyDSS如何基于LiveKit/AI大模型/AI会议助手/语音转写STT技术破解音视频应用核心痛点
人工智能·音视频·webrtc·语音识别·点播技术·流媒体直播
EasyDSS3 天前
音视频技术迭代下EasyDSS直播点播视频会议能力的发展方向与价值升级
音视频·webrtc·语音识别·点播技术·流媒体直播
你好音视频3 天前
WebRTC 视频编码丢帧与降低分辨率机制深度剖析
音视频·webrtc
EasyDSS3 天前
WebRTC/语音转文字STT/AI语言大模型重构EasyDSS视频会议
音视频·webrtc·语音识别·hls·实时字幕
CrystalShaw3 天前
WebRTC QoS方法之NetEQ在流量卡下应用的局限
webrtc
用户59049696941603 天前
媒体流的发送(二):Track 的参数是如何写进SDP的
webrtc
TSINGSEE3 天前
WebRTC/视频转码/RTMP推流EasyDSS何让每一类用户都能实现高效便捷操作
音视频·webrtc·实时音视频·语音转写·ai字幕
爱丽_3 天前
WebRTC 从信令到 NAT 穿透(SDP / ICE / STUN / TURN)
webrtc