我被委托将VOIP添加到一款游戏中(跨平台,因此不能使用苹果的游戏工具包来实现)。
现在已经尝试了3到4天,试图理解音频单元和remoteIO... 我查看了数十个示例,但每次都只是将简单的算法应用于输入PCM,并将其播放回扬声器。 根据苹果的文档,为了进行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
}
我打算从那个回调函数中向对等方发送数据(当然不是直接发送,但数据将来自它)...
我不知道如何播放与输入不同的输出,除非使用两个单元,一个录音,一个播放,但这似乎不是苹果想要的(仍然根据文档)。
当然,我找不到任何关于它的文档,音频单元仍然几乎没有文档...
有人有什么好的方法吗?