簡體   English   中英

錄制時ios音頻單元remoteIO播放

[英]ios audio unit remoteIO playback while recording

我被指控將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個單位,一個錄音,一個播放,但它似乎不是蘋果的意圖(仍然是文檔)。

當然,我找不到任何關於它的文檔,音頻單元仍然沒有記錄......

任何人都會知道最好的方法是什么?

我沒有使用過VOIP或kAudioSessionCategory_PlayAndRecord。 但是,如果你想錄制/傳輸從麥克風中拾取的語音並播放來自網絡包的傳入數據: 是一個包括麥克風和播放的好樣本。 此外,如果您還沒有從Apple閱讀此文檔,我強烈建議您這樣做

簡而言之:您需要創建一個AudioUnits實例。 在其中,配置兩個回調:一個用於麥克風,一個用於回放。 回調麥克風功能將為您提供從麥克風中拾取的數據。 然后,您可以使用任何選擇的網絡協議轉換並傳輸到其他設備。 播放回調功能是您從其他網絡設備提供傳入數據以進行播放的地方。

你可以看到這個簡單的例子。 它描述了如何使用遠程IO單元。 理解了這個例子后,你應該看PJSIP的音頻驅動程序 這些應該可以幫助您實現自己的解決方案 祝你好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM