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