webrtc两个client配对交互信令流程
·
目录
总体流程概览
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 | 加密协商 | 动态 |
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐




所有评论(0)