当前位置: 首页 > 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 对象
=> 问题解决

玩~

相关文章:

webrtc兼容android4.x的一次探索

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

Kafka的存储机制和可靠性

文章目录 前言一、Kafka 存储选择二、Kafka 存储方案剖析三、Kafka 存储架构设计四、Kafka 日志系统架构设计4.1、Kafka日志目录布局4.2、Kafka磁盘数据存储 五、Kafka 可靠性5.1、Producer的可靠性保证5.1.1、kafka 配置为 CP(Consistency & Partition tolerance)系统5.1.…...

数据库时间类型之间的转换魔法

解锁时间数据的魔法 时间&#xff0c;是数据库中一个充满魔法的复杂表现形式。在这篇博客中&#xff0c;我们将探讨在数据库中时间戳&#xff08;timestamp&#xff09;、日期&#xff08;date&#xff09;、日期时间&#xff08;datetime&#xff09;和字符串之间的转换技巧&…...

conda和pip常用命令整理

文章目录 一、conda常用指令1. 更新2 .环境管理3. 包管理 二、pip常用命令1. 常用命令2. 国内镜像 一、conda常用指令 1. 更新 conda --version 或 conda -V #查看conda版本 conda update conda # 基本升级 conda update anaconda # 大的升级 conda upd…...

英语翻译小软件 ← Python实现

【程序描述】 利用Python实现一个英语翻译小软件。 ★ 当输入一个英文单词后&#xff0c;输出对应的中文意思。 ★ 当输入 q 时&#xff0c;退出程序。 ★ 当输入一个不存在的词条时&#xff0c;捕获异常&#xff0c;提示“No finding!”。【程序代码】 dict{&quo…...

将项目放到gitee上

参考 将IDEA中的项目上传到Gitee仓库中_哔哩哔哩_bilibili 如果cmd运行ssh不行的话&#xff0c;要换成git bash 如果初始化后的命令用不了&#xff0c;直接用idea项放右键&#xff0c;用git工具操作...

【机器视觉技术】:开创人工智能新时代

&#x1f3a5; 屿小夏 &#xff1a; 个人主页 &#x1f525;个人专栏 &#xff1a; IT杂谈 &#x1f304; 莫道桑榆晚&#xff0c;为霞尚满天&#xff01; 文章目录 &#x1f4d1; 前言&#x1f324;️ 机器视觉技术的实现☁️ 图像采集☁️ 图像处理☁️ 数据建模☁️应用展示…...

网易区块链,网易区块链赋能赣州脐橙数字藏品,数字指纹解决方案

目录 网易区块链 网易区块链赋能赣州脐橙数字藏品,助力革命老区三农之路 数字指纹解决方案 网易区块链 网易区块链成立于2017年,致力于Web3.0区块链技术的研发和应用。自主研发的区块链“天玄”引擎,在单链场景下支持每秒最高30万笔交易,单日可处理上链数据超10亿。 与…...

程序员如何兼职?

首先&#xff0c;写博客和制作短视频是一个好方法。想象一下&#xff0c;你是一个资深的程序员&#xff0c;而你的博客就像是一个个人课堂&#xff0c;帮助那些初入编程领域的人理解各种编程概念和技巧。你可以分享你的工作经验、解决问题的过程&#xff0c;甚至可以分享一些有…...

教育企业CRM选择技巧

教育行业的发展一波三折&#xff0c;要想在激烈的赛道脱颖而出&#xff0c;就需要有一套有效的CRM系统&#xff0c;来帮助教育机构提升招生效率、增加学员留存、提高教学质量。下面说说&#xff0c;教育企业选择CRM系统要具备的四大功能。 1、招生管理功能 教育机构的首要目标…...

算法:Java计算二叉树从根节点到叶子结点的最大路径和

要求从根节点到叶子结点的最大路径和&#xff0c;可以通过递归遍历二叉树来实现。对于二叉树中的每个节点&#xff0c;我们都可以考虑包含该节点的最大路径和。在递归的过程中&#xff0c;我们需要不断更新全局最大路径和。 具体的思路 递归函数设计&#xff1a; 设计一个递归函…...

袖珍可穿戴手持气象仪是什么?

随着科技的不断发展&#xff0c;我们身边的世界正在变得越来越智能化。近日&#xff0c;一款名为WX-SQ12可穿戴手持气象仪的科技新品引起了人们的广泛关注。这款气象仪不仅具有创新性的可穿戴设计&#xff0c;还具备强大的气象数据监测功能&#xff0c;让用户可以随时掌握天气变…...

【Azure 架构师学习笔记】- Azure Databricks (1) - 环境搭建

本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Databricks】系列。 前言 Databricks 已经成为了数据科学的必备工具&#xff0c;今时今日你已经很难抛开它来谈大数据&#xff0c;它常用于做复杂的ETL中的T&#xff0c; 数据分析&#xff0c;数据挖掘等&#xff0c;…...

无需繁琐编程 开启高效数据分析之旅!

