背景是我们有一个四年前的应用,该应用TargetVersion设定为16,这个应用四年前用了m70版本的webrtc。最近我升级到webrtc–m110,发现各种崩溃,把崩溃修好之后,发现黑屏了。为了处理黑屏,故有本文。
黑屏问题表现:
- offer、answer的流程都是通的
- ice的状态从init、complete、到failed
- 未见其他报错
【其他有一些崩溃主要是nosuchmethod,因为最新版的webrtc去掉了LoLLipop(andrid5.0 api21)的很多判读】 - 观察canditate,发现只有127.0.0.1和:::1两个canditate,但是观察旧版本,是可以获取到192.168.1.x、127.0.0.1和:::1
猜测:
相关代码:
- basic_port_allocator.cc GetNetworks()
- NetworkMonitorAutoDetect.java getActiveNetworkList()
- android_network_montor NotifyOfactiveNetworkList()
分析:
-
basic_port_allocator.cc 中会过滤掉一次网络信息。
=> 我一开始是在这里打日志,发现底层获取的确实只有127.0.0.1和:::1,过滤也是在这两个基础上做的过滤。 -
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的代码变更 -
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进行投诉反馈,一经查实,立即删除!