AVFAudio在iOS 10上播放崩溃

我有一个应用程序与一个非常基本的音频组件:一组循环的背景歌曲与AVAudioPlayer播放(歌曲文件名存储为一个数组).一切都已经工作了好几个月,但是iOS 10正在大量的用户崩溃(每天数千).

问题是,我不知道iOS 10中有什么变化.似乎每次用户锁定他们的设备时都会发生,特别是在音乐完成淡出的瞬间(它不会做背景音频,所以离开该应用程序会自动淡出音乐).

在那一刻,我每次都得到这个:

2016-09-22 17:06:39.439979 TerraGenesis[8533:2459778] [aurioc] 889: failed: '!pla' (enable 2, outf< 2 ch,      0 Hz, Float32, non-inter> inf< 2 ch,      0 Hz, Float32, non-inter>)
2016-09-22 17:06:39.443348 TerraGenesis[8533:2459778] [aurioc] 889: failed: '!pla' (enable 2, outf< 2 ch,  44100 Hz, Float32, non-inter> inf< 2 ch,      0 Hz, Float32, non-inter>)
2016-09-22 17:06:39.445339 TerraGenesis[8533:2459778] [central] 54:   ERROR:    [0x1b50d6c40] >avae> AVAudioEngineGraph.mm:2515: PerformCommand: error 561015905
2016-09-22 17:06:39.446646 TerraGenesis[8533:2459778] *** Terminating app due to uncaught exception 'com.apple.coreaudio.avfaudio', reason: 'error 561015905'
*** First throw call stack:
(0x1904781c0 0x18eeb055c 0x190478094 0x1a99d978c 0x1a99ed170 0x1a99ede58 0x1a9a5b3a0 0x1a9a5a6b0 0x1a9a5a640 0x1a0228580 0x1a020cff8 0x19041222c 0x190411930 0x1904116ac 0x190480b9c 0x190353bf4 0x190e5a6bc 0x1963284a0 0x19654df40 0x19655c3ec 0x196547ae8 0x19654776c 0x196879034 0x191febbd4 0x192019904 0x192019770 0x192019b18 0x190426278 0x190425bc0 0x1904237c0 0x190352048 0x191dd5198 0x19632b818 0x196326550 0x1001c1428 0x18f3345b8)
libc++abi.dylib: terminating with uncaught exception of type NSException

这是堆栈跟踪:

Fatal Exception: com.apple.coreaudio.avfaudio
0  CoreFoundation                 0x18d45c1c0 __exceptionPreprocess
1  libobjc.A.dylib                0x18be9455c objc_exception_throw
2  CoreFoundation                 0x18d45c094 +[NSException raise:format:]
3  AVFAudio                       0x1a6a7578c AVAE_RaiseException(NSString*, ...)
4  AVFAudio                       0x1a6a89170 AVAudioEngineGraph::PerformCommand(AUGraphNode&, AVAudioEngineGraph::ENodeCommand, void*, unsigned int) const
5  AVFAudio                       0x1a6a89e58 AVAudioEngineGraph::Initialize()
6  AVFAudio                       0x1a6af73a0 AVAudioEngineImpl::Initialize()
7  AVFAudio                       0x1a6af66b0 AVAudioEngineImpl::Start(NSError**)
8  AVFAudio                       0x1a6af6640 -[AVAudioEngine startAndReturnError:]
9  SceneKit                       0x19d20c580 CPP3DAudioEngine::GetAVEngine()
10 SceneKit                       0x19d1f0ff8 -[SCNView _enterBackground:]

这里是我的代码这是我的代码中以任何方式处理音频的唯一部分.

-(void)playNextSong {
    int musicPlaybackIndex = [[[NSUserDefaults standardUserDefaults] objectForKey:@"musicPlaybackIndex"] intValue];

    NSURL *soundFileURL = [NSURL fileURLWithPath:[_musicPlaylist objectAtIndex:musicPlaybackIndex]];
    _musicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:soundFileURL error:nil];
    _musicPlayer.volume = 0.15;
    _musicPlayer.delegate = self;

    [_musicPlayer prepareToPlay];
    [_musicPlayer play];

    if(musicPlaybackIndex+1 < [_musicPlaylist count]) {
        musicPlaybackIndex++;
    } else {
        musicPlaybackIndex = 0;
    }
}

我在iPhone,iPad和iPod touch上看到这个崩溃,但完全在iOS 10.0.0和10.0.1上.我一直在寻找那些“aurioc”的电话几个小时,但是我找不到任何有用的东西,它是用一个行话写的,我无法解析.

任何人都可以告诉我我可能做错了什么,还是帮助我指出在iOS 10中使用AVAudioPlayer可能会发生什么变化?

这是一个苹果错误,有两个解决方法,而我们等待iOS 10.2中的修复:

(1)(更差)启用背景音频

(2)(更好)请看下面的Apple消息

来自苹果的消息:这是一个已知问题,将在10.2修复.同时,另一个更简单的解决方法应该有效:在输入背景之前自己触发音频引擎创建(例如在安装时).您可以通过从SCNView获取音频引擎来触发这一点:

scnView.audioEngine;

http://stackoverflow.com/questions/39543083/avfaudio-playback-crash-on-ios-10

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:AVFAudio在iOS 10上播放崩溃