php et streaming vidéo

7
Votre propre GoogleVi deo : streaming video en PHP Rafal Malinowski Niveau de difficulté : o Vousvous êtesdemandés comment fonctionnait la lecture de films à partirdu Web ? Aimez-vous Google Video? Faites connaissance du streaming video (diffusion en flux continu des vidéos)et créez votre propre galerie Web de films. ll suffit de connaître les basesde PHPet c'est tout ! ublier les films sur Intemet en se basant sur FlashPlayer com- prend trois opérations : . convertir le film au format Flash Video (FLV) supporté par Flash Player, . créer le lecteur (Media Player) qui chargera le film depuis le serveur et le présentera au client dansle navigateur, . publier un site Web où vous placerez le lecteur. Afin de décrireles opérations ci{essus, nous avons divisé I'article en trois parties : . première partie: démanage rapide où nousvous présenterons, comment publier un film sur Internet. Ce seraun exemple pourla plate-forme Windows, . deuxième partie : nous développerons ensemble l'exempledécrit dans la première partie et nous présenterons commentautomatiser les opérations décrites et comment vous rendrein- dépendants du système d'exploitation aveclequel fonctionnera la galerie, . troisièmepartie : nous nous base- rons sur les connaissances acqui- ses dans la deuxièmepartie ainsi que sur le code que nousy aurons créé pour réaliser une version finale du service: une galerie de films fonctionnelle et universelle. Démarrage rapide Vousallezeffectuer troisétapes: étape 1 - convertir le fichiervidéo;étape 2 - rêali" ser un lecteur vidéo en Flash; étape 3 - in- tégrer le lecteur en HTML. Ge qu'il faut savoir... Avoir les bases de PHP sera très utile. Getarticle explique... Vous apprendrez comment créer votre prc,preGoogle Video: une galerie com- plète de films avec Media Player Flash sur Intemet qui permettrade charger les films et de les lire en continu. Rafal Mallnowskl esl prcgnmmeur et ænæpteur d'appliætions réseau en PHe JAUA et AdionSaipt. Pendant son temps libre, il crée des bibliothèques pur Flash et pafticip à plusieurs proiets Open Source.Aduellernent, il tnvaille chez SUPERMEDIA sur le poste de concepteur/prcgnmmeurJava. @ntad: [email protected] www.phpsolmag.org PHP Solutions N" 5/2006

Upload: dvdstory

Post on 07-Jun-2015

1.048 views

Category:

Documents


2 download

DESCRIPTION

PHP SOLUTIONS

TRANSCRIPT

Page 1: php et streaming vidéo

Votre propre Google Vi deo :streaming video en PHPRafal Malinowski

Niveau de difficulté : o

Vous vous êtes demandés comment fonctionnaitla lecture de films à partir du Web ?Aimez-vous Google Video ? Faitesconnaissance du streaming video (diffusion enflux continu des vidéos) et créez votre propregalerie Web de films. ll suffit de connaître lesbases de PHP et c'est tout !

ublier les films sur Intemet ense basant sur Flash Player com-prend trois opérations :

. convertir le film au format Flash Video(FLV) supporté par Flash Player,

. créer le lecteur (Media Player) qui

chargera le film depuis le serveur et leprésentera au client dans le navigateur,

. publier un site Web où vous placerez

le lecteur.

