[FLASH 8] Gestion du son des flv ?
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 :
Code:
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;
}; |
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.
É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.