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的主要内容,如果未能解决你的问题,请参考以下文章