Programmgesteuertes Aufnehmen von Fotos während der Videoaufnahme mit der Camera2 API in Android

8

Ich möchte ein Bild während der Videoaufnahme mit der camera2 API aufnehmen.

Zwei separate Demos stehen zur Verfügung. 1. So erfassen Sie das Bild und 2. Videos aufnehmen

Ich habe versucht, sie in einer App zu kombinieren. Aber in vielen Dingen verwirrt. Wie

  • CameraDevice ist eine einzelne Darstellung einer einzelnen Kamera, die mit einem Android-Gerät verbunden ist.
  • Andere Vorlage benötigt in Anfrage. Für Bild: mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW); und für Video mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
  • In der Methode createCaptureSession wird die Oberfläche von ImageReader benötigt und für Video wird MediaRecorder benötigt.

CameraCaptureSession.StateCallback wird in der createCaptureSession-Methode für Bild und Video benötigt.

Und camera2 APIs sind neu. Also keine weiteren Beispiele auf Google.

Hat jemand eine Idee? Wie fotografiere ich während der Aufnahme in Android?

    
Khushbu Shah 23.03.2016, 09:53
quelle

5 Antworten

7

Für die camera2-API und Video-Schnappschüsse müssen Sie das camera2video-Beispiel etwas verbessern.

  • 3 Aufnahmezieloberflächen: Vorschau (ein TextureView oder SurfaceView), JPEG (ein ImageReader) und Aufnahme (MediaRecorder oder MediaCodec).
  • Übergeben Sie Oberflächen von allen dreien an createCaptureSession
  • Wenn Sie kein Video aufnehmen, legen Sie die Wiederholungsanforderung so fest, dass sie nur auf die Vorschau zielt
  • Wenn Sie ein Video aufnehmen, legen Sie die Wiederholungsanforderung so fest, dass sowohl die Vorschau als auch die Aufnahmeoberfläche als Ziel ausgewählt wird, und starten Sie den Medienrecorder (wie bei camera2video); Wenn Sie die Aufzeichnung stoppen, wechseln Sie in der Wiederholungsanforderung zurück zur Targeting-Vorschau.
  • Wenn Sie ein Bild aufnehmen möchten, geben Sie einen einzelnen capture () -Aufruf mit einer Anforderung aus, die auf die JPEG-Oberfläche, die Vorschauoberfläche und, falls die Aufzeichnung aktiv ist, auf die Aufzeichnungsoberfläche zielt.
  • Holen Sie das JPEG vom ImageReader, wenn der Rückruf onImageAvailable ausgelöst wird.
Eddy Talvala 30.03.2016 22:52
quelle
0
%Vor%     
Akshay Sood 30.03.2016 21:09
quelle
0

Um Eddy Talvala's Antwort zu erweitern (was ich auch stimme):

Wenn Sie während der Aufnahme eines Videos ein einzelnes Foto aufnehmen möchten, geben Sie einfach nur ein CaptureRequest aus, das auf die Oberfläche eines ImageReaders ausgerichtet ist. Die Wiederholungsanfrage der Videoaufnahme wird nicht gestoppt. Damit können Sie Schnappschüsse von einem Video aufnehmen, das gerade aufgenommen wird.

Ich hoffe, das hilft, wenn Sie ein paar Codebeispiele brauchen, poste ich sie, wenn ich zu Hause bin.

    
dakku 20.04.2016 15:45
quelle
0

Probieren Sie diesen Kumpel:

%Vor%     
Francisco Durdin Garcia 25.04.2016 09:25
quelle
0

Erstellen Sie eine Video-Miniaturansicht für ein Video. Kann NULL zurückgeben, wenn das Video beschädigt ist oder das Format nicht unterstützt wird.

%Vor%     
Viktor Burmaka 18.05.2017 14:32
quelle