小工具知识网

当前位置: 首页 > 行业知识 > Android 11 webview webrtc无法使用问题

行业知识

Android 11 webview webrtc无法使用问题

2026-11-15 20:45:31 来源:互联网转载

问题:Android 11 webview 调用webrtc无法使用, 看logcat日志会报如下错误

[ERROR:address_tracker_linux.cc(245)] Could not send NETLINK request: Permission denied (13)

查了下相关的网络权限都有配置了还是不行,还是报这个权限问题

原因:跟 android11 限制读网卡信息有关系, 算webview的一个兼容bug 

https://developer.android.com/about/versions/11/privacy/mac-address

解决: 

方案一: 可以修改app 的targetSdkVersion小于30 

方案二:发现第一次发起连接失败后再连接就正常了,所以在正式连接之前发起一次连接

async function connect() {     if (getAndroidVersion() === 11) {          await this.fixAndroid({            iceServers,            iceCandidatePoolSize: 1, //  这里要设置1, 不设1也连不上,不知道为什么          })     }    // 发起正式连接    // let peer = new RTCPeerConnection(turn);    // ......}function getAndroidVersion() {  // 获取设备信息  const deviceInfo = navigator.userAgent;  // 解析设备信息  const androidVersion = deviceInfo.match(/Android ([\d.]+)/);  if (androidVersion && androidVersion!.length === 2) {    return Number(androidVersion![1])  }  // 返回系统版本号  return null;};async fixAndroid(turn: any) {    console.log("fixing android webrtc bug");    return new Promise(async (resolve, reject) => {      try {        let peer = new RTCPeerConnection(turn);        let offer = await peer.createOffer({          offerToReceiveAudio: true,          offerToReceiveVideo: true        })        let rtcDesc = new RTCSessionDescription(offer);        await peer.setLocalDescription(rtcDesc);        setTimeout(()=> {          peer.close()          console.log("fixAndroid close")          resolve()        }, 1000)      } catch (e) {        resolve()        console.error("fixAndroid", e)      }    })  }

参考:

  • https://stackoverflow.com/questions/70803796/ice-candidates-not-generating-on-android-11-chrome-in-some-devices
  • https://issues.chromium.org/issues/40194180

上一篇:怎么切换新服务器账号?

下一篇:怎么搜索添加文件服务器?