Afin de décrire les opérations ci{essus,nous avons divisé I'article en trois parties :

. première partie: démanage rapideoù nous vous présenterons, commentpublier un film sur Internet. Ce sera unexemple pour la plate-forme Windows,

. deuxième partie : nous développeronsensemble l'exemple décrit dans lapremière partie et nous présenterons

comment automatiser les opérationsdécrites et comment vous rendre in-

dépendants du système d'exploitationavec lequel fonctionnera la galerie,

. troisième partie : nous nous base-rons sur les connaissances acqui-ses dans la deuxième partie ainsique sur le code que nous y auronscréé pour réaliser une version finaledu service: une galerie de fi lmsfonctionnelle et universelle.

Démarrage rapideVous allez effectuer trois étapes: étape 1- convertir le fichier vidéo; étape 2 - rêali"ser un lecteur vidéo en Flash; étape 3 - in-tégrer le lecteur en HTML.

Ge qu'il faut savoir...Avoir les bases de PHP sera très utile.

Get article explique...Vous apprendrez comment créer votreprc,pre Google Video: une galerie com-plète de films avec Media Player Flashsur Intemet qui permettra de charger lesfilms et de les lire en continu.

Rafal Mallnowskl esl prcgnmmeur etænæpteur d'appliætions réseau enPHe JAUA et AdionSaipt. Pendant sontemps libre, il crée des bibliothèquespur Flash et pafticip à plusieurs proietsOpen Source. Aduellernent, il tnvaillechez SUPERMEDIA sur le poste deconcepteur/prcgnmmeurJava.@ntad: [email protected]

www.phpsolmag.org PHP Solutions N" 5/2006

Page 2: php et streaming vidéo

En fonction du système d'exploitat ion

et des solut ions ut i l isées, i l est possible

d'effectuer chacune de ces étapes deplus ieurs manières. Dans un premier

temps, réal isez une présentation prête

à atteindre rapidement l 'object i f . Pour

ce faire, ut i l isez des programmes com-

merciaux (version d'essai), disponibles

uniquement (hélas) pour la plate-forme

Windows. Toutes les étapes serontprésentées I 'une après I 'autre. Dans lapart ie suivante de I 'art icle, nous vous

présenterons les solut ions indépendan-

tes du système d'exploitat ion qui néces-

sitent toutefois plus de travai l .

Gonversion d'un fichier vidéoFlash Player travai l le avec les f ichiers

vidéo au format Flash Video (FLV). Ce

format est rarement rencontré et i l est

donc nécessaire de le convert ir . Pour

ce faire, ut i l isez le programme Riva

FLV Encoder (http://www.rivavx.com/?

encoder). Comme vous le voyez sur la

Figure 1, Riva FLV Encoder vous per-

met de :

. configurer la résolution du film initial (1),

. configurer les paramètres de com-pression du fichier (2),

. couper correctement les images du

fi lm (3),. configurer les paramètres du son (4).

De plus, ce programme vous permet de

récupérer un seul cadre du film et l'en-

registrer sous forme de fichier graphique

JPEG - onglet lmage (5).

Afin d'effectuer la conversion, paramé-

trez le chemin du fichier initial et du fichier

de sortie et cliquez sur le bouton FLV

Encode (6). Enregistrez le premier fichier

FLV. Appele z-le v i d eote st. flv.

Lecteur vidéo FlashMacromedia Flash, programme que vous

utiliserez pour réaliser le premier clip

flash, dispose d'un Media Player élégant.

Macromedia Flash est payant mais pour

les besoins de présentation, nous utili-

serons sa version d'essai à télécharger

depuis le site: http://www.adobe.com/prod u cts/fl a sh/f I a sh p ro/.

Une fois cette version installée, vouspouvez réaliser un lecteur vidéo Flash

attrayant avec minimum de travail. Lan-

cez Flash (Figure 2), créez un nouveau

Figure 1. Riva FLV Encoder - convertisseur de fichiers vidéo au format FLV

document, par exemple, testplayer.fla et

déplacez le composant MediaPlayback

(1) sur la scène (2) (en anglais Sfage,

zone de travai l du document). Ensuite,

lancez Component lnspektor (3) où il faut

saisir le chemin d'accès (URL) au f ichier

FLV (4) préparé au préalable. L'URL peut

avoir la forme d'un chemin relatif ou ab-

solu (qui commence soit par file:\ soit par

http:\). Pour simplifier, nous admettonsque aussi bien Media Player que le f i lm

se trouveront dans le même dossier et

donc qu' i l suff i t de saisir le nom du f ichier

vidéo : videotest.flv.

Figure 2. Macromedia Flash - zone de travailde l'application

Flla [ar6.u4,c ?

f VA

'*+FLv EN..DER- , Online Hclp

,;h lf,deonleb

-. Forum

Presel

D5[ ,xml

h.rInpul Video

j Mdco I tmagc O

,' 8rærcu.l€o

, fiovic Skc

'eæt6-r ' {Deinterlace

' Fnmcrrtc BltràtcOrfFf

Output Directory

E:\documents\adminVny-documcntsll\oje widco Brotsc

Destinetion Yideo tile

Roeult

Êfl r|ËroûtF{f6 fffi llIE rd rfvrf,tr

PHP Solutions N" 5/2006 www.phpsolmag.org

Page 3: php et streaming vidéo

r, -ltr lI l

Ete Eû $ew Ep EodqËks lodr SF I

t " . l |3 #] tr @ + 6lr*e'///e'/oocuncnts/ac IGI

( (

Figrrre 4 Composant MediaPlayback de Macromedia présentant un film dans lenavigateur lnternet

Crrrer* profle: loefaUt

Fsmats Flô$ l**

I lerdon: lrbsh Player 7 :J

leottom up :l

Publication de Movie ClipEnsuite, il faut créer un fichier HTML où

vous placerez Movie Player de sorte que

les autres puissent le regarder. En ce qui

conceme le téléchargement du fichier vidéo

et sa lecture dans le navigateur, c'est Movie

Player qui s'en charge. Macromedia Flash

vous facilite ici considérablement la tâche.

Sélectionnez la commande File -> Publish

Seffings dans le menu (Figure 3). Dans

la nouvelle fenêtre, dans I'onglet Flash,

configurez les paramètres de la publica-

tion et sélectionnez la version 7 de Flash

Player (1). Cliquez sur le bouton Publish ;deux nouveaux fichiers : fesfp/ayer.svvf et

testplayer.html apparaissent dans le ré-pertoire où vous aviez enregistré le fichier

testplayer.fla. Si vous plaæz à présent ces

fichiers avec le fichier vidéo sur le serveur

et si vous ouvrez la page testplayer.html,

vous devriezvoir le film publié dans le navi-gateur Intemet (Figure 4).

C'est prêt !Nous finissons ainsi cette introduction.

La page créée sera visible dans tous les

navigateurs Internet dotés d'un plug-in

Flash Player 7 ou supérieur. Comme vouspouvez le constater, réaliser une publica-

tion de fichiers vidéo est très simple. Mal-

heureusement, les solutions utilisées ne

répondent pas à nos besoins. Première-

ment, elles sont commerciales (elles coû-

tent cher) et ne sont disponibles que pour

la plate-forme Windows. Deuxièmement,

il faut effectuer toutes les opérations à la

main. À présent, nous essayerons ensem-

ble d'automatiser le processus de conver-

sion de films, nous insisterons sur le côté

universel en nous rendant indépendants

du système d'exploitation et en plus, nous

n'utiliserons que des logiciels gratuits.

l l es t tempsde le déve lopperSi vous voulez permettre à I'utilisateur de

télécharger vos propres fichiers vidéo, il

faut offrir une conversion automatique de

films. Standard Flash Video (FLV) est un

format destiné aux fichiers vidéo, inventépar Macromedia; il permet une difiusion

en continu (en anglais streaming) des

films du serveur à I'aide de Macromedia

Flash Player (version 6 ou supérieure).

Le streaming permet de montrer le film

lors de son téléchargement. Flash Player

dispose également d'autres méthodes,permettant de foumir les films au navi-

âftiotSsbt vursion:

Optbne:

lRctionscript 2.0 :J

l- gencr*a dze fepgtJ- Er*æt from irportf- or* iræc ectinrsI- ocUugfig pcrn*tcd

F Conprcss rnovb

cæd l

gJ + lqlo | ::r I

Figure 3. Macromedia Flash - Publish Seffings

sctthEp,.. I

l- Optnnizef or FlashPlaver 6 165

Pæswsd: I

0 l æ

Audo tlcsn: lfil, 16 kbps, iltrp

AJdo gva*: l'1P3, 16 kbps, Î'lono

l- Ovtrlridcsflnd scfiftgt

l- expo* dcrdca sdrxk

LæCdrybd,sciltï:

www.phpsolmag.org PHP Solutions N' 5/2006

Page 4: php et streaming vidéo

gateur, par exemple, le téléchargementprogressif (en anglais progressive) ou

I'enregistrement du fichier vidéo dans le

corps Flash de Movie Clip. Ces méthodes

ont des avantages mais il est recommandé

d'utiliser la difiusion en continu pour les

films longs.

Dans le premier exemple, vous avez

utilisé le programme Riva FLV Encoder pour

efiectuer la conversion de fichiers vidéo : ceprogramme utilise deux programmes Open

Source pour convertir les fichiers : FFMPEG

(http ://ff m peg. so u rcefo rg e. n eUi n de x. p h p)

et I-AME (httpl/lame.sourceforge.nett). Lepremier d'entre eux est un convertisseur

universel pour les fichiers vidéo et audio et

le second n'est destiné qu'aux fichiers audio

et permet de les enregistrer au format MP3

(MP3 est pour I'instant le seul format audio

lu par Flash Player).

FFMPEG - conversionde fichiers vidéoSi vous décidez de compiler vous-mêmes

les sources du programme FFMPEG sur

le serveur, n'oubliez pas I'option -mp3lame.

Elle permet de convertir les pistes audio

des fichiers vidéo au format MP3. Si vous

ne le faites pas, lors de la lecture par Flash

Player, votre vidéo sera dépourvue du son(si, lors de compilation, vous obtenez un

message d'absence de bibliothèques né-

cessaires, nous vous recommandons de

télécharger les sources LAME). Voici un

exemple de commandê confisure :

. / con f igure *

- - o n : h l o - m n f l â m ê e

- -enab le-gPJ- *

- - e - a h l Ê - m e m a I i o n - h a c k

La liste des formats supportés par

FFMPEG, et donc des possibilités de con-

version, est longue. La commande rrmpeq-rormars affiche leur liste : elle présente

les conversions que vous pouvez effectuer

à I'aide du convertisseur installé.

Afin d'effectuer la plus simple con-

version d'un fichier AVI au FLV. utilisez la

commande :

f f m n p n - i f m n \ f ê q f â- - . . . r - r - - . . . r , - - - - . * V I e

tmp\ tes t . f l v

Le programme reconnaîtra les extensionsde fichiers et adaptera les formats deconversion appropriés. ll chargera égale-ment les paramètres par défaut pour cetteopÉration.

PHP Solutions N' 5/2006

Voici un exemple de commande, char-gée de convertir le film du format AVI au

FLV (en déterminant la taille du film et laquali té du son) :

f f m p e g - y - i t m p \ t e s t . a v i

- a r 2 2 0 5 0 - a c o d e c m p 3

- a b 3 2 - f f L v - s 1 6 0 x 1 2 0

t m p \ t e s t . f l v

o ù :

-ar rare - configure la fréquence

d'échanti l lonnage en Hz,

Figure 5. phpinfo) - information sur la version installée de modules M/NG et FFMPEG

www.phpsolmag.org

mrng

frffdfnrf bry Ênf,bl8d

ftrshn û.3b6lsl

ffmpeg

Listing 'l. lnitialisation de Movie Clip

Listing 2. Nous créons /es boufons pour Movie Clip

l ) l t l l , l . r t r t = n e w S W F B u t t o n , , ;

i i l l r t t t r : = lSWFBUTTON UP I SWFBUTTON HIT I SI^ IFBUTTON OVER I SWFBUTTON

iT: r

! ; . r ( : t r ( ) 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 ;

l j b u r l r r f r - a d d A c t j - o n ' a , t t : l i r t n , S W F B U T T O N M O U S E D O W N ) ;

$ b r r t t o n r r : f = $ l f r i S - m o v j - e - a d d , $ b u t t o t r r ;

$ b r r 1 . t - o n r e f - m o v e T o r Ç x , 1 ) y 1 ;

Listing 3. Nous programmons la forme de boutons

funct ion r tç l , t .P, t t f . t r t r t ! )ha l te : r t

9 i m q = n e w S W F B i t m a p , f o p e n v . t t " 1 1 1 a r 1 t : . , J I t i t l

g e 1 = i ) ! 6 1 1 - g e t w i d t h r j ; ;

5 l t = t ) i r n ! - g e t H e i g h t ' r ;

l t t l t i t l , r : = n e w S W F S h a p e l ) ;

5 s h a 1 ; e - , s e t L i . n e i I , 2 5 5 , 2 5 5 , 2 5 5 I ;

5 1 i I 1 = l t : : l t ; t p ç : - a d d F i l - 1 i i ) t r n ' ) , S W F F I L L T I L E D B I T I 4 A P ) ;

â s h a p c - s e t R i g h t F i l ) . r i l t ) I t ;

