reprodução iOS audio unit remoteIO durante a gravação

Eu fui cobrado para adicionar VOIP em um jogo (multi-plataforma, por isso não posso usar o kit de jogos da Apple para fazê-lo).

Por 3 ou 4 dias agora, eu estou tentando obter minha cabeça quebra em torno da unidade de áudio e remoteIO ... Eu esqueci dezenas de exemplos e tal, mas toda vez que é apenas aplicando um algoritmo simples para o PCM de entrada e reproduzi-lo de volta no alto-falante. De acordo com a documentação da Apple para fazer o VOIP, devemos usar o kAudioSessionCategory_PlayAndRecord.

UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;

        status = AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, 
                                         sizeof(audioCategory), 
                                         &audioCategory);
        XThrowIfError(status, "couldn't set audio category");

1) Mas parece (para mim) que o playAndRecord sempre tocará o que vem do microfone (ou mais exatamente o callback do PerformThru //aurioTouch), estou errado ?

Eu tenho o retorno de chamada mais simples, não fazendo nada, mas AURender

static OSStatus PerformThru(
                            void                        *inRefCon, 
                            AudioUnitRenderActionFlags  *ioActionFlags, 
                            const AudioTimeStamp        *inTimeStamp, 
                            UInt32                      inBusNumber, 
                            UInt32                      inNumberFrames, 
                            AudioBufferList             *ioData)
{
OSStatus err = AudioUnitRender(THIS->rioUnit, ioActionFlags, inTimeStamp, 1, inNumberFrames, ioData);
    if (err) 
       printf("PerformThru: error %d\n", (int)err);
    return err
}

A partir desse retorno de chamada, pretendo enviar dados para o peer (não diretamente, é claro, mas os dados virão dele) ...

Eu não vejo como eu posso reproduzir uma saída diferente da entrada, exceto talvez com 2 unidades, uma gravação, uma tocando, mas não parece ser o que a Apple pretendia (ainda aumentando a documentação).

E, claro, não consigo encontrar nenhuma documentação sobre isso, a unidade de áudio ainda é praticamente não documentada ...

Alguém teria uma ideia sobre qual seria a melhor maneira de fazer isso?

questionAnswers(2)

yourAnswerToTheQuestion