ios - AVAudioEngineImpl::IOUnitConfigurationChanged() 崩溃

标签 ios avaudioengine

我使用音频引擎。 在崩溃报告中,我看到一些随机的 EXC_BREAKPOINT 崩溃与此堆栈跟踪

Exception Type:  EXC_BREAKPOINT (SIGTRAP)  
Exception Codes: 0x0000000000000001, 0x00000001896df0e4  
Termination Signal: Trace/BPT trap: 5  
Termination Reason: Namespace SIGNAL, Code 0x5  
Terminating Process: exc handler [12467]  
Triggered by Thread:  15  

Thread 15 Crashed:  
0   libdispatch.dylib              0x00000001896df0e4 __DISPATCH_WAIT_FOR_QUEUE__ + 448 (queue.c:1619)  
1   libdispatch.dylib              0x00000001896dec74 _dispatch_sync_f_slow + 140 (queue.c:1732)  
2   libdispatch.dylib              0x00000001896dec74 _dispatch_sync_f_slow + 140 (queue.c:1732)  
3   AVFAudio                      0x00000001965b11a8 -[AVAudioEngine dealloc] + 308 (AVAudioEngine.mm:406)  
4   Foundation                    0x0000000189ce52ac -[NSConcreteNotification dealloc] + 68 (NSNotification.m:206)  
5   AVFAudio                      0x00000001965b7158 invocation function for block in AVAudioEngineImpl::IOUnitConfigurationChanged() + 292 (AVAudioEngine.mm:1215)  
6   libdispatch.dylib              0x00000001896de998 _dispatch_block_async_invoke2 + 104 (queue.c:525)  
7   libdispatch.dylib              0x00000001896fb184 _dispatch_client_callout + 16 (object.m:495)  
8   libdispatch.dylib              0x00000001896d4e8c _dispatch_continuation_pop$VARIANT$armv81 + 404 (inline_internal.h:2484)  
9   libdispatch.dylib              0x00000001896e502c _dispatch_source_invoke$VARIANT$armv81 + 1232 (source.c:568)  
10  libdispatch.dylib              0x00000001896d85e0 _dispatch_lane_serial_drain$VARIANT$armv81 + 260 (inline_internal.h:2525)  
11  libdispatch.dylib              0x00000001896d9128 _dispatch_lane_invoke$VARIANT$armv81 + 400 (queue.c:3863)  
12  libdispatch.dylib              0x00000001896e243c _dispatch_workloop_worker_thread + 576 (queue.c:6445)  
13  libsystem_pthread.dylib        0x000000018974ab88 _pthread_wqthread + 276 (pthread.c:2351)  
14  libsystem_pthread.dylib        0x000000018974d760 start_wqthread + 8

我无法重现此崩溃,堆栈跟踪也没有指向我的代码。有谁知道这次崩溃的原因是什么,如何修复以及是否有可能修复? 谢谢

最佳答案

根据AVAudioEngineConfigurationChange的苹果文档, 在处理此通知期间,您不得释放引擎。

Note The engine must not be deallocated from within the client's notification handler. Callback happens on an internal dispatch queue and can deadlock while trying to teardown the engine synchronously.

虽然你当时没有发布,但是可以造成。 iOS 11 或 12 中的 AVAudioEngine 可能会卡在通知之前,然后您稍后发布引擎。

有解决方法。您必须重新使用音频引擎而不是重新创建。

关于ios - AVAudioEngineImpl::IOUnitConfigurationChanged() 崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59894572/

相关文章:

ios - AVAudioEngine & AVAudioPlayerNode didFinish 方法类似于 AVAudioPlayer

ios - 关于从 AVAudioPCMBuffer 中提取声压级

Swift:断开 AVAudioUnit 与播放 AVAudioEngine 的连接

ios - 带有其他 Swift Pod 的 Google Analytics v3 Pod

ios - XCode: Storyboard 在元素之间添加了额外的空间?

c# - 如何在 C# Xamarin IDE iOS 中隐藏一个按钮

ios - 应用程序被电话 iOS 打断后音频无法播放

iphone - 很奇怪 - %i 对整数不起作用,%d 对吗?

ios - 用quartz2d绘图时如何将矩形夹在圆周围?

ios - Swift iOS 中的实时变调