Videos aufnehmen
Videos mit CameraX aufnehmen
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_GRANTEDAusgabe ü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 SiehasError().
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
Recordermit einemQualitySelectorund verpacken Sie ihn inVideoCapture.withOutput. - Binden Sie ihn zusammen mit der Vorschau und fordern Sie für die Tonaufnahme
RECORD_AUDIOan. - Speichern Sie das Video über
MediaStoreOutputOptionsund rufen Sie anschließendprepareRecording().start()auf, um einRecordingzu erhalten. - Reagieren Sie auf
VideoRecordEvents, rufen Sie zum Abschließenstop()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.
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.