iOS開發-Audio Unit錯誤之CrashIfClientProvidedBogusAudioBufferList

類似堆棧如下:

* 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");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章