S s h a ç , e - d r a w l i n e i ï w , 0 : ;

s s h a ; r e - d r a w L i n e L 0 , â l r I , '

$ S h a ç , r - ' - , d r a w L i n e r - 5 w , 0 t ;

S s h t r p e - . , i l s w l i n e t 0 , - l i h t ;

r e t u r n i ; s h a p e ;

Page 5: php et streaming vidéo

-acodec codec - force I'utilisation du

type indiqué de codage pour le che-

min audio,-ab bj.rrate - configure le débit bi-

naire en kbit/s,-s size - configure la taille du cadre

WxH,-r rmr - force le format de codage du

fichier de sortie,-y - êflrêgistre le fichier sans confir-

mation.

Voici la commande qui récupère un cadre

de la troisième seconde du film au format

AVI et l'enregistre sous forme d'image JPG :

f F n n a a - i r m n \ t a c i - 1 y i *

-s 320x240 -v f rames 1 <

- s s 3 - f m j p e g t e s t . i P g

o ù :

-ss t ime of fset conf igure le

offset (décalage par rapport au débutdu film) en secondes,-vframes number - configure le nom-

bre de cadres vidéo à récupérer du

fichier initial et à passer à la conver-

sion.

MING - créer Media PlayerMaintenant vous allez réaliser votre propre

