🎯 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 条反馈 | 85 | Android · iOS | 8.4.1.6 / 8.3.14.2 | 唐胜、许源、欧阳荣、谭伟 | 8.4.1.6 对回放链路做了多处改动(时间条 UI、通道切换进度对齐、报警-录像联动),导致回放体验多点退化;Logan 显示取流层无崩溃,问题在"UI/状态对齐 + 报警录像关联"而非连接失败。 |
| 2 | KMP 回放页未申请屏幕常亮,回放中手机自动息屏 10 期 · 25 条反馈 | 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,回放过程中发生系统级息屏。 |
| 3 | HarmonyOS 1.1.1.11 回放 / 监控链路不可用连续第 6 期聚集 12 期 · 117 条反馈 | 72 | HarmonyOS | 1.1.1.11 / 1.1.1 / 1.1.1.6 | 陈宝旺、冉博麟、唐胜、李国涛 | 待定——HarmonyOS 1.1.1.11 的回放 / 监控链路存在跨机型跨地区的选择性失败,但由于 HarmonyOS 端 Logan 上报链路自 2026-09 起持续缺失(连续 6 期 0 条可下载),根因无法从客户端日志侧确认,当前只能确认「影响面真实存在且在扩大机型覆盖面」。 |
| 4 | KMP 卡回放取「当天录像」时走云回放分支,失败后无超时兜底并反复重试 1 期 · 4 条反馈 | 71 | Android | 8.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) 固化到下一次。 |
| 5 | iOS 灯光配置「提示失败 / 实际成功」——`NetworkIndicatorEnable="-1"` 非法值导致 1521 返回 -1 1 期 · 3 条反馈 | 68 | iOS | 8.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 已生效 → 用户看到「提示失败、实际成功」。 |
| 6 | Android 8.4.1.6 进入监控长期「一直加载」——`add_watch_result=-1` 连续失败 40 次、首帧迟至 105 秒 2 期 · 9 条反馈 | 66 | Android · iOS | 8.4.1.6 | 唐胜、张威、谭伟、欧阳荣 | 进入监控页时 P2P 通道尚未建立,客户端在 105 秒窗口内以约 10 秒为周期反复 addWatch(返回 -1)→ stopWatch 空转,且无首帧超时兜底,用户侧表现为「一直加载」。 |
| 7 | iOS 回放「当前同时播放人数已达上限」误触发——NVR 主设备与通道共享 `cloudId` 导致额度自占 1 期 · 1 条反馈 | 64 | iOS | 8.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 立即把它翻译成「当前同时播放人数已达上限」并强制停止回放、隐藏功能栏,用户表现为「回放看不了」。 |
| 8 | Android 8.4.1.6「不存录像了」——设备侧存储能力位缺失 2 期 · 6 条反馈 | 63 | Android · HarmonyOS · iOS | 8.4.1.6 / 1.1.1.11 | 唐胜、张威 | 待补证——该 HONOR BRC-AN00 用户的设备在能力协商中未声明本地存储能力,客户端据此既不提示也无法确认存储可用,表现为「不存录像」;需设备端确认存储介质状态与固件行为。 |
| 9 | Android 8.4.1.6 卡回放开启 2 倍速后画面丢帧、时间轴跳 10 余秒 2 期 · 2 条反馈 | 62 | Android | 8.4.1.6 | 陈宝旺、唐胜 | 卡回放链路对时间轴滚动中间值未做节流(onTimeChanged 直通),且帧回调的去重粒度为固定 1 秒,在 2 倍速下单帧时间跨度已超过去重窗口,两者叠加使刻度尺与文案出现十秒级跳变;画面丢帧则需由播放器侧 controlNvrReplay(..., NVR_ACTION_FAST, speed, "") 的取流策略确认。 |
| 10 | 云录像漏录人(AI 人形录像缺失) 1 期 · 2 条反馈 | 62 | Android | 8.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 |
|---|---|---|---|---|---|
| 257145 | HUAWEI BLK-AL80 | 8.4.1.6 | 13578792952 / userId 20664029 | 有报警消,第一次加载不出来 | ✅ 46,583 bytes gz → 328,410 bytes / 2,044 行 |
- 覆盖范围:Android 单平台,App
8.4.1.6(当前在产主线),单机型、单用户;目标设备18275064(devType:101IPC、devSubType:1、devChannelCount:2、devChannelStates:"11",设备名「大门」,SN0A3B188DC4543133),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 s | AlarmMessagePage 首帧 → KMP_SCAN_TRACE-onCreate page=PlayBackPage |
回放页绑定 → 发起 startReplay | 17.6 s | 07: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 ms | 07:14:03.126(失败)→ 07:14:03.405(首帧) |
首帧 → 主动 stopReplay | 1.656 s | 07:14:03.405 → 07:14:05.061 |
会话内 receive playback play failed event | 2 次 | 07:14:03.126 / 07:14:03.310,两次 result 均为 0 |
TPS_ReplayDevFileRsp is invalid | 4 次 | 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 侧回放发起):236device.m_first_frame = false:237-238val playbackWindowId = resolvePlaybackWindowId(device)→device.m_view_id = playbackWindowId(本次解析为 29):240device.m_video = openglesRender:245recordPlayCallback?.onStartReplay(device)← 同步回调,先于真正的取流请求:248-249CustomExecutors.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-900isReplayAudioOwner(device) = !device.isMultiChanelIpc() || device.m_devId.endsWith("-CH-1"):903-906owner 取PLAY_WND_ID = 29,非 owner 取SECOND_PLAY_WND_ID = 30RecordPlayerView.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)→:228startReplay(time, alarmType)KMPPlayBackVideoView.kt:236-246(onRecvFirstFrame)→:242-244发送RECORD_FIRST_FRAME_EVENTBridgeServiceImpl.kt:1886-1888(startNvrReplay)→LibImpl.getInstance().startNvrReplay(devId, index, null, date, recordType)PlaybackPageRouter.kt:109-135(openKmpPlaybackPage)→:132put(PARAM_FROM_OFFLINE_PUSH, fromOfflinePush),:68fromOfflinePush = scene == 2AlarmBridgeApiImpl.kt:241-271(openPlaybackPage)→:257PlaybackPageRouter.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
- 关键分支(需研发确认):
onStartReplay与startNvrReplay的竞态::245的同步回调会让上层立刻进入「回放中」态,而真正的取流请求在:249才提交到 IO 线程。若上层(PlayBackPage)在此期间收到另一个来源的失败信号(例如eventBus上的openCardPlaybackEvent/ 上一次stopReplay的残留事件),即会命中失败分支并立即stopReplay。:256的device.m_view_id = -1与日志中07:14:05.061的viewId=29 → -1完全对应,是本次竞态的可复核指纹。openCardPlaybackEvent的触发源未定:日志可见两次receive playback play failed event的result均为0(而非错误码),说明失败并非来自onReplayError(device, retryRet)的retryRet != 0分支,更像事件被复用 / 误触发,需确认该事件是否与RECORD_DESTROY_EVENT(KMPPlayBackVideoView.kt:265的postRecordDestroyIfNeeded)或EventBus.getDefault().postSticky共用同一通道。viewId生命周期::238置 29 →:256失败置 -1 → 首帧回调onRecvFirstFrame仍读到 29(07:14:03.405)。同一device上m_view_id被两处写入且无写序保护,需确认viewId由 -1 翻回 29 的写入点。
- 修复方向锚点:
RecordPlayerView.kt:245:把recordPlayCallback?.onStartReplay(device)移到:249的startNvrReplay成功返回之后(或至少在startNvrReplay提交后),使上层「回放中」态与真实取流请求同序;RecordPlayerView.kt:250-260:失败分支补幂等与 stale 判定——只有在device.m_view_id仍等于本次playbackWindowId时才允许置-1与回调onReplayError,避免「旧请求的失败覆盖新请求的成功」;PlayBackPage侧:receive playback play failed event增加首帧已到则忽略的前置判定(mark card playback first frame之后不再接受失败事件),从上层封堵该竞态;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 - 优先处理项:
- 调整
startReplay回调时序(RecordPlayerView.kt:245后移),并给失败分支加 stale 判定(:250-260); - 上层补「首帧已到则忽略失败事件」的门控(
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 |
|---|---|---|---|---|---|
| 257122 | iPhone(机型字段 26.4) | 8.4.1.6 | 13503751999 | 查看消息 特别卡顿 ,更新最新版本后。 | ✅ 464,621 bytes gz → 6333 行 |
| 257123 | iPhone(机型字段 26.4) | 8.4.1.6 | 13503751999 | 查看报警消息,现在特别卡顿,更新版本以后 | ✅ 同 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,clientIdC56EF886-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 | 提交时间 | 机型 | 版本 | 内容长度 |
|---|---|---|---|---|
| 257122 | 2026-10-13 23:04:13 | iPhone 26.4 | 8.4.1.6 | 20 字 |
| 257123 | 2026-10-13 23:04:45 | iPhone 26.4 | 8.4.1.6 | 21 字 |
两条间隔 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=1requestFirstPage date=... startTime=00:00:00 endTime=... selectedDeviceId= requestDeviceIds=[] anchor=null-nullqueryAlarmMessages start / success ... itemCount=8replaceResponseWindowInCache success ... count=8 preservedReadCount=0 readStateMs=3 entityMapMs=1 daoMs=5 totalMs=9upsertTimelineWindowFromResponse success ... daoMs=2syncLoadedMessagesFromCache incremental loadedCount=8 fallbackCount=8loadInitialData network-first success elapsedMs=529 rowCount=9loadInitialCachePreviewUiState ready rowCount=105/loadInitialData shows cache preview after first frame rowCount=105PlayBackPage(问题 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)
- 关键分支(需研发确认):
- 双路写入同一缓存:日志中「缓存预览路径」(
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 设备上(事件条数可达数百)该重建成本随通道数线性增长。 deviceSnapshotCount=1而availableBucketCount=6/bucketCount=7:日期桶 7 天、每桶需与设备快照做交集,需确认该交集运算是否在主线程执行。skipCachedInitialUiState=true:说明本期强制跳过缓存态、走 network-first,会使每次进入消息页都重建列表——与用户「更新版本后特别卡顿」的描述方向一致,需确认该开关是否为 8.4.1.6 新引入。
- 修复方向锚点:
AlarmMessagePageVM的loadInitialData:把replaceResponseWindowInCache/upsertTimelineWindowFromResponse/syncLoadedMessagesFromCache三步迁到后台线程,只把最终列表 diff 回主线程;- 复核
skipCachedInitialUiState的默认值(日志显示为true),确认「每次进页都重建」是否为预期; - 对 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 侧对齐)
- 优先处理项:
- 补采:回访
13503751999(河南),索取覆盖「查看报警消息」操作的完整 Logan(当前两份均为跨日稀疏采样,不含操作时段); - 复现:iPhone + iOS 8.4.1.6 + 10 通道 NVR,进入报警消息页连续 10 次,记录
loadInitialData端到端耗时与主线程帧间隔; - 若确认重建路径耗时偏高,按修复方向 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
- 优先处理项:
- 优先回访 257110(天津,HUAWEI SGT-AL50),索取设备离线时段日志,确认「断电不恢复」是设备真离线还是服务端
devIsOnline/lastHeartTime未更新; - 延续
T-20260926-170258-2226:为实时预览补首帧超时与失败提示,并把AddWatchEx返回值 / 连接类型 / 首帧回调按devId串联埋点。
- 验证方法:取 3 ~ 5 名反馈用户复现,要求能区分「P2P 未建链」「鉴权失败」「服务端在线态滞后」三类。
本期扫描全量(全部沉淀到知识库)
Markdown 里保留全部反馈(含 -102 等网络问题);HTML 呈现时渲染器会自动折叠 🟣 普遍性网络问题
(含中/英/俄/法/西/葡/土/阿/日多语言网络提示模板),只展示更有价值的条目,无需在本段手工删减。
窗口内非网络类明细(31 条,逐条登记)
| # | 反馈 ID | 时间 | 平台 / 机型 | 版本 | 地区 | 内容(节选) | 分类 | 处置 |
|---|---|---|---|---|---|---|---|---|
| 1 | 257056 | 10-13 17:21 | Android PEAM00 | 8.0.2.2 | 山西省 | 恢复出厂设置后二维码出来滴滴 | 🟡 单点待补证 | 已排除(低版本单点,无 Logan) |
| 2 | 257057 | 10-13 17:23 | Harmony ADY-AL00 | 1.1.1.11 | 山东省 | 灯光一直显示红色 监控里面显示红色 改不过来 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 3 | 257062 | 10-13 18:05 | Harmony EMA-AL00U | 1.1.1.11 | 山西省 | 视频太慢 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 4 | 257067 | 10-13 18:29 | Harmony CHZ-AL00 | 1.1.1.11 | 内蒙古自治区 | 三天两头没网 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 5 | 257073 | 10-13 18:53 | Android OCE-AN50 | 8.4.1.6 | 广西壮族自治区 | s9a252 | 🟢 无效文本 | 已排除 |
| 6 | 257075 | 10-13 19:11 | Harmony MIA-AL00 | 1.1.1.11 | 吉林省 | 夜间灯光怎么关不了呢? | 🟡 单点待补证 | 已排除(并入问题 3) |
| 7 | 257076 | 10-13 19:18 | Harmony BRE-AL80a | 1.1.1.11 | 安徽省 | 灯一闪闪的 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 8 | 257082 | 10-13 19:53 | Android PJY110 | 8.1.2.4 | 安徽省 | 为什么坏内存卡, | 🟡 单点待补证 | 已排除(低版本 + 硬件类,无 Logan) |
| 9 | 257083 | 10-13 19:55 | Harmony ADY-AL10 | 1.1.1.11 | 浙江省 | 不能回放,怎么处理 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 10 | 257090 | 10-13 20:32 | Harmony MIS-AL00 | 1.1.1.11 | 山东省 | 录像回放里有三个小时后的视频怎么回事 | 🟡 单点待补证 | 已排除(并入问题 3;涉及时区口径) |
| 11 | 257093 | 10-13 20:40 | Harmony PLA-AL10 | 1.1.1.11 | 黑龙江省 | 总离线 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 12 | 257096 | 10-13 20:47 | Android WDY-AN00 | 8.4.1.6 | 内蒙古自治区 | 我的手机坏了开不了机了摄像头无法登陆上新手机上了 | 🟤 咨询 | 已排除(换机登录咨询,非缺陷) |
| 13 | 257103 | 10-13 21:38 | Android 21091116AC | 8.4.1.6 | 山东省 | Bailed | 🟢 无效文本 | 已排除 |
| 14 | 257107 | 10-13 21:57 | Android V1930A | 8.3.12.4 | 内蒙古自治区 | 金生 | 🟢 无效文本 | 已排除 |
| 15 | 257109 | 10-13 22:02 | Harmony HOP-AL10 | 1.1.1.11 | 山东省 | 连不上网 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 16 | 257110 | 10-13 22:06 | Harmony SGT-AL50 | 1.1.1.11 | 天津市 | 我家这个摄像头 总是突然就离线 之前离线的时候断一下电 就会恢复,现在断电也不管事了。 | 🟡 单点待补证(机制线索) | 已排除(并入问题 3;新增专项任务) |
| 17 | 257116 | 10-13 22:40 | iOS iPhone 26.6.2 | 8.4.1.6 | 山东省 | 报警里面的视频都看不了 | 🟡 单点待补证 | 已排除(Logan 仅冷启动,不覆盖操作时段) |
| 18 | 257121 | 10-13 23:02 | Android AMM-AN00 | 8.4.1.6 | 辽宁省 | 只能存储一天录像 | 🟡 单点待补证 | 已排除(存储容量口径,非播放链路) |
| 19 | 257122 | 10-13 23:04 | iOS iPhone 26.4 | 8.4.1.6 | 河南省 | 查看消息 特别卡顿 ,更新最新版本后。 | 🔴 进雷达 | 详细分析见问题 2 |
| 20 | 257123 | 10-13 23:04 | iOS iPhone 26.4 | 8.4.1.6 | 河南省 | 查看报警消息,现在特别卡顿,更新版本以后 | 🔴 进雷达 | 详细分析见问题 2(同源) |
| 21 | 257126 | 10-13 23:36 | Harmony BRE-AL80a | 1.1.1.11 | 河南省 | 字体大小看不清 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 22 | 257132 | 10-14 02:15 | Android V1938CT | 8.4.1.6 | 山西省 | 你好咱么连不上监控呢 | 🟡 单点待补证 | 已排除(见「待补证」:Logan 直证设备真离线) |
| 23 | 257136 | 10-14 03:07 | Harmony CHZ-AL00 | 1.1.1.11 | 内蒙古自治区 | 咋回事又没有连接了呢 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 24 | 257137 | 10-14 03:32 | Android TECNO KL5 | 8.3.13.3 | 塞内加尔考拉克 | 770887373 | 🟢 无效文本 | 已排除 |
| 25 | 257139 | 10-14 05:53 | Harmony JUY-AL50 | 1.1.1.11 | 河南省 | 人形侦察却找不到人形 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 26 | 257141 | 10-14 06:11 | Android WDY-AN00 | 8.4.1.6 | 山东省 | 回放不可以看了 | 🟡 单点待补证 | 已排除(Logan 全程无回放页,实为预览态诉求) |
| 27 | 257144 | 10-14 06:40 | Harmony SGT-AL00 | 1.1.1.11 | 吉林省 | 有很多根本就不显示,就是有人也不显示 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 28 | 257145 | 10-14 07:17 | Android BLK-AL80 | 8.4.1.6 | 吉林省 | 有报警消,第一次加载不出来 | 🔴 进雷达 | 详细分析见问题 1 |
| 29 | 257151 | 10-14 08:21 | Android LYN-AN00 | 8.4.1.6 | 河南省 | 视频有时候录不上 | 🟡 单点待补证 | Logan 已取得,本期未深挖(见「待补证」) |
| 30 | 257152 | 10-14 08:37 | Harmony LMR-AL00 | 1.1.1.11 | 四川省 | 老是离线 | 🟡 单点待补证 | 已排除(并入问题 3) |
| 31 | 257153 | 10-14 08:47 | Harmony TYR-AL00 | 1.1.1.11 | 吉林省 | 手机连不上啦 | 🟡 单点待补证 | 已排除(并入问题 3) |
网络类(76 条,按模板折叠)
| 关键词 | 反馈数 | 平台分布 | 分类 | 处置 |
|---|---|---|---|---|
| 请检查手机网络,重启App尝试解决(-102) | 71 | Android 70 / iOS 1 | 🟣 网络问题 | 已排除(普遍类,HTML 自动折叠) |
| Please check your mobile network ... (-102) | 3 | Android 3(含印度 2 / 芬兰 1) | 🟣 网络问题 | 已排除(英文同源模板) |
| Текущая сеть нестабильна / Проверьте телефонную сеть | 2 | Android 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,SN0A07EADFCD4B3022)服务端devIsOnline:0、lastHeartTime=1789525760000(2026-09-16 10:29:20,滞后 27 天)、p2pLastHeartTime=1789524979000(2026-09-16 10:16:19),全窗口TPS_MSG_P2P_OFFLINE117 次、add_watch_result=-123 次。属设备真离线,已排除,不计入雷达。
方法学记录:本期 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 报警消息列表卡顿:需补采覆盖操作时段 Logan | P1 / 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)