CameraX: qué es, API CameraX y cómo funciona la cámara

Autor: IT Sectr Publicado: 2026-03-26 Tiempo de lectura: 8 min

CameraX es una biblioteca de Android Jetpack para trabajar con la cámara, que proporciona una API simple y consistente sobre la compleja Camera2. Abstrae las diferencias entre cientos de modelos de dispositivos Android y garantiza un comportamiento uniforme de la cámara en diferentes dispositivos. Según la Guía de CameraX para desarrolladores de Android (2026), la biblioteca se utiliza en más de 25 000 aplicaciones de Google Play y funciona en dispositivos con API Level 21 y superior.

Puntos clave

  • CameraX es una biblioteca Jetpack para la cámara de Android con API de casos de uso: Preview, ImageCapture e ImageAnalysis
  • Arquitectura de casos de uso libera al desarrollador de la gestión manual de sesiones y estados de la cámara
  • CameraX Extensions añaden modo retrato, HDR y fotografía nocturna en dispositivos compatibles
  • Seguridad de tipos — CameraX verifica la compatibilidad de casos de uso mediante ProcessCameraProvider
  • Compatibilidad con el 99% de dispositivos Android desde Android 5.0 (API 21)

¿Qué es CameraX?

CameraX es una biblioteca del conjunto Android Jetpack, lanzada por primera vez por Google en 2019 como reemplazo de la obsoleta Camera API y una alternativa simplificada a la compleja Camera2. La filosofía central de CameraX es “escribe una vez, funciona en todos los dispositivos”. La biblioteca maneja automáticamente las diferencias de hardware: ubicación de las cámaras, resoluciones compatibles, orientación del sensor y formatos disponibles — el desarrollador no necesita escribir código específico del dispositivo.

La arquitectura de CameraX se basa en casos de uso: Preview (mostrar la transmisión de la cámara en Viewfinder), ImageCapture (tomar fotos), ImageAnalysis (analizar el flujo de fotogramas para ML) y VideoCapture (grabar video). Cada caso de uso es un componente independiente que se puede combinar: ejecutar Preview para el visor e ImageAnalysis para procesamiento ML simultáneamente. Según Google (2026), CameraX es compatible con el 99% de los dispositivos Android con API 21+.

Funcionalidades principales

CameraX proporciona cambio automático entre cámaras frontal y trasera, soporte para rotación de pantalla sin recrear la sesión, manejo integrado del ciclo de vida mediante LifecycleOwner, vinculación de casos de uso a un único proceso Lifecycle, soporte para Camera2 Extensions para retrato, HDR y modo nocturno, y TestableCameraX para pruebas unitarias sin dispositivo real.

Casos de uso de CameraX

CameraX define cuatro casos de uso estándar, cada uno resolviendo una tarea específica de la cámara. Los casos de uso se pueden combinar: las combinaciones más populares son Preview + ImageCapture para una aplicación de cámara y Preview + ImageAnalysis para un escáner ML.

Caso de usoPropósitoClase
PreviewMostrar la transmisión de la cámara en tiempo realPreviewView
ImageCaptureTomar fotos con configuración de flash y resoluciónImageCapture
ImageAnalysisAnalizar cada fotograma para procesamiento MLImageAnalysis
VideoCaptureGrabar video con micrófono (desde 1.1.0-beta)VideoCapture

Preview

El caso de uso Preview muestra el flujo de video de la cámara en PreviewView — una Vista especial de la biblioteca CameraX. PreviewView se adapta automáticamente a la relación de aspecto de la cámara, soporta ScaleType (FillCenter, FitCenter) y rotación de pantalla sin recrear el caso de uso. El desarrollador solo necesita vincular Preview a un Lifecycle mediante ProcessCameraProvider.

ImageAnalysis

El caso de uso ImageAnalysis envía cada fotograma de la cámara a un manejador para su análisis: reconocimiento de texto, detección de rostros, escaneo de códigos QR. El analizador recibe fotogramas en formato YUV_420_888 — el espacio de color universal de Android. Modo de operación (BLOCKING o NON_BLOCKING) controla la cola de fotogramas: BLOCKING espera a que finalice el análisis anterior, NON_BLOCKING omite fotogramas durante retrasos.

ImageCapture

El caso de uso ImageCapture toma fotos de la cámara con configuración de flash, resolución y compresión. Se admiten formatos JPEG y RAW (en dispositivos compatibles). ImageCapture guarda la foto de forma asíncrona mediante OnImageCapturedCallback o directamente en un archivo mediante ImageCapture.OutputFileOptions.

