CameraX: nó là gì, API CameraX và cách camera hoạt động

Tác giả: IT Sectr Đã đăng: 2026-03-26 Thời gian đọc: 8 phút

CameraX là thư viện Android Jetpack để làm việc với camera, cung cấp API đơn giản và nhất quán trên nền Camera2 phức tạp. Nó trừu tượng hóa sự khác biệt giữa hàng trăm mẫu thiết bị Android và đảm bảo hành vi camera nhất quán trên các phần cứng khác nhau. Theo Hướng dẫn Android Developer CameraX (2026), thư viện được sử dụng trong hơn 25.000 ứng dụng Google Play và hoạt động trên các thiết bị có API Level 21 trở lên.

Những điểm chính

  • CameraX là thư viện Jetpack cho camera Android với API use case: Preview, ImageCapture và ImageAnalysis
  • Kiến trúc use case giải phóng nhà phát triển khỏi việc quản lý phiên thủ công và trạng thái camera
  • CameraX Extensions thêm chế độ chân dung, HDR và chụp đêm trên các thiết bị hỗ trợ
  • An toàn kiểu — CameraX kiểm tra tính tương thích của use case qua ProcessCameraProvider
  • Tương thích với 99% thiết bị Android từ Android 5.0 (API 21)

CameraX là gì?

CameraX là một thư viện trong bộ Android Jetpack, được Google phát hành lần đầu vào năm 2019 như một sự thay thế cho Camera API cũ và là một giải pháp thay thế đơn giản hóa cho Camera2 phức tạp. Triết lý cốt lõi của CameraX là “viết một lần, chạy trên mọi thiết bị”. Thư viện tự động xử lý sự khác biệt phần cứng: vị trí camera, độ phân giải hỗ trợ, hướng cảm biến và định dạng khả dụng — nhà phát triển không cần viết mã dành riêng cho thiết bị.

Kiến trúc CameraX được xây dựng trên các use case: Preview (hiển thị luồng camera trong Viewfinder), ImageCapture (chụp ảnh), ImageAnalysis (phân tích luồng khung hình cho ML) và VideoCapture (ghi video). Mỗi use case là một thành phần độc lập có thể kết hợp: chạy Preview cho kính ngắm và ImageAnalysis cho xử lý ML đồng thời. Theo Google (2026), CameraX được hỗ trợ trên 99% thiết bị Android với API 21+.

Tính năng chính

CameraX cung cấp khả năng chuyển đổi tự động giữa camera trước và sau, hỗ trợ xoay màn hình mà không cần tạo lại phiên, quản lý vòng đời tích hợp qua LifecycleOwner, liên kết use case với một quy trình Lifecycle duy nhất, hỗ trợ Camera2 Extensions cho chân dung, HDR và chế độ ban đêm, và TestableCameraX cho kiểm thử đơn vị mà không cần thiết bị thật.

Use case CameraX

CameraX định nghĩa bốn use case tiêu chuẩn, mỗi use case giải quyết một tác vụ camera cụ thể. Các use case có thể kết hợp: sự kết hợp phổ biến nhất là Preview + ImageCapture cho ứng dụng camera và Preview + ImageAnalysis cho máy quét ML.

Use CaseMục đíchLớp
PreviewHiển thị luồng camera thời gian thựcPreviewView
ImageCaptureChụp ảnh với cài đặt flash và độ phân giảiImageCapture
ImageAnalysisPhân tích từng khung hình cho xử lý MLImageAnalysis
VideoCaptureGhi video với mic (từ 1.1.0-beta)VideoCapture

Preview

Use case Preview hiển thị luồng video camera trong PreviewView — một View đặc biệt từ thư viện CameraX. PreviewView tự động thích ứng với tỷ lệ khung hình của camera, hỗ trợ ScaleType (FillCenter, FitCenter) và xoay màn hình mà không cần tạo lại use case. Nhà phát triển chỉ cần liên kết Preview với Lifecycle qua ProcessCameraProvider.

ImageAnalysis

Use case ImageAnalysis gửi từng khung hình camera đến một trình xử lý để phân tích: nhận dạng văn bản, phát hiện khuôn mặt, quét mã QR. Trình phân tích nhận khung hình ở định dạng YUV_420_888 — không gian màu phổ quát của Android. Chế độ hoạt động (BLOCKING hoặc NON_BLOCKING) kiểm soát hàng đợi khung hình: BLOCKING chờ phân tích trước đó hoàn thành, NON_BLOCKING bỏ qua khung hình khi bị trễ.

ImageCapture

Use case ImageCapture chụp ảnh từ camera với cài đặt flash, độ phân giải và nén. Các định dạng JPEG và RAW được hỗ trợ (trên thiết bị tương thích). ImageCapture lưu ảnh chụp không đồng bộ qua OnImageCapturedCallback hoặc trực tiếp vào tệp qua ImageCapture.OutputFileOptions.

VideoCapture — Ghi video

