Dramivio项目文档下载文档包 ↗
2026.10.04 UTC · Android原生缓存队列本地实现与复审进展 · 真实服务尚未发布Markdown

视觉按最新原型,业务按已确认PRD。现有代码为满足设计而改造。执行见按设计实施与任务卡;当前代码与验证范围见消费者功能页。

原生缓存完成后的转发清理

本页目录接线测试尚需完成

2026-10-04。已修改现有 Go 和 RN 项目。runtime11 已在本地构建;业务服务、安装包和 OTA 未发布。

下载完成、失败或删除时,原生下载器通知服务器关闭该任务的 RAM 转发。无需等待 App 回到前台。普通直连下载不会发送此通知;等待 Wi-Fi 和用户暂停仍保留可恢复任务。

接线

位置 实现
Go consumer_offline_relay.go POST /api/consumer/offline/media/<capability>/release,空请求体、204响应;仅删除这个内存能力及其媒体上下文
Android JukuOfflineStore 复用 Media3 完成、失败、移除和原生索引恢复回调;JukuOfflineRelayCleanup 发送短请求
Apple DramivioOfflineEngine 复用系统下载的终态、删除和恢复记录;DramivioOfflineRelayCleanup 使用独立无缓存 URLSession
Expo plugins/withOfflineBackground.js 通过官方 withAppDelegate 生成 iOS 后台事件转接;其他系统会话交给 Expo 原处理
原 JS 队列 保留已认证的 release(orderId,assetId),作为前台恢复时的补充

完成通知从原生已验证的转发地址派生,限定同一 API、同一能力目录。它不携带网站 Cookie、登录凭据、来源头或视频,且不跟随重定向。不能凭订单编号关闭其他任务,也不能签发许可、取消订单或修改缓存文件。旧任务迟到的通知只关闭旧能力,新线路使用的新能力继续有效。

短请求超时3秒,失败最多执行两次原生自动重试。重复通知、已过期能力和服务器重启后的旧能力均返回204。恢复时已有终态索引/记录可再次通知;没有增加业务表、登录系统或另一套视频队列。

测试

范围 结果与覆盖
RN App 历史终态阶段359/359;当前全量371/371,类型检查通过;新增 Expo 生成、重复生成和保留其他回调检查
Android Media3 40/40;实际下载索引与文件缓存,终态通知、移除、失败、重启、Wi-Fi等待;真实本地HTTP空POST、去重及302不跟随
Apple SDK 193/193;实际 Foundation/AVFoundation 文件与策略;新增 URLSession 通知、无凭据、去重与503重试夹具
Go race 本轮离线相关12项通过,2个需要外部联合夹具的入口跳过;这些入口不计通过
公开 API 联调 实际 Go、Better Auth 邮箱登录与隔离 RAM PostgreSQL;直连准备、同许可转发、无凭据释放、重复/迟到通知、新线路Range播放与数据库状态检查通过
保存的播放器补丁 在原版 react-native-video 6.19.2 上干净应用;23个源码文件与实际编译源码一致,无构建文件混入
构建 当前 Go、runtime11 Android ARM64测试APK、iOS Hermes导出和iOS原生项目生成通过

实际联调最终:转发会话0、视频RAM0、转换任务0;同一集扣次1,资产仍为ready,原许可及到期时间不变。邮箱、安装批准和视频使用明确测试夹具;没有联系真实来源或发送邮件。此前 runtime8 三集加密缓存的模拟器验收保留为历史证据,本轮 runtime11 APK 已完成 Android36 首次注册设备和 CENC 三集播放验收;转发终态释放结果沿用此页明确的隔离联调记录。

尚需完成

剩余尚未进入原生下载器的选集仍由前台 JS 调度。系统强退、进程被杀或断网时,无法保证通知立即送达;服务器已有最多30分钟的能力期限和上下文关闭作为最终回收。完整 iOS 构建、AppDelegate 与系统后台唤醒的真机验收仍待完成。通知的 Apple URLSession 测试使用协议夹具,不能替代 iOS 后台执行验收。

本轮由主 Agent 复核,没有新增独立子 Agent 结论。复核覆盖了旧通知与新线路隔离、重复通知、原生终态回调、Expo生成的宿主转接,以及切换账号时尚未入队的HLS准备会话清理。

测试记录 · 当前开发状态 · 缓存直连与转发

复用依据:Android Media3 下载、Expo 配置插件。