无法在 iOS 上以后台模式重新启动中断的音频输入队列

2024-01-08

我正在编写一个使用 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模式是AVAudioSessionMode默认.

我找不到此错误消息的任何文档,也找不到是否可以在后台重新启动输入音频队列。


是的,这是可能的,但要在后台重新激活会话,音频会话必须设置 AudioSessionPropertykAudioSessionProperty_OverrideCategoryMixWithOthers http://developer.apple.com/library/ios/DOCUMENTATION/AudioToolbox/Reference/AudioSessionServicesReference/Reference/reference.html#//apple_ref/c/econst/kAudioSessionProperty_OverrideCategoryMixWithOthers

OSStatus propertySetError = 0;
    UInt32 allowMixing = true;



    propertySetError = AudioSessionSetProperty (
                                                kAudioSessionProperty_OverrideCategoryMixWithOthers,
                                                sizeof (allowMixing),
                                                &allowMixing
                                                );

或者应用程序必须接收远程控制命令事件 http://developer.apple.com/iphone/library/documentation/EventHandling/Conceptual/EventHandlingiPhoneOS/RemoteControl/RemoteControl.html:

[[UIApplication sharedApplication] beginReceivingRemoteControlEvents];
[self becomeFirstResponder];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

无法在 iOS 上以后台模式重新启动中断的音频输入队列 的相关文章

随机推荐