CameraX: nedir, CameraX API ve kamera nasıl çalışır

Yazar: IT Sectr Yayınlanma: 2026-03-26 Okuma süresi: 8 dk

CameraX, karmaşık Camera2 üzerinde basit ve tutarlı bir API sağlayan bir Android Jetpack kütüphanesidir. Yüzlerce Android cihaz modeli arasındaki farklılıkları soyutlar ve farklı donanımlarda tutarlı kamera davranışı garanti eder. Android Developer CameraX Guide (2026)'ya göre, kütüphane 25.000'den fazla Google Play uygulamasında kullanılmakta ve API Level 21 ve üzeri cihazlarda çalışmaktadır.

Önemli Noktalar

  • CameraX, Preview, ImageCapture ve ImageAnalysis kullanım durumu API'sine sahip Android kamerası için Jetpack kütüphanesidir
  • Kullanım durumu mimarisi, geliştiriciyi manuel oturum yönetimi ve kamera durumlarından kurtarır
  • CameraX Extensions, desteklenen cihazlarda portre modu, HDR ve gece çekimi ekler
  • Tip güvenliği — CameraX, ProcessCameraProvider aracılığıyla kullanım durumu uyumluluğunu kontrol eder
  • Uyumluluk — Android 5.0 (API 21)'den itibaren Android cihazların %99'u ile

CameraX Nedir?

CameraX, Google tarafından 2019 yılında ilk kez yayınlanan, eski Camera API'nin yerine geçen ve karmaşık Camera2'nin basitleştirilmiş alternatifi olan bir Android Jetpack paketi kütüphanesidir. CameraX'in temel felsefesi “bir kez yaz, tüm cihazlarda çalıştır” şeklindedir. Kütüphane, donanım farklılıklarını otomatik olarak işler: kamera konumları, desteklenen çözünürlükler, sensör yönü ve mevcut formatlar — geliştiricinin cihaza özel kod yazması gerekmez.

