Aufnehmen von Videos mit AVFoundation

7

Ich habe mich bei Stack umgesehen und ähnliche Fragen gefunden, aber keine hat bei mir funktioniert. Ich bin ein kompletter Anfänger zu Swift 3.0. Im Wesentlichen versuche ich ein Video mit AVFoundation aufzunehmen. Bis jetzt habe ich es geschafft, ein Standbild zu erfassen, und das ist der Code, den ich bisher habe

%Vor%

und

%Vor%     
Adam Allard 17.01.2017, 12:45
quelle

1 Antwort

30

Ich werde es Ihnen leicht machen, indem Sie den gesamten Code posten, den Sie benötigen, um einen Videorecorder in AVFoundation zu erstellen. Dieser Code sollte funktionieren, wenn Sie ihn einfach kopieren und einfügen. Sie müssen sich nur daran erinnern, dass Sie den camPreview-Ausgang mit einer UIView im ViewController in StoryBoard verbinden müssen. Diese UIView sollte den gesamten Inhalt des Bildschirms einnehmen. Ich werde eine Erläuterung des Codes folgen, damit Sie den Videorecorder selbst untersuchen und ändern können, um ihn an die Anforderungen Ihrer App anzupassen. Sie müssen auch sicherstellen, dass Sie die relevanten Datenschutzberechtigungen an info.plist anhängen. Dies sind Privacy - Microphone Usage Description und Privacy - Camera Usage Description oder Sie sehen nur einen schwarzen Bildschirm.

HINWEIS: Ganz unten habe ich hinzugefügt, wie das aufgezeichnete Video unter dem Titel "Wiedergabe des aufgezeichneten Videos" wiedergegeben wird.

EDIT - Ich habe zwei Dinge vergessen, die es während der Aufnahme zum Absturz gebracht haben, aber ich habe sie jetzt hinzugefügt.

%Vor%

So sollten Sie Ihren View Controller einrichten

Berechtigungen für Ihre Info.plist

Einrichten der Aufzeichnungsdelegaten

Sie müssen AVCaptureFileOutputRecordingDelegate entsprechen. Laut Apple-Dokumenten definiert es eine Schnittstelle für Delegaten von AVCaptureFileOutput, um auf Ereignisse zu reagieren, die bei der Aufzeichnung einer einzelnen Datei auftreten. Es kommt mit zwei Methoden, die Sie implementieren müssen, und das sind die letzten beiden Methoden am Ende des Codes. Das erste ist,

%Vor%

Sie können jede Logik hinzufügen, wenn das Video mit der Aufnahme beginnt. In dem Codebeispiel, das ich angegeben habe, beginnt das Video mit der Aufnahme, wenn Sie auf das rote Quadrat in der linken Ecke tippen. Die zweite ist,

%Vor%

Dies wird aufgerufen, wenn das Video die Aufnahme beendet hat. Im Codebeispiel habe ich angegeben, dass das Video nicht mehr aufgenommen wird, nachdem Sie ein zweites Mal auf die rote Quadrat-Taste geklickt haben. Wenn das Video die Aufzeichnung beendet hat, erhalten Sie eine URL für die Ausgabedatei. Dies repräsentiert dein Video. Sie können dies verwenden, um möglicherweise zu einem anderen View Controller zu wechseln, um das Video in einem AVPlayer abzuspielen. Oder Sie können es speichern. In diesem Beispiel werden Sie feststellen, dass ich mit der Ausgabe-URL nicht viel getan habe.

Um mit der Aufnahme eines Videos zu beginnen, habe ich eine programmatisch erstellte Schaltfläche verwendet, die als rotes Quadrat in der linken Ecke erscheint und auf eine UITapGesture reagiert. Sie können eine bessere Schaltfläche in Ihrer App erstellen.

Einrichten der Sitzung

