Agora 在 iOS 台设备上使用了错误的扬声器 (Unity)

Agora using wrong speaker on iOS device (Unity)

初始化时

   // init engine
    mRtcEngine = IRtcEngine.GetEngine(appId);
    if (mRtcEngine == null)
        return;
    
    mRtcEngine.SetChannelProfile(CHANNEL_PROFILE.CHANNEL_PROFILE_GAME);
    mRtcEngine.SetClientRole(CLIENT_ROLE.BROADCASTER);


    // set callbacks (optional)
    mRtcEngine.OnJoinChannelSuccess = onJoinChannelSuccess;
    mRtcEngine.OnUserJoined = onUserJoined;
    mRtcEngine.OnUserOffline = onUserOffline;
    mRtcEngine.EnableWebSdkInteroperability(true);
    mRtcEngine.OnRemoteVideoStateChanged = OnRemoteVideoStateChangedHandler;
    mRtcEngine.DisableAudio();
    mRtcEngine.EnableAudioVolumeIndication(500, 3, true);
    mRtcEngine.EnableVideo();
    mRtcEngine.EnableVideoObserver();
    mRtcEngine.EnableLocalVideo(false);
    mRtcEngine.SetDefaultAudioRouteToSpeakerphone(true);
    mRtcEngine.AdjustRecordingSignalVolume(0);]
    mRtcEngine.SetLogFilter(LOG_FILTER.DEBUG | LOG_FILTER.INFO | LOG_FILTER.WARNING | LOG_FILTER.ERROR |
                            LOG_FILTER.CRITICAL);

我打电话 mRtcEngine.SetDefaultAudioRouteToSpeakerphone(真);

在我调用 JoinChannel() 之后

mRtcEngine.JoinChannel(channel, null, 0);
if (mRtcEngine.EnableVideoObserver() == Decimal.Zero)
{
   mRtcEngine.EnableVideoObserver();
}
mRtcEngine.EnableAudio();
mRtcEngine.SetEnableSpeakerphone(true);
    

我调用 setEnableSpeakerphone(true)

但它仍然从耳机中发出(好像是 phone 呼叫),我是不是漏掉了一步?

第一组代码对我来说似乎没问题。但我认为你应该将第二组代码放入回调处理程序

// implement engine callbacks
private void onJoinChannelSuccess(string channelName, uint uid, int elapsed)
{
    //    mRtcEngine.EnableVideoObserver(); // you've called this!
    mRtcEngine.EnableAudio();
    mRtcEngine.SetEnableSpeakerphone(true);
}

我在 iPhone 上尝试了代码,它从扬声器中传出。请注意,您可能希望使用演示应用程序作为发件人应用程序来测试这一点,而不是重写的代码。

切换
 mRtcEngine.SetChannelProfile(CHANNEL_PROFILE.CHANNEL_PROFILE_GAME);

mRtcEngine.SetChannelProfile(CHANNEL_PROFILE.CHANNEL_PROFILE_COMMUNICATION);

成功了。文档中有一条注释,游戏配置文件不允许更改扬声器。