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 配置用于录制和与他人一起播放的主要内容,如果未能解决你的问题,请参考以下文章
AVCaptureSession 和 AVAudioSession 在播放背景音乐时录制视频只能工作一次
将 AVAudioSession 模式设置为 AVAudioSessionModeVideoChat 时出现麦克风低语音录制问题