不学编程做R统计分析&#xff1a;图形界面R Commander官方手册 R Commander是 R 的图形用户界面&#xff0c;不需要键入命令就可通过熟悉的菜单和对话框来访问 R 统计软件。 R 和 R Commander 均可免费安装于所有常见的操作系统——Windows、Mac OS X 和 Linux/UNIX。 本书作…...

JOSEF约瑟 剩余电流保护器 CLJ3-100A+LH30 导轨安装

CLJ3系列剩余电流动作继电器 系列型号&#xff1a; CLJ3-100A剩余电流动作继电器 CLJ3-250A剩余电流动作继电器 CLJ3-400A剩余电流动作继电器 CLJ3-630A剩余电流动作继电器 LH30剩余电流互感器 LH80剩余电流互感器 LH100剩余电流互感器 LH140剩余电流互感器 一、产品概…...

vue3自定义指令-文本超出宽度滚动

fontScroll.ts 指令文件 import { Directive } from vuefunction randomInt(min, max) {return Math.floor(Math.random() * (max - min 1)) min; } export default {// 可控制滚动速度&#xff0c;默认滚动速度20px/s,最低动画时长2smounted: (el, binding, vNode): void &…...

uniapp在H5端实现PDF和视频的上传、预览、下载

上传 上传页面 <u-form-item :label"(form.ququ3 1 ? 参培 : form.ququ3 2 ? 授课 : ) 证明材料" prop"ququ6" required><u-button click"upload" slot"right" type"primary" icon"arrow-upward" t…...

Kafka报错under-replicated partitions

1 under-replicated partitions异常原因 Kafka报错under replicated partitions意味着某些分区的副本数量未达到预期的复制因子。 主要有两种原因&#xff0c; Broker故障 如果某个Kafka Broker发生故障&#xff0c;导致其中一些分区的副本不再可用&#xff0c;那么这些分区就…...

【Python基础】字符集与字符编码

先行了解的知识&#xff1a; 1. 编码和解码 计算机内存储的信息都是二进制表示。 我们看到的英文&#xff0c;数字&#xff0c;汉字等在计算机内如何表示&#xff0c;那就需要编码 计算机内存储的信息需要解析出来&#xff0c;那就是解码 2.字符集与分类 什么是字符集&#xf…...

C# AES-128-CBC 加密

一、加密 /// <summary>/// 加密/// </summary>public static string AesEncrypt(string toEncrypt){byte[] toEncryptArray UTF8Encoding.UTF8.GetBytes(toEncrypt);byte[] keyArray UTF8Encoding.UTF8.GetBytes(Key);//注意编码格式(utf8编码 UTF8Encoding)byt…...

<6>-MySQL表的增删查改

目录 一&#xff0c;create&#xff08;创建表&#xff09; 二&#xff0c;retrieve&#xff08;查询表&#xff09; 1&#xff0c;select列 2&#xff0c;where条件 三&#xff0c;update&#xff08;更新表&#xff09; 四&#xff0c;delete&#xff08;删除表&#xf…...

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility

Cilium动手实验室: 精通之旅---20.Isovalent Enterprise for Cilium: Zero Trust Visibility 1. 实验室环境1.1 实验室环境1.2 小测试 2. The Endor System2.1 部署应用2.2 检查现有策略 3. Cilium 策略实体3.1 创建 allow-all 网络策略3.2 在 Hubble CLI 中验证网络策略源3.3 …...

页面渲染流程与性能优化

页面渲染流程与性能优化详解&#xff08;完整版&#xff09; 一、现代浏览器渲染流程&#xff08;详细说明&#xff09; 1. 构建DOM树 浏览器接收到HTML文档后&#xff0c;会逐步解析并构建DOM&#xff08;Document Object Model&#xff09;树。具体过程如下&#xff1a; (…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

关于 WASM:1. WASM 基础原理

一、WASM 简介 1.1 WebAssembly 是什么&#xff1f; WebAssembly&#xff08;WASM&#xff09; 是一种能在现代浏览器中高效运行的二进制指令格式&#xff0c;它不是传统的编程语言&#xff0c;而是一种 低级字节码格式&#xff0c;可由高级语言&#xff08;如 C、C、Rust&am…...

dify打造数据可视化图表

一、概述 在日常工作和学习中&#xff0c;我们经常需要和数据打交道。无论是分析报告、项目展示&#xff0c;还是简单的数据洞察&#xff0c;一个清晰直观的图表&#xff0c;往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server&#xff0c;由蚂蚁集团 AntV 团队…...

Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)

在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马&#xff08;服务器方面的&#xff09;的原理&#xff0c;连接&#xff0c;以及各种木马及连接工具的分享 文件木马&#xff1a;https://w…...

Netty从入门到进阶(二)

二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架&#xff0c;用于…...

力扣热题100 k个一组反转链表题解

题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

Git 3天2K星标:Datawhale 的 Happy-LLM 项目介绍(附教程)

引言 在人工智能飞速发展的今天&#xff0c;大语言模型&#xff08;Large Language Models, LLMs&#xff09;已成为技术领域的焦点。从智能写作到代码生成&#xff0c;LLM 的应用场景不断扩展&#xff0c;深刻改变了我们的工作和生活方式。然而&#xff0c;理解这些模型的内部…...