Voice Interface

在用户使用产品时,运用语音界面创建和管理用户之间的语音聊天室。

Preview
阅读时间7分钟

Epic在线服务(EOS)语音 可帮助你为用户创建和管理语音聊天室。你可以通过EOS Lobbies,在Epic的服务器上或自己的后端服务器上创建EOS语音聊天室。用户可以跨多平台进行一对一交流或小组交流,也可以在比赛期间或在产品大厅中进行交流。

使用EOS语音生成的连接只在经身份验证的用户间建立,并会检查语音服务器,且不会暴露用户的个人信息(PI)。EOS会处理所有语音服务器的扩展、服务质量、维护、多区域状态和其他机制。

语音界面需要1.13版或更高版本的EOS SDK。

在线子系统(OSS))和配有虚幻引擎4.27版本的语音聊天插件将完全支持语音。

EOS语音功能当前不支持Linux系统。

如需使用语音界面,你应当:

  1. 回顾和决定你想在游戏中使用的集成方法
  2. 研究语音示例(CC#),了解在产品中使用Voice界面的方法。
  3. 将语音界面集成到应用程序中:
    1. 配置客户端策略
    2. 根据所选集成方法接入语音界面。
  4. 回顾针对语音界面的最佳实践语音指标使用限制

语音集成方法

你可以使用两种方法将语音集成到应用程序当中:

  • 使用大厅语音:将EOS SDK集成到 游戏客户端,让 EOS大厅 负责房间管理和授权。使用大厅界面仅需客户端集成,并提供房间所有权、搜索和邀请。

  • 使用可信服务器应用程序:将EOS SDK集成到 游戏客户端 中,并将SDK或Web API集成到 可信服务器 应用程序中。此方法可让开发人员自定义房间管理和授权,赋予开发人员最大的灵活度,但集成工作量更大。

大厅语音

在使用大厅语音(Voice with Lobbies)时,将EOS SDK集成到游戏客户端,并让大厅充当可信服务器应用程序的角色。大厅为成员生成 roomIds,创建 tokens,并授权 joinkickmute 其他玩家的请求。

为保障房间安全,可将大厅设置为私人和需邀请

策略配置

为使用 userRequired 的游戏客户端配置客户端策略并允许: ** 大厅* 针对此客户端配有适当操,如connectreadLobby等等

  • 语音 配有lobbyConference动作

createRoomTokenmutekick 预期仅供服务器使用,且应随时处于禁用状态。否则,这将充许游戏客户端访问任何 roomId

大厅的语音流程

  1. 游戏客户端 初始化SDK,并获得 EOS_HLobby 界面和 EOS_RTCAudio 界面。
  2. 游戏客户端 使用连接界面为本地用户授权。
  3. 游戏客户端 使用 EOS_Lobby_CreateLobby 创建新大厅并启用_allowConference_。
  4. 大厅请求房间令牌,并使用媒体服务器URL返回令牌。EOS SDK随后会使用令牌加入语音房间。
  5. 其他加入大厅的用户会自动收到与之匹配的房间令牌,以加入语音会议。
  6. 厅主可向其他玩家发送邀请,同时用户可搜索并加入公共大厅,无需邀请。
  7. 如果秘密会话锁返回到大厅创建上,厅主可将其他玩家禁言,或踢走其他玩家。
  8. 所有客户端使用 EOS_RTCEOS_RTCAudio 界面管理音频输入/输出,变更本地禁言/喇叭状态,或离开房间。

EOS SDK大厅示例演示了此配置。

如果你想或需要为语音托管服务器组件,可以改为使用 可信服务器应用程序集成

可信服务器应用程序的语音

策略配置

为服务器配置客户端策略可使用:

  • userRequired 已禁用,以允许服务器透过连接界面使用 clientIdclient secret 进行授权。
  • 语音(Voice) 带有 createRoomTokenkickmute,分别允许服务器为任何 roomId 的玩家创建房间令牌,移除玩家和撤回他们的令牌,以及将玩家禁言。

可信服务器的语音流程

  1. 游戏客户端 初始化SDK,并请求如专用服务器或Web应用程序等可信应用程序进入语音房间。
  2. 可信服务器透过 连接界面 使用 ClientIdClient Secret 进行身份验证。
  3. 服务器会生成 roomId,并代表玩家为他们的 ProductUserIds 请求房间令牌和EOS语音后端的给定 `roomId。
  4. 可信服务器使用现有通信方法将房间令牌和媒体服务器URL返回到每个玩家的游戏客户端应用程序。
    • 客户端和服务器之间的通信方法由你决定,可通过网络复制、信息收发、HTTP或任何其他现有通信方法来完成。
  5. 游戏客户端 使用EOS_RTC_JoinRoom连接媒体服务器,以加入房间,且令牌由服务器提供。
  6. 其他用户可以向可信服务器请求一个用于同一房间的 ProductUserId令牌,然后使用该令牌连接媒体服务器以加入房间。
    • 服务器逻辑会规定授权方法,而该方法可确定谁可以加入特定的房间,以及将其他用户禁言,或从其从房间踢走。该集成方法让开发人员能够自定义相关内容。
    • 语音服务器示例利用进入房间的密码和与房主共享的锁来演示此操作,同时需对踢人或禁言等操作提供该示例。
  7. 所有客户端使用 EOS_RTCEOS_RTCAudio 界面管理音频输入/输出,变更本地禁言/喇叭状态,或离开房间。

EOS SDK 语音客户端和语音服务器示例 (CC#)演示了此配置。

RTC界面的句柄

RTC功能有3个可用界面句柄,你可以通过平台界面获得。

EOS_HRTCAdmin 句柄

  • 语音后端会使由大厅管理的语音房间与开发人员服务器管理的房间分开。这意味着无法使用 EOS_HRTCAdmin 界面实现在大厅会议里踢走参与者或将其禁言,仅能从大厅界面处完成上述操作。
  • 用于管理功能,如创建房间令牌、踢人或禁言。
  • 应仅在可信服务器应用程序上使用,不得用于游戏客户端或共享社区服务器上。
  • 使用EOS_Platform_GetRTCAdminInterface检索此句柄

EOS_HRTC 句柄

  • 用于未指定音频/语音的房间关卡功能,如在用户离开或加入房间时的通知。
  • 使用EOS_Platform_GetRTCInterface获取此句柄

EOS_HRTCAudio 句柄

  • EOS_HRTC 的特定语音子界面。
  • 使用 EOS_RTC_GetAudioInterface](API:EOS_RTC_GetAudioInterface)通过 EOS_HRTC 句柄获取此句柄

在Windows上实现语音接口

对于Windows系统,在创建平台前,你必须将 EOS_Windows_RTCOptions 传入平台接口的 RTCOptions

在基于C语言的的SDK示例中(下面复制了一个代码片段,但完整的细节请看语音接口-C SDK页面),会在windows下做了以下工作。

  • 创建一个 EOS_Windows_RTCOptions 类的实例,命名为 WindowsRtcOptions
  • 配置它的属性。
  • RtcOptions.PlatformSpecificOptions 的值指向 WindowsRtcOptions 的地址。

适用于Windows的C SDK示例代码片段:

最佳实践

双向禁言

为了符合多个平台要求,如黑名单,你应使用 EOS_RTC_BlockParticipant在必要时实现玩家的双向禁言。

家长控制

在你的会话中启用语音前,考虑检查家长控制设置。

使用限制

语音有特定界面使用率限制。有关节流、用量配额和最佳实践的一般信息,请参见服务使用限制

功能服务限制
房间人数上限16
每个用户/分钟最高请求量50

语音指标

你可以在 开发人员门户 中的 你的产品(Your Product) > 游戏服务(Game Services) > 语音(Voice) 下访问过去30天内的语音运营指标。

你可以按时间隔(5分钟、30分钟、1小时、1天、7天、14天和30天),以及按平台(Windows、PS4和PS5等)筛选数据。

开始使用语音服务后,数据会自动填充图表,无需你手动进行其他设置。

指标包括:

  • 每个平台已连接用户:所选时间段内连接语音服务的用户人数,按平台划分。
  • 语音用户状态:语音SDK状态分类(即连接、错误和断开连接等等)。
  • 加入房间:总体用户加入错误率
  • 加入房间错误:关于指定加入房间错误和相关错误率的详细信息。
  • 房间大小:根据所有平台参与者计数统计的房间大小分布。
  • 错误:关于错误和相关错误率的详细信息。