CameraX: ano ito, CameraX API at kung paano gumagana ang camera

May-akda: IT Sectr Nai-publish: 2026-03-26 Oras ng pagbabasa: 8 min

CameraX — isang Android Jetpack library para sa pagtatrabaho sa camera, na nagbibigay ng simple at consistent na API sa ibabaw ng kumplikadong Camera2. Ito ay nag-aabstrak ng mga pagkakaiba sa pagitan ng daan-daang modelo ng Android device at ginagarantiyahan ang parehong pag-uugali ng camera sa iba't ibang aparato. Ayon sa Android Developer CameraX Guide (2026), ang library ay ginagamit sa 25,000+ Google Play app at gumagana sa mga device na may API Level 21 pataas.

Mga pangunahing punto

  • CameraX — Jetpack library para sa Android camera na may use case API: Preview, ImageCapture at ImageAnalysis
  • Arkitekturang Use case nagpapalaya sa developer mula sa manu-manong pamamahala ng session at mga estado ng camera
  • CameraX Extensions nagdaragdag ng portrait mode, HDR at night photography sa mga device na sumusuporta dito
  • Kaligtasan ng uri — sinusuri ng CameraX ang compatibility ng mga use case sa pamamagitan ng ProcessCameraProvider
  • Pagkakatugma sa 99% ng Android device simula sa Android 5.0 (API 21)

Ano ang CameraX?

CameraX — ay isang library mula sa Android Jetpack, unang inilabas ng Google noong 2019 bilang kapalit ng lumang Camera API at pinasimpleng alternatibo sa kumplikadong Camera2. Ang pangunahing pilosopiya ng CameraX — „isulat nang isang beses, gumagana sa lahat ng device". Awtomatikong pinangangasiwaan ng library ang mga pagkakaiba ng hardware: posisyon ng mga camera, suportadong resolution, oryentasyon ng sensor at mga available na format — hindi kailangang magsulat ng device-specific code ang developer.

Ang arkitektura ng CameraX ay binuo sa mga use case: Preview (pagpapakita ng imahe mula sa camera sa Viewfinder), ImageCapture (pagkuha ng litrato), ImageAnalysis (pagsusuri ng stream ng frame para sa ML) at VideoCapture (pag-record ng video). Ang bawat use case ay isang independiyenteng component na maaaring pagsamahin: sabay na patakbuhin ang Preview para sa viewfinder at ImageAnalysis para sa ML processing. Ayon sa Google (2026), suportado ang CameraX sa 99% ng Android device na may API 21+.

Mga pangunahing kakayahan

CameraX ay nagbibigay ng awtomatikong paglipat sa pagitan ng harap at likurang camera, suporta para sa pag-ikot ng screen nang hindi muling ginagawa ang session, built-in na lifecycle handling sa pamamagitan ng LifecycleOwner, pagbubuklod ng mga use case sa isang Lifecycle process, suporta para sa Camera2 Extensions para sa portrait, HDR at night mode, pati na rin ang TestableCameraX para sa unit testing nang walang tunay na device.

Mga use case ng CameraX

CameraX ay tumutukoy ng apat na standard use case, bawat isa ay lumulutas ng tiyak na gawain ng pagtatrabaho sa camera. Ang mga use case ay maaaring pagsamahin: ang pinakasikat na kombinasyon ay Preview + ImageCapture para sa camera at Preview + ImageAnalysis para sa ML scanner.

Use caseLayuninKlase
PreviewPagpapakita ng imahe ng camera sa real-timePreviewView
ImageCapturePagkuha ng litrato na may mga setting ng flash at resolutionImageCapture
ImageAnalysisPagsusuri ng bawat frame para sa ML processingImageAnalysis
VideoCapturePag-record ng video na may mikropono (mula 1.1.0-beta)VideoCapture

Preview

