Tengo una aplicación web en la que los usuarios pueden hablar entre sí a través de Webrtc y un servidor del mismo nivel. Mi problema es que en un dispositivo ios no puedo enviar mi audio y no puedo escuchar a los demás. Después de investigar un poco, descubrí que es un comportamiento intencional de Apple. Un audio solo se puede reproducir si el audio lo activa un usuario y no desde el sitio web. Pero mi aplicación es un lobby aleatorio donde las personas pueden hablar entre sí y cambiar el "socio" haciendo clic en el botón. Después del clic, busca otro usuario gratuito y ambos se conectan a través del par y comparten su transmisión de audio.
Entonces traté de llamar a audio.play() en un evento táctil. Pero eso tampoco funcionó. No pasó nada. Todavía no hay voz en ambos lados. ¿Saben cómo puedo o debo manejar este problema?
En el navegador todo funciona bien. Este problema solo aparece en los navegadores móviles IOS.
Atentamente.
Básicamente, está preguntando cómo eludir una restricción. Sin embargo, no ha especificado exactamente qué restricción está tratando de eludir, por lo que solo puedo asumir, según lo que me ha dicho hasta ahora, que está tratando de reproducir audio automáticamente.
Si este es el caso, lo más fácil sería configurar una transmisión de video en blanco en lugar de una transmisión de audio, y agregar la propiedad de reproducción automática de esta manera:
<video autoplay>Sin embargo, no cuente con esta solución, o CUALQUIER solución para CUALQUIER restricción, que funcione como una solución a largo plazo, si es que puede hacer que funcione hoy. Si puede eludir una restricción, también pueden hacerlo los desarrolladores menos escrupulosos, por lo que Apple puede inclinarse a parchear cualquier método para eludir sus restricciones. Su mejor opción probablemente sea usar React Native para crear una aplicación nativa para iOS y Android. React Native puede usar JavaScript o TypeScript (usted elige cuál).
En lugar de emitir directamente desde sus elementos multimedia, considere usar la API de audio web . Específicamente:
context.resume() .mediaStreamNode.connect(context.destination) )Esto no es un truco ni una solución a las restricciones de reproducción automática de ninguna manera. Simplemente está poniendo todas sus salidas de audio en un solo lugar.