Enregistrer une vidéo
Capturez une vidéo avec CameraX.
Enregistrer une vidéo est une leçon Android Academy gratuite sur CoddyKit. Ceci est la leçon 4 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Android Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Android Academy comprend 4 leçons au total.
Enregistrer des vidéos avec CameraX
CameRX enregistre les vidéos grâce au cas d’utilisation VideoCapture, qui repose sur un Recorder. Dans cette leçon, vous allez configurer la capture vidéo, démarrer et arrêter un enregistrement, puis l’enregistrer dans la galerie — audio compris.
Le flux ressemble à celui des photos, mais il ajoute une session d’Recording de longue durée que vous démarrez, puis arrêtez ultérieurement.
Enregistreur et qualité
Vous commencez par construire un Recorder, qui définit l’encodage et la qualité. QualitySelector vous permet de demander une qualité cible (par exemple HD ou FHD), avec une solution de repli si l’appareil ne peut pas la fournir.
val recorder = Recorder.Builder()
.setQualitySelector(
QualitySelector.from(
Quality.FHD,
FallbackStrategy.lowerQualityOrHigherThan(Quality.SD)
)
)
.build()Créer VideoCapture
Enveloppez le Recorder dans un cas d’utilisation VideoCapture avec la fabrique withOutput. Il s’agit de l’objet que vous liez à l’appareil photo, tout comme ImageCapture.
val videoCapture = VideoCapture.withOutput(recorder)Lier l’aperçu et VideoCapture
Liez l’aperçu et VideoCapture ensemble. Notez que sur de nombreux appareils, vous ne pouvez pas lier ImageCapture et VideoCapture en même temps ; choisissez donc les cas d’utilisation nécessaires à votre écran.
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
videoCapture
)Autorisation d’accès au microphone
Pour enregistrer du son, vous avez besoin de l’autorisation d’exécution RECORD_AUDIO, en plus de CAMERA. Demandez les deux autorisations avant de démarrer un enregistrement et n’activez l’audio que si l’utilisateur l’a accordée.
// 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_GRANTEDSortie via MediaStore
Comme pour les photos, enregistrez la vidéo dans MediaStore en utilisant le stockage cloisonné. Construisez des ContentValues avec un type MIME mp4, puis créez des 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()Démarrer un enregistrement
Préparez l’enregistrement à partir de l’enregistreur, activez éventuellement l’audio avec withAudioEnabled(), puis appelez start(). start() renvoie un objet Recording que vous devez conserver pour pouvoir l’arrêter ultérieurement.
Vous transmettez également un écouteur qui reçoit les mises à jour de VideoRecordEvent.
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
}
}
}
}Réagir aux événements d’enregistrement
L’écouteur suit le cycle de vie de l’enregistrement :
VideoRecordEvent.Start— l’enregistrement a commencé (mettez l’interface à jour pour afficher un bouton d’arrêt).VideoRecordEvent.Status— mises à jour périodiques de la durée et de la taille enregistrées.VideoRecordEvent.Finalize— l’enregistrement est terminé ; vérifiezhasError().
is VideoRecordEvent.Status -> {
val seconds = event.recordingStats.recordedDurationNanos / 1_000_000_000
// Update an on-screen timer.
}Arrêter l’enregistrement
Pour terminer, appelez stop() sur le Recording que vous avez enregistré précédemment. Cela déclenche un événement Finalize au cours duquel l’URI de la vidéo devient disponible.
Conservez l’enregistrement actif dans l’état afin qu’un seul bouton puisse basculer entre le démarrage et l’arrêt.
var activeRecording: Recording? = null
// Toggle handler:
if (activeRecording == null) {
activeRecording = startRecording()
} else {
activeRecording?.stop()
activeRecording = null
}Mettre en pause et reprendre
Un Recording peut également être mis en pause puis repris sans être arrêté. C’est pratique pour permettre aux utilisateurs d’assembler plusieurs séquences dans un seul fichier.
activeRecording?.pause()
// ...later
activeRecording?.resume()
// Final stop writes the file:
activeRecording?.stop()Interface Compose pour l’enregistrement
Pilotez l’interface à partir de l’état. Suivez si un enregistrement est actif et remplacez l’icône et l’action du bouton en conséquence. Comme l’écouteur s’exécute sur l’exécuteur principal, vous pouvez mettre à jour directement l’état Compose depuis celui-ci.
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"
)
}Vérification rapide
Vérifiez votre compréhension de l’enregistrement vidéo avec CameraX.
Récapitulatif
Vous pouvez maintenant enregistrer des vidéos avec CameraX :
- Construisez un
Recorderavec unQualitySelectoret enveloppez-le dansVideoCapture.withOutput. - Liez-le à l’aperçu et demandez
RECORD_AUDIOpour enregistrer le son. - Enregistrez via
MediaStoreOutputOptions, puis utilisezprepareRecording().start()pour obtenir unRecording. - Réagissez aux
VideoRecordEvent; appelezstop()pour finaliser l’enregistrement et lire l’URI enregistrée.
Vous avez terminé le cours CameraX : l’aperçu, les photos et les vidéos font désormais partie de votre boîte à outils.
Questions Fréquemment Posées
La leçon « Enregistrer une vidéo » est-elle gratuite ?
Oui — le texte complet de « Enregistrer une vidéo » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Android Academy, passe à CoddyKit PRO. Le cours Android Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Enregistrer une vidéo » ?
Capturez une vidéo avec CameraX. Tu pratiques Android Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Android Academy ?
Aucune expérience préalable n'est requise. Android Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 4 sur 4.
Combien de temps prend la leçon « Enregistrer une vidéo » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Android Academy ?
Oui. Chaque leçon Android Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Présentation de CameraX
- Afficher un aperçu de la caméra
- Prendre des photos
- Enregistrer une vidéo