2011-08-27 2 views
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입니다. 둘 다 테스트했습니다.

누구에게 조언 해 주시겠습니까?

답변

0

약간의 조사를했습니다. 내가 틀렸어. 시뮬레이터 문제 만있다. 나는 이것의 원인을 찾지 못했습니다. 그래서 workaround 스레드에 열린 오디오를 대안으로 추가합니다.

관련 문제