频道连接状态管理

最近更新时间:2022-09-20 05:17:40

音视频通话和互动直播时,会有多个连接状态。本文将介绍 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) 回调;用户需要退出当前频道,然后重新加入频道

API 参考