Ta opp video
Ta opp video med CameraX.
Ta opp video er en gratis leksjon i Android Academy på CoddyKit. Dette er leksjon 4 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Android Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Android Academy inneholder totalt 4 leksjoner.
Ta opp video med CameraX
CameRX tar opp video gjennom VideoCapture-use caset, som bruker en Recorder. I denne leksjonen skal De konfigurere videoopptak, starte og stoppe et opptak og lagre det i galleriet — inkludert lyd.
Flyten ligner på den for bilder, men legger til en langvarig Recording-økt som De starter og senere stopper.
Recorder og kvalitet
Først bygger De en Recorder, som definerer koding og kvalitet. Med QualitySelector kan De be om en ønsket kvalitet (for eksempel HD eller FHD), med en reserve dersom enheten ikke kan levere den.
val recorder = Recorder.Builder()
.setQualitySelector(
QualitySelector.from(
Quality.FHD,
FallbackStrategy.lowerQualityOrHigherThan(Quality.SD)
)
)
.build()Opprette VideoCapture
Pakk inn Recorder i et VideoCapture-use case med withOutput-fabrikken. Dette er objektet De binder til kameraet, på samme måte som ImageCapture.
val videoCapture = VideoCapture.withOutput(recorder)Binde sammen Preview + VideoCapture
Bind forhåndsvisningen og VideoCapture sammen. Vær oppmerksom på at De på mange enheter ikke kan binde ImageCapture og VideoCapture samtidig, så velg use casene skjermen trenger.
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
videoCapture
)Tillatelse til lydopptak
For å ta opp lyd trenger De runtime-tillatelsen RECORD_AUDIO i tillegg til CAMERA. Be om begge før De starter et opptak, og aktiver bare lyd hvis brukeren har gitt tillatelsen.
// 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
Akkurat som for bilder lagrer De videoen i MediaStore ved hjelp av scoped storage. Bygg ContentValues med MIME-typen mp4, og opprett 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()Starte et opptak
Forbered opptaket fra recorderen, aktiver eventuelt lyd med withAudioEnabled(), og kall deretter start(). start() returnerer et Recording-objekt som De tar vare på, slik at De kan stoppe det senere.
De sender også inn en listener som mottar oppdateringer 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
}
}
}
}Reagere på opptakshendelser
Listeneren strømmer livssyklusen til opptaket:
VideoRecordEvent.Start— opptaket har startet (oppdater brukergrensesnittet til en stoppknapp).VideoRecordEvent.Status— periodiske oppdateringer med opptakets varighet og størrelse.VideoRecordEvent.Finalize— opptaket er avsluttet; kontrollerhasError().
is VideoRecordEvent.Status -> {
val seconds = event.recordingStats.recordedDurationNanos / 1_000_000_000
// Update an on-screen timer.
}Stoppe opptaket
For å avslutte kaller De stop() på Recording-objektet De lagret tidligere. Dette utløser en Finalize-hendelse, der videoens URI blir tilgjengelig.
Behold det aktive opptaket i state, slik at én knapp kan veksle mellom start og stopp.
var activeRecording: Recording? = null
// Toggle handler:
if (activeRecording == null) {
activeRecording = startRecording()
} else {
activeRecording?.stop()
activeRecording = null
}Sette på pause og fortsette
Et Recording-objekt kan også settes på pause og fortsette uten å stoppes. Dette er nyttig når brukerne skal kunne sette sammen klipp i én fil.
activeRecording?.pause()
// ...later
activeRecording?.resume()
// Final stop writes the file:
activeRecording?.stop()Compose-brukergrensesnitt for opptak
La state styre brukergrensesnittet. Hold oversikt over om et opptak er aktivt, og bytt knappens ikon og handling etter behov. Siden listeneren kjører på main-executoren, kan De oppdatere Compose-state direkte fra 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"
)
}Rask sjekk
Bekreft at De forstår videoopptak med CameraX.
Oppsummering
De kan nå ta opp video med CameraX:
- Bygg en
Recordermed enQualitySelector, og pakk den inn iVideoCapture.withOutput. - Bind den sammen med forhåndsvisningen, og be om
RECORD_AUDIOfor lyd. - Lagre via
MediaStoreOutputOptions, og kall deretterprepareRecording().start()for å få etRecording-objekt. - Reager på
VideoRecordEvent-hendelser, og kallstop()for å fullføre opptaket og lese den lagrede URI-en.
De har fullført CameraX-kurset — forhåndsvisning, bilder og video er nå en del av verktøykassen Deres.
Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 36
- Leksjoner
- 152
Ofte stilte spørsmål
Er leksjonen «Ta opp video» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Android Academy, inkludert «Ta opp video», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Android Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Ta opp video»?
Ta opp video med CameraX. Du øver på Android Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Android Academy?
Ingen tidligere erfaring er nødvendig. Android Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 4 av 4.
Hvor lang tid tar leksjonen «Ta opp video»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Android Academy-leksjonen?
Ja. Alle Android Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.