3

在我的应用程序中,我使用的是播放和记录类别,即:

UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
CheckError( AudioSessionSetProperty (kAudioSessionProperty_AudioCategory,
                                     sizeof (sessionCategory),
                                     &sessionCategory), "Couldn't set audio category");    

在应用程序中,任何播放的音频最初都会通过接收器输出,直到我设置:

UInt32 doChangeDefaultRoute = 1;        
AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryDefaultToSpeaker, sizeof (doChangeDefaultRoute), &doChangeDefaultRoute);  

然而,我真正想要的是通过连接的蓝牙扬声器输出音频。例如,我有一个通过蓝牙连接的扬声器。我可以使用原生音乐应用程序通过它播放音乐。但是,在我的应用程序中,当使用 playandrecord 类别时,它只能在设备上播放。我努力了:

UInt32 allowBluetoothInput = 1;
OSStatus stat = AudioSessionSetProperty (
                                         kAudioSessionProperty_OverrideCategoryEnableBluetoothInput,
                                         sizeof (allowBluetoothInput),
                                         &allowBluetoothInput
                                         );

也:

CFStringRef audioRouteOverride = kAudioSessionOutputRoute_BluetoothHFP;

OSStatus s = AudioSessionSetProperty (kAudioSessionProperty_OutputDestination,
                                      sizeof(audioRouteOverride),&audioRouteOverride);

没运气。似乎这应该是一个简单的属性集,但 Idk. 有任何想法吗?

4

4 回答 4

1

这是可能的,但您的蓝牙设备必须是耳机或带有内置麦克风的蓝牙设备。当您处于播放和录制类别时,它会强制您使用蓝牙麦克风作为输入。如果您没有蓝牙麦克风,它也不会播放到蓝牙(如果您同时录制)。另外请记住,当您录制和流式传输到 BT 时,您只会获得 8 khz 单声道。

于 2014-02-14T09:59:56.893 回答
1

所以,首先你需要知道它是什么类型的蓝牙设备。无论是BluetoothHFP(输入和输出)、BluetoothA2DP(仅输出)还是BluetoothLE(仅输出)。如果设备仅输出,您将无法连接和路由kAudioSessionCategory_PlayAndRecord类别中的音频。您可以尝试将类别设置为kAudioSessionCategory_PlayBack并查看是否有效。

一周前我遇到了同样的问题。我的应用程序需要输入和输出,因此我必须将类别设置为kAudioSessionCategory_PlayAndRecord。所以我打算根据不同类型的蓝牙设备更改会话类别。

于 2014-09-11T16:12:43.953 回答
0

我觉得你想多了。只需将第一部分设置为允许蓝牙输出,然后确保您没有路由到任何工作。

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,
                         sizeof (audioRouteOverride),
                         &audioRouteOverride);

我只是在测试这个确切的东西。然后在你的路由改变监听器中,你应该只需要担心其他事情,比如插入耳机。

于 2013-05-16T03:49:29.050 回答
0

如果有人也试图弄清楚这一点,那是不可能的。彻底查看所有可用的音频会话属性,您会发现确实如此

于 2012-06-04T15:22:00.163 回答