Der Videorecorder benötigt eine Aufnahmesitzung, die ich in setupSession () eingerichtet habe. Hier fügen Sie die AVCapture-Eingabegeräte hinzu, die die Kamera und das Mikrofon enthalten. Laut Apple ist AVCaptureDeviceInput eine konkrete Unterklasse von AVCaptureInput, mit der Sie Daten von einem AVCaptureDevice-Objekt erfassen. Der Benutzer muss Ihnen jedoch Zugriff gewähren, damit Sie diese verwenden können. In Ihrer Datei info.plist sollten Sie also Datenschutz - Beschreibung der Mikrofonbenutzung und Datenschutz - Beschreibung der Kameraverwendung hinzufügen und einen Grund angeben, warum Sie den Videorekorder und das Mikrofon verwenden möchten. Wenn Sie dies nicht tun, erhalten Sie nur einen schwarzen Bildschirm. Die Sitzungsvoreinstellung ist ein konstanter Wert, der die Qualitätsstufe oder Bitrate der Ausgabe angibt. Ich habe dies zu hoch gesetzt, aber es gibt noch andere Möglichkeiten, die Sie erkunden können. Der movieOutput ist vom Typ AVCaptureMovieFileOutput, der laut Apple eine konkrete Unterklasse von AVCaptureFileOutput ist, die Sie verwenden, um Daten in einem QuickTime-Film zu erfassen. Dies ermöglicht es Ihnen, das Video aufzunehmen und zu speichern.

Einrichten der Vorschau

Hier richten Sie die Kameravorschauebene ein, die in setupPreview () ausgeführt wird. Sie richten den Vorschau-Layer mit der Capture-Sitzung ein, die Sie mit dem folgenden AVCaptureVideoPreviewLayer (Sitzung: captureSession) erstellt haben.

Starten der Sitzung

Der letzte Schritt ist das Starten der Sitzung, die in startSession () durchgeführt wird. Sie prüfen, ob eine Sitzung bereits läuft und wenn nicht, dann starten Sie eine.

%Vor%

Starten der Aufzeichnung

Wenn Sie auf die rote Schaltfläche tippen, wird die Methode startRecording () aufgerufen. Hier habe ich Methoden hinzugefügt, um Video-Orientierung und Video-Stabilisierung zu handhaben. Schließlich sehen wir wieder die Variable filmOutput, die wir zuvor mit unserer Sitzung erstellt haben. Wir nennen es, um unseren Film auf outputURL aufzuzeichnen und ihm mitzuteilen, dass unsere Delegate-Methoden für den Beginn und das Ende der Aufzeichnung im selben View-Controller sind (diese beiden letzten Methoden).

Aufzeichnung beenden

Wenn Sie den roten Knopf erneut drücken, wird startRecoding erneut aufgerufen, aber es wird bemerken, dass etwas aufgezeichnet wird, und stopRecording aufrufen.

Abspielen des aufgezeichneten Videos

Ich werde heute großzügig sein, also werde ich das auch hineinwerfen.

Erstellen Sie einen neuen View-Controller und nennen Sie ihn VideoPlayback. Verbinden Sie es mit Ihrem ersten ViewController über ein Segment im Storyboard. Geben Sie dem Segment eine Kennung "showVideo". Erstellen Sie eine UIView und füllen Sie den Bildschirm von VideoPlayback aus und erstellen Sie eine Steckdose für den View-Controller namens videoView. Fügen Sie Ihrem neuen VideoPlayback-View-Controller den folgenden Code hinzu:

%Vor%

Gehen Sie nun zu Ihrer letzten Delegiertenmethode zurück und ändern Sie sie wie folgt:

%Vor%

Schließlich erstellen Sie eine Vorbereitung für die Methode "segue", die die videoURL initialisiert, die mit dem AVPlayer abgespielt wird.

%Vor%

Jetzt zum Testen gehen Sie zurück und beginnen Sie mit der Aufnahme eines Videos. Beim zweiten Antippen des roten Quadrats wird der Übergang ausgeführt und das aufgezeichnete Video wird automatisch wiedergegeben.

    
gwinyai 17.01.2017, 13:52
quelle

Tags und Links