Video Stream - Externes einbinden verhindern

Nobert

Grünschnabel
Guten Abend,

ich bin grad dran ein kleines Video Portal zu erstellen, nun aber habe ich Probleme damit meine Videos zu schützen. Damit sie niemand auf eine andere Webseite einbinden kann. Sonst könnte ich Probleme mit Traffic bekommen. Ich würde auch jedes Video mit einem Captcha versehen nur weiß ich noch nicht wie ich den Video Pfad, wo das Video abgelegt ist zu verschlüsseln.

Nochmal ganz kurz erklärt, ich will nicht verhindern das die Videos gedownloadet werden kann. Ich will nur nicht dass die Videos auf externen Seiten abgespielt werden können.

Ich würde mich auf eine nette Antwort freuen!

Mit freundlichen Grüßen
Nobert
 
Moin,

so, wie es sich anhört, sollte eine Session für dein Vorhaben ausreichen.
Die Videos selbst in ein geschütztes Verzeichnis packen.
Die Ausgabe der Videos erledigst du über ein Skript, welches:
1. auf eine gültige Session prüft
2. das Video(anhand irgendeines übergebenen Parameters) per readfile() zu Clienten durchreicht.
 
Vielen dank für deine Antwort die hat mich schon um einiges weiter gebracht :)
Ich hab nun eine .htaccess Datei in den Ordner abgelegt welcher gespeert werden soll.

Der Inhalt der .htaccess:
Code:
Order Allow,Deny
Deny from all
Allow from 127.0.0.1
Nun hat nur 127.0.0.1 zugriff somit kann ich mit php problemlos darauf zugreifen.

Nun mit mit einer Session prüfen ob der User berechtigt ist dieses Video zu sehen:
PHP:
if (isset ($_SESSION["check"]))  { 
        //Video einbinden
}else{
        echo "Kein Zugriff auf das Video.";
}
Das Video will ich übrigens mit dem Divx Webplayer einbinden.
Aber das funtioniert natürlich nicht wenn ich das Video einfach einbinden will.

Wie soll ich das mit ReadFile machen damit ich das Video einbinden kann?
Ich will das ja im Divx Webplayer abspielen... hab schon die ganze Zeit gesucht aber
keine hilfreichen Themen gefunden.

Mit freundlichen Grüßen
Nobert
 
Nun bin ich wieder ein Schritt weiter gekommen doch leider taucht noch ein Fehler auf.
Im Embed Code von Divx hab ich folgenden link eingetragen:

Code:
http://localhost/video.php?id=1234

in der video.php steht folgendes:
PHP:
<?php
$id = $_GET['id'];

$video_file = '/video/' . $id . '.divx';

if(file_exists($video_file)) {
	@readfile($video_file);
?>
Doch wenn ich dann das Video im Player abspielen will steht dort "Die heruntergeladenen Datei ist keine DivX-Datei", doch es ist eine weil wenn ich das Video direkt einbinde geht es. Und wenn ich direkt auf den oben stehenden Link gehe wird das Video auch geladen... Was fehlt noch damit es geht?

Bitte helft mir.
 
Die geschweifte Klammer evtl:

PHP:
if(file_exists($video_file)) { 
    @readfile($video_file); 
?>

Am besten vor dem Ending-Tag noch eine }-Klammer einbauen.
 
Besten dank für deine Antwort doch das Problem ist es nicht weil ich das nur hier falsch hin geschrieben habe.

Mir kam die Idee vll fopen zu nehmen anstatt readfile aber es geht nicht.
Der Divx Player kann es einfach nicht abspielen.

Oder muss ich die Datei in kleinen Blöcken übergeben?
 
Zuletzt bearbeitet:
Du musst dem Clienten sicher noch den MIME-Type der Video-Datei mitteilen, indem du einen entsprechenden Content-Type-header() sendest. Standardmässig liefert ein Webserver ja in der Regel PHP-Dateien als text/html aus, das schmeckt dem Player sicher nicht :-)


Noch eine Anmerkung zum htaccess:
Du kannst den Zugriff komplett unterbinden.
htaccess ....das regelt die Zugriffskontrolle über das HTTP-Protokoll, aber readfile() ist ja ein Zugriff über das Dateisystem.
PHP kommt dort also immer heran.
 
Nun habe ich alle meine Probleme lösen können.
Ich werde nun meine Ergebnise posten, damit auch andere User mit den gleichen Problemen hier eine Lösung finden.

Zuerst poste ich hier einen ganz normalen divx web Player code, und hier geben wir folgende Url an "http://localhost/stream/video.php?id=123" Die id ist mit dem Video Speicherort in einer Mysql Datenbank gespeichert.
PHP:
<?php
   $id = $_GET['id'];
?>
<object classid="clsid:67DABFBF-D0AB-41fa-9C46-CC0F21721616" width="600" height="420" codebase="http://go.divx.com/plugin/DivXBrowserPlugin.cab">

  <param name="autoPlay" value="false" />
  <param name="allowContextMenu" value="false" />
  <param name="src" value="http://localhost/stream/video.php?id=<?php echo $id ?>" />

<embed type="video/divx" src="http://localhost/stream/video.php?id=<?php echo $id ?>" width="600" height="420" autoPlay="false"  allowContextMenu="false"  pluginspage="http://go.divx.com/plugin/download/">
</embed>
</object>

So nun müssen wir noch in der video.php das video mit readfile ausgeben und die id in der Datenbank suchen.

PHP:
<?php
$id = $_GET['id'];

include('../mysql.php');

	$daten = "SELECT * FROM videodata WHERE id = '$id'";
	$query = mysql_query($daten);
	$row = mysql_fetch_object($query);

	$video_file = $row->path;
	$length = filesize($video_file); 

	header("Content-Type: video/divx");
	header("Content-Length: $length");
	readfile($video_file);
?>

So das sollte wunderbar funktionieren, und ganz wichtig ist es beim Header "Content-Length" anzugeben.

Mit freundlichen Grüßen
Nobert
 
Zurück