2016-12-15 6 views
0

Ich versuche, meine Videos auf der Website schwerer zu downloaden, aber mit einem Punkt gescheitert. Lösung funktioniert gut, wenn Ihr Ziel ist, Video-Link nach 15 Minuten zu beenden (genug für Benutzer Video zu sehen).HTML5 Videostream nur für Player

Aber ich möchte, dass Player dieses Streaming in HTML5-Video-Player bekommen, aber lassen Sie den Benutzer nicht herunterladen, indem Sie Video-Source-Link in neue Registerkarte setzen.

Ich habe versucht, diesen Link einmal zu arbeiten, aber das Problem ist, dass HTML5 Player mehr als einmal mit Streaming-Skript verbindet.

Also wahrscheinlich gibt es eine Lösung, wie in meinem Streaming-Skript kann ich überprüfen, ob Skript gezwungen, direkt zu öffnen oder durch HTML5-Player gezwungen? Oder gibt es eine andere Möglichkeit, wie man das direkte Öffnen dieses Skripts blockiert?

Streaming-Skript:

<?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'; 
} 

Spieler sieht wie folgt aus:

<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> 

Antwort

0

Nun nach zwei Tagen der grausamen Kämpfe fand ich schließlich die Entscheidung.

dieses Ziel zu erreichen (HTML5-Video-Player Video-Stream lassen, aber mit Link direkt herunterladen Block), i dies geändert:

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

dazu:

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

Sicher ist dies nicht 100 % Garantie, um dein Video zu schützen, aber jetzt ist es schwieriger herunterzuladen.