Prueba de Cámara
Prueba tu cámara con vista previa en tiempo real, captura de fotos e información del dispositivo
Vista Previa en Vivo
¿Qué es la Prueba de Cámara?
Una prueba de cámara comprueba si el navegador puede acceder a una webcam, una cámara USB externa o la cámara integrada del portátil y mostrar una vista previa en vivo. Es útil antes de videollamadas, clases en línea, entrevistas, directos, grabaciones o cualquier situación donde una cámara equivocada, permisos bloqueados, pantalla negra, baja resolución o mala iluminación puedan causar problemas. La herramienta usa el permiso de cámara del navegador, muestra el flujo real que la página puede abrir y permite capturar una imagen local para revisar encuadre y nitidez. Ayuda a verificar dispositivo, resolución, fotogramas por segundo, relación de aspecto y calidad básica sin subir vídeo. No puede reparar fallos de controlador o hardware; si no aparece imagen, revisa privacidad del sistema, otras apps, cables y controladores.
Cómo usar
Cómo usar
- Haz clic en 'Iniciar Prueba' y permite el acceso del navegador a la cámara
- Observa la vista previa en directo de la cámara
- Haz clic en 'Capturar' para tomar una foto
- Puedes cambiar entre cámaras o probar distintas resoluciones
Consejos
- Si la vista previa no se muestra, comprueba si el navegador ha concedido permiso para acceder a la cámara
- Si la cámara está siendo usada por otra aplicación
- Si se ha seleccionado el dispositivo de cámara correcto
- Si la cámara está desactivada en la configuración del sistema
Casos de uso
Principio técnico
La herramienta de prueba de cámara se basa en la especificación W3C Media Capture and Streams, utilizando navigator.mediaDevices.getUserMedia(constraints) para acceder a la cámara. El parámetro constraints es un objeto tipo JSON que especifica valores ideal, exact, min y max para resolución (ancho, alto), tasa de fotogramas, modo de orientación e ID de dispositivo. El solucionador de restricciones del navegador negocia estos valores contra los descriptores UVC (USB Video Class) reportados por el firmware de la cámara; cuando una restricción exacta no puede cumplirse, la llamada se rechaza con un OverconstrainedError — este es el mecanismo detrás del verificador de soporte de resolución, que prueba cada resolución con restricciones { exact } y marca los fallos. Una vez adquirido el flujo, la pista de vídeo expone getSettings() (los valores reales aplicados tras la negociación), getCapabilities() (los rangos completos soportados por el hardware) y getConstraints() (lo que se solicitó originalmente). La resolución aplicada, la tasa de fotogramas, la relación de aspecto y el modo de orientación se leen de getSettings() y se muestran. La vista previa en vivo se renderiza estableciendo el srcObject del elemento de video al MediaStream; el pipeline de medios del navegador maneja la decodificación, la conversión de espacio de color y la renderización acelerada por GPU sin manipulación de píxeles por JavaScript. Para capturas de imagen fija, CanvasRenderingContext2D.drawImage(videoElement, 0, 0) toma una instantánea del fotograma de vídeo decodificado actual en un canvas oculto, y toDataURL('image/png') lo serializa como una URL de datos PNG. enumerateDevices() lista todos los dispositivos de entrada de medios disponibles — cabe señalar que las etiquetas de dispositivos son cadenas vacías hasta que el usuario haya concedido permiso de cámara al menos una vez, una medida de prevención de huella digital. Llamar a track.stop() libera el hardware de la cámara y apaga la luz indicadora; establecer videoElement.srcObject = null desconecta el pipeline de renderización. getUserMedia requiere un contexto seguro (HTTPS o localhost) y activa un diálogo de permiso por origen; la luz indicadora de la cámara se aplica a nivel del sistema operativo y no puede ser eludida por la página.
- Negociación de restricciones: el solucionador del navegador compara los valores ideal/exact/min/max contra los descriptores de hardware UVC — las pruebas con { exact } fallan con OverconstrainedError cuando el sensor no puede entregar la resolución solicitada, y así se completa la tabla de soporte de resolución.
- Introspección de pista: getSettings() devuelve la resolución, tasa de fotogramas, relación de aspecto y facingMode realmente aplicados tras la negociación — pueden diferir de los valores ideales solicitados cuando el ancho de banda USB o las capacidades del sensor están limitados.
- Privacidad en enumerateDevices: las etiquetas de dispositivos son cadenas vacías hasta que se concede permiso de getUserMedia al menos una vez por origen — una medida anti-huella digital exigida por la especificación que también significa que el selector de dispositivos muestra nombres genéricos en la primera visita.
- Captura de imagen fija con Canvas: drawImage() copia el fotograma de vídeo decodificado desde el compositor de GPU a un búfer de píxeles 2D sin recodificar; toDataURL('image/png') lo serializa como PNG sin pérdida — el fotograma nunca sale de la memoria del navegador.
- Modo de orientación: el VideoFacingModeEnum se lee de track.getSettings().facingMode ('user' para frontal, 'environment' para trasero, 'left'/'right' para externo) — no todas las cámaras USB de escritorio reportan orientación, por lo que el campo puede mostrar 'unknown'.
- Ciclo de vida del flujo: track.stop() libera el hardware de la cámara y apaga la luz indicadora a nivel del SO; srcObject = null desconecta el pipeline de renderización — ambos son necesarios para liberar completamente el dispositivo y que otras aplicaciones puedan adquirirlo.
- Modelo de seguridad: getUserMedia requiere un contexto seguro (HTTPS o localhost), activa un diálogo de permiso por origen, y el indicador de cámara se aplica a nivel del SO/kernel — la página no puede eludir ninguna de estas tres barreras.
Ejemplos
Flujo de prueba básico
1. Haz clic en Iniciar prueba y concede permiso de cámara
2. Observa la vista previa en vivo: nitidez, enfoque y tasa de fotogramas
3. Pulsa el botón Foto para capturar un fotograma de prueba
4. Revisa la información del dispositivo (resolución, modo de cámara, tasa de fotogramas)
Uso: ejecútalo antes de cualquier videollamada, entrevista o transmisión en vivoPrueba de resoluciones
1. Despliega el panel Resoluciones admitidas
2. Haz clic en Probar junto a cada resolución (p. ej. 1080p, 720p, 480p)
3. Comprueba cuáles admite realmente tu hardware
4. Elige la resolución más alta y estable según tu caso de usoCambio entre múltiples cámaras
1. Abre el menú desplegable de dispositivos en la parte superior
2. Selecciona otra cámara (frontal/trasera, webcam externa)
3. Compara la calidad de imagen, balance de color y rendimiento con poca luz
4. Confirma que el dispositivo correcto está seleccionado antes de unirte a la llamadaPreguntas frecuentes
¿Qué comprueba la prueba de cámara?
Si tu navegador puede acceder a la cámara, la resolución que ofrece, la vista previa en vivo y la captura básica (instantánea a imagen). Es útil antes de una videollamada para confirmar que la cámara correcta está seleccionada y que la imagen está bien orientada y expuesta.
¿Por qué no aparece mi cámara?
Causas comunes: el navegador necesita permiso de cámara (revisa el icono de permisos en la barra de direcciones); otra aplicación está usando la cámara (cierra Zoom, Teams, OBS); la configuración de privacidad del sistema bloquea el acceso del navegador (revisa Privacidad de Windows o el permiso de Cámara en macOS); un interruptor de hardware está desactivando la cámara.
¿Puedes cambiar entre cámara frontal y trasera?
Sí, si tu dispositivo tiene ambas. La página enumera las cámaras disponibles mediante navigator.mediaDevices.enumerateDevices(); elige la que quieras en el desplegable. En móviles, 'user' es la frontal y 'environment' es la trasera.
¿Qué resoluciones son compatibles?
Las que la cámara y el navegador expongan. Rangos comunes: 320×240, 640×480, 1280×720, 1920×1080. Las resoluciones más altas requieren más ancho de banda (para uso en directo) y más CPU. La página elige la más alta por defecto; selecciona una menor si tu red es lenta.
¿Se sube mi vídeo a algún servidor?
No. El flujo de vídeo se renderiza localmente; los fotogramas capturados se quedan en el navegador. Ten en cuenta que el permiso de cámara se concede a nivel de origen, así que cualquier pestaña abierta de este sitio puede acceder hasta que lo revoques. Cierra la pestaña al terminar.
¿Por qué se ve el vídeo en espejo?
Los navegadores reflejan la cámara frontal en la vista previa para imitar el efecto «espejo» que la gente espera. Las instantáneas pueden o no estar reflejadas; revisa ambas vistas. La regla CSS transform: scaleX(-1) activa o desactiva el espejo.
¿Qué hago si el permiso de cámara está denegado de forma permanente?
En Chrome, haz clic en el icono de cámara de la barra de direcciones → «Permitir siempre». Restablece desde chrome://settings/content/camera si es necesario. Otros navegadores tienen ajustes similares. Tras conceder el permiso, recarga la página.