⚠ MOCK · Lighthouse Briefings · 本 spec 中阈值均为待定示例,标注 REAL 前不作准。
← Lighthouse Briefings · analysis · 2026-06-19
analysis kVoipSummaryStat · V4

VoIP V4 坏通话定义 · part1 判定标准

基于 kVoipSummaryStat 的 v4 bad-call 判定:混合引擎 + 主动行为排除 + 两层去重,继承 v2 的 A/V/C+R 骨架。全部阈值待标定。
🔴 阈值状态:全部「待定」。 下文所有数值阈值(占比 %、时长 ms/s、SDK 评分分界、次数)均为待标定初值,括号内 (暂 X) 仅为假设,不得作为生产口径。需拉真实通话回归 v2 后统一标定。

00 是什么 · 为什么

基于 V4 SDK 的 kVoipSummaryStat 端到端埋点(每通话每条 leg 一份),判定一通通话是否存在质量问题,用于事后分析、质量大盘、告警,并与 v2 口径做新老对比。本定义继承 v2 的 A/V/C + R 编号骨架,仅替换底层字段与判定引擎,追加 v4 新增能力(A06 / V07 / C05–C07 / S 类 / R33–R35)。

三个支点:① SDK 自带质量判决(aqa/vqs/nqs/oqs 1–5 分)做校验/兜底;② 事件流 glc/nan 把"占比/单次时长"从估算变精算;③ stl 状态轴区分"故障"与"用户主动行为"(v2 最大盲区)。

00 判定引擎:混合判定

事件流 glc/nan/lma 做可调可归因的触发器(主),SDK 评分做交叉校验与兜底。置信分级:

置信条件
高 confirmed命中 ≥1 事件触发器 对应 SDK 评分 ≤ 🔴待定(暂 2)
中 likely仅命中事件触发器,或仅 SDK 评分 ≤ 🔴待定(暂 2)(二者其一)
低 review仅 SDK 评分 = 🔴待定(暂 3) 等边界信号

大盘默认口径 = 高 + 中;告警只用高。

00·5 前置过滤:排除用户主动行为 v4 新增

v2 会把主动静音 / Hold / 关摄像头误判成"无声/黑屏"。v4 用 stl 先剔除主动行为再判定 —— 这是 v4 相对 v2 最大的准确率提升。

主动行为信号影响
主动静音麦克风stl.ty=12 (AudioMute) v=1从 A03 无声扣除
主动关摄像头stl.ty=11 (VideoMute) v=1从 V03 黑屏扣除
通话 Holdstl.ty=9 (SessionOnHold) v≠0从 A01/C01 占比扣除

00·6 两层划分 · 症状去重 · 占比双条件

解决双重计数:一次网络事件常同时点亮"丢包占比 + 中断 + 卡顿",故分两层:

成员是否独立判坏
症状层(用户可感知)A·V·C01/C02/C04·S✅ 参与判坏 + 去重
网络状态层(链路条件/上游成因)🔹C03/C05/C06/C07 · R01–R12❌ 仅归因,不单独判坏

坏 call 成立 = 症状层任一命中的 OR;用 rid 上卷两 leg,任一 leg 坏 → 通话坏

主症状去重:多症状命中时按优先级取唯一 primary(其余记 secondary,不重复计入问题分布)。优先级(高→低):① C01/C02 连接中断 → ② A03/V03 无声·黑屏 → ③ A02/V05 单次长卡顿 → ④ A01/V01 卡顿占比 → ⑤ V02/V04 模糊·V07 低帧·A06 音质劣化 → ⑥ A04/V06 首帧慢·C04 短通话。

占比双条件(解决长通话稀释):所有占比类触发统一为 占比 > X% OR 累计绝对时长 > N 秒,任一即命中(X、N 均🔴待定)。再叠加 A02/V05/C02 单次事件兜底。

01 音频问题 A

分母 = vod voipDuration(秒)

