Android Academy · Pelajaran

Merakam Video

Tangkap video dengan CameraX.

Pelajaran 4 daripada 413 langkah

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_GRANTED

Output 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; semak hasError().
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 Recorder dengan QualitySelector dan bungkusnya dalam VideoCapture.withOutput.
  • Ikatnya bersama pratonton dan minta RECORD_AUDIO untuk bunyi.
  • Simpan melalui MediaStoreOutputOptions, kemudian gunakan prepareRecording().start() untuk mendapatkan Recording.
  • Beri respons kepada VideoRecordEvent; panggil stop() untuk memuktamadkan rakaman dan baca URI yang disimpan.

Anda telah menamatkan kursus CameraX — pratonton, foto dan video kini tersedia dalam kemahiran anda.

Percuma untuk bermula

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.

Semua pelajaran dalam kursus ini

  1. Gambaran Keseluruhan CameraX
  2. Memaparkan Pratonton Kamera
  3. Mengambil Foto
  4. Merakam Video
← Kembali ke Android Academy