我使用 AUGraph
和音频单元 API 在我的 iOS 应用程序中播放和录制音频。现在我遇到了一个罕见的问题,当 AUGraph
无法从以下错误开始:
Result = kAUGraphErr _ CannotDoInCurrentContext (- 10863)
当我们尝试调用 AUGraphStart
(音频回放设置)时,出现了不可预测的错误:
(BOOL)startRendering
{
if (playing) {
return YES;
}
playing = YES;
if (NO == [self setupAudioForGraph:&au_play_graph playout:YES]) {
print_error("Failed to create play AUGraph",0);
playing = NO;
return NO;
}
//result = kAUGraphErr_CannotDoInCurrentContext (-10863)
OSStatus result = AUGraphStart(au_play_graph);
if (noErr != result) {
print_error("AUGraphStart", result);
playing = NO;
}
return playing;
}
以下是我们从文档中得到的信息:
为了避免在渲染线程中旋转或等待(一个坏主意!) ,许多 所有打给 AUGraph 的电话都可以回复: 此结果仅生成 当您从渲染回调调用 AUGraph API 时 它所需的锁当时被另一个线程 持有 如果看到这个结果代码,通常可以再次尝试操作- 通常下一个呈现周期(因此在此期间锁可以 ) ,或者你可以将这个调用委托给应用程序中的另一个线程。 您不应该旋转或让呈现线程处于睡眠状态。
这个结果代码只是一个临时状态,它将尽快通过 当另一个线程对 AUGraph (具有锁)的调用完成时。
在我的例子中,我只是启动 AUGraph
,它是新的并且刚刚创建。
我如何调试这个案件,什么可能是潜在的问题在这里?