#问题判定条件(阈值🔴待定)SDK 校验涉及字段
A01音频卡顿占比高Σ glc.pem[ty=7]/(vod×1000) > 🔴待定(暂5%) OR 累计 > 🔴待定(暂N秒)aqa ≤ 🔴待定(暂2)glc=卡顿数组(ty=7音频卡顿,pem时长ms);vod=在通时长(s);aqa=音频质量均分(1–5)
A02单次音频卡顿过长max(glc.pem[ty=7]) > 🔴待定(暂10000ms)glc.pem=单段卡顿ms;aft=音频卡顿阈值ms
A03a我方无声(本 leg)扣本 leg 主动静音后:arv=0glc.ty=1aps ≤ 🔴待定(暂2)arv=麦克风采集音量(0=无声);glc.ty=1=麦克风采集失败;aps=播放质量分
A03b对方无声(需 join)apv=0 且 join rid 对端无主动静音;对端缺失降级中置信aps ≤ 🔴待定(暂2)apv=播放音量(0=对方无声);rid=配对键
A04首音频帧慢faf > 🔴待定(暂3000ms)faf=接通→首音频帧延迟ms
A05音频质量低(兜底)aqa ≤ 🔴待定(暂2) OR aqm = 🔴待定(暂1)aqm=音频质量最低窗分
A06音质劣化无卡顿apo < 🔴待定(暂80%) 且 alp+adp+asp+atp 偏高aqa ≤ 🔴待定(暂2)apo=原始包占比%;alp/adp/asp/atp=迟到/重复/压缩/拉伸包%

02 视频问题 V

分母 = vpd videoPlayDuration(秒),仅当 vpd>0 生效

#问题判定条件(阈值🔴待定)SDK 校验涉及字段
V01视频卡顿占比高vfp > 🔴待定(暂5%)(SDK 已算)∥ glc 法 OR 累计 > 🔴待定(暂N秒)vqs ≤ 🔴待定(暂2)vfp=视频卡顿占比%(=vfd/vpd);vpd=视频渲染时长(s);vqs=视频质量分
V02视频模糊/低质分辨率 stl.ty=10 v<🔴待定(暂360) 占比 > 🔴待定(暂5%) ∥ veq > 🔴待定(暂35,按编码器标定)vqs ≤ 🔴待定(暂2)stl.ty=10=分辨率(v=像素高);veq=编码QP(越低越好);vec=编码器
V03黑屏扣主动关摄像头后:vbs 占比/时长超 🔴待定glc.ty=2vbs=黑屏累计ms;glc.ty=2=摄像头采集失败
V04单次模糊过长单段低分辨率 > 🔴待定(暂10000ms)stl.ty=10=分辨率事件
V05单次视频卡顿过长max(glc.pem[ty=6]) > 🔴待定(暂10000ms)glc.pem(ty=6)=单段视频卡顿ms
V06首视频帧慢fvf > 🔴待定(暂5000ms)fvf=接通→首视频帧延迟ms
V07帧率低/卡顿感vpf < 🔴待定(暂12fps) ∥ vjp 偏高vqs ≤ 🔴待定(暂2)vpf=渲染帧率fps;vjp=jank占比%

03 连接问题 C

分母 = vod(秒)· 🔹 = 网络状态层(仅归因,不单独判坏)

#问题判定条件(阈值🔴待定)SDK 校验涉及字段
C01连接中断占比高Σ glc.pem[ty=5]/(vod×1000) > 🔴待定(暂5%) OR 累计 > 🔴待定(暂N秒)nqs ≤ 🔴待定(暂2)glc(ty=5 Connecting媒体中断);nqs=网络质量分
C02单次中断过长max(glc.pem[ty=5]) > 🔴待定(暂10000ms)glc.pem(ty=5)=单段中断ms
C04短通话异常断开iac=1 AND vod < 🔴待定(暂10s) AND aer≠0iac=是否接听;aer=异常结束原因(非0=异常)
🔹C03高延迟占比高Σ nan.pem[ty=3]/(vod×1000) > 🔴待定(暂5%)tra > 🔴待定(暂300)nan=网络异常(ty=3 RTT尖峰);tra=传输RTT均值ms
🔹C05重连频繁rcc > 🔴待定(暂3)rcc=ICE重分配次数
🔹C06严重丢包占比高Σ nan.pem[ty=1或2]/(vod×1000) > 🔴待定(暂5%)sla/rla > 🔴待定(暂5)nan(ty=1上行/2下行丢包);sla/rla=上/下行丢包均值%
🔹C07带宽塌方nan.ty=6 (BWECrash)🔴待定(暂1) ∥ ekb < 🔴待定(暂500)nan.ty=6=带宽骤降>50%;ekb=带宽估计kbps

04 接通失败 S 与通话质量分开统计

仅统计有通话意图但媒体未建立;正常未接/拒接/取消(rsn=3/4/8)属漏斗,不算坏 call。⚠️ 依赖 rsn/aer 完整枚举表(FootPrintSummaryReason),目前未含。

#问题判定条件涉及字段
S01媒体建立失败iac=1ict 为空 → 媒体没起来ict=媒体建立耗时ms(空=失败)
S02振铃/推送失败已 invite 但 irg=0itr 超时irg=是否响铃;itr=invite→响铃ms
S03信令异常rsc 异常码 ∥ pud 为空rsc=信令响应码;pud=对端uid(空=未配对)
S04接通过慢ict > 🔴待定(暂3000ms)(根因即 R31)ict=媒体建立耗时ms

