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

Posted

技术标签:

【中文标题】AVAudioSession 配置用于录制和与他人一起播放【英文标题】:AVAudioSession configuration to record and play with others 【发布时间】:2018-07-30 15:39:09 【问题描述】:

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

我这样配置会话:

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

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

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

【问题讨论】:

【参考方案1】:

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

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

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

该属性的值默认为true,导致捕获 session 自动配置应用的共享 AVAudioSession 最佳录音实例

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

captureSession.automaticallyConfiguresApplicationAudioSession = false;

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

对您的代码的更多观察

不需要.notifyOthersOnDeactivation 标志来激活音频 session 此标志仅在停用音频会话时使用。即当您在setActive(_:options:) 实例方法的beActive 参数中传递false 的值时。所以下面的代码适用于活动会话 try? AVAudioSession.sharedInstance().setActive(true)

默认情况下,AVAudioSessionCategoryPlayAndRecord 类别领先 到非常低音量的背景声音。如果要正常音量,需要使用.defaultToSpeaker.mixWithOthers选项,如下所示,

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

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

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

【讨论】:

出色的答案,所以automaticallyConfiguresApplicationAudioSession 是您处理AVCaptureSession 中断其他应用程序的方式!关于您的示例项目:我不确定提问者是否使用AVCaptureMovieFileOutput,但您知道如何摆脱切换回应用程序时出现的“录制停止”错误吗? 我现在正在测试这个答案。到目前为止,它可以工作,除了有小暂停,大约 1 秒内,当录制应用程序从后台转到前台时,音乐暂停,然后播放继续。 @JurajAntas 这似乎是一个已知问题。您可以参考以下链接,***.com/questions/35496563/… 多次调用这个.defaultToSpeaker选项会导致系统背景音乐死掉。

以上是关于AVAudioSession 配置用于录制和与他人一起播放的主要内容,如果未能解决你的问题,请参考以下文章

IOS录制和播放需要不同的AVAudioSession

AVCaptureSession 和 AVAudioSession 在播放背景音乐时录制视频只能工作一次

将 AVAudioSession 模式设置为 AVAudioSessionModeVideoChat 时出现麦克风低语音录制问题

使用 iPod 录制和播放音频

使用音频会话录制时如何减少录制噪音?

在导航到另一个屏幕时继续录制音频