短剧应用在源码中的领域名是 ve。它同时处理内容运营、媒体播放和用户权益:租户后台管理剧目与分集,用户端提供发现、详情、追剧和播放,服务端在每次播放前重新校验剧目状态与购买权益。

代码与入口

层次 源码位置 主要职责
PC 用户端 pc/pages/ve、pc/api/ve.ts 剧目列表、详情和播放入口
移动用户端 uniapp/src/packages/pages/ve 短剧首页与播放器
租户后台 tenant/src/views/ve 剧目、分集和订单管理
用户 API server/app/api/*/ve 分类、剧目、分集、发现流、追剧、历史与下单
领域服务 server/app/common/service/ve 安装同步和 VOD 播放地址签名

核心领域对象

对象 作用 关键约束
VeCategory / VeDramaCategory 维护分类及剧目多对多关系 分类调整不改变用户已购权益
VeDrama 保存剧目、价格、免费集数、上下架与统计 下架后不能继续新购或播放受限分集
VeEpisode 保存分集顺序和媒体地址 分集必须属于当前剧目,顺序在剧目内唯一
VeDiscover 提供短视频式发现内容 只返回当前可播放的媒体资源
VeUserRecord 保存追剧状态和最后观看位置 一名用户对一部剧保持一条汇总记录
VeOrder 保存整剧解锁订单和支付事实 同一用户已购买后不重复创建付费订单

上架、购买与播放

flowchart LR
  Admin[租户后台] --> Drama[创建剧目与分类]
  Drama --> Episodes[维护分集和媒体地址]
  Episodes --> Publish[上架]
  User[用户选择分集] --> Check[校验剧目 / 分集状态]
  Check --> Free{是否免费集}
  Free -- 是 --> Sign[签发短期播放地址]
  Free -- 否 --> Entitlement{是否已购买整剧}
  Entitlement -- 否 --> Order[创建解锁订单]
  Order --> Pay[统一支付]
  Pay --> Sign
  Entitlement -- 是 --> Sign
  Sign --> Play[播放并记录进度]

剧目通过 free_episodes 定义试看范围。请求收费分集时,API 查询该用户是否存在已支付的剧目订单;校验通过后,VeVodService 才生成播放地址。购买的是剧目访问权益,不是某个永久 URL,因此媒体域名、签名策略或存储供应商变化时不需要改写历史订单。

追剧和观看历史保存在 VeUserRecord 中,用户可以查看关注列表和最近观看内容。进度或统计更新失败不应中断播放,但权益校验、剧目上下架和媒体签名失败必须阻止受限资源下发。

媒体与运行边界

  • 原始媒体、转码任务、业务剧目和播放地址应分开建模;
  • VOD 回调需要按远端任务号幂等处理,并允许乱序到达;
  • 播放地址只短期有效,不能把对象存储永久地址直接返回给客户端;
  • 旧视频源不可用时,系统应暂停播放和付费,不能继续出售无法交付的内容;
  • 剧目、分集、订单和观看记录都应带租户范围,媒体对象路径也应使用租户命名空间;
  • 播放、收藏和历史属于高频写入,可异步聚合统计,但购买权益必须由事实订单同步判断。

后续完善

当前模型已经覆盖分类、剧目、分集、发现、追剧、历史和整剧购买。后续适合补充独立媒体任务表、转码回调、失败重试、清晰度与字幕资源、单集购买策略、播放心跳以及 CDN/VOD 成本监控。

站内搜索

没有找到内容!