# 普通渠道播放接入

2026-10-04。已修改现有业务代码并重新构建 Go 程序，尚未发布业务服务或 App。Cloudflare 地址仍为文档和设计稿站。

## 本轮实现

普通视频直链不再要求来源侧签发接口。继续使用现有 Go 渠道解析、出网代理、画质信息及解码信息；Web 与 App 使用同一播放接口。

流程为：校验当前身份和渠道权限 → 确定真实剧集 → 检查每日额度并给出开播许可 → 用户播放器实际直连 → 加载失败后请求同一观看会话的转发。直连准备只处理元数据，不下载视频或通过代理探测用户连通性。转发仍按需处理，网站不写视频到磁盘。

Web 每日10集，已核验 App 会话每日50集。当天同集重播、跨渠道切换、转发及响应丢失后重试复用已有解锁事实，不重复扣次。普通渠道在返回有效开播计划时计次；该计划并不证明视频已加载成功。次数约束覆盖本站及 App，无法控制复制源地址到外部播放器后的观看。

来源侧“不支持控次”与用户失去渠道权限分别处理：前者可使用本站额度；后者或渠道停用仍拒绝。已配置受控播放的来源继续使用其适配器，缺失适配器或过期授权不自动降级。普通在线播放不自动获得 App 离线许可。

## 代码位置

- `services/platform/src/online-playback.mjs`：普通直链接入和可选受控适配器，共用原额度事务。
- `services/platform/src/entitlements.mjs`：在线使用既有剧集、权限、日额度、唯一解锁及预留记录，没有新增表或迁移。
- `internal/app/consumer_online_playback.go`：接受本站开播许可，保留原视频地址、代理与解码信息；转发前再次授权。
- `services/platform/src/runtime.mjs`：现有运行入口默认支持普通来源。

## 验证

平台全量238/238通过。新增检查覆盖10/50集上限、跨渠道同集去重、非法地址不扣次、并发与丢失响应、过期许可、设备及来源权限、普通在线不获得离线许可。

实际 Go → 私有平台 → Better Auth → 隔离 PostgreSQL 已验证普通渠道直连、续期、丢失响应恢复及按需转发。Go消费者回归与媒体相关并发检查通过，Go程序构建通过。原受控适配器及离线回归继续通过。

视频传输、安装资格及邮件发送使用明确测试适配器；这些结果不代表真实渠道、SMTP、Android/iOS手机或正式部署验收。本轮没有修改 App/Web UI，也没有把此前界面测试当作本轮重跑。

完整版本仍需真实渠道与邮件联调、App资格及邀请观看证明、缓存剩余能力、手机验收和业务服务部署。已确认的未完成项见[当前开发状态](dramivio-development-status.md)。
