类似堆栈如下:
* thread #10, name = 'AURemoteIO::IOThread', stop reason = EXC_BAD_ACCESS (code=1, address=0x201862df8)
* frame #0: 0x00000002276974e4 AudioToolbox`CrashIfClientProvidedBogusAudioBufferList + 64
frame #1: 0x00000002277ed378 AudioToolbox`AudioConverterChain::CallInputProc(unsigned int) + 944
frame #2: 0x0000000227696ea0 AudioToolbox`AudioConverterChain::FillBufferFromInputProc(unsigned int*, CABufferList*) + 276
frame #3: 0x0000000227696ce0 AudioToolbox`BufferedAudioConverter::GetInputBytes(unsigned int, unsigned int&, CABufferList const*&) + 208
frame #4: 0x0000000227696a18 AudioToolbox`CBRConverter::RenderOutput(CABufferList*, unsigned int, unsigned int&, AudioStreamPacketDescription*) + 116
frame #5: 0x0000000227696894 AudioToolbox`BufferedAudioConverter::FillBuffer(unsigned int&, AudioBufferList&, AudioStreamPacketDescription*) + 800
frame #6: 0x00000002276963a4 AudioToolbox`AudioConverterChain::RenderOutput(CABufferList*, unsigned int, unsigned int&, AudioStreamPacketDescription*) + 132
frame #7: 0x0000000227696894 AudioToolbox`BufferedAudioConverter::FillBuffer(unsigned int&, AudioBufferList&, AudioStreamPacketDescription*) + 800
frame #8: 0x00000002279cfa8c AudioToolbox`AudioConverterFillComplexBuffer + 964
frame #9: 0x000000022788302c AudioToolbox`AUConverterBase::RenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) + 688
frame #10: 0x00000002277674a4 AudioToolbox`AURemoteIO::RenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int) + 332
frame #11: 0x0000000227b4dbc4 AudioToolbox`AUBase::DoRenderBus(unsigned int&, AudioTimeStamp const&, unsigned int, AUOutputElement*, unsigned int, AudioBufferList&) + 172
frame #12: 0x0000000227b4d4c0 AudioToolbox`AUBase::DoRender(unsigned int&, AudioTimeStamp const&, unsigned int, unsigned int, AudioBufferList&) + 488
frame #13: 0x000000022776705c AudioToolbox`AURemoteIO::PerformIO(unsigned int, unsigned int, unsigned int, AudioTimeStamp const&, AudioTimeStamp const&, AudioBufferList const*, AudioBufferList*, int&) + 728
frame #14: 0x0000000227768778 AudioToolbox`AURIOCallbackReceiver_PerformIO + 572
frame #15: 0x00000002278f7bb8 AudioToolbox`_XPerformIO + 96
frame #16: 0x0000000227b381a8 AudioToolbox`mshMIGPerform + 232
frame #17: 0x0000000227b383c0 AudioToolbox`MSHMIGDispatchMessage + 40
frame #18: 0x0000000227767894 AudioToolbox`AURemoteIO::IOThread::Run() + 276
frame #19: 0x000000022776c7f0 AudioToolbox`AURemoteIO::IOThread::Entry(void*) + 76
frame #20: 0x0000000227b3f4f8 AudioToolbox`CAPThread::Entry(CAPThread*) + 88
frame #21: 0x000000022343d2c0 libsystem_pthread.dylib`_pthread_body + 128
frame #22: 0x000000022343d220 libsystem_pthread.dylib`_pthread_start + 44
frame #23: 0x0000000223440cdc libsystem_pthread.dylib`thread_start + 4
(lldb)
原因是传入的数据长度有问题,-1
或者超过长度
//unit 输出的callback回调,会主动回调,我们需要在此回调中给音频数据赋值
//赋值数据的回调
- (void)CCAudioUnit:(CCAudioUnit*)unit
inputBufferList:(AudioBufferList *)list
flag:(AudioUnitRenderActionFlags *)flag
numberFrames:(UInt32)inNumberFrames {
NSInteger length = [_inputStream read:list->mBuffers[0].mData maxLength:list->mBuffers[0].mDataByteSize];
if (length > 0) {
list->mBuffers[0].mDataByteSize = (UInt32)length;
NSLog(@"inputBufferList length %ld",(long)length);
}else {
NSLog(@"inputBufferList Error length < 0");
}
}