# Dramivio Android 解码缓存与续播验收

2026-10-04。已修改短剧库和 juku-mobile，并完成实际 Android 安装验证。三集可控 CENC 视频经现有解码器生成内存 HLS，由 Media3 下载到 App；断网冷启动、连续播放、拖动恢复和联网位置补传通过。App 356/356、平台 257/257及类型检查通过。完整业务版本尚未发布。

## 实际修复

| 问题 | 修改与验证 |
| --- | --- |
| 缓存完成后仍占用服务器转发名额，可能挡住第三集 | 增加按当前账号、设备、订单和资产释放的接口。原生完成/失败后释放 RAM 与解码任务；释放确认丢失可重试，不取消已下载许可。实际三集全部完成，服务器转发会话、视频内存及解码任务均为 0。 |
| 重连时身份刷新，准备或进度响应已提交却被客户端拒绝 | 未知准备结果先停止继续签发，清理原资产的临时转发后恢复；进度保留原操作收据重试。测试覆盖响应丢失和同订单恢复，不新增扣次、资产或有效期。真实下载过程中暴露的问题已修复。 |
| 冷启动时初始 0 秒覆盖书签，拖回开头无法准确保存 | 等待原生拖动确认后再接收进度；忽略旧拖动回调。进度条采用松手时的位置。Go 区分“未提供位置”和合法的 0 秒。实际恢复画面为 3.033 秒，显示 0:03；0 秒在本机和数据库均保存成功。 |

复用原生播放器、既有订单存储、播放版本及认证授权；本轮没有新增依赖、数据库表或迁移，也没有接入 Redis。释放接口不能选择其他账号或设备；重复释放幂等。真实历史删除或其他设备的播放冲突仍需用户选择，不会自动覆盖。

## 安装与数据证据

| 检查 | 实际结果 |
| --- | --- |
| 环境 | 隔离 Android 36 arm64 模拟器；实际 RN/Media3、Go、Better Auth、内存 PostgreSQL。邮箱、安装资格与视频为明确测试夹具。 |
| 三集缓存 | 新账号、一个订单，三集各 12 秒，720p 为画质偏好；三条原生记录均“已缓存”，合计约 6.7 MB。偏好不等于来源必有该分辨率。 |
| 次数与资源 | 首次扣 3 次；三集原许可和到期时间在重装、断网、续播、补传后保持不变。完成后转发会话 0、RAM 视频字节 0、解码任务 0。 |
| 飞行模式 | 关闭 Wi-Fi/蜂窝并移除调试端口转发，强制关闭后冷启动；三集连续播放至第三集 0:12。API、来源请求、资产和扣次均未增加。 |
| 拖动与恢复 | 第三集拖到 3.003 秒，关闭 App、冷启动后立即暂停；画面时间戳 3.033，进度 0:03。本机书签保持 3.003 秒。 |
| 联网补传 | 数据库三集位置为 12、12、3.003 秒；本机所有版本收到确认，无待提交或冲突。 |
| 0 秒 | 最终 APK 重新安装并保留原缓存；拖至最左端，本机与数据库位置均为 0，全部版本确认。没有 400 错误、重复扣次或新增来源视频请求。 |
| 构建与检查 | 当前 Go 构建、Android APK、iOS Hermes 导出通过；APK 包含离线模块/服务、runtime8、有效测试签名及 16 KiB ZIP 对齐。未据此宣称完整 ELF 或 iOS 合格。 |

三集新账号下载、完整断网播放和 3 秒恢复使用同轮首次 356 测试包；最后补正松手位置后重新构建安装，保留原订单继续完成 0 秒验收。两个包的标识及各自范围保存在[验证记录](dramivio-cenc-android-validation.json)，没有把前一个包的首次下载混记成最终包的新下载。

测试读取器曾把 MMKV 文件未使用区域中的旧记录误判为待确认。依据[官方元数据结构](https://github.com/Tencent/MMKV/blob/master/Core/MMKVMetaInfo.hpp)读取有效长度后，确认当前三集均已同步；未为这个诊断错误修改业务同步逻辑。

![三集实际缓存完成](cenc-android-preview/final-cache-complete.png)

![断网连续播放到第三集末尾](cenc-android-preview/final-offline-played.png)

![断网冷启动恢复到 3 秒并暂停](cenc-android-preview/final-cold-restored.png)

![最终包拖回 0 秒](cenc-android-preview/final-zero-position.png)

## 回归范围

App 全量 356 项和类型检查通过；相比此前 344 阶段增加了释放、未知结果恢复、原收据重试和冷启动拖动竞态覆盖，并补充松手端点断言。平台全量 257 项通过；当前相关 Go race、实际 Go/认证/PostgreSQL 联合 race 测试及 Go 构建通过。联合测试额外验证 0 秒写入和相同操作重复提交，第二次不重复应用。

此前 Android SDK 34项、Apple SDK185项、Payload86项、Web167项沿用，本阶段未重跑。Android 缓存过程和端上行为是实际模拟器验证；故障响应、账号切换等部分回归仍用明确适配器。本轮由主 Agent 实施并复核，没有新增独立子 Agent 复审。

## 能力边界与下一步

Web/App 内每日 10/50 集限制继续生效，同集当天重播或换线路不重复扣次；普通来源优先直连，实际失败才转发，现有解码支持的 CENC 才经 RAM 网关。网站传输路径不写视频磁盘；本轮生成可控测试样本的文件不属于生产传输路径。App 明确缓存的视频保存到本机。

JS 负责在前台启动剩余选集；已启动的原生任务可以独立继续。后台尚未启动的选集不会自动全部推进，完成后的服务器清理在返回前台时执行，临时能力还受现有到期限制。离线位置补传仅用于续播，不生成邀请奖励或可信观看证明。实际 DRM 不受支持。

下一步接真实授权渠道与邮箱，在 Android/iOS 设备上验证网络切换、后台、空间和短期地址。完整 iOS 构建、安装资格及邀请观看证明、剩余选集后台调度、语义搜索和全设计状态、真实广告/商品及正式部署仍未完成。广告、收费和通知配置继续默认关闭。

本地测试包：Android 测试 APK（仅本机测试包，未公开提供下载）。连接本机 API/OTA、使用测试签名，未公开作为正式下载包；运行版本 8 需要新安装包。

[当前开发状态](dramivio-development-status.md) · [完整功能范围](dramivio-consumer-implementation.md) · [内存解码实现](dramivio-decoded-offline-development.md)

最新 runtime11 CENC 模拟器验收已通过：关闭模拟器无法报告有效 Wi‑Fi 时的 Wi‑Fi-only 开关后，3 集加密媒体全部缓存并由离线播放器打开；3 次扣次、7 次媒体请求，服务器转发会话、视频 RAM、解码任务均为0。恢复网络后3条位置均上传，`completed=false`，不会把离线播放当作邀请可信观看。完整真机、真实来源和生产媒体仍待验收。[CENC runtime11 验证](dramivio-cenc-runtime11-validation.json)。
