# 加密来源的内存解码缓存

最新：App356项及Android36实际三集加密缓存、断网冷启动、3秒恢复与0秒补传通过，详见[本轮Android验收与图片](dramivio-cenc-android-development.md)。下方保留此前344阶段的实现、验证和当时剩余范围，当前状态见新报告。

2026-10-04。已修改短剧库和 juku-mobile，复用现有渠道解析、FFmpeg、RAM 分片、Better Auth 许可和原生下载队列。平台 257/257、App 344/344 及类型检查通过，Go/认证/数据库并发联调通过。当前 Android 测试包已重新构建；本阶段尚未安装验收加密缓存。

## 下载路线

| 来源 | App 下载方式 |
| --- | --- |
| 普通 MP4/HLS | 先直连；实际网络失败后申请 RAM 转发 |
| 现有渠道返回需要密钥处理的 HLS | 用既有 HLS 网关处理清单和密钥，再交给系统下载器 |
| 现有解码器支持的 CENC MP4 | 服务端按需生成 RAM HLS，App 使用原生下载器缓存 |
| 真实 DRM、服务器本地视频、未知格式 | 保持不支持，不降级绕过 |

普通来源继续优先直连。CENC 源无法按普通视频缓存时才使用解码网关，不能把无法解码的直链当作成功下载。来源必须由后台明确开放 App 缓存，并允许实际输出格式；CENC 输出为 HLS，仅允许 MP4 的策略会在扣次前拒绝。

准备下载只解析元数据和读取许可，不读取视频或启动 FFmpeg。首次 HLS GET 才启动已有解码器；HEAD 不启动转换。网站的视频字节仅进入已有有界内存分片，最终离线文件保存在 App 本机。当前没有接 Redis。

同一资产的准备、转发、显式重试和 RAM 地址丢失恢复均复用原许可，不重复扣次或延长到期。解码失败停止该转发能力，用户重试取得新地址；不自动循环。取消订单会终止转换并释放内存。首次许可提交成功后转换失败，不自动退次，用户可在原有效期内重试。

## 复用入口

| 项目与入口 | 实施内容 |
| --- | --- |
| 短剧库 `resolveConsumerOfflineCandidate` | 从现有来源读取地址及输出格式；密钥只留 Go 内存 |
| 短剧库 `prepareConsumerOfflineRelay` | 读取原资产许可，创建短时受控媒体地址 |
| 短剧库 `consumerOfflineDecoder` | 延迟调用已有 `inspectPlaybackMedia` / `generatePlayback`，复用 RAM、并发及取消机制 |
| juku-mobile `createOfflineAPI` | 接受准备阶段返回的受控转发地址，复用同源/路径/身份/到期校验 |
| juku-mobile `createOfflineQueue` | 保存资产的转发意图，重启及重试继续原许可 |

原生代码未新增接口，继续使用 runtime8 的 Media3 / Apple 下载器。两条并发、100 集 / 2GiB 的当前账号/API本机容量、Wi-Fi 和空间控制沿用已接入配置。服务器沿用现有全局 RAM、媒体与解码并发预算，转发地址最多30分钟且不超过原许可及安装批准时间；每次资源请求再次核对资格。

私有平台只收到原有地址、格式和 Referer 字段，没有密钥或新数据库结构。返回原生下载器的转发请求没有网站登录头或上游请求头，地址和密钥不进入 App 持久化订单记录。

## 验证与范围

| 检查 | 结果及证据 |
| --- | --- |
| 平台全量 | 257/257；真实隔离 RAM PostgreSQL / Better Auth，覆盖 HLS 输出策略、原许可和单次扣次 |
| App 全量与类型 | 344/344、类型通过；新增准备即转发、恶意地址/凭据拒绝、重试意图及禁止自动循环 |
| 实际 Go / 认证 / PostgreSQL 联调 | 普通与加密两条 Go 测试均通过；3秒自建 CENC 样本实际转换并解码约90帧；总计3笔首次扣次，重试不新增 |
| 联调并发检查 | 同一真实链路在 Go race 下通过；含 RAM 能力丢失后的原许可恢复、取消后新旧地址失效 |
| Go 相关并发回归 | 缓存、RAM媒体、生成与封装检查通过；并发初始化、取消中的中断和内存归零通过 |
| 构建 | 当前 Go 程序和完整 Android APK通过；当前 iOS Hermes 导出通过 |
| APK 检查 | runtime8、原生类、服务声明、Hermes、签名及 ZIP16KiB对齐通过；不是完整 ELF16KiB或设备验收 |
| 沿用结果 | 上阶段 Android Media3 34项、Apple SDK185项、Payload86项、Web167项；本阶段未重跑或重新安装 |

样本为本地生成的可控视频，测试邮箱和安装资格使用夹具。测试生成样本会使用临时文件；网站生产传输路径使用 HTTP 与 RAM。真实渠道、真实手机、完整 iOS 构建、部署层临时文件策略未验收。上阶段已通过的 Android 飞行模式冷启动针对普通视频，不能作为本阶段 CENC 缓存验收。本阶段由主 Agent 实施和复核，没有新的独立子 Agent 复审。

测试期间修正了两个夹具问题：不同剧集的固定订单编号冲突；测试读取 FFmpeg 初始化状态未使用现有锁。没有降低业务校验。

## 下一项可单独拆解的验收

1. **App 加密缓存**：用当前 APK 和可控 CENC 来源完成下载；断网冷启动、完整播放、拖动、位置恢复及联网补传。核对同一资产、原到期时间和账本没有新增扣次。
2. **取消与恢复**：下载中取消、账号切换、转发超时和 Go 重启；确认原生删除、RAM/FFmpeg释放及显式重试；不混用失败任务的残余文件。
3. **渠道兼容**：分别接普通MP4、带密钥HLS及现有解码器支持的CENC来源，验证短期地址、缺少Range、未知时长和格式策略；不支持时返回简短可操作提示。
4. **真机与部署**：Android/iOS后台、系统空间、来电和网络切换；完整iOS构建；反向代理不得把视频缓冲写入磁盘。记录直连比例、首帧、下载成功率及实际转发字节。

[当前状态](dramivio-development-status.md) · [验证记录](dramivio-decoded-offline-validation.json) · [上阶段 Android 安装验证](dramivio-runtime8-development.md)
