p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 223
    Points : 1 313
    Points
    1 313

    Par défaut Image par image sur vidéo

    Hello, de retour pour quelques jours...

    J'ai cherché à contrôler la lecture d'une video...

    ci-joint :

    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
     
    Unit UVideoButton;
    interface
     
    uses Flash8;
     
    type
      TButton=class(movieClip)
       Private
        w,h,fonction:number;
        procedure skin;
        procedure skin1playpause;
        procedure skin2stop;
        procedure skin3back;
        procedure skin4up;
       Public
        skin1,Skin2:movieclip;
        procedure onPress;override;
        procedure onClick;virtual;
        Constructor Create(parent:movieclip;nbskin,left,top,width,height:number);
      end;
     
    implementation
     
    Constructor TButton.Create(parent:movieclip;nbskin,left,top,width,height:number);
    begin
      inherited Create(parent,'button', movieclip(parent).getNextHighestDepth());
      w:=width;
      h:=height;
      fonction:=nbskin;
      linestyle(3,$e0e0e0);
      BeginFill($c0c0c0);
      moveto(0,h);
      lineto(0,0);
      lineto(w,0);
      linestyle(3,$808080);
      lineto(w,h);
      lineto(0,h);
      skin;
      _x:=left;
      _y:=top;
    end;
     
    Procedure TButton. skin1playpause;
    begin
      skin1:=movieclip.Create(self,'skin1',1);
      skin2:=movieclip.Create(self,'skin2',2);
      With skin1 do
      begin
       BeginFill(clBlack);
       linestyle(2,clBlack);
       moveto(w/4,h/4);
       lineto(3*w/4,h/2);
       lineto(w/4,3*h/4);
      end;
      With skin2 do
      begin
       linestyle(6,clBlack);
       moveto(7*w/20,h/4);
       lineto(7*w/20,3*h/4);
       moveto(13*w/20,h/4);
       lineto(13*w/20,3*h/4);
       _visible:=false;
      end;
    end;
     
    Procedure TButton. skin2stop;
    begin
      BeginFill(clBlack);
      linestyle(2,clBlack);
      moveto(w/4,h/4);
      lineto(3*w/4,h/4);
      lineto(3*w/4,3*h/4);
      lineto(w/4,3*h/4);
      lineto(w/4,h/4);
    end;
     
    procedure TButton.skin3back;
    begin
      linestyle(4,clBlack);
      moveto(3*w/4,h/4);
      Lineto(w/4,h/2);
      moveto(w/4,h/2);
      Lineto(3*w/4,3*h/4);
    end;
     
    procedure TButton.skin4up;
    begin
     linestyle(4,clBlack);
     moveto(w/4,h/4);
     Lineto(3*w/4,h/2);
     moveto(3*w/4,h/2);
     Lineto(w/4,3*h/4);
    end;
     
    procedure TButton.skin;
    begin
     case fonction of
      1:skin1playpause;
      2:skin2stop;
      3:skin3back;
      4:skin4up;
     end;
    end;
     
    procedure TButton.onClick;
    begin
    end;
     
    procedure TButton.onPress;
    begin
     onClick;
    end;
     
    end.

    Le programme :

    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
     
    program PVideo;
     
    uses
      Flash8,UVideoButton;
     
    {$FRAME_WIDTH 640}
    {$FRAME_HEIGHT 380}
    {$BACKGROUND $9999ff}
    {$FRAME_RATE 32}
     
    // Flash 8 ne permet pas d'instancier l'objet Video par programme
    // la directive de compilation $VIDEO permet contourner ce problème
    // l'objet est créé statiquement avant le lancement du programme
    // il ne reste plus qu'à déclarer une variable "external" pour l'utiliser.
    {$VIDEO name="my_video" depth="1" left="0" top="0" width="320" height="240"}
     
    (* syntaxe plus compacte équivalement
      {$VIDEO my_video 1 0 20 180 180}
    *)
     
    type
     
      MyNetStream = class(NetStream)
        procedure onStatus(infoObject: TInfoObject); override;
      end;
     
      MyScreen=class
       btplay,btstop,btback,btNext:TButton;
       constructor Create;
       procedure onPlay(sender:TObject);
       procedure onStop(sender:TObject);
       procedure onBackframe(sender:TObject);
       procedure onNextFrame(sender:TObject);
      end;
     
     
    var
      nc: NetConnection;
      ns: MyNetStream;
      vo: Video external 'my_video';
     
    Constructor MyScreen.Create;
    begin
     btplay:=TButton.Create(_Root,1,10,10,50,50);
     btstop:=TButton.Create(_Root,2,10,70,50,50);
     btback:=TButton.Create(_Root,3,10,130,50,50);
     btNext:=TButton.Create(_Root,4,10,190,50,50);
     
     nc := NetConnection.Create;
     nc.connect(nil);
     ns := MyNetStream.Create(nc);
     vo.attachVideo(ns);
     vo._height:=stage.height;
     
     with vo do
     begin
      _width:=320*_height/240;
      _x:=(stage.width-_width)/2;
      smoothing:=true;
     end;
     
     ns.play('Execute.re.flv');
     ns.pause;
     
     btplay.onClick:=onPlay;
     btStop.onClick:=onStop;
     btBack.onClick:=onBackframe;
     btNext.onClick:=onNextframe;
    end;
     
    procedure MyScreen.onPlay(sender:TObject);
    begin
     with btplay.skin1 do _visible:=not _visible;
     with btplay.skin2 do _visible:=not _visible;
     ns.pause;
    end;
     
    procedure MyScreen.onStop(sender:TObject);
    begin
     btplay.skin1._visible:=true;
     btplay.skin2._visible:=false;
     ns.play('Execute.re.flv');
     ns.pause;
    end;
     
    procedure MyScreen.onBackframe(sender:TObject);
    begin
      with ns do seek(time-1/currentFps);  //ici à la frame précédente
    end;
     
    procedure MyScreen.onNextFrame(sender:TObject);
    begin
      with ns do seek(time+1/currentFps);// Je devrais passer à chaque fois à la frame suivante !   Time+1/10
    end;
     
    procedure MyNetStream.onStatus(infoObject: TInfoObject);
    begin
      if infoObject.code = 'NetStream.Buffer.Empty' then ns.play('Excute.re.flv') ;
    end;
     
     
    begin
     MyScreen.Create;
    end.
    En fait, j'aimerais pouvoir contrôler l'image par image avec les deux derniers boutons et je ne vois pas comment faire...

    merci

    anthony

  2. #2
    Expert Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 083
    Points : 17 857
    Points
    17 857

    Par défaut

    Hello,

    belle démo, je pense que tu as fais tout ce qu'il fallait...mais ça ne fonctionne pas...même si je fais un seek(0.1) il part à 16.015 secondes. En fait seul le seek(0) fonctionne.

    j'ai vu d'autres personnes ayant un problème de seek sur un FLV local mais aucune réponse :S
    http://www.kirupa.com/forum/showthre...g-FLVs-locally
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  3. #3
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 223
    Points : 1 313
    Points
    1 313

    Par défaut

    Hello,

    merci pour ton lien...en effet, il y a un problème avec seek()...
    C'est faisable pourtant...
    ci-joint un exemple en pièce jointe...

    a+
    Fichiers attachés Fichiers attachés

  4. #4
    Expert Confirmé Sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    novembre 2002
    Messages
    6 083
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 083
    Points : 17 857
    Points
    17 857

    Par défaut

    oui, par contre c'est un principe différent qui est utilisé.

    la vidéo est intégrée au SWF et attachée à un Sprite comprenant 15 frames, le bouton "Suivant" fait simplement un Sprite.gotoAndPlay((Sprite._currentFrame + 1) mod 15).

    Je ne sais pas s'il est possible de reproduire cela avec une vidéo externe...ni même comment on reproduit ça dans Flash
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

  5. #5
    Membre Expert
    Avatar de Archimède
    Homme Profil pro
    Enseignant
    Inscrit en
    avril 2005
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 223
    Points : 1 313
    Points
    1 313

    Par défaut

    Citation Envoyé par Paul TOTH Voir le message
    le bouton "Suivant" fait simplement un Sprite.gotoAndPlay((Sprite._currentFrame + 1) mod 15).
    Impressionnant de précision...

    Dommage, c'était très intéressant... tant pis.

    merci pour ton regard d'expert

Discussions similaires

  1. vidéo image par image
    Par devssr dans le forum Autres Logiciels
    Réponses: 0
    Dernier message: 15/12/2012, 15h28
  2. Insérer une décomposition image par image avec base de temps en légende
    Par guifon1000 dans le forum Tableaux - Graphiques - Images - Flottants
    Réponses: 2
    Dernier message: 09/06/2008, 10h07
  3. [Video] [JMF] Lire un video image par image avec jmf
    Par capitol dans le forum Multimédia
    Réponses: 2
    Dernier message: 01/05/2008, 03h03
  4. clip image par image en flash
    Par patrickdu26 dans le forum Flash
    Réponses: 3
    Dernier message: 07/12/2007, 20h36
  5. [FLASH 8] Image par Image automatique
    Par ArHacKnIdE dans le forum Flash
    Réponses: 24
    Dernier message: 13/12/2006, 23h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo