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 期
70Android1.1.0.9 / 8.1.2.4 / 8.3.12.5唐胜、张威回放入口与录像状态 UI 主要依赖 sdRecordStu/权限,但未同步校验 NO_LOCAL_STOARGE 与 SDCardState=0,导致无存储能力设备仍可能暴露回放预期或状态显示异常。
3在线看不到
1 期
70Android8.3.13.3张威、唐胜NVR 通道预览链路在握手后立即被底层判为 PeerOffLine,APP 按现有逻辑只做快速重试,没有把通道离线与临时连接抖动区分开,最终表现为“在线看不到”。
4多端手机端无回放
1 期
70Android1.1.1.6 / 8.3.13.3冉博麟、李国涛(本期未收敛到单一根因)
5设备离线/掉线后无法预览
1 期
70Android · iOS1.1.1.6 / 8.2.2.1 / 8.3.13.3唐胜、张威设备预览链路在收到 TPS_MSG_P2P_OFFLINE 后直接走离线兜底分支,UI 进入“该设备不在线”,而自动恢复逻辑又被离线判断短路,导致用户感知为“掉线后无法再连上”。
6录像回放缺失 — 无 SD 卡的设备被直接引导云存购买(产品设计问题)
1 期
65Android · iOS8.3.12.5 / 8.3.13.3 / 8.3.13.4张威、唐胜、陈宝旺无 SD 卡 + 未开通云存的设备,在 NVR 回放协议响应无效时直接跳转云存购买页,没有任何"为什么没录像"的说明,用户感知是"以前能看现在不能"
7设备二维码模糊/找不到(3 条 8h)
1 期
65—8.3.12.5待定(本期未收敛到单一根因)
8Android NVR 回放/预览偶发不出图,断开重连后恢复
1 期
60Android—唐胜、张威NVR 回放/预览链路在首次 addWatch + 查询录像时间片 阶段存在瞬时失败,UI 侧又把多类失败统一收敛为空/超时,导致用户感知为“不出图,重连才恢复”。
9Android 监控预览 addWatch 失败 + 10 秒循环重试
1 期
60Android8.3.13.3唐胜Android 端 LibImpl.startPlay 把 addWatch 返回的 P2P 断连错误码(-1)通过 if (ret == SDK_CONSTANT.ERR_P2P_DISCONNECTED) ret = 0; 强制归零,导致上层误以为流启动成功,进入 10 秒循环重试;用户看到的"长时间缓冲"实质是 10 秒 × N 次的循环重试视觉感受
10iOS 8.3.12.6 灰度放量新症状 4 期累计扩散
1 期
60iOS8.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/30Android 8.3.13.3 × 1 + 相关描述 × ~4 条
共性30/30Android 多版本(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/30iOS 单条(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 UVSiotDevConnect UV
07-24186,5761,100,221
07-30178,8511,068,060
07-31(半天)43,856421,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 离线处理 ...
}

问题定位:

  1. m_connect_ok = false 后,PreviewPlayerView 显示"该设备不在线"
  2. 但设备实际物理在线(P2P 信令层面断了)
  3. SDK 自动重连机制在尝试,但 TPS_MSG_P2P_OFFLINE 反复上报
  4. 用户看到的现象:"视频播放中 ↔ 该设备不在线" 快速交替

修复锚点:

  • 根因:设备 P2P 信令通道不稳定(网络/服务器/设备侧),SDK 重连机制在不稳定状态下反复触发 OFFLINE 通知
  • 优化方向:
  1. LibImpl.deviceOffline() 中增加"同一设备 N 秒内 OFFLINE 次数阈值",超过阈值则不重复弹提示(减少无效通知)
  2. PreviewPlayerView 增加 OFFLINE 抖动过滤(OFFLINE→ONLINE→OFFLINE 快速切换时,显示稳定状态而非切换)
  3. 检查设备列表中 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:3274TPS_MSG_P2P_OFFLINE 回调
状态更新LibImpl.java:3083-3115deviceOffline() 设置 m_connect_ok=false
UI 反馈LibImpl.java:3285-3298setTipText(R.string.dlg_device_offline_tip)
预览层PreviewPlayerView.java接收 OFFLINE 消息,显示"该设备不在线"

问题 B:iOS 灵敏度丢失

层级文件关键逻辑
布防入口STDeviceListViewModel.m:862setAlarmPowerForCamera
ARM 命令STDeviceListViewModel.m:895CMD_SET_IOT_ALARM_CONFIG XML
灵敏度 UIIPCAlarmSetViewController.m:576-599viewWillAppear 读灵敏度
灵敏度控件STCheckSensitiveCell.mmapGetSensitivity 映射

置信度声明

问题置信度原因
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 文件成功—
反馈列表✅ 正常—

后续建议

  1. Android P2P 不稳定:建议在 PreviewPlayerView 增加 OFFLINE 抖动过滤;查 p2pServer 分配策略
  2. iOS 布防灵敏度:需联系用户补 Logan(包含 ARM 操作的完整日志),或查固件在收到 HumanAlarmConfig 时的行为

本消息由 Seetong小助手 自动生成,欧阳荣 监督发布。

🗂️历史期次

查看全部历史期次(近 90 天)→