CameraX mimarisi kullanım durumları üzerine kurulmuştur: Preview (kamera akışını Viewfinder'da gösterme), ImageCapture (fotoğraf çekme), ImageAnalysis (ML için kare akışını analiz etme) ve VideoCapture (video kaydetme). Her kullanım durumu bağımsız bir bileşendir ve birleştirilebilir: vizör için Preview ve ML işleme için ImageAnalysis'i aynı anda çalıştırabilirsiniz. Google'a (2026) göre CameraX, API 21+ ile Android cihazların %99'unda desteklenmektedir.

Temel Özellikler

CameraX, ön ve arka kameralar arasında otomatik geçiş, oturumu yeniden oluşturmadan ekran döndürme desteği, LifecycleOwner aracılığıyla yerleşik yaşam döngüsü yönetimi, kullanım durumlarını tek bir Lifecycle sürecine bağlama, portre, HDR ve gece modu için Camera2 Extensions desteği ve gerçek cihaz olmadan birim testi için TestableCameraX sağlar.

CameraX Kullanım Durumları

CameraX, her biri belirli bir kamera görevini çözen dört standart kullanım durumu tanımlar. Kullanım durumları birleştirilebilir: en popüler kombinasyonlar kamera uygulaması için Preview + ImageCapture ve ML tarayıcı için Preview + ImageAnalysis'dir.

Kullanım DurumuAmaçSınıf
PreviewGerçek zamanlı kamera akışını göstermePreviewView
ImageCaptureFlaş ve çözünürlük ayarlarıyla fotoğraf çekmeImageCapture
ImageAnalysisML işleme için her kareyi analiz etmeImageAnalysis
VideoCaptureMikrofonla video kaydetme (1.1.0-beta'dan itibaren)VideoCapture

Preview

Preview kullanım durumu, kamera video akışını PreviewView'da gösterir — CameraX kütüphanesinden özel bir View. PreviewView otomatik olarak kamera en-boy oranına uyum sağlar, ScaleType'ı (FillCenter, FitCenter) ve kullanım durumunu yeniden oluşturmadan ekran döndürmeyi destekler. Geliştiricinin yalnızca ProcessCameraProvider aracılığıyla Preview'ı bir Lifecycle'a bağlaması gerekir.

ImageAnalysis

ImageAnalysis kullanım durumu, analiz için her kamera karesini bir işleyiciye gönderir: metin tanıma, yüz algılama, QR kod tarama. Analizör, kareleri YUV_420_888 formatında alır — evrensel Android renk alanı. Çalışma modu (BLOCKING veya NON_BLOCKING) kare kuyruğunu kontrol eder: BLOCKING önceki analizin tamamlanmasını bekler, NON_BLOCKING gecikmelerde kareleri atlar.

ImageCapture

ImageCapture kullanım durumu, flaş, çözünürlük ve sıkıştırma ayarlarıyla kameradan fotoğraf çeker. JPEG ve RAW formatları desteklenir (uyumlu cihazlarda). ImageCapture, ekran görüntüsünü OnImageCapturedCallback aracılığıyla asenkron olarak veya ImageCapture.OutputFileOptions aracılığıyla doğrudan bir dosyaya kaydeder.

VideoCapture — Video Kaydı

VideoCapture kullanım durumu, CameraX 1.1.0 (beta) ile eklenmiştir ve 30 FPS'de 4K'ya kadar video kaydetmeye olanak tanır. Kullanım durumu otomatik olarak Preview ile senkronize olur: vizördeki görüntü dosyaya kaydedilenle eşleşir. VideoCapture dahili olarak MediaCodec ve MediaMuxer kullanır, video codec ve MP4 kapsayıcı yapılandırmasının karmaşıklığını gizler.

CameraX vs Camera2

CameraX ve Camera2, Android'de kamerayla çalışmak için iki yaklaşımdır. Camera2, cihaz üzerinde tam kontrol sağlayan düşük seviyeli bir API'dir. CameraX, tipik senaryoları otomatikleştiren yüksek seviyeli bir soyutlamadır. Aralarındaki seçim proje gereksinimlerine bağlıdır.

ÖzellikCameraXCamera2
API SeviyesiYüksek (kullanım durumu)Düşük (tam kontrol)
Cihaza özel kodGerekmezHer cihaz için gerekli
Yaşam döngüsü bağlamaOtomatikManuel
UzantılarDahili (HDR, Portrait, Night)OEM uygulaması gerekli
Uygulama karmaşıklığı15–30 satır kod100–300 satır kod
API DesteğiAPI 21+API 21+
EsneklikStandart senaryolarHerhangi bir senaryo

Standart görevler için CameraX kullanın: uygulama içi kamera, QR tarayıcı, ML akış işleme. Manuel pozlama kontrolü, tam parametre kontrolüyle RAW çekim veya aynı anda birden çok kamerayla çalışma gerektiğinde Camera2 kullanın.

Kotlin Kod Örnekleri

Üç ana kullanım durumunu (Preview, ImageCapture ve ImageAnalysis) kullanarak bir Android uygulamasında CameraX'in tam kurulumunu inceleyelim.

ProcessCameraProvider Kurulumu

Kod, CameraX'i ProcessCameraProvider aracılığıyla Activity yaşam döngüsüne bağlar. Önce sağlayıcının bir örneği istenir, ardından kullanım durumları oluşturulur ve bağlama gerçekleştirilir.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

cameraProviderFuture.addListener({
    val cameraProvider = cameraProviderFuture.get()

    // Preview Oluşturma
    val preview = Preview.Builder()
        .build()
        .also {
            it.setSurfaceProvider(
                binding.viewFinder.surfaceProvider
            )
        }

    // ImageCapture Oluşturma
    val imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
        .build()

    // Lifecycle'a Bağlama
    cameraProvider.unbindAll()
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}, ContextCompact.getMainExecutor(this))

Kotlin kodu, bir future aracılığıyla ProcessCameraProvider'ı alır, Preview ve ImageCapture kullanım durumlarını oluşturur ve bunları mevcut Activity yaşam döngüsüne bağlar. CameraX, ekran döndürme, kamera değiştirme ve Activity kapatıldığında kaynakların serbest bırakılmasını otomatik olarak işler.

ML İşleme için ImageAnalysis

Kamera akışının kare kare işlenmesi için bir ImageAnalysis kullanım durumu ekleyelim, örneğin ML Kit ile entegrasyon için.

kotlin
val imageAnalysis = ImageAnalysis.Builder()
    .setBackpressureStrategy(
        ImageAnalysis.STRATEGY_KEEP_ONLY_LATEST
    )
    .build()

imageAnalysis.setAnalyzer(
    ContextCompact.getMainExecutor(this)
) { imageProxy ->
    // ML Kit için YUV'yi Bitmap'e Dönüştürme
    val bitmap = ImageUtils.yuvToBitmap(imageProxy)
    val inputImage = InputImage.fromBitmap(bitmap)

    // ML Kit metin tanımayı başlatma
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Sonucu işleme
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

KEEP_ONLY_LATEST stratejisi ile ImageAnalysis, yalnızca en son kullanılabilir kareyi işler, analizör yetişemiyorsa eski kareleri atlar. Her kare, ML Kit için YUV'dan Bitmap'e dönüştürülür, ardından metin tanıma başlatılır. imageProxy.close() çağrısı zorunludur — aksi takdirde CameraX yeni kareler sağlamayı durdurur.

CameraX Extensions

CameraX Extensions, gelişmiş çekim modları ekleyen bir modüldür: portre (arka plan bulanıklığı), HDR (genişletilmiş dinamik aralık), gece modu (düşük ışıkta çekim), otomatik rötuş (cilt düzeltme) ve güzellik modu. Uzantılar yalnızca kamera üreticisinin OEM uygulaması sağladığı cihazlarda etkinleştirilir.

Uzantıları Kontrol Etme ve Etkinleştirme

CameraX Extensions'ı kullanmadan önce, uzantının mevcut cihazda kullanılabilir olup olmadığını kontrol etmelisiniz. Google, ExtensionsManager.isExtensionAvailable aracılığıyla kontrol edilmesini önerir.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Portre modunu etkinleştirme
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

Kod, ExtensionsManager aracılığıyla BOKEH (portre) uzantısı desteğini kontrol eder ve bir OEM uygulaması mevcutsa etkinleştirir. CameraX, portre modu için kamera ayarlarını otomatik olarak değiştirir. Uzantı mevcut değilse, uygulama çökmeden standart modda çalışmaya devam eder.

CameraX Extensions, Android geliştirmenin ana sorunlarından birini çözer: kamera parçalanması. Farklı cihazlarda portre modu farklı şekilde uygulanır — bazıları çift lens kullanır, bazıları yazılım bulanıklığı kullanır. CameraX bu farkı soyutlar: geliştirici BOKEH modunu etkinleştirir ve kütüphane, belirli bir cihazda nasıl uygulanacağını kendisi belirler. Google, doğrulanmış OEM ortaklarının bir listesini tutar: Samsung, Xiaomi, OPPO, vivo, Google Pixel.

CameraX ile çalışırken, eşzamanlı kullanım durumu sayısındaki sınırlamaları dikkate almak önemlidir: çoğu cihazda en fazla 3 kullanım durumu aynı anda çalıştırılabilir. Örneğin, Preview + ImageCapture + ImageAnalysis tüm modern cihazlarda çalışır, ancak Preview + ImageCapture + VideoCapture bütçe modellerinde desteklenmeyebilir. CameraX, bağlamadan önce kullanım durumu kombinasyonu uyumluluğunu kontrol eden ProcessCameraProvider.checkAvailability() yöntemini sağlayarak çalışma zamanı çökmelerini önlemeye yardımcı olur.

CameraX, CameraXFragment veya Compose uyumlu PreviewView aracılığıyla Jetpack Navigation ile entegre olur. Compose için, PreviewView'in gömülü olduğu AndroidView öğesi kullanılır. CameraX, kamera oturumu durumunu kaybetmeden ekran döndürme ve yapılandırma değişikliklerini doğru şekilde işler — yalnızca LifecycleOwner'ı belirtin, kütüphane cihaz döndüğünde kullanım durumu bağlamalarını otomatik olarak yeniden oluşturacaktır.

CameraX'i gerçek cihaz olmadan test etmek için Google, TestableCameraX'i sağlar — birim testlerde kamera davranışını taklit eden bir kütüphane. TestableCameraX, fiziksel bir cihaz olmadan kamera karelerini simüle etmeye, ImageAnalysis çalışmasını ve ImageCapture doğruluğunu test etmeye olanak tanır. Bu, kamerayla çalışan projeler için CI/CD boru hattını önemli ölçüde hızlandırır.

Sıkça Sorulan Sorular

CameraX hangi Android sürümlerinden itibaren çalışır?

Android 5.0 (API 21) ve üzeri. CameraX, aktif Android cihazlarının %99'unu kapsar. Uzantılar (Portrait, HDR) API 23+ ve belirli mod için OEM desteği gerektirir.

CameraX, ML Kit ile kullanılabilir mi?

Evet, ImageAnalysis kullanım durumu her kareyi analizöre iletir. Kareler, ML Kit için YUV_420_888'den InputImage'a dönüştürülür. Bu, bir ML tarayıcı oluşturmak için standart desendir.

CameraX, Camera2'den nasıl farklıdır?

CameraX, kullanım durumu mimarisi, otomatik yaşam döngüsü bağlama ve cihaza özel farklılıkların işlenmesiyle yüksek seviyeli bir API'dir. Camera2, büyük miktarda tekrar eden kodla tam kamera kontrolü sağlayan düşük seviyeli bir API'dir.

CameraX video kaydını destekliyor mu?

Evet, VideoCapture kullanım durumu CameraX 1.1.0-beta'da eklenmiştir. Mikrofonla video kaydeder ve Preview ile senkronize olur. Daha karmaşık senaryolar için doğrudan Camera2 kullanın.

Ön ve arka kamera arasında nasıl geçiş yapılır?

CameraSelector aracılığıyla: DEFAULT_BACK_CAMERA veya DEFAULT_FRONT_CAMERA. Geçiş yapmak için yeni bir seçiciyle cameraProvider.bindToLifecycle()'ı çağırın — CameraX oturumu otomatik olarak yeniden başlatacaktır.

Özet

  • CameraX, kullanım durumu mimarisi (Preview, ImageCapture, ImageAnalysis, VideoCapture) ile Android kamerası için Jetpack kütüphanesidir
  • Kullanım durumları tek bir oturumda birleştirilebilir: ML için Preview + ImageAnalysis veya fotoğraflar için Preview + ImageCapture
  • Yaşam döngüsü bağlama, ekran döndürme ve Activity durum değişikliklerinde kamera kaynaklarını otomatik olarak yönetir
  • CameraX Extensions, uyumlu cihazlarda portre modu, HDR ve gece çekimi ekler
  • Uyumluluk — cihaza özel kod olmadan API 21'den itibaren Android cihazların %99'u ile
  • ML Kit entegrasyonu, ImageAnalysis aracılığıyla her karenin gerçek zamanlı analizine olanak tanır
  • Standart görevler için CameraX en uygun seçimdir, tam kontrol için Camera2 kullanın

Anahtar teslim bir mobil uygulama geliştireceğiz

IT Sectr, 2017'den beri girişimler ve işletmeler için iOS ve Android uygulamaları oluşturmaktadır. Size danışmanlık yapacak ve en iyi çözümü önereceğiz.

Projeyi tartış

Ayrıca okuyun