Я работаю с AUGraph
и Audio Units 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 можно вернуть: kAUGraphErr_CannotDoInCurrentContext. Этот результат только генерируется когда вы вызываете AUGraph API из его обратного вызова рендеринга. Это означает, что требуемая блокировка удерживалась в то время другим потоком. Если Вы видите этот код результата, как правило, вы можете попытаться повторить действие - как правило, следующий цикл рендеринга (таким образом, блокировка может быть очищен), или вы можете делегировать этот вызов другому потоку в вашем приложении. Вы не должны вращать или усыплять поток рендеринга.
Этот код результата является только переходным состоянием, которое пройдет, как только как ваш другой поток вызова AUGraph (который имеет блокировку) завершается.
В моем случае я просто запускаю AUGraph
, он новый и только что созданный.
Как я могу отладить дело и что может быть потенциальной проблемой здесь?