首页 > 解决方案 > AVAudioSession 配置用于录制和与他人一起播放

问题描述

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

我这样配置会话:

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

当我的录音应用程序运行时,我可以开始播放音乐应用程序中的音频并录制视频(也可以录制音频)。到目前为止很好。

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

标签: iosavfoundation

解决方案


我几乎遇到了类似的问题,而且我一两天的时间几乎都无法解决这个问题。

就我而言,我用于AVCaptureSession视频/音频录制,它具有名为automaticallyConfiguresApplicationAudioSession. 根据苹果文档

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

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

所以如果我们手动设置,我们应该像下面AVAudioSession这样设置这个属性,false

captureSession.automaticallyConfiguresApplicationAudioSession = false;

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

对您的代码的更多观察

  • 激活音频会话不需要.notifyOthersOnDeactivation标志 此标志仅在停用音频会话时使用。那是当您在实例方法false的 beActive 参数中传递一个值时。setActive(_:options:)所以下面的代码适用于活动会话 try? AVAudioSession.sharedInstance().setActive(true)
  • 默认情况下,该AVAudioSessionCategoryPlayAndRecord类别会导致背景声音的音量非常低。如果你想要正常音量,需要使用.defaultToSpeaker如下.mixWithOthers选项,

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

好的!那么我认为如果您正确完成了所有其他事情,它现在可以正常工作。

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


推荐阅读