CameraX, pustaka kamera Android Jetpack yang membantu Anda menciptakan pengalaman terbaik di kelasnya yang bekerja secara konsisten di seluruh versi dan perangkat Android, semakin membantu dengan rilis 1.3-nya. CameraX sudah digunakan di semakin banyak aplikasi Android, mencakup berbagai kasus penggunaan mulai dari interaksi kamera yang langsung dan berperforma tinggi hingga pemrosesan gambar tingkat lanjut dan seterusnya.

CameraX 1.3 membuka kemampuan yang lebih canggih. Dengan fitur dual concurrent camera, aplikasi dapat mengoperasikan dua kamera sekaligus. Selain itu, 1.3 memudahkan pengguna untuk menikmati kemampuan video HDR baru. Sekarang Anda juga dapat menambahkan transformasi pustaka grafik (misalnya, dengan OpenGL atau Vulkan) ke Kasus Penggunaan Pratinjau, ImageCapture, dan VideoCapture untuk menerapkan filter dan efek. Ada juga banyak perbaikan video lainnya.

CameraX versi 1.3 secara resmi dalam versi Beta mulai hari ini, jadi mari kita langsung ke detailnya!

CameraX membuat fungsionalitas kamera yang kompleks mudah digunakan, dan fitur kamera ganda bersamaan yang baru tidak terkecuali. CameraX menangani detail tingkat rendah seperti memastikan aliran kamera bersamaan dibuka dan ditutup dalam urutan yang benar. Di CameraX, mengikat dua kamera bersamaan tidak jauh berbeda dengan mengikat satu kamera.

Pertama, periksa kamera mana yang mendukung koneksi bersamaan dengan getAvailableConcurrentCameraInfos(). Skenario umum adalah memilih kamera depan dan belakang.

Untuk alasan kompatibilitas, kamera bersamaan ganda mendukung setiap kamera terikat ke 2 Kasus Penggunaan atau kurang dengan resolusi maksimum 720p atau 1440p, bergantung pada perangkat.

Video HDR

CameraX 1.3 juga menambahkan dukungan untuk streaming video 10-bit bersama dengan profil HDR, memberi Anda kemampuan untuk merekam video dengan detail, warna, dan kontras yang lebih baik daripada yang tersedia sebelumnya. Anda dapat menggunakan metode VideoCapture.Builder.setDynamicRange() untuk menyetel sejumlah konfigurasi. Ada beberapa nilai pra-konfigurasi:

  • HLG_10_BIT – Rentang dinamis tinggi 10-bit dengan pengkodean HLG. Ini adalah pengkodean HDR yang disarankan untuk digunakan karena setiap perangkat yang mendukung pengambilan HDR akan mendukung HLG10. Lihat panduan Periksa dukungan HDR untuk detailnya.
  • HDR10_10_BIT – Rentang dinamis tinggi 10-bit dengan enkode HDR10.
  • HDR10_PLUS_10_BIT – Rentang dinamis tinggi 10-bit dengan enkode HDR10+.
  • DOLBY_VISION_10_BIT – Rentang dinamis tinggi 10-bit dengan enkode Dolby Vision.
  • DOLBY_VISION_8_BIT – Rentang dinamis tinggi 8-bit dengan enkode Dolby Vision.

Pertama, telusuri CameraInfos yang tersedia untuk menemukan yang pertama yang mendukung HDR. Anda dapat menambahkan kriteria pemilihan kamera tambahan di sini.

var didukungHdrEncoding: DynamicRange? = null val hdrCameraInfo = cameraProvider.availableCameraInfos .first { cameraInfo -> val videoCapabilities = Recorder.getVideoCapabilities(cameraInfo) valsupportedDynamicRanges = videoCapabilities.getSupportedDynamicRanges()supportedHdrEncoding =supportDynamicRanges.firstOrNull { it != DynamicRange.SDR } return@firstsupportDynamicR malaikat!= null } var cameraSelector = hdrCameraInfo?.cameraSelector ?: CameraSelector.DEFAULT_BACK_CAMERA

Kemudian, atur Perekam dan UseCase VideoCapture. Jika Anda menemukan yang didukungHdrEncoding sebelumnya, panggil juga setDynamicRange() untuk mengaktifkan HDR di aplikasi kamera Anda.

val recorder = Recorder.Builder() .setQualitySelector(QualitySelector.from(Quality.HIGHEST)) .build() val videoCaptureBuilder = VideoCapture.Builder(recorder) if (supportedHdrEncoding != null) { videoCaptureBuilder.setDynamicRange(supportedHdrEncoding!!) } val videoCapture = videoCaptureBuilder.build()

Efek

