Berita Produk
Memperkenalkan CameraX 1.5: Perekaman Video yang Canggih 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 merekam video gerak lambat atau video dengan kecepatan frame tinggi yang memukau. Yang lebih penting, 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 bagian 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 saat menggunakan Ekstensi Kamera yang canggih.
Yang mendasari fitur ini adalah SessionConfig API baru, yang menyederhanakan penyiapan dan konfigurasi ulang kamera. Sekarang, mari kita pelajari detail fitur baru yang menarik ini.
Perekaman Video yang Canggih: 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 merekam video berkecepatan tinggi (misalnya, 120 atau 240 fps) dan mengenkodnya langsung menjadi video gerak lambat yang dramatis. Atau, Anda dapat merekam pada kecepatan frame tinggi yang sama untuk menghasilkan video yang sangat lancar.
Penerapannya cukup mudah jika Anda memahami VideoCapture API.
1. Periksa Dukungan Kecepatan Tinggi: Gunakan metode Recorder.getHighSpeedVideoCapabilities() baru untuk mengkueri 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 membuat kueri rentang kecepatan frame yang didukung melalui cameraInfo.getSupportedFrameRateRanges() dan menetapkan rentang yang diinginkan. Panggil setSlowMotionEnabled(true) untuk merekam video gerak lambat, atau video akan direkam dengan kecepatan frame tinggi. Langkah terakhir adalah menggunakan Recorder.prepareRecording().start() biasa 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 berkecepatan tinggi memerlukan dukungan CameraConstrainedHighSpeedCaptureSession dan CamcorderProfile tertentu. Selalu lakukan pemeriksaan kemampuan, dan aktifkan perekaman kecepatan tinggi hanya di 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.
Menggabungkan Fitur dengan Keyakinan: Feature Group API
CameraX 1.5 memperkenalkan Feature Group API, yang menghilangkan tebakan tentang kompatibilitas fitur. Berdasarkan API kueri kombinasi fitur Android 15, Anda kini dapat mengaktifkan beberapa fitur secara bersamaan dengan yakin, sehingga menjamin sesi kamera yang stabil. Grup Fitur 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 kualitas di masa mendatang direncanakan untuk mencakup perekaman 4K dan zoom ultra-wide.
Feature Group API memungkinkan dua kasus penggunaan penting:
Kasus Penggunaan 1: Memprioritaskan Kualitas Terbaik
Jika Anda ingin merekam 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 berikut:
- 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 Ditampilkan kepada Pengguna
Sekarang Anda dapat secara akurat mencerminkan kombinasi fitur mana yang didukung di UI setelan aplikasi Anda, dengan menonaktifkan tombol untuk opsi yang tidak didukung seperti gambar di bawah.
Untuk menentukan apakah tombol harus berwarna abu-abu, 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 berwarna abu-abu 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 Grup Fitur untuk mengetahui informasi selengkapnya.
Peningkatan Kualitas Video Lainnya
- Peningkatan Kamera Serentak: Dengan CameraX 1.5.1, Anda kini dapat menggabungkan 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. - Peredaman Suara Dinamis: Anda kini dapat memulai perekaman dalam keadaan tanpa suara menggunakan
PendingRecording.withAudioEnabled(boolean initialMuted)dan mengizinkan pengguna untuk menyuarakan nanti menggunakanRecording.mute(boolean muted). - Penanganan Penyimpanan Tidak Cukup yang Lebih Baik: CameraX kini mengirimkan error
VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGEdengan andal, sehingga aplikasi Anda dapat menangani situasi penyimpanan rendah dengan baik dan memberi tahu pengguna. - Peningkatan Cahaya Redup: Di perangkat yang didukung (seperti seri Pixel 10), Anda dapat mengaktifkan CameraControl.enableLowLightBoostAsync untuk otomatis mencerahkan pratinjau dan streaming video di lingkungan gelap.
Pengambilan Gambar Tingkat Profesional
CameraX 1.5 menghadirkan upgrade besar pada ImageCapture bagi developer yang menginginkan kualitas dan fleksibilitas maksimum.
Mengekspresikan Kreativitas dengan Pengambilan DNG (RAW)
Untuk kontrol penuh atas pascapemrosesan, CameraX kini mendukung pengambilan gambar DNG (RAW). Hal ini memberi Anda akses ke data gambar yang belum diproses dan tidak dikompresi langsung dari sensor kamera, sehingga memungkinkan pengeditan dan gradasi warna tingkat profesional. API ini mendukung pengambilan file DNG saja, atau pengambilan output JPEG dan DNG secara bersamaan. Lihat contoh kode di bawah untuk mengetahui cara mengambil 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 dunia: fotografi komputasional yang memukau dari Ekstensi Kamera (seperti Mode Malam) yang dipadukan dengan warna 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 Kegunaan dan API Inti
Cara Baru untuk Mengonfigurasi: SessionConfig
Seperti yang terlihat pada contoh di atas, SessionConfig adalah konsep baru di CameraX 1.5. Hal ini memusatkan konfigurasi dan menyederhanakan API dalam dua cara utama:
- Tidak Ada Lagi Panggilan
unbind()Manual: API CameraX mendukung siklus proses. Hal ini akan secara implisit “melepaskan” kasus penggunaan Anda saat aktivitas atauLifecycleOwnerlainnya dihapus. Namun, memperbarui kasus penggunaan atau mengganti kamera tetap mengharuskan Anda memanggilunbind()atauunbindAll()sebelum melakukan pengikatan ulang. Sekarang dengan CameraX 1.5, saat Anda mengikatSessionConfigbaru, CameraX akan memperbarui sesi dengan lancar untuk Anda, sehingga tidak perlu melakukan panggilan pelepasan ikatan. - Kontrol Kecepatan Frame Deterministik: API
SessionConfigbaru memperkenalkan cara deterministik untuk mengelola kecepatan frame. Tidak sepertisetTargetFrameRatesebelumnya, yang hanya berupa 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 secara akurat menentukan rentang yang didukung berdasarkan konfigurasi streaming.
Camera-Compose Kini Stabil
Kami tahu betapa Anda menikmati Jetpack Compose, dan dengan senang hati kami mengumumkan bahwa library camera-compose kini stabil di versi 1.5.1! Rilis ini mencakup perbaikan bug penting terkait penggunaan CameraXViewfinder dengan fitur Compose seperti moveableContentOf dan Pager, serta menyelesaikan masalah peregangan pratinjau. Kami akan terus menambahkan lebih banyak fitur ke camera-compose dalam rilis mendatang.
Peningkatan ImageAnalysis dan CameraControl
- Penyesuaian Intensitas Senter: Dapatkan kontrol terperinci atas senter perangkat dengan API baru. Anda dapat mengkueri 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 sekarang dan jelajahi fitur baru yang menarik. Kami menantikan karya Anda.
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 ini ke dependensi 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 ke grup diskusi developer CameraX atau ajukan laporan bug:
Lanjutkan membaca
-
Berita Produk
Setiap developer memiliki alur kerja dan kebutuhan AI yang 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 mempermudah pembuatan aplikasi Android berkualitas tinggi.
Matt Dyor • Waktu baca 3 menit
-
Berita Produk
Di Google, kami berkomitmen untuk menghadirkan model AI tercanggih langsung ke perangkat Android di saku Anda. Hari ini, dengan senang hati kami 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.