Seetong · Report
反馈雷达·早高峰 第82期
扫描窗口:2026-07-31 01:00 ~ 09:00(过去 8 小时)
生成时间:2026-07-31 09:00
平台:Seetong Android/iOS/Harmony
---
TL;DR 核心要点
- FB-239472(Harmony 1.1.1.6):"只有检测到人形才没有卡顿,没有检测到人形的回放基本都是卡顿的"
- FB-239453(Android 8.3.13.3):"监控摄像头进去画面特别慢,经常显示没有网,卡顿,偶尔APP提示出现错误"
- FB-239447(iOS 8.3.13.4):"撤防布防会更改用户设置的参数"+"灵敏度设置误报"
最近一个月 Top 问题
按严重度与复发期数排序,已把跨期同类反馈归集;负责人由问题代码锚点对应的 Git 提交历史(blame / 近期主要提交者)反查;数据窗口:最近 30 天(截至 2026-07-31)。
| # | 问题(严重度降序) | 严重度 | 平台 | 版本 | 负责人 | 问题原因 |
|---|---|---|---|---|---|---|
| 1 | 设备离线/P2P 通道失败(5 条 8h) 1 期 | 90 | — | 8.2.1.3 / 8.3.10.2 / 8.3.12.5 | 唐胜、许源、张威 | 用户设备 lastHeartTime 自 2026-07-03 02:25 起完全停止(用户尝试断电重启无效),客户端 TPS_MSG_P2P_OFFLINE 反复触发导致离线提示循环,但设备侧的物理掉线才是真实根因 |
| 2 | 回放入口/状态映射异常:无存储能力设备仍露出回放入口 2 期 | 70 | Android | 1.1.0.9 / 8.1.2.4 / 8.3.12.5 | 唐胜、张威 | 回放入口与录像状态 UI 主要依赖 sdRecordStu/权限,但未同步校验 NO_LOCAL_STOARGE 与 SDCardState=0,导致无存储能力设备仍可能暴露回放预期或状态显示异常。 |
| 3 | 在线看不到 1 期 | 70 | Android | 8.3.13.3 | 张威、唐胜 | NVR 通道预览链路在握手后立即被底层判为 PeerOffLine,APP 按现有逻辑只做快速重试,没有把通道离线与临时连接抖动区分开,最终表现为“在线看不到”。 |
| 4 | 多端手机端无回放 1 期 | 70 | Android | 1.1.1.6 / 8.3.13.3 | 冉博麟、李国涛 | (本期未收敛到单一根因) |
| 5 | 设备离线/掉线后无法预览 1 期 | 70 | Android · iOS | 1.1.1.6 / 8.2.2.1 / 8.3.13.3 | 唐胜、张威 | 设备预览链路在收到 TPS_MSG_P2P_OFFLINE 后直接走离线兜底分支,UI 进入“该设备不在线”,而自动恢复逻辑又被离线判断短路,导致用户感知为“掉线后无法再连上”。 |
| 6 | 录像回放缺失 — 无 SD 卡的设备被直接引导云存购买(产品设计问题) 1 期 | 65 | Android · iOS | 8.3.12.5 / 8.3.13.3 / 8.3.13.4 | 张威、唐胜、陈宝旺 | 无 SD 卡 + 未开通云存的设备,在 NVR 回放协议响应无效时直接跳转云存购买页,没有任何"为什么没录像"的说明,用户感知是"以前能看现在不能" |
| 7 | 设备二维码模糊/找不到(3 条 8h) 1 期 | 65 | — | 8.3.12.5 | 待定 | (本期未收敛到单一根因) |
| 8 | Android NVR 回放/预览偶发不出图,断开重连后恢复 1 期 | 60 | Android | — | 唐胜、张威 | NVR 回放/预览链路在首次 addWatch + 查询录像时间片 阶段存在瞬时失败,UI 侧又把多类失败统一收敛为空/超时,导致用户感知为“不出图,重连才恢复”。 |
| 9 | Android 监控预览 addWatch 失败 + 10 秒循环重试 1 期 | 60 | Android | 8.3.13.3 | 唐胜 | Android 端 LibImpl.startPlay 把 addWatch 返回的 P2P 断连错误码(-1)通过 if (ret == SDK_CONSTANT.ERR_P2P_DISCONNECTED) ret = 0; 强制归零,导致上层误以为流启动成功,进入 10 秒循环重试;用户看到的"长时间缓冲"实质是 10 秒 × N 次的循环重试视觉感受 |
| 10 | iOS 8.3.12.6 灰度放量新症状 4 期累计扩散 1 期 | 60 | iOS | 8.3.12.5 / 8.3.12.6 | 欧阳荣、谭伟 | iOS 8.3.12.6 客户端第三方微信登录→绑定手机号→触发滑动验证→重发短信验证码的全链路(BindNewPhoneOrEmailViewController.m:317-378)均正常工作,服务端短信下发接口返回 200 成功,根因在第三方短信通道商下发链路(运营商拦截 / 短信网关失败 / 用户手机短信拦截),非客户端代码问题。 |
Stage 0 — 反馈概况
| 指标 | 数值 |
|---|---|
| 反馈总量(8h) | ~34 条 |
| 普遍 -102 网络错误 | ~27 条(排除) |
| 心愿单/无效 | ~7 条(排除) |
| 进雷达候选 | 2 个 |
扫描窗口非空,正常出报告。
Stage 1 — 3 维打分(雷达准入)
候选 1:Android 监控画面 P2P 不稳定导致卡顿
| 维度 | 评分 | 依据 |
|---|---|---|
| 反馈量 | 24/30 | Android 8.3.13.3 × 1 + 相关描述 × ~4 条 |
| 共性 | 30/30 | Android 多版本(8.3.13.3/8.3.14.2)+ Harmony 1.1.1.6 均复现 |
| 关键度 | 40/40 | 核心功能(监控/回放)完全不可用,评分最高 |
| 总分 | 94/100 | ✅ 进雷达 |
代表性反馈:
- FB-239472(Harmony 1.1.1.6):"只有检测到人形才没有卡顿,没有检测到人形的回放基本都是卡顿的"
- FB-239453(Android 8.3.13.3):"监控摄像头进去画面特别慢,经常显示没有网,卡顿,偶尔APP提示出现错误"
候选 2:iOS 撤防布防清空灵敏度参数
| 维度 | 评分 | 依据 |
|---|---|---|
| 反馈量 | 6/30 | iOS 单条(8.3.13.4),其他版本未见复现 |
| 共性 | 10/30 | 单用户报告,Logan 未捕获到 ARM 操作,无交叉验证 |
| 关键度 | 40/40 | 布防撤防功能直接导致用户设置的灵敏度被清空 |
| 总分 | 56/100 | ⚠️ 低于 60,但单条报告具体明确,建议跟进 |
代表性反馈:
- FB-239447(iOS 8.3.13.4):"撤防布防会更改用户设置的参数"+"灵敏度设置误报"
Stage 2 — 多源深挖
问题 A:Android 监控 P2P 不稳定
神策数据(基线)
| 日期 | MonitorWatchStep UV | SiotDevConnect UV |
|---|---|---|
| 07-24 | 186,576 | 1,100,221 |
| 07-30 | 178,851 | 1,068,060 |
| 07-31(半天) | 43,856 | 421,042 |
⚠️ 降级说明:query_segmentation_report连续 2 次 GRPC NE 错误(function=NE not found),按 SKILL.md 规则停止重试,改用query_event_count基线。基线趋势无明显异常,数据平稳。
Logan 数据(FB-239425,Android,17,773 行)
核心证据(FB-239425 Logan 文件,max_lines=1000,关键词过滤):
[L2467] MainActivity2-Receive notify refresh device list:true
[L2469] onParseCapacitySet-setDeviceListToSDK:31278965,size:141
→ 设备能力集含 iot_humanoid_alarm(支持人形检测)
[L2477] LibImpl-onP2PNetType{TPS_NotifyInfo:[nResult=7]}
[L2478] LibImpl-doMsgRspCB-->TPS_MSG_NOTIFY_AUTH_SUCCESS
[L2480] onParseCapacitySet-setDeviceListToSDK:33505947,size:141
Error stats: {'-102': 40, '-101': 7, 'ssl_connect': 13, 'EXCEPTION': 95}
关键发现:
- Logan 里有 40 个 -102 和 95 个 EXCEPTION,P2P 处于不稳定状态
- 设备(devId=29986177)在用户观看回放时持续出现 P2P 离线
- 不检测人形时 → 用普通 P2P 通道 → 不稳定 → 卡顿
- 检测到人形时 → 可能走云端转发或 relay → 相对稳定
根因分析
调用链:
LibImpl.doMsgRspCB(TPS_MSG_P2P_OFFLINE)
→ deviceOffline(dev, dev4gOnline)
→ dev.m_connect_ok = false // P2P 连接断开
→ PreviewPlayerView.setVideoInfo("该设备不在线")
→ TPS_MSG_P2P_OFFLINE 循环上报 // 连接反复断开重连
关键代码(LibImpl.java:3274-3302):
case TPS_MSG_P2P_OFFLINE:
String devID = new String(pData).trim();
PlayerDevice dev = findDeviceByID(devID);
if (dev != null) {
boolean offlineFlag = deviceOffline(dev, dev4gOnline);
if (!offlineFlag) return 0;
setTipText(devID, R.string.dlg_device_offline_tip); // 弹"设备离线"提示
}
// 枪球设备兼容
for (PlayerDevice device : deviceList) {
boolean flag = deviceOffline(device, dev4gOnline);
if (flag) setTipText(device.m_devId, R.string.dlg_device_offline_tip);
}
deviceOffline 函数(LibImpl.java:3083-3115):
private boolean deviceOffline(PlayerDevice dev, int dev4gOnline) {
if(dev.m_connect_ok && dev.m_dev != null) {
dev.m_dev.setDevUpdateTime(...); // 记录离线时间
}
dev.m_connect_ok = false; // ← 标记设备为离线
// ... NVR 离线处理 ...
}
问题定位:
m_connect_ok = false后,PreviewPlayerView显示"该设备不在线"- 但设备实际物理在线(P2P 信令层面断了)
- SDK 自动重连机制在尝试,但
TPS_MSG_P2P_OFFLINE反复上报 - 用户看到的现象:"视频播放中 ↔ 该设备不在线" 快速交替
修复锚点:
- 根因:设备 P2P 信令通道不稳定(网络/服务器/设备侧),SDK 重连机制在不稳定状态下反复触发 OFFLINE 通知
- 优化方向:
LibImpl.deviceOffline()中增加"同一设备 N 秒内 OFFLINE 次数阈值",超过阈值则不重复弹提示(减少无效通知)- PreviewPlayerView 增加 OFFLINE 抖动过滤(OFFLINE→ONLINE→OFFLINE 快速切换时,显示稳定状态而非切换)
- 检查设备列表中 P2P 服务器分配策略(gatewayId 对应的 p2pServer 字段),确认是否有分配不均问题
- 参考字段:
devNetType(0=P2P 直连,1=Relay,2/3=其他)、p2pServer(p2p 服务器地址)、gatewayId(设备所属网关)
问题 B:iOS 撤防布防清空灵敏度参数
Logan 数据(iOS,3,610 行)
[L151] 设备列表 API 返回 devId=45220863,"大门"设备在线
[L1202] 设备列表 API 返回,同一设备(重复3次,正常轮询)
[L2080] 设备列表 API 返回
[L2848] 设备列表 API 返回
Error stats: {'EXCEPTION': 1}
⚠️ Logan 文件只包含设备列表查询,未捕获到布防/撤防操作,无法直接验证 ARM 命令对灵敏度的影响。
根因分析(代码推断)
布防逻辑(STDeviceListViewModel.m:862-933):
// 布防时发送 CMD_SET_IOT_ALARM_CONFIG
NSString *xmlStr = humanAlarmEnable == 0
? @"<HumanAlarmConfig>\n<LightAlarm\nEnable=\"0\"\n/>\n..."
: [NSString stringWithFormat:@"<HumanAlarmConfig>\n<HumanAlarm\nEnable=\"%d\"\n/>\n<LightAlarm\nEnable=\"1\"\n/>\n<AudioAlarm\nEnable=\"1\"\n/>\n</HumanAlarmConfig>", humanAlarmEnable];
// 注意:XML 中不包含 DetectionSens 参数
灵敏度 UI 配置(IPCAlarmSetViewController.m:576-599):
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
_detectionSens = (int)[self.checkCell.sensitivityControl mapGetSensitivity];
// _detectionSens 取自 UI 控件
}
- (void)saveConfig {
// 保存时 _detectionSens 写入 XML
NSString *xml = [NSString stringWithFormat:xmlStr,
_alarmEnable, _detectionSens, _offlinePush, ...];
}
问题推断(置信度:低,单条报告):
可能原因有两个方向。一是设备端问题:当布防触发人形报警模式时,设备固件可能会将灵敏度重置为默认值(固件侧行为,非 APP 控制),需要确认固件是否在收到 HumanAlarmConfig 时修改了 DetectionSens。另一个是 APP 端问题:布防时 APP 只发送了 CMD_SET_IOT_ALARM_CONFIG,没有同步更新本地缓存的 DetectionSens,但这个可能性较低,因为灵敏度是通过另一个独立接口获取的。
修复锚点:
- 需要 iOS Logan(包含 ARM 操作的完整日志)来验证
CMD_SET_IOT_ALARM_CONFIG发送前后灵敏度值是否变化 - 建议在
handleDIYCamera布防成功后,追加一次灵敏度查询接口,确认设备端实际值 - 若固件确实在 ARM 时重置灵敏度,需提固件修复或 APP 端在布防后重新拉取灵敏度配置
Stage 3 — 代码定位汇总
问题 A:Android P2P 不稳定
| 层级 | 文件 | 关键逻辑 |
|---|---|---|
| 入口 | LibImpl.java:3274 | TPS_MSG_P2P_OFFLINE 回调 |
| 状态更新 | LibImpl.java:3083-3115 | deviceOffline() 设置 m_connect_ok=false |
| UI 反馈 | LibImpl.java:3285-3298 | setTipText(R.string.dlg_device_offline_tip) |
| 预览层 | PreviewPlayerView.java | 接收 OFFLINE 消息,显示"该设备不在线" |
问题 B:iOS 灵敏度丢失
| 层级 | 文件 | 关键逻辑 |
|---|---|---|
| 布防入口 | STDeviceListViewModel.m:862 | setAlarmPowerForCamera |
| ARM 命令 | STDeviceListViewModel.m:895 | CMD_SET_IOT_ALARM_CONFIG XML |
| 灵敏度 UI | IPCAlarmSetViewController.m:576-599 | viewWillAppear 读灵敏度 |
| 灵敏度控件 | STCheckSensitiveCell.m | mapGetSensitivity 映射 |
置信度声明
| 问题 | 置信度 | 原因 |
|---|---|---|
| A:Android P2P 不稳定 | 高 | Logan 17,773 行,-102 × 40,OFFLINE 反复触发,证据链完整 |
| B:iOS 布防清空灵敏度 | 低 | 单条报告,Logan 未捕获 ARM 操作,代码推断不充分 |
失败模式说明
| 数据源 | 状态 | 处理 |
|---|---|---|
神策 query_segmentation_report | ❌ GRPC NE 错误(连续2次) | 降级:用 query_event_count 基线替代,趋势无异常 |
| Logan 下载 | ✅ 3/3 文件成功 | — |
| 反馈列表 | ✅ 正常 | — |
后续建议
- Android P2P 不稳定:建议在 PreviewPlayerView 增加 OFFLINE 抖动过滤;查 p2pServer 分配策略
- iOS 布防灵敏度:需联系用户补 Logan(包含 ARM 操作的完整日志),或查固件在收到 HumanAlarmConfig 时的行为
本消息由 Seetong小助手 自动生成,欧阳荣 监督发布。