Merakam Video
Tangkap video dengan CameraX.
Merakam Video ialah pelajaran Android Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Android Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Merakam Video dengan CameraX
CameRX merakam video melalui kes penggunaan VideoCapture, yang disokong oleh Recorder. Dalam pelajaran ini, anda akan menyediakan tangkapan video, memulakan dan menghentikan rakaman, serta menyimpannya ke galeri — termasuk audio.
Alirannya menyerupai foto, tetapi menambahkan sesi Recording yang berjalan lama dan anda mulakan sebelum menghentikannya kemudian.
Perakam dan Kualiti
Mula-mula anda membina Recorder, yang menentukan pengekodan dan kualiti. QualitySelector membolehkan anda meminta kualiti sasaran (contohnya HD atau FHD) dengan strategi sandaran jika peranti tidak dapat menyediakannya.
val recorder = Recorder.Builder()
.setQualitySelector(
QualitySelector.from(
Quality.FHD,
FallbackStrategy.lowerQualityOrHigherThan(Quality.SD)
)
)
.build()Mencipta VideoCapture
Bungkus Recorder dalam kes penggunaan VideoCapture menggunakan kilang withOutput. Inilah objek yang anda ikat pada kamera, sama seperti ImageCapture.
val videoCapture = VideoCapture.withOutput(recorder)Mengikat Pratonton + VideoCapture
Ikat pratonton dan VideoCapture bersama-sama. Ambil perhatian bahawa pada banyak peranti, anda tidak boleh mengikat ImageCapture dan VideoCapture pada masa yang sama. Oleh itu, pilih kes penggunaan yang diperlukan oleh skrin anda.
cameraProvider.unbindAll()
cameraProvider.bindToLifecycle(
lifecycleOwner,
CameraSelector.DEFAULT_BACK_CAMERA,
preview,
videoCapture
)Kebenaran Audio
Untuk merakam bunyi, anda memerlukan kebenaran masa jalan RECORD_AUDIO selain CAMERA. Minta kedua-duanya sebelum memulakan rakaman dan aktifkan audio hanya jika pengguna telah memberikannya.
// 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_GRANTEDOutput melalui MediaStore
Seperti foto, simpan video ke MediaStore menggunakan storan berskop. Bina ContentValues dengan jenis MIME mp4 dan cipta 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()Memulakan Rakaman
Sediakan rakaman daripada perakam, aktifkan audio secara pilihan dengan withAudioEnabled(), kemudian mulakannya dengan start(). start() mengembalikan objek Recording yang perlu anda simpan supaya boleh menghentikannya kemudian.
Anda juga menghantar pendengar yang menerima kemas kini 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
}
}
}
}Memberi Respons kepada Peristiwa Rakaman
Pendengar menyalurkan kitar hayat rakaman:
VideoRecordEvent.Start— rakaman telah bermula (kemas kini UI kepada butang berhenti).VideoRecordEvent.Status— kemas kini berkala dengan tempoh dan saiz rakaman.VideoRecordEvent.Finalize— rakaman telah tamat; semakhasError().
is VideoRecordEvent.Status -> {
val seconds = event.recordingStats.recordedDurationNanos / 1_000_000_000
// Update an on-screen timer.
}Menghentikan Rakaman
Untuk menamatkan rakaman, panggil stop() pada Recording yang anda simpan sebelum ini. Tindakan ini mencetuskan peristiwa Finalize, apabila URI video tersedia.
Simpan rakaman aktif dalam keadaan supaya satu butang boleh menogol antara mula dan berhenti.
var activeRecording: Recording? = null
// Toggle handler:
if (activeRecording == null) {
activeRecording = startRecording()
} else {
activeRecording?.stop()
activeRecording = null
}Menjeda dan Menyambung Semula
Recording juga boleh dijeda dan disambung semula tanpa dihentikan. Ini berguna untuk membolehkan pengguna mencantumkan klip ke dalam satu fail.
activeRecording?.pause()
// ...later
activeRecording?.resume()
// Final stop writes the file:
activeRecording?.stop()UI Compose untuk Rakaman
Kawal UI berdasarkan keadaan. Jejaki sama ada rakaman sedang aktif dan tukar ikon serta tindakan butang mengikut keadaan. Oleh sebab pendengar berjalan pada pelaksana utama, anda boleh mengemas kini keadaan Compose terus daripadanya.
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"
)
}Semakan Pantas
Sahkan pemahaman anda tentang rakaman video dengan CameraX.
Ulang Kaji
Sekarang anda boleh merakam video dengan CameraX:
- Bina
RecorderdenganQualitySelectordan bungkusnya dalamVideoCapture.withOutput. - Ikatnya bersama pratonton dan minta
RECORD_AUDIOuntuk bunyi. - Simpan melalui
MediaStoreOutputOptions, kemudian gunakanprepareRecording().start()untuk mendapatkanRecording. - Beri respons kepada
VideoRecordEvent; panggilstop()untuk memuktamadkan rakaman dan baca URI yang disimpan.
Anda telah menamatkan kursus CameraX — pratonton, foto dan video kini tersedia dalam kemahiran anda.
Pelajari Kotlin dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 36
- Pelajaran
- 152
Soalan Lazim
Adakah pelajaran “Merakam Video” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Android Academy, termasuk “Merakam Video”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Android Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Merakam Video”?
Tangkap video dengan CameraX. Anda berlatih Android Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Android Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Android Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Merakam Video” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Android Academy ini?
Ya. Setiap pelajaran Android Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.