Berita Produk
Memperkenalkan CameraX 1.5: Perekaman Video yang Andal dan Pengambilan Gambar Tingkat Profesional
Waktu baca: 7 menit
Tim CameraX dengan senang hati mengumumkan rilis versi 1.5. Update terbaru ini berfokus untuk menghadirkan kemampuan tingkat profesional ke ujung jari Anda sekaligus membuat sesi kamera lebih mudah dikonfigurasi dari sebelumnya.
Untuk perekaman video, pengguna kini dapat dengan mudah mengambil video gerak lambat atau kecepatan frame tinggi yang menakjubkan. Yang lebih penting lagi, Feature Group API baru memungkinkan Anda mengaktifkan kombinasi kompleks seperti HDR 10-bit dan 60 FPS dengan percaya diri, sehingga memastikan hasil yang konsisten di seluruh perangkat yang didukung.
Di sisi pengambilan gambar , Anda mendapatkan fleksibilitas maksimum dengan dukungan untuk mengambil file DNG (RAW) yang tidak diproses dan tidak dikompresi. Selain itu, Anda kini dapat memanfaatkan output Ultra HDR meskipun menggunakan Ekstensi Kamera yang andal.
Yang mendasari fitur ini adalah SessionConfig API baru, yang menyederhanakan penyiapan dan konfigurasi ulang kamera. Sekarang, mari kita bahas detail fitur baru yang menarik ini.
Perekaman Video yang Andal: Kecepatan Tinggi dan Kombinasi Fitur
CameraX 1.5 memperluas kemampuan videonya secara signifikan, sehingga memungkinkan pengalaman perekaman yang lebih kreatif dan andal.
Video Gerak Lambat &Kecepatan Frame Tinggi
Salah satu fitur yang paling dinantikan, video gerak lambat, kini tersedia. Anda kini dapat mengambil video berkecepatan tinggi (misalnya, 120 atau 240 fps) dan mengenkodenya langsung ke dalam video gerak lambat yang dramatis. Atau, Anda dapat merekam pada kecepatan frame tinggi yang sama untuk menghasilkan video yang sangat halus.
Penerapannya mudah jika Anda memahami VideoCapture API.
1. Periksa Dukungan Kecepatan Tinggi: Gunakan metode Recorder.getHighSpeedVideoCapabilities() baru untuk menanyakan apakah perangkat mendukung fitur ini.
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector) val highSpeedCapabilities = Recorder.getHighSpeedVideoCapabilities(cameraInfo) if (highSpeedCapabilities == null) { // This camera device does not support high-speed video. return }
2. Konfigurasi dan Ikat Kasus Penggunaan: Gunakan videoCapabilities yang ditampilkan (yang berisi informasi kualitas video yang didukung) untuk membuat HighSpeedVideoSessionConfig. Kemudian, Anda harus menanyakan rentang kecepatan frame yang didukung melalui cameraInfo.getSupportedFrameRateRanges() dan menetapkan rentang yang diinginkan. Panggil setSlowMotionEnabled(true) untuk merekam video gerak lambat, jika tidak, video akan merekam video kecepatan frame tinggi. Langkah terakhir adalah menggunakan Recorder.prepareRecording().start() reguler untuk mulai merekam video.
val preview = Preview.Builder().build() val quality = highSpeedCapabilities .getSupportedQualities(DynamicRange.SDR).first() val recorder = Recorder.Builder() .setQualitySelector(QualitySelector.from(quality))) .build() val videoCapture = VideoCapture.withOutput(recorder) val frameRateRange = cameraInfo.getSupportedFrameRateRanges( HighSpeedVideoSessionConfig(videoCapture, preview) ).first() val sessionConfig = HighSpeedVideoSessionConfig( videoCapture, preview, frameRateRange = frameRateRange, // Set true for slow-motion playback, or false for high-frame-rate isSlowMotionEnabled = true ) cameraProvider.bindToLifecycle( lifecycleOwner, cameraSelector, sessionConfig) // Start recording slow motion videos. val recording = recorder.prepareRecording(context, outputOption) .start(executor, {})
Kompatibilitas dan Batasan
Perekaman kecepatan tinggi memerlukan dukungan CameraConstrainedHighSpeedCaptureSession dan CamcorderProfile tertentu. Selalu lakukan pemeriksaan kemampuan, dan aktifkan perekaman kecepatan tinggi hanya pada perangkat yang didukung untuk mencegah pengalaman pengguna yang buruk. Saat ini, fitur ini didukung di kamera belakang hampir semua perangkat Pixel dan model tertentu dari produsen lain.
Lihat postingan blog untuk mengetahui detail selengkapnya.
Gabungkan Fitur dengan Percaya Diri: Feature Group API
CameraX 1.5 memperkenalkan Feature Group API, yang menghilangkan tebakan kompatibilitas fitur. Berdasarkan API kueri kombinasi fitur Android 15, Anda kini dapat mengaktifkan beberapa fitur secara bersamaan dengan percaya diri, sehingga menjamin sesi kamera yang stabil. Feature Group saat ini mendukung: HDR (HLG), 60 fps, Stabilisasi Pratinjau, dan Ultra HDR. Misalnya, Anda dapat mengaktifkan HDR, 60 fps, dan Stabilisasi Pratinjau secara bersamaan di seri Pixel 10 dan Galaxy S25. Peningkatan di masa mendatang direncanakan untuk menyertakan perekaman 4K dan zoom ultrawide.
Feature Group API memungkinkan dua kasus penggunaan penting:
Kasus Penggunaan 1: Memprioritaskan Kualitas Terbaik
Jika ingin mengambil gambar menggunakan kombinasi fitur terbaik, Anda dapat memberikan daftar yang diprioritaskan. CameraX akan mencoba mengaktifkannya secara berurutan, memilih kombinasi pertama yang didukung sepenuhnya oleh perangkat.
val sessionConfig = SessionConfig( useCases = listOf(preview, videoCapture), preferredFeatureGroup = listOf( GroupableFeature.HDR_HLG10, GroupableFeature.FPS_60, GroupableFeature.PREVIEW_STABILIZATION ) ).apply { // (Optional) Get a callback with the enabled features to update your UI. setFeatureSelectionListener { selectedFeatures -> updateUiIndicators(selectedFeatures) } } processCameraProvider.bindToLifecycle(activity, cameraSelector, sessionConfig)
Dalam contoh ini, CameraX mencoba mengaktifkan fitur dalam urutan ini:
- HDR + 60 FPS + Stabilisasi Pratinjau
- HDR + 60 FPS
- HDR + Stabilisasi Pratinjau
- HDR
- 60 FPS + Stabilisasi Pratinjau
- 60 FPS
- Stabilisasi Pratinjau
- Tidak ada
Kasus Penggunaan 2: Membuat UI Setelan yang Menghadap Pengguna
Anda kini dapat secara akurat mencerminkan kombinasi fitur mana yang didukung di UI setelan aplikasi, dengan menonaktifkan tombol untuk opsi yang tidak didukung seperti gambar di bawah.
Untuk menentukan apakah akan mengaktifkan tombol, gunakan kode berikut untuk memeriksa dukungan kombinasi fitur. Awalnya, kueri status setiap fitur. Setelah fitur diaktifkan, kueri ulang fitur yang tersisa dengan fitur yang diaktifkan untuk melihat apakah tombolnya sekarang harus dinonaktifkan karena batasan kompatibilitas.
fun disableFeatureIfNotSuported(
enabledFeatures: Set<GroupableFeature>,
featureToCheck:GroupableFeature
) {
val sessionConfig = SessionConfig(
useCases = useCases,
requiredFeatureGroup = enabledFeatures + featureToCheck
)
val isSupported = cameraInfo.isFeatureGroupSupported(sessionConfig)
if (!isSupported) {
// disable the toggle for featureToCheck
}
}Lihat postingan blog Feature Group untuk mengetahui informasi selengkapnya.
Peningkatan Video Lainnya
- Peningkatan Kamera Serentak: Dengan CameraX 1.5.1, Anda kini dapat mengikat kasus penggunaan Pratinjau + ImageCapture + VideoCapture secara serentak untuk setiap SingleCameraConfig dalam mode non-komposisi. Selain itu, dalam mode komposisi (kasus penggunaan yang sama dengan CompositionSettings), Anda kini dapat menetapkan
CameraEffectyang diterapkan ke hasil komposisi akhir. - Pembisuan Dinamis: Anda kini dapat memulai perekaman dalam status dibisukan menggunakan
PendingRecording.withAudioEnabled(boolean initialMuted)dan mengizinkan pengguna untuk mengaktifkan suara nanti menggunakanRecording.mute(boolean muted). - Penanganan Penyimpanan Tidak Cukup yang Ditingkatkan: CameraX kini mengirimkan error
VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGEdengan andal, sehingga memungkinkan aplikasi Anda menangani situasi penyimpanan rendah dengan baik dan memberi tahu pengguna. - Peningkatan Cahaya Rendah: Di perangkat yang didukung (seperti seri Pixel 10), Anda dapat mengaktifkan CameraControl.enableLowLightBoostAsync untuk otomatis menerangkan pratinjau dan aliran video di lingkungan gelap.
Pengambilan Gambar Tingkat Profesional
CameraX 1.5 menghadirkan upgrade besar pada ImageCapture untuk developer yang menginginkan kualitas dan fleksibilitas maksimum.
Bebaskan Kontrol Kreatif dengan Pengambilan Gambar DNG (RAW)
Untuk kontrol penuh atas pascapemrosesan, CameraX kini mendukung pengambilan gambar DNG (RAW). Hal ini memberi Anda akses ke data gambar yang tidak diproses dan tidak dikompresi langsung dari sensor kamera, sehingga memungkinkan pengeditan dan penilaian warna tingkat profesional. API mendukung pengambilan gambar file DNG saja, atau pengambilan gambar output JPEG dan DNG secara bersamaan. Lihat kode contoh di bawah untuk mengetahui cara mengambil gambar file JPEG dan DNG secara bersamaan.
val capabilities = ImageCapture.getImageCaptureCapabilities(cameraInfo) val imageCapture = ImageCapture.Builder().apply { if (capabilities.supportedOutputFormats .contains(OUTPUT_FORMAT_RAW_JPEG)) { // Capture both RAW and JPEG formats. setOutputFormat(OUTPUT_FORMAT_RAW_JPEG) } }.build() // ... bind imageCapture to lifecycle ... // Provide separate output options for each format. val outputOptionRaw = /* ... configure for image/x-adobe-dng ... */ val outputOptionJpeg = /* ... configure for image/jpeg ... */ imageCapture.takePicture( outputOptionRaw, outputOptionJpeg, executor, object : ImageCapture.OnImageSavedCallback { override fun onImageSaved(results: OutputFileResults) { // This callback is invoked twice: once for the RAW file // and once for the JPEG file. } override fun onError(exception: ImageCaptureException) {} } )
Ultra HDR untuk Ekstensi Kamera
Dapatkan yang terbaik dari kedua hal tersebut: fotografi komputasional yang menakjubkan dari Ekstensi Kamera (seperti Mode Malam) yang dikombinasikan dengan warna yang cemerlang dan rentang dinamis Ultra HDR. Fitur ini kini didukung di banyak ponsel Android premium terbaru, seperti seri Pixel 9/10 dan seri Samsung S24/S25.
// Support UltraHDR when Extension is enabled. val extensionsEnabledCameraSelector = extensionsManager .getExtensionEnabledCameraSelector( CameraSelector.DEFAULT_BACK_CAMERA, ExtensionMode.NIGHT) val imageCapabilities = ImageCapture.getImageCaptureCapabilities( cameraProvider.getCameraInfo(extensionsEnabledCameraSelector) val imageCapture = ImageCapture.Builder() .apply { if (imageCapabilities.supportedOutputFormats .contains(OUTPUT_FORMAT_JPEG_ULTRA_HDR) { setOutputFormat(OUTPUT_FORMAT_JPEG_ULTRA_HDR) } }.build()
Peningkatan API Inti dan Kegunaan
Cara Baru untuk Mengonfigurasi: SessionConfig
Seperti yang terlihat dalam contoh di atas, SessionConfig adalah konsep baru di CameraX 1.5. Konsep ini memusatkan konfigurasi dan menyederhanakan API dalam dua cara utama:
- Tidak Ada Lagi Panggilan
unbind()Manual: CameraX API mendukung siklus proses. API ini akan secara implisit “melepas” kasus penggunaan Anda saat aktivitas atauLifecycleOwnerlainnya dihancurkan. Namun, mengupdate kasus penggunaan atau mengganti kamera masih mengharuskan Anda memanggilunbind()atauunbindAll()sebelum mengikat ulang. Sekarang dengan CameraX 1.5, saat Anda mengikatSessionConfigbaru, CameraX akan mengupdate sesi untuk Anda dengan lancar, sehingga tidak perlu melakukan panggilan unbind. - Kontrol Kecepatan Frame Deterministik:
SessionConfigAPI baru memperkenalkan cara deterministik untuk mengelola kecepatan frame. Tidak sepertisetTargetFrameRatesebelumnya, yang hanya merupakan petunjuk, metode baru ini menjamin rentang kecepatan frame yang ditentukan akan diterapkan setelah konfigurasi berhasil. Untuk memastikan akurasi, Anda harus membuat kueri kecepatan frame yang didukung menggunakanCameraInfo.getSupportedFrameRateRanges(SessionConfig). Dengan meneruskanSessionConfiglengkap, CameraX dapat menentukan rentang yang didukung secara akurat berdasarkan konfigurasi streaming.
Camera-Compose Kini Stabil
Kami tahu betapa Anda menikmati Jetpack Compose, dan kami dengan senang hati mengumumkan bahwa camera-compose library kini stabil di versi 1.5.1! Rilis ini mencakup perbaikan bug penting terkait penggunaan CameraXViewfinder dengan fitur Compose seperti moveableContentOf dan Pager, serta mengatasi masalah peregangan pratinjau. Kami akan terus menambahkan lebih banyak fitur ke camera-compose dalam rilis mendatang.
Peningkatan ImageAnalysis dan CameraControl
- Penyesuaian Kekuatan Senter: Dapatkan kontrol yang lebih mendetail atas senter perangkat dengan API baru. Anda dapat membuat kueri kekuatan maksimum yang didukung menggunakan CameraInfo.getMaxTorchStrengthLevel(), lalu menetapkan tingkat yang diinginkan dengan CameraControl.setTorchStrengthLevel().
- Dukungan NV21 di
ImageAnalysis: Anda kini dapat meminta format gambar NV21 langsung dariImageAnalysis, sehingga menyederhanakan integrasi dengan library dan API lainnya. Hal ini diaktifkan dengan memanggilImageAnalysis.Builder.setOutputImageFormat(OUTPUT_IMAGE_FORMAT_NV21).
Mulai Sekarang Juga
Update dependensi Anda ke CameraX 1.5 hari ini dan jelajahi fitur baru yang menarik. Kami tidak sabar untuk melihat apa yang Anda buat.
Untuk menggunakan CameraX 1.5, tambahkan dependensi berikut ke libs.versions.toml. (Sebaiknya gunakan 1.5.1 yang berisi banyak perbaikan bug penting dan peningkatan kamera serentak.)
[versions] camerax = "1.5.1" [libraries] .. androidx-camera-core = { module = "androidx.camera:camera-core", version.ref = "camerax" } androidx-camera-compose = { module = "androidx.camera:camera-compose", version.ref = "camerax" } androidx-camera-view = { module = "androidx.camera:camera-view", version.ref = "camerax" } androidx-camera-lifecycle = { group = "androidx.camera", name = "camera-lifecycle", version.ref = "camerax" } androidx-camera-camera2 = { module = "androidx.camera:camera-camera2", version.ref = "camerax" } androidx-camera-extensions = { module = "androidx.camera:camera-extensions", version.ref = "camerax" }
Kemudian, tambahkan dependensi ini ke build.gradle.kts modul Anda:
dependencies {
..
implementation(libs.androidx.camera.core)
implementation(libs.androidx.camera.lifecycle)
implementation(libs.androidx.camera.camera2)
implementation(libs.androidx.camera.view) // for PreviewView
implementation(libs.androidx.camera.compose) // for compose UI
implementation(libs.androidx.camera.extensions) // For Extensions
}Ada pertanyaan atau ingin terhubung dengan tim CameraX? Bergabunglah dengan grup diskusi developer CameraX atau ajukan laporan bug:
Lanjutkan membaca
-
Berita Produk
Setiap alur kerja dan kebutuhan AI developer bersifat unik, dan penting untuk dapat memilih cara AI membantu pengembangan Anda. Pada bulan Januari, kami memperkenalkan kemampuan untuk memilih model AI lokal atau jarak jauh guna mendukung fungsi AI di Android Studio
Matthew Warner • Waktu baca: 2 menit
-
Berita Produk
Android Studio Panda 3 kini stabil dan siap digunakan dalam produksi. Rilis ini memberi Anda lebih banyak kontrol dan penyesuaian atas alur kerja yang didukung AI, sehingga memudahkan Anda membangun aplikasi Android berkualitas tinggi.
Matt Dyor • Waktu baca: 3 menit
-
Berita Produk
Di Google, kami berkomitmen untuk menghadirkan model AI yang paling canggih langsung ke perangkat Android di saku Anda. Hari ini, kami dengan senang hati mengumumkan rilis model terbuka canggih terbaru kami: Gemma 4.
Caren Chang, David Chou • Waktu baca: 3 menit
Terus dapatkan informasi
Dapatkan insight pengembangan Android terbaru yang dikirim ke kotak masuk Anda setiap minggu.