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才支持。

java 复制代码
@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 对象

=> 问题解决

玩~

相关推荐
HySpark2 天前
VAD 与流式 ASR 踩坑复盘及完整解决方案
webrtc·vad·离线语音转写·流式asr·qwen-asr·音频预处理
徐子元竟然被占了!!2 天前
WebRTC协议
webrtc
ZC跨境爬虫2 天前
跟着 MDN 学 HTML day_28:(使用选择器 API 在 DOM 树中进行选择与遍历)
前端·ui·html·音视频·webrtc
Fisher3Star9 天前
mediasoup Transport详解与代码实现
webrtc
Fisher3Star9 天前
mediasoup中Node.js与Worker进程通信机制
网络·webrtc
911hzh10 天前
Flutter WebRTC iOS 原理解析:从 getUserMedia 到 Texture,讲清视频采集、纹理渲染与远端通话链路
flutter·ios·webrtc
shao91851610 天前
第12章Streaming(下):视频应用(1)——项目八:基于WebRTC+YOLO的实时目标检测
yolo·目标检测·webrtc·gradio·视频流·yolov10·流式传输
三十_11 天前
WebRTC 远端画面无法显示:ICE 与 SDP 时序问题深度解析与解决方案
webrtc
metaRTC13 天前
metaRTC8 成功适配 RTOS:开启 MCU/嵌入式实时音视频新时代
单片机·嵌入式硬件·webrtc·实时音视频·rtos
Fisher3Star13 天前
mediasoup中ip与announceAddress配置要点
webrtc·sdp