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

黑屏问题表现:

  1. offeranswer流程都是通的
  2. ice状态initcomplete、到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 对象
=> 问题解

玩~

原文地址:https://blog.csdn.net/yeshennet/article/details/134611624

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_20978.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注