开发那点事(十二)音视频服务器防止盗链Token权限验证

写在前面的话
最近想去深圳发展,面试了深圳的几家公司,讲了讲以前经历的几个项目,其中遇到的一个问题就是视频流鉴权防盗链,现在整理一下。

老版本直接通过后台逻辑控制,存在被抓包盗链的风险。

老版本流程图
在这里插入图片描述
新版本通过验证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);
}

猜你喜欢

转载自blog.csdn.net/zw21544182/article/details/107163251