Aller au contenu | Aller au menu | Aller à la recherche

Site membre du réseau Izardev et LCNET

PHP Streaming et Flash FLV

Faire lire directement un fichier FLV par un composant Flash (FLVPlayback, VideoPlayer ou autre...) pose un problème majeur : ce fichier FLV passera dans le cache du navigateur du client, et pourra ainsi facilement être copié sur sur le poste de l'utilisateur. Si vous souhaitez protéger vos fichiers FLV en utilisant du "vrai" Streaming, il existe plusieurs solutions :

  • Flash media server : La solution est payante
  • Wowza : Une solution payante plus économique que FMS
  • Red5 : Un serveur de streaming open source : davantage d'information sur l'installation de Red5 et sur la manière de créer des applications Red5
  • Génerer le fichier avec un langage serveur : Streaming PHP, Streaming ASP...

Nous allons voir dans cet article comment générer un fichier FLV avec PHP.

La classe Streamer FLV

C'est cette classe Streamer (au demeurant très simple) qui va nous permettre de générer le fichier PHP Streaming : (vous pourrez télécharger une source avec un exemple en bas de ce document).

<?php
set_time_limit(0);class Streamer
{
    var  $flv;
    var $pos;
    function __construct($flv_file_url)
     {
        $this->flv = $flv_file_url;
        $this->pos =  0;
    }
    function setHeader()
    {
         header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
         header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
         header("Cache-Control: no-store, no-cache, must-revalidate");
         header("Cache-Control: post-check=0, pre-check=0", false);
         header("Pragma: no-cache");
        header("Content-Type:  video/x-flv");
    }
    function setPosition()
    {
         print("FLV");
        print(pack('C', 1 ));
         print(pack('C', 1 ));
        print(pack('N', 9 ));
         print(pack('N', 9 ));
    }
    function buildStream()
    {
         $fh = fopen($this->flv, "rb");
        fseek($fh,  $this->pos);
        while (!feof($fh)) 
        {
             print (fread($fh, 16384));
        }
        fclose($fh);
     }
}
?>

Fichier Streamer.php

Instanciation d'un objet Streamer et génération du fichier FLV

Voici un aperçu du fichier film.php :

<?php
require("Streamer.php");
set_time_limit(0);

$film  = $_GET['video'];$oStream = new Streamer($film);
$oStream->buildStream();
?>

L'appel de ce film.php en passant en paramètre GET l'url du film, générera le fichier streaming requis par votre player Flash.

Téléchargement de l'exemple PHPStreaming

php_streaming.zip 854,40 kB

Ce fichier contient :

  • Les sources FLA
  • Un fichier FLV exemple
  • Les sources PHP streaming

Conclusion

Le streaming PHP est très simple à mettre en place sur son site, et très utile si vous ne souhaiter pas que l'on puisse facilement copier vos vidéos. On pourrait également décliner cette classe PHP pour faire du streaming mp3.

Articles connexes

Partagez cet article !

  • Delicious
  • Stumbleupon
  • Digg
  • Facebook
  • Google
  • Linkedin
  • Yahoo Buzz
  • Twitter
Vous avez apprécié cet article ?

