So wenden Sie Filter auf Video in Echtzeit mit Swift an

8

ist es möglich, einen Filter auf AVLayer anzuwenden und ihn view als addSublayer hinzuzufügen? Ich möchte die Farben ändern und etwas Rauschen in das Video von der Kamera mit Swift hinzufügen und ich weiß nicht wie.

Ich dachte, das ist möglich, filterLayer und previewLayer wie folgt hinzuzufügen:

%Vor%

und dies kann vielleicht Video mit meinem benutzerdefinierten Filter erstellen, aber ich denke, das ist möglich, um AVComposition

effektiver zu verwenden

Also was ich wissen muss:

  1. Was ist der einfachste Weg, Filter auf Kamera-Videoausgabe in Echtzeit anzuwenden?
  2. Ist es möglich, AVCaptureVideoPreviewLayer und CALayer zusammenzuführen?

Danke für jeden Vorschlag ..

    
David Sýkora 03.09.2015, 14:38
quelle

1 Antwort

21

Es gibt noch eine Alternative: Verwenden Sie eine AVCaptureSession, um Instanzen von CImage zu erstellen, auf die Sie CIF-Filter anwenden können (von denen es viele gibt, von Unschärfen über Farbkorrektur bis zu VFX).

Hier ist ein Beispiel mit dem ComicBook-Effekt. Kurz gesagt, erstellen Sie eine AVCaptureSession:

%Vor%

Erstellen Sie ein AVCaptureDevice, um die Kamera darzustellen, hier stelle ich die Rückkamera ein:

%Vor%

Erstellen Sie dann eine konkrete Implementierung des Geräts und hängen Sie es an die Sitzung an. In Swift 2 kann das Instanziieren von AVCaptureDeviceInput einen Fehler auslösen, also müssen wir Folgendes abfangen:

%Vor%

Nun, hier ist ein kleines "Gotcha": Obwohl wir nicht wirklich eine AVCaptureVideoPreviewLayer verwenden, aber es ist erforderlich, um den Beispieldelegaten zum Laufen zu bringen, also erstellen wir eines von denen:

%Vor%

Als nächstes erstellen wir eine Videoausgabe, AVCaptureVideoDataOutput, mit der wir auf den Video-Feed zugreifen:

%Vor%

Stellen Sie sicher, dass die Implementierung von AVCaptureVideoDataOutputSampleBufferDelegate durch self erfolgt, und wir können den Beispielpuffer-Delegaten für die Videoausgabe festlegen:

%Vor%

Die Videoausgabe wird dann an die Aufnahmesitzung angehängt:

%Vor%

... und schließlich starten wir die Capture-Session:

%Vor%

Da wir den Delegaten festgelegt haben, wird captureOutput mit jedem Frame-Capture aufgerufen. captureOutput wird an einen Beispielpuffer vom Typ CMSampleBuffer übergeben, und es werden nur zwei Codezeilen benötigt, um diese Daten in einen CIImage für Core Image zu konvertieren:

%Vor%

... und diese Bilddaten werden an unseren Comic-Effekt übergeben, der wiederum verwendet wird, um eine Bildansicht zu füllen:

%Vor%

Ich habe den Quellcode für dieses Projekt hier in meinem GitHub Repo verfügbar .

    
Simon Gladman 03.09.2015, 16:32
quelle