语音聊天疑难解答

如果两个玩家尝试一起聊天,并且其中一个或两个玩家都听不到对方的声音,请尝试这些故障排除步骤。

检查聊天指示器

PlayFab 群的聊天指示器可用于排查音频问题。

使用 PartyLocalChatControl::GetLocalChatIndicator() 检查本地聊天控件的即时音频状态。 正常的聊天控件应返回 PartyLocalChatControlChatIndicator::SilentPartyLocalChatControlChatIndicator::Talking ,具体取决于库是否检测来自麦克风输入的语音。

  • 如果返回 PartyLocalChatControlChatIndicator::AudioInputMuted ,则聊天控件的出站音频流先前已通过调用 PartyLocalChatControl::SetAudioInputMuted(true) 静音,必须通过调用 PartyLocalChatControl::SetAudioInputMuted(false) 禁用静音

  • 如果返回 PartyLocalChatControlChatIndicator::NoAudioInput ,则没有通过调用 PartyLocalChatControl::SetAudioInputMuted() 设置本地聊天控件的音频输入,或者音频输入初始化失败。 继续转到下一 部分 有关诊断音频输入初始化失败的提示。

使用 PartyLocalChatControl::GetChatIndicator() 检查远程聊天控件相对于本地聊天控件的音频输入状态。

  • 如果在你希望听到音频时返回 PartyChatControlChatIndicator::Silent ,这可能意味着远程音频设备存在问题,或者远程设备上的聊天权限未配置为将音频发送到此聊天控件。 如果这听起来像你所遇到的情况,请继续执行以下 部分

  • 如果返回 PartyChatControlChatIndicator::Talking 但仍无法听到任何音频,则本地音频输出设备可能存在问题。 继续查看下一 部分,了解如何检查音频设备是否正常。

  • 如果返回 PartyChatControlChatIndicator::IncomingVoiceDisabled ,则表示本地聊天控件没有将其聊天权限配置为允许来自远程聊天控件的音频。 继续转到 聊天权限 部分。

  • 如果返回 PartyChatControlChatIndicator::IncomingCommunicationsMuted ,这意味着传入音频已通过之前对 PartyLocalChatControl::SetIncomingAudioMuted()的调用静音。 调用 PartyLocalChatControl::SetIncomingAudioMuted() 以取消静音远程聊天控件。

验证音频设备是否已成功初始化

在调用 PartyLocalChatControl::SetAudioInput()PartyLocalChatControl::SetAudioOutput() 之后,你将收到 PartyLocalChatAudioInputChangedStateChangePartyLocalChatAudioOutputChangedStateChange。 这两种状态更改都将包含有助于排查与音频设备相关的任何问题的信息。 这些状态更改包含一个 PartyAudioInputState 字段和一个 PartyAudioOutputState 字段,该字段将提供有关音频设备状态的信息。 如果音频设备的状态不是 Initialized,这意味着 PlayFab Party 无法使用所需的音频设备。 有关状态更改的 errorDetail 字段也可用于获取有关情况的详细信息。 调用 PartyManager::GetErrorMessage() 以获取错误详细信息的人工可读形式。

注意

默认情况下,聊天控件不会与任何音频设备相关联。 请务必在所有聊天控件上调用 PartyLocalChatControl::SetAudioInput()PartyLocalChatControl::SetAudioOutput()

验证聊天控件是否具有正确的聊天权限

使用 PartyLocalChatControl::GetPermissions() 查找两个聊天控件之间的 PartyChatPermissionOptions 。 例如,如果用户 Alice 无法听到另一个用户 Bob,则需要确保 Alice 有权接收 Bob 的音频,并且 Bob 有权向 Alice 发送音频。

在 Alice 的设备上:

PartyChatPermissionOptions chatPermissions;
PartyError error = localChatControlAlice->GetPermissions(remoteChatControlBob, &chatPermissions);
if (PARTY_SUCCEEDED(error))
{
    if (static_cast<bool>(chatPermissions & PartyChatPermissionOptions::ReceiveAudio))
    {
        printf("Alice can receive audio from Bob!");
    }
}

在 Bob 的设备上:

PartyChatPermissionOptions chatPermissions;
PartyError error = localChatControlBob->GetPermissions(remoteChatControlAlice, &chatPermissions);
if (PARTY_SUCCEEDED(error))
{
    if (static_cast<bool>(chatPermissions & PartyChatPermissionOptions::SendAudio))
    {
        printf("Bob can send audio to Alice!");
    }
}

检查 Windows 中的默认设备与默认通信设备

Windows 上音频的常见混淆点是围绕默认设备和默认通信设备的概念。 Windows 支持这两个概念,并且它们可以是不同的设备。 当 AudioDeviceSelectionType::SystemDefault 传递到 PartyLocalChatControl::SetAudioInputPartyLocalChatControl::SetAudioOutput 时,PlayFab Party 根据设计使用 Windows 版本的库中的默认通信设备。 故障排除和测试应始终与默认的通信设备有关。