Media Player Flash. La liste des program-

mes gratuits, capables de générer Flash,contient deux positions :

. MTASC - compilateur Open Sourcegratuit pour Action Script (AS est unlangage de programmation utilisé enFlash),

. MING - générateur de fichiers SWF,écrit en C.

Les deux programmes sont dotés de trèsgrandes fonctionnalités. Nous avons déci-dé d'opter pour MING car il est doté de sapropre extension pour PHP. Grâce à ceci,il est possible de générer Movie Clip Flashdu niveau de PHP.

Une fois I'extension MING installée(pour savoir comment le faire, reportez-vous au site Web www.php.neUming),commencez à réaliser le fichier SWF.

Dans un premier temps, créez un Mevie Clip élémentaire, comme le pÉsente

le Listing 1. ll faut y déterminer pour quelle

version de Flash Player vous créerez le clipSWFMovie ($pfayerVersion), quelle est la

ta i l lg de setDimension($width, $height) i

il est en plus possible de définir la couleur de

I'anière-plan setBackground ($r, $g, 9b) et

le nombre de cadres affichés par seconde

setRate ($rramenate). Afin d'enregistrer le

fichier, appelez la méthode save($fireName)

de I'objet smovie, mais avant de le faire,

veillez à ce qu'au moins un cadre généré se

