Seetong · Report

🎯 Seetong 问题雷达 09:00 第231期

时间窗口:2026-10-13 17:00:00 ~ 2026-10-14 09:00:00(Asia/Shanghai)

📌TL;DR 核心要点

  • 🔴 Android 8.4.1.6 从离线推送进入卡回放:首帧已到(231 ms)却被上层判定「播放失败」并退回报警列表(严重度 63 / 100,置信度 中)——反馈 257145(HUAWEI BLK-AL80)Logan 直读:07:14:03.126 / 07:14:03.310 两次 receive playback play failed event 落在 07:14:03.405 首帧(RecordPlayerView-onRecvFirstFrame)之前;代码竞态锚点 RecordPlayerView.kt:245(recordPlayCallback.onStartReplay)先于 :248-249(ioExecutor 内 startNvrReplay),:237-238 已把 m_view_id 置 29、:256 失败分支又回退为 -1
  • 🟠 iOS 8.4.1.6 报警消息列表「特别卡顿」:同一用户 32 秒内连提 2 次,代码侧锁定报警列表缓存重建路径(严重度 61 / 100,置信度 中)——反馈 257122 / 257123(iPhone 26.4)为同一账号同一时段双条提交;代码锚点 AlarmMessagePageVM(loadInitialData network-first、replaceResponseWindowInCache、syncLoadedMessagesFromCache)在首帧后串行重建 105 行缓存,与「更新版本后特别卡顿」的时序描述一致
  • 🟡 HarmonyOS 1.1.1.11 聚集连续第 10 期(本窗口 16 条、跨 14 机型 10 地区、零 Logan,严重度 64 / 100,置信度 弱)——沿用任务 T-20260926-170258-2226

🔥最近一个月 Top 问题

按严重度与复发期数排序,已把跨期同类反馈归集;负责人由问题代码锚点对应的 Git 提交历史(blame / 近期主要提交者)反查;数据窗口:最近 30 天(截至 2026-10-14)。

#问题(严重度降序)严重度平台版本负责人问题原因
1升级后回放体验整体退化
3 期 · 11 条反馈
85Android · iOS8.4.1.6 / 8.3.14.2唐胜、许源、欧阳荣、谭伟8.4.1.6 对回放链路做了多处改动(时间条 UI、通道切换进度对齐、报警-录像联动),导致回放体验多点退化;Logan 显示取流层无崩溃,问题在"UI/状态对齐 + 报警录像关联"而非连接失败。
2KMP 回放页未申请屏幕常亮,回放中手机自动息屏
10 期 · 25 条反馈
84Android · HarmonyOS8.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,回放过程中发生系统级息屏。
3HarmonyOS 1.1.1.11 回放 / 监控链路不可用连续第 6 期聚集
12 期 · 117 条反馈
72HarmonyOS1.1.1.11 / 1.1.1 / 1.1.1.6陈宝旺、冉博麟、唐胜、李国涛待定——HarmonyOS 1.1.1.11 的回放 / 监控链路存在跨机型跨地区的选择性失败,但由于 HarmonyOS 端 Logan 上报链路自 2026-09 起持续缺失(连续 6 期 0 条可下载),根因无法从客户端日志侧确认,当前只能确认「影响面真实存在且在扩大机型覆盖面」。
4KMP 卡回放取「当天录像」时走云回放分支,失败后无超时兜底并反复重试
1 期 · 4 条反馈
71Android8.3.11.3 / 8.4.1.6陈宝旺、谭伟KMP 回放页在选择 Tab 时只信设备记忆、不信设备能力,把 supportCloud=false 的设备硬切到云回放 Tab 并以「前一天」初始化;云链路从未 prepared(currentVideoUrl 空、cloudPrepared=false),失败事件 result=0 又恰好落入 result<0 的无退避重试分支,同时 SD 异常态在非 WiFi IPC 上被 return NONE 吞掉——三者叠加,用户既看不到当天录像也收不到失败提示,且失败状态被 saveLastPlaybackTab(tabIndex=1) 固化到下一次。
5iOS 灯光配置「提示失败 / 实际成功」——`NetworkIndicatorEnable="-1"` 非法值导致 1521 返回 -1
1 期 · 3 条反馈
68iOS8.4.1.4 / 8.4.1.6欧阳荣、谭伟iOS 端把 1301 + 1108 + 1521 三条独立协议的结果汇聚到同一个回调 block(UserClient.mm:1504 / 5091 / 5099),任一条失败即判定整次保存失败;当 1521 携带设备并不支持的 NetworkIndicatorEnable="-1" 字段时返回 Result="-1",UI 因此报「配置失败」,而 1301 / 1108 已生效 → 用户看到「提示失败、实际成功」。
6Android 8.4.1.6 进入监控长期「一直加载」——`add_watch_result=-1` 连续失败 40 次、首帧迟至 105 秒
2 期 · 9 条反馈
66Android · iOS8.4.1.6唐胜、张威、谭伟、欧阳荣进入监控页时 P2P 通道尚未建立,客户端在 105 秒窗口内以约 10 秒为周期反复 addWatch(返回 -1)→ stopWatch 空转,且无首帧超时兜底,用户侧表现为「一直加载」。
7iOS 回放「当前同时播放人数已达上限」误触发——NVR 主设备与通道共享 `cloudId` 导致额度自占
1 期 · 1 条反馈
64iOS8.3.14.3 / 8.4.1.6欧阳荣、谭伟、位冬iOS 端 cloudId 被定义为「NVR 主设备与全部通道的公共分组键」(Camera.h:500 / STDeviceListModel.m:657),回放页又固定以 cameraArray.firstObject 作为回放上下文(STPlaybackVC.m:6046-6048),使单用户单设备场景下也可能同时占用「主设备会话」与「通道会话」两份 NVR 并发额度;一旦 NVR 返回 -7 / -14,STPlaybackVC.m:1422 立即把它翻译成「当前同时播放人数已达上限」并强制停止回放、隐藏功能栏,用户表现为「回放看不了」。
8Android 8.4.1.6「不存录像了」——设备侧存储能力位缺失
2 期 · 6 条反馈
63Android · HarmonyOS · iOS8.4.1.6 / 1.1.1.11唐胜、张威待补证——该 HONOR BRC-AN00 用户的设备在能力协商中未声明本地存储能力,客户端据此既不提示也无法确认存储可用,表现为「不存录像」;需设备端确认存储介质状态与固件行为。
9Android 8.4.1.6 卡回放开启 2 倍速后画面丢帧、时间轴跳 10 余秒
2 期 · 2 条反馈
62Android8.4.1.6陈宝旺、唐胜卡回放链路对时间轴滚动中间值未做节流(onTimeChanged 直通),且帧回调的去重粒度为固定 1 秒,在 2 倍速下单帧时间跨度已超过去重窗口,两者叠加使刻度尺与文案出现十秒级跳变;画面丢帧则需由播放器侧 controlNvrReplay(..., NVR_ACTION_FAST, speed, "") 的取流策略确认。
10云录像漏录人(AI 人形录像缺失)
1 期 · 2 条反馈
62Android8.3.14.2 / 8.4.1.6陈宝旺、唐胜云录像片段的结束判定与人员活动尾段不匹配,导致"人走后最后一段"容易被提前截断;该链路缺少线上埋点,无法量化发生面。

