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

webrtc兼容android4.x的一次探索

背景是我们有一个四年前的应用,该应用TargetVersion设定为16,这个应用四年前用了m70版本的webrtc。最近我升级到webrtc-m110,发现各种崩溃,把崩溃修好之后,发现黑屏了。为了处理黑屏,故有本文。

黑屏问题表现:

  1. offer、answer的流程都是通的
  2. ice的状态从init、complete、到failed
  3. 未见其他报错 【其他有一些崩溃主要是nosuchmethod,因为最新版的webrtc去掉了LoLLipop(andrid5.0 api21)的很多判读】
  4. 观察canditate,发现只有127.0.0.1和:::1两个canditate,但是观察旧版本,是可以获取到192.168.1.x、127.0.0.1和:::1

猜测:

网络部分的上层到下层代码有变更导致的本地网络信息识别失败。

相关代码:

  1. basic_port_allocator.cc GetNetworks()
  2. NetworkMonitorAutoDetect.java getActiveNetworkList()
  3. android_network_montor NotifyOfactiveNetworkList()

分析:

  1. basic_port_allocator.cc 中会过滤掉一次网络信息。
    => 我一开始是在这里打日志,发现底层获取的确实只有127.0.0.1和:::1,过滤也是在这两个基础上做的过滤。

  2. android_network_montor 这里是平台相关的一些处理,看到代码中有不少地方特地判断了 android_sdk_int_
    => 我在这个类中打了不少日志
    => 通过代码溯源,找前后版本的修改和提交记录 https://cs.android.com/android/platform/superproject/main/+/main:external/webrtc/sdk/android/src/jni/android_network_monitor.cc;l=659?q=NotifyOfactiveNetworkList
    => 这里花了我两天多,去看webrtc的代码变更

  3. NetworkMonitorAutoDetect 这个类是网络发现类,一开始这里就触发了崩溃,所以我修改过这个类中是否支持网络绑定的判断。
    => 对比了android13和android4的两个手机,逐一注释掉 supportNetworkCallback 的代码
    => 发现注释掉 getActiveNetworkList 中的返回,android13也会出现和android4一样的表现
    => 下面这个方法是不可用的,因为Network只有在android21才支持。

@Nullable
List<NetworkInformation> getActiveNetworkList() {if (!supportNetworkCallback()) {return null;}ArrayList<NetworkInformation> netInfoList = new ArrayList<NetworkInformation>();for (Network network : getAllNetworks()) {NetworkInformation info = networkToInfo(network);if (info != null) {netInfoList.add(info);}}return netInfoList;
}

=> 尝试基于 NetworkInterface.getNetworkInterfaces() 构造 NetworkInformation 对象
=> 问题解决

玩~

相关文章:

  • 深度学习之基于Tensorflow卷积神经网络鸟类目标识别检测系统
  • 3.1.2 Linux时间子系统 hrtimer示例使用
  • Rust语言入门教程(一) - 简介及Cargo使用
  • MySQL MHA高可用架构搭建
  • SELinux零知识学习三十二、SELinux策略语言之角色和用户(3)
  • 【C++干货铺】非类型模板 | 模板特化 | 模板分离编译
  • 【C4D如何将多个选集设置为一个选集】
  • 前端(HTML + CSS + JS)
  • 成品日志函数
  • Scrapy爬虫异步框架(一篇文章齐全)
  • 插入排序(形象类比)
  • ubuntu修改系统语言
  • Windows系统管理之备份与恢复
  • PgSQL技术内幕-Analyze做的那些事-pg_stat_all_tables
  • Hibernate 脏检查和刷新缓存机制
  • 【译】React性能工程(下) -- 深入研究React性能调试
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Git学习与使用心得(1)—— 初始化
  • Intervention/image 图片处理扩展包的安装和使用
  • learning koa2.x
  • mysql_config not found
  • Python进阶细节
  • 闭包,sync使用细节
  • 构造函数(constructor)与原型链(prototype)关系
  • 海量大数据大屏分析展示一步到位:DataWorks数据服务+MaxCompute Lightning对接DataV最佳实践...
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 思维导图—你不知道的JavaScript中卷
  • 最近的计划
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 阿里云ACE认证学习知识点梳理
  • ​TypeScript都不会用,也敢说会前端?
  • ​卜东波研究员:高观点下的少儿计算思维
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #每日一题合集#牛客JZ23-JZ33
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (20050108)又读《平凡的世界》
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (day6) 319. 灯泡开关
  • (附源码)springboot学生选课系统 毕业设计 612555
  • (十六)Flask之蓝图
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • .NET Compact Framework 3.5 支持 WCF 的子集
  • .net core webapi Startup 注入ConfigurePrimaryHttpMessageHandler
  • .NET Framework杂记
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net 转战 Android 4.4 日常笔记(4)--按钮事件和国际化
  • .net分布式压力测试工具(Beetle.DT)
  • [1127]图形打印 sdutOJ
  • [20160807][系统设计的三次迭代]
  • [ACTF2020 新生赛]Upload 1
  • [AIGC] 如何建立和优化你的工作流?
  • [C#]C# winform部署yolov8目标检测的openvino模型
  • [CCIE历程]CCIE # 20604
  • [CentOs7]搭建ftp服务器(2)——添加用户
  • [codeforces]Recover the String