在线课程视频点播配置实践手记:转码、防盗链与播放鉴权
上个月帮一家教培机构做在线课程系统,课程视频上线第三天就被盗链了:有人把视频地址扒出来直接嵌入自己网站,一天跑了几个 TB 的流量。机构老板看到流量账单直接懵了。这篇把视频点播从转码到防盗链的完整配置过程记录下来,给同样做课程系统的朋友参考。
一、转码:先定规格再上传
原始视频不能直接给用户播放,要转成适合网络传输的格式。我们定的转码规格:
| 参数 | 配置 | 说明 |
|---|---|---|
| 编码格式 | H.264 | 兼容性最好,浏览器直接播放 |
| 分辨率 | 720p(1280×720) | 课程视频够用,文件体积可控 |
| 码率 | 视频 1.5Mbps / 音频 128kbps | 兼顾清晰度和加载速度 |
| 封装格式 | MP4 | 支持拖动进度条播放 |
转码参数要注意:音频单独一条音轨(AAC),不要用双音轨,部分播放器兼容性差;码率不要贪高,1080p 全片源文件十几 GB,转完码率设太高,用户手机流量播放会卡。
二、防盗链:Referer 校验 + URL 签名
防盗链是课程系统的命门,两层防护都要上:
第一层:Referer 白名单。只允许自己域名下的页面引用视频地址:
location /video/ {
valid_referers none blocked *.edu-example.com;
if ($invalid_referer) {
return 403;
}
}
第二层:URL 签名(有效期)。给视频地址加时效签名,过期即失效,就算被扒走也播不了:
https://cdn.example.com/video/lesson01.mp4?auth_key=1690000000-0-0-abc123def456
签名规则:过期时间戳 + 随机数 + MD5(路径+密钥+过期时间)。视频地址有效期设 30 分钟,播放器每次播放前向后端请求新的签名地址。
三、播放鉴权:登录才能看
防盗链只是防外站盗用,站内还要控制"谁有权限看"。课程视频的播放鉴权流程:
用户点击播放
↓
前端带 token 请求播放接口
↓
后端校验 token + 课程购买状态
↓
校验通过才返回签名后的视频地址
↓
播放器加载视频
关键点:视频地址只由后端签发,前端页面里不能出现任何静态视频链接,否则绕过播放接口直接访问。
四、踩坑清单(这 5 个坑都踩过)
- 转码没统一规格,有的课 480p 有的 1080p,用户反馈"有的课特别糊"
- 只做了 Referer 防盗链,Referer 可以被伪造,视频地址还是被扒走
- 签名有效期设了 7 天,地址泄露后一周内都能播,改成 30 分钟好很多
- 播放接口没做鉴权,未购买用户直接拿签名地址看了付费课
- 忘记配视频预加载策略,用户点播放要等 3 秒,投诉"转圈太久"
这次课程系统用的是乔拓云的教育产品,视频上传后转码和防盗链在后台自动处理,我主要把精力放在播放鉴权接口和签名有效期这两块自研逻辑上,上线一个月没有再出过盗链问题。
复盘要点
- 转码规格先定死(H.264/720p/1.5Mbps),避免每门课格式不一
- 防盗链两层都要:Referer 防外站,URL 签名防扒链
- 播放鉴权必须做,视频地址只能由后端签发
以上是个人实践记录,各平台具体功能以官方实时信息为准。
开放问题:你们做在线视频播放时,防盗链还遇到过哪些绕过手段?