初始化AVAudioSession时保持蓝牙的声音

我即将发疯。

我有一个录音应用程序。 我遇到了一个问题,当我打开我的应用程序,如果我在蓝牙设备上听音乐,它会自动路由回到手机内部扬声器。

我希望一切都保持不变。 即使当我开始录音,如果用户正在听蓝牙扬声器上的东西,继续这样做。 用户有耳机? 保持音乐在那里。 只是保持原样。

这是我目前正在初始化我的会议:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord withOptions:AVAudioSessionCategoryOptionMixWithOthers | AudioSessionCategoryOptionAllowBluetooth error: nil]; 

我允许它播放,录制,与其他人混合,并允许蓝牙,那么为什么它重新路由audio输出回到内部扬声器?

谢谢

5月30日编辑

我设法得到更好的东西,但仍然失去了一些东西。

如果我添加这一行:

 [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil]; 

音乐停留在蓝牙设备,但听起来很可怕。

根据这个答案: https : //stackoverflow.com/a/18541874/517688这是因为

EnableBluetoothInput根据这个影响input和输出。 另外请记住,由于蓝牙input设备的限制,audio将以8000Hz播放

那么在使用蓝牙设备时,没有办法让所有的东西都保持不变而不会扭曲声音?

在iOS 10中,Apple添加了选项AVAudioSessionCategoryOptionAllowBluetoothA2DP 。 他们还将AudioSessionCategoryOptionAllowBluetooth的含义AudioSessionCategoryOptionAllowBluetooth为仅允许使用HFP蓝牙configuration文件输出,这是您获得低质量audio输出的地方。

如果使用这个新选项代替代码片段中的AudioSessionCategoryOptionAllowBluetooth选项,它将允许高质量的输出,但不允许低质量的audio输出。

以下是选项的在线文档,但很遗憾,没有关于新的iOS 10在线选项的说明。 您可以在AVAudioSession.h的代码文档中看到更多的细节。 https://developer.apple.com/reference/avfoundation/avaudiosessioncategoryoptions?language=objc

不幸的是,我直接从Apple技术支持获得了这个答案

鉴于目前的运输系统configuration,没有支持的方式来实现所需的function。 如果您希望Apple将来考虑添加对此类function的支持,请通过http://bugreport.apple.com上的Bug Reporter工具提交增强请求。

就是这样了…