一、WebRTC 技术概述
WebRTC 是什么: 是浏览器内置的实时通信技术,能让网页直接实现音视频通话、数据传输,无需安装插件。
ICE 是什么: ICE(Interactive Connectivity Establishment)是 WebRTC 中用于解决 NAT 穿透的框架,而 iceServers 就是给 ICE 提供辅助服务器的配置。
STUN 服务器: STUN(Session Traversal Utilities for NAT),直译是 NAT 会话穿透工具,它是一种轻量级的网络服务器,核心作用是帮助处于 NAT 后的设备获取自己的公网 IP + 端口,以及 NAT 设备的类型,从而让不同 NAT 后的设备能找到彼此,建立点对点连接。
为什么需要 STUN?
我们日常用的网络,设备拿到的都是内网 IP,不是公网 IP。当两个内网设备要直接通信,它们不知道对方的公网地址。STUN 服务器就是帮它们查小区地址和出入口的工具。
- 设备 A(内网)向 STUN 服务器发送一个请求:请告诉我,你看到的我的地址和端口是什么?
- STUN 服务器收到请求后,会记录下请求来源的公网 IP + 端口,然后把这个信息返回给设备 A。
- 设备 A 拿到自己的公网地址后,通过信令服务器把这个地址告诉设备 B;同理,设备 B 也通过 STUN 服务器拿到自己的公网地址并告诉设备 A。
- 最后,设备 A 和设备 B 就可以用彼此的公网地址,直接建立 P2P 连接。
二、系统架构设计

1. 整体视频通话思路
这是一个基于 WebRTC + Spring Boot + STUN 的完整视频通话方案。它的核心是:
- 信令协商:通过 Spring Boot 服务端作为中介,交换双方的网络信息和通话指令。
- 网络穿透:借助 STUN 服务器获取设备的公网 IP 和端口,解决 NAT 穿越问题。
- P2P 直连:在协商完成后,WebRTC 建立端到端的直接连接,负责音视频的实时传输。
- 长连接保活:通过 WebSocket 维持客户端与服务端的通信通道,确保信令能实时送达。
2. 功能模块说明
1. Spring Boot 项目
- 核心作用:作为信令服务器,是整个通话的协调中心。
- 内部组件:
- Netty:高性能网络框架,保证 WebSocket 连接的高并发和稳定 IO 传输。
- WebSocket:在客户端与服务端之间建立长连接,实时传递通话请求、应答、网络信息等信令。
- 关键功能:转发 A、B 双方的信令,让彼此知道对方的网络信息,为后续 P2P 连接铺路。
2. WebRTC(客户端 A/B)
- 核心作用:实现音视频的采集、编码、传输、解码和渲染,是通话的数据通道。
- 关键功能:
- 从摄像头、麦克风采集音视频数据。
- 对音视频进行编码压缩,减少传输带宽占用。
- 通过协商建立的 P2P 通道,直接向对方发送音视频流。
- 接收对方的音视频流,解码后在本地播放。
- 自动处理网络抖动、丢包等问题,保证通话流畅。

