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
| package {
import flash.display.*;
import flash.events.*;
import flash.net.*;
import flash.media.*;
import flash.geom.Rectangle;
import flash.net.URLRequest;
public class LecteurVideo extends Sprite {
// Le flux vidéo est commun à toutes les classes de l'application
// pour pouvoir être supprimé à tout moment
public static var unFlux:NetStream;
private var controleur:ControleurClp;
private var initX:Number;
private var initY:Number;
private var volumeSon:Number;
private var changeVolume:SoundTransform;
private var seConnecter:NetConnection ;
private var url:String;
// La classe LecteurVideo reprend les fonctionnalités du lecteur vidéo
// décrit au cours du chapitre 10, section Un lecteur de vidéo
public function LecteurVideo( nom:String) {
if (controleur != null) removeChild(controleur);
controleur = new ControleurClp();
url = nom;
// Créer un objet Video
seConnecter = new NetConnection();
seConnecter.addEventListener(NetStatusEvent.NET_STATUS, quelleConnection);
// Création d'une connection locale streamée
seConnecter.connect(null);
}
public function remiseAZero():void {
// Le controleur est initialisé :
// - Le bouton Lecture est affiché,
// - Les boutons Pause et Stop sont effacés
// - La barre de progression est remise à 0
// - Le son est arrêté
unFlux.pause();
unFlux.seek(0);
controleur.lire.visible = true;
controleur.faireUnePause.visible = false;
controleur.curseur.gotoAndStop("normal");
controleur.stopper.visible=false;
if ( controleur.bulleProgress != null) {
controleur.bulleProgress.removeEventListener(Event.ENTER_FRAME, barreProgresse);
}
controleur.bulleProgress.scaleX=0.001;
}
private function siErreur(e:AsyncErrorEvent):void {
//trace(e);
}
private function quelleConnection(event:NetStatusEvent):void {
switch (event.info.code) {
case "NetConnection.Connect.Success" :
creerUnFlux();
break;
case "NetStream.Play.StreamNotFound" :
trace(" Fichier vidéo non trouvé : " + url);
break;
}
}
private function creerUnFlux():void {
unFlux = new NetStream(seConnecter);
unFlux.addEventListener(AsyncErrorEvent.ASYNC_ERROR, siErreur);
unFlux.play(url);
unFlux.pause();
unFlux.addEventListener(NetStatusEvent.NET_STATUS, quelStatus);
afficherControleur();
}
private function afficherControleur() {
// Initialisation du controleur
addChild(controleur);
var ecran:Video = new Video();
ecran.attachNetStream(unFlux);
controleur.addChild(ecran);
ecran.x = -controleur.width/3 + 10;
ecran.y = -controleur.height/3 + 10;
remiseAZero();
// Le bouton Lecture
controleur.lire.addEventListener(MouseEvent.CLICK, pourLire);
// Le bouton Pause
controleur.faireUnePause.addEventListener(MouseEvent.MOUSE_UP, pourFaireUnePause);
// Le bouton Stopper
controleur.stopper.addEventListener(MouseEvent.MOUSE_UP, pourStopper);
gererLeSon();
}
private function gererLeSon() {
// Gestion du volume sonore
initX = controleur.niveau.x;
initY = controleur.niveau.y;
changeVolume = new SoundTransform(1, 0);
volumeSon = changeVolume.volume;
var longueur:Number = controleur.niveau.width;
// Positionner le curseur du volume en fonction du volume sonore du mp3
controleur.curseur.x = initX + longueur *volumeSon - controleur.curseur.width;
controleur.curseur.y = initY ;
controleur.curseur.buttonMode = true;
//controleur.curseur.addEventListener(MouseEvent.MOUSE_UP, auRelachement);
addEventListener(MouseEvent.MOUSE_UP, auRelachement);
// Modifier l'apparence du curseur du volume en fonction de la position du curseur
controleur.curseur.addEventListener(MouseEvent.MOUSE_OVER, auSurvol);
controleur.curseur.addEventListener(MouseEvent.MOUSE_OUT, alExterieur);
controleur.curseur.addEventListener(MouseEvent.MOUSE_DOWN, auPress);
}
private function quelStatus(e:NetStatusEvent):void {
switch (e.info.code) {
case "NetStream.Play.Stop" :
remiseAZero();
break;
}
}
private function barreProgresse(e:Event):void {
var tempsTotal:Number= 610;
controleur.bulleProgress.scaleX = unFlux.time / tempsTotal ;
}
private function pourLire(e:MouseEvent):void {
controleur.stopper.visible = true;
controleur.faireUnePause.visible = true;
controleur.lire.visible = false;
unFlux.resume();
controleur.bulleProgress.addEventListener(Event.ENTER_FRAME, barreProgresse);
}
private function pourFaireUnePause(e:MouseEvent):void {
unFlux.pause();
controleur.lire.visible = true;
controleur.faireUnePause.visible = false;
controleur.stopper.visible = true;
}
private function pourStopper(e:MouseEvent):void {
remiseAZero();
}
private function auSurvol(e:MouseEvent):void {
controleur.curseur.gotoAndStop("survol");
}
private function alExterieur(e:MouseEvent):void {
controleur.curseur.gotoAndStop("normal");
controleur.curseur.stopDrag();
removeEventListener(MouseEvent.MOUSE_MOVE, auDeplacement);
}
private function auPress(e:MouseEvent):void {
var longueur:Number = controleur.niveau.width;
var zoneDeplacement:Rectangle = new Rectangle(initX,initY,longueur - controleur.curseur.width, 0);
controleur.curseur.startDrag(false, zoneDeplacement);
controleur.curseur.gotoAndStop("clique");
controleur.curseur.addEventListener(MouseEvent.MOUSE_MOVE, auDeplacement);
}
private function auDeplacement(e:MouseEvent):void {
var longueur:Number = controleur.niveau.width;
volumeSon = (controleur.curseur.x -initX)/longueur;
changeVolume.volume = volumeSon;
unFlux.soundTransform = changeVolume;
}
// Arrêter le déplacement du curseur du volume
private function auRelachement(e:MouseEvent):void {
controleur.curseur.gotoAndStop("normal");
controleur.curseur.stopDrag();
controleur.curseur.removeEventListener(MouseEvent.MOUSE_MOVE, auDeplacement );
}
}
} |
Partager