我有一个问题,我试图在 AVAudioSession 上更改我的音频类别,以开始录制麦克风输入。
如果我在设备的静音开关未设置(即未静音)时使用我当前的实现(以及许多替代实现来尝试解决此问题)执行此操作,那么一切都很好。
如果我在静音时执行此操作 - 来自任何先前的音频类别(MediaPlayback、SoloAmbient 等),则会出现巨大的延迟,并导致设备在一段时间内表现得非常缓慢。
这就是我正在做的事情。在应用程序启动时,我这样做:
AudioSessionInitialize(NULL, NULL, NULL, NULL);
UInt32 sessionCategory = kAudioSessionCategory_SoloAmbient;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionSetActive(true);
稍后,开始录制:
AudioSessionInitialize(NULL, NULL, NULL, NULL);
UInt32 sessionCategory = kAudioSessionCategory_RecordAudio;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionSetActive(true);
如果我调试并逐步完成,一切都会像预期的那样快,直到我点击 AudioSessionSetProperty——这就是设备挂起的地方。当我使用 RecordAudio 和 PlayAndRecord 类别时会发生这种情况。
发生这种情况时,我会在控制台中收到以下消息:
AudioSessionSetProperty posting message to kill mediaserverd
AudioSessionSetActive posting message to kill mediaserverd
AudioQueueSetProperty posting message to kill mediaserverd
AllocateBuffer posting message to kill mediaserverd
我已经在网上搜索了这些,但它们从来没有与我遇到的这种延迟一起被报告,而且它们也没有强调我可能做错了什么。
有没有人经历过类似的事情,你知道我能做些什么来解决这个问题吗?
提前致谢