石家庄做网站好的网络技术有限公司,展示型网站设计公司,中建西部建设网站,网站风格指的是什么问题#xff1a;Android 11 webview 调用webrtc无法使用, 看logcat日志会报如下错误 [ERROR:address_tracker_linux.cc(245)] Could not send NETLINK request: Permission denied (13) 查了下相关的网络权限都有配置了还是不行#xff0c;还是报这个权限问题 原因#xff1…问题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-deviceshttps://issues.chromium.org/issues/40194180