Game Chat 2 简介

使用 Game Chat 2 可将语音和文本聊天通信添加到你的应用,同时尊重用户的隐私设置并满足与语音和文本聊天有关的 Xbox 主机 GDK 游戏要求。 Game Chat 2 依赖于 GDK 游戏来提供网络传输。 如果你正在寻找同时包含聊天音频和传输的一体化解决方案,请考虑 Microsoft Azure PlayFab Party。 有关特定于 API 的引用的详细信息,请参阅 API 内容(游戏聊天 2)

注意

游戏聊天 2 和 PlayFab Party API 使用相同的内部平台功能,不能在游戏内并行使用。

游戏聊天 2 提供下表中显示的功能,用于管理游戏的通信。

功能 说明
通信关系 提供对用户之间通信方式的精细控制。 游戏聊天 2 需要定义每对用户之间的明确关系,而不是指定团队或频道。 游戏聊天 2 通信关系支持任意一对用户之间的单向和双向通信。 可以相互独立地配置语音和文本通信关系。
辅助功能 尊重用户的“游戏聊天脚本”首选项,并执行转换,以分别创建表示传入语音音频的聊天文本消息,并播放传出聊天文本消息的合成语音文本。
Xbox 服务集成 使用 Xbox 服务来确保尊重每个用户的偏好和特权。
语音活动检测 执行语音活动检测,以确定语音数据何时包含语音活动。
自动增益控制 执行自动增益控制,以最大程度减小用户麦克风输出中的差异。
编解码器 将传递到应用的远程实例的音频数据编码。 在 Xbox One 上,此编码(和接收端上的编码)采用硬件加速。
chat_manager::start/finish_processing_state_changes - 应用在每个 UI 框架中调用的方法对,用于执行异步操作,以 game_chat_state_change 结构的形式检索要处理的结果。 然后在完成时释放相关的资源。
chat_manager::start/finish_processing_data_frames 用于将游戏聊天 2 添加到应用的传输层的方法对。 应用在每个网络框架中调用这些方法,检索 game_chat_data_frame 对象并将这些对象分发到远程设备上的应用实例,然后在完成后释放相关资源。
chat_manager::process_incoming_data 用于向游戏聊天 2 提供数据的方法,该数据是从游戏聊天 2 的远程实例通过应用的传输层传递过来的。
实时音频操作 将应用插入聊天音频管道以检查或操作聊天音频数据。 有关详细信息,请参阅实时音频操作

应用会通知有望一起聊天的本地设备和远程设备上的用户的库。 然后,应用会配置每个用户之间的关系。

游戏聊天 2 会轮询本地用户的麦克风中的音频、执行自动增益控制和语音活动检测、进行数据编码,然后公开要通过 chat_manager::start/finish_processing_data_frames 传递给游戏聊天 2 的远程实例的音频数据。

应用将 game_chat_state_change 对象中包含的数据传递给同一对象中指定的游戏聊天 2 的远程实例。

接收数据后,应用的远程实例通过 chat_manager::process_incoming_data 将数据发布到自身的游戏聊天 2 实例。 游戏聊天 2 会解码传入的数据,然后将其呈现给本地用户的音频设备。

通信权限和隐私

Game Chat 2 强制实施 Xbox 服务特权和隐私要求。 音频数据不由没有通信权限的用户生成。 音频数据不会由通过隐私设置被阻止的用户提供。

网络初始化

无需在初始化规则聊天 2 库之前等待网络初始化。 但是,您需要先等待网络初始化,然后再创建任何套接字以发送/接收游戏聊天 2 个数据包。 在网络初始化后,Game Chat 2 将不会生成任何要发送的数据包。 有关网络初始化的详细信息,请参阅网络初始化和连接

暂停/恢复

必须通过 RegisterAppStateChangeNotification 注册暂停和继续事件。 暂停时,通过呼叫用户清理 Game Chat 2 chat_manager::cleanup()。 此调用可能需要数百毫秒时间才能完成,因此应使其以并行或异步方式并行到其他挂起逻辑,以避免超时挂起处理程序。 在 cleanup 处理程序返回之前,无需完成调用操作。

在简历上, cleanup 一旦完成,你应拨打 chat_manager::singleton_instance().initialize(...) 重新初始化游戏聊天 2。 如果您继续尝试使用Game Chat 2,则无法调用cleanupinitialize以及处于挂起/恢复状态更改将导致标题崩溃。

API 从通用 Windows 平台(UWP)和 Xbox One ERA 更改为 GDK

对 API 进行了以下更改,以支持游戏聊天 2。

  • 已将 game_chat_audio_encoding_type_and_bitrate 更新为 game_chat_audio_encoding_bitrate
  • 已将 set_audio_encoding_type_and_bitrate 更新为 set_audio_encoding_bitrate
  • 已将 audio_encoding_type_and_bitrate 更新为 audio_encoding_bitrate
  • game_chat_communication_relationship_adjuster::privilege 已更新,以指示可由游戏解决的权限问题。
  • 已添加 game_chat_communication_relationship_adjuster::privilege_check_failed
  • 已将 chat_manager::set_legacy_era_uwp_compat_mode_enabled() API 添加到允许的 GDK 版本的 Game Chat 2,以与 UWP 和 ERA 版本的 Game Chat 2 交互操作。

注意

  • 仅当 XGameRuntimeFeature::XNetworking 功能可用时(如 XGameRuntimeIsFeatureAvailable 所示),游戏聊天 2 才可用。
  • 先使用 XUserAddAsync 将用户添加到 Microsoft Game Development Kit,然后才能将其添加到游戏聊天 2 实例。
  • 音频焦点检测支持将在以后的 GDK 预览版中提供。

从 UWP 和 ERA 到 GDK 的功能更改

  • 恢复游戏后,等待游戏启动时网络初始化,然后代表游戏聊天 2 发送数据包。 游戏聊天 2 在网络初始化之前初始化。
  • 通过 RegisterAppStateChangeNotification 注册暂停和继续事件。 暂停后,使用 chat_manager::cleanup() 清理游戏聊天 2。 恢复后,重新初始化游戏聊天 2。 如果在暂停/恢复周期中使用它,可能会出现故障。

另请参阅

API 内容 (GameChat2)

使用游戏聊天 2 C++ API

实时音频操作

Microsoft 游戏开发工具包