Abspielen eines Videos außerhalb des Webroots

Hallo werter Leser/Entwickler,

zunächst meine Problemstellung: Ich möchte eine .flv-Datei mit der flowplayer-Extension (siehe Yii-Extensions) abpsielen lassen, doch diese Video-Datei ist systembedingt in einem Verzeichnis, dass nicht zum Webroot gehört. Der flowplayer läuft so weit und Videos lassen sich auch abspielen, allerdings nur Dateien innerhalb des Webroots.

Diese Video-Datei biete ich ebenfalls zum Download an. Dabei unterstützt mich der Apache-Mod x-sendfile (siehe Apache Mods). Dieser Modus funktioniert wunderbar. Allerdings konnte nicht herausfinden wie ich diesen, auch von Yii unterstützten Mod, vielleicht für die zur Verfügungstellung im Flowplayer verwenden kann.




Yii::app()->request->xSendFile($pfad, array(  /* ... */ ) );



Der Flowplayer verlangt eine URL, die, sobald sie nicht mehr innerhalb der baseUrl liegt, zu einem Fehler führt. Das ist natürlich richtig so. In einigen Foren und beim herumstöbern habe ich Methoden gefunden, mit denen man anscheinend auf die Datei zugreifen kann und sie dem Flowplayer zur Verfügung stellt (nicht bezogen auf Yii). Allerdings ist mir nicht klar, was da wie funktionieren soll und wie ich das in Yii umsetze:

Im Model:




<?php

function getVideoFile(){

    $pathFile = '/dir/outside/root/path/to/video/video.flv';

    header("Content-type: video/flv");

    readfile( $pathFile );

    exit;

}

?>

In der View:




<?php

$this->widget('application.extensions.flowplayer.JFlowPlayer', array(

            'url' => $model->videoFile,

            'id'=>'player',

            'width'=>'400px',

            'height'=>'280px',

        ));

?>



Irgendwie muss ich in PHP die Datei laden und dann mittels einer URL dem Flowplayer übergeben. Hab dafür aber keinen Lösungsansatz. Daher wäre es toll wenn mir jemand einen Ansatz geben könnte - vielleicht irgendein Stichpunkt oder eine Webseite - irgendetwas womit ich weiterkomme. Möglicherweise hat sich der eine oder andere selbst schon mit diesem Problem herumgeschlagen und kennt die Umsetzung in Yii. Zugegeben, ich bin in Webumgebungen noch nicht wirklich der fitteste - kommt aber noch.

Für jede von euch angebotenen Hilfe bin ich dankbar.

Viele Grüße Badi

(P.S. sorry wollte noch ein paar Links angeben, allerdings darf ich das nicht, da ich anscheindend zu neu bin :wink:

Hallo badi

Du packst xSendFile() einfach in eine Action in einem Controller. z.B.:




public function actionStream()

{

  Yii::app()->request->xSendFile('/dir/outside/root/path/to/video/video.flv');

}



und dem Flowplayer gibst du als URL deine eben erstellte Action an. Also z.B.:


 http://www.deineurl.com/index.php?r=controller/stream 

Das wars schon.

Gruss dito

Hallo Dito,

ich hätte schon viel früher geantwortet, allerdings hat mir das System verweigert mehr als 3 Beiträge am ersten Tag der Anmeldung zu schreiben :rolleyes:. Hätt ich mich mal früher angemeldet ;-). Zunächst vielen Dank für deine Antwort. Hatte das gleiche Problem allerdings noch gelöst. Mein Denkfehler lag einfach nur daran, dass ich die Auslieferung des Files im Model machen wollte und nicht im Controller. Du hast natürlich recht damit die Datei im Controller auszuliefern. Ich hatte das ganze auch schon für meinen Download-Button implementiert und musste in den Flowplayer einfach nur noch die gleiche URL wir im Download-Button hinein packen.

View-File:




$this->widget('application.extensions.flowplayer.JFlowPlayer', array(

            'url' => CHtml::normalizeUrl(array('stream', 'id'=>$model->id,)),

            'id'=>'player', //Ab hier sind weitere Optionen für den FP möglich

        ));



Controller-Action:




public function actionStream($id){

    $model=$this->loadModel($id);

    $pfad = '/dir/outside/root/path/to/file/file.flv';

    Yii::app()->request->xSendFile($pfad ,array(

                             'saveName'=>$model->fullVideoName,

                             'mimeType'=>'video/x-'.$model->videoExtension,

                             'terminate'=>false,

                        ));

}



So hat es dann ganz einfach funktioniert. :) Vielen Dank nochmal für deine schnelle und präzise Antwort. Noch viel mehr gefreut hat es mich, dass keine abwertenden Kommentare gekommen sind, wie man das so in anderen Foren liest…

Viele Grüße Badi