通过阅读本文,可以了解各种频道连接状态,状态改变原因和应该采取的处理方式。
功能介绍
在实时音视频场景中,客户端与服务端之间的连接状态会随着用户加入或离开频道而发生变化,同时也可能因用户网络问题导致重新连接或断开。因此,对频道连接状态进行有效管理至关重要,这不仅直接影响用户的实时音视频体验,还涉及整个应用的稳定性与可靠性。
功能原理
连接状态
当连接状态发生变化时,ARTC SDK会触发onConnectionStatusChange
回调。下图展示了各种连接状态,以及用户在加入和离开频道过程中连接状态的变化。
断线重连
通话过程中,如果因网络问题导致连接断开,SDK 会自动重连。下图展示用户A(User A)和用户B(User B)在以下过程中收到的回调:假设UserB已在频道中,User A加入频道、发生网络异常自动重连、重连失败。
T0时:User A发起
joinChannel
请求.T1时:User A加入频道成功,收到
onJoinChannelResult(result=0)
和onConnectionStatusChange
的回调。T2时:User B感知User A加入房间,收到
onRemoteUserOnLineNotify
回调。T3时:User A因为客户端断网等原因导致连接断开。
T4时:User A SDK检测到网络断开或者一段时间内收不到服务端发送的任何数据,会发起自动重连,同时User A收到
onConnectionStatusChange
的回调。T5时:SDK在100秒内多次重试依然无法重新加入频道,不再继续尝试,向User A回调
onConnectionStatusChange
。此时用户需要退出当前频道,检查本地网络后,网络恢复正常后重新加入频道。
代码示例
Android
onConnectionStatusChange - 网络连接状态改变回调
@Override
public void onConnectionStatusChange(AliRtcEngine.AliRtcConnectionStatus status, AliRtcEngine.AliRtcConnectionStatusChangeReason reason) {
super.onConnectionStatusChange(status, reason);
Log.e(TAG, "onConnectionStatusChange.");
ThreadUtils.runOnUiThread(new Runnable() {
@Override
public void run() {
if (mLogView != null) {
mLogView.logI("网络连接变化为:" + status + ",原因为:" + reason);
}
}
});
}
iOS
onConnectionStatusChange - 网络连接状态改变的回调
/**
* @brief 频道连接状态改变的回调
* @param status 当前状态值, 对应值参考枚举AliRtcConnectionStatus
* @param reason 引起状态变化的具体原因, 对应值参考枚举AliRtcConnectionStatusChangeReason
*/
- (void)onConnectionStatusChange:(AliRtcConnectionStatus)status reason:(AliRtcConnectionStatusChangeReason)reason{
NSString *stateStr = [NSString stringWithFormat:@"\n网络状态:%@ status: %ld 原因:%@ reason:%ld\n",[self callbackNetstatus:status], (long)status,[self callbackNetstatusReason:reason], (long)reason];
MyLog(@"%@", stateStr);
}
Windows
OnConnectionStatusChange - 网络连接状态改变的回调
void AliSDKEventListener::OnConnectionStatusChange(int status, int reason)
{
if (win_rtc_listener_)
{
win_rtc_listener_->OnConnectionStatusChange(status, reason);
}
}
状态说明
连接状态
连接状态 | 描述 |
Init | 初始状态,发生在调用 |
Connecting | 调用 |
Connected | 发生在 App 成功加入频道后。 SDK 还会触发 |
Disconnected | 发生在调用 |
Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。 如果重新加入频道成功,SDK 会触发 onConnectionStatusChange (AliRtcConnectionStatusConnected,AliRtcConnectionChangedSignalingJoinChannelSuccess) |
Failed | 连接失败。发生在 SDK 在 100秒内无法加入频道、并且 SDK 停止重新连接频道时。 此时用户需要调用 |
状态原因说明
连接状态(status) | 状态原因说明(reason) |
Init | 无原因,初始状态。 |
Connecting | Connecting:加入频道中。 |
Connected | JoinChannelSuccess:成功加入频道。 |
Disconnected | LeaveRoom:用户主动离开频道。 |
Reconnecting |
|
Failed | JoinChannelFailure:加入房间失败或重新加入房间失败。可能是网络断开一直没有恢复、token 无效等原因。 |