当用户使用声网 SDK 进行音视频通话或互动直播时,他会有多个声网频道连接状态。本文介绍声网频道如何判断用户在通信的各个阶段处于什么连接状态以及各状态的转变过程。
为帮助开发者更好地了解和管理用户在频道内的连接状态,声网从 v2.3.2 起新增 onConnectionStateChanged
回调。当用户连接状态发生改变时,SDK 会触发该回调,并在回调中明确当前的连接状态和发生状态改变的原因。
该回调下,SDK 有以下连接状态:
下图展示连接状态发生改变的触发时机:
通信过程中,你可以通过调用 getConnectionState
方法获取当前的连接状态。也可以搭配使用 onConnectionStateChanged
回调中的 reason
参数,了解网络状态发生变化的原因。
通信过程中,如果 SDK 因网络等原因,断开与服务器的连接,SDK 会自动开启断线重连机制。
下图展示从用户 UID 1 加入频道,到连接中断,再到连接完全失败过程中,本地及远端用户 UID 2 会收到的回调:
其中:
joinChannel
请求。joinChannel
200 毫秒后,用户可以加入频道。加入频道过程中,UID 1 会收到 onConnectionStateChanged(connection_state_connecting, connection_changed_connecting)
;加入后收到 onConnectionStateChanged(connection_state_connected, connection_changed_join_success)
和 onJoinChannelSuccess
回调。onUserJoined
回调。onConnectionStateChanged(connection_state_reconnecting, connection_changed_interrupted)
回调;同时 SDK 继续尝试重新加入频道。onConnectionStateChanged(connection_state_reconnecting, connection_changed_interrupted)
后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到 onConnectionLost
回调;同时 SDK 继续尝试重新加入频道。onUserOffline
回调。onConnectionStateChanged(connection_state_reconnecting, connection_changed_interrupted)
后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到 onConnectionStateChanged(connection_state_failed, connection_changed_join_failed)
回调;用户需要退出当前频道,然后重新加入频道。v2.3.2 版本及之前的断线重连机制, 以及进程被杀时 SDK 会触发的回调,请参考 FAQ:SDK 对断网、杀进程的处理。