2016-03-22 11 views
0

Ich versuche, eine URL zu erstellen, um ein Video nur einmal bereitzustellen. Ich werde das als eine Quelle für das Video-Tag verwenden.Temporäre Video-Streaming-URL

Die Idee ist. Erstellen Sie eine temporäre und gültige URL. Wenn die Seite geöffnet ist, überprüfe ich, ob die Seite gültig ist (es gibt eine temporäre Tabelle mit gültigen Registern), erhalte die Daten, lösche das temporäre Register und öffne die Datei.

Das Problem ist, wenn ich das temporäre Register löschen, nachdem ich die Daten bekomme, funktioniert das Video-Streaming nicht.

Es scheint, dass es nicht wie ein Dateideskriptor wirkt, wenn, nachdem es geöffnet ist, auch wenn ich den Knoten lösche es offen bleibt.

Der Code, den ich verwende ist:

$temp=Temporaryvideo::model()->findByAttributes(array("video_id" => "$content", "hash" => "$key")); 

    if(count($temp)==1){ 

     $video=Video::model()->findByPk($content); 
     $filename=$video->attributes['video_url']; 

     header('Pragma: public'); 
     header('Expires: -1'); 
     header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
     header('Cache-Control: private', false); // required for certain browsers); 
     header('Content-Type: video/mp4'); 

     header('Content-Length: ' . filesize("videos/$filename")); 
     //$temp->delete(); 
     readfile("videos/$filename"); 
    } 

Das funktioniert gut, bis ich das Register aus der Datenbank löschen. Gibt es eine Möglichkeit, die URL nur einmal gültig zu machen? Ich möchte das tun, um zu verhindern, dass Leute das Video herunterladen. Ich weiß, dass es andere Wege für sie gibt, das Video zu bekommen, aber das wird einige Leute davon abhalten, das zu tun.

Das Ändern des Inhaltstyps in application/octet-stream löst dieses Problem, aber ich kann nicht vorwärts oder zum Anfang des Videos gehen.

+0

wahrscheinlich eine gute Problemumgehung ist mit einem logischen Löschen, anstatt den Datensatz zu löschen, könnten Sie eine Art Flag aktualisieren, um Ihnen zu sagen, dass in zukünftigen Anfragen die URL nicht mehr gültig ist –

+0

@PabloFlores, aber das wird das gleiche haben Effekt, wenn das Flag markiert ist, würde ich keine Daten zurückgeben/Datei öffnen. – Lefsler

Antwort

0

Am Ende war die beste Lösung

$temp=Temporaryvideo::model()->findByAttributes(array("video_id" => "$content", "hash" => "$key")); 

if(count($temp)==1){ 

    $video=Video::model()->findByPk($content); 
    $filename=$video->attributes['video_url']; 

    header('Pragma: public'); 
    header('Expires: -1'); 
    header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
    header('Cache-Control: private', false); // required for certain browsers); 
    header('Content-Type: application/octet-stream'); 

    header('Content-Length: ' . filesize("videos/$filename")); 
    $temp->delete(); 
    readfile("videos/$filename"); 
} 

diese Weise die URL ungültig zu bedienen ist und das Streaming weiter. Wenn Sie versuchen, im Video vor- oder zurückzublättern, wird es unterbrochen.