🔴 问题 1:Android 8.4.1.6 离线推送进入卡回放——首帧已到却被判「播放失败」并退回报警列表(详细分析) | 负责人:唐胜、谭伟、欧阳荣、陈宝旺

1. 现象与覆盖范围

  • 现象描述(已脱敏):用户收到设备的离线报警推送,从推送直接进入报警列表,点击该条报警进入回放页;回放页已成功建立取流并收到第一帧,但上层随即收到「播放失败」事件并终止回放,页面退回报警列表。用户原话「有报警消,第一次加载不出来」,即第一次点开看不了。
  • 涉及反馈:本窗口 1 条(反馈 257145,Android 8.4.1.6,HUAWEI BLK-AL80,吉林长春);同窗口另有 257116(iOS,报警视频看不了,Logan 不覆盖操作时段,见「待补证」)与 257121(Android,只能存储一天录像,属存储口径,未深挖)。
反馈 ID机型App 版本账号内容Logan
257145HUAWEI BLK-AL808.4.1.613578792952 / userId 20664029有报警消,第一次加载不出来✅ 46,583 bytes gz → 328,410 bytes / 2,044 行
  • 覆盖范围:Android 单平台,App 8.4.1.6(当前在产主线),单机型、单用户;目标设备 18275064(devType:101 IPC、devSubType:1、devChannelCount:2、devChannelStates:"11",设备名「大门」,SN 0A3B188DC4543133),devIsOnline:1、p2pLastHeartTime 采集时仍在推进。
  • 覆盖范围的重要限制:本窗口仅此 1 条含完整回放操作时段的 Logan,不能据此判定该问题在 Android 8.4.1.6 上的普遍存在;但代码侧可证明「播放失败判定」与「首帧到达」存在时序竞态(见第 4、5 节),属「机制已坐实、影响面待量化」形态。
  • 严重度评分:63/100(反馈量 10 / 共性 23 / 关键度 30)——
  • 反馈量与增长(10/30):本窗口同关键词仅 1 条,无同义词聚集;
  • 共性广度(23/30):1 平台 × 1 版本 × 1 机型 × 1 地区,但代码路径覆盖全部「离线推送 → 报警回放」入口(PlaybackPageRouter.openKmpPlaybackPage 的 fromOfflinePush = scene == 2 分支),按「机制影响面 > 样本影响面」折算取 23;
  • 业务关键度(30/40):报警回放属「录像回放 / 报警 = 30」档;
  • 上调依据:本期首次拿到同一会话内的秒级时序直证(失败事件早于首帧 279 ms、viewId 由 29 回退为 -1),证据等级由「弱」升「中」,故在基础分上上调。

2. 神策证据(核心数据源)

  • 关键局限(必须先说明):本期未取得该问题可用的神策聚合口径——
  • 第 229 / 230 期 query_segmentation_report 以 AppStart 为指标返回 SA-D-32-19:事件名 AppStart 不存在或失效,事件名确认连续 3 期未完成;
  • 本期按 skill「同一 query 失败不重试、立即降级」规则未重试,亦未做任何跨用户覆盖面推断。
  • 客户端侧可见的埋点信号(来自 Logan,非服务端聚合):回放页在本次会话内发送了 DeviceVideoPlayback 自定义事件,携带 errorCode=SA106001、scene=离线推送进入回放、isCloudReplay=false:
07:14:01.377  [KLog][PlayBackSensors]:track playback custom event,
              event=DeviceVideoPlayback, scene=离线推送进入回放,
              devId=18275064, errorCode=SA106001, isCloudReplay=false

该 errorCode 出现在首帧之前,与下述「播放失败判定」同源,可作为后续服务端聚合的检索键。

  • 反向推论(重要):设备 18275064 全程 devIsOnline:1,p2pLastHeartTime 在采集期内持续前移,TPS_MSG_NOTIFY_AUTH_SUCCESS 于 07:13:46.719 正常返回、onP2PNetType{...nResult=16...} 于 07:13:46.276 正常上报,MSG_DEV_SD_STATUS_INFO 返回 abnormal:0——排除「设备离线」「鉴权失败」「SD 卡异常」三条路径,问题指向客户端播放态判定的时序竞态,而非链路或存储可用性。

3. Logan 关键日志(核心数据源,本期拿到秒级时序直证)

  • 反馈 ID:257145(Android,App 8.4.1.6,账号 13578792952 / userId 20664029,设备 18275064)
  • 日志体量:328,410 bytes / 2,044 行,时间跨度 07:13:40.830 ~ 07:17:18.690(约 3 分 38 秒),覆盖「点击推送 → 报警列表 → 回放页 → 播放失败 → 退回报警列表 → 提交反馈」完整链路。
  • 关键时序(可复算):
07:13:41.079  SPush-getPushUrlInfo-->{"bizType":"offline_alarm", ...,"alarmCode":22,
              "deviceId":18275064,"alarmTime":"2026-10-14 07:00:26"}   ← 离线报警推送到达
07:13:42.712  SPush-MainActivity2 onCreate g_isFromAlarm:true          ← 由报警推送拉起
07:13:42.823  KuiklyRenderViewBaseDelegator-initRenderView, pageName: AlarmMessagePage
07:13:43.274  WS 收到 res_pull_device_alarm_list:8 条报警,全部 alarmCode=22,
              picAddress="" / thumbnailAddress=""                    ← 报警列表无缩略图
07:13:43.588  [KLog][AlarmMessagePage]:loadInitialData network-first success elapsedMs=529 rowCount=9
07:13:44.652  KMP_SCAN_TRACE-onCreate page=PlayBackPage
              data={"devId":"18275064","fromAlarmReplay":true,
                    "alarmReplayTime":1791932426000,"fromOfflinePush":true,...}
