[PHP] Streaming vidéo via script php sécurisé

Fermé
lu38ca - Modifié par lu38ca le 1/08/2011 à 06:30
 lu38ca - 2 août 2011 à 02:32
Bien le bonjour!



Alors, je vous explique la situation.



- J'ai un serveur (racine : /var/www) sur lequel il y a un site ou, un fois authentifié, j'ai accès au contenu d'un HDD que je monte (/media/multimedia/).
- Les fichiers sont donc sécurisés, il n'est pas possible d'y avoir accès par le serveur FTP mais uniquement par un script php : download.php ou streaming.php.



Avant de refondre toute mon appli avec Zend, je montais (ou ln -s) le disque directement dans le serveur, tout fonctionnait très bien, mais il était possible en connaissant le nom du dossier d'accéder aux fichiers sans s'authentifier.

Le problème maintenant c'est que le téléchargement des fichiers marche très bien, mais le streaming non. Enfin, il marche avec la balise HTML5 <video> mais le problème c'est que toutes mes vidéos ne sont pas en .mp4 ou .ogg mais surtout en .avi.

Je voudrais donc utiliser le même code que celui que j'avais dans l'ancienne version, c'est à dire :




<object 
 type="application/x-mplayer2" 
 width="<?php echo $largeur; ?>" 
 height="<?php echo $hauteur; ?>" 
 data="<?php echo $link ?>" 
> 
 <param name="filename" value="<?php echo $name ?>"> 
 <param name="autostart" value="1"> 
 <param name="width" value="<?php echo $largeur; ?>"> 
 <param name="height" value="<?php echo $hauteur; ?>"> 
 <param name="loop" value="true"> 
</object> 


Mais ça ne marche pas, même pas pour du mp3. J'ai pourtant tout éssayé entre les type MIME, les applications/balises vidéos (mais je veux lire du avi donc ça limite les possibilités), changer les scripts php, ...

Donc je sais pas trop, si quelqu'un pouvait me venir en aide (ou m'apprendre que x-mplayer2 pour une raison inconnu ne lit que des fichiers et pas de flux)

Je vous donne du coup mes 2 scripts download.php et stream.php qui son sensiblement les meme sauf pour la fin :




download.php :

<?php 

function dl_file ($file) 
{ 
    if (! is_file($file)) { 
        die("<b>404 File not found!</b>"); 
    } 

    $len = filesize($file); 
    $filename = basename($file); 
    $file_extension = strtolower(substr(strrchr($filename, "."), 1)); 

    // Récupération du type MIME 
    switch ($file_extension) { 
        case "avi": 
            $ctype = "video/x-msvideo"; 
            break; 
        // [...] 
        default: 
            $ctype = "application/force-download"; 
    } 

    // Reset du cache + Ajout pour IE 
    header("Pragma: public"); 
    header("Expires: 0"); 
    header( 
    "Cache-Control: no-cache, must-revalidate, post-check=0, pre-check=0"); 
    header("Cache-Control: public"); 
    header("Content-Description: File Transfer"); 

    // Ajout du type MIME 
    header("Content-Type: $ctype"); 

    // Force download 
    $header = "Content-Disposition: attachment; filename=" . urldecode($filename) . ";"; 
    header($header); 
    header("Content-Transfer-Encoding: binary"); 
    header("Content-Length: " . $len); 
    ob_clean(); 
    flush(); 
    set_time_limit(0); 
    readfile($file); 
    exit(); 
} 

dl_file($this->homeDir . '/' . $this->file); 

?> 


streaming.php :

<?php 

function stream_file ($file) 
{ 
    // [...] 
    // Pareil que download.php 

    // Ajout du type MIME 
    header("Content-Type: $ctype"); 

    // Démarrage Streaming 
    $fh = fopen($file, "rb"); 
    fseek($fh, 0); 
    while (! feof($fh)) { 
         print(fread($fh, 16384)); 
    } 
    fclose($fh); 
    exit(); 
} 

stream_file($this->homeDir . '/' . $this->file); 

?> 


Voilou, si un dieu traîne par la, j'achète.

Merci d'avance,

Luca.
A voir également:

2 réponses

mpmp93 Messages postés 6652 Date d'inscription mercredi 13 avril 2011 Statut Membre Dernière intervention 28 septembre 2015 1 339
1 août 2011 à 17:25
Bonjour,

je n'ai pas de réponse à votre problème.

Simplement je vois video et avi et streaming

J'espère pour vous que ce sont des vidées perso... parce que si ce sont des copies de films, vous risquez de gros ennuis... Juste par amitié...

A+
0
Hum.. Oui je fais des films que je ripe ensuite.. Plus sérieusement, je ne crée pas un site de partage illégale, mon serveur ne sert qu'en local, et il me permet de partager tous mes documents (photos, musique et film) chez moi uniquement. Je suis juste un jeune étudiant en informatique qui apprend en faisant quelque chose de concret :)
0