Commentaires S'abonner au flux RSS des commentaires

  1. Stéphane Le Merre | Streaming flowplayer et format |
    Le format il faut modifier directement celui du film flv et/ou redimensionner directement dans votre player.

    Sinon je pense que c'est possible d'intégrer ça dans Flowplayer, il suffit de lui indiquer l'adresse du PHP à la place du FLV.
  2. gama | format d'affichage |
    Bonjour, comment puis-je modifier le format de diffusion, ma vidéo est en 16/9 et j'ai beau changer les dimensions dans tous les fichiers, ca ne change rien.

    Merci d'avance
  3. Dy-d | Intégrer dans Flowplayer |
    Bonjour,

    En téléchargeant l'archive tout fonctionne sur un petit mutu OVH :-)

    Merci.

    Cependant, j'ai cherché un moyen d'intégrer tout cela dans Flowplayer, est-il possible? Je ne suis pas parvenu à le faire.
  4. Bonjour,
    Effectivement, il faut passer un 2e paramètre dans le constructeur et définir l'attribut pos. car c'est à partir de celui-ci que la lecture est faite :

    function setPosition($_pos = 0)
    {
    $this->pos = $_pos;
    print("FLV");
    print(pack('C', 1 ));
    print(pack('C', 1 ));
    print(pack('N', 9 ));
    print(pack('N', 9 ));
    }

    Lors de la création de l'objet :

    $oStream = new Streamer($film);
    $oStream->setPosition(1000);
    $oStream->buildStream();

    Et ca devrait fonctionner :)

  5. Fabien | Streaming et position |
    Bonjour

    * Je ne comprends pas à quel niveau vous utilisez la fonction setPosition()

    * J'ai essayé de transposer cette fonction en MP3, tout marche bien, seulement je lis à chaque fois le mp3 depuis le début et n'arrive pas à lire directement une position

    Merci de votre aide
    Fabien
  6. Bonjour
    j'ai chargé le zip et décompréssé
    la lien HTML n'ouvre pas la vidéo sur mon postz
  7. Stéphane Le Merre | Re : PHP Streaming et Flash FLV |
    Installer un Red5 http://...elease-OVH ou un serveur de vrai streaming, cela dit, tu ne pourras empêcher personne de capturer l'écran.
  8. | PHP Streaming et Flash FLV |
    Bon ce site est sympa!
    Mais bon... :s ce que tu dis n'est pas vraiment exact puisque j'arrive à télécharger le fichier vidéo flv... Il suffit de renommer le .php.html en .flv ... Et hop tous vos efforts en vain... Existe-t-il une autre solution? Merci d'avance.
  9. Kanzy | streaming php |
    Excusez-moi , je ne vous ai pas transmis mon mail
    pkanzy@yahoo.fr
  10. Kanzy | Playlist video flash |
    Bonsoir,

    Il y a près de deux semaines, je vous ai envoyé un message concernant le streming en php mais je n'ai pas reçu de réponse. Alors je reviens vers vous pour vous demander si vous pouvez me fournir un script playlist de straming video en php. Les vidéos ne doivent être téléchargeable comme dans l'exemple streaming php.

    Quel est votre prix

    Cordialement

    Kanzy
  11. il suffit de rooter le fichier principal pour ensuite le récupérer, rien de compliquer !
  12. manu | "Moi perso le code fonctionne très bien" |
    super exemple

    fonctionne nickel !

  13. "Moi perso le code ne fonctionne pas"

    Quelle assurance ! Il fonctionne à merveille, il est d'ailleurs en production sur beaucoup de site et je n'ai aucun retour (ce qui est plutôt bon signe en général).

    Vous avez dans cet article la possibilité de télécharger une archive avec des sources, prenez la peine de les copier/coller sur un serveur web, et constatez que ça fonctionne. Ce n'est certes pas ma méthode de prédilection pour faire du streaming, mais dans le cadre de petits projet, ça épargne l'installation & la maintenance d'un serveur Red5, par exemple http://...elease-OVH

    Je précise, c'est du PHP, il faut donc un serveur qui exécute PHP :-)
  14. bonjour,

    Moi perso le code ne fonctionne pas. Et j'aurais aimé en savori d'avantage sur la manière de développer tout ce code.

    Merci
  15. Je découvre votre blog par le biais de cet article et il y a beaucoup de choses intéressantes ici. Merci pour toutes ces précieuses informations.
  16. Bonjour,

    Je ne vous suis pas... le but de l'article est de montrer comment on stream une vidéo FLV avec PHP, pas de parler d'intégration HTML/Javascript. L'intégration est réalisée ici par les soins du logiciel Flash d'Adobe, rien de plus, et elle n'a pas grand intérêt dans cet exemple.
    Vous obtiendrez le même résultat avec SWFObject, Flash Satay et toutes les autres méthodes plus ou moins propres d'intégrer des objets flash dans vos pages.

    Dans le flash, au lieu d'appeler un fichier FLV, vous appelez le fichier PHP (quelque soit la méthode utilisée, NetConnection etc. dans le cas présent, FLVPlayback a été utilisé pour gagner du temps dans la démo).
    Je vous invite donc à plus vous intéresser à la source flash qu'au HTML qui est dénué d'intérêt sur ce thème précis.
  17. | PHP Streaming et Flash FLV |
    Bonjour,

    Très bien ce code, mais j'aimerai bien savoir COMMENT faites-vous
    la relation entre les fichier HTML et JavaScript et le fichier film.php ?

    Autrement dit, quel script demande à film.php d'éxecuter le film ?

    De plus, dans la fonction AC_Generateobj(), le "document.write" ne
    sert à rien puisque même en commentaire on voit le film.

    A moin d'avoir des explications claire, je pense que le code est à revoir et à bien commenter pour savoir "qui fait quoi".

    Merci.

Ajouter un commentaire

Les commentaires sont tous validés par un modérateur, votre commentaire n'apparaît pas directement sur le site.
Aucun support n'est assuré ici, vous pouvez néanmoins laisser vos remarques et critiques sur l'article, les points de vue pertinents sont toujours les bienvenus.