当前位置: 首页 > news >正文

Android 11 webview webrtc无法使用问题

问题: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

相关文章:

  • 《Django+React前后端分离项目开发实战:爱计划》 03 理解项目结构
  • 【More Effective C++】条款2:使用C++转型操作符
  • 微服务OAuth 2.1扩展额外信息到JWT并解析(Spring Security 6)
  • 力扣231. 2 的幂(数学,二分查找,位运算)
  • 亚马逊认证考试系列 - 知识点 - LightSail介绍
  • 网络选择流程分析(首选网络类型切换流程)
  • Git中为常用指令配置别名
  • 【漏洞复现】狮子鱼CMS某SQL注入漏洞01
  • 服务器禁用了请求中指定的方法
  • Gateway API 实践之(九)FSM Gateway 的双向 TLS
  • vue3 之 商城项目—详情页
  • 政安晨:示例演绎机器学习中(深度学习)神经网络的数学基础——快速理解核心概念(二){两篇文章讲清楚}
  • 如何使用Python + 百度翻译API 自动大批量免费翻译Excel文件中的外语内容
  • 小程序 自定义组件和生命周期
  • 比较Kamailio和OpenSIPS的重写contact函数
  • 【刷算法】从上往下打印二叉树
  • Intervention/image 图片处理扩展包的安装和使用
  • Java IO学习笔记一
  • JS基础之数据类型、对象、原型、原型链、继承
  • js如何打印object对象
  • JS字符串转数字方法总结
  • 代理模式
  • 分布式任务队列Celery
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于webpack 的 vue 多页架构
  • 开源中国专访:Chameleon原理首发,其它跨多端统一框架都是假的?
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我是如何设计 Upload 上传组件的
  • 赢得Docker挑战最佳实践
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • (+4)2.2UML建模图
  • (Mac上)使用Python进行matplotlib 画图时,中文显示不出来
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot教学评价 毕业设计 641310
  • (附源码)计算机毕业设计SSM在线影视购票系统
  • (附源码)计算机毕业设计高校学生选课系统
  • (南京观海微电子)——COF介绍
  • (七)理解angular中的module和injector,即依赖注入
  • (十八)devops持续集成开发——使用docker安装部署jenkins流水线服务
  • (转)利用ant在Mac 下自动化打包签名Android程序
  • (转)视频码率,帧率和分辨率的联系与区别
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET CF命令行调试器MDbg入门(四) Attaching to Processes
  • .NET Core Web APi类库如何内嵌运行?
  • .net core 依赖注入的基本用发
  • .NET Core 中插件式开发实现
  • .NET 事件模型教程(二)
  • .NET 中什么样的类是可使用 await 异步等待的?
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • ?php echo $logosrc[0];?,如何在一行中显示logo和标题?
  • @staticmethod和@classmethod的作用与区别