07:13:45.265  RecordPlayerView-bindDevice isFirst: 18275064           ← 回放页绑定设备
07:14:00.717  RecordPlayerView-stopReplay  viewId=-1 owner=null isOwner=false   ← 空转停止
07:14:02.462  [KLog][PlaybackVM]:fetchEventList: 设备服务返回 count=427
07:14:02.662  [KLog][KMPPlayBackVideoView]:playVideoByTime devId=18275064,
              time=20261014070026, alarmType=268435455 (0xfffffff), audioEnable=1
07:14:02.886  RecordPlayerView-startReplay: devId=18275064, date=20261014070026,
              recordType=268435455 oldViewId=-1 oldOwner=null renderer=81675873
07:14:02.887  RecordPlayerView-startReplay assign owner: devId=18275064 viewId=29
07:14:03.126  [KLog][PlayBackPage]:receive playback play failed event, devId=18275064,
              result=0, currentDevId=18275064, ballDevId=            ← 第 1 次「播放失败」
07:14:03.216  LibImpl-onNvrReplayResp, act=0, have audio=1, video codec=H265
07:14:03.289  LibImpl-onNvrReplayResp-->PlayAgent, devId=18275064, ret=0
07:14:03.310  [KLog][PlayBackPage]:receive playback play failed event, ... result=0  ← 第 2 次
07:14:03.405  RecordPlayerView-onRecvFirstFrame: devId=18275064 viewId=29 isOwner=true ← 首帧到达
07:14:03.410  [KLog][PlayBackPage]:mark card playback first frame, devId=18275064
07:14:05.061  RecordPlayerView-stopReplay  viewId=29 owner=81675873 isOwner=true
07:14:05.445  RecordPlayerView-stopReplay  viewId=-1 owner=81675873 isOwner=true   ← viewId 回退为 -1
07:14:05.413  [KLog][KMPCloudPlaybackVideoView]:resolvePendingPlayCallback,
              success=false, reason=stopCloudReplay_before_success
  • 量化事实(可直接复算):
指标数值口径
点击报警条目 → 进入回放页1.8 sAlarmMessagePage 首帧 → KMP_SCAN_TRACE-onCreate page=PlayBackPage
回放页绑定 → 发起 startReplay17.6 s07:13:45.265 → 07:14:02.886(含 07:14:00.717 的 viewId=-1 空转停止)
startReplay → 首帧0.519 s(519 ms)07:14:02.886 → 07:14:03.405
首次「播放失败」早于首帧279 ms07:14:03.126(失败)→ 07:14:03.405(首帧)
首帧 → 主动 stopReplay1.656 s07:14:03.405 → 07:14:05.061
会话内 receive playback play failed event2 次07:14:03.126 / 07:14:03.310,两次 result 均为 0
TPS_ReplayDevFileRsp is invalid4 次07:14:00.814 / 07:14:05.264 / 07:14:05.672 / 07:14:05.726
报警列表条数 / 均带缩略图8 条 / 0 条picAddress:""、thumbnailAddress:"" 全部为空
录像事件列表条数427 条fetchEventList: 设备服务返回 count=427
  • 时序矛盾(本期最硬的一条证据):07:14:03.216 的 onNvrReplayResp(have audio=1, video codec=H265)与 07:14:03.289 的 PlayAgent ret=0 明确表明取流链路已成功建立,且 07:14:03.405 首帧确实到达;但两次「播放失败」事件(07:14:03.126 / 07:14:03.310)均在此期间之前或之中发出。即:成功信号与失败信号在 474 ms 的时间窗内同时存在,最终以失败信号胜出(stopReplay + viewId=-1)。

4. 代码定位(详细)

  • 涉及模块:Seetong-App-Android/Seetong5.0ForSeetong/Seetong5.0(KMP 跨端回放页 + 原生桥接层)
  • 关键类与位置:
  • RecordPlayerView.kt:220-264(startReplay,KMP 侧回放发起)
  • :236 device.m_first_frame = false
  • :237-238 val playbackWindowId = resolvePlaybackWindowId(device) → device.m_view_id = playbackWindowId(本次解析为 29)
  • :240 device.m_video = openglesRender
  • :245 recordPlayCallback?.onStartReplay(device) ← 同步回调,先于真正的取流请求
  • :248-249 CustomExecutors.ioExecutor().execute { mBridgeService?.startNvrReplay(...) } ← 异步,落后于 :245
  • :250-260 失败分支:重试一次,仍失败则 device.m_view_id = -1、device.m_video = null、recordPlayCallback?.onReplayError(device, retryRet)
  • RecordPlayerView.kt:902-907(resolvePlaybackWindowId)
  • :898-900 isReplayAudioOwner(device) = !device.isMultiChanelIpc() || device.m_devId.endsWith("-CH-1")
  • :903-906 owner 取 PLAY_WND_ID = 29,非 owner 取 SECOND_PLAY_WND_ID = 30
  • RecordPlayerView.kt:64-66 常量:PLAY_WND_ID = 29 / SECOND_PLAY_WND_ID = 30 / GUN_CHANNEL_SUFFIX = "-CH-1"
  • PlayerDevice.java:450-460(isMultiChanelIpc):!isIPC() 直接 false,否则按 m_dev.getFeature() & 0x1 判定
  • KMPPlayBackVideoView.kt:223-229(playVideoByTime)→ :228 startReplay(time, alarmType)
  • KMPPlayBackVideoView.kt:236-246(onRecvFirstFrame)→ :242-244 发送 RECORD_FIRST_FRAME_EVENT
  • BridgeServiceImpl.kt:1886-1888(startNvrReplay)→ LibImpl.getInstance().startNvrReplay(devId, index, null, date, recordType)
  • PlaybackPageRouter.kt:109-135(openKmpPlaybackPage)→ :132 put(PARAM_FROM_OFFLINE_PUSH, fromOfflinePush),:68 fromOfflinePush = scene == 2
  • AlarmBridgeApiImpl.kt:241-271(openPlaybackPage)→ :257 PlaybackPageRouter.openPlaybackPage(...)
  • 调用链(日志 + 代码可证):

