Tengo una aplicación de reuniones que usa Twilio Video.
La aplicación tiene un requisito de que cuando un usuario quiere unirse a una sala, no es inmediato. Eso significa: un usuario envía una solicitud al servidor de aplicaciones para unirse, inmediatamente verá su cámara web local, luego esperará un tiempo hasta que el servidor responda con un token para unirse a la sala. Pueden ser 10 o 20 minutos.
La comunicación entre el cliente y el servidor se realiza a través de WebSockets.
Aquí está el proceso:
Paso 1: el cliente envía una solicitud al servidor de aplicaciones para unirse a una sala
Paso 2: solicite acceso y muestre la cámara local del cliente de la siguiente manera:
// Get the track from twilio const Track = await Twilio.Video.createLocalVideoTrack(); // Add track to HTML LocalMediaContainer.appendChild(Track.attach());Paso 3: el cliente espera a que el servidor responda (digamos 10 minutos)
Paso 4: el servidor responde con el token para unirse a la sala de video de Twilio
Paso 5: el cliente se une a la sala usando el token enviado por el servidor de la siguiente manera
Twilio.Video.connect(Token, { name:RoomName }).then(room => { console.log('Successfully joined a Room'); room.on('participantConnected', participant => { console.log('A remote Participant connected '); }); }, error => { console.error('Unable to connect to Room'); });El proceso funciona bien. Sin embargo, el problema que tengo es que en el Paso 5, cuando el cliente intenta unirse a una sala, Twilio le pide nuevamente que le conceda acceso a la cámara.
Básicamente, aunque ya se haya otorgado el acceso, el método Twilio.Video.connect vuelve a solicitar el acceso.
Me preguntaba si hay alguna forma de usar la autorización otorgada anteriormente para usar la cámara y evitar volver a pedirla si ya se la concedieron.
Gracias Saludos,
Desarrollador evangelista de Twilio aquí.
Cuando llama a Twilio.Video.connect , puede pasar una serie de pistas con los medios del usuario que ya tiene.
Twilio.Video.connect(Token, { name: RoomName, tracks: [VideoTrack, AudioTrack] }).then(...); Esto usa sus pistas existentes en lugar de realizar una nueva solicitud de permisos a getUserMedia .