Stream video en flv à la volée avec ffmpeg

Tags:: video :: développement :: copix

Sur ma Wii, je ne peux pas lire mes DVD ni mes MP3 sans avoir à les copier sur des cartes SD cards... streamer cela depuis mon PC de bureau me plairait. La solution est de passer par le navigateur (Opera) de la Wii qui ouvre un lecteur flash (swf) qui va lire une FLV.

Jusque là, à peu prés tout le monde sait encoder une vidéo dans le format flv avec un encodeur, c'est simple: ça fait un fichier FLV qu'on peut alors lire sur une page avec un petit lecteur flash.

Oui mais ! 300Go de vidéos, de musiques etc... à encoder en FLV non merci... du coup, je me suis développé un truc sous Copix qui me permet de lire mes média sur ma Wii.

Je vous donnerai ça plus tard, pour l'heure je vous explique juste l'astuce.

Sur mon PC de bureau, Linux Fedora 9 avec ffmpeg installé. Cet encodeur permet de convertir un média dans plusieurs formats différents. Intéressant, il sait envoyer le flux dans un fichier ou directement dans STDOUT (la sortie standard).

En gros, la commande pour écrire dans un fichier:


ffmpeg -i mon_film.avi -f flv -s vga -y mon_film.flv
 

Ici, j'encode mon_film.avi en mon_film.flv (en format VGA 640x480 etc...) Bref mon but c'est de ne pas attendre que l'encodage soit terminé pour lire mon fichier et ne pas avoir à stoker mon fichier flv sur le disque. Voilà donc comment faire :


#ne tapez pas encore cette commande dans le terminal, attendez la suite de l'article
ffmpeg -i mon_film.avi -f flv -s vga -
 

Ce tiret en fin de commande demande à ffmpeg d'écrire dans la sortie standard. Si vous tapiez cette commande dans le terminal vous verriez des caractères exploser partout et donc rendre votre ligne de commande illisible... pour le moment, on va s'amuser à lire notre flux converti à la volée dans mplayer ou xine:


#avec mplayer
ffmpeg -i mon_film.avi -f flv -s vga - | mplayer -

#avec xine
ffmpeg -i mon_film.avi -f flv -s vga - | xine -
 

Voilà, ce qui sort de ffmeg part directement dans le lecteur. Maintenant on va appliquer cette méthode à PHP :) Lire un flux de sortie avec PHP se fait grâce à popen(), on va lire le flux et l'envoyer dans le navigateur en tant que FLV.


//stream.php

//on commence par donner quelque entête au navigateur qui en aura
//certainement besoin
header("Expires: Mon, 01 Jan 1981 01: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");

//on ouvre la commande et on va lire le flux sortant
$handle = popen('ffmpeg /repertoire/monfilm.avi -s vga -f flv -');
while (!feof($handle)){
    print(fread($handle,1024*16)); //je lis des blocs de 16ko
}
pclose($handle);
 

Reste à prendre un lecteur FLV en flash, n'importe lequel fera l'affaire et de lui indiquer le chemin http vers le script stream.php créé ci-dessus.

Et oui, ça fonctionne !

Vous pouvez évidemment adapter la commande ffmpeg pour encoder plus fort, changer le bitrate, changer la taille... Bref, cette méthode marche très bien chez moi :)

Utilisez le code barre pour ouvrir le ticket dans votre mobile:
This ticket on you mobile
1 Mercredi 31 Décembre 2008 16:59:48, [SiMON]

Si j'puis m'permettre, l'idée n'est pas nouvelle : Weezo (http://weezo.net/) fait ça depuis longtemps (avec tout un tas d'options) et fonctionne à merveille avec une Wii.

2 Lundi 05 Janvier 2009 10:39:05, Metal3d

Ha mais je n'ai pas dit que c'était nouveau :) j'ai dit que c'était simple et que cela ne demande que quelques lignes de PHP. Il existe des tas de trucs pour faire pareil, parfois lourds, parfois moches...

Bref, l'idée ici est de montrer comment faire un stream depuis un fichier sans passer par une conversion en deux temps.

Cela peut être super utile pour un site qui n'a pas de grosse fréquentation et qui veut streamer une vidéo sans devoir passer par une conversion et prendre de la place sur DD. Oui, cela fait bobo au CPU, mais j'ai bien préciser "qui a une faible fréquentation"... une conversion par heure ça fait pas grand chose :)

Mieux, imagine un module Copix qui permette de streamer un divx rapidement tant que le FLV n'est pas prêt... bref, je voulais montrer un truc sympa et rapide.

3 Dimanche 22 Mars 2009 10:52:32, Sadar

Hello,

Perso je serais assez intéressé pour avoir le bout de code qui va bien pour la redirection vers le lecteur flash, car je galère depuis déjà quelques jours pour mettre au point ce genre de truc.

Ben vi, chui plutôt une buez en programmation php etc ;-//

Ajouter un commentaire
Veuillez répondre à la question suivante : Tapez "clap" sans guillemets dans le champs suivant

Trackbacks

Pour ajouter un trackback (retrolien) sur ce ticket, utilisez cette adresse: http://www.metal3d.org/index.php/trackback/default/tb?id=blog%2F167

Tags

Blog Copix Communication PC Config Fedora Vidéo Humour Autre Web Materiel Informatique PHP Développement Mootools HTML Linux WEB IE CSS Vista Microsoft Sympa XHTML Quizz Widget Klik CWE Voeux Bonne année Musique CCRMA Son Audio MAO Reconnaissance vocale Windows Mac Compiz MacOS Mysql Sun Base de données BD Screenlets Screenlet RPM compiz Ubuntu Live FireFox Derambarsh Facebook media informations Sécurité javascript SSH Commande Marketing concours ipod wii QT Trooltech Nokia Libre Logiciels GPL Attali Gnome Dock Compiler Bench undelete reiserfs recovery recover Thread Serveur Optimisation Server Apache Album RSS Flash Air XML Firefox Blender Opensource Orange Internet LiveBox Animaux Droits Logiciels Libres Google Loi RBS netcat Bash Téléphone Spam 3D NIDIA Standards Widgets Merise UML Streaming Developpement Perl MySQL Firewall Parfeu Bayes Novell Réseau Python LVS Salon FTP Dedibox Chrome Administration IRC Gentoo troll video Nouveauté Finance Etudiant spéctacle OpenOffice Javascript Java Info Eclpise ATI design mootools KDE Bureau Design GNU C Pages Jaunes Fun Bijoux Art mail Admin vmware fedora linux VirtualBox VMWare Qemu KVM vim Grep Fglrx Webkit GTK google web JQuery Coup de gueule coup de gueule Lois SVG Raycaster Canvas Hadopi Desktop Jeux Les Sims développement astuces Screen firefox Mobile Safaru Wine bash commande astuce Wave ooc C++ C# Netbook Hercules Bureautique Twitter Safari W3C chrome kazehakaze midori navigateur gecko webkit Links Liens Pyhon Nouvelles Metal Perso Conférence JDLL PCC Roadsend OOC News Acteur Cinéma Chanteur Seven windows orthographe pcc php jdll Slide Application mysql Html twitter python screen curses SVN Android Gphone iPhone OpenGL MindMap Projet Javascrtip Ajax Guitare Tab Tablature JSON firebug Chromium Iphone Titanium music sound android ogg ogv streaming Arkyne svn subversion gnome VLC Tv encoder ffmpeg Cryptage apple microsoft HTML5 Max Apple code youtube quvi git uzbl webgl chromium

  Catalogue professionnel de musique libre


  • twitter entries...
follow me on Twitter

Valid XHTML 1.0 Strict

tumblr visitor