내가 함께 일하고 있어요 AUGraph
및 오디오 장치 API는 재생 내 iOS 앱에서 오디오를 녹음 할 수 있습니다. 이제 AUGraph
다음 오류로 시작할 수없는 드문 문제 가 있습니다.
결과 = 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를 호출 할 때만 생성됩니다.이는 필요한 잠금이 당시 다른 스레드에 의해 보유되었음을 의미합니다 . 이 결과 코드가 표시되면 일반적으로 작업을 다시 시도하거나 (일반적으로 NEXT 렌더링주기 (따라서 그 동안 잠금을 지울 수 있음)) 또는 해당 호출을 앱의 다른 스레드에 위임 할 수 있습니다. 렌더 스레드를 회전하거나 절전 모드로 전환해서는 안됩니다.
이 결과 코드는 일시적인 상태 일 뿐이며 잠금이있는 AUGraph에 대한 다른 스레드의 호출이 완료되는 즉시 전달됩니다.
제 경우에는, 방금 시작하고 AUGraph
새롭고 방금 생성되었습니다. 케이스를 어떻게 디버깅 할 수 있으며 여기서 잠재적 인 문제는 무엇일까요?
답변
CSS 또는 SQLite로 무언가를 만들 수 있습니다. 이는 이유
OSStatus result = AUGraphStart(au_play_graph);
if (noErr != result) {
print_error("AUGraphStart", result);
playing = NO;
}
return playing;
}
이 코드를 조작 해보십시오. 코드에 부울에 문제가 있습니다.