iOS:使用蓝牙audio输出(kAudioSessionProperty_OverrideCategoryEnableBluetoothInput)AudioSession

CoreAudio AudioSession框架涉及到几个蓝牙任务,我有几个问题,我希望有人能帮助我解决这些问题,或者至less可以证实我的最新发现。 该用例是一个导航应用程序,想要连接一个支持HFP和A2DP的蓝牙function的无线电。 我已经阅读了整个AudioSession编程指南,但我仍然有一些开放的问题,特别是通过蓝牙audio输出。

  1. 蓝牙HFPaudio输出(kAudioSessionOutputRoute_BluetoothHFP)只能在AudioSession的情况下设置kAudioSessionCategory_PlayAndRecord已设置,并且您正在覆盖以下属性:kAudioSessionProperty_OverrideCategoryEnableBluetoothInput。 这是真的? 如果没有,我怎样才能将MediaPlayback会话路由为kAudioSessionOutputRoute_BluetoothHFP路由。

  2. 背景模式下的audio输出对于类别kAudioSessionCategory_PlayAndRecord而言是不可能的。 因此,如果我在后台,我无法通过蓝牙HFP路由播放声音。 这是真的? 如果应用程序在后台,有没有办法通过蓝牙HFP协议发送audio?

  3. 如果有支持A2DP的设备,我的audio路由将始终自动切换到kAudioSessionOutputRoute_BluetoothA2DP路由。 我怎样才能防止这种路线变化? 另外我怎么能指定我现在想要的输出路线。 使用iOS5,可以通过kAudioSessionProperty_AudioRouteDescription标志查询所有这些路由目的地,但我不知道如何设置它,因为我想拥有它。 是否有可能做到这一点?

我希望你们中的一些人能够帮助我解决这些问题。 这对我对CoreAudio的整体了解,特别是AudioSession框架,确实有帮助。

AudioSession是棘手的业务。

1.蓝牙HFPaudio输出(kAudioSessionOutputRoute_BluetoothHFP)只能在AudioSession的情况下设置。kAudioSessionCategory_PlayAndRecord已设置,并且您覆盖以下属性:kAudioSessionProperty_OverrideCategoryEnableBluetoothInput。 这是真的? 如果没有,我怎样才能将MediaPlayback会话路由为kAudioSessionOutputRoute_BluetoothHFP路由。

如果您连接了蓝牙耳机,那么这是事实。 您需要同时设置kAudioSessionCategory_PlayAndRecordaudio会话集和kAudioSessionProperty_OverrideCategoryEnableBluetoothInput,才能使audio播放出蓝牙耳机。 EnableBluetoothInput根据这个影响input和输出。 另外请记住,由于蓝牙input设备的限制,audio将以8000Hz播放。 对于支持A2DP连接的设备,可以将其保留在audio会话kAudioSessionCategoryMediaPlayback中,并以44100 Hz采样率播放。

2.背景模式下的audio输出不适用于类别kAudioSessionCategory_PlayAndRecord。 因此,如果我在后台,我无法通过蓝牙HFP路由播放声音。 这是真的? 如果应用程序在后台,有没有办法通过蓝牙HFP协议发送audio?

只要您在应用程序plist中设置了背景audio模式键,就可以在后台通过蓝牙HFP播放audio。 在这里看到更多。

3.如果有支持A2DP的设备,我的audio路由将始终自动切换到kAudioSessionOutputRoute_BluetoothA2DP路由。 我怎样才能防止这种路线变化? 另外我怎么能指定我现在想要的输出路线。 使用iOS5,可以通过kAudioSessionProperty_AudioRouteDescription标志查询所有这些路由目的地,但我不知道如何设置它,因为我想拥有它。 是否有可能做到这一点?

你想把audio放在哪里? 您可以尝试将audio会话设置为PlayAndRecord以防止进入A2DP。 虽然这可能是你无法控制的,但audio会话将使用它认为对用户来说直观的东西。 如果他们只连接了一个A2DP设备,而您只是输出audio,则会使用A2DP设备。