Guía de solución · Prueba de micrófono
Cómo solucionar «SecurityError» y «navigator.mediaDevices is undefined»
Los navegadores solo permiten el acceso al micrófono y a la cámara en páginas seguras. Si la dirección empieza por http:// en lugar de https://, o la página está en un marco sin permiso, el navegador lanza SecurityError u oculta por completo navigator.mediaDevices, lo que produce «TypeError: Cannot read properties of undefined (reading getUserMedia)». La solución es usar una dirección segura.
Lista de soluciones rápidas
- 1Mira la barra de direcciones. La página debería empezar por https:// o ser localhost.
- 2Cambia http:// por https:// en la dirección o vuelve a abrir el sitio desde un enlace seguro.
- 3Si estás dentro de una aplicación o de una vista incrustada, abre la página en una pestaña normal del navegador.
- 4Permite el micrófono y la cámara para el sitio, recarga y pulsa Comprobar de nuevo.
- 5Si gestionas el sitio, instala un certificado y redirige todo el tráfico http a https.
Por qué los navegadores exigen un contexto seguro
El micrófono y la cámara son sensibles. Los navegadores solo los exponen en un contexto seguro para que un atacante en una red compartida no pueda cambiar la página y espiarte. Las páginas http normales, las direcciones de red local como 192.168.x.x y muchas vistas dentro de aplicaciones no cumplen el requisito, aunque localhost sí.
Una política de permisos también puede bloquear el dispositivo para una página dentro de un marco. La página que aloja el marco debe permitir el micrófono y la cámara.
Lista de comprobación para desarrolladores
Sirve el sitio por HTTPS con un certificado válido, prueba el trabajo local en localhost y comprueba window.isSecureContext antes de llamar a getUserMedia. En las incrustaciones, define allow="microphone; camera" en el iframe y evita sandboxes que eliminen el permiso. La prueba de micrófono se sirve por HTTPS para que puedas comparar.
Preguntas frecuentes
Preguntas frecuentes
¿Por qué navigator.mediaDevices es undefined?
La página no está en un contexto seguro, así que el navegador oculta la API multimedia. Ábrela por HTTPS o en localhost.
¿Localhost cuenta como seguro?
Sí. Los navegadores tratan localhost como seguro, así que puedes desarrollar sin certificado. Otras direcciones locales necesitan HTTPS.
¿Qué es un SecurityError en getUserMedia?
El navegador lo rechazó porque la página no es segura, se cargó en un marco restringido o una política prohíbe el dispositivo.
¿Mis datos están seguros en una página http?
Evita usar el micrófono y la cámara en páginas http. Usa https para que la página no pueda alterarse durante la transmisión.