Preview use case ay nagpapakita ng video stream mula sa camera sa PreviewView — isang espesyal na View mula sa CameraX library. Awtomatikong inaayos ng PreviewView ang sarili sa aspect ratio ng camera, sumusuporta sa ScaleType (FillCenter, FitCenter) at pag-ikot ng screen nang hindi muling ginagawa ang use case. Kailangan lang ng developer na ibuklod ang Preview sa Lifecycle sa pamamagitan ng ProcessCameraProvider.

ImageAnalysis

ImageAnalysis use case ay nagpapadala ng bawat frame mula sa camera sa handler para sa pagsusuri: pagkilala ng teksto, pagtuklas ng mukha, pag-scan ng QR code. Ang analyzer ay tumatanggap ng mga frame sa YUV_420_888 format — ang universal color space ng Android. Mode ng trabaho (BLOCKING o NON_BLOCKING) ay namamahala ng queue ng frame: BLOCKING ay naghihintay ng pagkumpleto ng nakaraang pagsusuri, NON_BLOCKING ay lumalaktaw ng mga frame kung may pagkaantala.

ImageCapture

ImageCapture use case ay kumukuha ng mga litrato mula sa camera na may mga setting ng flash, resolution at compression. Sinusuportahan ang JPEG at RAW format (sa mga compatible na device). Ini-save ng ImageCapture ang litrato nang asynchronous sa pamamagitan ng OnImageCapturedCallback o direkta sa file sa pamamagitan ng ImageCapture.OutputFileOptions.

VideoCapture — pag-record ng video

VideoCapture use case ay idinagdag sa CameraX 1.1.0 (beta) at pinapayagan ang pag-record ng video na may resolution hanggang 4K sa 30 FPS. Awtomatikong nag-synchronize ang use case sa Preview: ang imahe sa viewfinder ay tumutugma sa nire-record sa file. Ang VideoCapture ay gumagamit ng MediaCodec at MediaMuxer sa loob, itinatago ang komplikasyon ng pag-configure ng video codec at MP4 container.

CameraX vs Camera2

CameraX at Camera2 — dalawang approach sa pagtatrabaho sa camera sa Android. Camera2 — low-level API, nagbibigay ng buong kontrol sa device. CameraX — high-level abstraction, nag-automate ng mga tipikal na scenario. Ang pagpili sa pagitan ng mga ito ay depende sa mga kinakailangan ng proyekto.

KatangianCameraXCamera2
Antas ng APIMataas (use case)Mababa (buong kontrol)
Code na partikular sa deviceHindi kinakailanganKinakailangan para sa bawat device
Pagbubuklod sa LifecycleAwtomatikoManu-mano
Mga ExtensionBuilt-in (HDR, Portrait, Night)Nangangailangan ng OEM implementation
Komplikasyon ng implementasyon15–30 linya ng code100–300 linya ng code
Suporta sa APIAPI 21+API 21+
FlexibilityStandard na scenarioAnumang scenario

Gamitin ang CameraX para sa standard na gawain: camera sa app, QR scanner, ML stream processing. Gamitin ang Camera2 kapag kinakailangan ang manu-manong kontrol ng exposure, RAW photography na may buong kontrol ng parameter, pagtatrabaho sa maraming camera nang sabay-sabay.

Mga halimbawa ng code sa Kotlin

Tingnan natin ang buong configuration ng CameraX sa Android app gamit ang lahat ng tatlong pangunahing use case: Preview, ImageCapture at ImageAnalysis.

Configuration ng ProcessCameraProvider

Ang code ay nagbubuklod ng CameraX sa Lifecycle ng Activity sa pamamagitan ng ProcessCameraProvider. Una, hinihiling ang instance ng provider, pagkatapos ay ginagawa ang mga use case at isinasagawa ang pagbubuklod.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

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

    // Paglikha ng Preview
    val preview = Preview.Builder()
        .build()
        .also {
            it.setSurfaceProvider(
                binding.viewFinder.surfaceProvider
            )
        }

    // Paglikha ng ImageCapture
    val imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
        .build()

    // Pagbubuklod sa Lifecycle
    cameraProvider.unbindAll()
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}, ContextCompact.getMainExecutor(this))