SPush(offline_alarm, alarmCode=22) → MainActivity2.onCreate g_isFromAlarm:true → AlarmMessagePage → 点击条目 → AlarmBridgeApiImpl.openPlaybackPage → PlaybackPageRouter.openKmpPlaybackPage(fromOfflinePush=true) → KMP_SCAN_TRACE page=PlayBackPage → RecordPlayerView.bindDevice → KMPPlayBackVideoView.playVideoByTime → RecordPlayerView.startReplay → :245 onStartReplay(同步) → :249 startNvrReplay(IO 线程) → onNvrReplayResp(act=0, H265) → PlayAgent ret=0 → onRecvFirstFrame;与此同时 PlayBackPage 侧发出 receive playback play failed event → stopReplay → viewId=-1

  • 关键分支(需研发确认):
  1. onStartReplay 与 startNvrReplay 的竞态::245 的同步回调会让上层立刻进入「回放中」态,而真正的取流请求在 :249 才提交到 IO 线程。若上层(PlayBackPage)在此期间收到另一个来源的失败信号(例如 eventBus 上的 openCardPlaybackEvent / 上一次 stopReplay 的残留事件),即会命中失败分支并立即 stopReplay。:256 的 device.m_view_id = -1 与日志中 07:14:05.061 的 viewId=29 → -1 完全对应,是本次竞态的可复核指纹。
  2. openCardPlaybackEvent 的触发源未定:日志可见两次 receive playback play failed event 的 result 均为 0(而非错误码),说明失败并非来自 onReplayError(device, retryRet) 的 retryRet != 0 分支,更像事件被复用 / 误触发,需确认该事件是否与 RECORD_DESTROY_EVENT(KMPPlayBackVideoView.kt:265 的 postRecordDestroyIfNeeded)或 EventBus.getDefault().postSticky 共用同一通道。
  3. viewId 生命周期::238 置 29 → :256 失败置 -1 → 首帧回调 onRecvFirstFrame 仍读到 29(07:14:03.405)。同一 device 上 m_view_id 被两处写入且无写序保护,需确认 viewId 由 -1 翻回 29 的写入点。
  • 修复方向锚点:
  1. RecordPlayerView.kt:245:把 recordPlayCallback?.onStartReplay(device) 移到 :249 的 startNvrReplay 成功返回之后(或至少在 startNvrReplay 提交后),使上层「回放中」态与真实取流请求同序;
  2. RecordPlayerView.kt:250-260:失败分支补幂等与 stale 判定——只有在 device.m_view_id 仍等于本次 playbackWindowId 时才允许置 -1 与回调 onReplayError,避免「旧请求的失败覆盖新请求的成功」;
  3. PlayBackPage 侧:receive playback play failed event 增加首帧已到则忽略的前置判定(mark card playback first frame 之后不再接受失败事件),从上层封堵该竞态;
  4. AlarmMessagePage → PlayBackPage 参数:alarmReplayTime=1791932426000 与 pendingSeek=25226 存在 26 秒映射(25226 = 25226 秒即 07:00:26,与 alarmTime 一致),需确认 alarmType=268435455 (0xfffffff) 这一「不限类型」值在 IPC(非枪球)设备上是否应被裁剪为具体事件类型。

5. 根因结论

  • 置信度:🟡 中(Logan 秒级时序可复算、代码锚点明确,但缺服务端口径与第二独立样本)
  • 一句话根因:KMP 回放发起路径把「回放中」回调(RecordPlayerView.kt:245)放在了真实取流请求(:249,IO 线程)之前,且失败分支无 stale 判定,导致上层在首帧已到达(519 ms、H265、PlayAgent ret=0)的情况下仍收到「播放失败」并把 m_view_id 由 29 回退为 -1,用户看到回放被立即终止、退回报警列表。
  • 关键证据链:07:14:02.887 assign owner viewId=29 → 07:14:03.126 / 07:14:03.310 两次 play failed event (result=0) → 07:14:03.216 onNvrReplayResp(act=0, have audio=1) + 07:14:03.289 PlayAgent ret=0 → 07:14:03.405 onRecvFirstFrame → 07:14:05.061 stopReplay viewId=29 → 07:14:05.445 stopReplay viewId=-1。成功与失败信号在 474 ms 内并存并以失败胜出,是本条最硬的证据。
  • 方向性佐证(不单独进雷达):同窗口 257141(HONOR WDY-AN00,8.4.1.6,「回放不可以看了」)的 Logan 覆盖 06:08:23 ~ 06:11:15,全程只进过 PlayerPreviewActivity 与 FeedbackPage,从未进入回放页(KMP_SCAN_TRACE 无 PlayBackPage),实际是在设备预览中看到三路画面后转去提交反馈——说明「回放不可以看了」这一批反馈里混有预览态诉求,不能整体归入本条。该条另见「待补证」。

6. 建议下一步

  • 分配给:KMP 回放页 owner(RecordPlayerView.kt / KMPPlayBackVideoView.kt,按 git blame 指向「唐胜」)+ Android 报警回放入口 owner
  • 优先处理项:
  1. 调整 startReplay 回调时序(RecordPlayerView.kt:245 后移),并给失败分支加 stale 判定(:250-260);
  2. 上层补「首帧已到则忽略失败事件」的门控(PlayBackPage),作为与根因解耦的独立兜底。
  • 验证方法:Android 8.4.1.6,从离线报警推送进入报警列表 → 点击当日报警 → 回放页,连续 10 次,要求:首帧 P95 ≤ 2 s;receive playback play failed event 出现 0 次;viewId 在单次会话内不出现「29 → -1」回退;TPS_ReplayDevFileRsp is invalid 出现 0 次。
  • 任务账本:新增 T-20261014-090647-bbbe(见文末)。

🟠 问题 2:iOS 8.4.1.6 报警消息列表「特别卡顿」——同一用户 32 秒内双条提交(详细分析) | 负责人:欧阳荣、陈宝旺

1. 现象与覆盖范围

  • 现象描述(已脱敏):用户升级到最新版本后,查看报警消息列表时出现明显卡顿;用户原话「查看消息 特别卡顿 ,更新最新版本后。」与「查看报警消息,现在特别卡顿,更新版本以后」,两条同一账号、同一机型、同一版本、相隔 32 秒提交。
  • 涉及反馈:本窗口 2 条(反馈 257122 / 257123,均为 iOS 8.4.1.6、iPhone 机型字段 26.4、河南);两条为同一用户 13503751999 的连续提交,按 skill「去重」规则合并为一个问题处理,计 2 条反馈量。
