ios - AVAudioSession 配置用于录制和与他人一起播放
问题描述
我想配置 AVAudioSession,我可以录制带音频的视频,还可以从音乐应用程序(或任何其他产生声音的应用程序,通常是互联网收音机应用程序)播放音乐
我这样配置会话:
try? AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayAndRecord, with: .mixWithOthers)
try? AVAudioSession.sharedInstance().setActive(true, with: .notifyOthersOnDeactivation)
当我的录音应用程序运行时,我可以开始播放音乐应用程序中的音频并录制视频(也可以录制音频)。到目前为止很好。
现在,我将我的录音应用程序置于后台。音乐应用程序继续播放。没事。但是,当我的应用程序从背景音乐应用程序返回时停止播放。我希望它继续下去。所以它在拍摄视频时基本上表现为内置相机应用程序。有没有办法告诉系统我希望其他应用程序继续播放?
解决方案
我几乎遇到了类似的问题,而且我一两天的时间几乎都无法解决这个问题。
就我而言,我用于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上找到它
推荐阅读
- android - 火力基地规则有问题
- javascript - 如何将字符串更改为带有枚举的整数?反应JS
- python - 如何根据定义的变量更改 xpath
- android - 调用 BOOT_COMPLETED 后不执行 for 循环
- file - 如何在 IntelliJ 中使用“在文件中查找”对话框?
- flutter - 如何在 Android-Studio 最新版本中迁移到 AndroidX?
- twig - Twig 多维数组 - 无法访问值
- python - 在python中对目标进行约束的线性回归
- c - 为什么在这种情况下 return 0 不起作用?
- node.js - 如何在多个文件夹中上传相同的图像 Nodejs multer