Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

161
Vistas
HTML5 y javascript: toma de fotografías desde un dispositivo compatible con varias cámaras

Estoy desarrollando una PWA basada en Vuejs. He implementado un componente para tomar fotografías usando la cámara incorporada del dispositivo. esta usando

  • la API navigator.mediaDevices.getUserMedia con un elemento de video para mostrar la transmisión desde la cámara.
  • un canva y sus getContext("2d").drawImage para obtener la imagen de la secuencia y mostrársela al usuario
  • la API navigator.mediaDevices.enumerateDevices para obtener una lista de las cámaras disponibles y el parámetro de restricción de getUserMedia para cambiar entre ellas.

Todo esto funciona muy bien :)

Pero ahora me he topado con un nuevo problema: algunos teléfonos inteligentes recientes tienen múltiples cámaras traseras que el software de la cámara integrada combinaría para tomar una sola toma (una cámara sería buena con baja exposición, otra con alta exposición y otra más en algunas otras condiciones, etc.). En este caso, mi aplicación mostrará todas las cámaras y permitirá que el usuario las use de forma independiente. El comportamiento previsto sería combinarlos como el software integrado. ¿Cómo es eso posible?

about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Después de probar varios dispositivos que tienen 1 (frontal), 2 (trasero y frontal) y múltiples sensores de cámara (1 frontal, varios traseros), mi solución consiste en usar la propiedad de etiqueta del objeto MediaDeviceInfo devuelto por mediaDevices.enumerateDevices() :

  • Si contiene 'frente' es una cámara frontal
  • Si contiene 'atrás', es una cámara trasera
  • Si contiene varias cámaras delanteras y/o traseras, aquella cuya etiqueta contiene '0' es la que combina las demás. Además, la primera de la lista siempre parece ser la cámara frontal, y la última la cámara trasera combinada.

Luego, mi código para obtener la identificación de la cámara frontal y de la cámara trasera combinada es el siguiente (se supone que siempre hay una y solo una cámara frontal):

 return navigator.mediaDevices.enumerateDevices() .then(mediaDevices => { let cameras = mediaDevices.filter(mediaDevice => mediaDevice.kind === 'videoinput'); console.log("#potential camera=" + cameras.length); if(cameras.length<=2) return cameras.map(x => x.deviceId); else { let front = cameras.find(x => x.label.match(/\bfront\b/)); let back = cameras.filter(x => x.label.match(/\bback\b/) && x.label.match(/\b0\b/)) if(!front || back.length!=1) { console.log("no clear front and back, taking first and last one - cameras=", cameras); return [cameras[0].deviceId, cameras[cameras.length-1].deviceId]; } else { console.log("clear front and back"); return [front.deviceId, back[0].deviceId]; } } }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda