海洋 CMS 免费试看功能如何开启
海洋 CMS(SeaCMS)没有名为「免费试看」的独立总开关,试看效果要靠三处配合:后台的会员组播放权限、播放页模板里的会员状态判断、播放地址本身的时效控制。只改其中一处,结果只有两种——未付费用户看完整片,或者一秒都看不了。
海洋 CMS 后台的试看设置在哪里?
结论:先在后台找「试看」「收费播放」「用户组播放权限」这类配置项,找到就直接填秒数,找不到就说明这份版本要改模板。
操作路径是:登录后台 →「系统设置」里的播放与会员相关分组,逐项检查有没有试看时长、试看集数、收费播放组这类字段。填写规则统一是按秒计,填 300 表示免费用户能看前 5 分钟,填 0 或留空表示关闭试看。改完必须清一次缓存,海洋 CMS 的模板和配置走缓存文件,不清缓存前台不生效。
如果你在后台翻遍了都没有试看项,不要以为是版本坏了——市面流通的 SeaCMS 分支版本很多,试看属于被裁剪或需要自行扩展的功能,接下来的模板层方案照样能实现。
试看时长设多少秒比较合适?
结论:正片类站点填 300 秒(5 分钟)最稳,短视频/课程类填 120 秒。
理由很直接:300 秒足够让用户判断画质和内容质量,又不至于把一集 40 分钟的剧透掉核心剧情。实测 60 秒以下的试看转化率明显低,用户还没建立信任就断了。
需要注意试看时长要和播放器兼容。如果你的播放器是 DPlayer、CKPlayer 这类,秒数控制在前端做;如果是自己封装的 hls.js,要在 timeupdate 事件里判断 currentTime。
前台试看功能怎么改才能只播前 5 分钟?
结论:播放页模板里做会员判断,未登录或低等级用户传入 300 秒的试看参数,已购用户传 0(不限制)。
模板里的判断逻辑大致是这样,变量名以你版本 templates/ 目录下播放页模板的实际写法为准:
// 播放页模板中的权限判断
$isVip = 用户已登录 && 会员组等级 >= 2;
$previewSecond = $isVip ? 0 : 300; // 0 = 不限制
前端播放器侧再做一道拦截:
const dp = new DPlayer({ container: document.getElementById('play'), video: { url: playUrl } });
if (previewSecond > 0) {
dp.on('timeupdate', () => {
if (dp.video.currentTime >= previewSecond) {
dp.pause();
// 弹出购买提示
}
});
}
前端拦截只能防普通用户,抓包或改 JS 就能绕过,所以还必须有第三层:播放地址不要直接输出完整的 m3u8,改成后端签发的带 token 临时地址,token 有效期设 300 秒,过期返回 403。Nginx 可以用 secure_link 模块实现,成本最低。
为什么开了试看用户还是能看完整片?
结论:九成是播放地址泄露,而不是试看开关没生效。
排查顺序是:按 F12 打开 Network,看请求的 m3u8 地址里有没有成片的完整分片列表。如果未付费用户能直接拿到 .ts 分片地址,说明限制只做在界面上,没做在服务端。这时候前端暂停再多次也没用,用户把地址复制到 PotPlayer 里就能播。
第二个常见原因是会员组判断写反了,>= 写成 <=,导致只有 VIP 被限制、游客反而全开。改完模板后用一个未登录浏览器窗口和一个已登录账号各测一遍,两组结果必须不同才算配置成功。
总结一句:海洋 CMS 的试看是「后台权限 + 模板判断 + 地址时效」三件套,后台有现成项就填秒数(推荐 300),没有就在播放模板里加会员判断,并且务必把播放地址换成带 token 的临时链接,否则前面两步都是摆设。
原文链接:https://www.gj0.com/thread-1084.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。