Reduce la latencia con el retraso sin obturador
Organiza tus páginas con colecciones
Guarda y categoriza el contenido según tus preferencias.
A partir de CameraX 1.2, el retraso sin obturador está disponible como modo de captura.
Habilita el retraso sin obturador para reducir significativamente la latencia en comparación con el modo de captura predeterminado, de modo que nunca te pierdas la foto.
Cómo habilitar el retraso sin obturador
Para habilitar el retraso sin obturador, pasa CAPTURE_MODE_ZERO_SHOT_LAG
a ImageCapture.Builder.setCaptureMode()
. Si no funciona, setCaptureMode()
regresa a CAPTURE_MODE_MINIMIZE_LATENCY
.
Para obtener más información sobre los modos de captura, consulta la Guía de captura de imágenes.
Cómo funciona
El retraso sin obturador utiliza un búfer de anillo que almacena los tres marcos de captura más recientes. Cuando el usuario presiona el botón de captura, CameraX invoca a takePicture()
, y el búfer de anillo recupera el fotograma capturado con la marca de tiempo más cercana a la de presionar el botón. CameraX luego reprocesa la sesión de captura para generar una imagen a partir de ese fotograma, que se guarda en el disco en formato JPEG.
Requisitos previos
Antes de habilitar el retraso sin obturador, usa isZslSupported()
para determinar si el dispositivo cumple con los siguientes requisitos:
En el caso de los dispositivos que no cumplen con los requisitos mínimos, CameraX recurre a CAPTURE_MODE_MINIMIZE_LATENCY
.
El retraso sin obturador solo está disponible para la captura de imágenes. No puedes habilitarlo para la captura de video ni con las extensiones de cámara.
Por último, debido a que el uso de flash da como resultado una mayor latencia, el retraso sin obturador no funciona cuando el flash está ACTIVADO ni en modo AUTOMÁTICO. Para obtener más información sobre cómo configurar el modo de flash, consulta setFlashMode()
.
El contenido y las muestras de código que aparecen en esta página están sujetas a las licencias que se describen en la Licencia de Contenido. Java y OpenJDK son marcas registradas de Oracle o sus afiliados.
Última actualización: 2025-07-27 (UTC)
[[["Fácil de comprender","easyToUnderstand","thumb-up"],["Resolvió mi problema","solvedMyProblem","thumb-up"],["Otro","otherUp","thumb-up"]],[["Falta la información que necesito","missingTheInformationINeed","thumb-down"],["Muy complicado o demasiados pasos","tooComplicatedTooManySteps","thumb-down"],["Desactualizado","outOfDate","thumb-down"],["Problema de traducción","translationIssue","thumb-down"],["Problema con las muestras o los códigos","samplesCodeIssue","thumb-down"],["Otro","otherDown","thumb-down"]],["Última actualización: 2025-07-27 (UTC)"],[],[],null,["# Reduce latency with Zero-Shutter Lag\n\n| **Note:** Zero-Shutter Lag is an experimental feature. To leave feedback on Zero-Shutter Lag, join the [Android CameraX Discussion Group](https://groups.google.com/a/android.com/g/camerax-developers).\n\nStarting in [CameraX 1.2](/jetpack/androidx/releases/camera), Zero-Shutter Lag is available as a capture mode.\nEnable Zero-Shutter Lag to significantly reduce latency compared to the\n[default capture mode](/reference/androidx/camera/core/ImageCapture#CAPTURE_MODE_MINIMIZE_LATENCY()), so you never miss the shot.\n\nEnable Zero-Shutter Lag\n-----------------------\n\nTo enable Zero-Shutter Lag, pass [`CAPTURE_MODE_ZERO_SHOT_LAG`](/reference/androidx/camera/core/ImageCapture#CAPTURE_MODE_ZERO_SHUTTER_LAG()) to\n[`ImageCapture.Builder.setCaptureMode()`](/reference/androidx/camera/core/ImageCapture.Builder#setCaptureMode(int)). If unsuccessful,\n`setCaptureMode()` falls back to `CAPTURE_MODE_MINIMIZE_LATENCY`.\n\nFor more on capture modes, see the [Image capture guide](/media/camera/camerax/take-photo#set-capture-mode).\n\nHow it works\n------------\n\nZero-Shutter Lag uses a ring buffer that stores the three most recent capture\nframes. When a user presses the capture button, CameraX invokes\n[`takePicture()`](/reference/android/hardware/Camera#takePicture(android.hardware.Camera.ShutterCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback,%20android.hardware.Camera.PictureCallback)), and the ring buffer retrieves the captured frame with the\ntimestamp that is closest to that of the button press. CameraX then\n[reprocesses](/reference/android/hardware/camera2/CameraDevice#reprocessing) the capture session to generate an image from that frame, which\nsaves to disk in JPEG format.\n\nPrerequisites\n-------------\n\nBefore you enable Zero-Shutter Lag, use [`isZslSupported()`](/reference/androidx/camera/core/CameraInfo#isZslSupported()) to determine if\nyour device meets the following requirements:\n\n- Targets Android 6.0+ (API level 23 and higher).\n- Supports [`PRIVATE` reprocessing](/reference/android/hardware/camera2/CameraMetadata#REQUEST_AVAILABLE_CAPABILITIES_PRIVATE_REPROCESSING).\n\nFor devices that don't meet the minimum requirements, CameraX falls back to\n`CAPTURE_MODE_MINIMIZE_LATENCY`.\n\nZero-Shutter Lag is only available for [Image capture](/training/camerax/take-photo). You cannot enable it\nfor [Video capture](/training/camerax/video-capture) or with [Camera extensions](/training/camera/camera-extensions).\n\nFinally, because using flash results in greater latency, Zero-Shutter Lag does\nnot work when flash is ON or in AUTO mode. For more information about setting\nthe flash mode, see [`setFlashMode()`](/media/camera/camerax/take-photo#set-flash-mode)."]]