Ürün Haberleri
CameraX 1.5: Güçlü video kaydı ve profesyonel düzeyde Resim Yakalama
Okuma süresi: 7 dakika
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 zahmetsizce etkileyici ağır çekim veya yüksek kare hızlı videolar çekebilir. Daha da önemlisi, yeni Feature Group API, 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ızlı 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 artık 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 işlemi 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'u (desteklenen video kalitesi bilgilerini içerir) kullanarak 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ım, videoyu kaydetmeye başlamak için normal Recorder.prepareRecording().start() düğmesini kullanmaktır.
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 kullanıma sunuyor. 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 sabitlemeyi aynı anda etkinleştirebilirsiniz. Gelecekteki geliştirmelerle 4K kayıt ve ultra geniş yakınlaştırma özelliklerinin eklenmesi planlanmaktadır.
Özellik grubu API'si iki temel kullanım alanını destekler:
1. Kullanım Alanı: En İyi Kaliteye Öncelik Verme
Mümkün olan en iyi özellik kombinasyonunu kullanarak çekim yapmak istiyorsanız önceliklendirilmiş bir liste sağlayabilirsiniz. CameraX, cihazın tam olarak desteklediği ilk kombinasyonu seçerek bunları sırayla etkinleştirmeye çalışır.
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
- Sabitlemeyi önizleme
- 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çenekler için açma/kapatma düğmelerini devre dışı bırakabilirsiniz.
Bir açma/kapatma düğmesinin devre dışı bırakılıp bırakılmayacağını belirlemek için özellik kombinasyonu desteğini kontrol etmek üzere aşağıdaki kodları kullanın. Başlangıçta her bir özelliğin durumunu sorgulayın. Bir özellik etkinleştirildikten sonra, etkinleştirilen özelliklerle birlikte kalan özellikler için yeniden sorgu göndererek uyumluluk kısıtlamaları nedeniyle artık bu özelliklerin açma/kapatma düğmelerinin devre dışı bırakılıp bırakılmaması gerektiğini kontrol edin.
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.
Diğer video iyileştirmeleri
- Eşzamanlı Kamera İyileştirmeleri: CameraX 1.5.1 ile artık kompozisyon modu dışındaki her SingleCameraConfig için Önizleme + ImageCapture + VideoCapture kullanım alanlarını eşzamanlı olarak bağlayabilirsiniz. Ayrıca, kompozisyon modunda (CompositionSettings ile aynı kullanım alanları) artık nihai kompozisyon sonucuna uygulanan
CameraEffectdeğerini ayarlayabilirsiniz. - Dinamik Sessize Alma: Artık
PendingRecording.withAudioEnabled(boolean initialMuted)simgesini kullanarak kaydı sessiz başlatabilir ve kullanıcının daha sonraRecording.mute(boolean muted)simgesini 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. - Zayıf ışıkta geliştirme: Desteklenen cihazlarda (ör. Pixel 10 serisi) CameraControl.enableLowLightBoostAsync'i etkinleştirerek karanlık ortamlarda önizleme ve video akışlarının otomatik olarak parlaklaştırılmasını sağlayabilirsiniz.
Profesyonel Kalitede Resim Yakalama
CameraX 1.5, maksimum kalite ve esneklik isteyen geliştiriciler için ImageCapture'da önemli yükseltmeler sunuyor.
DNG (RAW) ile fotoğraf çekme özelliğiyle yaratıcı kontrolü ortaya çıkarın
CameraX artık DNG (RAW) çekimini 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ızla ilgili 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ığını hem de Ultra HDR'nin mükemmel renk ve dinamik aralığını bir arada kullanı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'teki 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ı dolaylı olarak "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. CameraX, tamSessionConfigdeğerini ileterek desteklenen aralıkları akış yapılandırmalarına göre 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.
ImageAnalysis ve CameraControl'da yapılan iyileştirmeler
- El Feneri Gücü Ayarı: Yeni API'lerle cihazın el 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'den 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ştiricileri tartışma grubuna katılın veya hata raporu gönderin:
Okumaya devam edin
-
Ürün Haberleri
Android Emulator ile çeşitli cihaz etkileşimlerini test etmek artık her zamankinden daha kolay.
Steven Jenkins • Okuma süresi: 2 dakika
-
Ürün Haberleri
Her geliştiricinin yapay zeka iş akışı ve ihtiyaçları benzersizdir. Bu nedenle, yapay zekanın geliştirme sürecinize nasıl yardımcı olacağını seçebilmeniz önemlidir. Ocak ayında, Android Studio'daki yapay zeka işlevlerine güç katmak için yerel veya uzak bir yapay zeka modeli seçme özelliğini kullanıma sunduk.
Matthew Warner • Okuma süresi: 2 dakika
-
Ürün Haberleri
Android Studio Panda 3 artık kararlı ve üretimde kullanıma hazır. Bu sürüm, yapay zeka destekli iş akışlarınız üzerinde daha fazla kontrol ve özelleştirme imkanı sunarak yüksek kaliteli Android uygulamaları oluşturmayı her zamankinden daha kolay hale getiriyor.
Matt Dyor • Okuma süresi: 3 dk.
Gelişmelerden haberdar olun
Android geliştirmeyle ilgili en son analizleri her hafta gelen kutunuza alın.