05 根因维度 R

nan.ty 直接对应丢包/RTT/抖动事件;lma 内联拆分本地/对端/中转三段;stl 给齐网络/设备/行为上下文。R 类用"是否出现"归因,问题触发器才用占比,避免双重计数。

网络类

#原因判定(🔴待定)涉及字段
R01上行丢包nan.ty=1sla > 🔴待定(暂5)nan(ty=1上行丢包尖峰);sla=上行丢包均值%
R02下行丢包nan.ty=2rla > 🔴待定(暂5)rla=下行丢包均值%
R03中转链路丢包rla 高但 lma.mdl/lma.pul 均低 → 中转段lma=接入网末端(mdl本端下行丢包/pul对端上行丢包)
R04/05上/下行延迟高lma.mur/lma.mdr 高 ∥ nan.ty=3lma.mur/mdr=本端接入上/下行RTT ms
R06中转/跨区延迟高tra > 🔴待定(暂300) 但 lma 各段低tra=传输RTT均值ms
R07抖动大nan.ty=4rja > 🔴待定(暂100)rja=下行抖动均值ms
R08/09切网/频繁切网stl.ty=0 变化 ≥1 / >3 次stl.ty=0=网络类型(0不可达/5 WiFi…)
R10VPNstl.ty=1 v=1stl.ty=1=VPN事件
R11带宽不足ekb < 🔴待定(暂500) ∥ okb < 🔴待定(暂300) ∥ nan.ty=6ekb=带宽估计;okb=实际上行码率kbps
R12弱网nqs ≤ 🔴待定(暂2)nqs=网络质量分(1–5)

设备类

#原因判定(🔴待定)涉及字段
R13麦克风未工作arv=0glc.ty=1mpm=0arv=采集音量;mpm=麦克风权限
R14摄像头未工作glc.ty=2cpm=0cpm=摄像头权限
R15CPU 过高vet/vdt > 🔴待定(暂30)vet/vdt=单帧编/解码耗时ms
R16内存不足lme=1 OR amm < 🔴待定(暂200)lme=低内存告警;amm=可用内存MB
R17设备过热tts ≥ 🔴待定(暂2) ∥ stl.ty=4 v≥🔴待定(暂2)tts=热状态(0..4);stl.ty=4=Thermal
R18/19低电/省电btl < 🔴待定(暂10) / bsm=1btl=电量%;bsm=省电模式
R20低端设备ccr ≤ 🔴待定(暂4) AND tmm < 🔴待定(暂3000)ccr=核数;tmm=总内存MB
R21蓝牙路由ble=1stl.ty=5 频繁变化ble=蓝牙音频;stl.ty=5=AudioRoute

编解码 · 对方侧 · 服务端 · v4 新增

#原因判定(🔴待定)涉及字段
R22/23编/解码耗时长vet/vdt > 🔴待定(暂30)vet/vdt=单帧编/解码耗时ms
R24编码器降级veq 升高 ∥ stl.ty=10.r 非空veq=编码QP;stl.ty=10.r=降质原因
R25FEC/PLC 差apo 低而 alp/adpapo=原始包占比%
R26对方上行丢包lma.pul > 🔴待定(暂5)(内联)∥ join 对端 slalma.pul=对端接入上行丢包%(无需join)
R27对方设备差join rid 对端 vetrid=配对键
R28对方网络中断tbr=0 AND tbs>0lma.pdl 极高tbr/tbs=累计收/发字节;lma.pdl=对端下行丢包%
R29对方 App 后台join 对端 stl.ty=7 v=1stl.ty=7=前后台(v=1后台)
R30服务器选点差tip 区域与双方均不一致 AND tra > 🔴待定(暂200)tip=中转IP;tra=传输RTT
R31ICE 建立慢ict > 🔴待定(暂3000)ict=媒体建立耗时ms
R32服务器超时断开aer≠0 AND rsn 为超时码aer=异常结束;rsn=结束原因枚举
R33用户主动行为(非故障)stl.ty=11/12 Mute ∥ ty=9 Hold用于排除误判(见 00·5)
R34带宽塌方nan.ty=6 (BWECrash)解释突发卡顿/降码
R35本机 App 后台stl.ty=7 v=1glc.ty=1/2 重叠解释后台被抢占采集

06 约定

待办:全部阈值数据标定(回归 v2)· rsn/aer 枚举码表(S 类硬阻塞)· S 类与信令/推送链路表关联 · QP 分编码器标定。