行业知识
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
上一篇:怎么切换新服务器账号?
下一篇:怎么搜索添加文件服务器?