使用Airplay的AVAudioSessionCategoryPlayAndRecord

34
我的应用程序使用麦克风并输出音频,因此我将我的音频会话设置为播放和录制类别,但这似乎禁用了Airplay。如果我将类别设置为播放,则我的输出可以正常使用Airplay(但是显然输入无法工作)。
我尝试重写输出路由到扬声器,以防需要通过Airplay输出,但没有成功。
有什么想法吗?

你能否展示一下你设置音频会话的代码? - Jonathan Arbogast
4个回答

3
你想使用哪种AirPlay设备?它有麦克风吗?
如果没有,当使用PlayAndRecord类别时,iOS不会将其显示为选项,因为该设备无法播放和录制。但是,使用Play类别时,它会出现。
此外,如果你使用的设备是蓝牙设备,你是否将AVAudioSessionCategoryOptionAllowBluetooth设置为YES?

1

来自音频会话编程指南 › 使用分类 › 选择AirPlay的分类和模式:

只有特定的分类和模式支持AirPlay。以下分类支持Airplay的镜像和非镜像版本:

  • AVAudioSessionCategorySoloAmbient
  • AVAudioSessionCategoryAmbient
  • AVAudioSessionCategoryPlayback

AVAudioSessionCategoryPlayAndRecord 分类仅支持镜像 Airplay。


0
如果您想更改音频输出位置,需要调用AudioSessionSetProperty,并传递指定音频输出位置的常量。这些常量包括:
kAudioSessionOverrideAudioRoute_None,指定将音频路由到接收器(如果正在使用AirPlay,则为AirPlay);或
kAudioSessionOverrideAudioRoute_Speaker,指定将音频路由到手机底部的扬声器。

0
你可以尝试这段代码。
// 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已被弃用。 - Mark

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接