反馈 ID机型App 版本账号内容Logan
257122iPhone(机型字段 26.4)8.4.1.613503751999查看消息 特别卡顿 ,更新最新版本后。✅ 464,621 bytes gz → 6333 行
257123iPhone(机型字段 26.4)8.4.1.613503751999查看报警消息,现在特别卡顿,更新版本以后✅ 同 clientId,同日 1791820800000 分片
  • 覆盖范围:iOS 单平台,App 8.4.1.6(当前在产主线),1 机型、1 用户、2 条反馈(同一用户),目标设备 38891391(devType:201、devChannelCount:10、devChannelStates:"1111111022",即 10 通道 NVR 且末两路非在线,设备名「家」)。
  • 覆盖范围的重要限制:本期 2 条反馈同源,实际独立样本为 1;且两份 Logan 的时间分布为跨日稀疏采样(257122 覆盖 2026-10-13 01:02:57 ~ 23:03:22 共 1015 条时间戳,257123 同为同日分片),不能判定卡顿的普遍程度,仅能锁定代码路径与版本相关性。
  • 关键排除:两份 Logan 中没有针对消息页的 MessagePage / AlarmMessagePage 页面级耗时埋点,也没有任何崩栈、ANR、主线程 watchdog 记录。因此本期不能把「卡顿」写成「渲染线程阻塞」或「崩溃」,只能定位到数据侧重建路径(见第 4 节)。
  • 严重度评分:61/100(反馈量 10 / 共性 21 / 关键度 30)——
  • 反馈量与增长(10/30):本窗口 2 条,但同源(同一用户 32 秒内双提),按 1 个独立反馈量取值 10;
  • 共性广度(21/30):1 平台 × 1 版本 × 1 机型 × 1 用户,但10 通道 NVR 的通道数与设备在线态分布(devChannelStates:"1111111022")是通用形态,按 2 维量级取值 21;
  • 业务关键度(30/40):报警消息属「录像回放 / 报警 = 30」档;
  • 上调依据:本期首次拿到同源双条的时间戳指纹(32 秒间隔)并锁定具体缓存重建路径,证据等级由「弱」升「中」,故在基础分上上调。

2. 神策证据(核心数据源)

  • 关键局限(必须先说明):与问题 1 同因——query_segmentation_report 事件名确认连续 3 期未完成(第 229 / 230 期均为 SA-D-32-19),本期按 skill 规则未重试、未做聚合推断。
  • 客户端侧可见的埋点信号(来自 Logan):两份 Logan 中可见消息未读数接口与设备列表接口的正常往返,均返回 code:200、unreadMessageCount:0 / systemMsgUnreadCount:0, activityMsgUnreadCount:0:
{"code":200,"success":true,"msg":"操作成功","data":{"unreadMessageCount":0}}
{"code":200,"success":true,"msg":"操作成功","data":{"systemMsgUnreadCount":0,"activityMsgUnreadCount":0}}

说明服务端侧无异常、无堆积消息,卡顿更可能来自本地列表数据重建而非网络。

  • 反向推论(重要):两份 Logan 全程长连接状态正常、无 主动断开长连接 之外的中断记录,设备列表接口返回单台 devType:201 设备且 devIsOnline:1——排除「网络差导致列表加载慢」这一路径,问题指向客户端侧列表构造。

3. Logan 关键日志(核心数据源)

  • 反馈 ID:257122(iOS,App 8.4.1.6,账号 13503751999,clientId C56EF886-424D-4DAA-BF0E-5CCB5E166C33)
  • 日志体量:464,621 bytes gz → 6333 行(257123 为同 clientId 分片,dbc94f1d-... 与 25b0ba20-...)
  • 时间跨度:2026-10-13 01:02:57.712 ~ 2026-10-13 23:03:22.163(跨整日稀疏采样,共 1,015 条带时间戳行)
  • 关键发现(必须先说):该 Logan 的消息相关记录仅有接口往返,没有页面级耗时记录——
  • 全量检索 卡顿 / 慢 / jank / stutter / FPS / frame / 主线程:命中 0 条;
  • 消息未读数接口(/seetong-sms/member-message/unread/count)在同日多次返回 unreadMessageCount:0;
  • 设备列表接口(/seetong-member-device/device/list)同日多次返回同一台 10 通道 NVR。
  • 结论:无法用 Logan 直证「卡顿」的量级,只能确证「服务端正常、消息为空」。因此本期证据链以代码路径 + 版本相关性为主,并在「待补证」列出补采方案。
  • 同源双条指纹(可复核):
反馈 ID提交时间机型版本内容长度
2571222026-10-13 23:04:13iPhone 26.48.4.1.620 字
2571232026-10-13 23:04:45iPhone 26.48.4.1.621 字

两条间隔 32 秒、同账号同 clientId,属用户「第一次提交后未见好转、立刻再提一次」的行为,反映主观体感强烈(虽不能作为客观性能指标)。

4. 代码定位(详细)

  • 涉及模块:Seetong-App-Android/Seetong5.0ForSeetong/Seetong5.0(KMP 报警消息页,iOS 与 Android 共用同一 KMP 页面实现,故 Android 侧代码可作为 iOS 的机制参照)
  • 关键类与位置(由 Logan 类名反推 + Android 侧源码交叉确认):
  • AlarmMessagePage(loadInitialData network-first activeUserIdPresent=true skipCachedInitialUiState=true)
  • AlarmMessagePageVM:
  • loadInitialUiState start requestDate=... cachedBucketCount=0 deviceSnapshotCount=1
  • requestFirstPage date=... startTime=00:00:00 endTime=... selectedDeviceId= requestDeviceIds=[] anchor=null-null
  • queryAlarmMessages start / success ... itemCount=8
  • replaceResponseWindowInCache success ... count=8 preservedReadCount=0 readStateMs=3 entityMapMs=1 daoMs=5 totalMs=9
  • upsertTimelineWindowFromResponse success ... daoMs=2
  • syncLoadedMessagesFromCache incremental loadedCount=8 fallbackCount=8
  • loadInitialData network-first success elapsedMs=529 rowCount=9
  • loadInitialCachePreviewUiState ready rowCount=105 / loadInitialData shows cache preview after first frame rowCount=105
  • PlayBackPage(问题 1 的同一页面族,属同一次会话)
  • 调用链(日志可证):

AlarmMessagePage.loadInitialData(network-first) → AlarmMessagePageVM.loadInitialUiState → queryAlarmMessages → replaceResponseWindowInCache → upsertTimelineWindowFromResponse → syncLoadedMessagesFromCache → loadInitialData network-first success(elapsedMs=529, rowCount=9);同时以 post_first_frame_cache_preview 触发一次 loadInitialCacheFallbackUiState(cachedCount=100 targetCount=20 elapsedMs=136)

  • 关键分支(需研发确认):
  1. 双路写入同一缓存:日志中「缓存预览路径」(loadInitialCacheFallbackUiState restored trigger=post_first_frame_cache_preview cachedCount=100、loadInitialCachePreviewUiState ready rowCount=105)与「网络优先路径」(replaceResponseWindowInCache count=8、syncLoadedMessagesFromCache loadedCount=8)在同一次 loadInitialData 内先后执行,最终 rowCount=9。105 → 9 的行数落差意味着一次大列表重建,在 10 通道 NVR 设备上(事件条数可达数百)该重建成本随通道数线性增长。
  2. deviceSnapshotCount=1 而 availableBucketCount=6 / bucketCount=7:日期桶 7 天、每桶需与设备快照做交集,需确认该交集运算是否在主线程执行。
  3. skipCachedInitialUiState=true:说明本期强制跳过缓存态、走 network-first,会使每次进入消息页都重建列表——与用户「更新版本后特别卡顿」的描述方向一致,需确认该开关是否为 8.4.1.6 新引入。
  • 修复方向锚点:
  1. AlarmMessagePageVM 的 loadInitialData:把 replaceResponseWindowInCache / upsertTimelineWindowFromResponse / syncLoadedMessagesFromCache 三步迁到后台线程,只把最终列表 diff 回主线程;
  2. 复核 skipCachedInitialUiState 的默认值(日志显示为 true),确认「每次进页都重建」是否为预期;
  3. 对 10 通道及以上 NVR,对 queryAlarmMessages 的 itemCount 加分页上限 + 增量渲染,避免单次 rowCount=105 级别的一次性重建。

