初始化AVAudioSession时保持蓝牙声音

Jan*_*Jan 8 iphone bluetooth objective-c ios avaudiosession

我快要疯了.

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

无论如何,我希望一切都保持不变.即使我开始录制,如果用户正在收听蓝牙音箱上的某些内容,请继续这样做.用户有耳机吗?保持音乐在那里.请保持原样.

这就是我目前正在初始化会话的方式:

[[AVAudioSession sharedInstance]
    setCategory:AVAudioSessionCategoryPlayAndRecord
    withOptions:AVAudioSessionCategoryOptionMixWithOthers | AudioSessionCategoryOptionAllowBluetooth
    error: nil];
Run Code Online (Sandbox Code Playgroud)

我允许它播放,录制,与其他人混音并允许蓝牙,那么为什么要将音频输出重新路由回内置扬声器?

谢谢

编辑于5月30日

我设法得到更好的东西,但仍然缺少一些东西.

如果我添加这一行:

[[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPortOverrideNone error:nil];
Run Code Online (Sandbox Code Playgroud)

音乐留在蓝牙设备但听起来很糟糕.

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

EnableBluetoothInput会根据此影响输入和输出.还要记住,由于蓝牙输入设备的限制,音频将以8000 Hz的频率播放

因此,在使用蓝牙设备时,没有办法保持一切不变,而不会扭曲声音?

Jay*_*itt 8

在iOS 10中,Apple添加了该选项AVAudioSessionCategoryOptionAllowBluetoothA2DP.他们还改变了意思,AudioSessionCategoryOptionAllowBluetooth只允许使用HFP蓝牙配置文件进行输出,这是您获得低质量音频输出的地方.

如果您使用此新选项代替AudioSessionCategoryOptionAllowBluetooth代码段中的选项,它将允许高质量输出但不允许低质量音频输出.

这是选项的在线文档,但不幸的是,没有在线新的iOS 10选项的描述.您可以在代码内文档中查看更多详细信息AVAudioSession.h. https://developer.apple.com/reference/avfoundation/avaudiosessioncategoryoptions?language=objc


Jan*_*Jan 1

不幸的是我直接从苹果技术支持得到了这个答案

鉴于当前的运输系统配置,不存在支持的方法来实现所需的功能。如果您希望 Apple 考虑将来添加对此类功能的支持,请通过http://bugreport.apple.com上的 Bug Reporter 工具提交增强请求。

就是这样了...