created by snowlyg.

背景

此前已在局域网环境中完成音视频通话方案落地(详见:如何在复杂的局域网网络情况下,保证视频电话功能的稳定使用?)。本次目标是在原有架构基础上升级支持公网场景,因此引入 coturn 作为中继服务,并对不同网络/不同 Android 版本设备进行兼容性验证。

本文重点记录排查思路与过程(以及关键转折点),而不是“只给结论”的教程。

问题描述

现象:Android 8Android 14 设备进行视频通话时,Android 14 端有约 90% 概率在通话 30s–60s 内自动退出;Android 8 端则表现正常。仍有约 10% 概率双方可持续正常通话。

图1

图1

初期在日志/抓包中观察到一条 127.0.0.x 相关的中继通道协商失败(timeout),并且几乎总是在该报错出现后通话被中断,因此一度误以为这是根因。

但后续确认:该 timeout 本身并不会直接导致通话中断,属于“误导性现象”。真正触发中断的是 WebRTC 连接状态变化:

排查过程

测试同学反馈:设备在公司内网通话正常;当接入外部网络(手机热点、移动 WiFi 等)进行通话时,大约 30s 左右会自动挂断。

整个排查过程比较曲折,前后持续近 1 个月。

第 1 阶段:按网络场景复现与隔离变量

观察到当音视频服务部署在公司内网服务器时:

为避免“内网直连”掩盖问题,将音视频服务部署到外网服务器,确保:

阶段结论:排除“不同网络环境导致通话质量差”这一方向(问题稳定复现,且与是否强制走中继强相关)。

第 2 阶段:排除 WebRTC 版本兼容/库 Bug