我的应用程序使用麦克风并输出音频,因此我将音频会话设置为播放和录制类别,但这似乎禁用了 Airplay。如果我将类别设置为 Play,Airplay 可以很好地处理我的输出(但显然输入不起作用)。
我尝试过覆盖到扬声器的输出路由,以防它需要通过 Airplay 输出,但没有乐趣。
有任何想法吗?
我的应用程序使用麦克风并输出音频,因此我将音频会话设置为播放和录制类别,但这似乎禁用了 Airplay。如果我将类别设置为 Play,Airplay 可以很好地处理我的输出(但显然输入不起作用)。
我尝试过覆盖到扬声器的输出路由,以防它需要通过 Airplay 输出,但没有乐趣。
有任何想法吗?
您尝试使用哪种 AirPlay 设备?它有麦克风吗?
如果没有,iOS 在使用 PlayAndRecord 类别时不会将其作为选项显示,因为该设备无法播放和录制。不过,它会在使用 Play 类别时出现。
另外,如果您使用的设备是蓝牙设备,您是否将 AVAudioSessionCategoryOptionAllowBluetooth 设置为 YES?
来自音频会话编程指南 › 使用类别 ›为 AirPlay 选择类别和模式:
只有特定类别和模式支持 AirPlay。以下类别同时支持 Airplay 的镜像和非镜像版本:
AVAudioSessionCategorySoloAmbient
AVAudioSessionCategoryAmbient
AVAudioSessionCategoryPlayback
该AVAudioSessionCategoryPlayAndRecord
类别仅支持镜像 Airplay。
你可以试试这段代码
// 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,并传递给它指定你希望音频去向的常量。这些常数是
kAudioSessionOverrideAudioRoute_None,它指定您希望将音频路由到接收器(如果这是它要去的地方,则为空中播放),或者
kAudioSessionOverrideAudioRoute_Speaker,指定音频应该路由到手机底部的扬声器。