Streaming Video avec PHP

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)

4 réflexions sur “Streaming Video avec PHP

  1. $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”;

    => ces 2 lignes sont de magnifiques XD

Répondre à sparkles Annuler la réponse.