Use case VideoCapture được thêm vào CameraX 1.1.0 (beta) và cho phép ghi video lên đến 4K ở 30 FPS. Use case tự động đồng bộ với Preview: hình ảnh trong kính ngắm khớp với những gì đang được ghi vào tệp. VideoCapture sử dụng MediaCodec và MediaMuxer bên trong, ẩn đi sự phức tạp của việc cấu hình codec video và container MP4.

CameraX vs Camera2

CameraX và Camera2 là hai cách tiếp cận để làm việc với camera trong Android. Camera2 là API cấp thấp cung cấp toàn quyền kiểm soát thiết bị. CameraX là một lớp trừu tượng cấp cao tự động hóa các kịch bản điển hình. Sự lựa chọn giữa chúng phụ thuộc vào yêu cầu của dự án.

Đặc điểmCameraXCamera2
Cấp độ APICao (use case)Thấp (kiểm soát hoàn toàn)
Mã dành riêng cho thiết bịKhông cầnCần cho mỗi thiết bị
Liên kết LifecycleTự độngThủ công
Tiện ích mở rộngTích hợp sẵn (HDR, Portrait, Night)Cần triển khai OEM
Độ phức tạp triển khai15–30 dòng mã100–300 dòng mã
Hỗ trợ APIAPI 21+API 21+
Linh hoạtKịch bản tiêu chuẩnMọi kịch bản

Sử dụng CameraX cho các tác vụ tiêu chuẩn: camera trong ứng dụng, máy quét QR, xử lý luồng ML. Sử dụng Camera2 khi cần kiểm soát phơi sáng thủ công, chụp RAW với kiểm soát thông số hoàn toàn, hoặc làm việc với nhiều camera đồng thời.

Ví dụ mã Kotlin

Hãy xem xét thiết lập hoàn chỉnh CameraX trong ứng dụng Android sử dụng ba use case chính: Preview, ImageCapture và ImageAnalysis.

Thiết lập ProcessCameraProvider

Mã liên kết CameraX với vòng đời Activity qua ProcessCameraProvider. Đầu tiên, một phiên bản của nhà cung cấp được yêu cầu, sau đó các use case được tạo và liên kết được thực hiện.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

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

    // Tạo Preview
    val preview = Preview.Builder()
        .build()
        .also {
            it.setSurfaceProvider(
                binding.viewFinder.surfaceProvider
            )
        }

    // Tạo ImageCapture
    val imageCapture = ImageCapture.Builder()
        .setCaptureMode(ImageCapture.CAPTURE_MODE_MINIMIZE_LATENCY)
        .build()

    // Liên kết với Lifecycle
    cameraProvider.unbindAll()
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}, ContextCompact.getMainExecutor(this))

Mã Kotlin nhận ProcessCameraProvider qua một future, tạo các use case Preview và ImageCapture, và liên kết chúng với vòng đời Activity hiện tại. CameraX tự động xử lý xoay màn hình, chuyển đổi camera và giải phóng tài nguyên khi đóng Activity.

ImageAnalysis cho xử lý ML

Hãy thêm use case ImageAnalysis để xử lý từng khung hình của luồng camera, ví dụ để tích hợp với ML Kit.

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

