AVAudioRecorder zeichnet nicht im Hintergrund auf, nachdem die Unterbrechung der Audiositzung beendet wurde

7

Ich nehme Audio in meiner App auf, sowohl im Vordergrund als auch im Hintergrund. Ich behandle auch AVAudioSessionInterruptionNotification, um die Aufzeichnung zu stoppen, wenn die Unterbrechung beginnt, und am Ende des Vorgangs erneut zu beginnen. Obwohl es im Vordergrund wie erwartet funktioniert, wenn die App im Hintergrund aufnimmt und ich einen Anruf erhalte, fängt sie nicht wieder an aufzunehmen, nachdem der Anruf beendet wurde. Mein Code ist folgender:

%Vor%

Beachten Sie, dass fileURL auf die neue caf-Datei in einem NSDocumentDirectory-Unterverzeichnis verweist. Hintergrundmodus Audio ist konfiguriert. Ich habe auch voip versucht und Stille gespielt, beides ohne Erfolg.

Der NSError in AVAudioSessionInterruptionTypeEnded-Block ist ein OSStatus-Fehler 560557684, den ich nicht gefunden habe.

Jede Hilfe wäre sehr willkommen.

    
ozzotto 13.03.2015, 15:34
quelle

2 Antworten

9

Ich habe folgendes hinzugefügt:

%Vor%

vor der Konfiguration von AVAudioSession und es hat funktioniert. Ich weiß immer noch nicht, welche Fehler auftreten können.

    
ozzotto 18.03.2015, 14:15
quelle
12

Fehler 560557684 ist für AVAudioSessionErrorCodeCannotInterruptOthers . Dies passiert, wenn Ihre Hintergrund-App versucht, eine Audiositzung zu aktivieren, die sich nicht mit anderen Audiositzungen vermischt. Hintergrund-Apps können keine Audio-Sitzungen starten, die sich nicht mit der Audio-Sitzung der Vordergrund-App mischen, da dies das Audio der App, die gerade vom Benutzer verwendet wird, unterbrechen würde.

Um dies zu beheben, stellen Sie sicher, dass Sie Ihre Sitzungskategorie auf eine Gruppe setzen, die gemischt werden kann, z. B. AVAudioSessionCategoryPlayback . Stellen Sie außerdem sicher, dass Sie die Kategorieoption AVAudioSessionCategoryOptionMixWithOthers (erforderlich) und AVAudioSessionCategoryOptionDuckOthers (optional) festlegen. Zum Beispiel:

%Vor%

Der Fehlercode 560557684 ist eigentlich 4 ASCII-Zeichen '! int' in einer 32-Bit-Ganzzahl. Die Fehlercodes sind in der Datei AVAudioSession.h aufgeführt (siehe auch AVAudioSession ):

%Vor%     
progrmr 22.02.2016 02:17
quelle