在我的应用程序中,我使用的是播放和录制类别:
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。有什么想法吗?
答案 0 :(得分:1)
这是可能的,但您的蓝牙设备必须是耳机或带有内置麦克风的蓝牙设备。当您处于playandrecord类别时,它会强制您使用蓝牙麦克风作为输入。如果您没有蓝牙麦克风,它也不会播放到蓝牙(如果您同时录制)。另外请记住,当您录制和流式传输到BT时,您只能获得8 khz mono。
答案 1 :(得分:1)
所以,首先你需要知道它是什么类型的蓝牙设备。是 BluetoothHFP (输入和输出), BluetoothA2DP (仅输出)还是 BluetoothLE (仅输出)。如果仅输出设备,则无法在 kAudioSessionCategory_PlayAndRecord 类别中连接和路由音频。您可以尝试将类别设置为 kAudioSessionCategory_PlayBack ,看看是否有效。
一周前我遇到了同样的问题。我的应用程序需要输入和输出,所以我必须将类别设置为 kAudioSessionCategory_PlayAndRecord 。所以我打算根据不同类型的蓝牙设备更改会话类别。
答案 2 :(得分:0)
如果有人也试图解决这个问题,那是不可能的。仔细查看所有可用的音频会话属性,您会发现这种情况
答案 3 :(得分:0)
我认为你过度思考了这一点。只需将第一部分设置为允许蓝牙输出,然后确保无法路由到无效。
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,
sizeof (audioRouteOverride),
&audioRouteOverride);
我只是在测试这个问题。然后在你的路线改变听众中,你应该只需要担心别的东西,比如插入耳机。