# 缓存容量实现

2026-10-04。已修改两个现有项目，未发布 API、App 或 OTA。普通渠道在线继续按本站/App 内 Web10、App50 集接入，直连失败后才转发。

## 当前行为

默认上限为100集、2GiB，任一达到后暂停新增缓存。计数按当前账号和 API 地址在本机的原生缓存隔离；不是所有账号及系统临时文件合计的硬磁盘上限。下载中、失败、暂停、待删除的原生记录占集数，尚未开工的 JS 选集不占；容量使用原生缓存的实际视频文件字节。另保留已有128MiB系统可用空间检查。

选集确认前读取原生占用；容量不足保留已选集数、关闭确认框并提供“管理缓存”。队列在申请许可前检查占用，清理完成后继续原订单。准备期间后台修改上限时，新的交付响应再次检查；已签发的原许可继续用于后续恢复，不重复扣次或延长有效期。后台调低上限不自动删除已完成的视频。

Payload“用户端配置”增加最多集数和最多MiB。保存为草稿，点击既有发布按钮后写入消费者配置；App从预览、订单恢复及交付响应获取数值。没有新增平台业务表。Payload官方生成的迁移新增配置与版本字段，并包含此前site-direct默认值变更；已在隔离数据库执行，未触碰真实数据库。

## 原生实现

Android复用Media3 DownloadManager、DownloadIndex、SimpleCache和CacheDataSink。两条下载共享容量计数，未知长度下载也在写入前检查；不自动淘汰已缓存的视频。异步索引尚未发布时，原生已接收的任务仍占集数。因容量失败后用同一DownloadRequest恢复，沿用缓存片段及原许可。

iOS复用URLSession/AVAssetDownloadURLSession，在进度回调、系统文件交付及可播放校验时检查。超限的新文件停止下载并清理，不标为可播放；原有文件保留。系统临时文件与回调间增长无法逐字节硬限制。HLS按已登记包内的实际文件字节统计，未登记的进行中任务使用系统进度；这是视频负载大小，不等同文件系统分配空间。iOS完整安装包、低磁盘和系统后台回调仍需真机验收。

原生接口为enqueueWithCapacity、configureLimits、usage，App runtimeVersion更新为7。旧二进制缺少能力时不会申请新下载许可。当前代码包已成功导出，仍需重新构建和安装原生App。

## 验证

平台255/255、App325/325、Payload86/86及App类型检查通过。Android实际Media3/SQLite/Cache28/28；Apple Foundation/AVFoundation SDK162项检查通过。覆盖实际文件占用、并发未知长度、清理恢复、异步索引集数、后台发布和上下限、原许可重试、账号隔离及重启恢复。

中英文320/390px的实际RN选集组件在Chrome检查8组：集数满、容量满、不产生订单、管理入口、清理后提交，无横向溢出。API、原生占用和导航为明确适配器，不代表真机下载。react-native-video补丁在干净6.19.2包上应用成功，21个源码文件与本机一致；Android/iOS Hermes导出通过。详细记录见[验证结果](dramivio-consumer-validation.json)。

本轮为主Agent自查，没有新一轮独立子Agent复审。仍待真实来源下载、下载直连失败后的转发、服务端解码缓存、真机及完整iOS构建、剩余选集后台调度；Redis视频缓存未接入。
