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

Posted

技术标签:

【中文标题】将音频重新路由到蓝牙扬声器【英文标题】:Reroute Audio to Bluetooth Speaker 【发布时间】:2016-08-18 08:02:51 【问题描述】:

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

我第一次尝试解决这个问题是为audiosession 提供必要的选项,如下所示:

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

但这没有用。所以我想的第二个解决方案是将音乐输出重新路由到蓝牙扬声器。

我对此进行了研究,发现了这个功能:audioSession.setOutputDataSource

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

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

更新:我评论了这一行:// try audioSession.setMode(AVAudioSessionModeMoviePlayback),音乐暂停了一下,然后在蓝牙扬声器上再次播放。但是这里的问题是捕获的视频没有音频。

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

【问题讨论】:

你是想让它通过蓝牙播放,还是默认输出恰好是蓝牙。例如,您是否希望它无论如何都通过蓝牙播放,或者仅在手机/平板电脑连接到不同的主输出(如 AUX 或蓝牙)时播放 【参考方案1】:

我会继续尝试回答最初的问题。来自苹果 我的文档是这样的:

func setOutputDataSource(_ dataSource: AVAudioSessionDataSourceDescription?)throws

参数 数据源

音频会话输出的数据源。

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

此页面应该可以帮助您了解 AV 会话数据源描述所做/返回的内容,但总的来说:

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

您是在尝试将音乐从您的应用程序发送到扬声器(是正在播放的音乐吗?)还是来自另一个应用程序的音乐,并且您想要双输出?

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

可能还值得注意的是,用户必须授予您录制权限,但我怀疑这是问题所在,因为您似乎已经在某个时间点进行了录制,就在通过电话播放时,而不是扬声器播放

【讨论】:

如果蓝牙扬声器已连接,我希望它成为默认输出。或者如果我可以同时为手机的扬声器和蓝牙扬声器输出声音,那也可以。 您将无法通过两个扬声器播放,输出重定向会覆盖现有路径。你对 setOutputDataSrouce 有什么运气吗?所需的论点有意义吗? 我不太明白setOutputDataSource。我需要一个示例用法。 我的有限理解是第一个参数是你的源(你想播放的声音),第二个是那个方法,它将返回输出路径(例如蓝牙扬声器);不幸的是,我没有使用 Xcode 或 Swift 的许可证(因此我在这个问题上缺乏信心)所以我无法提供很多示例用法,我确实在网上四处查看,但遗憾的是没有找到:/

以上是关于将音频重新路由到蓝牙扬声器的主要内容,如果未能解决你的问题,请参考以下文章

如何将音频从设备扬声器路由到蓝牙扬声器?

如何获取可用输出音频源列表(扬声器、耳机、蓝牙)

检测连接的音频设备 iOS

Android,插入耳机后如何将音频路由到扬声器?

AVplayer 音频路由到扬声器和耳机

MPVolumeView 未在 iOS 11 上显示音频路由