防炸麦防漏麦

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

为了维护语聊房良好的聊天秩序,防止出现炸麦和漏麦现象,网易云信提供最佳实践,帮助您有效避免炸麦和漏麦等问题的发生,提升语聊的质量和体验。

基本概念

  • 幽灵麦

    幽灵麦是指在音视频房间中出现非麦上用户说话的情况,即出现未知用户发言的情况。幽灵麦分为两种,炸麦和漏麦。

  • 炸麦

    炸麦是指未经授权的用户进入房间或者开麦,制造噪音,并持续发送违规的音视频内容,破坏聊天或互动的秩序。

    可能原因:非法用户利用某个 AppKey 配置 Token 有效期过长的问题,劫持 AppID 、UserID、RoomID 和 Token 重复登录。

  • 漏麦

    漏麦是指本应下麦或静音的用户未成功下麦或静音,导致音视频房间中实际说话用户与客户端上显示的麦位信息不相符。

    可能原因:由于网络或其他原因,导致信令丢失,SDK 或云信服务器没有获取到上下麦信息。即业务侧的麦位状态与音视频服务器上实际的推流状态不一致。

防炸麦

思路

  1. 找出可能是幽灵麦的用户 ID。

    幽灵麦 UID = RTC 当前正在发流的UID数组 - 业务麦位正在发流的UID数组

  2. 让该用户停止发送音频。

实现方法

  1. 提高 Token 安全性

    1. 在服务端生成Token,并妥善保管 AppKey 和 AppSecret,不要对外公开。通过生成 Token 并进行鉴权,我们可以有效控制用户的登录权限,避免非法用户重复登录房间。

    2. 统计房间内用户的平均在线时间,并根据该时间合理设置 Token 过期时间(ttlSec)。当 Token 过期后,非法用户将无法使用该 Token 再次登录房间。这样可以限制非法用户长时间占用房间资源。

    3. 推荐使用 RTC 的高级 Token 鉴权,相比于基础 Token 鉴权,高级 Token 鉴权会在校验 Token 的同时也校验权限密钥(permissionKey),只有符合约定的算法规则,才会允许用户加入房间且赋予指定的发流权限。

    4. 使用高级 Token 鉴权时,请注册 onPermissionKeyWillExpire 回调,监听 Token 即将过期的事件。当收到该回调时,客户端可以向服务端申请生成新的 permissionKey,并调用 updatePermissionKey 方法将新生成的 permissionKey 传给 SDK,以确保用户可以继续正常使用房间内的功能。

  2. 找出幽灵麦的用户 ID

    1. 您的业务服务器监听 RTC 的用户开始发布视频流用户开始发布音频流 回调事件,维护当前房间内正在说话的成员列表。

      请在网易云信控制台,开通以下事件的抄送,具体操作步骤请参见开通 RTC 消息抄送服务

      开始发布音视频流的消息抄送.png

    2. 业务服务器收到以上事件后,检查发流的用户是否在麦位上,如果不在麦位上,则该用户为幽灵麦用户。

  3. 将用户移出房间或封禁该用户。

    根据业务需要,选择以下两种方案,让幽灵麦用户停止发送音频。

    • 调用 RTC 服务端的移除房间成员 接口将幽灵麦用户踢出房间。被踢的用户会收到离开房间的回调,UI层做相应的退房逻辑以及提示即可。

    • 调用 RTC 服务端的设置房间成员封禁状态 接口封禁该幽灵麦用户,使其发布的音视频不被订阅。

      您可以设置封禁时长为 0,表示一直维持封禁状态,直到被封禁成员重新加入房间后解禁。

      被封禁用户重新上麦后,如果解除禁麦的请求失败,或者请求超时,会导致该用户上麦后无声的问题。您的服务器需要做好失败重试的机制。

防漏麦

  1. 当观众下麦或主播将观众移出麦位时,业务服务器可以调用 RTC 服务端的查询房间媒体流状态 接口,获取音视频房间内各用户的媒体流状态。

  2. 将获取到的媒体流状态与用户麦位状态进行对比,如果用户没有被静音,RTC 服务端显示该用户还在发流,则业务服务器可以重发相关事件给客户端。

  3. 客户端根据业务需要重新执行下麦或主播将观众移出麦位的操作。

此文档是否对你有帮助?
有帮助
去反馈
  • 基本概念
  • 防炸麦
  • 思路
  • 实现方法
  • 防漏麦