寫在前面的話
最近想去深圳發(fā)展纠俭,面試了深圳的幾家公司冰木,講了講以前經(jīng)歷的幾個(gè)項(xiàng)目穷劈,其中遇到的一個(gè)問題就是視頻流鑒權(quán)防盜鏈,現(xiàn)在整理一下踊沸。
老版本直接通過后臺(tái)邏輯控制歇终,存在被抓包盜鏈的風(fēng)險(xiǎn)。
老版本流程圖
在這里插入圖片描述
新版本通過驗(yàn)證token用戶身份逼龟,合理設(shè)置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(); // ------ 清除緩沖區(qū)
ob_clean();
//$contents = substr($contents, 3);
fclose($fp);
exit($contents);
}