CameraX 1.5 ile Tanışın: 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üzeyde özellikleri parmaklarınızın ucuna getirirken kamera oturumunu yapılandırmayı her zamankinden daha kolay hale getirmeye odaklanıyor.
Video kaydı için 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.
Resim Yakalama konusunda, işlenmemiş ve sıkıştırılmamış DNG (RAW) dosyalarını yakalama desteğiyle 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 göz atalım.
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 sunar.
Ağır Çekim ve Yüksek Kare Hızlı Video
En çok beklenen özelliklerimizden biri olan ağır çekim video hemen oynayabilirsiniz. Artık yüksek hızlı video (ör. 120 veya 240 fps) çekebilir ve doğrudan etkileyici bir ağır çekim videoya dönüştürebilirsiniz. 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 bunu uygulamak kolaydır.
1. Yüksek hız desteğini kontrol etme: 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ırma ve bağlama: HighSpeedVideoSessionConfig oluşturmak için döndürülen videoCapabilities değerini (desteklenen video kalitesi bilgilerini içerir) kullanın. 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) yöntemini ç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() 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 özel CameraConstrainedHighSpeedCaptureSession ve CamcorderProfile desteği gerekir. Kötü 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 ve diğer üreticilerin belirli modellerinin arka kameralarında desteklenmektedir.
Daha fazla bilgi için blog yayınını inceleyin.
Özellikleri Güvenle Birleştirme: 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'si sayesinde 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 stabilizasyonunu aynı anda etkinleştirebilirsiniz. Gelecekteki geliştirmeler arasında 4K kayıt ve ultra geniş yakınlaştırma yer alıyor.
Özellik grubu API'si iki temel kullanım alanı sağlar:
1. Kullanım Alanı: En Yüksek Kaliteye Öncelik Verme
Özelliklerin mümkün olan en iyi kombinasyonunu kullanarak yakalamak 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
- Önizleme Sabitleme
- Yok
2. Kullanım Alanı: Kullanıcılara 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 bir şekilde yansıtabilir ve aşağıdaki resimde olduğu gibi desteklenmeyen seçeneklerin 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 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 açma/kapatma düğmelerinin devre dışı bırakılması gerekip gerekmediğini görmek için kalan özellikleri etkinleştirilen özelliklerle 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 Özellik Grubu blog yayınını inceleyin.
Daha Fazla Video İyileştirmesi
- Eşzamanlı Kamera İyileştirmeleri: CameraX 1.5.1 ile artık kompozisyon dışı modda 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 ses kapatma: Artık
PendingRecording.withAudioEnabled(boolean initialMuted)kullanarak kaydı sessiz durumda başlatabilir ve kullanıcının daha sonraRecording.mute(boolean muted)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öndererek uygulamanızın düşük depolama alanı durumlarını sorunsuz bir şekilde işlemesine ve kullanıcıyı bilgilendirmesine olanak tanır. - Düşük Işık 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'yi etkinleştirebilirsiniz.
Profesyonel düzeyde Resim Yakalama
CameraX 1.5, maksimum kalite ve esneklik isteyen geliştiriciler için ImageCapture'da önemli yükseltmeler sunar.
DNG (RAW) Çekim ile Reklam Öğesi Kontrolünü Ortaya Çıkarma
CameraX, işlem sonrası üzerinde tam kontrol sağlamak için artık DNG (RAW) çekimini destekliyor. Bu sayede, doğrudan kamera sensöründen gelen işlenmemiş, sıkıştırılmamış görüntü verilerine erişerek profesyonel düzeyde düzenleme ve renk derecelendirme yapabilirsiniz. API, yalnızca DNG dosyasını yakalamayı veya eşzamanlı JPEG ve DNG çıkışlarını yakalamayı 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
Her iki dünyanın da en iyi özelliklerinden yararlanın: Kamera Uzantıları'nın (Gece Modu gibi) çarpıcı dijital fotoğrafçılığı ile Ultra HDR'nin muhteşem renk ve dinamik aralığı bir arada. 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:
- Manuel
unbind()çağrılara son: 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ını" dolaylı olarak kaldırır. Ancak kullanım alanlarını güncellemek veya kameralar arasında geçiş yapmak için yeniden bağlamadan önceunbind()veyaunbindAll()yöntemini çağırmanız gerekir. CameraX 1.5 ile yeni birSessionConfigbağladığınızda CameraX, oturumu sizin için sorunsuz bir şekilde günceller ve bağlama kaldırma çağrılarına gerek kalmaz. - Deterministik kare hızı kontrolü: Yeni
SessionConfigAPI, kare hızını yönetmek için deterministik bir yöntem sunar. Yalnızca bir ipucu olan öncekisetTargetFrameRateyönteminin aksine, bu yeni yöntem, başarılı bir yapılandırmanın ardından belirtilen kare hızı aralığının uygulanacağını garanti eder. Doğru sonuçlar içinCameraInfo.getSupportedFrameRateRanges(SessionConfig)kullanarak desteklenen kare hızlarını sorgulamanız gerekir.SessionConfigdeğerinin tamamını ilettiğinizde CameraX, akış yapılandırmalarına göre desteklenen aralıkları doğru şekilde belirleyebilir.
Camera-Compose Artık Kararlı Sürümde
Jetpack Compose'u ne kadar sevdiğinizi biliyoruz. camera-compose kitaplığının artık 1.5.1 sürümünde kararlı olduğunu duyurmaktan heyecan duyuyoruz. Bu sürümde, CameraXViewfinder'ın moveableContentOf ve Pager gibi Compose özellikleriyle kullanımıyla ilgili kritik hata düzeltmelerinin yanı sıra önizleme uzatma sorunu da giderildi. Gelecekteki sürümlerde camera-compose'e daha fazla özellik eklemeye devam edeceğiz.
ImageAnalysis ve CameraControl İyileştirmeleri
- El feneri gücü ayarı: Yeni API'lerle cihazın el feneri üzerinde ayrıntılı kontrol sahibi olun. CameraInfo.getMaxTorchStrengthLevel() kullanarak desteklenen maksimum gücü sorgulayabilir ve ardından CameraControl.setTorchStrengthLevel() ile istediğiniz seviyeyi ayarlayabilirsiniz.
ImageAnalysis'da NV21 desteği: Artık NV21 resim biçimini doğrudanImageAnalysis'dan isteyebilirsiniz. Böylece diğer kitaplıklar ve API'lerle entegrasyonu basitleştirebilirsiniz. Bu,ImageAnalysis.Builder.setOutputImageFormat(OUTPUT_IMAGE_FORMAT_NV21)çağrılarak etkinleştirilir.
Hemen başlayın
Bağımlılıklarınızı CameraX 1.5'e hemen güncelleyin ve heyecan verici yeni özellikleri keşfedin. Neler geliştireceğinizi 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 iletişime geçmek mi istiyorsunuz? CameraX geliştirici tartışma grubuna katılın veya hata raporu gönderin:
-
Ürün HaberleriYakında çıkacak Android sürümünü hedefleyen uygulamalar artık WRITE_CONTACTS izniyle kişilere doğrudan yazamayacak.
Roxanna Aliabadi Walker • Okuma süresi: 6 dk. -
Ürün HaberleriTemsilci tabanlı geliştirme hızlandıkça Android mühendisliği heyecan verici yeni bir aşamaya geçiyor: yardımcı kod tamamlamadan, sizin yönlendirmenizle uçtan uca yürütülen temsilcilere geçiş. Kullandığınız modeller ve temsilciler konusunda tam bir seçim özgürlüğüne ve esnekliğe sahipsiniz.
Jason Buchel • Okuma süresi: 3 dk. -
Ürün HaberleriBugün, "bir mağazadan daha fazlası" vizyonumuzu bir sonraki aşamaya nasıl taşıdığımızı paylaştık. Google Play, aylık 250 milyondan fazla etkin kullanıcının kişisel ana sayfası olan Siz sekmesinden 700 milyondan fazla oyuncu profilini birbirine bağlayan birleşik oyun platformumuza kadar her yerde kullanıcılarla buluşuyor.
Paul Feng • Okuma süresi: 3 dk.
Android geliştiriciliğiyle ilgili en son analizleri her hafta gelen kutunuza alın.