2016-09-17 6 views
15

ich eine App mit einer sehr einfachen Audio-Komponente habe: ein Looping Satz von Hintergrund-Songs gespielt mit einem AVAudioPlayer (Song-Dateinamen als Array gespeichert). Alles funktioniert seit Monaten einwandfrei, aber iOS 10 stürzt bei einer beträchtlichen Anzahl meiner Benutzer ab (Tausende pro Tag).AVFAudio Wiedergabe Absturz auf iOS 10

Das Problem ist, ich kann nicht herausfinden, was in iOS 10 geändert wurde. Es scheint jedes Mal passieren, wenn der Benutzer ihr Gerät sperrt, und speziell passiert es die sofortige Beendigung der Musik (es tut Hintergrund nicht Audio, so verlässt die App automatisch die Musik).

In diesem Moment bekomme ich diese jedes Mal: ​​

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 

Hier ist der Stack-Trace:

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:] 

Und mein Code hier. Dies ist der einzige Teil meines Codes, der Audio in irgendeiner Weise behandelt.

-(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; 
    } 
} 

Ich sehe diesen Absturz auf iPhone, iPad und iPod touch, sondern ausschließlich auf iOS 10.0.0 und 10.0.1. Ich habe seit Stunden nach diesen "[aurioc]" -Aufrufen gesucht, aber ich kann nichts Nützliches finden, und es ist in einem Jargon geschrieben, den ich nicht ganz analysieren kann.

Kann mir jemand zeigen, was ich tun könnte falsch, oder helfen Sie mir zeigen in die Richtung dessen, was man 10 mit AVAudioPlayer in iOS geändert haben?

Antwort

7

Dies ist ein Apple-Bug, 2 Abhilfen hat, während wir für das Update in iOS warten 10.2:

(1) (schlechter) ermöglichen

Hintergrund Audio-

(2) (besser) siehe unten Apple-Nachricht

Nachricht von Apple: Dies ist ein bekanntes Problem, das in 10.2 behoben werden. In der Zwischenzeit sollte ein weiterer einfacher Workaround funktionieren: Erzeuge die Audio Engine Erstellung selbst bevor du den Hintergrund eingibst (zum Beispiel beim Setup). Sie können dies einfach auslösen, indem Sie den Audio-Engine aus dem SCNView bekommen:

scnView.audioEngine;

+2

Danke !!! Apple hat das Update abgelehnt, wo ich versucht habe, Hintergrund-Audio zu aktivieren, weil ich es nicht wirklich benutzt habe, aber einfach '' _ _scene audioEngine] aufrufen; 'scheint es behoben zu haben. Danke noch einmal! – Nerrolken

+0

Option 2 scheint die Hintergrund-Audiowiedergabe durch andere Apps zu stoppen (und zu verhindern), wenn die SceneKit-App ausgeführt wird - versuchte es, schien das Problem zu beheben, aber ich fing an, Beschwerden von Benutzern zu erhalten. Option 1 scheint zu funktionieren und nicht zu stoppen anderes Hintergrund-Audio (aus meinen Tests bisher) – StephenT

+0

ich scnView.audioEngine nicht bekommen, was bedeutet das? – OtakuFitness

8

Diese Ausnahme mit Code 561015905 - bezogen auf AVAudioSessionErrorCodeCannotStartPlaying. Dieser Fehlertyp kann auftreten, wenn die Informationseigenschaftsliste der App keine Audio-Verwendung zulässt oder wenn sich die Anwendung im Hintergrund befindet und eine Kategorie verwendet, die kein Hintergrundaudio zulässt.

Bitte nehmen Sie sich einen Blick auf Dokumentation zu AVAudioSessionErrorCodeCannotStartPlaying. Ich hoffe das hilft.

+0

Bizarr. Anscheinend habe ich die "Hintergrund-Audio" -Funktion meiner App hinzugefügt, um den Absturz zu beheben, obwohl ich nicht im Hintergrund war und immer noch nicht Audio abspiele. Ich bin mir nicht sicher, was diesen Absturz unter iOS 10 ausgelöst hat, aber ich habe zumindest eine Lösung. Vielen Dank! – Nerrolken