音视频互动时,会有多个连接状态。本文将介绍 RTC SDK 与服务器的频道连接状态和转变过程。
连接状态
加入房间进行音视频互动过程中,可以监听 SDK 的 onConnectionStateChanged
回调,当用户的连接状态发生改变时,SDK 会触发该回调。
该回调有以下连接状态:
连接状态 | 说明 |
---|---|
DISCONNECTED(1) | 连接断开 |
CONNECTING(2) | 建立网络连接中 |
CONNECTED(3) | 网络已连接 |
RECONNECTING(4) | 重新建立网络连接中 |
FAILED(5) | 网络连接失败 |
下图展示连接状态发生改变的触发时机:
在通信过程中也可以主动查询,调用 getConnectionState
获取当前 SDK 与服务器网络的连接状态。也可以搭配使用 onConnectionStateChanged
回调中的 reason
参数,更详细的了解 SDK 与服务器网络的连接状态。
断线重连
在通信过程中,当 SDK 与服务器网络连接出现中断时,SDK 会自动开启断线重连机制。
下图展示从用户 UID 1 加入频道,到连接中断,再到连接完全失败过程中,本地及远端用户 UID 2 会收到的回调:
其中:
S0
:SDK 接收到本地用户joinChannel
请求。S1
:通常在调用joinChannel
200 毫秒后,用户可以加入频道。加入频道过程中,UID 1 会收到onConnectionStateChanged
(connection_state_connecting, connection_changed_connecting);加入后收到onConnectionStateChanged
(connection_state_connected, connection_changed_join_success) 和onJoinChannelSuccess
回调。S2
:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到onUserJoined
回调。S3
:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。S4
:如果 UID 1 连续四秒没有收到服务器发送的任何数据,UID 1 会收到onConnectionStateChanged
(connection_state_reconnecting, connection_changed_interrupted) 回调;同时 SDK 继续尝试重新加入频道。S5
:如果 UID 1 连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到onConnectionLost
回调;同时 SDK 继续尝试重新加入频道。S6
:如果 UID 2 连续 20 秒没有收到 UID 1 的任何数据,SDK 判断远端用户掉线,UID 2 会收到onUserOffline
回调。S7
:如果 UID 1 连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到onConnectionStateChanged
(connection_state_failed, connection_changed_join_failed) 回调;用户需要退出当前频道,然后重新加入频道。