Al probar WebRTC, descubrí que está creando problemas en algunos dispositivos Android que tienen Android 11 (principalmente Samsung, Vivo) en Chrome. Sin embargo, funciona bien en Firefox en el mismo dispositivo. Probé en Samsung Galaxy A03s (SM-A037F).
Intenté esto: https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ En Chrome, los candidatos no se reúnen, pero en Firefox, los candidatos se reúnen.
Encontré un error similar en el rastreador de errores de Chromium: https://bugs.chromium.org/p/chromium/issues/detail?id=1115498 Aún parece que el problema no está solucionado.
¿Cómo podemos hacer que funcione en el navegador Chrome? Por favor ayuda.
El mismo problema. Si intenta establecer iceCandidatePoolSize = 10 en la configuración de RTCPeerConnection, onicecandidate se activa una vez con un candidato vacío, iceConnectionState cambia al estado conectado.
Luego observo los transceptores pc.getTransceivers()[0].sender.transport.iceTransport
meetingState: estado "completo": "conectado"
pc.getTransceivers()[0].sender.transport.iceTransport.getSelectedCandidatePair() ¡Éxito! ¡Hay un par seleccionado!
Pero pc.connectionState todavía tiene un estado de conexión y se cuelga sin cesar...
Probé con conexiones wifi y gsm... ¡No entiendo nada!
Comprobado en otros dispositivos en la misma red (wifi):
Android 11 - Samsung Galaxy M12 - Éxito
Android 11 - Samsung Galaxy TAB A (2019) - Éxito
Android 11 - Samsung Galaxy A22 (mi) - FALLA
Solución para mí :
let pc = new RTCPeerConnection({iceCandidatePoolSize: 1}) //any > 0 pc.oniceconnectionstatechange = function(){ if(pc.iceConnectionState === "connected") { for (let tr of pc.getTransceivers()) { let selected = tr.sender.transport.iceTransport.getSelectedCandidatePair(); if (selected) { //send selected.local to you server... } } } } Error de cromo:
https://bugs.chromium.org/p/chromium/issues/detail?id=1240237
Creo que tengo un trabajo para esto. Solo sucede en la primera conexión webrtc: funciona al volver a intentarlo, así que agregué este código a mi proyecto y parece solucionarlo:
fixAndroid = function (turn) { console.log("fixing android webrtc bug"); var cn = new RTCPeerConnection(turn, null); cn.createOffer({ offerToReceiveAudio: true, offerToReceiveVideo: true }).then(offer => { let rtcDesc = new RTCSessionDescription(offer); cn.setLocalDescription(rtcDesc, function () { //needs a second to initialise window.setTimeout(function (cn) { cn.close(); // start your webrtc connection here }, 1000, cn) }); }); }