【问题标题】:AVAudioSessionCategoryPlayAndRecord with AirplayAVAudioSessionCategoryPlayAndRecord with Airplay
【发布时间】:2012-07-03 20:59:57
【问题描述】:

我的应用程序使用麦克风并输出音频,因此我将音频会话设置为播放和录制类别,但这似乎禁用了 Airplay。如果我将类别设置为“播放”,Airplay 可以很好地处理我的输出(但显然输入不起作用)。

我尝试过覆盖到扬声器的输出路由,以防它需要通过 Airplay 输出,但没有任何乐趣。

有什么想法吗?

【问题讨论】:

  • 我们可以在您设置音频会话的位置查看您的代码吗?

标签: ios airplay avaudiosession


【解决方案1】:

您尝试使用哪种 AirPlay 设备?有麦克风吗?

如果没有,iOS 不会在使用 PlayAndRecord 类别时将其作为选项显示,因为该设备无法播放记录。不过,它会在使用 Play 类别时出现。

另外,如果您使用的设备是蓝牙设备,您是否将 AVAudioSessionCategoryOptionAllowBluetooth 设置为 YES?

【讨论】:

    【解决方案2】:

    来自音频会话编程指南 › 使用类别 › Choosing Categories and Modes for AirPlay

    仅特定类别和模式支持 AirPlay。以下类别同时支持 Airplay 的镜像和非镜像版本:

    • AVAudioSessionCategorySoloAmbient
    • AVAudioSessionCategoryAmbient
    • AVAudioSessionCategoryPlayback

    AVAudioSessionCategoryPlayAndRecord 类别仅支持镜像 Airplay。

    【讨论】:

      【解决方案3】:

      如果您想更改音频的播放位置,您需要调用 AudioSessionSetProperty,并将指定音频播放位置的常量传递给它。这些常量是

      kAudioSessionOverrideAudioRoute_None,它指定您希望将音频路由到接收器(如果它正在播放,则为播放),或者

      kAudioSessionOverrideAudioRoute_Speaker,指定音频应该路由到手机底部的扬声器。

      【讨论】:

        【解决方案4】:

        你可以试试这个代码

        // Set AVAudioSession
        NSError *sessionError = nil;
        [[AVAudioSession sharedInstance] setDelegate:self];
        [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:&sessionError];
        
        // Change the default output audio route
        UInt32 doChangeDefaultRoute = 1;
        AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryDefaultToSpeaker,
          sizeof(doChangeDefaultRoute), &doChangeDefaultRoute);
        

        【讨论】:

        • AudioSessionSetProperty 已弃用
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-10-27
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多