防炸麦防漏麦
更新时间: 2024/09/18 16:26:13
为了维护语聊房良好的聊天秩序,防止出现炸麦和漏麦现象,网易云信提供最佳实践,帮助您有效避免炸麦和漏麦等问题的发生,提升语聊的质量和体验。
基本概念
-
幽灵麦
幽灵麦是指在音视频房间中出现非麦上用户说话的情况,即出现未知用户发言的情况。幽灵麦分为两种,炸麦和漏麦。
-
炸麦
炸麦是指未经授权的用户进入房间或者开麦,制造噪音,并持续发送违规的音视频内容,破坏聊天或互动的秩序。
可能原因:非法用户利用某个 AppKey 配置 Token 有效期过长的问题,劫持 AppID 、UserID、RoomID 和 Token 重复登录。
-
漏麦
漏麦是指本应下麦或静音的用户未成功下麦或静音,导致音视频房间中实际说话用户与客户端上显示的麦位信息不相符。
可能原因:由于网络或其他原因,导致信令丢失,SDK 或云信服务器没有获取到上下麦信息。即业务侧的麦位状态与音视频服务器上实际的推流状态不一致。
防炸麦
思路
-
找出可能是幽灵麦的用户 ID。
幽灵麦 UID = RTC 当前正在发流的UID数组 - 业务麦位正在发流的UID数组
-
让该用户停止发送音频。
实现方法
-
提高 Token 安全性
-
在服务端生成Token,并妥善保管 AppKey 和 AppSecret,不要对外公开。通过生成 Token 并进行鉴权,我们可以有效控制用户的登录权限,避免非法用户重复登录房间。
-
统计房间内用户的平均在线时间,并根据该时间合理设置 Token 过期时间(ttlSec)。当 Token 过期后,非法用户将无法使用该 Token 再次登录房间。这样可以限制非法用户长时间占用房间资源。
-
推荐使用 RTC 的高级 Token 鉴权,相比于基础 Token 鉴权,高级 Token 鉴权会在校验 Token 的同时也校验权限密钥(permissionKey),只有符合约定的算法规则,才会允许用户加入房间且赋予指定的发流权限。
-
使用高级 Token 鉴权时,请注册
onPermissionKeyWillExpire
回调,监听 Token 即将过期的事件。当收到该回调时,客户端可以向服务端申请生成新的 permissionKey,并调用updatePermissionKey
方法将新生成的 permissionKey 传给 SDK,以确保用户可以继续正常使用房间内的功能。
-
-
找出幽灵麦的用户 ID
-
您的业务服务器监听 RTC 的用户开始发布视频流 和 用户开始发布音频流 回调事件,维护当前房间内正在说话的成员列表。
请在网易云信控制台,开通以下事件的抄送,具体操作步骤请参见开通 RTC 消息抄送服务。
-
业务服务器收到以上事件后,检查发流的用户是否在麦位上,如果不在麦位上,则该用户为幽灵麦用户。
-
-
将用户移出房间或封禁该用户。
根据业务需要,选择以下两种方案,让幽灵麦用户停止发送音频。
-
调用 RTC 服务端的移除房间成员 接口将幽灵麦用户踢出房间。被踢的用户会收到离开房间的回调,UI层做相应的退房逻辑以及提示即可。
-
调用 RTC 服务端的设置房间成员封禁状态 接口封禁该幽灵麦用户,使其发布的音视频不被订阅。
您可以设置封禁时长为 0,表示一直维持封禁状态,直到被封禁成员重新加入房间后解禁。
被封禁用户重新上麦后,如果解除禁麦的请求失败,或者请求超时,会导致该用户上麦后无声的问题。您的服务器需要做好失败重试的机制。
-
防漏麦
-
当观众下麦或主播将观众移出麦位时,业务服务器可以调用 RTC 服务端的查询房间媒体流状态 接口,获取音视频房间内各用户的媒体流状态。
-
将获取到的媒体流状态与用户麦位状态进行对比,如果用户没有被静音,RTC 服务端显示该用户还在发流,则业务服务器可以重发相关事件给客户端。
-
客户端根据业务需要重新执行下麦或主播将观众移出麦位的操作。