AVAudioSessionCategoryPlayAndRecord with Airplay

Posted

技术标签:

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

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

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

有什么想法吗?

【问题讨论】:

我们可以在您设置音频会话的位置查看您的代码吗? 【参考方案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 已弃用

以上是关于AVAudioSessionCategoryPlayAndRecord with Airplay的主要内容,如果未能解决你的问题,请参考以下文章