imageAnalysis.setAnalyzer(
    ContextCompact.getMainExecutor(this)
) { imageProxy ->
    // Chuyển đổi YUV sang Bitmap cho ML Kit
    val bitmap = ImageUtils.yuvToBitmap(imageProxy)
    val inputImage = InputImage.fromBitmap(bitmap)

    // Bắt đầu nhận dạng văn bản ML Kit
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Xử lý kết quả
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

ImageAnalysis với chiến lược KEEP_ONLY_LATEST chỉ xử lý khung hình khả dụng mới nhất, bỏ qua các khung hình cũ nếu trình phân tích không theo kịp. Mỗi khung hình được chuyển đổi từ YUV sang Bitmap cho ML Kit, sau đó nhận dạng văn bản được khởi chạy. Gọi imageProxy.close() là bắt buộc — nếu không CameraX sẽ ngừng cung cấp khung hình mới.

CameraX Extensions

CameraX Extensions là một mô-đun thêm các chế độ chụp nâng cao: chân dung (làm mờ hậu cảnh), HDR (dải động mở rộng), chế độ ban đêm (chụp thiếu sáng), tự động chỉnh sửa (làm đẹp da) và chế độ làm đẹp. Các tiện ích mở rộng chỉ được kích hoạt trên các thiết bị mà nhà sản xuất camera đã cung cấp triển khai OEM.

Kiểm tra và bật tiện ích mở rộng

Trước khi sử dụng CameraX Extensions, bạn phải kiểm tra xem tiện ích mở rộng có khả dụng trên thiết bị hiện tại không. Google khuyên bạn nên kiểm tra qua ExtensionsManager.isExtensionAvailable.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Bật chế độ chân dung
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

Mã kiểm tra hỗ trợ cho tiện ích mở rộng BOKEH (chân dung) qua ExtensionsManager và bật nó nếu có triển khai OEM. CameraX tự động chuyển đổi cài đặt camera cho chế độ chân dung. Nếu tiện ích mở rộng không khả dụng, ứng dụng tiếp tục hoạt động ở chế độ tiêu chuẩn mà không bị treo.

CameraX Extensions giải quyết một trong những vấn đề chính của phát triển Android: phân mảnh camera. Trên các thiết bị khác nhau, chế độ chân dung được triển khai khác nhau — một số sử dụng ống kính kép, số khác sử dụng làm mờ bằng phần mềm. CameraX trừu tượng hóa sự khác biệt này: nhà phát triển bật chế độ BOKEH, và thư viện tự xác định cách triển khai trên thiết bị cụ thể. Google duy trì danh sách các đối tác OEM đã được xác minh: Samsung, Xiaomi, OPPO, vivo, Google Pixel.

Khi làm việc với CameraX, điều quan trọng là xem xét các giới hạn về số lượng use case đồng thời: trên hầu hết các thiết bị, tối đa 3 use case có thể chạy cùng lúc. Ví dụ, Preview + ImageCapture + ImageAnalysis hoạt động trên tất cả các thiết bị hiện đại, nhưng Preview + ImageCapture + VideoCapture có thể không được hỗ trợ trên các mẫu giá rẻ. CameraX cung cấp phương thức ProcessCameraProvider.checkAvailability() để kiểm tra tính tương thích của tổ hợp use case trước khi liên kết, giúp tránh treo khi chạy.

CameraX tích hợp với Jetpack Navigation qua CameraXFragment hoặc PreviewView tương thích Compose. Đối với Compose, phần tử AndroidView được sử dụng, trong đó PreviewView được nhúng. CameraX xử lý chính xác xoay màn hình và thay đổi cấu hình mà không mất trạng thái phiên camera — chỉ cần chỉ định LifecycleOwner, thư viện sẽ tự động tạo lại liên kết use case khi thiết bị xoay.

Để kiểm tra CameraX mà không cần thiết bị thật, Google cung cấp TestableCameraX — một thư viện mô phỏng hành vi camera trong kiểm thử đơn vị. TestableCameraX cho phép mô phỏng khung hình camera, kiểm tra hoạt động ImageAnalysis và tính chính xác của ImageCapture mà không cần thiết bị vật lý. Điều này tăng tốc đáng kể đường ống CI/CD cho các dự án làm việc với camera.

Câu hỏi thường gặp

CameraX hoạt động từ phiên bản Android nào?

Android 5.0 (API 21) trở lên. CameraX bao phủ 99% thiết bị Android đang hoạt động. Các tiện ích mở rộng (Portrait, HDR) yêu cầu API 23+ và hỗ trợ OEM cho chế độ cụ thể.

Có thể sử dụng CameraX với ML Kit không?

, use case ImageAnalysis chuyển từng khung hình đến trình phân tích. Các khung hình được chuyển đổi từ YUV_420_888 sang InputImage cho ML Kit. Đây là mẫu tiêu chuẩn để tạo máy quét ML.

CameraX khác Camera2 như thế nào?

CameraX là API cấp cao với kiến trúc use case, liên kết Lifecycle tự động và xử lý khác biệt dành riêng cho thiết bị. Camera2 là API cấp thấp cung cấp toàn quyền kiểm soát camera với lượng lớn mã boilerplate.

CameraX có hỗ trợ ghi video không?

, use case VideoCapture được thêm vào CameraX 1.1.0-beta. Nó ghi video với mic và đồng bộ với Preview. Đối với các kịch bản phức tạp hơn, hãy sử dụng Camera2 trực tiếp.

Làm thế nào để chuyển đổi giữa camera trước và sau?

Qua CameraSelector: DEFAULT_BACK_CAMERA hoặc DEFAULT_FRONT_CAMERA. Để chuyển đổi, gọi cameraProvider.bindToLifecycle() với bộ chọn mới — CameraX sẽ tự động khởi động lại phiên.

Tổng kết

  • CameraX là thư viện Jetpack cho camera Android với kiến trúc use case (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Các use case có thể kết hợp trong một phiên: Preview + ImageAnalysis cho ML hoặc Preview + ImageCapture cho ảnh
  • Liên kết Lifecycle tự động quản lý tài nguyên camera khi xoay màn hình và thay đổi trạng thái Activity
  • CameraX Extensions thêm chế độ chân dung, HDR và chụp đêm trên thiết bị tương thích
  • Tương thích với 99% thiết bị Android từ API 21 mà không cần mã dành riêng cho thiết bị
  • Tích hợp ML Kit qua ImageAnalysis cho phép phân tích từng khung hình theo thời gian thực
  • Cho tác vụ tiêu chuẩn CameraX là lựa chọn tối ưu, để kiểm soát hoàn toàn hãy dùng Camera2

Chúng tôi sẽ phát triển ứng dụng di động chìa khóa trao tay

IT Sectr tạo các ứng dụng iOS và Android cho các công ty khởi nghiệp và doanh nghiệp từ năm 2017. Chúng tôi sẽ tư vấn và đề xuất giải pháp tốt nhất cho bạn.

Thảo luận dự án

Đọc thêm