(暂 X) 仅为假设,不得作为生产口径。需拉真实通话回归 v2 后统一标定。基于 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 最大盲区)。
事件流 glc/nan/lma 做可调可归因的触发器(主),SDK 评分做交叉校验与兜底。置信分级:
| 置信 | 条件 |
|---|---|
| 高 confirmed | 命中 ≥1 事件触发器 且 对应 SDK 评分 ≤ 🔴待定(暂 2) |
| 中 likely | 仅命中事件触发器,或仅 SDK 评分 ≤ 🔴待定(暂 2)(二者其一) |
| 低 review | 仅 SDK 评分 = 🔴待定(暂 3) 等边界信号 |
大盘默认口径 = 高 + 中;告警只用高。
v2 会把主动静音 / Hold / 关摄像头误判成"无声/黑屏"。v4 用 stl 先剔除主动行为再判定 —— 这是 v4 相对 v2 最大的准确率提升。
| 主动行为 | 信号 | 影响 |
|---|---|---|
| 主动静音麦克风 | stl.ty=12 (AudioMute) v=1 | 从 A03 无声扣除 |
| 主动关摄像头 | stl.ty=11 (VideoMute) v=1 | 从 V03 黑屏扣除 |
| 通话 Hold | stl.ty=9 (SessionOnHold) v≠0 | 从 A01/C01 占比扣除 |
解决双重计数:一次网络事件常同时点亮"丢包占比 + 中断 + 卡顿",故分两层:
| 层 | 成员 | 是否独立判坏 |
|---|---|---|
| 症状层(用户可感知) | 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 单次事件兜底。分母 = 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=0 ∥ glc.ty=1 | aps ≤ 🔴待定(暂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=迟到/重复/压缩/拉伸包% |
分母 = 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=2 | — | vbs=黑屏累计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占比% |
分母 = 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≠0 | — | iac=是否接听;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 |
仅统计有通话意图但媒体未建立;正常未接/拒接/取消(rsn=3/4/8)属漏斗,不算坏 call。⚠️ 依赖 rsn/aer 完整枚举表(FootPrintSummaryReason),目前未含。
| # | 问题 | 判定条件 | 涉及字段 |
|---|---|---|---|
| S01 | 媒体建立失败 | iac=1 但 ict 为空 → 媒体没起来 | ict=媒体建立耗时ms(空=失败) |
| S02 | 振铃/推送失败 | 已 invite 但 irg=0 ∥ itr 超时 | irg=是否响铃;itr=invite→响铃ms |
| S03 | 信令异常 | rsc 异常码 ∥ pud 为空 | rsc=信令响应码;pud=对端uid(空=未配对) |
| S04 | 接通过慢 | ict > 🔴待定(暂3000ms)(根因即 R31) | ict=媒体建立耗时ms |
nan.ty 直接对应丢包/RTT/抖动事件;lma 内联拆分本地/对端/中转三段;stl 给齐网络/设备/行为上下文。R 类用"是否出现"归因,问题触发器才用占比,避免双重计数。
| # | 原因 | 判定(🔴待定) | 涉及字段 |
|---|---|---|---|
| R01 | 上行丢包 | nan.ty=1 ∥ sla > 🔴待定(暂5) | nan(ty=1上行丢包尖峰);sla=上行丢包均值% |
| R02 | 下行丢包 | nan.ty=2 ∥ rla > 🔴待定(暂5) | rla=下行丢包均值% |
| R03 | 中转链路丢包 | rla 高但 lma.mdl/lma.pul 均低 → 中转段 | lma=接入网末端(mdl本端下行丢包/pul对端上行丢包) |
| R04/05 | 上/下行延迟高 | lma.mur/lma.mdr 高 ∥ nan.ty=3 | lma.mur/mdr=本端接入上/下行RTT ms |
| R06 | 中转/跨区延迟高 | tra > 🔴待定(暂300) 但 lma 各段低 | tra=传输RTT均值ms |
| R07 | 抖动大 | nan.ty=4 ∥ rja > 🔴待定(暂100) | rja=下行抖动均值ms |
| R08/09 | 切网/频繁切网 | stl.ty=0 变化 ≥1 / >3 次 | stl.ty=0=网络类型(0不可达/5 WiFi…) |
| R10 | VPN | stl.ty=1 v=1 | stl.ty=1=VPN事件 |
| R11 | 带宽不足 | ekb < 🔴待定(暂500) ∥ okb < 🔴待定(暂300) ∥ nan.ty=6 | ekb=带宽估计;okb=实际上行码率kbps |
| R12 | 弱网 | nqs ≤ 🔴待定(暂2) | nqs=网络质量分(1–5) |
| # | 原因 | 判定(🔴待定) | 涉及字段 |
|---|---|---|---|
| R13 | 麦克风未工作 | arv=0 ∥ glc.ty=1 ∥ mpm=0 | arv=采集音量;mpm=麦克风权限 |
| R14 | 摄像头未工作 | glc.ty=2 ∥ cpm=0 | cpm=摄像头权限 |
| R15 | CPU 过高 | 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=1 | btl=电量%;bsm=省电模式 |
| R20 | 低端设备 | ccr ≤ 🔴待定(暂4) AND tmm < 🔴待定(暂3000) | ccr=核数;tmm=总内存MB |
| R21 | 蓝牙路由 | ble=1 ∥ stl.ty=5 频繁变化 | ble=蓝牙音频;stl.ty=5=AudioRoute |
| # | 原因 | 判定(🔴待定) | 涉及字段 |
|---|---|---|---|
| R22/23 | 编/解码耗时长 | vet/vdt > 🔴待定(暂30) | vet/vdt=单帧编/解码耗时ms |
| R24 | 编码器降级 | veq 升高 ∥ stl.ty=10.r 非空 | veq=编码QP;stl.ty=10.r=降质原因 |
| R25 | FEC/PLC 差 | apo 低而 alp/adp 高 | apo=原始包占比% |
| R26 | 对方上行丢包 | lma.pul > 🔴待定(暂5)(内联)∥ join 对端 sla | lma.pul=对端接入上行丢包%(无需join) |
| R27 | 对方设备差 | join rid 对端 vet 高 | rid=配对键 |
| R28 | 对方网络中断 | tbr=0 AND tbs>0 ∥ lma.pdl 极高 | tbr/tbs=累计收/发字节;lma.pdl=对端下行丢包% |
| R29 | 对方 App 后台 | join 对端 stl.ty=7 v=1 | stl.ty=7=前后台(v=1后台) |
| R30 | 服务器选点差 | tip 区域与双方均不一致 AND tra > 🔴待定(暂200) | tip=中转IP;tra=传输RTT |
| R31 | ICE 建立慢 | 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=1 与 glc.ty=1/2 重叠 | 解释后台被抢占采集 |
rid 关联 —— 任一 leg 坏 → 通话坏。lma.pul/pdl 已内联对端接入网,多数对端归因无需 join。vod;视频用 vpd 且仅 vpd>0。glc.pem/nan.pem 为毫秒,需 /1000 对齐秒。vod ≥ 🔴待定(暂5s) 生效;vod < 🔴待定(暂10s) 异常断开走 C04。vod 异常大(> 🔴待定暂2h)且 arv=0 AND apv=0 → 单列,不污染占比。*Score 为 1–5,越高越好,分界🔴待定。偏移 ofm/of 相对 stm。rsn/aer 枚举码表(S 类硬阻塞)· S 类与信令/推送链路表关联 · QP 分编码器标定。