5. 根因结论

  • 置信度:🟡 中(代码路径与版本相关性成立、同源双条可核,但缺覆盖操作时段的 Logan,无法量化卡顿)
  • 一句话根因:报警消息页在 8.4.1.6 上以 network-first + skipCachedInitialUiState 强制每次进页重建列表,并在首帧后同时触发缓存预览与网络响应两条写入路径,导致一次 105 行 → 9 行的整表重建;用户主观体感为「查看报警消息特别卡顿」。
  • 关键证据链:loadInitialUiState ... cachedBucketCount=0 × loadInitialData network-first success elapsedMs=529 rowCount=9 × loadInitialCachePreviewUiState ready rowCount=105 三者共同指向「重建而非加载」。但「卡顿」的具体量级与是否发生在消息页,本期 Logan 无法证实,故置信度止于「中」。

6. 建议下一步

  • 分配给:iOS 消息模块 owner(KMP 报警消息页跨端共用,需与 KMP 侧对齐)
  • 优先处理项:
  1. 补采:回访 13503751999(河南),索取覆盖「查看报警消息」操作的完整 Logan(当前两份均为跨日稀疏采样,不含操作时段);
  2. 复现:iPhone + iOS 8.4.1.6 + 10 通道 NVR,进入报警消息页连续 10 次,记录 loadInitialData 端到端耗时与主线程帧间隔;
  3. 若确认重建路径耗时偏高,按修复方向 1 迁线程。
  • 验证方法:进入消息页连续 10 次,loadInitialData 端到端 P95 ≤ 300 ms;列表首次可交互 ≤ 500 ms;主线程单帧阻塞 < 16 ms。
  • 任务账本:新增 T-20261014-090651-44e1(见文末)。

🟡 问题 3:HarmonyOS 1.1.1.11 聚集连续第 10 期(弱线索,仅记录不单独深挖)

1. 现象与覆盖范围

  • 本窗口 HarmonyOS 反馈 16 条(跨 14 机型、10 个地区),1.1.1.11 占 16 条(100%),为连续第 10 期聚集。
  • 主题分布:离线 / 掉线 / 连不上 7(257067 / 257093 / 257109 / 257110 / 257136 / 257152 / 257153)、回放不可用 2(257083 / 257090)、灯光与 IR 控制 3(257057 / 257075 / 257076)、Ai 与人形 2(257139 / 257144)、字体与体验 1(257126)、视频慢 1(257062)。
  • 本窗口新增可跟进信号(首次出现具体机制描述):反馈 257110(HUAWEI SGT-AL50,天津)称「我家这个摄像头 总是突然就离线 之前离线的时候断一下电 就会恢复,现在断电也不管事了。」——该反馈明确给出「断电重启已失效」这一状态变化,是 10 期聚集以来第一条可用于区分「设备侧掉线」与「服务端在线态误判」的线索,建议下一期优先取该用户日志(见「待补证」)。
  • 零 Logan 缺口连续第 10 期未解:本窗口 HarmonyOS 16/16 条零 Logan(对照 Android 88 条中 77 条有 Logan、iOS 3/3 有 Logan),本期仍无法给出任何根因判断,仅作聚集记录。
  • 严重度评分:64/100(反馈量 30 / 共性 24 / 关键度 10),置信度 弱。
  • 处置:沿用任务 T-20260926-170258-2226(本期为第 10 期),不重复创单;新增离线态专项任务 T-20261014-090651-0bee(针对 257110 的「断电不恢复」)。

2. 建议下一步

  • 分配给:HarmonyOS owner + 服务端在线态 owner
  • 优先处理项:
  1. 优先回访 257110(天津,HUAWEI SGT-AL50),索取设备离线时段日志,确认「断电不恢复」是设备真离线还是服务端 devIsOnline / lastHeartTime 未更新;
  2. 延续 T-20260926-170258-2226:为实时预览补首帧超时与失败提示,并把 AddWatchEx 返回值 / 连接类型 / 首帧回调按 devId 串联埋点。
  • 验证方法:取 3 ~ 5 名反馈用户复现,要求能区分「P2P 未建链」「鉴权失败」「服务端在线态滞后」三类。

本期扫描全量(全部沉淀到知识库)

Markdown 里保留全部反馈(含 -102 等网络问题);HTML 呈现时渲染器会自动折叠 🟣 普遍性网络问题
(含中/英/俄/法/西/葡/土/阿/日多语言网络提示模板),只展示更有价值的条目,无需在本段手工删减。

窗口内非网络类明细(31 条,逐条登记)

