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 对象

=> 问题解决

玩~

相关推荐
探鸽小钛2 天前
4G 终端 ES8311 - 挂断一次,下次说话就没声了之解决办法
物联网·音视频·嵌入式·esp32·webrtc
草根大哥3 天前
AI 编程实践之自建视频CDN
音视频·webrtc·低延迟直播·视频cdn·低延迟cdn
EasyCVR3 天前
应急指挥怕延迟?聊聊视频汇聚/视频融合/视频分析EasyCVR平台WebRTC低延迟方案
音视频·webrtc·easycvr
TrueDei5 天前
WebRTC ICE 候选变成 mDNS 地址导致连接失败:原因分析与解决方案
webrtc
中屹指纹浏览器svip7 天前
WebRTC泄露是什么,怎么关闭?
webrtc
海边捡石子8 天前
从零设计一个通用智能电话平台:FreeSWITCH + ESL + AI 实战架构
人工智能·架构·webrtc
音视频牛哥9 天前
不换摄像机,也能接入 WebRTC?SmartMediaKit RTSP/RTMP 转 WHIP 技术实践
音视频·webrtc·smartmediakit·rtsp转whip·rtmp转whip·whip推流·rtsp转webrtc播放
直播技术开发交流11 天前
Android 端 WHIP 协议推流技术实践:相机/录屏/多路转发WHIP实现测试
webrtc·android whip·rtsp转whip·毫秒级实时媒体流·whip低延时推送·whip推送实现·rtsp转webrtc
程序员阿明12 天前
docker搭建视频流服务go2rtc,webRTC
docker·容器·webrtc
O。O蛋黄酥啊15 天前
实时语音 Agent 开发完全指南:从 ASR/TTS 到 WebRTC/VAD 的链路拆解
大模型·webrtc·语音识别·tts·asr