房间连接状态管理

更新时间: 2024/09/18 16:26:13

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

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

监听房间连接状态

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

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

房间连接状态转化流程

房间连接状态.png

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

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

kNERtcConnectionStateDisconnected

尚未加入房间。

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

示例代码

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

void NertcEventHandler::onConnectionStateChange(nertc::NERtcConnectionStateType state, nertc::NERtcReasonConnectionChangedType reason)  
{
    if(reason == nertc::kNERtcReasonConnectionChangedJoinSucceed)
    {
        //加入房间成功
    }else if(reason == nertc::kNERtcReasonConnectionChangedLeaveChannel)
    {
        //离开房间
    }else if(reason == nertc::kNERtcReasonConnectionChangedChannelClosed)
    {
        //房间被关闭
    }
    else if(reason == nertc::kNERtcReasonConnectionChangedJoinChannel)
    {
        //加入房间 
    }
    else if(reason == nertc::kNERtcReasonConnectionChangedJoinChannelFailed)
    {
        //加入房间失败 
    }
    else if(reason == nertc::kNERtcReasonConnectionChangedReJoinSucceed)
    {
        //重新加入房间成功 (重连)
    }
    else if(reason == nertc::kNERtcReasonConnectionChangedMediaConnectionDisconnected)
    {
        //媒体连接断开
    }
    else if(reason == nertc::kNERtcReasonConnectionChangedReDispatch)
    {
        //重新分配了服务器 IP
    }
    else if(reason == nertc::kNERtcReasonConnectionChangedRequestChannelFailed)
    {
        //请求房间失败
    }
    else if(reason == nertc::kNERtcReasonConnectionChangedBeKicked)
    {
        //用户被踢
    }
    else if(reason == nertc::kNERtcReasonConnectionChangedSettingProxyServer)
    {
        //开始使用云代理进行连接
    }
    else if(reason == nertc::kNERtcReasonConnectionChangedSignalDisconnected)
    {
        //信令连接断开
    }
    else if(reason == nertc::kNERtcReasonConnectionChangedTimeOut)
    {
        //超时断开
    }
}

断线重连

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

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

断线重连-windows.png

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