Seetong · Report
🎯 Seetong 问题雷达 17:00 第252期
时间窗口:2026-10-24 09:06:54~2026-10-24 17:01:02(Asia/Shanghai)
TL;DR 核心要点
- 🟠 iOS 8.4.1.6 的 NVR 人形报警时间固定快约 60 分钟。反馈 259287 在 12 次前台报警中,App 本地收到时间与推送正文时间稳定相差 3596~3597 秒;同一手机对另一设备的报警时间基本准确,偏差集中在 NVR 19584833。严重度 70 / 100,现象置信度强,根因置信度中,新增任务 T-20261024-170425-9d21。
- 🟠 跨端 KMP 报警缩略图点击被分流为大图预览,原“点图片看报警视频”的入口退化。反馈 259253 的日志记录 5 次缩略图点击均进入图片预览,没有进入消息整行回放;同一天另有 HarmonyOS 259266 反馈“报警拍的视频怎么成照片了”。严重度 70 / 100,交互回归置信度高,新增任务 T-20261024-170603-cfd1。
- 反馈 259287:2026-10-24 15:35,iOS 8.4.1.6,iPhone、iOS 18.3.1,广东深圳。反馈原文只有“时间不准确”,但 Logan 和附件日志覆盖了完整故障时段。
最近一个月 Top 问题
按严重度与复发期数排序,已把跨期同类反馈归集;负责人由问题代码锚点对应的 Git 提交历史(blame / 近期主要提交者)反查;数据窗口:最近 30 天(截至 2026-10-24)。
| # | 问题(严重度降序) | 严重度 | 平台 | 版本 | 负责人 | 问题原因 |
|---|---|---|---|---|---|---|
| 1 | HarmonyOS `1.1.2.3` 多用户离线与核心视频链路失效 21 期 · 175 条反馈 | 100 | Android · HarmonyOS | 1.1.1.11 / 8.4.1.6 / 1.1.2.3 | 唐胜、陈宝旺、冉博麟、谭伟 | HarmonyOS 客户端把 P2P 瞬时离线写成本地持久状态,并在后续在线判断中优先使用这个旧值,可能导致设备已恢复在线却仍显示离线;回放离线态和播放错误透传不足则放大了用户的“看不到画面”体验。 |
| 2 | Android 与 iOS 8.4.1.6 报警功能突然失效与通知不达 1 期 · 3 条反馈 | 90 | Android · iOS | 8.4.1.6 | 唐胜、许源 | 现有客户端样本表明 Android 通知权限与 token 注册均成功,故障更接近“服务端未生成报警或推送任务未送达”,但神策缺少报警生成与推送到达事件,iOS 样本又混合了通知权限关闭,当前不能完成单点定因。 |
| 3 | HarmonyOS 画中画状态导致切换设备后仍显示前一路画面 1 期 · 3 条反馈 | 90 | HarmonyOS | 1.1.1.11 / 1.1.2.3 | 张跃译 | 多个 HarmonyOS 画面共享一个无代次、无串行化、无旧控制器清理的 PipManager,切换设备时旧创建任务和新选择竞争,最终把第一路 XComponent、savId 或恢复状态保留下来。 |
| 4 | 升级后回放体验整体退化 5 期 · 20 条反馈 | 85 | Android · HarmonyOS · iOS | 8.4.1.6 / 1.1.2.3 / 8.3.14.2 | 唐胜、许源、欧阳荣、谭伟 | 8.4.1.6 对回放链路做了多处改动(时间条 UI、通道切换进度对齐、报警-录像联动),导致回放体验多点退化;Logan 显示取流层无崩溃,问题在"UI/状态对齐 + 报警录像关联"而非连接失败。 |
| 5 | KMP 回放页未申请屏幕常亮,回放中手机自动息屏 11 期 · 29 条反馈 | 84 | Android · HarmonyOS | 8.4.1.6 / 8.4.1 / 8.4.2 | 唐胜、陈宝旺、许源、欧阳荣 | KMP 回放页的屏幕常亮能力已在代码中完整实现(KMP 公共层 → 桥接层 → Android 宿主层齐备),但承载该实现的提交只落在 feature_v8.4.2 一条分支上,feature_v8.4.4、master、hotfix_v1.1.1 全部不含,因此所有已发布版本(Android 8.4.1.6 / HarmonyOS 1.1.1.11)在运行时都走不到 FLAG_KEEP_SCREEN_ON,回放过程中发生系统级息屏。 |
| 6 | Android 实时预览无首帧却被标记为“视频播放中”,并无限重试 5 期 · 12 条反馈 | 80 | Android · iOS | 8.4.1.6 / 8.4.1.4 | 唐胜、张威、谭伟、欧阳荣 | 预览页把“取流请求已提交”或“设备在线状态消息”误当成播放成功,而没有把首帧到达作为唯一成功门禁;add_watch_result=-1 后仍持续 10 秒重试并显示“视频播放中”,导致用户长时间等待且无法获得明确失败反馈。 |
| 7 | SD 卡跌至不可读写或反复未初始化,录像回放被直接阻断 3 期 · 9 条反馈 | 80 | Android · HarmonyOS · iOS | 8.4.1.6 / 1.1.1.11 | 唐胜、张威、陈宝旺 | 设备上报的 SD 卡状态在 258245 中持续处于未初始化/格式化中,在 258173 中由正常可读写跌至不可读写;App 按协议正确展示异常,根因更可能在 SD 卡、卡槽/供电、设备存储控制器或固件挂载逻辑,而不是 KMP 页面误报。 |
| 8 | iOS `8.4.1.6` 云回放卡顿,首帧与失败状态可能被提前结算 2 期 · 8 条反馈 | 80 | Android · iOS | 8.4.1.6 / 8.3.11.3 / 8.4.106 | 陈宝旺、欧阳荣、谭伟 | iOS 云回放容器允许解析完成后在 1.2 秒无首帧时提前向 KMP 返回成功,同时把 IJK 播放错误与正常结束合并处理,导致页面对真实卡顿、缓冲超时或解码失败缺少准确状态和可回溯证据;这是高度可疑的共同客户端缺陷,但仍需复现确认其是否为 3 名用户的直接主因。 |
| 9 | iOS 8.1.2.4 微信登录授权码重复提交触发 30100225 1 期 · 3 条反馈 | 80 | iOS | 8.1.2.4 / 8.1.204 / 8.4.106 | 待定 | 微信回调与恢复登录没有一次性 state、幂等锁和授权码消费机制,重复回跳或重试会把同一个单次授权码再次发给服务端,服务端以 30100225 拒绝后客户端仍保留旧状态。 |
| 10 | Android `8.4.1.6` 在线状态不一致导致卡录像无法打开 1 期 · 1 条反馈 | 80 | Android | 8.4.1.6 | 张威 | 客户端继续使用一份已陈旧约 8 小时的在线缓存,同时又允许单次 P2P 离线事件直接覆盖设备状态;状态模型没有区分云端心跳、P2P 连通和播放出帧,导致用户看到“在线但录像打不开”,且回放页缺少可恢复路径。 |
🟠 问题 1:iOS 8.4.1.6 的 NVR 人形报警时间固定快约 60 分钟 | 负责人:欧阳荣、许源
现象与覆盖范围
- 反馈
259287:2026-10-24 15:35,iOS8.4.1.6,iPhone、iOS18.3.1,广东深圳。反馈原文只有“时间不准确”,但 Logan 和附件日志覆盖了完整故障时段。 - 15:28:25~15:33:12 共收到 12 次前台人形侦测推送,全部对应 NVR
19584833的通道 1、3、6、8。App 本地接推送时间与正文中的时间逐条比较,差值固定为 3596~3597 秒,即正文时间快 59 分 56 秒~59 分 57 秒。 - 典型样本:App 于
15:28:25.980收到“大门向东”推送,正文显示时间(2026-10-24 16:28:22);App 于15:33:12.553收到“后院菜园”推送,正文显示时间(2026-10-24 16:33:09)。 - 同一台手机在当天 10:01 和 10:03 收到设备
42767097的人形报警时,正文时间与本地接收时间只差数秒,说明手机系统时钟、App 日志时区和前台通知回调没有整体偏移。 - 严重度评分:70 / 100。反馈量 10(1 条直接反馈,但日志内有 12 个同设备连续失败样本)、共性广度 30(iOS、版本、机型、地区四个维度)、业务关键度 30(报警证据时间可信度)。
- 去重判定:近 24 小时内没有报警时间偏移的雷达问题;10 月 12 日只有一条 Android“监控时间不准确”单点记录,未进入深挖。本期具备原始推送时间与本地接收时间的成对证据,因此新建问题任务。
神策证据
- 2026-10-24 截至本窗口,
CloudPlayback为 201,700 PV / 92,554 UV,DeviceVideoPlayback为 14,087,184 PV / 4,221,632 UV。两者只用于说明报警关联的视频业务规模,不能证明报警正文时间是否正确。 - 今日神策事件清单中不存在
AlarmMessage事件,现有SiteMessageClick、CloudPlayback、DeviceVideoPlayback也没有“报警触发时间与 App 接收时间差”字段。因此本期无法从神策量化同类时间偏移影响面,不能用大盘量级替代报警时间质量。 - 10 月 17 日至 24 日的
CloudPlayback日活保持在 12.0 万~13.5 万 UV 的稳定量级,10 月 24 日截至 17:01 为 9.26 万 UV。该稳定性只能说明云端回放业务本身没有被全局中断,不能排除个别 NVR 的时间源或时区配置错误。
Logan 关键日志
- 反馈 ID:
259287。附件Log0.txt共 61,683 行,覆盖 10 月 10 日至 10 月 24 日;另有 39,427 行 Logan 覆盖 09:49~15:35。 Log0.txt:52216:10:01:04,本地收到设备42767097的报警,正文时间为10:00:59,仅差 5 秒。Log0.txt:60702:15:28:25,本地收到 NVR19584833-CH-1的报警,正文时间为16:28:22,快约 60 分钟。Log0.txt:60726、60729、60730、60731、60739、60741、60744、60745、60746、61070、61074:随后 11 次报警保持同样偏移,排除单次推送乱序。- 该日志来自
willPresentNotification,记录的是系统把通知交给 App 的时刻;正文时间已经由推送内容携带。因此至少可以确认,偏差在 App 解析正文之前就已存在,客户端不是把正确的 epoch 时间错误格式化成+1h。
代码定位
- 涉及模块:
Seetong-App-iOS的离线报警推送解析与回放定位,以及Seetong-CliCmpt-Net-Sdk、服务端的报警时间生成链路。 AppDelegate.m:604-612:前台推送只读取通知标题和正文,并把正文原样写入日志;当前日志中的16:28:22是系统交给 App 的原始展示时间。AppDelegate.m:1134-1157:结构化离线报警路径把body.alarmTime当作回放定位的唯一依据,校验通过后直接写入PushRevMsgModel.alarmTime。UserClient.mm:8742-8751:解析yyyy-MM-dd HH:mm:ss时没有显式读取原串的时区偏移,时间串本身也不携带 offset;若上游把设备本地时间或错误时区的格式化时间传下来,客户端无法识别。KMPRouter.m:698:离线报警回放再次把pushModel.alarmTime转为时间戳,用于决定报警回放定位位置。时间串快 1 小时会同时影响通知展示、报警列表和回放入口定位。- 修复方向锚点:结构化报警 payload 增加可信的 UTC epoch、设备时区偏移、时钟来源和同步状态;客户端优先使用 epoch,禁止对无时区字符串作静默本地化猜测。客户端展示时间与回放定位时间应分别保留“服务端接收时间”和“设备事件时间”,不得混用一个字符串。
根因结论
- 置信度:现象 🟢 强;固定偏移 🟢 强;偏移发生在 App 收到正文之前 🟢 强;具体应归因于 NVR 时钟、4G 模组时间、设备时区还是服务端序列化 🟡 中。
- 一句话根因:NVR
19584833上报的人形报警事件时间比实际时间快约 60 分钟,服务端把该时间直接写入推送正文,App 又把它当作无时区本地时间用于展示与回放定位,最终形成用户可见的报警时间错误。 - 关键证据链:同一手机、同一 App 对设备
42767097的时间基本准确 → 对 NVR19584833连续 12 次固定快约 60 分钟 → 原始推送正文已带错误时间 → 客户端结构化路径继续用该字符串定位回放。 - 明确不下的结论:现有日志没有 NVR 系统时间、时区、DST 配置或服务端消费时间,不能判定是设备端快 1 小时,还是服务端按错误时区格式化。不能把问题扩大为“iOS 所有报警时间都错误”。
建议下一步
- 分配给:欧阳荣复核 iOS 结构化报警时间消费与回放定位;谭伟复核 iOS 时间解析兼容性;服务端报警消息负责人按 NVR ID
19584833回查事件时间生成链路。 - 用设备 ID
19584833回查 2026-10-24 15:28~15:33 的设备心跳、设备时间、时区、DST 状态、报警原始时间和服务端接收时间,确认 60 分钟来自哪一层。 - 新 payload 明确提供
eventTimeMs、serverReceiveTimeMs、deviceTimezoneOffsetMinutes、timeSource和clockSynced。客户端只用 epoch 做回放定位,并把“设备事件时间”和“服务端接收时间”分开显示。 - 兼容旧文案解析时记录正文原始时间、解析时区、解析后 epoch 与当前手机时间的差值;对超过 5 分钟的报警时间偏差打点,并在回放前给出“设备时间可能异常”的明确提示。
- 回归设备时钟准确、设备快 1 小时、设备慢 1 小时、设备为半时区、设备开启 DST、跨时区查看六类场景,逐类验证通知正文、报警列表、回放起点与服务端接收时间。
🟠 问题 2:跨端 KMP 报警缩略图点击只打开大图,原视频入口退化
现象与覆盖范围
- 反馈
259253:11:42,iOS8.4.1.6、iPhone、iOS16.6.1、浙江台州。用户明确说“这次版本升级,怎么没有抓拍视频了”,并同时提供 OBS 日志与 Logan。 - 反馈
259266:13:36,HarmonyOS1.1.2.3、HUAWEICRS-AL00、河北邯郸。用户明确说“报警拍的视频怎么成照片了”。 - 两条反馈都指向“报警卡片原本可看视频,现在只呈现照片”。本期不是把历史 Android 单点直接合并,而是首次拿到 iOS KMP 页面的点击分流日志,并得到 HarmonyOS 同语义样本。
- 严重度评分:70 / 100。反馈量 10(2 条跨平台直接反馈)、共性广度 30(iOS 与 HarmonyOS、2 个版本、2 个机型、2 个省级地区)、业务关键度 30(报警取证与回放)。
- 去重判定:10 月 21 日已针对 HarmonyOS 宿主报警桥接丢失视频字段建立
T-20261021-170533-1339。本期继续保留该任务,同时新增T-20261024-170603-cfd1跟踪 KMP 缩略图点击语义。两者相关但不是同一层:前者是宿主字段能力,后者是已经确认存在的图片点击分流。
神策证据
- 神策没有报警卡片媒体类型、缩略图点击目的地或“视频入口是否展示”的事件。
SiteMessageClick只能证明消息被点击,不能区分大图预览和视频回放。 - 2026-10-24 截至本窗口,
CloudPlayback为 201,700 PV / 92,554 UV,说明云端回放链路仍有持续使用;该数据不能反驳个别报警卡片缺少视频入口,也不能证明受影响用户的视频请求成功。 - 因此本期影响面由 2 条直接反馈、同一 KMP 页面代码和 Logan 点击链路共同支撑,不把神策业务活跃量当作报警视频入口成功率。
Logan 关键日志
- 反馈 ID:
259253。附件Log0.txt共 68,000 行以上,日志从 09:23 覆盖到 11:42 反馈提交前后。 Log0.txt:63934-63936:报警时间段存在缩略图请求,说明报警列表确实拿到了图片。Log0.txt:66050-66074:同一设备的报警时间轴存在多条type = 256、持续 71~87 秒的报警录像段,说明该设备并非完全没有录像数据。Log0.txt:67618-67619、67653-67654、67687-67688、67793-67794、67828-67829:10:31 前后连续 5 次点击缩略图,全部记录为thumbnail click和message thumbnail open preview。- 同一日志窗口没有出现
message click open playback,随后都是预览页消失和报警页重新出现,说明用户点图片后得到的是大图,不是视频回放。 - 反馈
259266未提供 Logan,但其文字与259253的点击结果及 KMP 共享页面行为一致,构成跨端现象证据,不能单独证明 HarmonyOS 宿主视频字段一定完整。
代码定位
- 涉及模块:
seetong-kmp/moduleMessage的报警列表与 iOS、HarmonyOS 的 KMP 宿主桥接。 AlarmMessageViews.kt:976-984:缩略图拥有独立click事件,命中后不再向上冒泡到整行点击。AlarmMessagePage.kt:1295-1312:缩略图普通态固定调用openImagePreviewPage,无论当前报警是否带视频,都只展示图片。AlarmMessagePage.kt:1181-1207:只有整行点击会调用preparePlaybackNavigation并进入报警回放。视频入口仍然存在,但与用户过去点击图片的肌肉记忆不一致。AlarmMessagePageViewModel.kt:1253-1258:整行回放只透传devId、fromAlarmReplay和alarmReplayTime,不显式传报警卡片中的videoLink或媒体类型;若宿主回放页无法按设备恢复正确录像段,就会进一步放大“只有照片”的感受。- 提交
1e420e64:2026-07-27 为缩略图新增独立预览事件,提交说明明确目标是“点击缩略图打开大图”。在该提交之前,页面没有独立缩略图点击处理;从交互路径看,图片点击更容易落到整行播放。该提交与用户“升级后没有视频”的感知高度吻合,是本期最可疑的客户端回归锚点。 - 修复方向锚点:在缩略图上叠加明确的播放图标;当
videoLink存在或设备支持卡回放时,单击缩略图直接进入报警视频,图片预览改为长按或次级按钮;纯图片报警则明确显示“仅图片”。若产品决定保留大图单击,必须在卡片上提供独立且醒目的“播放录像”按钮,不能只依赖整行点击。
根因结论
- 置信度:跨端现象 🟢 强;缩略图点击进入图片预览 🟢 强;报警录像段存在 🟢 强;“所有报警视频均丢失” 🔴 弱。
- 一句话根因:KMP 报警页把缩略图点击从整行回放中拆分为独立的大图预览事件,用户按原习惯点击报警图片时只得到照片;同时宿主视频字段与回放参数仍存在不完整风险,形成跨端“报警视频变照片”的一致感知。
- 关键证据链:
259253日志同时证明报警时段存在 71~87 秒录像段和 5 次缩略图点击 → 5 次点击均进入图片预览且没有整行回放 →1e420e64代码确实新增了独立缩略图事件及大图预览 →259266在 HarmonyOS 上报同一语义。 - 明确不下的结论:不能仅凭当前证据认定所有云端报警视频 URL 均缺失,也不能忽略
T-20261021-170533-1339已记录的 HarmonyOS 宿主字段问题。完整根因至少需要拆分“入口分流”和“宿主媒体能力”两层。
建议下一步
- 分配给:欧阳荣复核 KMP 报警缩略图点击与回放路由;陈宝旺复核 KMP 页面媒体交互约束;HarmonyOS 报警桥接负责人继续推进
T-20261021-170533-1339。 - 先复现 iOS
259253:分别点击缩略图和整行,核对thumbnail click、message thumbnail open preview、message click open playback、openPlaybackPage四条日志及最终页面。 - 复现 HarmonyOS
259266:抓取同一报警的thumbnailUrl、videoLink、isCloudReplay、devId、eventTimeMs,区分“有视频但点了图片”和“桥接根本没有视频字段”。 - 产品先确定交互语义:有视频时缩略图单击应播视频,长按或角标进入图片;没有视频时必须明确提示“仅图片”,不得让用户通过试错判断。
- 回归云端报警、卡报警、纯图片报警、录像已过期、无回放权限五类场景,每类验证图片存在、视频入口可见、点击后 3 秒内进入播放或给出具体原因三个断言。
全量扫描与数据源
| 分类与处置 | 反馈数 | 反馈 ID 或说明 |
|---|---|---|
| 🟠 iOS 报警时间固定偏移,进入问题 1 | 1 | 259287 |
| 🟠 跨端报警缩略图只打开图片,进入问题 2 | 2 | 259253、259266 |
🔁 HarmonyOS 1.1.2.3 离线反馈延续,24 小时内已分析 | 4 | 259251、259270、259295、259300;沿用任务 T-20260926-115214-fdf9 |
🟡 HarmonyOS 1.1.2.3 刷新、聚焦、摄像头、画面与变焦异常,暂不合并为单一根因 | 6 | 259211、259213、259223、259233、259274、259292 |
| 🟡 Android AI、单设备离线、加载与连接单点 | 9 | 259218、259219、259220、259221、259231、259246、259261、259269、259288;AI 信号关联任务 T-20261018-090818-00a1 |
| 🟡 更换路由器后无法连接,按配置问题观察 | 1 | 259215 |
| 🟢 无效或信息不足 | 3 | 259226、259277、259278 |
🟣 -102、-101 及等价多语言网络模板 | 71 | 259212、259214、259216、259217、259222、259224、259225、259227、259228、259229、259230、259232、259234、259235、259236、259237、259238、259239、259240、259241、259242、259243、259244、259245、259247、259248、259249、259250、259252、259254、259255、259256、259257、259258、259259、259260、259262、259263、259264、259265、259267、259268、259271、259272、259273、259275、259276、259279、259280、259281、259282、259283、259284、259285、259286、259289、259290、259291、259293、259294、259296、259297、259298、259299、259301、259302、259303、259304、259305、259306、259307 |
接口在17:01:02截止时刻返回total=98 / fetched=98 / complete=true,但其中259308的实际创建时间为17:01:16,晚于窗口终点;按严格时间过滤后有效反馈为 97 条。上表按主问题唯一归类,合计 97 条。
心愿单亮点
| 心愿单 ID | 平台与版本 | 诉求 | 价值判断 |
|---|---|---|---|
| 5484 | Android / 8.4.1.6 | 回放时切换摄像头后保留当前时间点 | ⭐⭐⭐ 与今天第251期 NVR 通道切换问题直接呼应,可并入同族回归 |
| 5485 | Android / 8.4.1.6 | 把录像机全部功能放入 App,支持远程操作与配置 | ⭐⭐⭐ 工程运维价值明确,但需按设备能力、权限和误操作保护分阶段实现 |
| 5483 | Android / 8.4.1.6 | 希望通过电视查看家庭画面和活动 | ⭐ 需求描述不足,需先确认投屏、云电视或独立终端中的实际目标 |
数据源状态
- 反馈平台:✅ 正常。接口返回
total=98 / fetched=98 / complete=true / pages=2,再按精确时间上界剔除窗口后的259308,有效扫描 97 条并逐条分类。 - 心愿单:✅ 正常。
total=4 / fetched=4 / complete=true / pages=1。 - Sensors:⚠️ 部分可用。事件清单、
CloudPlayback和DeviceVideoPlayback的八日趋势查询成功;AlarmMessage事件不存在,query_sql与分段查询因字段表达式错误返回失败,已停止重试。因此两个问题均不伪造报警媒体成功率或时间偏差率。 - Logan:⚠️ 部分可用。
259287的附件与 Logan 完整覆盖 12 次 +60 分钟偏移;259253附件覆盖报警录像段、5 次缩略图预览和未进入回放的结果;259266未提供 Logan。 - 友盟:⏭️ 未调用。本期两个核心问题是报警时间与媒体入口,不是崩溃或 ANR。
- TAPD:⏭️ 未调用。当前没有新的 BUG 单号,使用统一任务账本推进。
- 代码仓:✅
Seetong-App-iOS、seetong-kmp已只读定位;KMP 工作区当前无未提交业务改动,iOS 仓库未修改代码。 - 任务账本:时间偏差新增
T-20261024-170425-9d21;缩略图入口新增T-20261024-170603-cfd1;HarmonyOS 宿主视频能力沿用T-20261021-170533-1339。 - 待补证:需回查 NVR
19584833的设备时间、时区、DST 与原始报警 epoch;需在 iOS 与 HarmonyOS 分别验证“缩略图点击”和“整行点击”,并采集259266的videoLink、isCloudReplay与回放路由日志。
下一期 = 第253期 = 2026-10-25-H09.md(明天早上 09:00;窗口 今日 17:01:02~明日 09:00)