CameraX: bu nədir, CameraX API və kamera necə işləyir

Müəllif: IT Sectr Dərc olunub: 2026-03-26 Oxuma vaxtı: 8 dəq

CameraX — mürəkkəb Camera2 üzərində sadə və ardıcıl API təmin edən Android Jetpack kamera kitabxanasıdır. Yüzlərlə Android cihaz modeli arasındakı fərqləri abstraksiya edir və müxtəlif cihazlarda kameranın eyni davranışını təmin edir. Android Developer CameraX Guide (2026) məlumatına görə, kitabxana Google Play-də 25 000+ tətbiqdə istifadə olunur və API Level 21 və yuxarı olan cihazlarda işləyir.

Əsas məqamlar

  • CameraX — use case API ilə Android kamerası üçün Jetpack kitabxanası: Preview, ImageCapture və ImageAnalysis
  • Use case arxitekturası tərtibatçını əl ilə sessiya və kamera vəziyyətlərini idarə etməkdən azad edir
  • CameraX Extensions dəstəklənən cihazlarda portret rejimi, HDR və gecə çəkilişi əlavə edir
  • Tip təhlükəsizliyi — CameraX uyğunluğu ProcessCameraProvider vasitəsilə yoxlayır
  • Uyğunluq Android 5.0-dan (API 21) başlayaraq 99% Android cihazları ilə

CameraX nədir?

CameraX — Android Jetpack tərkibinə daxil olan, ilk dəfə Google tərəfindən 2019-cu ildə köhnəlmiş Camera API-ni əvəz etmək və mürəkkəb Camera2-yə sadələşdirilmiş alternativ olaraq buraxılmış kitabxanadır. CameraX-in əsas fəlsəfəsi — «bir dəfə yaz, bütün cihazlarda işləsin». Kitabxana avtomatik olaraq aparat fərqlərini idarə edir: kameraların yerləşməsi, dəstəklənən rezolyusiyalar, sensor oriyentasiyası və mövcud formatlar — tərtibatçı cihaz-spesifik kod yazmalı deyil.

CameraX arxitekturası use case-lərə əsaslanır: Preview (kameradan təsvirin Viewfinder-də göstərilməsi), ImageCapture (şəkil çəkmə), ImageAnalysis (ML üçün kadr axınının analizi) və VideoCapture (video yazma). Hər bir use case müstəqil komponentdir və birləşdirilə bilər: eyni anda Preview vizor üçün və ImageAnalysis ML emalı üçün işə salına bilər. Google (2026) məlumatına görə, CameraX API 21+ olan 99% Android cihazında dəstəklənir.

Əsas imkanlar

CameraX ön və arxa kameralar arasında avtomatik keçid, sessiyanı yenidən yaratmadan ekranın döndərilməsi dəstəyi, LifecycleOwner vasitəsilə daxili həyat dövrü idarəsi, use case-lərin bir Lifecycle prosesinə bağlanması, portret, HDR və gecə rejimi üçün Camera2 Extensions dəstəyi, həmçinin real cihaz olmadan unit-test üçün TestableCameraX təmin edir.

CameraX use case-ləri

CameraX dörd standart use case müəyyən edir, hər biri kamera ilə işin konkret tapşırığını həll edir. Use case-lər birləşdirilə bilər: ən populyar birləşmələr kamera üçün Preview + ImageCapture və ML skaner üçün Preview + ImageAnalysis-dir.

Use caseTəyinatSinif
PreviewKameradan real vaxtda təsvirin göstərilməsiPreviewView
ImageCaptureFlash və rezolyusiya parametrləri ilə şəkil çəkməImageCapture
ImageAnalysisML emalı üçün hər kadrın analiziImageAnalysis
VideoCaptureMikrofonla video yazma (1.1.0-beta-dan)VideoCapture

Preview