Ang Kotlin code ay kumukuha ng ProcessCameraProvider sa pamamagitan ng future, gumagawa ng Preview at ImageCapture use case, at ibinubuklod ang mga ito sa Lifecycle ng kasalukuyang Activity. Awtomatikong pinangangasiwaan ng CameraX ang pag-ikot ng screen, paglipat ng camera at pagpapalaya ng resources kapag isinara ang Activity.

ImageAnalysis para sa ML processing

Magdagdag tayo ng ImageAnalysis use case para sa frame-by-frame processing ng stream ng camera, halimbawa para sa integration sa ML Kit.

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

imageAnalysis.setAnalyzer(
    ContextCompact.getMainExecutor(this)
) { imageProxy ->
    // Conversion ng YUV sa Bitmap para sa ML Kit
    val bitmap = ImageUtils.yuvToBitmap(imageProxy)
    val inputImage = InputImage.fromBitmap(bitmap)

    // Pagpapatakbo ng ML Kit text recognition
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Pagproseso ng resulta
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

Ang ImageAnalysis na may estratehiyang KEEP_ONLY_LATEST ay nagpoproseso lamang ng huling available na frame, nilalaktawan ang mga luma kung hindi makasabay ang analyzer. Ang bawat frame ay kino-convert mula YUV patungong Bitmap para sa ML Kit, pagkatapos ay pinapatakbo ang pagkilala ng teksto. Ang pagtawag sa imageProxy.close() ay sapilitan — kung hindi, hihinto ang CameraX sa pagbibigay ng mga bagong frame.

CameraX Extensions

CameraX Extensions — modyul na nagdaragdag ng mga advanced na mode ng pagkuha: portrait (blur ng background), HDR (pinalawak na dynamic range), night mode (pagkuha sa mahinang ilaw), auto-retouch (pagwawasto ng balat) at mode na „magandang mukha" (beauty). Ang mga extension ay nag-a-activate lamang sa mga device kung saan ang manufacturer ng camera ay nagbigay ng OEM implementation.

Pagsusuri at pag-activate ng mga extension

Bago gamitin ang CameraX Extensions kailangan suriin kung available ang extension sa kasalukuyang device. Inirerekomenda ng Google ang pagsusuri sa pamamagitan ng ExtensionsManager.isExtensionAvailable.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Pag-activate ng portrait mode
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

Sinusuri ng code ang suporta para sa BOKEH (portrait) extension sa pamamagitan ng ExtensionsManager at ini-activate ito kung mayroong OEM implementation. Awtomatikong inililipat ng CameraX ang mga setting ng camera para sa portrait mode. Kung hindi available ang extension, patuloy na gumagana ang app sa standard mode nang walang pag-crash.

Ang CameraX Extensions ay lumulutas ng isa sa mga pangunahing problema ng Android development: fragmentation ng camera. Sa iba't ibang device, ang portrait mode ay implementado nang magkaiba — ang iba ay gumagamit ng dalawang lens, ang iba naman ay software blur. Inaabstrak ng CameraX ang pagkakaibang ito: ini-activate ng developer ang BOKEH mode, at ang library mismo ang tumutukoy kung paano ito i-implement sa partikular na device. Ang Google ay nagpapanatili ng listahan ng mga verified OEM partner: Samsung, Xiaomi, OPPO, vivo, Google Pixel.

Sa pagtatrabaho sa CameraX mahalagang isaalang-alang ang mga limitasyon sa bilang ng sabay-sabay na use case: sa karamihan ng device, maximum na 3 use case ang maaaring sabay na patakbuhin. Halimbawa, ang Preview + ImageCapture + ImageAnalysis ay gumagana sa lahat ng modernong device, ngunit ang Preview + ImageCapture + VideoCapture ay maaaring hindi suportado sa budget models. Ang CameraX ay nagbibigay ng method na ProcessCameraProvider.checkAvailability() na sumusuri sa compatibility ng kombinasyon ng use case bago ang pagbubuklod, na nagpapahintulot na maiwasan ang crash sa runtime.

Ang CameraX ay nag-i-integrate sa Jetpack Navigation sa pamamagitan ng CameraXFragment o Compose-compatible na PreviewView. Para sa Compose, ginagamit ang elementong AndroidView kung saan naka-embed ang PreviewView. Wasto ang pag-handle ng CameraX sa pag-ikot ng screen at pagbabago ng configuration nang hindi nawawala ang estado ng session ng camera — sapat na ang tukuyin ang LifecycleOwner, at awtomatikong muling lilikha ang library ng pagbubuklod ng use case kapag pinaikot ang device.

Para sa pag-test ng CameraX nang walang tunay na device, ang Google ay nagbibigay ng TestableCameraX — library na nag-e-emulate ng pag-uugali ng camera sa unit test. Ang TestableCameraX ay nagpapahintulot ng simulation ng mga frame mula sa camera, pagsusuri ng trabaho ng ImageAnalysis at kawastuhan ng ImageCapture processing nang walang pisikal na device. Ito ay makabuluhang nagpapabilis ng CI/CD pipeline para sa mga proyektong gumagamit ng camera.

Mga madalas itanong

Sa anong mga bersyon ng Android gumagana ang CameraX?

Android 5.0 (API 21) pataas. Sinasaklaw ng CameraX ang 99% ng aktibong Android device. Para sa mga extension (Portrait, HDR) kinakailangan ang API 23+ at OEM support ng partikular na mode.

Maaari bang gamitin ang CameraX sa ML Kit?

Oo, ang ImageAnalysis use case ay nagpapadala ng bawat frame sa analyzer. Ang mga frame ay kino-convert mula YUV_420_888 patungong InputImage para sa ML Kit. Ito ang standard pattern para sa paggawa ng ML scanner.

Ano ang pagkakaiba ng CameraX sa Camera2?

CameraX — high-level API na may use case architecture, awtomatikong Lifecycle binding at pag-handle ng device-specific na pagkakaiba. Camera2 — low-level na buong kontrol sa camera na may maraming boilerplate code.

Sinusuportahan ba ng CameraX ang pag-record ng video?

Oo, ang VideoCapture use case ay idinagdag sa CameraX 1.1.0-beta. Nagre-record ng video na may mikropono at nag-synchronize sa Preview. Para sa mas komplikadong scenario, gamitin ang Camera2 nang direkta.

Paano lumipat sa pagitan ng harap at likurang camera?

Sa pamamagitan ng CameraSelector: DEFAULT_BACK_CAMERA o DEFAULT_FRONT_CAMERA. Para lumipat, tawagan ang cameraProvider.bindToLifecycle() na may bagong selector — awtomatikong i-restart ng CameraX ang session.

Buod

  • CameraX — Jetpack library para sa Android camera na may use case architecture (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Use case pinagsama sa isang session: Preview + ImageAnalysis para sa ML o Preview + ImageCapture para sa mga litrato
  • Pagbubuklod sa Lifecycle awtomatikong namamahala ng mga resources ng camera sa pag-ikot ng screen at pagbabago ng estado ng Activity
  • CameraX Extensions nagdaragdag ng portrait mode, HDR at night photography sa compatible na device
  • Pagkakatugma sa 99% ng Android device mula API 21 nang walang device-specific code
  • Integration sa ML Kit sa pamamagitan ng ImageAnalysis ay nagpapahintulot ng pagsusuri ng bawat frame sa real-time
  • Para sa standard na gawain CameraX ang optimal na pagpili, para sa buong kontrol gamitin ang Camera2

Gagawa kami ng mobile application na turnkey

Gumagawa ang IT Sectr ng mga iOS at Android application para sa mga startup at negosyo mula noong 2017. Magpapayo kami sa iyo at magmumungkahi ng pinakamahusay na solusyon.

Pag-usapan ang proyekto

Basahin din