2016-09-15 3 views
2

enter image description hereWie kann man vermeiden AVCaptureVideoPreviewLayer von Blinken beim Wechsel AVCaptureOutput

Ich habe eine Laufeinheit und eine Vorschau-Schicht, die in meiner Ansicht dargestellt wird.

Ich muss die Ausgabe mehrmals in meiner Anwendung zwischen AVCaptureStillImageOutput, AVCaptureMetadataOutput und AVCaptureVideoDataOutput ändern, während meine Vorschau glatt ohne zu blinken erscheinen sollte.

Das Problem: wenn ich eine Ausgabe zu dieser Sitzung hinzufüge, dann blinkt die Vorschau (bitte finden Sie mein angehängtes gif).

Die spezifischen Linien verursacht das Problem:

self.stillImageOutput = AVCaptureStillImageOutput() 
self.stillImageOutput?.outputSettings = [AVVideoCodecKey: AVVideoCodecJPEG] 
if session.canAddOutput(self.stillImageOutput) { 
    session.addOutput(self.stillImageOutput) 
} 

Meine Frage: Wie AVCaptureVideoPreviewLayer von Blinken zu vermeiden, wenn der Ausgang zu einer laufenden Sitzung hinzufügen?

Antwort

0

fand ich eine Lösung für das iPhone 6 und oben in diesen article, die beschreibt, wie hohe Auflösung noch während der Videobilder erfassen:

Neue AV Foundation Kamera-Eigenschaften für das iPhone 6 und iPhone 6 Plus

...

... erfassen Sie Standbilder in voller Auflösung, ohne die Vorschau zu unterbrechen und das Gerät neu zu konfigurieren.

Die Lösung:

Statt das Hinzufügen und Entfernen der Ausgänge, füge ich alle Ausgänge auf der Sitzung.

Für Videoaufzeichnung stelle ich die gewünschte Auflösung (1280x720) bei der Sitzung Preset:

session.sessionPreset = AVCaptureSessionPreset1280x720 

Das Ergebnis dieser Linie ist, dass das aktive Format der Fangeinrichtung (die rückseitige Kamera in meinem Fall) geändert .

Jedes Format verfügt über HRSI (hochauflösendes Standbild), das die Abmessungen von Bildern mit hoher Auflösung beschreibt.

Diese Funktion ist standardmäßig deaktiviert. Um es zu aktivieren, rufen Sie AVCaptureStillImageOutput setHighResolutionStillImageOutputEnabled: auf.

Für hochauflösende Bilder nimmt immer noch die Fahne highResolutionStillImageOutputEnabled auf true gesetzt ist:

self.stillImageOutput?.highResolutionStillImageOutputEnabled = true 

für iPhone 6 zum Beispiel die Standbildauflösung ist: 3264x1836 und die Vorschau der Kamera nicht blinkt .

Verwandte Themen