в примере кода Apple "SpeakHere" вы можете сделать что-то вроде этого:
AudioQueueNewInput(
&mRecordFormat,
MyInputBufferHandler,
this /* userData */,
NULL /* run loop */,
NULL /* run loop mode */,
0 /* flags */, &mQueue)
Вы можете сделать что-то в функции "MyInputBufferHandler", например
[self encoder:(short *)buffer->mAudioData count:buffer->mAudioDataByteSize/sizeof(short)];
функция кодировщика, например:
while ( count >= samplesPerFrame )
{
speex_bits_reset( &bits );
speex_encode_int( enc_state, samples, &bits );
static const unsigned maxSize = 256;
char data[maxSize];
unsigned size = (unsigned)speex_bits_write( &bits, data, maxSize );
/*
do some thing... for example :send to server
*/
samples += samplesPerFrame;
count -= samplesPerFrame;
}
Это общая идея. Конечно, факт сложный, но вы можете увидеть какой-нибудь открытый исходный код VOIP, может быть, он вам поможет
удачи.