Estoy creando una aplicación web usando webrtc que permite que dos usuarios se comuniquen entre sí usando video y audio. La aplicación utiliza node.js como servidor de señalización. La aplicación funciona bien cuando se comunica entre dos escritorios, pero cuando pruebo una comunicación de escritorio a móvil, si el usuario que inicia la oferta es el que está en el escritorio, el que está en el móvil no puede escuchar ningún sonido. Si sucede al revés, ambos tienen audio. Cuando compruebo las devtools, el flujo de audio se envía desde el escritorio y lo recibe el móvil (está activo y no silenciado), pero no hay sonido. Uso el elemento de audio para reproducir la transmisión de audio y el elemento de video para reproducir la transmisión de video. He probado esto tanto en Chrome como en Mozilla y me encuentro con el mismo problema.
Si alguien puede ayudar, sería muy apreciado.
A continuación se muestran ejemplos de código del evento en pista
rtcConnection.ontrack = function(event) { console.log('Remote stream received.'); if(event.streams[0].getAudioTracks().length > 0) { event.streams[0].getAudioTracks().forEach((track) => { remoteAudioStream .addTrack(track); }); audioPlayer.srcObject = remoteAudioStream; } if (event.streams[0].getVideoTracks().length > 0){ event.streams[0].getVideoTracks().forEach((track) => { remoteVideoStream .addTrack(track); }); localVideo.srcObject = remoteVideoStream; } };y el flujo de medios de captura:
function getUserMedia() { let getAudio = true; let getVideo = true; let constraints = { audio: getAudio, video: getVideo }; navigator.mediaDevices.getUserMedia(constraints) // Ask user to allow access to his media devices .then( function(data) { //if yes, get stream config data and join room localStream = data; console.log('Getting user media succeeded.'); console.log('RTC Connection created. Getting user media. Adding stream tracks to RTC connection'); sendMessage({ type: 'peermessage', messagetype:'info', messagetext: 'Peer started video streaming.'}); //stream to be sent to the other user localStream.getTracks().forEach(track => rtcConnection.addTrack(track, localStream)); console.log('Creating offer'); rtcConnection.createOffer() .then(function(offer) { // createOffer success console.log('Offer created. Setting it as local description'); return rtcConnection.setLocalDescription(offer); }, logError) // createOffer error .then(function() { // setLocalDescription success console.log('Offer set as local description. Sending it to agent'); sendMessage(rtcConnection.localDescription) }, logError); // setLocalDescription error } );}