2012-09-24 9 views
5

Ich wurde beauftragt, VOIP in ein Spiel zu integrieren (plattformübergreifend, also kann das Apple Gamekit nicht dazu verwendet werden).ios audio unit remoteIO Wiedergabe während der Aufnahme

Für 3 oder 4 Tage jetzt, ich versuche, meinen Kopf wickeln um Audio-Einheit und remoteIO ... Ich habe Dutzende von Beispielen und dergleichen übersehen, aber jedes Mal ist es nur ein einfacher Algorithmus auf die Anwendung PCM eingeben und auf dem Lautsprecher wiedergeben. Laut Apples Dokumentation, um VOIP zu machen, sollten wir kAudioSessionCategory_PlayAndRecord verwenden.

UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord; 

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

1) Aber es scheint (mir), dass playAndRecord wird immer was vom Mikrofon kommenden spielen (oder mehr excatly die PerformThru Rückruf // aurioTouch), bin ich falsch?

Ich habe einen ganz einfachen Rückruf, nichts anderes als 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 
} 

Von diesem Rückruf an dem Peer-Daten zu senden mir die Absicht zu tun (Nicht direkt natürlich, aber Daten von ihm kommen) ...

Ich sehe nicht, wie ich andere Ausgabe als der Eingang spielen kann, außer vielleicht mit 2 Einheiten, eine Aufnahme, eine Wiedergabe, aber es scheint nicht das zu sein, was Apple beabsichtigte (noch accrobing der Dokumentation).

Und natürlich, ich kann keine Dokumentation über ihn nicht finden, ist Audio-Gerät immer noch ziemlich un-dokumentiert ...

jemand eine Idee, was der beste Weg, es zu tun wäre, hätte?

Antwort

8

Ich habe nicht VOIP oder kAudioSessionCategory_PlayAndRecord verwendet. Aber wenn Sie die vom Mikrofon aufgenommene Stimme aufzeichnen/übertragen und eingehende Daten von Netzwerk-Paketen wiedergeben möchten: Here ist ein gutes Beispiel, das sowohl Mikrofon als auch Wiedergabe enthält. Auch wenn Sie dieses Dokument nicht von Apple gelesen haben, empfehle ich dringend this.

Kurz gesagt: Sie müssen eine AudioUnits-Instanz erstellen. Konfigurieren Sie darin zwei Rückrufe: einen für das Mikrofon und einen für die Wiedergabe. Die Callback-Mic-Funktion liefert Ihnen die Daten, die vom Mikrofon aufgenommen wurden. Sie können dann mit dem gewählten Netzwerkprotokoll zu anderen Geräten konvertieren und übertragen. Mit der Wiedergabe-Callback-Funktion können Sie die eingehenden Daten von anderen Netzwerkgeräten wiedergeben.

+1

Ich habe dieses Muster während meiner Suche nicht gegründet, es hat mir sehr geholfen, danke! – TheSquad

+0

Vielen Dank für den Beitrag.Ich habe seit langer Zeit nach diesem gesucht.Jetzt haben Sie mein Problem gelöst.Wir danken Ihnen viel und wünschen Ihnen ein glückliches neues Jahr. –

+1

Wie zu speichern, dass Rekorder Audio-Puffer ,, Bitte teilen Sie es? –

0

Sie können this einfaches Beispiel sehen. Es beschreibt, wie die Remote-IO-Einheit verwendet wird. Nachdem Sie dieses Beispiel verstanden haben, sollten Sie auf PJSIP's audio driver achten. Diese sollten Ihnen helfen, Ihre eigene Lösung zu implementieren. Viel Glück.