【问题标题】:ios audio unit remoteIO playback while recordingios音频单元remoteIO在录制时播放
【发布时间】:2012-09-16 09:20:03
【问题描述】:

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

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

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

【问题讨论】:

    标签: ios voip audiounit


    【解决方案1】:

    我没有使用过 VOIP 或 kAudioSessionCategory_PlayAndRecord。但是,如果您想录制/传输从麦克风拾取的语音并播放来自网络包的传入数据:Here 是一个很好的示例,其中包括麦克风和播放。此外,如果您尚未阅读 Apple 的此文档,我强烈推荐 this

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

    【讨论】:

    • 我在搜索过程中没有找到这个样本,它对我很有帮助,谢谢!
    • 非常感谢你的帖子。我一直在寻找这个。现在你解决了我的问题。非常感谢,祝你新年快乐。
    • 如何保存录音机的音频缓冲区,请分享一下?
    • 非常感谢!一直在努力理解流程以及如何与 AU 合作。
    【解决方案2】:

    你可以看this的简单例子。它描述了如何使用远程 IO 单元。理解这个例子后,你应该看PJSIP's audio driver。这些应该可以帮助您实施自己的解决方案。祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-30
      • 2017-10-17
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-15
      相关资源
      最近更新 更多