Seetong · Report
🎯 Seetong 问题雷达 09:00 第249期
时间窗口:2026-10-22 17:00:00~2026-10-23 09:00:46(Asia/Shanghai)
TL;DR 核心要点
- 🔴 HarmonyOS 1.1.2.3 在 16 小时内出现 10 名独立用户的离线、实时画面不可见和回放异常聚集:覆盖 9 个华为机型和 7 个省级地区。代码显示 P2P 离线状态可能长期压住服务端在线状态,但用户端 P2P 日志缺失;严重度 100 / 100,现象置信度高,根因置信度中,沿用 T-20260926-115214-fdf9。
- 🟠 iOS 8.4.4.1 在报警消息设备筛选后发生进程中断并自动重启:反馈时间与 Logan 中旧 PID 截止、8 秒后新 PID 启动一致,崩溃前连续出现内存警告;严重度 70 / 100,现象置信度高,根因置信度中,新建任务 T-20261023-090823-a4dd。
- 本窗口共有 10 条独立反馈,用户分别描述“有电显示离线”“总显示离线”“看不到实时画面”“监控看不了”“监控时有时无”“设备启动中但连不上”“高清视频打不开”“插卡摄像头无法查看回放”。
最近一个月 Top 问题
按严重度与复发期数排序,已把跨期同类反馈归集;负责人由问题代码锚点对应的 Git 提交历史(blame / 近期主要提交者)反查;数据窗口:最近 30 天(截至 2026-10-23)。
| # | 问题(严重度降序) | 严重度 | 平台 | 版本 | 负责人 | 问题原因 |
|---|---|---|---|---|---|---|
| 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 | 升级后回放体验整体退化 4 期 · 18 条反馈 | 85 | Android · iOS | 8.4.1.6 / 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 | iOS 老版本微信登录空授权码触发 30100222 1 期 · 1 条反馈 | 80 | iOS | 8.1.3.5 / 8.1.305 / 8.1.503 | 位冬 | 微信授权回跳在当前旧版 iOS 上返回了空 code,客户端没有把它视为失败边界,仍向服务端提交空授权码,最终稳定触发 30100222。 |
🔴 问题 1:HarmonyOS 1.1.2.3 多用户离线与核心视频链路失效 | 负责人:李国涛
1. 现象与覆盖范围
- 本窗口共有 10 条独立反馈,用户分别描述“有电显示离线”“总显示离线”“看不到实时画面”“监控看不了”“监控时有时无”“设备启动中但连不上”“高清视频打不开”“插卡摄像头无法查看回放”。
- 涉及反馈:258918、258931、258938、258963、258981、258986、258994、259004、259008、259012。
- 覆盖 HarmonyOS
1.1.2.3、9 个 HUAWEI 机型:ALN-AL80、HBP-AL00、CHZ-AL00、CLS-AL00、VDE-AL10、LMR-AL10、JUY-AL80、ADA-AL00、BRA-AL00;覆盖辽宁、河北、新疆、海南、吉林、河南、山东 7 个省级地区。 - 258994 只写“离线”,单独看信息较弱;258918 明确“有电显示离线”,258986 写明“总显示离线”,259012 明确设备启动后仍无法联网,三者共同构成同一版本上的持续性离线现象。其余反馈补足实时画面与回放链路。
- 严重度评分:100 / 100。反馈量 30(10 条独立反馈)、共性广度 30(平台、版本、9 个机型、7 个地区)、业务关键度 40(设备在线、实时查看和录像取证均为核心能力)。
- 去重判定:与任务
T-20260926-115214-fdf9“核查 HarmonyOS 设备已联网但列表显示离线”同域。本期新增1.1.2.3的 10 用户聚集和代码级状态粘滞证据,更新既有任务,不重复创单。
2. Sensors 证据
DeviceVideoPlayback是当前版本唯一可稳定查到的核心查看事件:2026-10-22 至 10-23 共 1,086,417 PV / 326,878 UV。- 2026-10-22 完整日共 907,238 PV,其中成功 884,078、失败 23,160,失败率 2.553%。
- 2026-10-23 截至本次查询共 179,481 PV,其中成功 173,372、失败 6,109,失败率 3.404%,较前一日完整日上升 0.851 个百分点。该日为未完整日,只能作为风险方向,不能直接外推全天。
- 2026-10-23 的失败码主要为
SA1060063,935 PV、SA106012573 PV、SA106008571 PV、SA106010354 PV、SA106001334 PV、SA106007220 PV。 1.1.2.3在上述日期未查询到可用的SiotDevConnectResult、MonitorFrameResult或NvrDeviceVideoPlayback数据,因此离线发生率和预览首帧失败率无法按事件量化。这是观测缺口,不代表这些链路没有发生问题。- 反馈平台
clientId尚未映射到神策distinct_id,以上为同版本大盘证据,不能逐条归到 10 名反馈用户。
3. Logan 与附件
- 10 条核心反馈均未提供 Logan,无法直接读取
TPS_MSG_P2P_OFFLINE、devIsOnline、p2pLastHeartTime、lastHeartTime和各播放接口返回值。 - 因此本期只能确认“同一版本、同一核心链路、短窗口多用户聚集”,不能把 10 条反馈强行合并为一个服务端或设备端根因。
- 已保留 258921 之外的核心反馈作为下一轮回访对象;离线类应优先采集设备 SN、固件、网络类型和服务端在线态快照,播放类应采集
ts_AddWatchEx返回值、首帧耗时与onError。
4. 代码定位
- 涉及模块:
seetong-app-harmony/feater/deviceList、feater/playDevice、basic/src/main/ets/utils。 DeviceViewModel.ets:1184-1196:doMsgCallBack收到TPS_MSG_P2P_OFFLINE后调用setDeviceStatus(devId, false),把localDevice.isConnect写成false。DeviceViewModel.ets:1943-1971:setDeviceStatus在isConnect != undefined时只比较本地布尔值;只要本地已经是false,不会用服务端新的devIsOnline=1做二次校正。当前源码中未找到将该字段恢复为undefined的统一路径。DeviceUtils.ets:175-186:isOnLine在isConnect != undefined时直接返回本地值,优先于remoteDevice.devIsOnline。这使一次 P2P 离线可能长期覆盖后续服务端在线结果。ReplayPage.ets:155与:3887:isOffline被读取用于展示离线态,但注释明确写着“目前未赋值”,回放页没有完整离线状态写入路径。AutoPlayDeviceView.ets:21-43:快速预览调用playDevice后忽略返回值,只监听首帧事件;首帧不到时缺少超时失败态。DeviceServiceImpl.ets:5493-5548:ts_AddWatchEx的细分返回值被折叠成布尔结果,上层拿不到-1/-6/-10等错误语义。ViewPageUtil.ets:270-298:部分未知错误分支没有可见提示,可能让失败表现成长转圈或被其他网络提示覆盖。- 调用链可归纳为:P2P 离线回调 →
setDeviceStatus(false)→localDevice.isConnect固定为false→ 后续设备列表与在线判断优先读取本地状态 → 服务端devIsOnline=1不生效;播放失败又与首帧超时、错误码折叠和提示缺失叠加。
5. 根因结论
- 置信度:现象 🟢 强;离线状态机缺陷 🟢 强;10 条反馈可由单一根因解释 🟡 中。
- 一句话根因:HarmonyOS 客户端把 P2P 瞬时离线写成本地持久状态,并在后续在线判断中优先使用这个旧值,可能导致设备已恢复在线却仍显示离线;回放离线态和播放错误透传不足则放大了用户的“看不到画面”体验。
- 关键证据链:同版本 10 名独立用户跨 9 个机型、7 个地区集中在离线与查看链路;当天回放失败率较前一日完整日上升;代码中离线写入、本地状态优先和缺少服务端在线态二次校正形成闭合路径。
- 明确不下的结论:不把所有“回放无内容”和“不录像”直接归为同一客户端缺陷。它们仍需设备固件、存储状态和服务端录像索引证据;当前根因结论只覆盖可解释的在线态粘滞部分。
6. 建议下一步
- 分配给:HarmonyOS 设备列表与 SDK 联动负责人;代码历史锚点为陈宝旺,回放链路负责人配合。沿用任务
T-20260926-115214-fdf9,状态保持P1 / captured。 - 将 P2P 状态与服务端在线态拆成两个带时间戳的字段,禁止一个无限期覆盖另一个;P2P 离线后启动有限时长复核,服务端持续在线或再次收到心跳时应恢复为在线。
- 统一
setDeviceStatus的状态源优先级和过期规则:本地连接态只覆盖一个短窗口,超时后回落到devIsOnline + lastHeartTime/p2pLastHeartTime,并把最终来源写入埋点。 - 为
ReplayPage.isOffline建立唯一写入源,区分设备离线、通道离线、无录像、SD 卡异常和播放首帧超时,不再复用同一个“网络断开”提示。 - 回访 10 条反馈,补齐设备 SN、固件、网络类型、故障时刻和服务端在线态;复现 P2P 离线后切网恢复、前后台恢复、断电重启、连续预览和卡回放各 20 次。
- 为
SiotDevConnectResult、预览首帧和回放首帧补齐 HarmonyOS1.1.2.3上报,要求包含requestId/devId/error_code/duration/close_reason,否则下一期仍无法区分客户端状态错误和设备侧异常。
🟠 问题 2:iOS 8.4.4.1 报警消息设备筛选后闪退 | 负责人:欧阳荣、唐胜
1. 现象与覆盖范围
- 258921:2026-10-22 18:11,iOS
8.4.4.1、iPhone、iOS15.6.1、广东,反馈“18.05。 app闪退”。 - Logan 旧进程
11126在 18:05:35 完成设备筛选,18:05:39 后停止写入;新进程11403于 18:05:43 启动,并显示AppLaunch。这符合用户描述的 18:05 闪退与随后重新打开 App。 - 涉及反馈:1 条、1 名独立用户,但直接造成进程中断,不应按普通 UI 小问题降级。
- 严重度评分:70 / 100。反馈量 10(1 条独立反馈)、共性广度 30(iOS、
8.4.4.1、iPhone、广东)、业务关键度 30(报警筛选属于消息查看和取证入口)。
2. Sensors 与友盟证据
- 2026-10-22,iOS
8.4.4.1在当前 24 小时前的同日样本中记录到 1,630 条事件 / 12 UV,说明该版本确有线上或外部测试流量。 - Sensors 的
AppCrashed在8.4.4.1下只查询到 Android 堆栈,没有 iOS 崩溃原因;因此不能把 Android 的MainActivity2方向错误套用到本问题。 - 友盟 APM 对该版本的 7 天和今日崩溃统计均返回
errorCount=0,但同时没有任何 iOS 样本证据。结合 Logan 的 PID 切换,判断为该构建未覆盖到 APM,而不是“没有发生闪退”。 - 当前没有可用的 iOS 原生崩溃栈,无法判断是 Swift/Kotlin 崩溃、原生列表对象生命周期错误,还是系统内存压力终止进程。
3. Logan 关键日志
- 反馈 ID:258921,Logan 文件
51e301fd-...log.gz,附件Log0.txt74,382 行、Log1.txt2,159 行。 Log0.txt:74182,18:05:06.900:MMKV onMemoryWarning,清理seetong_kmp内存缓存。Log0.txt:74184,18:05:08.543:第二次onMemoryWarning。Log0.txt:74378-74380,18:05:35:设备筛选确认deviceId=26080595,列表从oldRowCount=128重建为newRowCount=2。Log0.txt:74382,18:05:39.288:旧进程最后一条 WebSocket 心跳后日志终止。Log1.txt:1-7,18:05:43:新进程11403重新出现启动流程、AppLaunch和根控制器初始化;PID 与旧进程11126不同。- 日志没有
NSException或SIGABRT堆栈,因此“列表重建触发闪退”是当前最接近现场的可疑链路,不是已完全证实的唯一根因。
4. 代码定位
- 涉及模块:
seetong-kmp/moduleMessage/src/commonMain/kotlin/com/seetong/modulemessage,iOS 宿主为Seetong-App-iOS/.../KMP/KuiklyVC/STKuiklyAlarmMsgVC.m。 AlarmMessagePage.kt:1081-1100:设备筛选确认后立即更新页面状态,调用vm.applyDeviceFilter。AlarmMessagePage.kt:145-178:applyUiState检测筛选条件变化后执行listViewRef = null和listRenderGeneration++。AlarmMessagePage.kt:2048-2058:renderContent通过vbind({ pageState to listRenderGeneration })销毁并重新创建AlarmMessageListView。- 调用链为:设备筛选点击 →
onDeviceFilterConfirmed→uiState更新 →shouldRecreateListForFilterChange→ 旧列表引用置空 →listRenderGeneration变化 →AlarmMessageListView整体重建。 - 高风险边界:当前列表有 128 行、12 个筛选项,同时刚经历两次内存警告;筛选结果虽只有 2 行,仍会先销毁大列表再重建,且下拉遮罩与列表引用在同一帧内切换。
5. 根因结论
- 置信度:现象 🟢 强;筛选与进程中断时序相关 🟢 强;具体触发根因 🟡 中。
- 一句话根因:设备筛选触发报警懒列表整体重建,在大列表、下拉遮罩和内存压力叠加时发生进程退出;当前缺少原生崩溃栈,尚不能确认是列表对象生命周期、KMP 状态重建还是系统内存终止。
- 关键证据链:用户明确报闪退 → 日志记录两次内存警告 → 设备筛选后 128 行列表整体重建 → 4 秒内旧 PID 停止 → 8 秒内新 PID 启动。
- 明确不下的结论:不把友盟 0 条当作未崩溃。APM 无该构建样本,且 Sensors 没有 iOS
AppCrashed记录,两个聚合源都不能反驳现场 Logan 的 PID 切换。
6. 建议下一步
- 分配给:iOS 与 KMP 报警消息负责人;代码历史锚点为欧阳荣,数据埋点近期改动涉及唐胜。新建任务
T-20261023-090823-a4dd,状态P1 / captured。 - 保留现场并补采原生崩溃栈、
ips文件、内存峰值、VM 压力和 Xcode Organizer 崩溃记录;Logan 必须同时上传最后一次 KMP 回调、对象释放和新旧页面 generation。 - 将筛选更新改为列表实例内的数据替换,避免先
listViewRef=null再整表重建;若必须重建,至少延迟到下拉遮罩完全关闭和当前触摸事务结束后执行。 - 为设备筛选增加状态代次和单一 owner 校验,旧代次的 item click、模态收起回调、列表 ref 回写必须丢弃,防止筛选期间旧视图事件落到已清空引用。
- 回归 100、500、1,000 条报警,连续切换设备、日期、类型筛选各 20 次,并覆盖低内存、前后台切换、下拉打开时点选、快速连点和缩略图加载中切换。
- 增加
alarm_filter_apply_start/end、list_recreate_start/end、memory_warning、process_session_id埋点,用来量化该交互是否在其他 iOS 用户上复现。
本期扫描全量
| 分类与处置 | 反馈数 | 反馈 ID 或说明 |
|---|---|---|
🔴 HarmonyOS 1.1.2.3 离线与核心查看链路聚集,进入问题 1 | 10 | 258918、258931、258938、258963、258981、258986、258994、259004、259008、259012 |
🟠 iOS 8.4.4.1 报警筛选后闪退,进入问题 2 | 1 | 258921 |
| 🟡 跨版本画面质量与显示异常,证据不足以下硬结论 | 4 | 258939、258942、258971、259003 |
| 🟡 单点回放、NVR 出图、卡顿、离线、存储或硬件异常 | 8 | 258919、258930、258975、258976、258977、258996、258997、259010 |
| 🟡 报警视频、报警铃声与对讲单点问题 | 3 | 258950、258953、258988 |
| 🟡 HarmonyOS 平板全屏适配,同一用户重复提交 | 2 | 258984、258985 |
| 🟢 账号、权限、设置咨询与操作帮助 | 8 | 258927、258932、258941、258943、258944、258987、259001、259005 |
| 🟤 测试、乱码或信息不足 | 4 | 258962、258967、258982、258991 |
已折叠 1 条普遍性网络问题(含-102/-101/-1002与中/英/俄/法/西/葡/土/阿/日多语言网络提示模板,如Проверьте телефонную сеть、Please check your mobile network);全量明细见同名 Markdown 知识库。
反馈接口返回 total=112 / fetched=112 / complete=true / pages=3。上表按主问题唯一归类,合计 112 条。网络提示包含中文、英文、俄文和越南文模板;同一用户短时间重复提交不放大独立用户数。
心愿单与数据源状态
| 心愿单 ID | 平台与版本 | 诉求 | 价值判断 |
|---|---|---|---|
| 5452 | Android / 8.4.1.6 | 优化录像声音,减少杂音和刺耳感 | ⭐⭐ 涉及回放可用性,但需区分设备收音、编码与手机播放音量链路 |
| 5451 | Android / 8.4.1.6 | 画面更清晰、监控画面更大,并希望支持 360 度 | ⭐⭐ 与画面查看诉求一致,需拆成清晰度、布局和硬件能力三个需求 |
| 5450 | Android / 8.4.1.6 | 区域警戒线触发人员靠近喊话 | ⭐⭐⭐ 有主动威慑价值,需评估检测精度、误报和合规边界 |
| 5448 | Android / 8.4.1.6 | 支持恢复误删设备 | ⭐⭐ 可降低误操作损失,需设计删除保留期与安全撤销机制 |
- 反馈平台:✅ 正常。
total=112 / fetched=112 / complete=true / pages=3,逐条分类覆盖全部 112 条。 - 心愿单:✅ 正常。
total=7 / fetched=7 / complete=true。 - Sensors:✅ 主查询成功。完成
DeviceVideoPlayback的 7 天趋势、10 月 23 日失败码和版本分布;1.1.2.3的 SIOT、预览首帧和 NVR 回放事件无可用数据,已作为观测缺口写明。 - Logan:⚠️ 部分可用。258921 的 Logan 和 OBS 日志可直接证明旧 PID 停止后新 PID 启动;问题 1 的 10 名 HarmonyOS 用户均未提供 Logan,根因置信度因此保持中等。
- 友盟:⚠️ 已查询。iOS
8.4.4.1的 APM 崩溃统计为 0,但该构建缺少可用 iOS 样本,不能据此排除 258921 的现场闪退。 - 代码仓:✅
seetong-app-harmony、seetong-kmp、Seetong-App-iOS均在标准路径,当前分支feature_v8.4.2,工作区干净。已完成设备在线态、报警列表重建和 HarmonyOS 播放错误透传的调用链定位。 - TAPD:⏭️ 未调用。本窗口没有新的 BUG 单号,两项问题已有任务账本承载,先用日志和本地复现补齐根因。
- 任务账本:问题 1 更新
T-20260926-115214-fdf9;问题 2 新建T-20261023-090823-a4dd。 - 待补证:问题 1 需服务端
devIsOnline/lastHeartTime/p2pLastHeartTime与 10 名用户端 P2P 日志;问题 2 需 iOS 原生崩溃栈、内存曲线和 128 行列表筛选的稳定复现。
下一期 = 第250期 = 2026-10-23-H17.md(今天下午 17:00;窗口 今日 09:00:46~17:00)