2016-12-15 173 views
0

我想让我的视频在网站上难以下载,但失败了一分。如果您的目标是在15分钟后终止视频链接(足以让用户查看视频),则解决方案效果良好。只有HTML5视频流播放器

但我也想让播放器将此流式传输到HTML5视频播放器,但不要让用户通过将视频源链接放在新标签页中进行下载。

我试图让这个链接一次性工作,但问题在于HTML5播放器不止一次连接到流式处理脚本。

所以可能有任何解决方案如何在我的流脚本中,我可以检查脚本是否被强制直接打开或被HTML5播放器强制打开?或者,也许还有另一种方法来阻止直接打开这个脚本?

流脚本:

<?php 

[...]  

if (!empty($_GET['id']) && !empty($_GET['token'])){ 
    if (strtotime($array['created']) > strtotime('-15 minutes')) { 

    $file = 'Z:/home/localhost/www/mvc/video/' . $_GET['id']; 

    $fp = @fopen($file, 'rb'); 
    $size = filesize($file); // File size 
    $length = $size;   // Content length 
    $start = 0;    // Start byte 
    $end = $size - 1;  // End byte 

    header('Content-type: video/mp4'); 

    //header("Accept-Ranges: 0-$length"); 
    header("Accept-Ranges: bytes"); 

    if (isset($_SERVER['HTTP_RANGE'])) { 
     $c_start = $start; 
     $c_end = $end; 
     list(, $range) = explode('=', $_SERVER['HTTP_RANGE'], 2); 
    if (strpos($range, ',') !== false) { 
     header('HTTP/1.1 416 Requested Range Not Satisfiable'); 
     header("Content-Range: bytes $start-$end/$size"); 
     exit; 
    } 
    if ($range == '-') { 
     $c_start = $size - substr($range, 1); 
    }else{ 
     $range = explode('-', $range); 
     $c_start = $range[0]; 
     $c_end = (isset($range[1]) && is_numeric($range[1])) ? $range[1] :  $size; 
    } 
    $c_end = ($c_end > $end) ? $end : $c_end; 
    if ($c_start > $c_end || $c_start > $size - 1 || $c_end >= $size) { 
     header('HTTP/1.1 416 Requested Range Not Satisfiable'); 
     header("Content-Range: bytes $start-$end/$size"); 
     exit; 
    } 
    $start = $c_start; 
    $end = $c_end; 
    $length = $end - $start + 1; 
    fseek($fp, $start); 
    header('HTTP/1.1 206 Partial Content'); 
} 

header("Content-Range: bytes $start-$end/$size"); 
header("Content-Length: ".$length); 
$buffer = 1024 * 32; 

while(!feof($fp) && ($p = ftell($fp)) <= $end) { 
    if ($p + $buffer > $end) { 
     $buffer = $end - $p + 1; 
    } 
    set_time_limit(0); 
    echo fread($fp, $buffer); 
    flush(); 
} 

fclose($fp); 
exit(); 
} 
else { 
echo 'Token is closed'; 
} 
} 
else { 
echo 'Denied'; 
} 

播放器看起来是这样的:

<video width="640" height="480" preload controls> 
<source src="http://localhost/mvc/video/video.php?id=video.mp4&token=0c9eb340fa59db2accf61b16663c79b1" type="video/mp4"> 
<source src="movie.ogg" type="video/ogg"> 
Your browser does not support the video tag. 
</video> 

回答

0

好后残忍两天的战斗,我终于找到了决定。

为了实现这一目标(让HTML5视频播放流视频,但阻止与链接直接下载),我改变了这一点:

if (!empty($_GET['id']) && !empty($_GET['token'])){ 
if (strtotime($array['created']) > strtotime('-15 minutes')) 
{ 
stream video... 
} 

这样:

if (!empty($_GET['id']) && !empty($_GET['token'])){ 
if (strtotime($array['created']) > strtotime('-15 minutes') && $_SERVER['HTTP_RANGE'] == true) { 
stream... 
} 

肯定这是不是100 %的保证,以保护您的视频,但现在下载更加困难。