VideoCapture — Grabación de video

El caso de uso VideoCapture se añadió en CameraX 1.1.0 (beta) y permite grabar video hasta 4K a 30 FPS. El caso de uso se sincroniza automáticamente con Preview: la imagen en el visor coincide con lo que se está grabando en el archivo. VideoCapture usa MediaCodec y MediaMuxer internamente, ocultando la complejidad de configurar el códec de video y el contenedor MP4.

CameraX vs Camera2

CameraX y Camera2 son dos enfoques para trabajar con la cámara en Android. Camera2 es una API de bajo nivel que brinda control total sobre el dispositivo. CameraX es una abstracción de alto nivel que automatiza escenarios típicos. La elección entre ellos depende de los requisitos del proyecto.

CaracterísticaCameraXCamera2
Nivel de APIAlto (caso de uso)Bajo (control total)
Código específico del dispositivoNo requeridoRequerido para cada dispositivo
Vinculación al ciclo de vidaAutomáticaManual
ExtensionesIntegradas (HDR, Portrait, Night)Requieren implementación OEM
Complejidad de implementación15–30 líneas de código100–300 líneas de código
Soporte de APIAPI 21+API 21+
FlexibilidadEscenarios estándarCualquier escenario

Use CameraX para tareas estándar: cámara en la aplicación, escáner QR, procesamiento de flujo ML. Use Camera2 cuando se requiera control manual de exposición, captura RAW con control total de parámetros, o trabajo con múltiples cámaras simultáneamente.

Ejemplos de código en Kotlin

Revisemos una configuración completa de CameraX en una aplicación Android usando los tres casos de uso principales: Preview, ImageCapture e ImageAnalysis.

Configuración de ProcessCameraProvider

El código vincula CameraX al ciclo de vida de la Activity mediante ProcessCameraProvider. Primero se solicita una instancia del proveedor, luego se crean los casos de uso y se realiza la vinculación.

kotlin
val cameraProviderFuture =
    ProcessCameraProvider.getInstance(this)

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

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

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

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

El código Kotlin obtiene ProcessCameraProvider mediante un future, crea los casos de uso Preview e ImageCapture, y los vincula al ciclo de vida de la Activity actual. CameraX maneja automáticamente la rotación de pantalla, el cambio de cámara y la liberación de recursos al cerrar la Activity.

ImageAnalysis para procesamiento ML

Añadamos un caso de uso ImageAnalysis para el procesamiento fotograma a fotograma del flujo de la cámara, por ejemplo para integrarlo con ML Kit.

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

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

    // Iniciando reconocimiento de texto de ML Kit
    recognizer.process(inputImage)
        .addOnSuccessListener { result ->
            // Procesando el resultado
            processTextResult(result)
        }
        .addOnCompleteListener {
            imageProxy.close()
        }
}

ImageAnalysis con estrategia KEEP_ONLY_LATEST procesa solo el último fotograma disponible, omitiendo los obsoletos si el analizador no se mantiene al día. Cada fotograma se convierte de YUV a Bitmap para ML Kit, después de lo cual se inicia el reconocimiento de texto. La llamada a imageProxy.close() es obligatoria — de lo contrario CameraX dejará de entregar nuevos fotogramas.

CameraX Extensions

CameraX Extensions es un módulo que añade modos de disparo avanzados: retrato (desenfoque de fondo), HDR (rango dinámico extendido), modo nocturno (disparo con poca luz), retoque automático (corrección de piel) y modo belleza. Las extensiones solo se activan en dispositivos donde el fabricante de la cámara ha proporcionado una implementación OEM.

Verificación y activación de extensiones

Antes de usar CameraX Extensions, debe verificar si la extensión está disponible en el dispositivo actual. Google recomienda verificarlo mediante ExtensionsManager.isExtensionAvailable.

kotlin
val extensionsManager =
    ExtensionsManager.getInstance(this)

if (extensionsManager.isExtensionAvailable(
    cameraProvider,
    CameraSelector.DEFAULT_BACK_CAMERA,
    ExtensionMode.BOKEH
)) {
    // Activando modo retrato
    cameraProvider.bindToLifecycle(
        this,
        CameraSelector.DEFAULT_BACK_CAMERA,
        preview,
        imageCapture
    )
}

El código verifica la compatibilidad con la extensión BOKEH (retrato) mediante ExtensionsManager y la activa si hay una implementación OEM disponible. CameraX cambia automáticamente la configuración de la cámara para el modo retrato. Si la extensión no está disponible, la aplicación continúa funcionando en modo estándar sin fallos.

