Académique Documents
Professionnel Documents
Culture Documents
streamingvideo en PHP
Niveau de difficulté : o
Rafal Malinowski
Vousvous êtesdemandéscommentfonctionnait
la lecturede films à partirdu Web ?
Aimez-vousGoogleVideo? Faites
connaissancedu streamingvideo (diffusionen
flux continu des vidéos)et créezvotre propre
galerieWeb de films. ll suffit de connaîtreles
basesde PHPet c'est tout !
. configurerla résolutiondu film initial(1), document, par exemple, testplayer.fla et avoir la forme d'un chemin relatif ou ab-
. configurer les paramètres de com- déplacez le composant MediaPlayback solu (qui commence soit par file:\ soit par
pressiondu fichier (2), (1) sur la scène (2) (en anglais Sfage, http:\). Pour simplifier, nous admettons
. couper correctement les images du zone de travail du document). Ensuite, que aussi bien Media Player que le film
film(3), lancez Component lnspektor(3) où il faut se trouveront dans le même dossier et
. configurerles paramètresdu son (4). saisir le chemin d'accès (URL) au fichier donc qu'il suffitde saisirle nom du fichier
FLV (4) préparé au préalable.L'URL peut vidéo : videotest.flv.
De plus, ce programme vous permet de
récupérerun seul cadre du film et l'en-
registrersous forme de fichier graphique
JPEG- ongletlmage(5).
Afin d'effectuerla conversion,paramé-
trezle chemindu fichierinitialet du fichier
de sortie et cliquez sur le bouton FLV
Encode(6). Enregistrezle premier fichier
FLV.Appelez-le videote st.flv.
Lecteurvidéo Flash
MacromediaFlash, programmeque vous
utiliserezpour réaliser le premier clip
flash,disposed'un Media Player élégant.
MacromediaFlash est payant mais pour
les besoins de présentation,nous utili-
seronssa version d'essai à télécharger
depuis le site: http://www.adobe.com/
produ cts/flash/fIashp ro/.
Une fois cette version installée,vous
pouvez réaliser un lecteur vidéo Flash
attrayantavec minimum de travail. Lan-
cez Flash (Figure 2), créez un nouveau Figure 2. Macromedia Flash- zone de travailde l'application
FFMPEG - conversion
defichiersvidéo
Si vous décidez de compiler vous-mêmes Figure 5. phpinfo) - information sur la version installéede modules M/NG et FFMPEG
les sources du programme FFMPEG sur
le serveur,n'oubliezpas I'option-mp3lame. Listing 'l. lnitialisationde Movie Clip
Elle permet de convertir les pistes audio
des fichiersvidéo au format MP3. Si vous
ne le faitespas, lors de la lecture par Flash
Player,votre vidéo sera dépourvuedu son
(si, lors de compilation,vous obtenez un
messaged'absence de bibliothèquesné-
cessaires,nous vous recommandons de
téléchargerles sources LAME). Voici un Listing 2. Nous créons /es boufons pour Movie Clip
exemple
de commandêconfisure : l)lt ll,l.rtrt = new SWFButton, , ;
iillrtttr: = lSWFBUTTON UP I SWFBUTTON HIT I S I ^ I F B U T T O NO V E R I SWFBUTTON
./configure *
- - o n : h l o - m n f l â m ê e iT: r
--enable-gPJ- *
! ; . r ( : tr ( ) t t = n e w S W F A c t i o n r i ; r c ; t i r : r r i c : r i 1 , t I ;
- - e - a h l Ê - m e mIai o n - h a c k 'a,tt:l
ljbur lrrfr- addActj-on i r t n , S W F B U T T O NM O U S E D O W N ) ;
-f f- m
. .n. pr -n r
-i
- f- m
. .n. \r , - f- ê- -q .f * V I â
e
51iI1 = lt::lt;tpç:- addFil-1 ii) trn'), SWFFILL TILED BITI4AP) ;
PHPSolutions
N' 5/2006 www.phpsolmag.org
-acodec codec - force I'utilisationdu trouvesur la scène; ce demierpointest pr$
il est en plus possiblede définirla couleurde
type indiqué de codage pour le che- I'anière-plan setBackground ($r, $g,9b) etparéparla méthodenextFrame I I . Le résultat
min audio, le nombre de cadres affichés par seconde du codedu Listing1 est un MovieClipdont
-ab bj.rrate - configure le débit bi- setRate ($rramenate).Afin d'enregistrerle les dimensionssont les suivantes:200px
naire en kbit/s, fichier,appelez la méthode save($fireName) sur 100pxet dontI'anièr+planestrouge.
-s size - configure la taille du cadre de I'objet smovie, mais avant de le faire, Maintenant, organisez les éléments
WxH, veillezà ce qu'au moins un cadre généré se sur la scène de Movie Clip. Organisez
-r rmr - force le format de codage du
fichierde sortie, Listing 4. Nous créons l'objet SWFVideoStream supportant le streaming video
-y - êflrêgistrele fichier sans confir-
$stream = new SWFVideostreami);
mation.
$ s t r e a m - , s e t D i m e n s i o nr$ w i d t h , t h e i g h t t ;
$item = $this-;,movie- addi$streami ;
Voici la commande qui récupère un cadre $ i t e m - m o v e l o ,$ x , $ y ' ;
de la troisièmeseconde du film au format //non de 1'objet VideoStrean sur -la scène
( : n t - i n n c c r i n f = r l
sion. head
MING- générateur
dII9rl-
. de fichiersSWF, value="sameDomain"
<.param name="aLlowScriptÀccess" /;'
écriten C. .tparam name="movie" value="testplayer.swf" />
.rparam n6,1g="quality" value="high" /;
Les deux programmes sont dotésde très iparam name="bgcolor" value="*f.fffff" /.'
grandesfonctionnalités. Nousavonsdéci-
..embed
dé d'opterpourMINGcar il est dotéde sa c r e = r r fp s f n I a v e r . s w f "
propreextensionpourPHP.Grâceà ceci, ^,,-l
vuqrr
I f .,-trhi
Ly-
âhtr
ttrYrt
w i d t h = " 5 5 0"
du niveaude PHP.
height="400"
Une fois I'extensionMING installée
n a m e = "L e s t p l a y e r "
(pour savoir commentle faire, reportez- aI ign="middIe"
vous au site Web www.php.neUming), a I l o w S c r i p t A c c e s s = " s a m e D o m a i "n
commencez à réaliserle fichierSWF. t y p e = " a p p l i c a t i o n / x - s h o c k w a v e - f l a s h"
p l u g i n s p a g e = " h t t P : / / w w w . m a c r o m e d i ac. o m / g o l g e t { i a s h p l a y e r " / : '
Dans un premiertemps,créezun Me
vie Clip élémentaire,comme le pÉsente . :/ o b j e c t : '
le Listing1. ll fauty déterminer pourquelle
versionde FlashPlayervouscréerezle clip ..:/body,
($pfayerVersion),
SWFMovie quelle est la ../htnL'
Unefois l'instancedu bouton $burron vous aurez défini comment le bouton doit
new svùFButron ( ) créée, il est possible réagir à l'événementdonné, vous devrez SWFBirmap o permet de télécharger les
de définir une action pour chaque évé- aussi déterminerla forme, la taille,I'aspect fichiers graphiques au format DBL ou
nementou combinaisond'événements. et la position de la zone active. Pour ce JPG (le site Web du projet MING propose
Vous n'utiliserez ici que la réaction faire, utilisezla méthode : un outil de conversionde fichiers GIF ou
à l'événementappuyer sur le bouton de Sbutton->addShape (Sshape, $ f Iags ), PNG en DBL). Une fois l'objet simq initia-
/a sourls donc vous créerez un bouton ; chargéede déterminerque I'objet$shapeSê- lisé, créez une nouvelle forme $shape
vous lui définirez une action lorsque ltt une forme active pour le bouton $burron new swFshape O êt pour la remplil configu-
l'événementswFBUrroN MousEDowN sur- pour les événements$nass.ll est ainsi pos- rez I'imagegraphique:
vient.Cettecommande se présente ainsi sible de déterminerles formes diverses de
en PHP: zones pour les événements sélectionnés. $fil1 = $shape->addFiIl (
Pour I'instant,déterminezune seule forme $ i m g , S W F F I L L _ T I L E D _ B I T M A;P )
$action = new SV'lFAction ( En ce qui concemê $shape,vous pou- pourdéterminer lesparamètres de la ligne
$actionscript ) vez maintenant montrer vos capacités : qui serviraà tracerle contourde la zone
PHPSolutions
N' 5/2006 www.phpsolmag.org
(épaisseur et composantsRGBde la cou-
leur)ainsique : Listing 6. Conversionde fichiersvidéodu niveauPHP
'. jphp
$ s h a p e - > d r a w l i n e( $ x , $ y ) ;
d e f i n e( ' F F M P E G _ F R A M E _ S I Z E _ P A, R' -As M '1 6 0 x I 2 0 " ; / / p d r a n e t r - s
define('FFMPEG_AUDIO_RATE_PARAM'2 , ' 2- a0r5 0 ' \ ; / / - a r r a t e - s e t a u d i o s a n p T i n g
qui dessineles lignesdepuisle pointoù rate (in Hz)
se trouvaitle curseurjusqu'aupoints",$y. d e f i n e{ ' M O V I ES O U N D' , ' 1 6 0 x 1 2 0 ' ) , '
class VideoFiIe ,
Le Listing3 présentela fonction,chargée
private $dbh;
de tracerle contourdu boutonoù l'image private $osh;
image.dblconstitueI'anière-plan. public function _construct (DatabaseHandler $dbh) |
Une fois ces opérations effec- $this-,osh = PlatformFactory::getPlatformlnstanceO;
tuées, vous verrez les boutonssur la $rhis->dbh = $dbh;
if t $ t h i s - . , o s h - ' i s P h p F f m p e g E x t e n s i o n L o a d e d O) ; -
netConn = new NetConnection O;
$mov = new ffmpeg_movie (MY_MEDIA_DATA_DIR. $fnamel ;
netConn.connect (nu]1 ) ;
$duration = floatval{ $mov-:getDurationO ) ;
$step1 = $duration/3;
Ensuite,qêez un flux qui utiliseracette $steP2 = $step1*2;
connexion: $temp = array (0, $stepl, Sstep2) ;
foreach 1$temp as $k=;'gy1 i
$ i m g N a m e= $ t h i s - . > o s h - > g e t F i l e B a s e N a m e 1 $ f n a m e ;. " 0 $ k . j p g " ;
netstream = new NetStream(netConn) ;
$ c o m m a n d= r f f m p e g - i " ' . M y M E D I A D A T A D I R . $ f n a m e ." ' - s 1 6 0 x 1 2 0
-vframes 1 -f mjpeg -ss '.$v.'
" ' . M y M E D I AD A T AD I R , g i m g N a m e . " ' , ;
L'étapesuivanteconsisteà indiquerI'ins-
tanCg my_player_vstrm ( SWFVideoStream) , if 1 $ t h i s - > o s h - > e x s c 1 $ c o m m a n d=
l = 61 {
$this->655->addlmagel $imgName );
supportantle strcamingvideopour qu'elle
utilisele flux initialisé: