当我的应用程序定期在后台运行时,我尝试开始和停止录制。我使用 Timer 和 DispatchQueue 实现它。但是,每当我尝试启动录制时,我都会收到此错误。前台不存在此问题。
这是我的应用程序和配置的当前状态。
我在签名和功能中添加了“后台模式”功能,并且还检查了音频和自我护理。这是我的 Info.plist:
<plist version="1.0">
<dict>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
<key>WKBackgroundModes</key>
<array>
<string>self-care</string>
</array>
</dict>
</plist>
我还使用了带有 .record 类别的 AVAudioSession 并激活了它。这是代码片段:
func startPeriodicMonitoring() {
let session = AVAudioSession.sharedInstance()
do {
try session.setCategory(AVAudioSession.Category.record, mode: .default, options: [.mixWithOthers])
try session.setActive(true, options: [])
print("Session Activated")
print(session)
// Start recording.
measurementTimer = Timer.scheduledTimer(withTimeInterval: measurementInterval, repeats: true) { _ in
self.startMonitoring()
DispatchQueue.main.asyncAfter(deadline: .now() + self.recordingDuration) {
self.stopMonitoring()
}
}
measurementTimer?.fire() // Start immediately
} catch let error {
print("Unable to set up the audio session: \(error.localizedDescription)")
}
}
我明白了
The operation couldn’t be completed. (com.apple.coreaudio.avfaudio error 561015905.)
对此有什么想法吗?
错误代码
561015905
是AVAudioSessionErrorCodeCannotStartPlaying
,这很奇怪,正如我对您的情况所期望的AVAudioSessionErrorCodeCannotStartRecording
(561145187
),但事实是您无法在后台启动音频输入或输出。后台音频权限仅允许继续您已在后台启动的音频 IO。
因此,您可以从前台开始录制并且永远不会停止,或者找到其他可以启动音频 IO 的钩子(除了计时器),例如如果您使用的是 iOS,您可以在音频中断或某些 CoreBlueTooth 回调 IIRC 结束时执行此操作。