0

在尝试 WebRTC 时,我发现它在 Chrome 中具有 Android 11(主要是三星、Vivo)的一些 Android 设备中产生了问题。但是,它在同一设备上的 Firefox 中运行良好。我在三星 Galaxy A03s (SM-A037F) 上进行了测试。

我试过这个 - https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/ 在 Chrome 中,没有收集候选人,但在 Firefox 中,候选人正在收集。

我在 Chromium 错误跟踪器中发现了一个类似的错误 - https://bugs.chromium.org/p/chromium/issues/detail?id=1115498 仍然问题似乎没有得到解决。

我们如何让它在 Chrome 浏览器中运行?请帮忙。

4

2 回答 2

0

同样的问题。如果您尝试在 RTCPeerConnection 的配置中设置 iceCandidatePoolSize = 10,则 oneicecandidate 会触发一次空候选,iceConnectionState 会更改为已连接状态。

然后我看收发器 pc.getTransceivers()[0].sender.transport.iceTransport

聚集状态:“完成”状态:“连接”

pc.getTransceivers()[0].sender.transport.iceTransport.getSelectedCandidatePair() 成功!有一对选定的!

但是 pc.connectionState 仍然有一个连接状态,并且无休止地挂在其中......

试过wifi和gsm连接......我什么都不懂!

检查同一网络(wifi)中的其他设备:

Android 11 - 三星 Galaxy M12 - 成功
Android 11 - 三星 Galaxy TAB A (2019) - 成功
Android 11 - 三星 Galaxy A22 (my) -失败

我的解决方法

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...
          }
      }
    }
}

错误铬:
https ://bugs.chromium.org/p/chromium/issues/detail?id=1240237

于 2022-02-06T02:38:40.423 回答
0

我想我已经解决了这个问题。它只发生在第一个 webrtc 连接上 - 它适用于重试,所以我将此代码添加到我的项目中,它似乎修复了它:

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)
                });

            });
        }
于 2022-02-16T02:23:54.247 回答