频道连接状态管理
- Android
更新时间不可用
了解实时互动 RTC 在不同平台上的频道连接状态管理方式,包括接入流程、关键配置和平台差异。
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 onConnectionStateChanged 回调。下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户 (UID1) 和远程用户 (UID2) 在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID1 的
joinChannel请求。 - T1:调用
joinChannel200 ms 后,UID1 加入频道。同时,UID1 收到onConnectionStateChanged(CONNECTING, CONNECTING)回调。 成功加入频道后,UID1 收到onConnectionStateChanged(CONNECTED, JOIN_SUCCESS)和onJoinChannelSuccess回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
onUserJoined回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID1 连续 4 秒没有收到服务器发送的任何数据,UID1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)回调;同时 SDK 继续尝试重新加入频道。 - T5:如果 UID 1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到onConnectionLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID2 连续 20 秒没有收到来自 UID1 的任何数据,则 SDK 判断 UID1 离线。UID2 收到
onUserOffline回调。 - T7:如果 UID 1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到onConnectionStateChanged(FAILED, JOIN_FAILED)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
操作步骤
本节介绍如何使用 onConnectionStateChanged 回调来监控频道连接状态的变化。
在你的项目中,打开管理 IRtcEngineEventHandler 的文件,将以下代码复制到 IRtcEngineEventHandler 初始化过程中。
public void onConnectionStateChanged(int state, int reason) {
super.onConnectionStateChanged(state, reason);
Log.i(TAG, "onConnectoionStateChanged->" + ", state->" + state + ", reason->" + reason);
}你可以从日志中读取当前连接状态,以及状态更改的触发原因。
另外,onConnectionStateChanged 中的 reason 参数也解释了连接状态改变的原因,可帮助你进行网络故障排除。 有关频道连接状态变化的原因以及排障方式,详见状态说明及排障指导。
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| Disconnected | 初始连接状态。它通常发生在:
|
| Connecting | 调用 joinChannel 方法后的瞬时状态。 |
| Connected | 发生在 App 成功加入频道后。SDK 还会触发 onJoinChannelSuccess 回调,上报本地客户端已经加入频道。 此时用户可以发布或订阅频道中的音频和视频。 |
| Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| Failed | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。 此时需调用 leaveChannel 离开当前频道,再调用 joinChannel 再次加入频道。 |
状态说明及排障指导
onConnectionStateChanged 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| Disconnected |
|
| Connecting |
|
| Connected |
|
| Reconnecting |
|
| Failed |
|
API 参考
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 connectionChangedToState 回调。下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户 (UID1) 和远程用户 (UID2) 在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID1 的
joinChannelByToken请求。 - T1:调用
joinChannelByToken200 ms 后,UID1 加入频道。同时,UID1 收到connectionChangedToState(Connecting, Connecting)回调。成功加入频道后,UID1 收到connectionChangedToState(Connected, JoinSuccess)和didJoinChannel回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
didJoinedOfUid回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID1 连续 4 秒没有收到服务器发送的任何数据,UID1 收到
connectionChangedToState(Reconnecting, Interrupted)回调;同时 SDK 继续尝试重新加入频道。 - T5:如果 UID 1 收到
connectionChangedToState(Reconnecting, Interrupted)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到rtcEngineConnectionDidLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID2 连续 20 秒没有收到来自 UID1 的任何数据,则 SDK 判断 UID1 离线。UID2 收到
didOfflineOfUid回调。 - T7:如果 UID 1 收到
connectionChangedToState(Reconnecting, Interrupted)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到connectionChangedToState(Failed, JoinFailed)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
操作步骤
本节介绍如何使用 connectionChangedToState 回调来监控频道连接状态的变化。
在你的项目中,打开管理 AgoraRtcEngineDelegate 的文件,将以下代码复制到 AgoraRtcEngineDelegate 初始化过程中。
func rtcEngine(_ engine: AgoraRtcEngineKit, connectionChangedTo state: AgoraConnectionState, reason: AgoraConnectionChangedReason) {
LogUtils.log(message: "Connection state changed: \(state) \(reason)", level: .info)
}你可以从日志中读取当前连接状态,以及状态更改的触发原因。
另外,connectionChangedToState 中的 reason 参数也解释了连接状态改变的原因,可帮助你进行网络故障排除。 有关频道连接状态变化的原因以及排障方式,详见状态说明及排障指导。
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| Disconnected | 初始连接状态。它通常发生在:
|
| Connecting | 调用 didJoinChannel 方法后的瞬时状态。 |
| Connected | 发生在 App 成功加入频道后。SDK 还会触发 didJoinChannel 回调,上报本地客户端已经加入频道。此时用户可以发布或订阅频道中的音频和视频。 |
| Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| Failed | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。 此时需调用 leaveChannel 离开当前频道,再调用 joinChannelByToken 再次加入频道。 |
状态说明及排障指导
connectionChangedToState 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| Disconnected |
|
| Connecting |
|
| Connected |
|
| Reconnecting |
|
| Failed |
|
API 参考
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 connectionChangedToState 回调。下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户 (UID1) 和远程用户 (UID2) 在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID1 的
joinChannelByToken请求。 - T1:调用
joinChannelByToken200 ms 后,UID1 加入频道。同时,UID1 收到connectionChangedToState(Connecting, Connecting)回调。成功加入频道后,UID1 收到connectionChangedToState(Connected, JoinSuccess)和didJoinChannel回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
didJoinedOfUid回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID1 连续 4 秒没有收到服务器发送的任何数据,UID1 收到
connectionChangedToState(Reconnecting, Interrupted)回调;同时 SDK 继续尝试重新加入频道。 - T5:如果 UID 1 收到
connectionChangedToState(Reconnecting, Interrupted)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到rtcEngineConnectionDidLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID2 连续 20 秒没有收到来自 UID1 的任何数据,则 SDK 判断 UID1 离线。UID2 收到
didOfflineOfUid回调。 - T7:如果 UID 1 收到
connectionChangedToState(Reconnecting, Interrupted)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到connectionChangedToState(Failed, JoinFailed)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
操作步骤
本节介绍如何使用 connectionChangedToState 回调来监控频道连接状态的变化。
在你的项目中,打开管理 AgoraRtcEngineDelegate 的文件,将以下代码复制到 AgoraRtcEngineDelegate 初始化过程中。
func rtcEngine(_ engine: AgoraRtcEngineKit, connectionChangedTo state: AgoraConnectionState, reason: AgoraConnectionChangedReason) {
LogUtils.log(message: "Connection state changed: \(state) \(reason)", level: .info)
}你可以从日志中读取当前连接状态,以及状态更改的触发原因。
另外,connectionChangedToState 中的 reason 参数也解释了连接状态改变的原因,可帮助你进行网络故障排除。 有关频道连接状态变化的原因以及排障方式,详见状态说明及排障指导。
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| Disconnected | 初始连接状态。它通常发生在:
|
| Connecting | 调用 didJoinChannel 方法后的瞬时状态。 |
| Connected | 发生在 App 成功加入频道后。SDK 还会触发 didJoinChannel 回调,上报本地客户端已经加入频道。此时用户可以发布或订阅频道中的音频和视频。 |
| Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| Failed | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。 此时需调用 leaveChannel 离开当前频道,再调用 joinChannelByToken 再次加入频道。 |
状态说明及排障指导
connectionChangedToState 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| Disconnected |
|
| Connecting |
|
| Connected |
|
| Reconnecting |
|
| Failed |
|
API 参考
本文介绍声网频道如何判断用户在通信的各个阶段处于什么连接状态以及各状态的转变过程。
获取连接状态
为帮助开发者更好地了解和管理用户在频道内的连接状态,声网 Web SDK 提供 AgoraRTCClient.connectionState 字段和 AgoraRTCClient.on("connection-state-change") 回调帮助你获取当前的连接状态。
当用户连接状态发生改变时,SDK 会触发 AgoraRTCClient.on("connection-state-change") 回调,并在回调中明确当前的连接状态和发生状态改变的原因。
下面列出所有的连接状态:
-
"DISCONNECTED": 连接断开。处于这个状态时,SDK 不会自动重连。该状态表示用户处于以下任一阶段:- 尚未通过
join加入频道。 - 已经通过
leave离开频道。 - 被声网服务器踢出频道或者连接失败等异常情况。
- 尚未通过
-
"CONNECTING": 正在连接。调用join时为此状态。 -
"CONNECTED": 已连接。该状态表示用户已经加入频道,可以在频道内发布或订阅媒体轨道。 -
"RECONNECTING": 连接断开,正在尝试重连。因网络断开或切换导致 SDK 与服务器的连接中断,SDK 会自动重连,进入此状态。 -
"DISCONNECTING": 正在断开连接。调用leave时为此状态。
下图展示连接状态发生改变的触发时机:
断线重连机制
通信过程中,如果 SDK 因网络等原因,断开与服务器的连接,SDK 会自动开启断线重连机制。
下图展示从本地用户 UID 1 加入频道,到连接中断,再到连接完全失败过程中,本地用户 UID 1 和远端用户 UID 2 会收到的回调:
其中:
- T0:SDK 接收到 UID 1 的
Client.join请求。 - T1:UID 1 成功加入频道。加入频道过程中,UID 1 会收到
AgoraRTCClient.on("connection-state-change")回调报告"CONNECTING",加入后报告"CONNECTED"。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
AgoraRTCClient.on("user-joined")回调。 - T3:某个时间点 UID 1 调用
AgoraRTCClient.publish发布本地轨道。 - T4:UID 2 收到
AgoraRTCClient.on("user-published")回调,表示 UID 1 已发布轨道。UID 2 可以调用AgoraRTCClient.subscribe方法订阅 UID 1 的轨道。 - T5:通信过程中 UID 1 网络发生中断,SDK 自动开启断线重连机制。
- T6:SDK 自动重连过程中,触发
AgoraRTCClient.on("connection-state-change")回调报告"RECONNECTING"。 - T7:如果声网服务器连续 10 秒没有收到 UID 1 的音视频包,声网服务器判断 UID 1 不再发布音视频,UID 2 会收到
AgoraRTCClient.on("user-unpublished")回调。 - T8:如果声网服务器连续 20 秒没有收到 UID 1 的心跳包,声网服务器判断 UID 1 离线,UID 2 会收到
AgoraRTCClient.on("user-left")回调。 - T9:成功重新建立连接后,UID 1 会收到
AgoraRTCClient.on("connection-state-change")回调报告"CONNECTED"。 - T10:UID 2 再次收到
AgoraRTCClient.on("user-joined")回调。
API 参考
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 onConnectionStateChanged 回调。下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户 (UID1) 和远程用户 (UID2) 在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID1 的
joinChannel请求。 - T1:调用
joinChannel200 ms 后,UID1 加入频道。同时,UID1 收到onConnectionStateChanged(CONNECTING, CONNECTING)回调。成功加入频道后,UID1 收到onConnectionStateChanged(CONNECTED, JOIN_SUCCESS)和onJoinChannelSuccess回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
onUserJoined回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID1 连续 4 秒没有收到服务器发送的任何数据,UID1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)回调;同时 SDK 继续尝试重新加入频道。 - T5:如果 UID 1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到onConnectionLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID2 连续 20 秒没有收到来自 UID1 的任何数据,则 SDK 判断 UID1 离线。UID2 收到
onUserOffline回调。 - T7:如果 UID 1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到onConnectionStateChanged(FAILED, JOIN_FAILED)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
操作步骤
本节介绍如何使用 onConnectionStateChanged 回调来监控频道连接状态的变化。
在你的项目中,打开管理 IRtcEngineEventHandler 的文件,在 IRtcEngineEventHandler 初始化进程中加入 onConnectionStateChanged。
你可以从日志中读取当前连接状态,以及状态更改的触发原因。
另外,onConnectionStateChanged 中的 reason 参数也解释了连接状态改变的原因,可帮助你进行网络故障排除。有关频道连接状态变化的原因以及排障方式,详见状态说明及排障指导。
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| Disconnected | 初始连接状态。它通常发生在:
|
| Connecting | 调用 joinChannel 方法后的瞬时状态。 |
| Connected | 发生在 App 成功加入频道后。SDK 还会触发 onJoinChannelSuccess 回调,上报本地客户端已经加入频道。此时用户可以发布或订阅频道中的音频和视频。 |
| Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| Failed | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。 此时需调用 leaveChannel 离开当前频道,再调用 joinChannel 再次加入频道。 |
状态说明及排障指导
onConnectionStateChanged 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| Disconnected |
|
| Connecting |
|
| Connected |
|
| Reconnecting |
|
| Failed |
|
API 参考
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 onConnectionStateChanged 回调。下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户 (UID1) 和远程用户 (UID2) 在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID1 的
joinChannel请求。 - T1:调用
joinChannel200 ms 后,UID1 加入频道。同时,UID1 收到onConnectionStateChanged(CONNECTING, CONNECTING)回调。 成功加入频道后,UID1 收到onConnectionStateChanged(CONNECTED, JOIN_SUCCESS)和onJoinChannelSuccess回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
onUserJoined回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID1 连续 4 秒没有收到服务器发送的任何数据,UID1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)回调;同时 SDK 继续尝试重新加入频道。 - T5:如果 UID 1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到onConnectionLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID2 连续 20 秒没有收到来自 UID1 的任何数据,则 SDK 判断 UID1 离线。UID2 收到
onUserOffline回调。 - T7:如果 UID 1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到onConnectionStateChanged(FAILED, JOIN_FAILED)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
操作步骤
本节介绍如何使用 onConnectionStateChanged 回调来监控频道连接状态的变化。
在你的项目中,打开管理 IRtcEngineEventHandler 的文件,将以下代码复制到 IRtcEngineEventHandler 初始化过程中。
config.mEventHandler.onConnectionStateChanged = (
state: Constants.ConnectionState,
reason: Constants.ConnectionChangedReason
) => {
Logger.info(TAG, `onConnectionStateChanged state=${state} reason=${reason}`);
};你可以从日志中读取当前连接状态,以及状态更改的触发原因。
另外,onConnectionStateChanged 中的 reason 参数也解释了连接状态改变的原因,可帮助你进行网络故障排除。 有关频道连接状态变化的原因以及排障方式,详见状态说明及排障指导。
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| DISCONNECTED | 初始连接状态。它通常发生在:
|
| CONNECTING | 调用 joinChannel 方法后的瞬时状态。 |
| CONNECTED | 发生在 App 成功加入频道后。SDK 还会触发 onJoinChannelSuccess 回调,上报本地客户端已经加入频道。 此时用户可以发布或订阅频道中的音频和视频。 |
| RECONNECTING | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| FAILED | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。 此时需调用 leaveChannel 离开当前频道,再调用 joinChannel 再次加入频道。 |
状态说明及排障指导
onConnectionStateChanged 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| DISCONNECTED |
|
| CONNECTING |
|
| CONNECTED |
|
| RECONNECTING |
|
| FAILED |
|
API 参考
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 onConnectionStateChanged 回调。下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户 (UID 1) 和远程用户 (UID 2) 在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID 1 的
joinChannel请求。 - T1:调用
joinChannel200 ms 后,UID1 加入频道。同时,UID 1 收到onConnectionStateChanged(connectionStateConnecting, connectionChangedConnecting)回调。成功加入频道后,UID 1 收到onConnectionStateChanged(connectionStateConnected, connectionChangedJoinSuccess)和onJoinChannelSuccess回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
onUserJoined回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID 1 连续 4 秒没有收到服务器发送的任何数据,UID 1 收到
onConnectionStateChanged(connectionStateReconnecting, connectionChangedInterrupted)回调;同时 SDK 继续尝试重新加入频道。 - T5:UID 1 收到
onConnectionStateChanged(connectionStateReconnecting, connectionChangedInterrupted)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到onConnectionLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID 2 连续 20 秒没有收到来自 UID 1 的任何数据,则 SDK 判断 UID 1 离线。UID 2 收到
onUserOffline回调。 - T7:如果 UID 1 收到
onConnectionStateChanged(connectionStateReconnecting, connectionChangedInterrupted)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到onConnectionStateChanged(connectionStateFailed, connectionChangedJoinFailed)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
操作步骤
本节介绍如何使用 onConnectionStateChanged 回调来监控频道连接状态的变化。
在你的项目中,打开管理 IRtcEngineEventHandler 的文件,在 IRtcEngineEventHandler 初始化过程中加入 onConnectionStateChanged。
你可以从日志中读取当前连接状态,以及状态更改的触发原因。
另外,onConnectionStateChanged 中的 reason 参数也解释了连接状态改变的原因,可帮助你进行网络故障排除。 有关频道连接状态变化的原因以及排障方式,详见状态说明及排障指导。
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| Disconnected | 初始连接状态。它通常发生在:
|
| Connecting | 调用 joinChannel 方法后的瞬时状态。 |
| Connected | 发生在 App 成功加入频道后。SDK 还会触发 onJoinChannelSuccess 回调,上报本地客户端已经加入频道。 此时用户可以发布或订阅频道中的音频和视频。 |
| Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| Failed | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。 此时需调用 leaveChannel 离开当前频道,再调用 joinChannel 再次加入频道。 |
状态说明及排障指导
onConnectionStateChanged 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| Disconnected |
|
| Connecting |
|
| Connected |
|
| Reconnecting |
|
| Failed |
|
API 参考
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 OnConnectionStateChanged 回调。下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户 (UID1) 和远程用户 (UID2) 在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID1 的
JoinChannel请求。 - T1:调用
JoinChannel200 ms 后,UID1 加入频道。同时,UID1 收到OnConnectionStateChanged(CONNECTION_STATE_CONNECTING, CONNECTION_CHANGED_CONNECTING)回调。成功加入频道后,UID1 收到OnConnectionStateChanged(CONNECTION_STATE_CONNECTING, CONNECTION_CHANGED_JOIN_SUCCESS)和OnJoinChannelSuccess回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
OnUserJoined回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID1 连续 4 秒没有收到服务器发送的任何数据,UID1 收到
OnConnectionStateChanged(CONNECTION_STATE_RECONNECTING, CONNECTION_CHANGED_INTERRUPTED)回调;同时 SDK 继续尝试重新加入频道。 - T5:如果 UID 1 收到
OnConnectionStateChanged(CONNECTION_STATE_RECONNECTING, CONNECTION_CHANGED_INTERRUPTED)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到OnConnectionLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID2 连续 20 秒没有收到来自 UID1 的任何数据,则 SDK 判断 UID1 离线。UID2 收到
OnUserOffline回调。 - T7:如果 UID 1 收到
OnConnectionStateChanged(CONNECTION_STATE_RECONNECTING, CONNECTION_CHANGED_INTERRUPTED)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到OnConnectionStateChanged(CONNECTION_STATE_FAILED, CONNECTION_CHANGED_JOIN_FAILED)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
操作步骤
本节介绍如何使用 OnConnectionStateChanged 回调来监控频道连接状态的变化。
在你的项目中,打开管理 IRtcEngineEventHandler 的文件,在 IRtcEngineEventHandler 初始化进程中加入 OnConnectionStateChanged。
internal class UserEventHandler : IRtcEngineEventHandler
{
...
// 频道连接状态发生变化回调
public override void OnConnectionStateChanged(RtcConnection connection, CONNECTION_STATE_TYPE state,
CONNECTION_CHANGED_REASON_TYPE reason)
{
_helloVideoTokenAgora._state = state;
}
}你可以从日志中读取当前连接状态,以及状态更改的触发原因。
另外,OnConnectionStateChanged 中的 reason 参数也解释了连接状态改变的原因,可帮助你进行网络故障排除。有关频道连接状态变化的原因以及排障方式,详见状态说明及排障指导。
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| Disconnected | 初始连接状态。它通常发生在:
|
| Connecting | 调用 JoinChannel 方法后的瞬时状态。 |
| Connected | 发生在 App 成功加入频道后。SDK 还会触发 OnJoinChannelSuccess 回调,上报本地客户端已经加入频道。此时用户可以发布或订阅频道中的音频和视频。 |
| Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| Failed | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。 此时需调用 LeaveChannel 离开当前频道,再调用 JoinChannel 再次加入频道。 |
状态说明及排障指导
OnConnectionStateChanged 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| Disconnected |
|
| Connecting |
|
| Connected |
|
| Reconnecting |
|
| Failed |
|
API 参考
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 onConnectionStateChanged 回调。 下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户 (UID1) 和远程用户 (UID2) 在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID 1 的
joinChannel请求。 - T1:调用
joinChannel200 ms 后,UID1 加入频道。同时,UID 1 收到onConnectionStateChanged(connectionStateConnecting, connectionChangedConnecting)回调。成功加入频道后,UID 1 收到onConnectionStateChanged(connectionStateConnected, connectionChangedJoinSuccess)和onJoinChannelSuccess回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
onUserJoined回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID 1 连续 4 秒没有收到服务器发送的任何数据,UID 1 收到
onConnectionStateChanged(connectionStateReconnecting, connectionChangedInterrupted)回调;同时 SDK 继续尝试重新加入频道。 - T5:UID 1 收到
onConnectionStateChanged(connectionStateReconnecting, connectionChangedInterrupted)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到onConnectionLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID 2 连续 20 秒没有收到来自 UID 1 的任何数据,则 SDK 判断 UID 1 离线。UID 2 收到
onUserOffline回调。 - T7:如果 UID 1 收到
onConnectionStateChanged(connectionStateReconnecting, connectionChangedInterrupted)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到onConnectionStateChanged(connectionStateFailed, connectionChangedJoinFailed)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
操作步骤
本节介绍如何使用 onConnectionStateChanged 回调来监控频道连接状态的变化。
在你的项目中,打开管理 RtcEngineEventHandler 的文件,在 RtcEngineEventHandler 初始化过程中加入 onConnectionStateChanged。
你可以从日志中读取当前连接状态,以及状态更改的触发原因。
另外,onConnectionStateChanged 中的 reason 参数也解释了连接状态改变的原因,可帮助你进行网络故障排除。有关频道连接状态变化的原因以及排障方式,详见状态说明及排障指导。
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| Disconnected | 初始连接状态。它通常发生在:
|
| Connecting | 调用 joinChannel 方法后的瞬时状态。 |
| Connected | 发生在 App 成功加入频道后。SDK 还会触发 onJoinChannelSuccess 回调,上报本地客户端已经加入频道。 此时用户可以发布或订阅频道中的音频和视频。 |
| Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| Failed | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。 此时需调用 leaveChannel 离开当前频道,再调用 joinChannel 再次加入频道。 |
状态说明及排障指导
onConnectionStateChanged 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| Disconnected |
|
| Connecting |
|
| Connected |
|
| Reconnecting |
|
| Failed |
|
API 参考
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 onConnectionStateChanged 回调。下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户 (UID 1) 和远程用户 (UID 2) 在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID 1 的
joinChannel请求。 - T1:调用
joinChannel200 ms 后,UID1 加入频道。同时,UID 1 收到onConnectionStateChanged(connectionStateConnecting, connectionChangedConnecting)回调。成功加入频道后,UID 1 收到onConnectionStateChanged(connectionStateConnected, connectionChangedJoinSuccess)和onJoinChannelSuccess回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
onUserJoined回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID 1 连续 4 秒没有收到服务器发送的任何数据,UID 1 收到
onConnectionStateChanged(connectionStateReconnecting, connectionChangedInterrupted)回调;同时 SDK 继续尝试重新加入频道。 - T5:UID 1 收到
onConnectionStateChanged(connectionStateReconnecting, connectionChangedInterrupted)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到onConnectionLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID 2 连续 20 秒没有收到来自 UID 1 的任何数据,则 SDK 判断 UID 1 离线。UID 2 收到
onUserOffline回调。 - T7:如果 UID 1 收到
onConnectionStateChanged(connectionStateReconnecting, connectionChangedInterrupted)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到onConnectionStateChanged(connectionStateFailed, connectionChangedJoinFailed)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
操作步骤
本节介绍如何使用 onConnectionStateChanged 回调来监控频道连接状态的变化。
在你的项目中,打开管理 IRtcEngineEventHandler 的文件,在 IRtcEngineEventHandler 初始化过程中加入 onConnectionStateChanged。
你可以从日志中读取当前连接状态,以及状态更改的触发原因。
另外,onConnectionStateChanged 中的 reason 参数也解释了连接状态改变的原因,可帮助你进行网络故障排除。 有关频道连接状态变化的原因以及排障方式,详见状态说明及排障指导。
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| Disconnected | 初始连接状态。它通常发生在:
|
| Connecting | 调用 joinChannel 方法后的瞬时状态。 |
| Connected | 发生在 App 成功加入频道后。SDK 还会触发 onJoinChannelSuccess 回调,上报本地客户端已经加入频道。 此时用户可以发布或订阅频道中的音频和视频。 |
| Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| Failed | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。 此时需调用 leaveChannel 离开当前频道,再调用 joinChannel 再次加入频道。 |
状态说明及排障指导
onConnectionStateChanged 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| Disconnected |
|
| Connecting |
|
| Connected |
|
| Reconnecting |
|
| Failed |
|
API 参考
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 onConnectionStateChanged 回调。下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户 (UID1) 和远程用户 (UID2) 在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID1 的
joinChannel请求。 - T1:调用
joinChannel200 ms 后,UID1 加入频道。同时,UID1 收到onConnectionStateChanged(CONNECTING, CONNECTING)回调。成功加入频道后,UID1 收到onConnectionStateChanged(CONNECTED, JOIN_SUCCESS)和onJoinChannelSuccess回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
onUserJoined回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID1 连续 4 秒没有收到服务器发送的任何数据,UID1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)回调;同时 SDK 继续尝试重新加入频道。 - T5:如果 UID 1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到onConnectionLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID2 连续 20 秒没有收到来自 UID1 的任何数据,则 SDK 判断 UID1 离线。UID2 收到
onUserOffline回调。 - T7:如果 UID 1 收到
onConnectionStateChanged(RECONNECTING, INTERRUPTED)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到onConnectionStateChanged(FAILED, JOIN_FAILED)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
操作步骤
本节介绍如何使用 onConnectionStateChanged 回调来监控频道连接状态的变化。
在你的项目中,打开管理 IRtcEngineEventHandler 的文件,在 IRtcEngineEventHandler 初始化进程中加入 onConnectionStateChanged。
你可以从日志中读取当前连接状态,以及状态更改的触发原因。
另外,onConnectionStateChanged 中的 reason 参数也解释了连接状态改变的原因,可帮助你进行网络故障排除。有关频道连接状态变化的原因以及排障方式,详见状态说明及排障指导。
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| Disconnected | 初始连接状态。它通常发生在:
|
| Connecting | 调用 joinChannel 方法后的瞬时状态。 |
| Connected | 发生在 App 成功加入频道后。SDK 还会触发 onJoinChannelSuccess 回调,上报本地客户端已经加入频道。此时用户可以发布或订阅频道中的音频和视频。 |
| Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| Failed | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。 此时需调用 leaveChannel 离开当前频道,再调用 joinChannel 再次加入频道。 |
状态说明及排障指导
onConnectionStateChanged 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| Disconnected |
|
| Connecting |
|
| Connected |
|
| Reconnecting |
|
| Failed |
|
示例项目
声网提供了开源的示例项目供你参考,你可以前往下载或查看其中的源代码。
API 参考
在实时音视频场景下,App 端与声网 SD-RTN™ 之间的连接状态会随着客户端加入或离开频道而发生变化,也可能由于网络或鉴权问题而导致连接中断。
本文介绍各种频道连接状态,状态改变原因和处理方式,帮助你更好地管理用户和排除网络故障。
技术原理
连接状态
当连接状态发生变化时,声网会发送 FOnConnectionStateChanged 回调。下图展示各种连接状态,以及用户从加入到离开频道的过程中连接状态如何改变:
断线重连
通信过程中,如果因网络问题导致连接断开,SDK 会自动开启断线重连机制。下图展示本地用户(UID1)和远程用户(UID2)在以下过程中收到的回调:本地用户加入频道、发生网络异常、连接中断、重新加入频道。
图解如下:
- T0:SDK 接收到 UID1 的
JoinChannel请求。 - T1:调用
JoinChannel200 ms 后,UID1 加入频道。同时,UID1 收到FOnConnectionStateChanged(CONNECTING, CONNECTING)回调。成功加入频道后,UID1 收到FOnConnectionStateChanged(CONNECTED, JOIN_SUCCESS)和FOnJoinChannelSuccess回调。 - T2:因网间传输延迟,UID 2 感知 UID 1 加入频道约有 100 毫秒的延迟,此时 UID 2 收到
FOnUserJoined回调。 - T3:某个时间点 UID 1 客户端因断网等原因导致上行网络变差。SDK 自动尝试重新加入频道。
- T4:如果 UID1 连续 4 秒没有收到服务器发送的任何数据,UID1 收到
FOnConnectionStateChanged(RECONNECTING, INTERRUPTED)回调;同时 SDK 继续尝试重新加入频道。 - T5:如果 UID 1 收到
FOnConnectionStateChanged(RECONNECTING, INTERRUPTED)后连续 10 秒没有收到服务器发送的任何数据,UID 1 会收到FOnConnectionLost回调;同时 SDK 继续尝试重新加入频道。 - T6:如果 UID2 连续 20 秒没有收到来自 UID1 的任何数据,则 SDK 判断 UID1 离线。UID2 收到
FOnUserOffline回调。 - T7:如果 UID 1 收到
FOnConnectionStateChanged(RECONNECTING, INTERRUPTED)后连续 20 分钟无法重新加入频道,SDK 不再继续尝试。UID 1 收到FOnConnectionStateChanged(FAILED, JOIN_FAILED)回调;用户需要退出当前频道,然后重新加入频道。
前提条件
在进行操作之前,请确保你已经在项目中实现了基本的实时音视频功能。详见实现音视频互动。
实现方法
本节介绍如何使用 FOnConnectionStateChanged 回调来监控频道连接状态的变化。
-
创建 OnConnectionStateChanged 回调函数,配置以下参数:
表格内容超出当前宽度,可横向滚动查看更多列。输入参数 数据类型 参数描述 stateEnum 当前网络连接状态。详见 ECONNECTION_STATE_TYPE。reasonEnum 引起当前网络连接状态改变的原因。详见 ECONNECTION_CHANGED_REASON_TYPE。 -
添加对 OnConnectionStateChanged 回调的监听,如下图所示:
- 当频道连接状态发生变化,触发 OnConnectionStateChanged 回调时,打印监听到的网络连接状态信息。你可以从日志中读取当前连接状态以及状态更改的触发原因,进而帮助网络故障排查,详见状态说明及排障指导。如下图所示:
参考信息
连接状态
如前文图中所示,App 在加入和离开频道前后可能出现以下 5 种连接状态:
| 连接状态 | 描述 |
|---|---|
| Disconnected | 初始连接状态。它通常发生在:
|
| Connecting | 调用 JoinChannel 方法后的瞬时状态。 |
| Connected | 发生在 App 成功加入频道后。SDK 还会触发 FOnJoinChannelSuccess 回调,上报本地客户端已经加入频道。此时用户可以发布或订阅频道中的音频和视频。 |
| Reconnecting | 发生在连接中断时。SDK 会在中断后自动尝试重新连接。
|
| Failed | 连接失败。发生在 SDK 在 20 分钟内无法加入频道、并且 SDK 停止重新连接频道时。此时需调用 LeaveChannel 离开当前频道,再调用 JoinChannel 再次加入频道。 |
状态说明及排障指导
FOnConnectionStateChanged 中的 reason 参数描述了连接状态更改原因。
下表列出了不同连接状态和状态变化原因之间的映射关系,以及发生网络中断时故障时的处理方法。
| 连接状态 | 状态说明和排障指导 |
|---|---|
| Disconnected |
|
| Connecting |
|
| Connected |
|
| Reconnecting |
|
| Failed |
|
示例项目
声网提供了开源的示例项目供你参考,你可以前往下载或查看其中的源代码。