Preview use case kameradan video axınını PreviewView-də göstərir — CameraX kitabxanasından xüsusi View. PreviewView avtomatik olaraq kamera nisbətinə uyğunlaşır, ScaleType (FillCenter, FitCenter) dəstəkləyir və use case-i yenidən yaratmadan ekranın döndərilməsini idarə edir. Tərtibatçı yalnız Preview-i ProcessCameraProvider vasitəsilə Lifecycle-ə bağlamalıdır.

ImageAnalysis

ImageAnalysis use case kameradan hər kadrı analiz üçün emalçıya ötürür: mətn tanıma, üz aşkarlama, QR kod skan etmə. Analizator kadrları YUV_420_888 formatında alır — Android-in universal rəng məkanı. İş rejimi (BLOCKING və ya NON_BLOCKING) kadr növbəsini idarə edir: BLOCKING əvvəlki analizin bitməsini gözləyir, NON_BLOCKING gecikmə zamanı kadrları buraxır.

ImageCapture

ImageCapture use case flash, rezolyusiya və sıxılma parametrləri ilə kameradan şəkillər çəkir. JPEG və RAW formatları dəstəklənir (uyğun cihazlarda). ImageCapture şəkli asinxron olaraq OnImageCapturedCallback vasitəsilə və ya birbaşa fayla ImageCapture.OutputFileOptions ilə yadda saxlayır.

VideoCapture — video yazma

VideoCapture use case CameraX 1.1.0 (beta) əlavə edilmişdir və 30 FPS-də 4K-a qədər rezolyusiyada video yazmağa imkan verir. Use case avtomatik olaraq Preview ilə sinxronlaşır: vizordakı təsvir fayla yazılanla uyğun gəlir. VideoCapture daxildə MediaCodec və MediaMuxer istifadə edir, video kodek və MP4 konteyner konfiqurasiyasının mürəkkəbliyini gizlədir.

CameraX vs Camera2

CameraX və Camera2 — Android-də kamera ilə işin iki yanaşması. Camera2 — aşağı səviyyəli API, cihaz üzərində tam nəzarət verir. CameraX — yüksək səviyyəli abstraksiya, tipik ssenariləri avtomatlaşdırır. Onlar arasında seçim layihənin tələblərindən asılıdır.

XüsusiyyətCameraXCamera2
API səviyyəsiYüksək (use case)Aşağı (tam nəzarət)
Cihaz-spesifik kodTələb olunmurHər cihaz üçün tələb olunur
Lifecycle-ə bağlamaAvtomatikƏl ilə
GenişlənmələrDaxili (HDR, Portrait, Night)OEM tətbiqi tələb edir
Tətbiq mürəkkəbliyi15–30 sətir kod100–300 sətir kod
API dəstəyiAPI 21+API 21+
ÇeviklikStandart ssenarilərİstənilən ssenarilər

CameraX standart tapşırıqlar üçün istifadə edin: tətbiqdə kamera, QR skaner, ML axını emalı. Camera2 əl ilə ekspozisiya idarəsi, parametrlərə tam nəzarət ilə RAW çəkiliş, eyni anda bir neçə kamera ilə iş tələb olunduqda istifadə edin.

Kotlin-də kod nümunələri

CameraX-in Android tətbiqində hər üç əsas use case ilə tam konfiqurasiyasını nəzərdən keçirək: Preview, ImageCapture və ImageAnalysis.

ProcessCameraProvider konfiqurasiyası

Kod CameraX-i ProcessCameraProvider vasitəsilə Activity Lifecycle-ə bağlayır. Əvvəlcə provider nümunəsi tələb olunur, sonra use case-lər yaradılır və bağlama yerinə yetirilir.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

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

    // Preview yaradılması
    val preview = Preview.Builder()
        .build()
        .also {
            it.setSurfaceProvider(
                binding.viewFinder.surfaceProvider
            )
        }

    // ImageCapture yaradılması
    val imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
        .build()

    // Lifecycle-ə bağlama
    cameraProvider.unbindAll()
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}, ContextCompact.getMainExecutor(this))

