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上找到它