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
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
- Vidéo et Sous-titres sous Flash (FLV et Actionscript 3)
- FFmpeg : Génerer des vidéos en FLV pour le web













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.
Merci d'avance
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.
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 :)
* 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
j'ai chargé le zip et décompréssé
la lien HTML n'ouvre pas la vidéo sur mon postz
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.
pkanzy@yahoo.fr
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
fonctionne nickel !
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 :-)
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
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.
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.