Kotlin kodu ProcessCameraProvider-i future vasitəsilə alır, Preview və ImageCapture use case-lərini yaradır və onları cari Activity-nin Lifecycle-ə bağlayır. CameraX avtomatik olaraq ekran döndərilməsini, kamera keçidlərini və Activity bağlandıqda resursların sərbəst buraxılmasını idarə edir.

ML emalı üçün ImageAnalysis

Kameradan kadr-kadr emalı üçün ImageAnalysis use case əlavə edək, məsələn ML Kit ilə inteqrasiya üçün.

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

imageAnalysis.setAnalyzer(
    ContextCompact.getMainExecutor(this)
) { imageProxy ->
    // ML Kit üçün YUV-nin Bitmap-ə çevrilməsi
    val bitmap = ImageUtils.yuvToBitmap(imageProxy)
    val inputImage = InputImage.fromBitmap(bitmap)

    // ML Kit mətn tanımanın işə salınması
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Nəticənin emalı
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

KEEP_ONLY_LATEST strategiyası ilə ImageAnalysis yalnız son mövcud kadrı emal edir, analizator çatmadıqda köhnələri buraxır. Hər kadr ML Kit üçün YUV-dan Bitmap-ə çevrilir, sonra mətn tanıma işə salınır. imageProxy.close() çağırışı məcburidir — əks halda CameraX yeni kadrlar təqdim etməyi dayandırar.

CameraX Extensions

CameraX Extensions — qabaqcıl çəkiliş rejimləri əlavə edən modul: portret (fon bulanıqlığı), HDR (geniş dinamik diapazon), gecə rejimi (az işıqda çəkiliş), avtoretuş (dəri korreksiyası) və «gözəl üz» (beauty) rejimi. Genişlənmələr yalnız kamera istehsalçısının OEM tətbiqi təmin etdiyi cihazlarda aktivləşir.

Genişlənmələrin yoxlanması və aktivləşdirilməsi

CameraX Extensions istifadə etməzdən əvvəl genişlənmənin cari cihazda mövcud olub-olmadığını yoxlamaq lazımdır. Google ExtensionsManager.isExtensionAvailable vasitəsilə yoxlamağı tövsiyə edir.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Portret rejiminin aktivləşdirilməsi
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

Kod ExtensionsManager vasitəsilə BOKEH (portret) genişlənməsinin dəstəyini yoxlayır və OEM tətbiqi mövcud olduqda onu aktivləşdirir. CameraX avtomatik olaraq kamera parametrlərini portret rejiminə keçirir. Genişlənmə mövcud deyilsə, tətbiq standart rejimdə işləməyə davam edir.

CameraX Extensions Android inkişafının əsas problemlərindən birini həll edir: kameraların fraqmentasiyası. Müxtəlif cihazlarda portret rejimi fərqli həyata keçirilir — bəziləri iki lens, digərləri proqram bulanıqlığı istifadə edir. CameraX bu fərqi abstraksiya edir: tərtibatçı BOKEH rejimini aktivləşdirir, kitabxana isə onu konkret cihazda necə tətbiq edəcəyini özü müəyyən edir. Google təsdiqlənmiş OEM tərəfdaşlarının siyahısını saxlayır: Samsung, Xiaomi, OPPO, vivo, Google Pixel.

CameraX ilə işləyərkən eyni vaxtda use case-lərin sayı ilə bağlı məhdudiyyətləri nəzərə almaq vacibdir: əksər cihazlarda maksimum 3 use case eyni anda işə salına bilər. Məsələn, Preview + ImageCapture + ImageAnalysis bütün müasir cihazlarda işləyir, lakin Preview + ImageCapture + VideoCapture büdcə modellərində dəstəklənməyə bilər. CameraX bağlamadan əvvəl use case kombinasiyasının uyğunluğunu yoxlayan ProcessCameraProvider.checkAvailability() metodunu təqdim edir ki, bu da runtime-da crash-lərin qarşısını almağa imkan verir.

CameraX Jetpack Navigation ilə CameraXFragment və ya Compose-uyğun PreviewView vasitəsilə inteqrasiya olunur. Compose üçün PreviewView-in yerləşdirildiyi AndroidView elementi istifadə olunur. CameraX ekran döndərilməsini və konfiqurasiya dəyişikliyini kamera sessiyasının vəziyyətini itirmədən düzgün idarə edir — sadəcə LifecycleOwner göstərmək kifayətdir və kitabxana cihaz döndərildikdə use case bağlamalarını avtomatik yenidən yaradır.

CameraX-i real cihaz olmadan sınamaq üçün Google TestableCameraX təqdim edir — unit-testlərdə kamera davranışını emulə edən kitabxana. TestableCameraX kamera kadrlarını simulyasiya etməyə, ImageAnalysis işini və ImageCapture emalının düzgünlüyünü fiziki cihaz olmadan yoxlamağa imkan verir. Bu, kamera ilə işləyən layihələr üçün CI/CD pipeline-nı əhəmiyyətli dərəcədə sürətləndirir.

Tez-tez verilən suallar

CameraX Android-in hansı versiyalarından işləyir?

Android 5.0 (API 21) və yuxarı. CameraX aktiv Android cihazlarının 99%-ni əhatə edir. Genişlənmələr (Portrait, HDR) üçün API 23+ və konkret rejimin OEM dəstəyi tələb olunur.

CameraX ML Kit ilə istifadə edilə bilərmi?

Bəli, ImageAnalysis use case hər kadrı analizatora ötürür. Kadrlar ML Kit üçün YUV_420_888-dən InputImage-ə çevrilir. Bu ML skaner yaratmaq üçün standart nümunədir.

CameraX Camera2-dən nə ilə fərqlənir?

CameraX — use case arxitekturası, avtomatik Lifecycle bağlaması və cihaz-spesifik fərqlərin idarəsi ilə yüksək səviyyəli API. Camera2 — çoxlu boilerplate kod ilə kamera üzərində aşağı səviyyəli tam nəzarət.

CameraX video yazmanı dəstəkləyir?

Bəli, VideoCapture use case CameraX 1.1.0-beta-da əlavə edilmişdir. Mikrofonla video yazır və Preview ilə sinxronlaşır. Daha mürəkkəb ssenarilər üçün birbaşa Camera2 istifadə edin.

Ön və arxa kamera arasında necə keçid etmək olar?

CameraSelector vasitəsilə: DEFAULT_BACK_CAMERA və ya DEFAULT_FRONT_CAMERA. Keçid üçün cameraProvider.bindToLifecycle() yeni seçici ilə çağırın — CameraX avtomatik olaraq sessiyanı yenidən başladacaq.

Nəticə

  • CameraX — use case arxitekturası ilə Android kamerası üçün Jetpack kitabxanası (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Use case-lər bir sessiyada birləşdirilir: ML üçün Preview + ImageAnalysis və ya foto üçün Preview + ImageCapture
  • Lifecycle-ə bağlama ekran döndərilməsi və Activity vəziyyətlərinin dəyişməsi zamanı kamera resurslarını avtomatik idarə edir
  • CameraX Extensions uyğun cihazlarda portret rejimi, HDR və gecə çəkilişi əlavə edir
  • Uyğunluq API 21-dən başlayaraq cihaz-spesifik kod olmadan 99% Android cihazları ilə
  • ML Kit ilə inteqrasiya ImageAnalysis vasitəsilə hər kadrı real vaxtda analiz etməyə imkan verir
  • Standart tapşırıqlar üçün CameraX optimal seçimdir, tam nəzarət üçün Camera2 istifadə edin

Açar təslim mobil tətbiq hazırlayacağıq

IT Sectr 2017-ci ildən startaplar və bizneslər üçün iOS və Android tətbiqləri yaradır. Sizə məsləhət verəcəyik və ən yaxşı həlli təklif edəcəyik.

Layihəni müzakirə et

Həm də oxuyun