ios 音频单元 remoteIO 在录制时播放

标签 ios voip audiounit

我被要求将 VOIP 添加到游戏中(跨平台,所以不能使用 Apple gamekit 来做到这一点)。

现在有 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 个单元,一个录音,一个播放,但这似乎不是 Apple 的意图(仍然根据文档)。

当然,我找不到任何关于它的文档,音频单元仍然几乎没有文档......

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

最佳答案

我没有使用过 VOIP 或 kAudioSessionCategory_PlayAndRecord。但是如果你想记录/传输从麦克风拾取的语音并播放来自网络包的传入数据:Here是一个很好的样本,包括麦克风和回放。此外,如果您还没有阅读 Apple 的这份文档,我强烈推荐 this .

简而言之:您需要创建一个 AudioUnits 实例。在其中配置两个回调:一个用于麦克风,一个用于播放。回调麦克风功能将为您提供从麦克风拾取的数据。然后,您可以使用任何选定的网络协议(protocol)转换并传输到其他设备。播放回调函数是您提供来自其他网络设备的传入数据以进行播放的地方。

关于ios 音频单元 remoteIO 在录制时播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12573097/

相关文章:

ios - 为什么 iTunes Connect 拒绝 App Store 中的所有图像,并说它们尺寸错误?

ios - 如何在 Objective-C 中找到平均 10 个信号强度记录

ios - 使用 Agora Kit 进行语音通话

xcode - 在 OSX 10.9 上的 Xcode 5 中构建音频单元的指南

ios - AudioUnitInitialize 失败,错误代码为 1852008051

ios - iOS创建像音量弹出

objective-c - 在界面构建器和模块化中使用 'external object'

java - 混合 8 位 8000Hz PCM_ULAW 样本的最简单方法是什么?

ios10 - CXPlayDTMFCallAction 不播放本地 dtmf 声音

c++ - 音频单位样本值范围