#反馈 ID时间平台 / 机型版本地区内容(节选)分类处置
125705610-13 17:21Android PEAM008.0.2.2山西省恢复出厂设置后二维码出来滴滴🟡 单点待补证已排除(低版本单点,无 Logan)
225705710-13 17:23Harmony ADY-AL001.1.1.11山东省灯光一直显示红色 监控里面显示红色 改不过来🟡 单点待补证已排除(并入问题 3)
325706210-13 18:05Harmony EMA-AL00U1.1.1.11山西省视频太慢🟡 单点待补证已排除(并入问题 3)
425706710-13 18:29Harmony CHZ-AL001.1.1.11内蒙古自治区三天两头没网🟡 单点待补证已排除(并入问题 3)
525707310-13 18:53Android OCE-AN508.4.1.6广西壮族自治区s9a252🟢 无效文本已排除
625707510-13 19:11Harmony MIA-AL001.1.1.11吉林省夜间灯光怎么关不了呢?🟡 单点待补证已排除(并入问题 3)
725707610-13 19:18Harmony BRE-AL80a1.1.1.11安徽省灯一闪闪的🟡 单点待补证已排除(并入问题 3)
825708210-13 19:53Android PJY1108.1.2.4安徽省为什么坏内存卡,🟡 单点待补证已排除(低版本 + 硬件类,无 Logan)
925708310-13 19:55Harmony ADY-AL101.1.1.11浙江省不能回放,怎么处理🟡 单点待补证已排除(并入问题 3)
1025709010-13 20:32Harmony MIS-AL001.1.1.11山东省录像回放里有三个小时后的视频怎么回事🟡 单点待补证已排除(并入问题 3;涉及时区口径)
1125709310-13 20:40Harmony PLA-AL101.1.1.11黑龙江省总离线🟡 单点待补证已排除(并入问题 3)
1225709610-13 20:47Android WDY-AN008.4.1.6内蒙古自治区我的手机坏了开不了机了摄像头无法登陆上新手机上了🟤 咨询已排除(换机登录咨询,非缺陷)
1325710310-13 21:38Android 21091116AC8.4.1.6山东省Bailed🟢 无效文本已排除
1425710710-13 21:57Android V1930A8.3.12.4内蒙古自治区金生🟢 无效文本已排除
1525710910-13 22:02Harmony HOP-AL101.1.1.11山东省连不上网🟡 单点待补证已排除(并入问题 3)
1625711010-13 22:06Harmony SGT-AL501.1.1.11天津市我家这个摄像头 总是突然就离线 之前离线的时候断一下电 就会恢复,现在断电也不管事了。🟡 单点待补证(机制线索)已排除(并入问题 3;新增专项任务)
1725711610-13 22:40iOS iPhone 26.6.28.4.1.6山东省报警里面的视频都看不了🟡 单点待补证已排除(Logan 仅冷启动,不覆盖操作时段)
1825712110-13 23:02Android AMM-AN008.4.1.6辽宁省只能存储一天录像🟡 单点待补证已排除(存储容量口径,非播放链路)
1925712210-13 23:04iOS iPhone 26.48.4.1.6河南省查看消息 特别卡顿 ,更新最新版本后。🔴 进雷达详细分析见问题 2
2025712310-13 23:04iOS iPhone 26.48.4.1.6河南省查看报警消息,现在特别卡顿,更新版本以后🔴 进雷达详细分析见问题 2(同源)
2125712610-13 23:36Harmony BRE-AL80a1.1.1.11河南省字体大小看不清🟡 单点待补证已排除(并入问题 3)
2225713210-14 02:15Android V1938CT8.4.1.6山西省你好咱么连不上监控呢🟡 单点待补证已排除(见「待补证」:Logan 直证设备真离线)
2325713610-14 03:07Harmony CHZ-AL001.1.1.11内蒙古自治区咋回事又没有连接了呢🟡 单点待补证已排除(并入问题 3)
2425713710-14 03:32Android TECNO KL58.3.13.3塞内加尔考拉克770887373🟢 无效文本已排除
2525713910-14 05:53Harmony JUY-AL501.1.1.11河南省人形侦察却找不到人形🟡 单点待补证已排除(并入问题 3)
2625714110-14 06:11Android WDY-AN008.4.1.6山东省回放不可以看了🟡 单点待补证已排除(Logan 全程无回放页,实为预览态诉求)
2725714410-14 06:40Harmony SGT-AL001.1.1.11吉林省有很多根本就不显示,就是有人也不显示🟡 单点待补证已排除(并入问题 3)
2825714510-14 07:17Android BLK-AL808.4.1.6吉林省有报警消,第一次加载不出来🔴 进雷达详细分析见问题 1
2925715110-14 08:21Android LYN-AN008.4.1.6河南省视频有时候录不上🟡 单点待补证Logan 已取得,本期未深挖(见「待补证」)
3025715210-14 08:37Harmony LMR-AL001.1.1.11四川省老是离线🟡 单点待补证已排除(并入问题 3)
3125715310-14 08:47Harmony TYR-AL001.1.1.11吉林省手机连不上啦🟡 单点待补证已排除(并入问题 3)

网络类(76 条,按模板折叠)

关键词反馈数平台分布分类处置
请检查手机网络,重启App尝试解决(-102)71Android 70 / iOS 1🟣 网络问题已排除(普遍类,HTML 自动折叠)
Please check your mobile network ... (-102)3Android 3(含印度 2 / 芬兰 1)🟣 网络问题已排除(英文同源模板)
Текущая сеть нестабильна / Проверьте телефонную сеть2Android 2(乌兹别克 / 塔什干州)🟣 网络问题已排除(俄语同源模板)
上方 76 条含 -102 与多语言同源模板;The current network is unstable 一类文案已并入本表统计,未单独计数。

心愿单亮点(可选,仅当本期有价值诉求时)

本窗口心愿单未拉取(见「数据源状态汇总」心愿单一行);本期不列亮点表。

数据源状态汇总

数据源状态说明
反馈接口✅ 正常total=107 / fetched=107 / complete=true(3 页);窗口起点接上一期 H17 右端 2026-10-13 17:00:00,终点为本期 run 时刻 2026-10-14 09:00:00,两期首尾相接、不重叠
心愿单接口➖ 本期未拉本期两个进雷达问题均为功能性故障,未做诉求侧扫描;下一期如遇产品类候选再补
Logan(Android)✅ 正常77/88 条提供可用链接;本期下载 3 份(257145、257132、257141),最大 696,141 bytes / 4,047 行
Logan(iOS)⚠️ 部分3/3 条提供;本期下载 3 份(257116、257122、257123),其中 257116 仅覆盖冷启动、257122 为跨日稀疏采样,均不覆盖用户所述操作时段
Logan(HarmonyOS)❌ 失效(连续 10 期)本窗口 0/16 条提供链接,无法下载;为问题 3 的核心阻塞点
神策❌ 本期未取事件名确认连续 3 期未完成(第 229 / 230 期 SA-D-32-19);按 skill「同一 query 失败不重试、立即降级」规则,本期未作任何聚合推断
友盟➖ 未查本期两个进雷达问题均非崩溃 / ANR(问题 2 的卡顿无崩栈与 watchdog 记录),按 skill 规则不查友盟
TAPD➖ 未查本期无 BUG 单号引用,且属功能性根因分析,按 skill 规则不查 TAPD

