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");
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值