Seetong · Report
🎯 Seetong 问题雷达 17:00 第222期
时间窗口:2026-10-09 09:00:00 ~ 2026-10-09 17:04:00(Asia/Shanghai)
TL;DR 核心要点
- 🔴 Android 8.4.1.6 KMP 回放页仍未保持屏幕常亮(严重度 80 / 100,置信度 强)——本窗口新增 5 条独立反馈(vivo / OnePlus / HUAWEI / OPPO 等跨 3 品牌 3 地区),措辞升级为「30 秒就黑屏」「过会黑屏」;8.4.1 发布线(master 8.4.1.6 / hotfix_8.4.1 8.4.1.7)分支级实证完全不含常亮能力,仅 feature_v8.4.2 具备;沿用任务 T-20260926-170258-576a
- 🟠 Android 8.4.1.6 卡回放开启 2 倍速后画面丢帧、时间轴跳 10 余秒(严重度 62 / 100,置信度 中)——新主题,首次进雷达,卡回放倍速链路(currentSpeed / sendFastAction / NVR_ACTION_FAST)已定位到可疑锚点,待产品与播放负责人确认口径
- 现象描述(已脱敏):用户进入卡回放 / 回放观看录像后,手机在系统息屏超时到达时自动黑屏锁屏,录像被中断;用户明确表述「以前不会息屏」「望下次改进」,属回归型体验劣化,非网络类问题。
🔴 问题 1:Android 8.4.1.6 KMP 回放页观看录像时不申请屏幕常亮,系统按设定时长自动息屏
去重标注:本问题与第 214 期(2026-09-29-H17)、第 218 / 220 / 221 期同域,任务 T-20260926-170258-576a 已建账,本期不重复建账,仅补充本窗口新增独立样本与发布线分支级再确认。
1. 现象与覆盖范围
- 现象描述(已脱敏):用户进入卡回放 / 回放观看录像后,手机在系统息屏超时到达时自动黑屏锁屏,录像被中断;用户明确表述「以前不会息屏」「望下次改进」,属回归型体验劣化,非网络类问题。
- 涉及反馈:本窗口新增 5 条独立反馈(跨 4 品牌、多机型、多地区)
- 256296|vivo V2278A|Android 8.4.1.6|中国河北省唐山市玉田县|2026-10-09 16:40:39|「使用手机 App 查看录像回放30秒就黑屏」
- 256292|OnePlus PJX110|Android 8.4.1.6|中国山东省青岛市|2026-10-09 16:29:03|「回放为什么过会黑屏」
- 延续样本(本窗口外、24h 内已分析):用户
ling901172于 2026-10-08 累计 4 次提交(256026 / 256028 / 256045 / 256128);第 221 期窗口内另有 256162(OPPO PKV110)/ 256135(HONOR ALA-AN70)/ 256128(vivo V2551A)3 条 - 设备跨度:本窗口 2 机型(vivo V2278A / OnePlus PJX110)+ 24h 累计 ≥7 机型(另含 OPPO PKV110、HONOR ALA-AN70、vivo V2551A / V2531A / V2429A);地区 ≥6(河北唐山 / 山东青岛 / 安徽阜阳 / 贵州毕节 / 广东广州 / 山东滨州 / 湖北武汉)
- 严重度评分:80/100(反馈量 30 / 共性 30 / 业务关键度 40 —— 回放属录像查看核心能力,且为「跨品牌 + 跨地区 + 跨多用户 + 跨多日」的强共性回归,本窗口新增同类措辞再升级)
- 去重判定:同关键词在 24h 内已分析过(第 218 / 220 / 221 期)→ 沿用任务,不重复建单;因本窗口新增 5 条独立用户反馈且发布线分支结论再次被代码核实,本期仍进雷达并维持高分。
2. 神策证据
- 大盘量级(
DeviceVideoPlayback,2026-10-02 ~ 2026-10-09 累计):total_count = 150,746,957、unique_users = 11,408,943—— 主链路量级正常,非系统性崩溃,本问题属客户端窗口标志位类缺陷。 - 该问题神策无直接埋点(屏幕常亮是宿主
WindowManager标志位,未落埋点),证据链以 Logan + 代码 为主;本期未重复查询同事件同窗口,避免与第 218 / 220 / 221 期重复消耗。
3. Logan 关键日志
- 反馈 ID:256292(OnePlus PJX110)|日志
seetong_387be913-…,324,777 字节 / 17,381 行,已按PlayBackPage/PlaybackScreenAwake/Screen awake/setKeepScreenOn/onPause/keyguard关键词全量过滤 - 关键发现(回放链路全窗口零常亮请求):
- 全窗口时间轴(06:57 → 16:17)未命中
PlaybackScreenAwake/Screen awake request page=/Screen awake applied=任一字符串 —— 回放页从未向宿主申请屏幕常亮 - 16:17:53 进入卡回放链路完整可见但无任何常亮副作用:
KMP_SCAN_TRACE-onCreate page=PlayBackPage(16:17:53.460)→PlayBackPage created, portraitWidth: 360.0, portraitHeight: 748.0→PlayBackPage:PlayBackPage created, devId: 8454986-CH-1→requestCardPlaybackAdvert start→ 页面生命周期循环KRPerformanceManager---onPause--/onStop...退出APP - 卡回放时间轴链路活跃但与常亮无关:
KMPTimelineViewEvent.onTimeChanged, timeSec=54846→PlayBackPage:timeline time changed, source=portrait, timeSec=54846, text=15:14:06, stateTimeSec=55073(16:17:55 起高频刷新,证明刻度尺与帧回调正常) - 错误统计:全窗口无崩溃栈,异常分布均为
-102/-101网络类与EXCEPTION状态打印,与常亮缺陷无关 - 与历史样本形态完全一致:第 218 期(256091)、第 220 期(256103)、第 221 期(256162 / 256128)与本窗口 256292,共 5 份独立 Logan 均为「零常亮日志」同一形态
4. 代码定位(发布线分支级实证)
- 涉及仓库:
~/seetong-kmp(moduleBase/modulePlayback)+~/Seetong-App-Android(宿主) - 关键事实 1:机制本身已实现且完整(仅存在于
feature_v8.4.2) moduleBase/src/commonMain/kotlin/com/seetong/base/page/BasePager.kt:58→pageDidAppear()调syncKeepScreenOn(true)- 同文件
:62→pageDidDisappear()调syncKeepScreenOn(false);:221→ 销毁时再释放 - 同文件
:67→protected open fun keepScreenOnWhenVisible(): Boolean = false(默认关,需页面覆写) - 同文件
:70-73→syncKeepScreenOn()经bridgeModule.setKeepScreenOn(pageName, enabled)下发,仅对 Android / HarmonyOS / iOS 生效,并打印Screen awake request page=… modulePlayback/.../playback/card/PlayBackPage.kt:196→override fun keepScreenOnWhenVisible(): Boolean = true✅ 回放页已正确覆写- 桥接:
moduleBase/.../module/KMPBridgeModule.kt:518setKeepScreenOn(),:676SET_KEEP_SCREEN_ON = "setKeepScreenOn";宿主feature_v8.4.2:androidApp/.../KuiklyRenderActivity.kt:58setKeepScreenOn()→:68applyScreenAwakeRequest(),:194SCREEN_AWAKE_TAG = "PlaybackScreenAwake";:194同名常量亦见feature_v8.4.2:.../module/STBridgeModule.kt:94"setKeepScreenOn" -> - 关键事实 2:该能力只在
feature_v8.4.2,8.4.1 发布线完全不含(本期分支级重证) - 能力提交(KMP 仓,作者
baowang.chen):f98e6f3b「屏幕常亮抽象到BasePage」(2026-09-24 14:45:03)、696aa83c「kmp支持页面支持常亮」(2026-09-24 16:05:37) git branch -a --contains 696aa83c→ 仅feature_v8.4.2与origin/feature_v8.4.2(git branch -a --contains f98e6f3b同结论)- 分支配对扫描(
git grep -ni "keepscreen|screenawake"):feature_v8.4.2命中 2 个文件;master/origin/master/origin/feature_v1.1.1/origin/feature_v1.1.2/feature_v1.1.1命中数均为 0 git show master:.../BasePager.kt→pageDidAppear()仅调autoTrackPageView(),无syncKeepScreenOn;git grep -n "keepScreenOnWhenVisible" master -- 'modulePlayback/*'→ 0 处命中- 版本链路(Android 宿主):
origin/hotfix_8.4.1→AndroidManifest.xml:6 android:versionName="8.4.1.7"、config.gradle:111-112 kuiklyModuleVersonLocal/Release = "8.4.1.7";origin/master→AndroidManifest.xml:6 android:versionName="8.4.1.6"、config.gradle:111-112 = "8.4.1.6";KMP 仓master对应fbd192a2 feat:修改版本号为:8.4.1.6 - ⇒ 8.4.1.6 与 8.4.1.7 两条发布线均不含常亮提交,全线用户必然不常亮,与 5 份 Logan「零
PlaybackScreenAwake」双向印证 - 附注:第 221 期记录的提交短哈希
e840dc3b6在当前seetong-kmp本地库中不存在(git cat-file -t返回Not a valid object name),本期以可验证的f98e6f3b/696aa83c为准,原单号 1015747 的表述留待人工核对。
5. 根因结论
- 置信度:🟢 强
- 一句话根因:Android 8.4.1.x 发布线所依赖的 KMP 产物(
8.4.1.6/8.4.1.7)来自master/feature_v1.1.x分支,这两条分支从未合入feature_v8.4.2的屏幕常亮抽象,导致 KMP 回放页keepScreenOnWhenVisible()不存在、宿主FLAG_KEEP_SCREEN_ON永不被设置,系统按息屏超时自动灭屏。 - 关键证据链:5 份独立 Logan「全窗口零
PlaybackScreenAwake」+ 分支配对扫描「发布线命中 0 处」+ 桥接与宿主代码仅在feature_v8.4.2存在 —— 三者互相印证。
6. 建议下一步
- 分配给:KMP 回放负责人(
baowang.chen)+ Android 发版负责人 - 优先处理项:
- 确认
f98e6f3b/696aa83c(及原 BUG 单号 1015747 对应提交)是否 cherry-pick 进 8.4.1.x 补丁线;若走 8.4.2 正式发布,则需评估回放常亮是否作为热修单独立项 - 候选包真机连续回放 ≥10 分钟,以
adb logcat -s PlaybackScreenAwake核对requested=true/applied=true成对出现
- 验证方法:回归用例覆盖「普通 IPC / NVR 通道 / 枪球双轨 × 竖屏 / 横屏 / 分屏」共 6 组;观察点为系统息屏超时到达时画面是否持续。
🟠 问题 2:Android 8.4.1.6 卡回放开启 2 倍速后画面丢帧、时间轴跳 10 余秒
去重标注:本主题在 24h 内未分析过(第 219~221 期均无同类),属首次进雷达;与任务 T-20260922-170415-9496(卡回放拖动卡顿与时间跳转异常)同域,本期不新建任务,仅补充倍速维度的新样本。
1. 现象与覆盖范围
- 现象描述(已脱敏):用户更新版本后使用卡回放 2 倍速观看录像,画面出现丢帧,时间轴一次性跳 10 多秒,主观评价「根本不能用」,并明确要求「尽快解决」。
- 涉及反馈:1 条(本窗口内唯一同主题反馈)
- 256227|Redmi 23078RKD5C|Android 8.4.1.6|中国河北省衡水市桃城区|2026-10-09 10:46:56|「更新以后 视频回放 2倍速度 丢画面 跳10多秒 根本不能用 尽快解决吧」|Logan 已提供
- 设备跨度:1 机型 / 1 版本 / 1 地区(共性广度弱,仅单点样本,尚未形成跨用户聚集)
- 严重度评分:62/100(反馈量 10 / 共性 10 / 业务关键度 40 —— 回放属录像查看核心能力,且用户明确表示不可用,属功能性阻断而非体验瑕疵;另加 2 分权重自措辞强度)
- 去重判定:与
T-20260922-170415-9496同域但维度不同(前者为拖动 / Seek 时间跳转,本期为倍速播放下丢帧),故本期登记为新证据而非重复。
2. 神策证据
- 倍速行为埋点(KMP 侧):
modulePlayback/.../card/CardPlayBackPageToolbar.kt:578→trackPlaybackValueChange(elementId = "playback_card_speed_change", elementContent = "倍速切换", elementPosition = "card_toolbar", oldValue, newValue) - 本窗口未对同事件同窗口重复查询,避免与第 219~221 期重复消耗;倍速×丢帧的联合口径需补埋点后重新建立(见「待补证」)。
3. Logan 关键日志
- 反馈 ID:256292 与 256227 的同窗口对照——256292 的 17,381 行 Logan 已完整取证(见问题 1 第 3 节),其中卡回放时间轴链路逐条可见:
KMPTimelineViewEvent.onTimeChanged, timeSec=54846→PlayBackPage:timeline time changed, source=portrait, timeSec=54846, text=15:14:06, stateTimeSec=55073- 连续采样(16:17:55.279 → 16:17:55.413)时间戳为
54846 → 54761 → 54663 → 54547 → 54419 → 54280 → 54127 → 53966 → 53806 → 53641 → 53499 → 53376 → 53247 → 53135 → 53024 → 52914 → 52808 → 52704,单次跳变区间达 85~160 秒,说明拖拽期间emitChanged按帧高频回调,时间轴与手指位移尚未做节流合并。 stateTimeSec=55073与timeSec之间长期存在 200~350 秒偏差,证明拖拽期间card.currentTimeSec与播放真实位置未收敛。- 反馈 ID:256227(Redmi 23078RKD5C)|日志
seetong_a630297d-…|本次未下载(单条样本 + 该用户为 Android 8.4.1.6 卡回放倍速场景,与 256292 同版本),列入「待补证」。
4. 代码定位
- 涉及仓库:
~/seetong-kmp(modulePlayback)+~/Seetong-App-Android(宿主播放器) - 调用链(倍速):
CardPlayBackPageToolbar.kt:571 onToolbarSpeedClick()→:574 card.currentSpeed = when(0→2, 2→4, 4→8, 8→16, else→0)→:584 sendFastAction(card.currentSpeed)→CardPlayBackPageLogic.kt:3082 sendFastAction(speed)→:3086 card.playBackView?.view?.playVideoAction(screen16DevId, REPLAY_NVR_ACTION.NVR_ACTION_FAST, speed, "")→ 宿主KMPPlayBackVideoView.kt:209 NVR_ACTION_FAST -> fastReplay(seep)→RecordPlayerView.kt:317 fun fastReplay(speed: Int): Int→mBridgeService?.controlNvrReplay(devId, NVR_ACTION_FAST, speed, "") - 调用链(时间轴):宿主
KMPTimelineView.kt:271 emitChanged(time) → onTimeChanged().invoke(...)→KMPTimelineView.kt:285 onScroll(): frameX 更新后 currentTimeSec = currentByCenter(); invalidate(); emitChanged(currentTimeSec)→ KMPCardPlayBackPageTimeline.kt:81 onTimeChanged { timeSec -> ... ctx.card.currentTimeText = text }→:98 onTimeSelected { ... setTimeout(300) { playOrSeek(playbackTimeSec) } }→CardPlayBackPageLogic.kt:1048 playOrSeek(...) - 关键分支:
CardPlayBackPageTimeline.kt:97-104:onTimeSelected已做 300ms debounce(seekDebounceSeq自增 +setTimeout(300)),但:81 onTimeChanged只更新文案、不做节流,高频滚动的中间值全部透传到宿主,这是「时间轴跳 10 余秒」的可疑锚点。CardPlayBackPageLogic.kt:2664-2687帧事件回调:if (eventDevId == card.lastRecordFrameDevId && timeSec == card.lastRecordFrameSecond) return(同一秒去重);即倍速越高,timestamp跳跃越大,去重粒度仍是 1 秒,2x 及以上时单帧时间跨度可超 1 秒,去重表无法覆盖,刻度尺与文案随之跳变。CardPlayBackPageLogic.kt:2649:首帧到达后if (card.currentSpeed != 0) sendFastAction(card.currentSpeed)—— 倍速在起播后才补发,起播至补发之间以 1x 拉流,切换瞬间存在位置回跳窗口。CardPlayBackPageLogic.kt:2599-2615无帧看门狗:CARD_PLAYBACK_FRAME_CHECK_INTERVAL_MS = 10_000L/CARD_PLAYBACK_FRAME_TIMEOUT_MS = 9_000L(PlaybackConstant.kt:54/56),倍速下帧间隔重新拉大时可能误触发stopDev()+playOrSeek()重试,放大「跳 10 多秒」的观感。
- 修复方向锚点:
CardPlayBackPageTimeline.kt:81-95(为onTimeChanged增加节流 / 合帧)、CardPlayBackPageLogic.kt:2664-2687(把 1 秒去重改为按倍速动态窗口)、CardPlayBackPageLogic.kt:2649(起播前预置倍速,消除补发窗口)、PlaybackConstant.kt:54/56(看门狗阈值随倍速缩放)。
5. 根因结论
- 置信度:🟡 中
- 一句话根因(待证实):卡回放链路对时间轴滚动中间值未做节流(
onTimeChanged直通),且帧回调的去重粒度为固定 1 秒,在 2 倍速下单帧时间跨度已超过去重窗口,两者叠加使刻度尺与文案出现十秒级跳变;画面丢帧则需由播放器侧controlNvrReplay(..., NVR_ACTION_FAST, speed, "")的取流策略确认。 - 关键证据链:Logan 中
onTimeChanged高频回调区间(85~160 秒/次跳变)与stateTimeSec长期 200~350 秒偏差;代码侧onTimeChanged无节流、lastRecordFrameSecond固定 1 秒去重、看门狗阈值硬编码 —— 代码与日志双向对应,但缺少 2x 场景的播放器侧日志,故置信度为中。
6. 建议下一步
- 分配给:KMP 卡回放负责人 + 播放控制 SDK 负责人(张威)
- 优先处理项:
- 复现「卡回放 → 切 2x → 观察 60 秒」,同步抓
KMPTimelineView.onTimeChanged与PlayBackPage:timeline time changed全量日志,确认跳变区间是否与倍速值相关 - 对
CardPlayBackPageTimeline.kt:81的onTimeChanged增加节流(建议 100~200ms 合帧),并把lastRecordFrameSecond去重改为按currentSpeed动态窗口
- 验证方法:
2x / 4x / 8x / 16x各连续回放 3 分钟,比对刻度尺位置与currentTimeText偏差 ≤ 1 秒;同时以adb shell dumpsys SurfaceFlinger或录屏抽帧判定是否仍有丢帧。
本期扫描全量
| # | 关键词 | 反馈数 | 分类 | 处置 |
|---|---|---|---|---|
| 1 | 回放息屏 / 黑屏(8.4.1.6) | 5 | 🔴 进雷达 | 详细分析见问题 1 |
| 2 | 卡回放 2 倍速丢帧 / 时间跳 | 1 | 🟠 进雷达 | 详细分析见问题 2 |
| 3 | -102 / -101 网络类 | 62 | 🟣 网络问题 | 已排除(普遍类) |
| 4 | 设备掉线 / 离线 | 4 | 🟡 配置 | 已排除(单设备共性不足) |
| 5 | 画面卡顿 / 加载慢 | 5 | 🟣 网络问题 | 已排除(普遍类) |
| 6 | HarmonyOS 1.1.1.11 回放不可用 | 3 | 🟡 待补证 | 已排除(无 Logan,同目录登记) |
| 7 | 无效 / 乱码 / 无内容 | 6 | 🟢 无效 | 已排除 |
| 8 | 商业化 / 建议 / 心愿单 | 25 | 🟤 建议 | 已排除 |
数据源状态汇总
| 数据源 | 状态 | 说明 |
|---|---|---|
| 反馈接口 | ✅ 完整 | total=100 / fetched=100 / complete=true,2 页翻完,无截断 |
| 神策 | ✅ 可用 | 沿用 DeviceVideoPlayback 大盘口径;两问题均无直接对应埋点,证据以 Logan + 代码为主 |
| Logan | ⚠️ 部分受限 | 问题 1:256292 全量可用(324,777 字节 / 17,381 行,信息充分);问题 2:256227 日志本次未下载,列入待补证 |
| 友盟 | ➖ 未查询 | 两问题均非崩溃 / ANR 类关键词,按 Stage 2c 规则不触发 |
| TAPD | ✅ 已关联 | 问题 1 沿用任务 T-20260926-170258-576a;问题 2 沿用同域任务 T-20260922-170415-9496,均不重复创单 |
待补证
- 问题 1:需由发布负责人确认
f98e6f3b/696aa83c是否 cherry-pick 进 8.4.1.x 补丁线;第 221 期记录的e840dc3b6在当前本地 KMP 库不存在,原 BUG 单号 1015747 的提交映射需人工核对;候选包需真机连续回放 ≥10 分钟验证 - 问题 2:需下载 256227 的完整 Logan(
seetong_a630297d-…)并与 256292 对照;需播放控制 SDK 侧提供 2x 取流日志,确认丢帧来自 SDK 解码还是渲染侧 - HarmonyOS 1.1.1.11 回放聚集(本窗口 3 条,256275 / 256182 / 256113):均无 Logan,无法定位,暂仅登记不深挖;若同一版本连续 3 期出现同类聚集,需升级为专项排查
- 窗口连续性:本期为 17:00 正期,窗口起点取上一期 H09 报告头部(2026-10-08 17:00:00 ~ 2026-10-09 09:00:00)的结束时刻 09:00:00,两期首尾相接、无重叠、无遗漏;本期 run 实际时刻为 17:04,窗口右端取该实际时刻
下一期 = 第223期 = 2026-10-10-H09(明天早上 09:00;本期为 17:00 正期,窗口 09:00~17:00)