我对CoreAudio AudioSession框架有几个与几个蓝牙任务相关的问题,我希望有人可以帮助我解决这些问题,或者至少可以确认我的最新发现。该用例是一个导航应用程序,它希望与支持HFP和A2DP的蓝牙无线电连接。我已经阅读了整个音频会话编程指南,但我仍然有一些未解决的问题,尤其是通过蓝牙使用音频输出。
-
蓝牙 HFP 音频输出 (kAudioSessionOutputRoute_BluetoothHFP) 仅在设置了音频会话kAudioSessionCategory_PlayAndRecord并且您正在覆盖以下属性的情况下才可用:kAudioSessionProperty_OverrideCategoryEnableBluetoothInput。这是真的吗?如果没有,我如何以媒体播放会话为例路由到kAudioSessionOutputRoute_BluetoothHFP路由。
-
类别 kAudioSessionCategory_PlayAndRecord 无法在后台模式下输出音频。因此,如果我在后台,我无法通过蓝牙 HFP 路由播放声音。这是真的吗?如果应用程序在后台,有没有办法通过蓝牙 HFP 协议发送音频?
-
如果有支持 A2DP 的设备可用,我的音频路由将始终自动切换到kAudioSessionOutputRoute_BluetoothA2DP路由。如何防止此路线更改?此外,我如何指定我目前想要的输出路由。使用 iOS5,可以通过 kAudioSessionProperty_AudioRouteDescription 标志查询所有这些路由目的地,但我不知道如何按照我想要的方式设置它。是否有可能以某种方式实现这一目标?
我希望你们中的一些人可以帮助我解决这些问题。它真的会帮助我全面了解CoreAudio,尤其是AudioSession框架。
AudioSession是一件棘手的事情。
1.蓝牙 HFP 音频输出 (kAudioSessionOutputRoute_BluetoothHFP) 仅在设置了音频会话kAudioSessionCategory_PlayAndRecord并且您正在覆盖以下属性的情况下可用:kAudioSessionProperty_OverrideCategoryEnableBluetoothInput。这是真的吗?如果没有,我如何以媒体播放会话为例路由kAudioSessionOutputRoute_BluetoothHFP路由。
如果您连接了蓝牙耳机,那么这是真的。 您将需要设置kAudioSessionCategory_PlayAndRecord音频会话和kAudioSessionProperty_OverrideCategoryEnableBluetoothInput才能从蓝牙耳机播放音频。 启用蓝牙输入会根据此影响输入和输出。 另请记住,由于蓝牙输入设备的限制,音频将以 8000 Hz 播放。 对于连接的支持 A2DP 的设备,您可以将其保留在音频会话 kAudioSessionCategoryMediaPlayback 中,它将以 44100 Hz 采样率播放。
2.类别kAudioSessionCategory_PlayAndRecord无法在后台模式下输出音频。因此,如果我在后台,我无法通过蓝牙 HFP 路由播放声音。这是真的吗?如果应用程序在后台,有没有办法通过蓝牙 HFP 协议发送音频?
只要您在应用程序列表中设置了后台音频模式键,就可以在后台通过蓝牙 HFP 播放音频。 在此处查看更多内容。
3.如果有支持 A2DP 的设备可用,我的音频路由将始终自动切换到kAudioSessionOutputRoute_BluetoothA2DP路由。如何防止此路线更改?此外,我如何指定我目前想要的输出路由。使用 iOS5,可以通过 kAudioSessionProperty_AudioRouteDescription 标志查询所有这些路由目的地,但我不知道如何按照我想要的方式设置它。是否有可能以某种方式实现这一目标?
您希望音频转到何处? 您可以尝试将音频会话设置为"播放和录制",以防止其进入A2DP。 不过,这可能超出了您的控制范围,音频会话将使用它认为对用户直观的内容。 如果他们刚刚连接了 A2DP 设备,而您只输出音频,则将使用 A2DP 设备。
他们提到它仅适用于USB配件。
http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html