Streaming Video avec PHP
novembre 10, 2008
Je dispose d’un serveur Apache tout ce qu’il y a de plus classique. Loin de chez moi, il m’arrive de l’utiliser pour visionner certaines de mes vidéos.
À cause d’un faible débit, il est souvent nécessaire de télécharger toute la vidéo pour espérer la voir sans blocage.
Pour résoudre le problème, je viens de mettre au point un petit fichier php qui va pouvoir convertir à la volet les fichiers vidéo.
Comme toujours, je ne ponds pas de code sécurisé, mais du code utilitaire, vous allez voir, c’est du gruyère
Code source :
<?php
$FPS = 15;
$SCALE = “640:480″;$FICHIER = $_GET['fichier'];
$COMMANDE= “mencoder \”$FICHIER\” -ofps $FPS -ovc lavc -lavcopts vcodec=flv:acodec=mp3 -vf scale=$SCALE -ffourcc FLV1 -oac mp3lame -o /dev/stdout -really-quiet -noskiplimit”;
if (!($p=popen(“$COMMANDE”,”r”)))
{
return 126;
} else
{
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”);while (!feof($p)) {
$l=fgets($p,1024);
print $l;
}
pclose($p);
}?>
Vous l’aurez compris, pour fonctionner ce programme nécessite la présence de mplayer et des codecs qui vont bien.
Cette page s’utilise ensuite avec comme paramètre fichier=”emplacement de la vidéo”.
Quelques problèmes persistent :
- Usage CPU important (plus que necessaire je pense)
- Persistance des commandes mencoder (mais heureusement en usage CPU nul)
- Je n’ai pas réussi à intégrer ces pseudo-flv dans un lecteur flv flash (je les lis en streaming avec mplayer)