Android Academy · Lektion

Videos aufnehmen

Videos mit CameraX aufnehmen

Lektion 4 von 413 Schritte

Videos aufnehmen ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.

Videos mit CameraX aufnehmen

CameRX zeichnet Videos über den VideoCapture-Use-Case auf, der von einem Recorder unterstützt wird. In dieser Lektion richten Sie die Videoaufnahme ein, starten und beenden eine Aufnahme und speichern sie einschließlich Ton in der Galerie.

Der Ablauf ähnelt dem bei Fotos, ergänzt ihn jedoch um eine länger laufende Recording-Sitzung, die Sie starten und später beenden.

Recorder und Qualität

Zuerst erstellen Sie einen Recorder, der Kodierung und Qualität festlegt. Mit QualitySelector können Sie eine gewünschte Zielqualität (z. B. HD oder FHD) anfordern und eine Ersatzqualität festlegen, falls das Gerät sie nicht bereitstellen kann.

val recorder = Recorder.Builder()
    .setQualitySelector(
        QualitySelector.from(
            Quality.FHD,
            FallbackStrategy.lowerQualityOrHigherThan(Quality.SD)
        )
    )
    .build()

VideoCapture erstellen

Verpacken Sie den Recorder mithilfe der withOutput-Factory in einen VideoCapture-Use-Case. Dieses Objekt binden Sie an die Kamera – genau wie ImageCapture.

val videoCapture = VideoCapture.withOutput(recorder)

Vorschau und VideoCapture binden

Binden Sie die Vorschau und VideoCapture gemeinsam. Beachten Sie, dass Sie auf vielen Geräten ImageCapture und VideoCapture nicht gleichzeitig binden können. Wählen Sie daher die Use-Cases aus, die Ihr Bildschirm benötigt.

cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
    lifecycleOwner,
    CameraSelector.DEFAULT_BACK_CAMERA,
    preview,
    videoCapture
)

Audioberechtigung

Für die Tonaufnahme benötigen Sie zusätzlich zu CAMERA die Laufzeitberechtigung RECORD_AUDIO. Fordern Sie beide Berechtigungen an, bevor Sie eine Aufnahme starten, und aktivieren Sie den Ton nur, wenn die Nutzerin bzw. der Nutzer ihn gewährt hat.

// Manifest declares both:
// <uses-permission android:name="android.permission.CAMERA" />
// <uses-permission android:name="android.permission.RECORD_AUDIO" />

val audioGranted = ContextCompat.checkSelfPermission(
    context, Manifest.permission.RECORD_AUDIO
) == PackageManager.PERMISSION_GRANTED

Ausgabe über MediaStore

Speichern Sie das Video wie Fotos mithilfe von Scoped Storage in MediaStore. Erstellen Sie ContentValues mit dem MIME-Typ mp4 und erzeugen Sie MediaStoreOutputOptions.

val values = ContentValues().apply {
    put(MediaStore.MediaColumns.DISPLAY_NAME, "VID_${System.currentTimeMillis()}")
    put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4")
    put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/MyApp")
}

val outputOptions = MediaStoreOutputOptions
    .Builder(context.contentResolver, MediaStore.Video.Media.EXTERNAL_CONTENT_URI)
    .setContentValues(values)
    .build()

Eine Aufnahme starten

Bereiten Sie die Aufnahme über den Recorder vor, aktivieren Sie optional mit withAudioEnabled() den Ton und rufen Sie anschließend start() auf. start() gibt ein Recording-Objekt zurück, das Sie aufbewahren, um die Aufnahme später zu beenden.

Außerdem übergeben Sie einen Listener, der Aktualisierungen vom Typ VideoRecordEvent empfängt.

val recording = videoCapture.output
    .prepareRecording(context, outputOptions)
    .apply { if (audioGranted) withAudioEnabled() }
    .start(ContextCompat.getMainExecutor(context)) { event ->
        when (event) {
            is VideoRecordEvent.Start -> { /* recording began */ }
            is VideoRecordEvent.Finalize -> {
                if (!event.hasError()) {
                    // event.outputResults.outputUri -> saved video
                }
            }
        }
    }

