防止视频资源被下载的解决办法

以PHP(Thinkphp)为例子;

假设我有一个域名:www.test.com

 

详情控制器

// 详情页
public function detail(){
    $_SESSION['play_token'] = md5("laofan666"); //做一个token 用于失效方案
    return View::fetch('video/detail');
}

 

详情页

<video controls="controls" autoplay="autoplay">
<source type="video/ogg" src="https://www.test.com/video/paly?id=1" />
 Your browser does not support the video tag.
</video>

 

获取播放资源

 //处理播放资源
    public function paly(){
        $request_data = Request::param();
        //数据库存放的资源id
        $vid = (int)$request_data['id'];   
        //通过vid 获取 数据库存放的真实资源地址
        $data_mes = Db::name('video')->field('video_url')->where('id',$vid)->find(); 
        if($_SESSION["play_token"]){  
            //删除token,保证每次只能播放一次
            //此处能做的东西就很多了,可以参考下方建议
            unset($_SESSION["play_token"]); 
        }
        //页面直接输出视频
        $filePath=$data_mes['video_url'];
        ini_set('memory_limit', '512M');
        header("Pragma: public");
        header("Expires: 0");
        header("Content-Type: application/octet-stream"); //文件mime类型
        ob_clean();
        flush();
        @readfile($filePath);
    }

 

页面链接只需要访问 详情控制器,就可以看到效果

www.test.com/video/detail/1.html

 

关于token设计

用户登陆观看, 用户id + 视频id + 失效时间,存放一条记录,校验token

无需登陆观看,ip地址&浏览器等信息 + 视频id + 失效时间, 存放一条记录 校验token

 

注意:代码预防下载只能暂时性的处理,要是用户录屏呢?一帧一帧的截取呢?

    A+
发布日期:2020年05月14日 23:12:43  所属分类:PHP
最后更新时间:2020-05-14 23:13:03
评分: (1 票;平均数5.00 ;最高评分 5 ;用户总数1;总得分 5;百分比100.00)
头像
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
PHP运行环境 wamp lamp lnmp 安装 配置 搭建
  • ¥ 9.9元
  • 市场价:49.9元
wordpress站群服务 泛解析二级域名 二级目录站群
wordpress站群服务 泛解析二级域名 二级目录站群
  • ¥ 1999.9元
  • 市场价:4800元
SEO顾问 中小型网站 单站最低99.9元 全方位优化
SEO顾问 中小型网站 单站最低99.9元 全方位优化
  • ¥ 99.9元
  • 市场价:5000元
刷流量 刷人气 刷点击 刷收藏 刷APP关键词
刷流量 刷人气 刷点击 刷收藏 刷APP关键词
  • ¥ 1.0元
  • 市场价:9.9元

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: