AVFoundation.AVAudioPlayerNode.play() 中非常罕见的间歇性崩溃(AVAudioPlayerNode.mm:660)

问题描述 投票:0回答:1

在过去 8 个多月里,我的应用程序一直崩溃。 虽然我为自己能够调试和修复任何东西而感到自豪,但我从来没有能够重现这种崩溃。 由于这是运行大量的代码,而且我每周只看到随机 2-3 次崩溃报告,所以我的直觉认为这是“某事”的多线程计时问题。 我已经实施了大量代码更改以尝试修复它,但截至本周,问题仍然存在。

很想确切地知道为什么 AVFoundation 中引用的代码行会抛出内部异常,或者我如何自己找到答案。 以下是堆栈跟踪的相关部分。 共享代码本身是不现实的,所以希望这能给某人敲响警钟。

作为背景,这是一个音乐播放器应用程序。 该代码在按下应用程序内的播放按钮时执行(即,它运行正常)。 在此之前,测试

audioEngine.isRunning
返回
TRUE
并且
AVAudioPlayerNode
连接到引擎等。换句话说,如果这是显而易见的事情,它会立即崩溃。

Hardware Model:      iPhone16,2
AppVariant:          1:iPhone16,2:17
Code Type:           ARM-64 (Native)
Role:                Background

Date/Time:           2024-03-05 11:03:12.9509 +1000
Launch Time:         2024-03-02 18:01:24.2495 +1000
OS Version:          iPhone OS 17.3.1 (21D61)
Release Type:        User
Baseband Version:    1.40.01
Report Version:      104

Exception Type:  EXC_CRASH (SIGABRT)
Exception Codes: 0x0000000000000000, 0x0000000000000000
Termination Reason: SIGNAL 6 Abort trap: 6

Triggered by Thread:  0

Last Exception Backtrace:
0   CoreFoundation                  0x1b0a8a678 __exceptionPreprocess + 164 (NSException.m:249)
1   libobjc.A.dylib                 0x1a8d07c80 objc_exception_throw + 60 (objc-exception.mm:356)
2   CoreFoundation                  0x1b0b0f424 +[NSException raise:format:arguments:] + 96 (NSException.m:0)
3   AVFAudio                        0x1c9dd2d74 AVAE_RaiseException(NSString*, ...) + 52 (AVAEInternal.h:69)
4   AVFAudio                        0x1c9eaed5c AVAudioPlayerNodeImpl::StartImpl(AVAudioTime*) + 2524 (AVAudioPlayerNode.mm:660)
5   AVFAudio                        0x1c9dd31e4 AVAudioNodeImplBase::Start(AVAudioTime*) + 64 (AVAudioNodeImpl.h:176)
6   AVFAudio                        0x1c9eab440 -[AVAudioPlayerNode play] + 68 (AVAudioPlayerNode.mm:1138)

除了尽快询问 StackOverflow 或重写整个播放引擎来解决此问题之外,我们已经做了所有事情。

ios swift avfoundation avaudioengine avaudioplayernode
1个回答
0
投票

联系Apple技术支持后,发现这是由于没有处理

AVAudioSession.mediaServicesWereResetNotification
造成的。 处理程序代码应该删除 AVAudioEngine 和 AVAudioNode 的任何实例并重新创建它们,因为显然
AVAudioSession.mediaServicesWereResetNotification
使 AVFoundation 类状态无效,因此看似随机的错误与以前工作得很好(即 AVAudioPlayerNode)但现在拒绝功能。

© www.soinside.com 2019 - 2024. All rights reserved.