WebRTC 概述
WebRTC 是一门实时通信技术,支持 P2P 或中继模式建立连接。P2P 连接需经过信令服务器交换 SDP,无信令服务器无法建立;中继模式则以 TURN 服务器转发音视频流。
为什么使用 P2P
P2P 具有低延迟、节省服务器带宽的优势,但 NAT 及防火墙是主要障碍。Nginx 服务器可作为 HTTP 反向代理颁发证书,建立安全稳定的连接。
关键概念与功能
需理清 WebSocket、HTTP、STUN、TURN、ICE、SDP(offer/answer)、candidate、信令服务器、HTTP 反向代理等名词在 WebRTC 一对一通话中的作用。Nginx 做 HTTP 反向代理将信令请求转给信令服务器。信令服务器(Node)提供 HTTP 接口和 WebSocket 服务:客户端利用 HTTP 协议进入/退出房间,利用 WebSocket 发送接收 SDP 和 candidate 等实时信令。
连接实现步骤
具体实现步骤如下:

第一步:建立 WebSocket 连接
服务端采用 Node.js 搭建,客户端通过服务器地址和端口建立连接。仅能有一对一聊天功能,需进一步传输音视频数据。
第二步:传输音视频数据
需建立 P2P 连接或通过 TURN 服务器中继。STUN 为 P2P 模式提供公网地址,TURN 中继服务器不依赖 STUN,在 P2P 连接中 ICE 打洞失败时为客户端分配公网可访问的中继地址。建立 P2P 连接流程:创建 peerconnection -> SDP 协商 -> 交换 candidate 进行 ICE 打洞。若 ICE 打洞失败,切换至中继模式连接。服务端兼顾房间管理服务,使用 RoomMap 类进行管理。