协议语义记录(供后续期次复用):

  • 离线报警推送 bizType=offline_alarm,本窗口 alarmCode=22(设备离线报警);报警列表返回的 picAddress / thumbnailAddress 在未开通云存或设备无抓图能力时可全为空。
  • KMP 回放窗口 ID:PLAY_WND_ID = 29(RecordPlayerView.kt:64)、SECOND_PLAY_WND_ID = 30(:65);owner 判定见 isReplayAudioOwner(:898-900),依赖 isMultiChanelIpc()(PlayerDevice.java:450-460,feature & 0x1)与 -CH-1 后缀。
  • iOS 报警消息页与 Android 共用 KMP 实现(AlarmMessagePage / AlarmMessagePageVM),跨端修改需两端同步回归。
  • 反馈 257132 的日志直证(供后续「连不上监控」类对照):设备 16613534(a13994794854,SN 0A07EADFCD4B3022)服务端 devIsOnline:0、lastHeartTime=1789525760000(2026-09-16 10:29:20,滞后 27 天)、p2pLastHeartTime=1789524979000(2026-09-16 10:16:19),全窗口 TPS_MSG_P2P_OFFLINE 117 次、add_watch_result=-1 23 次。属设备真离线,已排除,不计入雷达。

方法学记录:本期 Logan 下载继续使用反馈服务内置鉴权(app-logan.seetong.com 需 Authorization: Basic,与 seetong_feedback_server.py 的 _download_and_parse_log 保持一致)——这是「同一 URL 取不到日志」这一常见误判的正解。未使用 Authorization: Bearer(会返回 401)。

待补证

  • 问题 1 的第二独立样本(最高优先):本期仅 257145 一条含完整「离线推送 → 回放页」链路。需在 Android 8.4.1.6 上复现「从离线报警推送进入卡回放、首次点开失败」,并抓取至少 2 份独立用户 Logan,确认 receive playback play failed event 是否为共性而非个例。
  • 问题 1 的 openCardPlaybackEvent 触发源:两次失败事件的 result 均为 0(非错误码),需确认该事件是否被 EventBus.postSticky / RECORD_DESTROY_EVENT(KMPPlayBackVideoView.kt:264-268)复用误触发;这是判断「竞态」还是「事件污染」的关键。
  • 问题 1 的 viewId 写序:需确认 device.m_view_id 在 :238(置 29)→ :256(置 -1)→ 首帧回调仍为 29 的三次写入中,churn 由哪个线程驱动、是否有锁保护。
  • 问题 1 的 alarmType=268435455 (0xfffffff):该「不限类型」值在 IPC(devType:101,非枪球)设备上是否应裁剪为具体事件类型,需协议 owner 确认。
  • 问题 2 的覆盖操作时段 Logan(关键缺口):257122 / 257123 均为跨日稀疏采样,不含「查看报警消息」操作时段的页面级记录。需回访 13503751999(河南)索取完整日志,或在 8.4.1.6 上补采。
  • 问题 2 的卡顿量级:需在 10 通道 NVR(devChannelStates:"1111111022" 形态)上实测 loadInitialData 端到端耗时与主线程帧间隔,确认「卡顿」是否落在消息页而非其它页面。
  • 问题 2 的 skipCachedInitialUiState=true 来源:需确认该开关是否为 8.4.1.6 新引入(若是,则与用户「更新版本以后」的时间描述吻合)。
  • 257116(iOS 8.4.1.6,「报警里面的视频都看不了」):Logan 仅覆盖 2026-10-13 22:39 的冷启动与长连接建立,不含报警视频播放操作(全量检索 alarm / 报警 / 播放 / 录像 零命中)。需回访 17861020652(山东)补采;若再现即进雷达。
  • 257141(Android 8.4.1.6,「回放不可以看了」):Logan 覆盖 06:08:23 ~ 06:11:15,全程未进入回放页(KMP_SCAN_TRACE 无 PlayBackPage,仅 PlayerPreviewActivity → SystemSetPage → ImprovePage → FeedbackPage)。用户实为在设备预览中看到三路画面后转去提交反馈,需下一期拆分「预览态」与「回放态」诉求。
  • 257151(Android 8.4.1.6,HONOR LYN-AN00,「视频有时候录不上」):Logan 已取得(328 KB 级,窗口 08:21:36 前后),本期时间预算已用于问题 1 / 2,未深挖;下期若再现即进雷达。
  • 257121(Android 8.4.1.6,「只能存储一天录像」):属存储容量与录制策略口径(非播放链路),本期未取 Logan;若多期再现需转 seetong-feedback-triage。
  • HarmonyOS Logan 缺口(连续 10 期阻塞根因,最高优先):本窗口 0/16 条提供链接(对照 Android 77/88、iOS 3/3)。建议持续固定披露该比值以量化缺口;同时优先回访 257110(天津,SGT-AL50,「断电也不管事了」)。
  • 神策事件名确认(连续 3 期未完成):需先用 list_event_schemas 确认真实的「首帧时延 / 预览会话 / 回放 / 报警消息」事件名,再补 7 天趋势;本期按 skill 规则降级,未重试。

任务账本

任务 ID标题状态处置
T-20260926-170258-2226排查 HarmonyOS 1.1.1.11 实时预览与回放大范围不可用P1 / captured沿用,本期为其第 10 期
T-20260926-170258-576a核查 Android 8.4.1.6 KMP 回放页缺少屏幕常亮导致回放熄屏P1 / captured不涉及,本期窗口无同类反馈
T-20260926-115214-fdf9核查 HarmonyOS 1.1.1.11 设备已联网但列表显示离线P1 / captured相关但不合并,本期 257110 为「断电不恢复」新形态,另建专项单
T-20261013-090000-a1b2核查 Android 8.4.1.6 进入监控首帧迟至 105 秒、add_watch_result=-1 空转P1 / captured延续观察,本期 257132(23 次 -1)与 257141(3 次 -1,首帧均 ≤ 2.3 秒)未复现长时滞,见「待补证」
T-20261013-090000-c3d4核查 iOS 对讲松手未冲刷尾部录音缓冲导致语音截断P1 / captured不涉及,本期窗口无对讲类反馈
T-20261014-090647-bbbe核查 Android 8.4.1.6 KMP 卡回放误报播放失败:startReplay 与失败事件竞态P1 / captured新增,见问题 1
T-20261014-090651-44e1核查 iOS 8.4.1.6 报警消息列表卡顿:需补采覆盖操作时段 LoganP1 / captured新增,见问题 2
T-20261014-090651-0bee核查 HarmonyOS 1.1.1.11 设备频繁离线且断电不恢复:lastHeartTime 无心跳更新P1 / captured新增,见问题 3
说明:问题 1(startReplay 竞态)与 T-20261013-090000-a1b2(首帧迟至 105 秒)同属 Android 播放链路但根因不同(失败事件竞态 vs 取流空转),按 skill 规则独立建单,未合并。问题 3 的 257110 与 T-20260926-115214-fdf9(已联网却显示离线)同族但形态不同(断电不恢复 vs 在线态误显),亦独立建单。

下一期 = 第232期 = 2026-10-14-H17(今天下午 17:00;窗口 今日 09:00 ~ 17:00)

🗂️历史期次

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