php 视频地址加密
php
<?php $file_dir = " "; // 你的mp4文件地址 ob_end_clean(); ob_start(); $handler = fopen($file_dir, 'r+b'); $file_size = filesize($file_dir); //声明头信息,将二进制流信息输出来 Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length: ".$file_size); Header("Content-Disposition: attachment; filename=" . basename( $file_dir)); // 输出文件内容 echo fread($handler,$file_size); fclose($handler); ob_end_flush(); exit; ?>
html
<video id="video_player" width="660" height="364" controls="controls"></video> <script> /// 请注意 底下的 video_player 为你html video标签里面的 id window.onload = function(){ //创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); var url = " "; // 这里的url为你的服务端地址 //配置请求方式、请求地址以及是否同步 xhr.open('POST', url, true); //设置请求结果类型为blob xhr.responseType = 'blob'; //请求成功回调函数 xhr.onload = function (e) { if(this.status == 200) { var blob = this.response; var video = document.getElementById('video_player'); video.onload = function(e) { window.URL.revokeObjectURL(video.src); } var obj_url = window.URL.createObjectURL(blob); video.src = obj_url; // video.play(); } } xhr.send(); } </script>
加密效果
播放器优化
默认的video视频标签有下载功能,导至于视频也是可以直接被下载
所以使用Dplayer 播放器 http://dplayer.js.org
前端优化
xhr 请求传递参数供后台验证
后端优化
禁止浏览直接访问php文件
根据xhr post参验证,调用视频地址
优化后 html
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <link rel="stylesheet" href="dplayer.min.css" /> </head> <body> <div id="dplayer" style="width:500px;height:300px;"></div> <script src="dplayer.min.js"></script> <script> /// 请注意 底下的 video_player 为你html video标签里面的 id window.onload = function(){ //创建XMLHttpRequest对象 var xhr = new XMLHttpRequest(); var url = "/ved.php"; // 这里的url为你的服务端地址 var param = "file=6666&name=5555"; //配置请求方式、请求地址以及是否同步 xhr.open('POST', url, true); //设置请求结果类型为blob xhr.responseType = 'blob'; //传递参数 xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded"); //请求成功回调函数 xhr.onload = function (e) { if(this.status == 200) { var blob = this.response; var obj_url = window.URL.createObjectURL(blob); //实例化dplayer播放器 const dp = new DPlayer({ container: document.getElementById('dplayer'), video: { url: obj_url, }, }); } } xhr.send(param); } </script> </body> </html>
优化php
<?php //禁此浏览器直接打开 if($_SERVER['HTTP_REFERER']==''){ echo 'error'; exit; } //接收post参数,进行判断调用真实mp4文件地址 $param = $_POST; $file_dir = "mp4.mp4"; // 你的mp4文件地址 ob_end_clean(); ob_start(); $handler = fopen($file_dir, 'r+b'); $file_size = filesize($file_dir); //声明头信息,将二进制流信息输出来 Header("Content-type: application/octet-stream"); Header("Accept-Ranges: bytes"); Header("Accept-Length: ".$file_size); Header("Content-Disposition: attachment; filename=" . basename( $file_dir)); // 输出文件内容 echo fread($handler,$file_size); fclose($handler); ob_end_flush(); exit; ?>
dplayer.js.org 下载的来的js发布中文会乱码,所有以discuz扒下来的dplayer.min.js与dplayer.min.css