无法在iOS上以后台模式重新启动中断的音频输入队列
我正在使用AudioQueue编写iOS应用程序进行录制。 我创建了一个配置为获得线性PCM的输入队列,声明了这个队列,一切都按预期工作。
为了管理中断,我实现了AVAudioSession的委托方法来捕获中断的开始和结束。 endInterruption方法如下所示:
- (void)endInterruptionWithFlags:(NSUInteger)flags; { if (flags == AVAudioSessionInterruptionFlags_ShouldResume && audioQueue != 0) { NSLog(@"Current audio session - category: '%@' mode: '%@'", [[AVAudioSession sharedInstance] category], [[AVAudioSession sharedInstance] mode]); NSError *error = nil; OSStatus errorStatus; if ((errorStatus = AudioSessionSetActive(true)) != noErr) { error = [self errorForAudioSessionServiceWithOSStatus:errorStatus]; NSLog(@"Could not reactivate the audio session: %@", [error localizedDescription]); } else { if ((errorStatus = AudioQueueStart(audioQueue, NULL)) != noErr) { error = [self errorForAudioQueueServiceWithOSStatus:errorStatus]; NSLog(@"Could not restart the audio queue: %@", [error localizedDescription]); } } } // ... }
如果应用程序在前台处于中断状态时,一切正常。 如果中断发生在后台,则会出现问题。 激活音频会话导致错误!cat :
指定的音频会话类别不能用于尝试的音频操作。 例如,您尝试播放或录制音频会话类别设置为kAudioSessionCategory_AudioProcessing的音频。
在不激活会话的情况下启动队列会导致错误代码: -12985
此时,类别设置为AVAudioSessionCategoryPlayAndRecord ,模式为AVAudioSessionModeDefault 。
我找不到此错误消息的任何文档,也无法在后台重新启动输入音频队列。
如果您在后台,目前无法重新激活。
是的,但是可以在后台重新激活会话,音频会话必须设置AudioSessionProperty kAudioSessionProperty_OverrideCategoryMixWithOthers
OSStatus propertySetError = 0; UInt32 allowMixing = true; propertySetError = AudioSessionSetProperty ( kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof (allowMixing), &allowMixing );
或者应用程序必须接收远程控制命令事件 :
[[UIApplication sharedApplication] beginReceivingRemoteControlEvents]; [self becomeFirstResponder];
您是否已在info.plist中提供了应用支持背景信息? 我不确定在后台录制是否可行,但您可能需要添加“必需的背景模式”,然后在“App播放音频”数组中添加一个值
更新我刚检查并在后台录制是可能的。
- IOS:CS193p fall2013任务2:添加一个button让用户重新启动游戏
- performSelector:withObject:afterDelay:和dispatch_after之间的折衷是什么?
- ABGroupAddMember在iOS4设备上不起作用
- 如何在应用程序运行之间在本地检测iPhone用户的时钟提升?
- iOS 7 UIImagePicker预览黑屏
- 将Microsoft Project Oxford语音识别从Objective-C转换为SWIFT
- 如何推动ViewController从左到右的幻灯片效果? animation名称需要
- UITableViewCell与UITextField失去了selectUITableView行的能力?
- 在UIView中有UIView和Labels的Autolayout标签