AVAudioSession配置可与他人一起录制和播放

时间:2018-07-30 15:39:09

标签: ios avfoundation

我想配置AVAudioSession,以便可以录制带有音频的视频,还可以播放音乐应用程序(或其他产生声音的应用程序,通常是互联网广播应用程序)中的音乐

我这样配置会话:

try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: .mixWithOthers)
try? AVAudioSession.sharedInstance().setActive(true, with: .notifyOthersOnDeactivation)

这种方式可以使我在运行录制应用程序时可以开始播放音乐应用程序中的音频并录制视频(还可以录制音频)。到目前为止很好。

现在,我将录制应用程序置于后台。音乐应用继续播放。没事。但是,当我的应用从背景音乐应用返回时,停止播放。我希望它继续。因此,在拍摄视频时,它基本上就像内置在相机应用程序中一样。有没有办法告诉系统我希望其他应用继续播放?

1 个答案:

答案 0 :(得分:4)

我几乎遇到了类似的问题,由于发现问题,我几乎一两天就丧命了。

就我而言,我使用AVCaptureSession进行视频/音频录制,它具有名为automaticallyConfiguresApplicationAudioSession的属性。根据Apple文档

  

自动配置ApplicationAudioSession:一个布尔值,指示捕获会话是否自动更改   应用程序的共享音频会话中的设置。

     

此属性的值默认为true,从而导致捕获   会话以自动配置应用程序的共享 AVAudioSession   最佳录制实例

因此,如果我们手动设置AVAudioSession,则应如下所示将此属性设置为false

captureSession.automaticallyConfiguresApplicationAudioSession = false;

将此属性设置为false并手动设置适当的AVAudioSession类别已经解决了我的问题!希望它也会对您的情况有所帮助!

关于您的代码的更多观察结果

  • 不需要.notifyOthersOnDeactivation标志来激活音频 session此标志仅在停用音频会话时使用。那就是当您在false实例方法的beActive参数中传递setActive(_:options:)的值时。因此,以下代码可以很好地激活会话 try? AVAudioSession.sharedInstance().setActive(true)
  • 默认情况下,AVAudioSessionCategoryPlayAndRecord类别的线索 发出非常低的背景声音。如果您希望音量正常,请按如下方式将选项.defaultToSpeaker.mixWithOthers一起使用,

    try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.mixWithOthers, .defaultToSpeaker])

好吧!那么我认为,如果您已正确完成所有其他操作,则现在可以正常工作。

注意** ,我创建了一个工作示例项目供您参考,您可以在GitHub Here

上找到它