iPhone下udp,rtcp/rtp的及时语音通话。
占坑,代码需要整理...
#import <Foundation/Foundation.h> #import <AudioToolbox/AudioToolbox.h> #define kRecordBuffers 9 /* 采集语音 */ @interface AudioRecord : NSObject { IBOutlet UILabel* _averagePower; IBOutlet UILabel* _peakPower; AudioQueueRef mQueue; AudioQueueBufferRef mBuffers[kRecordBuffers]; AudioStreamBasicDescription mFormat; AudioQueueLevelMeterState *_chan_lvls; NSArray *_channelNumbers; BOOL recording; } -(void)setChannelNumbers:(NSArray *)v; -(void)initAudioSession;//初始化 - (IBAction)startstop;//采集或停止 -(int)getRecordByteSize;//已采集的字节数 -(int)getRecordPacketSize;//已采集的字节包数 -(void)setRecording:(BOOL)bl;//是否继续采集 @end
static void MyInputBufferHandler(void * inUserData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer, const AudioTimeStamp * inStartTime, UInt32 inNumPackets, const AudioStreamPacketDescription* inPacketDesc) { pool = [[NSAutoreleasePool alloc] init]; //NSLog(@"mAudioDataByteSize=%lu",inBuffer->mAudioDataByteSize); UdpTemplate *rtp = [StaticClassFactory getRtp]; if (rtp!=nil) { uint8_t outbuf[100]; int outbuflength = Encoder_Interface_Encode(amr, MR515, (const short *)inBuffer->mAudioData, outbuf, 0); NSData *mv = [NSData dataWithBytes:outbuf length:outbuflength]; if (listSize<8) { [list addObject:mv]; listSize++; }else{ NSData *data = [RtpBean rtpList:list]; if (data!=nil) { [rtp send:data]; sendRecordByteSize += sizeof(data); sendRecordPacketSize++; } [list removeAllObjects]; listSize = 0; } } AudioQueueEnqueueBuffer(inAQ, inBuffer, 0, NULL); [pool release]; pool = nil; }