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