Frage an avcapturesession, ios, avaudiosession – Wie löse ich einen AVCaptureSession v AVAudioSession-Konflikt in iOS?

3

Ich versuche, eine AVCaptureSession in einem Ansichtscontroller auszuführen, rufe jedoch gleichzeitig eine Funktion aus einer Bibliothek auf, die AVAudioSession verwendet. Ich kann anscheinend nicht viel aus dem Debugger herausholen, außer dass er genau dann abstürzt, wenn ich die Funktion dieser bestimmten Bibliothek aufrufe. Die Bibliothek ist libpd:

https://github.com/libpd

und es ruft AVAudioSession als sharedInstance auf. Ich rufe libpd auf als:

<code>[self.audioController configurePlaybackWithSampleRate:44100 numberChannels:2 inputEnabled:YES mixingEnabled:YES]
</code>

Das Mischen ist also aktiviert, aber für den Fall, dass ich es neu kompiliert habe, mache ich Folgendes, wenn es einsetzt:

<code>    UInt32 doSetProperty = 1;
    AudioSessionSetProperty (kAudioSessionProperty_OverrideCategoryMixWithOthers,  sizeof(doSetProperty), &doSetProperty);
</code>

aber kein glück. Das Verschieben der Aufrufe von libpd nach viewWillAppear innerhalb des View Controllers hat ebenfalls nicht funktioniert. Wenn ich jedoch den Code, der libpd aufruft, aus meinem Viewcontroller nehme und ihn in den App-Delegaten innerhalb von didFinishLaunchingWithOptions lege, startet er einwandfrei und die beiden Sitzungen scheinen ohne Absturz nebeneinander zu existieren.

Vermisse ich etwas über AVCaptureSession und das Mischen? Wie gehe ich vor, wenn beide Sitzungen gleichzeitig stattfinden? Ich verwende AVCapture nicht zum Aufnehmen von Audio, sondern nur für den Kameraeingang. Sollte ich also nicht in der Lage sein, beide Funktionen zu nutzen?

Deine Antwort

2   die antwort
4

Starten Sie die Audiositzung (die das Mischen unterstützen kann), nachdem Sie die Kamerasitzung gestartet haben. Ich habe es versucht und Sie müssen warten, bis die Kamera eingerichtet ist, bevor Sie die Audiositzung starten (z. B. einige Sekunden warten)

Es ist mir nicht gelungen, dies zum Laufen zu bringen, obwohl ich zwischen AVAudioSessionCategoryPlayAndRecord und AVAudioSessionCategoryAmbient umschalten und diese Einstellung aktivieren kann, bevor ich startRunning in meiner AVCaptureSession aufrufe und stopRunning in der Aufnahmesitzung aufrufe, bevor ich die Audiositzung umschalte zurück zum Abspielen und Aufnehmen ... Ah, aber vielleicht sollte ich warten, bis AVCaptureSessionDidStartRunningNotification veröffentlicht wurde, bevor ich versuche, die AVAudioSession zu mischen? qix
0

Ist es möglich, dass die Bibliothek annimmt, dass keine andere Audiositzung aktiv ist und Anrufe tätigtAudioSessionInitialize?

Prodie docs "Sie können Ihre Audiositzung nach Bedarf aktivieren und deaktivieren (siehe AudioSessionSetActive), sollten sie jedoch nur einmal initialisieren."

Ich würde vermuten, dass die Autoren dieser Bibliothek keine Funktionen für eine laufende Audiositzung enthalten haben ... aber es wäre einfach genug, dort einzutauchen und die Initialisierungszeilen auszukommentieren, solange Ihre App immer diesen Funktionsaufruf ausführt mit einer laufenden Audiositzung (ansonsten einfach mit einem überprüfenif Anweisung, um zu sehen, ob Sie eine Audiositzung haben, falls nicht, initialisieren Sie eine, etc.)

Verwandte Fragen