【问题标题】:Playback through a bluetooth connected speaker通过蓝牙连接的扬声器播放
【发布时间】:2012-05-31 20:49:26
【问题描述】:

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

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.有什么想法吗?

【问题讨论】:

标签: ios core-audio


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-05-28
          • 1970-01-01
          • 2016-12-03
          • 1970-01-01
          • 1970-01-01
          • 2014-04-09
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多