Logiciel utilisé: flash 8 AS.20
Format video: flv
Bonjour tous le monde ca fait 1 semaines que je me tire les cheveux pour résoudre un problème avec le composant vidéo, vous s'avez quand on clique sur l'onglet du panneau bibliothèque on peut choisir vidéo. Et bien j'ai créé 3 vidéos ou plutôt récepteurs vidéos que j'ai nommé "container", "containerM1", "containerM2".
J'ai créé du code AS.20 pour l'importation et la gestion de la vidéo "container" . Jusque la je n'ai eu aucun problème tous fonctionne à merveille. Par contre les deux autres vidéos "containerM1" et "containerM2" je me contente juste d'importer les vidéos et de les jouer donc pas de boutons pour ces deux la. Le problème est que je n'arrive pas à couper le son de mes deux vidéos "containerM1", "containerM2" car ces deux vidéos sont la en tan que vinettes vidéos qui plupart auront un comportement de boutons pour lancer une vidéo dans "container".
Pourtant j'ai créé 3 objet Sound différent pour chaque vidéo et quand je modifie en direct le Sound des deux vignettes via un setVolume(0); rien à faire le son des 3 vidéo se joue en même temps alors imaginez le bazar sonore que ca engendre. Voici mon code AS.20 :
J’imagine bien que mon code n’est pas parfait mais il fonctionne très bien et il est assez long donc toutes suggestions a l’amélioré et pour l’optimisé seront les bienvenues.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334 ///////////////////////////////LANCEMENT DU SCRIPT PHP POUR LA CREATION DU XML//////////////////////////////// /*le code placer entre ces deux balise( /* )sont de simple commentaire non pris en conte */ //----------------------------------------------------------------------------------// //initialisation du root sur cette animation. Tous les _root enoncer dans cette animation //ce refereront sur sont propre root en cas de chargement de cette animation dans un autre swf. this._lockroot = true; //----------------------------------------------------------------------------------// //on exécute le fichier php qui crée l'arborescence du dossier mp3 en fichier xml var loadPhP = new LoadVars(); //loadPhP.load("php/xml.php?antiCache="+Math.random()); loadPhP.load("php/xml_video.php"); ///////////////////////////FIN LANCEMENT DU SCRIPT PHP POUR LA CREATION DU XML///////////////////////////// // //////////////////////////////////////INITIALISATION DES VARIABLES///////////////////////////////////////// //liste_video sera le lien racine du fichier xml a lire var liste_video:String = "xml/liste_video_1.xml"; //on creer un tableau pour la recuperation des url des videos a charger var url_array:Array = new Array(); //ici on initialise une variable i pour la gestion de la lecture des videos var i:Number = 0; /////////////////////////////FIN INITIALISATION DES VARIABLES//////////////////////////////////////////// // ///////////////////////RECUPERATION DU FICHIER XML/////////////////////////////////////// //on crée un nouvel objet XML var chargeXML:XML = new XML(); //on charge le fichier xml dans notre objet grace a notre tableau url_array chargeXML.load(liste_video); //on ignore les eventuels espaces blanc entre les lignes du fichier xml chargeXML.ignoreWhite = true; //on verifie le chargement du xml chargeXML.onLoad = function(reussi:Boolean) { //si le chargement et ok alors on execute le code ci-dessous if (reussi) { var videoTotal:Number = chargeXML.firstChild.childNodes.length; //ici on suprime le bug pour le videoTotal inaxessible depuis nos boutons next et precedent _root.videoTotal = videoTotal; trace("le nombre de video est de = "+videoTotal); for (numVideo=0; numVideo<=videoTotal-1; numVideo++) { var urlVideo:String = chargeXML.firstChild.childNodes[numVideo].attributes.fichier; url_array.push(urlVideo); trace("l'url de la video "+[numVideo+1]+" = "+url_array[numVideo]); } //apres avoir lancer le code ci-dessus en cas de reussite du chargement xml on lance la lecture du fichier video chargeVideo(i); chargeVideoM1(i); chargeVideoM2([2]); } else { trace("erreur de chargement XML"); } }; //////////////////////////////FIN RECUPERATION DU FICHIER XML////////////////////////////////////////// // ////////////////////////////VIDEO TRAITEMENT////////////////////////////////////////// /*La classe NetConnection permet de lire des fichiers FLV en flux continu à partir d'un lecteur local ou d'une adresse HTTP. */ var connexionVideo:NetConnection = new NetConnection(); /*Ouvre une connexion locale permettant de lire les fichiers vidéo (FLV) à partir d'une adresse HTTP ou du système local de fichiers.*/ connexionVideo.connect(null); /*La classe NetStream fournit des méthodes et des propriétés permettant de lire des fichiers Flash Video (FLV) à partir du système de fichiers local ou d'une adresse HTTP*/ var controlVideo:NetStream = new NetStream(connexionVideo); /*Spécifie un flux vidéo (source) à afficher dans notre recepteur vidéo "ecran" figurant sur la Scène*/ ecran.attachVideo(controlVideo); // Définir la durée du tampon : controlVideo.setBufferTime(5); ////////////////////////barre de progression du stream//////////////////////////////////////////// _root.barre_mc._xscale = 0; function flvProgress():Void { var loaded_interval:Number = setInterval(checkBytesLoaded, 500, controlVideo); } function checkBytesLoaded(my_ns:NetStream) { var pctLoaded:Number = Math.round(my_ns.bytesLoaded/my_ns.bytesTotal*100); infosStream_mc.loaded_txt.text = Math.round(my_ns.bytesLoaded/1000)+" of "+Math.round(my_ns.bytesTotal/1000)+" KB loaded ("+pctLoaded+"%)"; barre_mc._xscale = pctLoaded; if (pctLoaded>=100) { clearInterval(loaded_interval); } } /////////////LES METADONNEES////////////////////////////////////////////////////////////////// /////AFFICHAGE DU TEMP DE LA VIDEO EN COUR//////////////////////////////////////////////////// controlVideo.onMetaData = function(myMeta) { for (var i in myMeta) { //trace(i+":\t"+myMeta[i]); var duree:Number = myMeta.duration; //videoDuree_txt.text = "Durrée : "+duree+" secondes"; var minutes = Math.floor(duree/60); /*ici Renvoie la valeur minimale du temp ecoule avec un modulo de 60 pour obetenir des minutes*/ /*Le modulo de x et y (x % y) est le reste de la division de x par y*/ var secondes = Math.floor((duree)%60); /*on met en forme l'affichage sur 2 chifres si minute ou secondes sont inferieur ou egale a 9 alors on place un zero devant.*/ //minutes = minutes<=9 ? "0"+minutes : minutes; //secondes = secondes<=9 ? "0"+secondes : secondes; if (minutes<=9) { minutes = "0"+minutes; } if (secondes<=9) { secondes = "0"+secondes; } /*on assigne le champ de texte dynamique au valeur de minutes et de secondes*/ infosStream_mc.videoDuree_txt.text = "Durée : "+minutes+":"+secondes; } }; //////////////////////////////////////////////////////////////////////////////////////////////// // /////////////////LECTURE VIDEO/////////////////////////////////////////////////////////////////////// function chargeVideo(i):Void { var videoUrl:String = url_array[i]; trace("url de la video par defaut = "+url_array[i]); /*on demande de lire le fichier video1.flv du dossier video grace a la méthode play.*/ ///////////////////////lecture auto//////////////////////////////////////////////////////////////////////// controlVideo.play(videoUrl); flvProgress(); } //////////////////////////FIN TRAITEMENT VIDEO////////////////////////////////////// // ////////////////////////////////////FONCTIONS DES BOUTONS////////////////////////////////////////// // //--------------------------------BOUTON LECTURE------------------------------------------------- boutonLecture_btn.onRollOver = function() { infos_txt.htmlText = "<b>Vidéo lecture</b>"; }; boutonLecture_btn.onRollOut = function() { infos_txt.htmlText = ""; }; boutonLecture_btn.onPress = function() { /*on demande de lire le fichier video1.flv du dossier video grace a la méthode play.*/ chargeVideo(i); }; //----------------------------------BOUTON ARRET------------------------------------------------------------ boutonArret_btn.onRollOver = function() { infos_txt.htmlText = "<b>Vidéo stop</b>"; }; boutonArret_btn.onRollOut = function() { infos_txt.htmlText = ""; }; boutonArret_btn.onPress = function() { /*On utilise un paramètre vide pour la méthode play de façon a arrêter le lecture sans perdre le flux vidéo déjà charger que l'on aurai perdu si l'on avait utilise un stop au lieu de play*/ controlVideo.play(""); }; //-------------------------------------------BOUTON REMBOBINAGE------------------------------------------------ boutonRembobinage_btn.onRollOver = function() { infos_txt.htmlText = "<b>Vidéo retour arrière</b>"; }; boutonRembobinage_btn.onRollOut = function() { infos_txt.htmlText = ""; }; boutonRembobinage_btn.onPress = function() { //on demande au flux vidéo de retourné a son début donc parametre de la méthode seek a 0 controlVideo.seek(controlVideo.time-5); }; //-----------------------------------------BOUTON AVANCE RAPIDE------------------------------------------- boutonAvanceRapide_btn.onRollOver = function() { infos_txt.htmlText = "<b>Vidéo avance rapide</b>"; }; boutonAvanceRapide_btn.onRollOut = function() { infos_txt.htmlText = ""; }; boutonAvanceRapide_btn.onPress = function() { //on demande au flux vidéo de retourné a son début donc parametre de la méthode seek a 0 controlVideo.seek(controlVideo.time+5); }; //-------------------------------------------BOUTON VIDEO SUIVANTE--------------------------------------------- boutonNext_btn.onRollOver = function() { infos_txt.htmlText = "<b>Vidéo suivante</b>"; }; boutonNext_btn.onRollOut = function() { infos_txt.htmlText = ""; }; boutonNext_btn.onPress = nextBouton; function nextBouton() { infos_txt.htmlText = ""; if (i>=videoTotal-1) { i = videoTotal-1; chargeVideo(i); infos_txt.htmlText = "<b>plus de vidéos</b>"; } else { i++; chargeVideo(i); } } //-----------------------------------------------BOUTON PRECEDENT---------------------------------------- boutonPrecedent_btn.onRollOver = function() { infos_txt.htmlText = "<b>Vidéo précédente</b>"; }; boutonPrecedent_btn.onRollOut = function() { infos_txt.htmlText = ""; }; boutonPrecedent_btn.onPress = function() { if (i>0) { i--; chargeVideo(i); } else { i = 0; chargeVideo(i); } }; //-----------------------------------------BOUTON PAUSE--------------------------------------------------- boutonPause_btn.onRollOver = function() { infos_txt.htmlText = "<b>Pause</b>"; }; boutonPause_btn.onRollOut = function() { infos_txt.htmlText = ""; }; boutonPause_btn.onPress = function() { //on invoque la méthode pause controlVideo.pause(); }; /////////////////////////////////////FIN FONCTIONS DES BOUTONS//////////////////////////////////////////////// // ///////////////////////////GESTION DU TEMP DE LA VIDEO EN LECTURE///////////////////////////////////////////// function afficherTemps():Void { /*on met dans une variable le temp ecoule depuis le lancement de sa lecture*/ var tempsEcoule:Number = controlVideo.time; /*ici Renvoie la valeur minimale du temp ecoule divisé par 60 pour obetenir des minutes*/ var minutes = Math.floor(tempsEcoule/60); /*ici Renvoie la valeur minimale du temp ecoule avec un modulo de 60 pour obetenir des minutes*/ /*Le modulo de x et y (x % y) est le reste de la division de x par y*/ var secondes = Math.floor((tempsEcoule)%60); /*on met en forme l'affichage sur 2 chifres si minute ou secondes sont inferieur ou egale a 9 alors on place un zero devant.*/ //minutes = minutes<=9 ? "0"+minutes : minutes; //secondes = secondes<=9 ? "0"+secondes : secondes; if (minutes<=9) { minutes = "0"+minutes; } if (secondes<=9) { secondes = "0"+secondes; } /*on assigne le champ de texte dynamique au valeur de minutes et de secondes*/ infosStream_mc.affichageTemps.text = "Position :"+minutes+":"+secondes; infosStream_mc.totalVideo_txt.text = i+1+" / "+videoTotal; } /*on actualise l'affichage du temp toutes les 100 milli-seconde grace a setInterval Appelle une fonction ou une méthode d'un objet à des intervalles périodiques pendant la lecture d'un fichier SWF. Vous pouvez utiliser setInterval() pour exécuter une fonction de manière répétitive dans le temps. */ var lancerAffichageTemps:Number = setInterval(afficherTemps, 100); ////////////////////////FIN GESTION DU TEMP DE LA VIDEO EN LECTURE////////////////////////////////////////////// // //////////////////////////////////////////LECTURE CONTINUE/////////////////////////////////////////////////// //Définissons une fonction onStatus() pour suivre les différents états controlVideo.onStatus = function(infoObject) { //on surveille la fin de la video de façon à lancer la video suivante. if (infoObject.code == "NetStream.Buffer.Empty") { //ici on fait appel a la video suivante des la fin d'une video ce presente nextBouton(); } }; //////////////////////////////////////FIN LECTURE CONTINUE/////////////////////////////////////////////////// // //////////////////////////////////////commande du volume sonore de la video///////////////////////////// var DmcSound = new Sound("_root.volume_commande_mc"); _root.volume_commande_mc.attachAudio(controlVideo); DmcSound.setVolume(0); /*-----------------------------------------------------------------*/ function SetVolume(volumeVideo) { var echelleVolume = Math.round(volumeVideo); _root.DmcSound.setVolume(echelleVolume); trace(echelleVolume); infos_txt.htmlText = "<b>"+echelleVolume+" %</b>"; } ///////////////////////////GESTION DES MINIATURES VIDEO///////////////////////////////// ////////////////////////////VIDEO TRAITEMENT M1////////////////////////////////////////// /*La classe NetConnection permet de lire des fichiers FLV en flux continu à partir d'un lecteur local ou d'une adresse HTTP. */ var connexionVideoM1:NetConnection = new NetConnection(); /*Ouvre une connexion locale permettant de lire les fichiers vidéo (FLV) à partir d'une adresse HTTP ou du système local de fichiers.*/ connexionVideoM1.connect(null); /*La classe NetStream fournit des méthodes et des propriétés permettant de lire des fichiers Flash Video (FLV) à partir du système de fichiers local ou d'une adresse HTTP*/ var controlVideoM1:NetStream = new NetStream(connexionVideoM1); /*Spécifie un flux vidéo (source) à afficher dans notre recepteur vidéo "containerM1" figurant sur la Scène*/ containerM1.attachVideo(controlVideoM1); // Définir la durée du tampon : controlVideoM1.setBufferTime(5); ////////////////////////////VIDEO TRAITEMENT M2////////////////////////////////////////// /*La classe NetConnection permet de lire des fichiers FLV en flux continu à partir d'un lecteur local ou d'une adresse HTTP. */ var connexionVideoM2:NetConnection = new NetConnection(); /*Ouvre une connexion locale permettant de lire les fichiers vidéo (FLV) à partir d'une adresse HTTP ou du système local de fichiers.*/ connexionVideoM2.connect(null); /*La classe NetStream fournit des méthodes et des propriétés permettant de lire des fichiers Flash Video (FLV) à partir du système de fichiers local ou d'une adresse HTTP*/ var controlVideoM2:NetStream = new NetStream(connexionVideoM2); /*Spécifie un flux vidéo (source) à afficher dans notre recepteur vidéo "containerM2" figurant sur la Scène*/ containerM2.attachVideo(controlVideoM2); // Définir la durée du tampon : controlVideoM2.setBufferTime(5); /////////////////LECTURE VIDEO M1/////////////////////////////////////////////////////////////////////// function chargeVideoM1(i):Void { var videoUrlM1:String = url_array[i]; trace("url de la video par defaut = "+url_array[i]); /*on demande de lire le fichier video1.flv du dossier video grace a la méthode play.*/ ///////////////////////lecture auto//////////////////////////////////////////////////////////////////////// controlVideoM1.play(videoUrlM1); } /////////////////LECTURE VIDEO M2/////////////////////////////////////////////////////////////////////// function chargeVideoM2(i):Void { var videoUrlM2:String = url_array[i]; trace("url de la video par defaut = "+url_array[i]); /*on demande de lire le fichier video1.flv du dossier video grace a la méthode play.*/ ///////////////////////lecture auto//////////////////////////////////////////////////////////////////////// controlVideoM2.play(videoUrlM2); } //////////////////////////FIN TRAITEMENT VIDEO////////////////////////////////////// // //////////////////////////////////////commande du volume sonore de la videoM1///////////////////////////// var DmcSoundM1 = new Sound(controlVideoM1); //_root.volume_commandeM1_mc.attachAudio(controlVideoM1); DmcSoundM1.setVolume(0); //////////action du bouton_mc utilisé pour un effet alpha sur la video vignettes///////////////////////// this.containerM1_btn._alpha = 80; this.containerM1_btn.onRollOver = function():Void { this._alpha = 100; }; this.containerM1_btn.onRollOut = function():Void { this._alpha = 80; }; //////////////////////////////////////commande du volume sonore de la video M2///////////////////////////// var DmcSoundM2 = new Sound(controlVideoM2); //_root.volume_commandeM2_mc.attachAudio(controlVideoM2); DmcSoundM2.setVolume(0); //////////action du bouton_mc utilisé pour un effet alpha sur la video vignettes///////////////////////// this.containerM2_btn._alpha = 50; this.containerM2_btn.onRollOver = function():Void { this._alpha = 100; }; this.containerM2_btn.onRollOut = function():Void { this._alpha = 80; };
Étant donne la longueur du code je pense que je ne risque pas d’avoir de réponse rapide alors je suis prêt a attendre le temps qu’il faudra. Je vous mets les sources ici et le visuel ici Merci de votre aide bonne soirée a tous le monde bye.
Partager