Diposting oleh Donovan McMurray – Insinyur Hubungan Pengembang
CameraX, pustaka kamera Jetpack Android, mendapatkan pembaruan menarik pada fitur Kamera Ganda Bersamaan, yang semakin mempermudah integrasi fitur tersebut ke dalam aplikasi Anda. Fitur ini memungkinkan Anda melakukan streaming dari 2 kamera berbeda secara bersamaan. Versi asli Dual Concurrent Camera dirilis di CameraX 1.3.0 dan ini merupakan langkah besar dalam memfasilitasi penerapan fitur ini.
Dimulai dengan 1.5.0-alpha01, CameraX kini juga akan menangani komposisi 2 aliran kamera. Pembaruan ini adalah fungsi tambahan dan tidak menghapus fungsi sebelumnya atau merupakan perubahan yang dapat menyebabkan gangguan pada kode Kamera Simultan Ganda Anda yang sudah ada. Untuk memerintahkan CameraX menangani komposisi, cukup gunakan konstruktor SingleCameraConfig baru yang memiliki parameter baru untuk objek CompositionSettings. Karena Anda akan membuat 2 SingleCameraConfig, Anda harus konsisten dalam memilih konstruktor mana yang Anda gunakan.
Tidak ada yang berubah dalam cara Anda memeriksa apakah Anda memiliki dukungan kamera secara bersamaan dari versi sebelumnya fitur ini. Sebagai pengingat, berikut tampilan kodenya.
// Tetapkan pemilih kamera primer dan sekunder jika didukung pada perangkat. var primaryCameraSelector: CameraSelector? = null var sekunderCameraSelector: CameraSelector? = null untuk (cameraInfos di cameraProvider.availableConcurrentCameraInfos) { primariCameraSelector = cameraInfos.first { it.lensFacing == CameraSelector.LENS_FACING_FRONT }.cameraSelector secondariCameraSelector = cameraInfos.first_Facing = cameraInfos.first_Facing .cameraSelector if (primariCameraSelector == null || secondariCameraSelector == null) { // Jika pemilih primer atau sekunder tidak ditemukan, setel ulang keduanya // untuk berpindah ke daftar CameraInfos berikutnya. primariCameraSelector = null secondariCameraSelector = null } else { // Jika pemilih kamera primer dan sekunder ditemukan, kita dapat // menyimpulkan pencarian. break } } if (primariCameraSelector == null || secondariCameraSelector == null) { // Kamera depan dan belakang secara bersamaan tidak tersedia. Tangani sebagaimana mestinya. }
Berikut cuplikan kode terbaru yang menunjukkan cara menerapkan gambar-dalam-gambar, dengan aliran kamera depan diperkecil agar pas di sudut kanan bawah. Dalam contoh ini, CameraX menangani komposisi aliran kamera.
// Jika ditemukan 2 pemilih kamera bersamaan, buat 2 SingleCameraConfigs // dan susun menjadi tata letak gambar-dalam-gambar. val primari = SingleCameraConfig( cameraSelectorPrimari, useCaseGroup, CompositionSettings.Builder() .setAlpha(1.0f) .setOffset(0.0f, 0.0f) .setScale(1.0f, 1.0f) .build(), lifecycleOvner); val secondari = SingleCameraConfig( cameraSelectorSecondari, useCaseGroup, CompositionSettings.Builder() .setAlpha(1.0f) .setOffset(2 / 3f – 0.1f, -2 / 3f + 0.1f) .setScale(1 / 3f, 1. build() lifecycleOvner); // Ikat ke siklus hidup ConcurrentCamera concurrentCamera = cameraProvider.bindToLifecicle(listOf(primaries, secondaries));
Anda tidak dibatasi pada tata letak gambar-dalam-gambar. Misalnya, Anda dapat menentukan tata letak berdampingan dengan mengatur offset dan faktor penskalaan yang sesuai. Anda ingin kedua dimensi diskalakan dengan jumlah yang sama untuk menghindari tampilan melebar. Berikut tampilannya.
// Jika ditemukan 2 pemilih kamera bersamaan, buat 2 SingleCameraConfigs // dan susun menjadi tata letak gambar-dalam-gambar. val primari = SingleCameraConfig( cameraSelectorPrimari, useCaseGroup, CompositionSettings.Builder() .setAlpha(1.0f) .setOffset(0.0f, 0.25f) .setScale(0.5f, 0.5f) .build(), lifecycleOvner); val secondari = SingleCameraConfig( cameraSelectorSecondary, useCaseGroup, CompositionSettings.Builder() .setAlpha(1.0f) .setOffset(0.5f, 0.25f) .setScale(0.5f, 0.5f) .build() lifecycleOvner); // Ikat ke Lifecycle ConcurrentCamera concurrentCamera = cameraProvider.bindToLifecycle(listOf(primaries, secondaries));
Kami sangat gembira untuk menawarkan peningkatan ini pada fitur yang sudah ramah pengembang. Benar-benar cara CameraX! CompositionSettings di Dual Concurrent Camera saat ini masih dalam versi alfa, jadi jika Anda memiliki permintaan fitur untuk ditingkatkan sebelum API dikunci, kirimkan masukan kepada kami di grup diskusi CameraX. Dan lihat catatan rilis lengkap CameraX 1.5.0-alpha01 untuk melihat apa lagi yang baru di CameraX.