断线重连机制是什么?RTC中如何实现断线重连机制
2024/04/22

断线重连机制是什么?

断线重连是指在计算机网络中,当网络连接遇到异常中断或者断开时,系统会自动尝试重新建立连接,以保证网络通信的连续性和稳定性。断线重连是一种常见的网络通信技术,广泛应用于各种计算机网络场景,包括互联网、局域网、广域网等。

断线重连在 RTC 中也是一种常用的技术手段,用于在网络连接中断时自动重新建立连接,确保通信的可靠性和稳定性。

本文介绍断线重连在WebRTC中实现的步骤,断线重连的最佳实践(在 ZEGO音视频SDK中的逻辑处理)。

WebRTC 中实现断线重连的步骤

在 WebRTC 中,实现音视频断线重连通常需要以下步骤:

  1. 长连接与心跳机制
    • 建立长连接,保持客户端和服务器之间的通信。
    • 实现心跳机制,定期发送心跳包以检测连接状态。
  2. 断线重连策略
    • 当连接断开时,设置一个重连计时器。
    • 在一定时间后,尝试重新连接服务器。
    • 如果重连失败,可以根据具体情况进行处理,例如更新 UI 状态。
  3. WebRTC PeerConnection 监听
    • 使用 OnIceConnectionChange 方法监听 ICE 连接状态的变化。
    • 当连接状态变为 kIceConnectionDisconnected 时,触发断线重连逻辑。

请注意,具体实现可能因应用场景和需求而异。你可以根据你的项目要求,选择合适的断线重连策略和实现方式。

ZEGO音视频SDK断线重连逻辑说明

ZEGO音视频SDK支持断线重连机制。下面将介绍房间重连下的 SDK 的逻辑处理。

ZEGO音视频SDK是一款实时的音视频互动服务产品,能够为开发者提供便捷接入、高可靠、多平台互通的音视频服务。通过低至 200 ms 的端到端平均时延,业内领先的保障弱网质量的 QoS 策略,并结合强大的 3A 处理能力,完美支持一对多、多对多的实时音视频通话、直播、会议等场景。详情可通过https://www.zego.im/product/realtime-video了解

房间重连

用户登录房间后,因网络信号问题/网络类型切换问题导致的与房间断连,SDK 内部会进行自动重连。

用户可通过监听 onRoomStateChanged 回调实时监控自己在本房间内的连接状态。在登录房间时将参数 config 中的 isUserStatusNotify 设置为 “true” 的前提下,房间内的其他用户可通过 onRoomUserUpdate 回调获取到某用户连接状态变化的通知。

房间状态示意图

房间断连后重连的情况有如下三种:

情况一:在服务端判断用户 A 心跳超时前重连成功

如果用户 A 短暂断线,但是在 90s 内重连成功了,那么用户 B 不会收到 onRoomUserUpdate 的回调通知。

  • T0 = 0s:用户 A 的 SDK 收到客户端发起的 loginRoom 请求。
  • T1 ≈ T0 + 120 ms:通常在调用 loginRoom 120 ms 后,客户端可以加入房间。加入房间过程中,用户 A 的客户端会收到 2 次 onRoomStateChanged 回调,分别通知客户端正在连接房间(logining)以及连接房间成功(logined)。
  • T2 ≈ T1 + 100 ms:因网络传输延迟,用户 B 约在 100 ms 后收到 onRoomUserUpdate 回调以通知客户端用户 A 加入房间。
  • T3:某个时间点,用户 A 因网络断开等原因导致上行网络变差。SDK 会尝试重新加入房间,同时客户端会收到 onRoomStateChanged 回调以通知客户端用户 A 正在断线重连。
  • T5 = T3 + time(小于 90s):用户 A 在重连时间内恢复网络,重连成功。会收到 onRoomStateChanged 回调以通知客户端用户 A 重连成功。

情况二:在服务端判断用户 A 心跳超时后重连成功:

  • T0、T1、T2、T3 时刻的情况同“情况一:在服务端判断用户 A 心跳超时前重连成功”中的 T0、T1、T2、T3。
  • T4′ ≈ T3 + 90s:用户 B 此时收到 onRoomUserUpdate 回调以通知用户 A 已断线。
  • T5′ = T3 + time(大于 90s,小于 20 min):用户 A 在重连时间内恢复网络,重连成功。会收到 onRoomStateChanged 回调以通知客户端用户 A 重连成功。
  • T6′ ≈ T5′ + 100 ms:因网络传输延迟,用户 B 约在 100 ms 后收到 onRoomUserUpdate 回调以通知客户端用户 A 加入房间。

情况三:用户 A 重连失败:

  • T0、T1、T2、T3 时刻的情况同“情况一:在服务端判断用户 A 心跳超时前重连成功”中的 T0、T1、T2、T3。
  • T4" ≈ T3 + 90s:用户 B 此时收到 onRoomUserUpdate 回调以通知用户 A 已断线。
  • T5" = T3 + 20 min:如果用户 A 连续 20 min 内无法重新加入房间,SDK 不再继续尝试重新连接。用户 A 将会收到 onRoomStateChanged 回调以通知客户端重连失败。

以上就是ZEGO音视频SDK中的房间重连逻辑说明。当然,在RTC中还有常见的推流重连、拉流重连,详细的重连逻辑处理可阅读《Express SDK 是否支持断线重连机制?》进行了解。

扫一扫,获取更多服务与支持
热门推荐
H.264 与 H.265 视频编解码器的区别,哪个更好?
2024/07/26
直播产品中的“六边形战士”来了!ZEGO 超低延迟直播,高质量带来新增长!
2024/07/23
什么是抖动?如何使用抖动缓冲区来减少抖动
2024/07/22
热门标签
AI 降噪
AI课堂
ExpressSDK
MSDN
RTI
SEI
webrtc
ZIM
互动白板
即构融资
在线KTV
在线K歌
屏幕共享
录屏采集
数智人
直播技术
范围语音
行业报告
语聊房
语音社交
超分
音视频
音视频开发
音视频技术
音频编码
关注我们
获得更多服务与支持了解价格与优惠 扫码关注我们
关注我们
获得更多服务与支持了解价格与优惠 扫码关注我们