trouve sur la scène ; ce demier point est pr$paré par la méthode nextFrame I I . Le résultatdu code du Listing 1 est un Movie Clip dontles dimensions sont les suivantes: 200pxsur 100px et dont I'anièr+plan est rouge.

Maintenant, organisez les élémentssur la scène de Movie Clip. Organisez

Listing 4. Nous créons l'objet SWFVideoStream supportant le streaming video

$ s t r e a m = n e w S W F V i d e o s t r e a m i ) ;

$ s t r e a m - , s e t D i m e n s i o n r $ w i d t h , t h e i g h t t ;

$ i t e m = $ t h i s - ; , m o v i e - a d d i $ s t r e a m i ;

$ i t e m - m o v e l o , $ x , $ y ' ;

/ / n o n d e 1 ' o b j e t V i d e o S t r e a n s u r - l a s c è n e

$ i tem- se tname "my_p layer_vs t rm" ;

( : n t - i n n c c r i n f = r l

s top O ;

n e t c o n n = n e w N e t C o n n e c t i o n O ;

n e t c o n n . c o n n e c t ( n u l l ) ;

n e L s t r e a m = n e w N e t S t r e a m ( n e t C o n n ) ;

m r r n l a v e r v s f r m - a t t a c h V i d e o ( n e t S t r e a m ) , '

n e t s t i e a m . s e t B u f f e r T i m e ( 1 0 ) ;

n ô t q i r ô â m n l : r r l r - - - ^ 1 ^ . . l r ^ ^ - - + L \ ,\ I C V E I U . V T U E V Y a L t r l t

' , ;' / n e t S t r e a n . p l a y ( _ l e v e I 0 . v i d e o - p a t h ) ;

$ t h i s - , m o v i e - a d d i n e w S W F A c t j - o n i $ a c t j ' o n s c r l p t j I ;

Listing 5. Source du fichier testplayer.html

. h t m l x m l - n s = " h t t p : / / w w w . w 3 . o r g / I 9 9 9 l x h t m l " x m l : l a n g = " s n " l a n g = r r s 1 " '

h e a d

m e t a h t t p - e q u i , v = " C o n t e n t - T y p e " c o n t e n t : " t e x t / h t m l ; c h a r s e t = i s o - 8 8 5 9 - 2 " / . ,

t i t l e r ê s r n l a v e r / t i t I e

. / h e a d .

. l . r n d r r h o e n l n r = " # f f f f f f "v v u r v Y v v + v

< o b j e c t

c f a s s i d = " c l s i d : d 2 7 c d b 6 e - a e 6 d - 1 l c f - 9 6 b B - 4 4 4 5 5 3 5 4 0 0 0 0 "

codebase: "h t tp : / , / fpdowntoad. macromedia . com/pub/

shockwave / cabs / f lash / swf lash . cab#vers ion=8, 0 , 0 , 0 "

w i - d t h = " 5 5 0 "

h e i g h t = " 4 0 0 "i d = l r i - o c i - n l : r r c r l l! v v v r 4 e J v !

^ 1 I ^ - - i l * l l i l ^ l l \d I I 9 r l - l t l r u u f ç /

< . p a r a m n a m e = " a L l o w S c r i p t À c c e s s " v a l u e = " s a m e D o m a i n " / ; '

. t p a r a m n a m e = " m o v i e " v a l u e = " t e s t p l a y e r . s w f " / >

. r p a r a m n 6 , 1 g = " q u a l i t y " v a l u e = " h i g h " / ;

i p a r a m n a m e = " b g c o l o r " v a l u e = " * f . f f f f f " / . '

. .embed

c r e = r r f p s f n I a v e r . s w f "

^ , , - l I f . , - t r h i â h t rv u q r r L y - t t r Y r t

h c c o l o r = " # f f f f f f "v ! v v 4 v -

w i d t h = " 5 5 0 "

h e i g h t = " 4 0 0 "

name=" Les tp layer "

a I i g n = " m i d d I e "

a I lowScr ip tAccess=" sameDomain "

type="app l i ca t ion / x -shockwave- f lash "

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 a . c o m / g o l g e t { i a s h p l a y e r " / : '

. : /ob j ec t : '

. . : /body ,

.. /htnL'

www.phpsolmag.org PHP Solut ions N'5/2006

Page 6: php et streaming vidéo

l 'ensemble en un seul cadre ; le Movie

Clip comprendra en réalité un seul ca-

dre. Media Player, que vous créez, se

compose de trois boutons (Stop, Play,

Pause) et d'une zone où vous afficherez

le f i lm.

Dans un premier temps, créez les

boutons. Du point de vue de I'utilisateur,

le bouton en Flash est une zone ayant

n'importe quelle forme qui réagit au com-

portement de la souris. Du point de vue

du programmeur, le bouton est un objet

qui réagit aux événements appelés par

le curseur de la souris en-dessus d'une

zone définie de la scène. En Flash, il est

possible de programmer les événements

suivants pour les boutons :

. swFBUrroN _ MousEUe - quand vous lâ-

chez le bouton de la souris en-dessus

de la zone définie,. swFBUTroN _ MousEovER - quand vous

placez le curseur sur la zone définie,. swFBUTToN _ MousEour - quand vous

placez le curseur en dehors de la

zone définie.. swFBUTToN _ MousEDowN - quand vous

appuyez sur le bouton de la souris

en-dessus de la zone définie,. swFBUTToN DRAGovER - quand vous

placez le curseur de la souris sur la

zone déflnie tout en appuyant sur son

bouton,. swFBUTToN _ DRAGour - quand vous

placez le curseur de la souris en de-

hors de la zone tout en appuyant sur

son bouton.

Une fois l ' instance du bouton $burron

new svùFButron ( ) créée, i l est possible

de définir une action pour chaque évé-

nement ou combinaison d'événements.

Vous n'utiliserez ici que la réaction

à l'événement appuyer sur le bouton de

/a sourls donc vous créerez un bouton ;vous lui définirez une action lorsque

l'événement swFBUrroN MousEDowN sur-

vient. Cette commande se présente ainsi

en PHP :

9 b u t t o n - > a d d A c t i o n ( $ a c t i o n ,

S W F B U T T O N M O U S E D O W N ) .

où $action est une action à effectuer

après l'événement. Créez I'objet $acrion

de manière suivante :

$ a c t i o n = n e w S V ' l F A c t i o n (

$ a c t i o n s c r i p t )

PHP Solutions N' 5/2006

Figure 6. Formulaire de chargement de fichiers vidéo

où $actionscript est une partie du codequ'il faut écrire vous-mêmes en ActionScript, par exemple :

$ a c t i o n s c r i - p t =

' m y V i d e o P l a y e r . p a u s e ( ) ; ' .

Ce que vous venez d'effectuer signifie quelorsqu'on appuie sur le bouton (vous avezconfiguré les actions pour l'événementswFBUrroN_Mousroowu), la commandemyVideoPlayer . pause ( ) ; Sê Iâ e f feCtUée.

Cette commande effectue la méthode

pause O suf I 'objet myVideoPlayer dont

nous parlerons dans un instant. Dès que

vous aurez défini comment le bouton doit

réagir à l'événement donné, vous devrez

aussi déterminer la forme, la taille, I'aspect

et la position de la zone active. Pour ce

faire, utilisez la méthode :

S b u t t o n - > a d d S h a p e ( S s h a p e , $ f I a g s ) ,

chargée de déterminer que I'objet $shape Sê-

ltt une forme active pour le bouton $burronpour les événements $nass. ll est ainsi pos-

sible de déterminer les formes diverses de

zones pour les événements sélectionnés.

Pour I'instant, déterminez une seule forme

pour tous les événements :

Sf lags = (SWFBUTTON_UP

r SWFBUTTON HIT

I SWFBUTTON OVER

I SV{FBUTTON DOWN);

En ce qui concemê $shape, vous pou-

vez maintenant montrer vos capacités :

il est en effet possible de dessiner parexemple un rectangle rouge pour sym-boliser le bouton de pause. Dans cedeuxième cas, utilisez I'option, permet-tant de créer une forme où une imagebitmap constituera un anière-plan; cettedémarche est analogue à HTML oùvous pouvez créer un tableau avec unarrière-plan qui est un fichier. Afin deréaliser cette opération, il est nécessairede créer dans un premier temps un objetSWFBitmap :

Slmg = new SWFBj - tmaP (

f o p e n ( " i m a g e . d b l " , " r b " ) ) ; .

SWFBirmap o permet de télécharger les

fichiers graphiques au format DBL ou

JPG (le site Web du projet MING propose

un outil de conversion de fichiers GIF ou

PNG en DBL). Une fois l'objet simq initia-

lisé, créez une nouvelle forme $shape

new swFshape O êt pour la remplil configu-

rez I'image graphique :

$ f i l 1 = $ s h a p e - > a d d F i I l (

$ img, SWFFILL_TILED_BITMAP) ;

Ensuite, dessinez un rectangle dont lataille est identique à celle de I'image. Pource faire, tapez la commande :

$ s h a p e - > s e t L i n e ( 1 , 2 5 5 , 2 5 5 , 2 5 5 \ ;

pour déterminer les paramètres de la lignequi servira à tracer le contour de la zone

Video Ga l le ry

C h o o 5 e f r l e t a ' u p l ( ' Ê d :

Nôf l le :

Ptr

Oe t ci lgtron

lrbunr nd<r ô,rccfi bt'æ

Ulfo.d Ffc

www.phpsolmag.org

Page 7: php et streaming vidéo

(épaisseur et composants RGB de la cou-leur) ainsi que :

$ s h a p e - > d r a w l i n e ( $ x , $ y ) ;

qui dessine les lignes depuis le point oùse trouvait le curseur jusqu'au point s",$y.Le Listing 3 présente la fonction, chargéede tracer le contour du bouton où l'imageimage.dbl constitue I'anière-plan.

Une fois ces opérations effec-tuées, vous verrez les boutons sur lascène. Maintenant, concentrez-voussur la lecture du fichier vidéo. Pour cefaire, uti l isez la commande $srream: new SWFVideoSt ream O ; , Chafgée

d'initier I'objet qui supporte le sfrea-ming video. Ensuite, attribuez à I'objetles dimensions appropriées $srream-> s e t D i m e n s i o n ( $ w i d t h , $ h e i g h t ) ; 9 t l a

pOs i t iOn g i tem-)moveTo (gx , $y) ; a inS i

qUe le îOû l $ i tem->setname ( "my_p layer_

vsrrm"); i VouS uti l iserez ce nom lors dela gestion de la lecture du film. Enfin, ilfaut initialiser le processus de téléchar-gement du fichier vidéo sur la scène.Utilisez donc Action Script: placez-ledirectement dans le premier cadre deMovie Clip.

La classe SWFVideoStream, dontI'instance est présentée sur le Listing 4,est chargée de gérer les flux en flash.Afin d'ouvrir un flux, appelez les mé-thodes Action Script appropriées. Dansun premier temps, procédez à la con-nexion :

netConn = new NetConnect ion O;

netConn. connect (nu ]1 ) ;

Ensuite, qêez un flux qui utilisera cetteconnexion :

nets t ream = new NetSt ream(netConn) ;

L'étape suivante consiste à indiquer I'ins-tanCg my_player_vstrm ( SWFVideoStream) ,

supportant le strcaming video pour qu'elleutilise le flux initialisé :

my_player_vstrm. attachVideo (

ne tSt ream) ;

Enfin, configurez la taille de la mémoiretampon pour le flux vidéo, autrement dit,définissez le nombre de secondes dufilm que vous souhaitez télécharger dansla mémoire tampon du serveur avant delire le film. Ensuite, vous pouvez indiquer

Listing 6. Conversion de fichiers vidéo du niveau PHP

' . j php

d e f i n e ( ' F F M P E G _ F R A M E _ S I Z E _ P A R A M ' , ' - s 1 6 0 x I 2 0 " ; / / p d r a n e t r - s

d e f i n e ( ' F F M P E G _ A U D I O _ R A T E _ P A R A M ' , ' - a r 2 2 0 5 0 ' \ ; / / - a r r a t e - s e t a u d i o s a n p T i n g

r a t e ( i n H z )

d e f i n e { ' M O V I E S O U N D ' , ' 1 6 0 x 1 2 0 ' ) , '

c lass V ideoF i Ie ,

p r i v a t e $ d b h ;

p r i v a t e $ o s h ;

pub l ic func t ion _cons t ruc t (DatabaseHand ler $dbh) |

$ t h i s - , o s h = P l a t f o r m F a c t o r y : : g e t P l a t f o r m l n s t a n c e O ;

$rh is ->dbh = $dbh;

p u b 1 J . c f u n c t i o n u p I o a d F i I e ( $ f i 1 e s - n a m e , $ f i 1 e s - t m p _ n a m e , $ s j . z e , $ n a m e , $ d e s c r

$ targe t pa th = MY MEDIA DATA DIR basename($ f i ]es name) ;

/ / s i le ) i ch ie r " t t

te lZcnurgé, "op i " r - le

dans 1e réper to i re des méd ias

if ( move_uploaded_fi le I $f i les_tmp_name, $target_path) ) i

/ / e c h o " L e f i c h i e r " , b a s e n a n e ( $ _ F I L E S [ ' u p l o a d e d f i l e ' ] [ ' n a n e ' ] ) .

/ / " a é té cor rec tenent téLécharsé \n (br>" ;

: e lse

throw new Except ion( "Une er reur es t survenue fo rs du té Iéchargement du

f i c h i e r . " ; ;

/ /$nsg,= "Une er reur es t survenue - lo rs du té léchargenent du f i ch ie r . " ;

/ / re tu rn ;

$ th i s - ; ,dbh- : .addResource ( $name, $desc , $ s i ze I ;

$ th i s - ; , çqnyer tMov ieToFlv ( basename t $ f i les_name i t , .

$ th is ->conver tMov ieTo lmges (basenane ( $ f i les_namet ) ;

p r iva te func t ion conver tMov ieToFlv ($ fnamel I

$ f l v N a m e = $ t h i s - ; e 5 [ - ' ' g e t F i I e B a s e N a m e 1 $ f n a m e ) . ' . f l v ' ;

$ c o m m a n d = ' f f m p e g - i " ' . M y M E D I A D A T A p 1 p . $ f n a m e , " " .' - a r 2 2 0 5 0 - a c o d e c m p 3 - a b 3 2 - f f l v - s 1 6 0 x 1 2 0 ' .

' " ' . M y M E D I A D A T A D I R . $ f l v N a m e , ' " ' ;

i f ( $ t h i s - : ' o s h - > e x e c ( $ c o m m a n d i = = 9 1 r

$this_)dbh_.,addMovie 1 $f lvName 1 ;rg tu rn t rue ;

e lse re tu rn fa lse ;

private function convertMovieTolmges ($fnamel {

i f 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 ) ; -

$mov = new ffmpeg_movie (MY_MEDIA_DATA_DIR. $fnamel ;

$ d u r a t i o n = f l o a t v a l { $ m o v - : g e t D u r a t i o n O ) ;

$ s t e p 1 = $ d u r a t i o n / 3 ;

$ s t e P 2 = $ s t e p 1 * 2 ;

$ temp = ar ray (0 , $s tep l , Ss tep2) ;fo reach 1$ temp as $k=; 'gy1 i

$ imgName = $ th is - .>osh->getF i leBaseName 1$fname; . "0$k . jpg" ;

$ 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- v f r a m e s 1 - f m j p e g - s s ' . $ v . ' " ' . M y M E D I A D A T A D I R , g i m g N a m e . " ' , ;

i f 1 $ t h i s - > o s h - > e x s c 1 $ c o m m a n d l = = 6 1 {

$ th is ->655->add lmage l $ imgName ) ;

e lse I

$ c o m m a n d = r f f m p e g - i ' . M y M E D r A D A T A D I R . $ f n a m e . ' - s 1 5 0 x 1 2 0 - v f r a m e s I- f m jpeg ' .MY_MEDTA_DATA_DIR. $ th is - - .osh->getF i leBaseName ($ fnamet . '00 . jp

g ' ;

,

9 th is ->6s l - ;exec t$commandl ;

www.phpsolmag.org PHP Solutions N'5/2006