0
저는 맞춤 voip 응용 프로그램에서 작업합니다. CoreAudio의 오디오 입/출력에 의존합니다. 응용 프로그램에서 AudioOutputUnitStart를 호출 할 때 몇 초 동안 멈추는 문제가 있음을 발견했습니다.iphone 시뮬레이터 및 장치에서 AudioOutputUnitStart가 느립니다.
OSStatus status;
InitializeAudioSession();
AudioComponentDescription desc;
desc.componentType = kAudioUnitType_Output;
desc.componentSubType = kAudioUnitSubType_RemoteIO;
desc.componentManufacturer = kAudioUnitManufacturer_Apple;
desc.componentFlags = 0;
desc.componentFlagsMask = 0;
mVoiceUnitComponent = AudioComponentFindNext(NULL, &desc);
status = AudioComponentInstanceNew(mVoiceUnitComponent, &mVoiceUnit);
UInt32 enable = 1;
AudioUnitElement inputBus = 1, outputBus = 0;
status = AudioUnitSetProperty(mVoiceUnit, kAudioOutputUnitProperty_EnableIO,
kAudioUnitScope_Input, inputBus,
&enable, sizeof(enable));
status = AudioUnitSetProperty(mVoiceUnit, kAudioOutputUnitProperty_EnableIO, kAudioUnitScope_Output,
outputBus, &enable, sizeof(enable));
memset(&mStreamDesc, 0, sizeof(mStreamDesc));
mStreamDesc.mSampleRate = SPK_SAMPLE_RATE;
mStreamDesc.mFormatID = kAudioFormatLinearPCM;
mStreamDesc.mFormatFlags = kAudioFormatFlagsCanonical;
mStreamDesc.mBitsPerChannel = 16;
mStreamDesc.mChannelsPerFrame = 1;
mStreamDesc.mBytesPerFrame = 2;
mStreamDesc.mFramesPerPacket = 1;
mStreamDesc.mBytesPerPacket = 2;
status = AudioUnitSetProperty(mVoiceUnit, kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
inputBus, &mStreamDesc, sizeof(mStreamDesc));
StartAudioSession();
status = AudioUnitInitialize(mVoiceUnit);
status = AudioUnitSetProperty(mVoiceUnit, kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Input,
outputBus, &mStreamDesc, sizeof(mStreamDesc));
AURenderCallbackStruct outputCallback;
outputCallback.inputProc = IOSAudio::OutputRenderCallback;
outputCallback.inputProcRefCon = this;
status = AudioUnitSetProperty(mVoiceUnit, kAudioUnitProperty_SetRenderCallback,
kAudioUnitScope_Input, outputBus,
&outputCallback, sizeof(outputCallback));
AURenderCallbackStruct inputCallback;
inputCallback.inputProc = IOSAudio::InputRenderCallback;
inputCallback.inputProcRefCon = this;
status = AudioUnitSetProperty(mVoiceUnit, kAudioOutputUnitProperty_SetInputCallback,
kAudioUnitScope_Global, inputBus,
&inputCallback, sizeof(inputCallback));
status = AudioOutputUnitStart(mVoiceUnit);
mActive = true;
SPK_SAMPLE_RATE는 8000 또는 32000입니다. 둘 다 테스트했습니다.
누구에게 조언 해 주시겠습니까?