Estoy usando el nuevo SDK de Javascript Twilio v2 para hacer llamadas desde el navegador a otras personas. Esto funciona bien, pero me han pedido que agregue controles de volumen para la transmisión de audio entrante.
Después de investigar un poco, parece que necesito tomar la transmisión remota de la llamada y pasarla a través de un nodo de ganancia para reducir el volumen.
Desafortunadamente, el resultado de call.getRemoteStream siempre es nulo, incluso cuando puedo escuchar el audio de la llamada. He probado esto en los últimos Chrome y Edge y tienen el mismo comportamiento.
¿Hay algo más que deba hacer para acceder a la transmisión remota?
Código:
async function(phoneNumber, token) { console.log("isSecureContext: " + window.isSecureContext); //check we can get the stream var options = { edge: 'ashburn', //us US endpoint closeProtection: true // will warn user if you try to close browser window during an active call }; var device = new Device(token, options); const connectionParams = { "phoneNumber": phoneNumber }; var activeCall = await device.connect({ params: connectionParams }); //Setup gain (volume) control for incoming audio //Note, getRemoteStream always returns null. var remoteStream = activeCall.getRemoteStream(); if(remoteStream) { var audioCtx = new AudioContext(); var source = audioCtx.createMediaStreamSource(remoteStream); var gainNode = audioCtx.createGain(); source.connect(gainNode) gainNode.connect(audioCtx.destination); } else { console.log("No remote stream on call"); } }La salida del registro es:
isSecureContext: true
después
No remote stream on call
El soporte de Twilio me dio la respuesta: debe esperar hasta que comience a recibir eventos de volumen antes de solicitar la transmisión.
es decir
call.on('volume', (inputVolume, outputVolume) => { if(inputVolume > 0) { var remoteStream = activeCall.getRemoteStream(); .... } });