如何根据用户登录/会员状态限制在线学习网站的视频内容访问?
实现会员专属完整视频与非会员演示片段的方案
1. 权限分层与资源标记
- 角色分级:明确三类用户权限边界:
- 未登录/非会员:仅可访问标记为
demo的视频片段 - 订阅会员:可访问所有
member标记的完整视频或剩余专属内容
- 未登录/非会员:仅可访问标记为
- 视频资源打标:两种高效处理方式:
- 拆分式:将完整视频切割为
demo预览片段(通常取前60-120秒核心内容)和member专属剩余部分,分别打标 - 整段式:完整视频标记为
member,同时单独制作独立的demo预览片段
- 拆分式:将完整视频切割为
2. 视频资源处理与存储
- 视频切割工具:用
ffmpeg快速完成拆分,示例命令:# 提取前60秒作为演示片段 ffmpeg -i course_video.mp4 -ss 0 -t 60 -c:v libx264 -c:a aac demo_part.mp4 # 提取60秒之后的会员专属内容 ffmpeg -i course_video.mp4 -ss 60 -c:v libx264 -c:a aac member_part.mp4 - 存储隔离:将
demo和member视频放在不同的存储目录或CDN bucket,从物理层面避免权限混淆
3. 前端交互实现
- 权限校验渲染:页面初始化时请求用户权限接口,根据返回结果渲染对应内容:
- 非会员:仅加载
demo片段播放器,显示醒目的会员订阅按钮,隐藏完整视频入口 - 会员:加载完整视频播放器(或自动拼接
demo+member片段实现无缝播放)
- 非会员:仅加载
- 播放拦截:监听播放器地址请求,若非会员尝试访问会员视频地址,直接弹出订阅提示并跳转至购买页面
4. 后端权限控制
- 接口校验逻辑:所有获取视频播放地址的接口必须先完成身份校验:
- 校验用户登录状态,未登录仅返回
demo地址 - 已登录用户检查会员有效期,过期则视为非会员
- 会员用户返回带时效签名的完整视频地址(签名有效期建议5-10分钟,防止地址泄露滥用)
- 校验用户登录状态,未登录仅返回
- 防盗链加固:给视频地址添加签名参数,后端收到播放请求时校验签名有效性,无效则返回403状态码
5. 特殊场景处理
- 全开放视频:若某视频无需会员权限,标记为
public,后端直接返回完整播放地址 - 会员过期同步:会员到期后,后端自动更新用户角色,前端通过定时轮询或WebSocket实时同步权限,立即隐藏会员专属内容
内容的提问来源于stack exchange,提问作者Afthab Muhammad
相关产品推荐
相关产品推荐

