房间连接状态管理

更新时间: 2024/03/15 17:26:15

在用户进行音视频通话或互动直播时,可能会遇到网络连接状态不稳定或者断线的情况,从而影响房间连接状态和正常的音视频业务。NERTC SDK 提供房间连接状态回调且支持断线自动重连,您可以通过监听相关回调及根据断线重连策略管理用户在房间内的连接状态,以提升 APP 用户的使用体验。

本文为您介绍 SDK 如何判断用户在通话房间内的连接状态和各个连接状态之间的转化过程。

监听房间连接状态

NERTC SDK 提供 onNERtcEngineConnectionStateChangeWithState:reason: 回调,您可以通过注册监听此回调实时监控并管理用户在房间内的连接状态,当用户连接状态发生改变时,SDK 会触发该回调,并在回调中明确当前的房间连接状态和引起当前房间连接状态发生改变的原因。若因为网络环境状态不佳导致房间连接中断,SDK 内部会自动进行断线重连。

此外,您也通过调用 connectionState 方法主动获取当前房间连接状态。

房间连接状态转化流程

房间连接状态.png

房间连接状态互相转化时,您可以通过 reason 判断各种情况并处理相应的逻辑,具体如何处理请参考示例代码,其中对各房间连接状态的说明如下表所示。

房间连接状态(state)
含义
触发转化为该状态的事件

kNERtcConnectionStateDisconnected

尚未加入房间。

kNERtcConnectionStateConnecting 正在加入房间。 调用 joinChannelWithToken 方法加入房间,此时会先进入该状态,开始建立房间连接。
kNERtcConnectionStateConnected 加入房间成功。 调用 joinChannelWithToken 方法加入房间成功。
kNERtcConnectionStateReconnecting 正在尝试重新加入房间。 当因为网络质量不佳导致房间连接临时中断并进行重连。
kNERtcConnectionStateFailed 加入房间失败。 当 SDK 尝试重连 30s ~ 50s 后仍失败,不再尝试重连。

示例代码

您可以参考以下代码处理常见业务事件。

- (void)onNERtcEngineConnectionStateChangeWithState:(NERtcConnectionStateType)state
                                             reason:(NERtcReasonConnectionChangedType)reason 
{
    if (state == kNERtcConnectionStateDisconnected){
        //处于与房间断开连接的状态,如果需要连接,需要主动调用加入房间接口进行重试。
        //可以根据 reason 来判断断开的原因。
    }
    else if (state == kNERtcConnectionStateConnecting) {
        //正在加入房间过程中
    }
    else if (state == kNERtcConnectionStateConnected){
        //加入房间成功
    }
    else if (state == kNERtcConnectionStateReconnecting){
        //当前正在重连,此时无法收发音视频数据
        //可以根据 reason 来判断重连的原因。
    }
    else if (state == kNERtcConnectionStateFailed){
        //加入房间失败,SDK 不会进行重试,如果需要连接,需要主动调用加入房间接口进行重试。
    }
}

断线重连

用户成功加入房间后,若因网络环境不佳等原因导致与房间断开连接,SDK 内部会自动进行断线重连。

为了更好地展示断线重连机制,以用户 A 和用户 B 已成功加入同一个房间后,用户 A 的网络连接异常导致房间连接状态变化为例,具体描述如下图所示。

断线重连1.png

此文档是否对你有帮助?
有帮助
去反馈
  • 监听房间连接状态
  • 房间连接状态转化流程
  • 示例代码
  • 断线重连