Sementara CameraX membuat banyak tugas kamera menjadi mudah, ia juga menyediakan pengait untuk mencapai fungsionalitas tingkat lanjut atau khusus. Metode efek baru memungkinkan transformasi pustaka grafik khusus untuk diterapkan ke bingkai untuk Pratinjau, ImageCapture, dan VideoCapture.

Anda dapat menentukan CameraEffect untuk menyuntikkan kode ke saluran CameraX dan menerapkan efek visual, seperti efek potret kustom. Saat membuat CameraEffect Anda sendiri melalui konstruktor, Anda harus menentukan kasus penggunaan mana yang akan ditargetkan (dari PREVIEW, VIDEO_CAPTURE, dan IMAGE_CAPTURE). Anda juga harus menentukan SurfaceProcessor untuk mengimplementasikan efek GPU untuk Surface yang mendasarinya. Disarankan untuk menggunakan graphics API seperti OpenGL atau Vulkan untuk mengakses Surface. Proses ini akan memblokir Pelaksana yang terkait dengan ImageCapture. Utas I/O internal digunakan secara default, atau Anda dapat menyetelnya dengan ImageCapture.Builder.setIoExecutor(). Catatan: Merupakan tanggung jawab implementasi untuk menjadi performan. Untuk masukan 30 fps, setiap bingkai harus diproses di bawah 30 md untuk menghindari penurunan bingkai.

Ada konstruktor CameraEffect alternatif untuk memproses gambar diam, karena latensi yang lebih tinggi lebih dapat diterima saat memproses satu gambar. Untuk konstruktor ini, Anda meneruskan ImageProcessor, menerapkan metode proses untuk mengembalikan gambar seperti yang dijelaskan dalam metode ImageProcessor.Request.getInputImage() .

Setelah Anda menentukan satu atau beberapa CameraEffects, Anda dapat menambahkannya ke pengaturan CameraX Anda. Jika Anda menggunakan CameraProvider, Anda harus memanggil UseCaseGroup.Builder.addEffect() untuk setiap CameraEffect, lalu buat UseCaseGroup, dan teruskan ke bindToLifecycle(). Jika Anda menggunakan CameraController, Anda harus meneruskan semua CameraEffects kami ke setEffects().

Fitur video tambahan

CameraX 1.3 memiliki banyak fitur video tambahan yang sangat diminta yang dengan senang hati kami tambahkan dukungannya.

Dengan VideoCapture.Builder.setMirrorMode(), Anda dapat mengontrol kapan perekaman video direfleksikan secara horizontal. Anda dapat menyetel MIRROR_MODE_OFF (default), MIRROR_MODE_ON, dan MIRROR_MODE_ON_FRONT_ONLY (berguna untuk mencocokkan keadaan pencerminan Pratinjau, yang dicerminkan pada kamera depan). Catatan: di aplikasi yang hanya menggunakan kamera depan, MIRROR_MODE_ON dan MIRROR_MODE_ON_FRONT_ONLY setara.

Metode PendingRecording.asPersistentRecording() mencegah video dihentikan oleh peristiwa daur hidup atau pelepasan eksplisit kasus penggunaan VideoCapture yang dilampirkan Perekam rekaman. Ini berguna jika Anda ingin mengikat ke kamera lain dan melanjutkan perekaman video dengan kamera itu. Saat opsi ini diaktifkan, Anda harus secara eksplisit memanggil Recording.stop() atau Recording.close() untuk mengakhiri perekaman.

Untuk video yang disetel untuk merekam audio melalui PendingRecording.withAudioEnabled(), kini Anda dapat memanggil Recording.mute() saat perekaman sedang berlangsung. Berikan boolean untuk menentukan apakah akan membisukan atau mengaktifkan audio, dan CameraX akan menyisipkan keheningan selama bagian yang dibisukan untuk memastikan audio tetap selaras dengan video.

AudioStats kini memiliki metode getAudioAmplitude() , yang sempurna untuk menampilkan indikator visual kepada pengguna bahwa audio sedang direkam. Saat perekaman video sedang berlangsung, setiap VideoRecordEvent dapat digunakan untuk mengakses RecordingStats, yang berisi objek AudioStats.

Langkah selanjutnya

Lihat catatan rilis lengkap untuk CameraX 1.3 untuk detail lebih lanjut tentang fitur yang dijelaskan di sini dan lainnya! Jika Anda siap untuk mencoba CameraX 1.3, perbarui dependensi CameraX proyek Anda ke 1.3.0-beta01 (atau versi terbaru saat Anda membaca ini).

Jika Anda ingin memberikan umpan balik tentang salah satu fitur ini atau CameraX secara umum, harap buat masalah CameraX. Seperti biasa, Anda juga dapat menghubungi Grup Diskusi CameraX kami.