将音频重新路由到蓝牙扬声器

时间:2016-08-18 08:02:51

标签: ios swift avaudiosession

我正在创建一个Video&音频捕捉应用。每次我开始录制时,蓝牙音箱中播放的音乐都会在手机的扬声器中播放。当我退出应用程序时,音乐会在蓝牙音箱上播放。

我首先尝试解决此问题,为audioSession提供必要的选项,如下所示:

try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: [AVAudioSessionCategoryOptions.MixWithOthers, AVAudioSessionCategoryOptions.AllowBluetooth])

但那并没有奏效。所以我的第二个解决方案就是将音乐输出重新路由到蓝牙音箱。

我研究了这个并发现了这个功能:audioSession.setOutputDataSource

我真的不知道要传递的参数。

我不确定在我开始视频录制的那一刻,手机/或我的代码是否会禁用蓝牙连接,或者只是将播放重新路由到手机的扬声器。

更新:我将这一行与// try audioSession.setMode(AVAudioSessionModeMoviePlayback)联系起来,音乐暂停一点,然后再在蓝牙音箱上播放。但问题是捕获的视频没有音频。

更新2:如果我向您提供我的代码,这个问题会有解决方案吗?

1 个答案:

答案 0 :(得分:0)

我会继续拍摄原始问题。来自Apple 文档我这样做:

func setOutputDataSource(_ dataSource: AVAudioSessionDataSourceDescription?)throws
  

参数 dataSource

     

音频会话输出的数据源。

     

outError   在输入时,指向错误对象的指针。如果发生错误,则将指针设置为描述其的NSError对象   错误。如果您不想要错误信息,请传入零。 here

此页面应该可以帮助您弄清楚AV会话数据源描述的作用/返回,但总结一下:

  

您可以从共享的AVAudioSession对象或与其输入和输出端口对应的AVAudioSessionPortDescription对象获取数据源描述。只有某些设备上的内置麦克风端口支持位置,方向和极性模式属性;如果端口不支持这些功能,则其dataSources属性的值为nil。 here

您是否尝试将音乐从应用程序传送到扬声器(是音乐播放?)还是来自其他应用的音乐,您想要双输出?

对于错误检查,您可以使用output data source之类的内容确保扬声器仍然可用。如果它返回nill(null。),则表示您无法在数据源之间切换。

可能还值得注意的是,用户必须允许您进行录制,但我怀疑这是问题所在,因为您似乎已经在某一时刻进行录制,只是在通过手机播放时,而不是发言者