先了解几个概念:
WebRTC 全称是 Web Real-Time Communication,即网页即时通信
ICE(交互式连接建立的协议): ICE 的工作是找到连接两个对等体的最佳路径, ICE 可以执行直接连接
ice算法是寻找最低等待时间的路径去连接两端,通常采用以下顺序寻找:
1.直接的UDP连接 (在且仅在这种情况下,一个STUN的服务器会被用来查找主机端面向网络的地址)。
2.直接的TCP连接, 通过HTTP端口
3.直接的TCP连接, 通过HTTPS端口间接的连接通过中继器/TURN服务器 (如果一个直接连接失败了, 比如当一个主机端位于防火墙之后阻止了NAT穿越)
STUN 服务器 :NAT的会话遍历实用程序(STUN)(缩写中的缩写)是一种协议,用于发现您的公共地址并确定路由器中可能阻止与对等方直接连接的任何限制
TUN 服务器: 中转服务器 两端没法直接连接,需要中专服务器进行数据转发
NAT:网络地址转换用于为您的设备提供公共IP地址。路由器将具有公用IP地址,并且连接到路由器的每个设备都将具有专用IP地址。请求将通过唯一端口从设备的专用IP转换为路由器的公共IP。这样,您不需要每个设备都有唯一的公用IP,但仍可以在Internet上找到它
SDP: 会话描述协议描述连接的多媒体内容(例如分辨率,格式,编解码器,加密等)的标准,以便一旦数据传输,两个端可以知道按照什么标准去解析数据
Webrtc通信过程:
- 连接turnServers
- 连接成功初始化相关参数创建PeerConnection连接,传入PCObserver这个监听者主要返回ICE相关信息,如返回收集到的ICE,ICE状态改变,网络改变被移除的ICE等
- onIceConnectionChange(final PeerConnection.IceConnectionState newState)ice状态改变(NEW,CHECKING,CONNECTED, COMPLETED,FAILED,DISCONNECTED,CLOSED