CameraX 1.5: Güçlü video kaydı ve profesyonel düzeyde Resim Yakalama
Okuma süresi: 7 dk.
CameraX ekibi, 1.5 sürümünün yayınlandığını duyurmaktan heyecan duyuyor. Bu son güncelleme, profesyonel düzeydeki özellikleri parmaklarınızın ucuna getirirken kamera oturumunu her zamankinden daha kolay yapılandırmanıza olanak tanır.
Video kaydı özelliği sayesinde kullanıcılar artık kolayca etkileyici ağır çekim veya yüksek kare hızlı videolar çekebilir. Daha da önemlisi, yeni Feature Group API (Özellik Grubu API'si), 10 bit HDR ve 60 FPS gibi karmaşık kombinasyonları güvenle etkinleştirmenize olanak tanıyarak desteklenen cihazlarda tutarlı sonuçlar elde etmenizi sağlar.
Görüntü yakalama konusunda, işlenmemiş ve sıkıştırılmamış DNG (RAW) dosyalarını yakalama desteği sayesinde maksimum esneklik elde edersiniz. Ayrıca, güçlü kamera uzantılarını kullanırken bile Ultra HDR çıkışından yararlanabilirsiniz.
Bu özelliklerin temelinde, kamera kurulumunu ve yeniden yapılandırmayı kolaylaştıran yeni SessionConfig API yer alır. Şimdi bu heyecan verici yeni özelliklerin ayrıntılarına geçelim.
Güçlü video kaydı: Yüksek hız ve özellik kombinasyonları
CameraX 1.5, video özelliklerini önemli ölçüde genişleterek daha yaratıcı ve sağlam kayıt deneyimleri sunuyor.
Ağır çekim ve yüksek kare hızlı video
En çok beklenen özelliklerimizden biri olan ağır çekim video özelliği kullanıma sunuldu. Artık yüksek hızlı videolar (ör. 120 veya 240 fps) çekip bunları doğrudan etkileyici ağır çekim videolar olarak kodlayabilirsiniz. Alternatif olarak, son derece akıcı videolar üretmek için aynı yüksek kare hızında kayıt yapabilirsiniz.
VideoCapture API'sini biliyorsanız bu API'yi uygulamak kolaydır.
1. Yüksek Hızlı Destek Kontrolü: Cihazın bu özelliği destekleyip desteklemediğini sorgulamak için yeni Recorder.getHighSpeedVideoCapabilities() yöntemini kullanın.
val cameraInfo = cameraProvider.getCameraInfo(cameraSelector)
val highSpeedCapabilities = Recorder.getHighSpeedVideoCapabilities(cameraInfo)
if (highSpeedCapabilities == null) {
// This camera device does not support high-speed video.
return
}2. Kullanım alanını yapılandırın ve bağlayın: Döndürülen videoCapabilities (desteklenen video kalitesi bilgilerini içerir) ile HighSpeedVideoSessionConfig oluşturun. Ardından, cameraInfo.getSupportedFrameRateRanges() aracılığıyla desteklenen kare hızı aralıklarını sorgulamanız ve istediğiniz aralığı ayarlamanız gerekir. Ağır çekim videolar kaydetmek için setSlowMotionEnabled(true) işlevini çağırın. Aksi takdirde yüksek kare hızlı videolar kaydedilir. Son adımda, videoyu kaydetmeye başlamak için normal Recorder.prepareRecording().start() düğmesini kullanın.
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, {})Uyumluluk ve sınırlamalar
Yüksek hızlı kayıt için belirli CameraConstrainedHighSpeedCaptureSession ve CamcorderProfile desteği gerekir. Kötü bir kullanıcı deneyimini önlemek için her zaman özellik kontrolü yapın ve yüksek hızlı kaydı yalnızca desteklenen cihazlarda etkinleştirin. Bu özellik şu anda neredeyse tüm Pixel cihazların arka kameralarında ve diğer üreticilerin belirli modellerinde desteklenmektedir.
Daha fazla bilgi için blog yayınını inceleyin.
Özellikleri güvenle birleştirin: Feature Group API
CameraX 1.5, özellik uyumluluğuyla ilgili tahminleri ortadan kaldıran Feature Group API'yi sunar. Android 15'in özellik kombinasyonu sorgusu API'sine dayalı olarak artık birden fazla özelliği birlikte güvenle etkinleştirebilir ve kararlı bir kamera oturumu sağlayabilirsiniz. Özellik grubu şu anda HDR (HLG), 60 FPS, önizleme sabitleme ve Ultra HDR'yi desteklemektedir. Örneğin, Pixel 10 ve Galaxy S25 serisinde HDR, 60 fps ve önizleme sabitleme özelliklerini aynı anda etkinleştirebilirsiniz. Gelecekteki geliştirmeler arasında 4K kayıt ve ultra geniş yakınlaştırma yer alması planlanmaktadır.
Özellik grubu API'si iki temel kullanım alanını destekler:
Kullanım alanı 1: En iyi kaliteye öncelik verme
Mümkün olan en iyi özellik kombinasyonunu kullanarak çekim yapmak istiyorsanız önceliklendirilmiş bir liste sağlayabilirsiniz. CameraX, bunları sırayla etkinleştirmeye çalışır ve cihazın tam olarak desteklediği ilk kombinasyonu seçer.
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)Bu örnekte CameraX, özellikleri şu sırayla etkinleştirmeye çalışır:
- HDR + 60 FPS + Önizleme Sabitleme
- HDR + 60 FPS
- HDR + Önizleme Sabitleme
- HDR
- 60 FPS + Önizleme Sabitleme
- 60 FPS
- Sabitleme önizlemesi
- Yok
2. Kullanım Alanı: Kullanıcıya Yönelik Ayarlar Kullanıcı Arayüzü Oluşturma
Artık uygulamanızın ayarlar kullanıcı arayüzünde hangi özellik kombinasyonlarının desteklendiğini doğru şekilde yansıtabilir ve aşağıdaki resimde gösterildiği gibi desteklenmeyen seçeneklerin açma/kapatma düğmelerini devre dışı bırakabilirsiniz.
Bir açma/kapatma düğmesinin grileştirilip grileştirilmeyeceğini belirlemek için aşağıdaki kodları kullanarak özellik kombinasyonu desteğini kontrol edin. Başlangıçta her bir özelliğin durumunu sorgulayın. Bir özellik etkinleştirildikten sonra, uyumluluk kısıtlamaları nedeniyle artık devre dışı bırakılmaları gerekip gerekmediğini görmek için kalan özellikleri etkinleştirilen özelliklerle birlikte yeniden sorgulayın.
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
}
}Daha fazla bilgi için lütfen Özellik Grubu blog yayınını inceleyin.
Daha fazla video iyileştirme
- Eşzamanlı Kamera İyileştirmeleri: CameraX 1.5.1 ile artık kompozisyon modu dışındaki her SingleCameraConfig için Preview + ImageCapture + VideoCapture kullanım alanlarını eşzamanlı olarak bağlayabilirsiniz. Ayrıca, oluşturma modunda (CompositionSettings ile aynı kullanım alanları) artık nihai oluşturma sonucuna uygulanan
CameraEffectdeğerini ayarlayabilirsiniz. - Dinamik Sessize Alma: Artık
PendingRecording.withAudioEnabled(boolean initialMuted)tuşunu kullanarak kaydı sessiz başlatabilir ve kullanıcının daha sonraRecording.mute(boolean muted)tuşunu kullanarak sesi açmasına izin verebilirsiniz. - Yetersiz depolama alanı işleme iyileştirildi: CameraX artık
VideoRecordEvent.Finalize.ERROR_INSUFFICIENT_STORAGEhatasını güvenilir bir şekilde gönderiyor. Böylece uygulamanız, depolama alanının az olduğu durumlarda sorunsuz bir şekilde çalışabiliyor ve kullanıcıyı bilgilendirebiliyor. - Düşük ışıkta geliştirme: Desteklenen cihazlarda (ör. Pixel 10 serisi) karanlık ortamlarda önizleme ve video akışlarını otomatik olarak aydınlatmak için CameraControl.enableLowLightBoostAsync'i etkinleştirebilirsiniz.
Profesyonel Kalitede Resim Yakalama
CameraX 1.5, maksimum kalite ve esneklik isteyen geliştiriciler için ImageCapture'da önemli yükseltmeler sunuyor.
DNG (RAW) yakalama ile yaratıcı kontrolü ortaya çıkarın
CameraX artık DNG (RAW) yakalamayı destekliyor. Böylece, sonradan işleme üzerinde tam kontrol sahibi olabilirsiniz. Bu sayede, doğrudan kamera sensöründen işlenmemiş ve sıkıştırılmamış görüntü verilerine erişebilir, profesyonel düzeyde düzenleme ve renk derecelendirme yapabilirsiniz. API, yalnızca DNG dosyasının yakalanmasını veya eşzamanlı JPEG ve DNG çıkışlarının yakalanmasını destekler. JPEG ve DNG dosyalarını aynı anda nasıl yakalayacağınızı öğrenmek için aşağıdaki örnek koda bakın.
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) {}
}
)Kamera Uzantıları için Ultra HDR
Hem Kamera Uzantıları'nın (ör. Gece Modu) çarpıcı dijital fotoğrafçılığından hem de Ultra HDR'nin mükemmel renk ve dinamik aralığından yararlanın. Bu özellik artık Pixel 9/10 serisi ve Samsung S24/S25 serisi gibi birçok yeni premium Android telefonda desteklenmektedir.
// 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()Temel API ve Kullanılabilirlik Geliştirmeleri
Yeni bir yapılandırma yöntemi: SessionConfig
Yukarıdaki örneklerde görüldüğü gibi SessionConfig, CameraX 1.5'te yeni bir kavramdır. Yapılandırmayı merkezileştirir ve API'yi iki temel şekilde basitleştirir:
- Artık Manuel
unbind()Çağrı Yok: CameraX API'leri yaşam döngüsüne duyarlıdır. Etkinlik veya diğerLifecycleOwneryok edildiğinde kullanım alanlarınızın "bağlantısı kaldırılır". Ancak kullanım alanlarını güncellemek veya kameraları değiştirmek için yeniden bağlamadan önceunbind()veyaunbindAll()'u aramanız gerekir. CameraX 1.5 ile yeni birSessionConfigbağladığınızda CameraX, oturumu sizin için sorunsuz bir şekilde günceller ve bağlamayı kaldırma çağrılarına gerek kalmaz. - Belirleyici kare hızı kontrolü: Yeni
SessionConfigAPI, kare hızını yönetmek için belirleyici bir yöntem sunar. Yalnızca bir ipucu olan öncekisetTargetFrameRateyönteminin aksine, bu yeni yöntem, belirtilen kare hızı aralığının başarılı yapılandırma sonrasında uygulanacağını garanti eder. Doğruluğu sağlamak içinCameraInfo.getSupportedFrameRateRanges(SessionConfig)kullanarak desteklenen kare hızlarını sorgulamanız gerekir. TamSessionConfigiletilerek CameraX, akış yapılandırmalarına göre desteklenen aralıkları doğru bir şekilde belirleyebilir.
Kamera ile beste özelliği artık kararlı
Jetpack Compose'u ne kadar çok sevdiğinizi biliyoruz. Bu nedenle, camera-compose kitaplığının artık 1.5.1 sürümünde kararlı olduğunu duyurmaktan heyecan duyuyoruz. Bu sürümde, moveableContentOf ve Pager gibi Compose özellikleriyle CameraXViewfinder kullanımıyla ilgili kritik hata düzeltmelerinin yanı sıra önizleme uzatma sorunu da giderildi. Gelecekteki sürümlerde camera-compose'ya daha fazla özellik eklemeye devam edeceğiz.
Görüntü Analizi ve Kamera Kontrolü İyileştirmeleri
- Fener Gücü Ayarı: Yeni API'ler sayesinde cihazın feneri üzerinde ayrıntılı kontrol elde edin. CameraInfo.getMaxTorchStrengthLevel() kullanarak desteklenen maksimum gücü sorgulayabilir, ardından CameraControl.setTorchStrengthLevel() ile istediğiniz seviyeyi ayarlayabilirsiniz.
- NV21 desteği
ImageAnalysis: Artık NV21 görüntü biçimini doğrudanImageAnalysis'dan isteyebilirsiniz. Bu sayede diğer kitaplıklar ve API'lerle entegrasyon kolaylaşır. Bu özellik,ImageAnalysis.Builder.setOutputImageFormat(OUTPUT_IMAGE_FORMAT_NV21)çağrılarak etkinleştirilir.
Başlangıç Adımları
Bağımlılıklarınızı bugün CameraX 1.5'e güncelleyin ve heyecan verici yeni özellikleri keşfedin. Neler oluşturacağınızı görmek için sabırsızlanıyoruz.
CameraX 1.5'i kullanmak için lütfen libs.versions.toml dosyanıza aşağıdaki bağımlılıkları ekleyin. (Birçok kritik hata düzeltmesi ve eşzamanlı kamera iyileştirmesi içeren 1.5.1 sürümünü kullanmanızı öneririz.)
[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" }Ardından bunları modülünüzün build.gradle.kts bağımlılıklarına ekleyin:
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
}Sorularınız mı var veya CameraX ekibiyle mi iletişime geçmek istiyorsunuz? CameraX geliştiricileriyle ilgili tartışma grubuna katılın veya hata raporu gönderin:
-
Ürün HaberleriGoogle Play'de, büyümenizi sağlamanıza, yeni iş modellerine uyum sağlamanıza ve kullanıcılarınıza tam olarak bulundukları yerde ulaşmanıza yardımcı olmak için abonelik platformumuzu sürekli olarak genişletiyoruz.
Sheenam Mittal • Okuma süresi: 4 dakika -
Ürün HaberleriGeçen yıl Android Studio, tüm yapay zeka modellerine açıldı. Bugün, kodlama aracınızı seçme desteğini sunarak bir sonraki adımı atıyoruz.
Matthew Warner • Okuma süresi: 3 dk. -
Ürün HaberleriGooglebook, ortak bir Android temeli üzerine inşa edilmiş yeni bir dizüstü bilgisayar kategorisini tanıtıyor. HP, Dell, Lenovo, Acer ve Asus gibi iş ortaklarının yüksek performanslı donanımları, mobil kolaylığı masaüstü gücüyle birleştirir.
Fahd Imtiaz, Loryn Hairston • Okuma süresi: 4 dakika
Android geliştirmeyle ilgili en son analizleri haftalık olarak gelen kutunuza alın.