音视频通话 2.0
Android
动态与公告
更新日志(V4.6)
更新日志(V5)
活动与公告
【活动】音视频通话内容安全检测限时补贴
【活动】赠送100万分钟音视频通话时长
【邀测】音视频通话2.0V5.3邀请公测
关于RTC反垃圾送检计费变更的说明
新手接入指南
产品简介
产品介绍
功能特性
产品优势
应用场景
基本概念
使用限制
性能指标
产品计费
按量计费
资源包
体验 Demo
下载 SDK 和示例代码
升级指南
快速开始
快速跑通 Sample Code
接入流程
创建应用
开通服务
集成 SDK
实现音视频通话
Token 鉴权
高级 Token 鉴权
基础功能
设置音频属性
设置视频属性
设置视频旋转方向
设置通话音量
屏幕共享
音频共享
监测发言者音量
通话前网络质量探测
通话中质量监测
进阶功能
音频管理
客户端音频录制
原始音频数据
美声变声与混响
耳返
自定义音频采集与渲染
音效与伴音
设置音频订阅优先级
音频裸流传输
媒体补充增强信息SEI
视频管理
视频截图
水印
云信美颜
相芯美颜
自定义视频采集
虚拟背景
视频图像畸变矫正
视频裸流传输
多房间管理
设备管理
视频设备管理
音频设备管理
媒体流管理
跨房间媒体流转发
媒体流加密
视频流回退
云端录制
使用云代理
本地服务端录制
AI 融合功能
AI 超分
AI 降噪
场景实践
1 对 1 娱乐社交
语聊房
PK连麦
在线教育
互联网问诊
最佳实践
音视频参数配置推荐
房间连接状态管理
实现音视频安全检测
轻松构建本土Clubhouse
API 参考
Android API 参考
服务端 API
错误码(V5)
错误码(V4.x)
控制台指南
常见问题处理
FAQ
错题集
获取音频 Dump 文件
音频常见问题排查
视频常见问题排查
服务协议

房间连接状态管理

更新时间: 2023/05/17 10:52:47

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

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

监听房间连接状态

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

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

房间连接状态转化流程

房间连接状态.png

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

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

CONNECTION_STATE_DISCONNECTED = 1

尚未加入房间。

  • 调用 init 方法之后,此时会进入该状态,但还尚未调用 joinChannel 方法加入房间。
  • 调用 leaveChannel 方法离开房间。
CONNECTION_STATE_CONNECTING = 2 正在加入房间。 调用 joinChannel 方法加入房间,此时会先进入该状态,开始建立房间连接。
CONNECTION_STATE_CONNECTED = 3 加入房间成功。 调用 joinChannel 方法加入房间成功。
CONNECTION_STATE_RECONNECTING = 4 正在尝试重新加入房间。 当因为网络质量不佳导致房间连接临时中断并进行重连。
CONNECTION_STATE_FAILED = 5 加入房间失败。 当 SDK 尝试重连 30s ~ 50s 后仍失败,不再尝试重连。

示例代码

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

NERtcCallback neRtcCallback = new NERtcCallbackEx() {
    @Override
    public void onConnectionStateChanged(int state, int reason) {
            switch (reason) {
            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_LEAVE_CHANNEL:
                // 离开房间 ,通话已经结束了。建议优先关注 onLeaveChannel 回调
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_CHANNEL_CLOSED:
                // 房间被关闭,通话已经结束了。建议优先关注onDisconnect 回调(code为NERtcConstants.ErrorCode.ENGINE_ERROR_ROOM_CLOSED)
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_SERVER_KICKED:
                // 被踢出房间,通话已经结束了。建议优先关注onDisconnect 回调(code为NERtcConstants.ErrorCode.ENGINE_ERROR_SERVER_KICKED)
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_TIME_OUT:
                // 网络超时,通话已经结束了。或关注onDisconnect 回调即可(其他code)
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_JOIN_CHANNEL:
                //开始加入房间
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_JOIN_SUCCEED:
                //加入房间成功,与服务器成功建立连接。建议优先关注 onJoinChannel 回调即可
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_REJOIN_SUCCEED:
                // 重连成功,指在网络变化或超时后的重连成功通知
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_MEDIA_CONNECTION_DISCONNECTED:
                // 网络超时,指与媒体服务器暂时失去连接,后续SDK 内部会自动重连
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_SIGNAL_DISCONNECTED:
                // 网络超时,指与信令服务器暂时失去连接,后续SDK 内部会自动重连
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_REQUEST_CHANNEL_FAILED:
                //加入房间获取房间信息这一步就失败。建议优先关注 onJoinChannel 回调即可
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_JOIN_CHANNEL_FAILED:
                //加入房间时与服务器建立长连失败。建议优先关注 onJoinChannel 回调即可
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_RE_DISPATCH:
                // 由于网络变化,分配更合适的服务器节点进行重新连接
                break;

            case NERtcConstants.ConnectionStateChangeReason.CONNECTION_CHANGED_SETTING_PROXY_SERVER:
                //在设置云代理后,开始进行云代理连接
                break;
        }
    }
}

断线重连

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

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

断线重连-android.png

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