CameraX Extensions resuelve uno de los principales problemas del desarrollo Android: la fragmentación de cámaras. En diferentes dispositivos, el modo retrato se implementa de manera diferente — algunos usan lentes duales, otros usan desenfoque por software. CameraX abstrae esta diferencia: el desarrollador activa el modo BOKEH, y la biblioteca misma determina cómo implementarlo en un dispositivo específico. Google mantiene una lista de socios OEM verificados: Samsung, Xiaomi, OPPO, vivo, Google Pixel.

Al trabajar con CameraX, es importante considerar las limitaciones en la cantidad de casos de uso simultáneos: en la mayoría de los dispositivos, se puede ejecutar un máximo de 3 casos de uso a la vez. Por ejemplo, Preview + ImageCapture + ImageAnalysis funciona en todos los dispositivos modernos, pero Preview + ImageCapture + VideoCapture puede no ser compatible en modelos económicos. CameraX proporciona el método ProcessCameraProvider.checkAvailability(), que verifica la compatibilidad de la combinación de casos de uso antes de la vinculación, ayudando a evitar fallos en tiempo de ejecución.

CameraX se integra con Jetpack Navigation mediante CameraXFragment o PreviewView compatible con Compose. Para Compose, se utiliza el elemento AndroidView, en el que se incrusta PreviewView. CameraX maneja correctamente la rotación de pantalla y los cambios de configuración sin perder el estado de la sesión de la cámara — solo especifique el LifecycleOwner, y la biblioteca recreará automáticamente las vinculaciones de casos de uso al rotar el dispositivo.

Para probar CameraX sin un dispositivo real, Google proporciona TestableCameraX — una biblioteca que emula el comportamiento de la cámara en pruebas unitarias. TestableCameraX permite simular fotogramas de la cámara, probar el funcionamiento de ImageAnalysis y la corrección de ImageCapture sin un dispositivo físico. Esto acelera significativamente el pipeline CI/CD para proyectos que trabajan con la cámara.

Preguntas frecuentes

¿Desde qué versiones de Android funciona CameraX?

Android 5.0 (API 21) y superior. CameraX cubre el 99% de los dispositivos Android activos. Las extensiones (Portrait, HDR) requieren API 23+ y soporte OEM para el modo específico.

¿Se puede usar CameraX con ML Kit?

, el caso de uso ImageAnalysis pasa cada fotograma al analizador. Los fotogramas se convierten de YUV_420_888 a InputImage para ML Kit. Este es el patrón estándar para crear un escáner ML.

¿En qué se diferencia CameraX de Camera2?

CameraX es una API de alto nivel con arquitectura de casos de uso, vinculación automática al ciclo de vida y manejo de diferencias específicas del dispositivo. Camera2 es una API de bajo nivel que proporciona control total de la cámara con una gran cantidad de código repetitivo.

¿CameraX admite grabación de video?

, el caso de uso VideoCapture se añadió en CameraX 1.1.0-beta. Graba video con micrófono y se sincroniza con Preview. Para escenarios más complejos, use Camera2 directamente.

¿Cómo cambiar entre la cámara frontal y trasera?

Mediante CameraSelector: DEFAULT_BACK_CAMERA o DEFAULT_FRONT_CAMERA. Para cambiar, llame a cameraProvider.bindToLifecycle() con un nuevo selector — CameraX reiniciará la sesión automáticamente.

Resumen

  • CameraX es una biblioteca Jetpack para la cámara de Android con arquitectura de casos de uso (Preview, ImageCapture, ImageAnalysis, VideoCapture)
  • Los casos de uso se pueden combinar en una sola sesión: Preview + ImageAnalysis para ML o Preview + ImageCapture para fotos
  • La vinculación al ciclo de vida gestiona automáticamente los recursos de la cámara durante la rotación de pantalla y cambios de estado de la Activity
  • CameraX Extensions añaden modo retrato, HDR y fotografía nocturna en dispositivos compatibles
  • Compatibilidad con el 99% de dispositivos Android desde API 21 sin código específico del dispositivo
  • Integración con ML Kit mediante ImageAnalysis permite analizar cada fotograma en tiempo real
  • Para tareas estándar CameraX es la opción óptima, para control total use Camera2

Desarrollaremos una aplicación móvil llave en mano

IT Sectr crea aplicaciones para iOS y Android para startups y empresas desde 2017. Le asesoraremos y le propondremos la mejor solución.

Discutir el proyecto

Lea también