5

ゲームに VOIP を追加するよう請求されました (クロスプラットフォームなので、Apple ゲームキットを使用してそれを行うことはできません)。

ここ3、4日、オーディオユニットとremoteIOに頭を悩ませようとしています...私は何十もの例などを見落としてきましたが、毎回入力PCMに単純なアルゴリズムを適用して再生するだけですスピーカーに戻します。Apple のドキュメントによると、VOIP を行うには kAudioSessionCategory_PlayAndRecord を使用する必要があります。

UInt32 audioCategory = kAudioSessionCategory_PlayAndRecord;

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

1)しかし、(私には) playAndRecord は常にマイクから来るものを再生するようです (または、より正確には PerformThru コールバック // aurioTouch )、私は間違っていますか?

私は最も単純なコールバックを持っており、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
}

そのコールバックから、データをピアに送信するつもりです (もちろん直接ではありませんが、データはそこから送信されます)...

2 つのユニット、1 つの録音、1 つの再生を除いて、入力とは異なる出力を再生する方法がわかりませんが、Apple が意図したものではないようです (まだドキュメントに従っています)。

もちろん、それに関するドキュメントは見つかりません。オーディオユニットはまだほとんどドキュメント化されていません...

誰でもそれを行うための最良の方法について考えがあるでしょうか?

4

2 に答える 2

9

私はVOIPまたはkAudioSessionCategory_PlayAndRecordを使用していません。ただし、マイクから拾った音声を録音/送信し、ネットワークパッケージからの着信データを再生する場合は、マイクと再生の両方を含む優れたサンプルを次に示します。また、Appleからこのドキュメントを読んでいない場合は、これを強くお勧めします

つまり、AudioUnitsインスタンスを作成する必要があります。その中で、2つのコールバックを構成します。1つはマイク用、もう1つは再生用です。コールバックマイク関数は、マイクから取得したデータを提供します。その後、選択したネットワークプロトコルを使用して、変換して他のデバイスに送信できます。再生コールバック関数は、他のネットワークデバイスからの着信データを提供して再生する場所です。

于 2012-09-25T01:21:42.780 に答える
0

この簡単な例を見ることができます。リモート IO ユニットの使用方法について説明します。この例を理解したら、PJSIP の audio driverを見てください。これらは、独自のソリューションを実装するのに役立ちます。幸運を祈ります。

于 2014-03-22T07:24:44.220 に答える