2014-02-26 9 views
6

Bei der Aufnahme von Audio mit einer AVAudioSession wird die Audiowiedergabe von der Musik-App oder anderen gestoppt. Dies wird in der Audiositzung Dokumentation beschrieben:Aufnehmen von Audio auf iOS ohne Beenden der Musikwiedergabe

AVAudioSessionCategoryRecord

Für Audio-Aufzeichnung; In dieser Kategorie wird die Wiedergabe von Audio stummgeschaltet.

Gibt es eine Möglichkeit, dieses Verhalten zu ändern und einen der folgenden Schritte auszuführen?

1) Fahren Sie mit dem Abspielen der Audiodateien anderer Apps fort und lassen Sie das Telefon die Audiodaten aufnehmen, die gerade abgespielt werden.

2) Setzen Sie das Audio der anderen Apps wieder ein, sobald eine kurze Aufnahme beendet ist. Es gibt Benachrichtigungen, auf die Apps reagieren können, wenn Audiounterbrechungen beginnen oder enden. Gibt es etwas Bestimmtes, das für andere Apps erforderlich ist, um diese Benachrichtigungen zu erhalten?

Antwort

0

1) Nicht möglich für . Alles, was Sie tun können, ist [[AVAudioSession sharedInstance] isOtherAudioPlaying] überprüfen und Benutzer fragen würde er Musik-Streaming stoppen möchte oder nicht.

2) App kann keine Benachrichtigungen empfangen, wenn der iPod-Status geändert wurde, können wir nicht beobachten isOtherAudioPlaying Eigenschaft ... Lösung Ich verwende auf meine Projekte: fügen Sie einen NSTimer und einmal in sec überprüfen [[AVAudioSession sharedInstance] isOtherAudioPlaying] BOOL-Wert.

+1

Snapchat hat diese Funktion soeben implementiert, dass Sie Audiodateien aufnehmen können, die gerade im Hintergrund abgespielt werden. Es gibt definitiv einen Weg, es zu tun. Ich bin mir noch nicht sicher, wie es ist. – Oren

+0

@Oren ja ... Ich überprüfe alle Seiten, aber nein, wo sie beschreiben, warum und wie Snapchat und Periskop ohne Unterbrechung funktioniert und Videos aufzeichnen ... es gibt keine Lösung [auch hier] (http: // stackoverflow .com/questions/35839604/camera-freeze-wenn-open-app-while-call-läuft) –

0

können Sie verwenden

Obj-C

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord 
withOptions:AVAudioSessionCategoryOptionMixWithOthers error:nil]; 

oder

Swift

let audioSession = AVAudioSession.sharedInstance() 
     do { 
      try audioSession.setCategory(AVAudioSessionCategoryPlayAndRecord, 
             with: AVAudioSessionCategoryOptions.mixWithOthers) 
     } catch let error as NSError { 
      print("audioSession error: \(error.localizedDescription)") 
     } 
0

von 24 Stunden nach sorgfältiger Suche und Dinge zusammen piecemealing, dies überraschend einfach:

let session = AVAudioSession.sharedInstance() 
session.setCategory(AVAudioSessionCategoryPlayAndRecord, with: [.mixWithOthers, .allowBluetoothA2DP]) 

Und das ist es für jeden, der noch sucht, wie man das macht.