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 加密协商 动态
相关推荐
OpenLoong 开源社区6 天前
打破 NAT 限制,零侵入跨网络通信:基于 WebRTC 的透明 TCP 隧道跨网络通信方案
网络协议·tcp/ip·开源·webrtc·openloong开源社区
探鸽小钛9 天前
4G 终端 ES8311 - 挂断一次,下次说话就没声了之解决办法
物联网·音视频·嵌入式·esp32·webrtc
草根大哥10 天前
AI 编程实践之自建视频CDN
音视频·webrtc·低延迟直播·视频cdn·低延迟cdn
EasyCVR10 天前
应急指挥怕延迟?聊聊视频汇聚/视频融合/视频分析EasyCVR平台WebRTC低延迟方案
音视频·webrtc·easycvr
TrueDei11 天前
WebRTC ICE 候选变成 mDNS 地址导致连接失败:原因分析与解决方案
webrtc
中屹指纹浏览器svip14 天前
WebRTC泄露是什么,怎么关闭?
webrtc
海边捡石子15 天前
从零设计一个通用智能电话平台:FreeSWITCH + ESL + AI 实战架构
人工智能·架构·webrtc
音视频牛哥15 天前
不换摄像机,也能接入 WebRTC?SmartMediaKit RTSP/RTMP 转 WHIP 技术实践
音视频·webrtc·smartmediakit·rtsp转whip·rtmp转whip·whip推流·rtsp转webrtc播放
直播技术开发交流17 天前
Android 端 WHIP 协议推流技术实践:相机/录屏/多路转发WHIP实现测试
webrtc·android whip·rtsp转whip·毫秒级实时媒体流·whip低延时推送·whip推送实现·rtsp转webrtc
程序员阿明19 天前
docker搭建视频流服务go2rtc,webRTC
docker·容器·webrtc