Spela in video
Fånga video med CameraX.
Spela in video är en gratis lektion i Android Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Android Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Android Academy innehåller totalt 4 lektioner.
Spela in video med CameraX
CameRX spelar in video genom användningsfallet VideoCapture, som använder en Recorder i bakgrunden. I den här lektionen konfigurerar Ni videoinspelning, startar och stoppar en inspelning och sparar den i galleriet — inklusive ljud.
Flödet liknar det för foton, men innehåller dessutom en långvarig Recording-session som Ni startar och senare stoppar.
Recorder och kvalitet
Först skapar Ni en Recorder, som definierar kodning och kvalitet. Med QualitySelector kan Ni begära en målkvalitet, till exempel HD eller FHD, med en reservlösning om enheten inte kan tillhandahålla den.
val recorder = Recorder.Builder()
.setQualitySelector(
QualitySelector.from(
Quality.FHD,
FallbackStrategy.lowerQualityOrHigherThan(Quality.SD)
)
)
.build()Skapa VideoCapture
Omslut Recorder i ett användningsfall för VideoCapture med fabriken withOutput. Det här är objektet som Ni binder till kameran, precis som ImageCapture.
val videoCapture = VideoCapture.withOutput(recorder)Binda förhandsvisning + VideoCapture
Bind förhandsvisningen och VideoCapture tillsammans. Observera att Ni på många enheter inte kan binda ImageCapture och VideoCapture samtidigt, så välj de användningsfall som skärmen behöver.
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
videoCapture
)Ljudbehörighet
För att spela in ljud behöver Ni körningsbehörigheten RECORD_AUDIO utöver CAMERA. Begär båda innan inspelningen startar och aktivera endast ljud om användaren har beviljat behörigheten.
// 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_GRANTEDUtdata via MediaStore
Precis som för foton sparar Ni videon i MediaStore med begränsad lagring. Skapa ContentValues med MIME-typen mp4 och skapa 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()Starta en inspelning
Förbered inspelningen från inspelaren, aktivera valfritt ljud med withAudioEnabled() och anropa sedan start(). start() returnerar ett Recording-objekt som Ni sparar så att Ni kan stoppa inspelningen senare.
Ni skickar också med en lyssnare som tar emot uppdateringar av typen 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
}
}
}
}Reagera på inspelningshändelser
Lyssnaren skickar inspelningens livscykel:
VideoRecordEvent.Start— inspelningen har börjat (uppdatera gränssnittet till en stoppknapp).VideoRecordEvent.Status— återkommande uppdateringar med inspelningens längd och storlek.VideoRecordEvent.Finalize— inspelningen har avslutats; kontrollerahasError().
is VideoRecordEvent.Status -> {
val seconds = event.recordingStats.recordedDurationNanos / 1_000_000_000
// Update an on-screen timer.
}Stoppa inspelningen
Anropa stop() på den Recording som Ni sparade tidigare för att avsluta. Det utlöser händelsen Finalize, där videons URI blir tillgänglig.
Håll den aktiva inspelningen i state så att en enda knapp kan växla mellan att starta och stoppa.
var activeRecording: Recording? = null
// Toggle handler:
if (activeRecording == null) {
activeRecording = startRecording()
} else {
activeRecording?.stop()
activeRecording = null
}Pausa och återuppta
En Recording kan också pausas och återupptas utan att stoppas. Det är praktiskt när användare ska kunna sammanfoga klipp till en enda fil.
activeRecording?.pause()
// ...later
activeRecording?.resume()
// Final stop writes the file:
activeRecording?.stop()Compose-gränssnitt för inspelning
Styr gränssnittet från state. Håll reda på om en inspelning är aktiv och byt knappens ikon och åtgärd därefter. Eftersom lyssnaren körs på huvudexekveraren kan Ni uppdatera Compose-state direkt från den.
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"
)
}Snabbkontroll
Bekräfta att Ni förstår videoinspelning med CameraX.
Sammanfattning
Nu kan Ni spela in video med CameraX:
- Skapa en
Recordermed enQualitySelectoroch omslut den iVideoCapture.withOutput. - Bind den med förhandsvisningen och begär
RECORD_AUDIOför ljud. - Spara via
MediaStoreOutputOptionsoch anropa sedanprepareRecording().start()för att få ettRecording-objekt. - Reagera på
VideoRecordEvent; anropastop()för att slutföra inspelningen och läs den sparade URI:n.
Ni har slutfört CameraX-kursen — förhandsvisning, foton och video finns nu i Er verktygslåda.
Lär dig Kotlin med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 36
- Lektioner
- 152
Vanliga frågor
Är lektionen ”Spela in video” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Android Academy, inklusive ”Spela in video”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Android Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Spela in video”?
Fånga video med CameraX. Ni övar på Android Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Android Academy?
Du behöver inga förkunskaper. Utbildningen i Android Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Spela in video”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Android Academy-lektionen?
Ja. Varje Android Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.