# 缓存清晰度开发

2026-10-04。已修改两个现有项目的业务代码，未发布业务站、App 或 OTA。

选集页提供自动、720p、480p，默认720p；确认页和队列保留所选偏好。API同时支持1080p，当前界面按设计稿保留三个选项。没有画质元数据的单一MP4下载原文件；来源缺少对应版本时使用可用版本，不在网站转码或存储视频。

订单的已有JSON字段保存清晰度，无新增数据库迁移。订单重试使用原ID和原选择；改画质要建立新订单，有效许可内仍复用原集解锁、不重复扣次、不延长到期。旧订单未设置的字段保持省略，原请求可以继续恢复。

Android复用Media3 `DownloadHelper`，按视频短边处理横屏和竖屏，从支持的版本中选一个，再持久化对应的stream key。iOS复用AVFoundation下载配置，优先精确画质，再尝试较小版本；没有匹配时由系统选择现有版本。两端继续沿用账号隔离、有效期、Wi-Fi与暂停规则。[Android下载选轨](https://developer.android.com/media/media3/exoplayer/downloading-media)、[Apple下载画质偏好](https://developer.apple.com/documentation/avfoundation/avassetdownloadcontentconfiguration/variantqualifiers)。

原生入口为 `enqueueWithOptions`，App的runtimeVersion为6；旧安装包缺少此入口时，在申请下载许可前停止。需要重新构建安装包，旧包不能只更新JS获取能力。iOS首次创建缓存目录时的目录标记误判也已修正；实际符号链接仍拒绝。

| 验证 | 结果及范围 |
| --- | --- |
| 平台 | 全量254/254；隔离PostgreSQL、真实Better Auth与Go联测；含画质订单重试、原许可与扣次保持 |
| App | 全量319/319，类型检查通过；实际React双语选择、传输、旧队列恢复；网络与原生调用为明确适配器 |
| Android | 实际Media3、SQLite与缓存24/24；多版本HLS只保存所选stream key；媒体字节与设备解码能力为明确夹具 |
| Apple SDK | 实际macOS Foundation/AVFoundation编译及141项检查；原生策略、持久记录、本地AVPlayer及画质谓词；不等于完整iOS构建或后台真机验收 |
| 浏览器 | 实际RN选集页通过react-native-web在Chrome验证，中英文各320/390px；选择、确认、提交正常，无横向溢出 |
| 代码构建 | Go当前程序构建、Android/iOS Hermes导出成功；不是完整新安装包 |
| 原生补丁 | 干净react-native-video 6.19.2应用成功，21个源文件与开发目录一致，不含构建产物 |

[中文选集](offline-quality-preview/select-zh-390.png) · [英文窄屏确认](offline-quality-preview/confirm-en-320.png)。截图使用示例数据，不代表真实渠道已下载。

本轮由主实现者复查，没有新增独立子Agent复审。缓存100集/2GB总容量、完整体积预估、未开始选集的后台调度、缓存下载失败后转发、真实来源与手机验收仍待完成；网页在线直连失败后的转发不等于已支持下载转发。

可导入验证函数：`tests/ios-offline-sdk.cjs:runIOSOfflineSDKTests(options)`、`tests/offline-native.cjs:runOfflineNativeTests(options)`。最新日志在工作目录 `work/existing-project/offline-quality-*`。
