你是否遇到过这样的场景,当你使用麦克风进行语音通信时,有时会出现一种情况:即使你没有说话,其他人仍然能够听到你的声音。这就是所谓的幽灵麦。
什么是幽灵麦?
幽灵麦是指在音视频房间中出现非麦上用户说话的情况,即出现未知用户发言的情况。幽灵麦可能由多种原因引起,例如麦克风故障、设置问题、网络延迟等。这种现象通常会干扰其他人的通信,因为他们会听到不必要的背景噪音或其他人的声音。
幽灵麦分为两种,炸麦和漏麦。炸麦是指未经授权的用户进入房间或者开麦,制造噪音,并持续发送违规的音视频内容,破坏聊天或互动的秩序。漏麦是指本应下麦或静音的用户未成功下麦或静音,导致音视频房间中实际说话用户与客户端上显示的麦位信息不相符。
常见的幽灵麦现象
- 非法用户利用某个 AppID 配置 Token 有效期过长的问题,劫持 AppID 、UserID、RoomID 和 Token 重复登录。
- 非法用户非法登录房间后,制造噪音,不断发送违规的音视频内容,破坏聊天或互动的秩序。
- 非法用户劫持开发者后台下发的信令消息,扰乱房间内用户的上下麦等麦位操作,阻止客户端获取麦位信息。
- 由于业务漏洞,音视频房间中实际说话的情况与客户端上显示的麦位信息不相符,出现未知用户发言的情况。
语聊房中如何预防幽灵麦
幽灵麦在语聊房中较为常见。在语聊房中,防止幽灵麦现象的出现是维护良好聊天秩序的重要措施。ZEGO即构针对幽灵麦问题,有三种解决方案:
- 使用Token鉴权:即用户在登入房间时,对其身份进行校验,如果校验不成功,则不允许其进入房间。相关实现可参考 使用 Token 鉴权。
- 流ID不和用户ID绑定:我们常遇到的场景是会将流ID和用户ID进行绑定,使用用户的ID当做流ID进行推拉流。比如一个用户登录房间A进行聊天,此时直接关闭APP,立即重新登录房间B,并上麦推拉流。由于流ID和用户ID是一样的,我们很难发现用户是什么时候掉线的,并且在用户掉线时,会自动尝试重连,重连有90s的时间,如果在这个时间内产生了上述操作,那么,在之前房间A拉的流没有停止,所以还是能听到他的声音。如果使用流ID不和用户ID绑定的方案,每次登录房间后推流的ID不一样,即使上一次的流链接还存在,但是没有数据,也就不会出现幽灵麦的问题。
- 麦位管理配合流变更通知:常用的麦位管理会建议用户使用第三方麦位管理,同时为避免不稳定,可以配合流新增的回调做处理。如果我们这里流触发新增了,再更新UI显示在麦上,如果流没有新增,即使第三方麦位管理显示已经成功上麦,说话也不成功,删除下麦也是同理。
另外,为了防止幽灵麦,可以告知用户使用语聊房时:
- 检查麦克风设置:确保麦克风设置正确,没有意外开启。检查麦克风是否静音,以避免不必要的声音传输。
- 测试麦克风:在设置中进行麦克风测试,确保它正常工作。如果发现问题,可能需要更换麦克风或修复故障。
- 调整麦克风灵敏度:降低麦克风的灵敏度,以减少不必要的声音捕捉。
总之,幽灵麦是一个常见的问题,但通过适当的设置和调整,我们可以有效地解决它。