ios - webapp - Recibir kAUGraphErr_CannotDoInCurrentContext cuando se llama a AUGraphStart para reproducir
wunderlist webapp (1)
Estoy trabajando con
AUGraph
y Audio Units API para reproducir y grabar audio en mi aplicación iOS.
Ahora tengo un problema poco frecuente cuando un
AUGraph
no puede comenzar con el siguiente error:
resultado = kAUGraphErr_CannotDoInCurrentContext (-10863)
El error ocurrió de manera impredecible cuando intentamos llamar a
AUGraphStart
que está configurado para la reproducción de audio:
(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;
}
Aquí lo que obtenemos de la documentación:
Para evitar girar o esperar en el hilo de renderizado (¡una mala idea!), Muchas de las llamadas a AUGraph pueden regresar: kAUGraphErr_CannotDoInCurrentContext. Este resultado solo se genera cuando llama a una API de AUGraph desde su devolución de llamada de representación. Significa que el bloqueo que requería estaba retenido en ese momento por otro hilo . Si ve este código de resultado, generalmente puede intentar la acción nuevamente, generalmente el siguiente ciclo de renderizado (por lo tanto, mientras tanto, se puede borrar el bloqueo), o puede delegar esa llamada a otro hilo en su aplicación. No debe girar o poner a dormir el hilo de renderizado.
Este código de resultado es solo un estado transitorio, que pasará tan pronto como se complete la llamada de su otro hilo a AUGraph (que tiene el bloqueo).
En mi caso, acabo de comenzar el
AUGraph
, es nuevo y recién creado.
¿Cómo puedo depurar el caso y cuál podría ser el problema potencial aquí?
Puedes hacer algo con CSS o SQLite. Esta es la razón por
OSStatus result = AUGraphStart(au_play_graph);
if (noErr != result) {
print_error("AUGraphStart", result);
playing = NO;
}
return playing;
}
Intente simplemente manipular este código, hay un problema con los booleanos en su código ...