写在前面的话
最近想去深圳发展,面试了深圳的几家公司,讲了讲以前经历的几个项目,其中遇到的一个问题就是视频流鉴权防盗链,现在整理一下。
老版本直接通过后台逻辑控制,存在被抓包盗链的风险。
老版本流程图
新版本通过验证token用户身份,合理设置token有效期。
新版本流程图
在这里插入图片描述
最后附上tp5文件流输出方法
function setAudio($file, $type)
{
ini_set('memory_limit', '512M');
if ($type == 'video') {
header("Content-type: video/mp4");
} else {
header("Content-type: audio/mp3");
}
header("Accept-Ranges: bytes");
ob_start();
$size = filesize($file);
if (isset($_SERVER['HTTP_RANGE'])) {
header("HTTP/1.1 206 Partial Content");
list($name, $range) = explode("=", $_SERVER['HTTP_RANGE']);
list($begin, $end) = explode("-", $range);
if ($end == 0) $end = $size - 1;
} else {
$begin = 0;
$end = $size - 1;
}
header("Content-Length: " . ($end - $begin + 1));
header("Content-Disposition: filename=" . basename($file));
header("Content-Range: bytes " . $begin . "-" . $end . "/" . $size);
try {
$fp = fopen($file, 'r');
} catch (\Exception $e) {
echo $e->getTraceAsString();
exit;
}
fseek($fp, $begin);
$contents = '';
while (!feof($fp)) {
$p = min(1024, $end - $begin + 1);
//$begin += $p;
$contents .= fread($fp, $p);
//echo fread($fp, $p);
}
//$contents = ltrim($contents, "\XEF\XBB\XBF");
ob_end_clean(); // ------ 清除缓冲区
ob_clean();
//$contents = substr($contents, 3);
fclose($fp);
exit($contents);
}
网友评论