Aufnahmeereignisse verarbeiten

Der Listener liefert den Lebenszyklus der Aufnahme:

  • VideoRecordEvent.Start – die Aufnahme hat begonnen (aktualisieren Sie die Benutzeroberfläche zu einem Stopp-Button).
  • VideoRecordEvent.Status – regelmäßige Aktualisierungen zur aufgenommenen Dauer und Größe.
  • VideoRecordEvent.Finalize – die Aufnahme ist beendet; prüfen Sie hasError().
is VideoRecordEvent.Status -> {
    val seconds = event.recordingStats.recordedDurationNanos / 1_000_000_000
    // Update an on-screen timer.
}

Die Aufnahme beenden

Rufen Sie zum Beenden stop() für das zuvor gespeicherte Recording auf. Dadurch wird ein Finalize-Ereignis ausgelöst, bei dem die URI des Videos verfügbar wird.

Speichern Sie die aktive Aufnahme im State, damit ein einzelner Button zwischen Start und Stopp umschalten kann.

var activeRecording: Recording? = null

// Toggle handler:
if (activeRecording == null) {
    activeRecording = startRecording()
} else {
    activeRecording?.stop()
    activeRecording = null
}

Pausieren und fortsetzen

Ein Recording kann auch pausiert und fortgesetzt werden, ohne es zu beenden. Das ist praktisch, wenn Nutzerinnen und Nutzer mehrere Clips zu einer Datei zusammenfügen möchten.

activeRecording?.pause()
// ...later
activeRecording?.resume()
// Final stop writes the file:
activeRecording?.stop()

Compose-Oberfläche für Aufnahmen

Steuern Sie die Benutzeroberfläche über den State. Verfolgen Sie, ob eine Aufnahme aktiv ist, und tauschen Sie das Button-Symbol sowie die zugehörige Aktion entsprechend aus. Da der Listener auf dem Main-Executor ausgeführt wird, können Sie den Compose-State direkt darin aktualisieren.

var isRecording by remember { mutableStateOf(false) }

IconButton(onClick = { toggleRecording() }) {
    Icon(
        imageVector = if (isRecording) Icons.Default.Stop else Icons.Default.Videocam,
        contentDescription = if (isRecording) "Stop" else "Record"
    )
}

Kurzer Check

Vergewissern Sie sich, dass Sie die Videoaufnahme mit CameraX verstanden haben.

Zusammenfassung

Sie können jetzt Videos mit CameraX aufnehmen:

  • Erstellen Sie einen Recorder mit einem QualitySelector und verpacken Sie ihn in VideoCapture.withOutput.
  • Binden Sie ihn zusammen mit der Vorschau und fordern Sie für die Tonaufnahme RECORD_AUDIO an.
  • Speichern Sie das Video über MediaStoreOutputOptions und rufen Sie anschließend prepareRecording().start() auf, um ein Recording zu erhalten.
  • Reagieren Sie auf VideoRecordEvents, rufen Sie zum Abschließen stop() auf und lesen Sie die URI des gespeicherten Videos aus.

Sie haben den CameraX-Kurs abgeschlossen – Vorschau, Fotos und Videos gehören jetzt zu Ihrem Werkzeugkasten.

Kostenlos starten

Lerne Kotlin mit einem KI-Tutor — kostenlos

Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.

Kurse
36
Lektionen
152

Häufig gestellte Fragen

Ist die Lektion „Videos aufnehmen“ kostenlos?

Ja — der vollständige Text von „Videos aufnehmen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Videos aufnehmen“?

Videos mit CameraX aufnehmen Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Android Academy zu starten?

Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.

Wie lange dauert die Lektion „Videos aufnehmen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?

Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. Überblick über CameraX
  2. Eine Kameravorschau anzeigen
  3. Fotos aufnehmen
  4. Videos aufnehmen
← Zurück zu Android Academy