AVAudioSession配置记录和与他人一起玩
我想配置AVAudioSession,我可以用音频录制video,也可以播放音乐应用程序(或任何其他产生声音的应用程序,通常是互联网收音机应用程序)的音乐
我像这样配置会话:
try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: .mixWithOthers) try? AVAudioSession.sharedInstance().setActive(true, with: .notifyOthersOnDeactivation)
这就像我的录音应用程序运行时的方式一样,我可以开始播放音乐应用程序中的音频并录制video(也可以录制音频)。 到目前为止好。
现在,我将录制应用程序放到后台。 音乐应用程序继续播放。 没事。 但是,当我的应用程序从背景音乐应用程序返回时停止播放。 我希望它继续下去。 所以它在拍摄video时基本上就像在相机应用程序中构建一样。 有没有办法告诉系统我希望其他应用程序继续播放?
我几乎遇到了类似的问题,并且几乎因为解决这个问题而被杀了一两天。
就我而言,我使用AVCaptureSession
进行video/音频录制,它具有名为AVCaptureSession
的属性。 根据Apple文档
automatedConfiguresApplicationAudioSession:一个布尔值,指示捕获会话是否自动更改应用程序的共享音频会话中的设置。
此属性的值默认为true,从而导致捕获会话自动配置应用程序的共享AVAudioSession实例以实现最佳记录
所以如果我们手动设置AVAudioSession
,我们应该将此属性设置为false
如下所示,
captureSession.automaticallyConfiguresApplicationAudioSession = false;
将此属性设置为false
并手动设置适当的AVAudioSession
类别已解决了我的问题! 希望它对你的情况也有帮助!
对您的代码进行更多观察
- 不需要
.notifyOthersOnDeactivation
标志来激活音频会话此标志仅在停用音频会话时使用。 也就是当你在setActive(_:options:)
实例方法的beActive参数中传递false
值时。 那么下面的代码可以用于活动会话try? AVAudioSession.sharedInstance().setActive(true)
try? AVAudioSession.sharedInstance().setActive(true)
-
默认情况下,
AVAudioSessionCategoryPlayAndRecord
类别会导致背景音量非常低。 如果你想要正常的音量,需要使用选项.defaultToSpeaker
和.mixWithOthers
,如下所示,try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.mixWithOthers, .defaultToSpeaker])
奥凯! 那么我认为如果你已经做好了所有其他的事情,它现在可以正常工作了。
注意**我已经创建了一个工作示例项目供您参考,您可以在GitHub Here上找到它