我正在创建一个Video&音频捕捉应用。每次我开始录制时,蓝牙音箱中播放的音乐都会在手机的扬声器中播放。当我退出应用程序时,音乐会在蓝牙音箱上播放。
我首先尝试解决此问题,为audioSession
提供必要的选项,如下所示:
try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, withOptions: [AVAudioSessionCategoryOptions.MixWithOthers, AVAudioSessionCategoryOptions.AllowBluetooth])
但那并没有奏效。所以我的第二个解决方案就是将音乐输出重新路由到蓝牙音箱。
我研究了这个并发现了这个功能:audioSession.setOutputDataSource
我真的不知道要传递的参数。
我不确定在我开始视频录制的那一刻,手机/或我的代码是否会禁用蓝牙连接,或者只是将播放重新路由到手机的扬声器。
更新:我将这一行与// try audioSession.setMode(AVAudioSessionModeMoviePlayback)
联系起来,音乐暂停一点,然后再在蓝牙音箱上播放。但问题是捕获的视频没有音频。
更新2:如果我向您提供我的代码,这个问题会有解决方案吗?
答案 0 :(得分:0)
我会继续拍摄原始问题。来自Apple 文档我这样做:
func setOutputDataSource(_ dataSource: AVAudioSessionDataSourceDescription?)throws
参数 dataSource
音频会话输出的数据源。
outError 在输入时,指向错误对象的指针。如果发生错误,则将指针设置为描述其的NSError对象 错误。如果您不想要错误信息,请传入零。 here
此页面应该可以帮助您弄清楚AV会话数据源描述的作用/返回,但总结一下:
您可以从共享的AVAudioSession对象或与其输入和输出端口对应的AVAudioSessionPortDescription对象获取数据源描述。只有某些设备上的内置麦克风端口支持位置,方向和极性模式属性;如果端口不支持这些功能,则其dataSources属性的值为nil。 here
您是否尝试将音乐从应用程序传送到扬声器(是音乐播放?)还是来自其他应用的音乐,您想要双输出?
对于错误检查,您可以使用output data source之类的内容确保扬声器仍然可用。如果它返回nill(null。),则表示您无法在数据源之间切换。
可能还值得注意的是,用户必须允许您进行录制,但我怀疑这是问题所在,因为您似乎已经在某一时刻进行录制,只是在通过手机播放时,而不是发言者