Discussion: onMetaData TInfoObject et duration [Flash Pascal]

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 351
    Points : 1 505
    Points
    1 505

    Par défaut onMetaData TInfoObject et duration

    Voilà, je cherchais à faire un lecteur video complet en FP2 mais j'ai besoin de récupérer la valeur de duration par l'intermédiaire de la procedure onMetaData...
    J'ai fait un lecteur video en AS3 et je me suis dis que ça devait être possible de le réaliser en as2 avec FP2... mais je suis arrêter par la récupération du paramètre duration avec la procedure onMetaData((infoObject: TInfoObject). C'est un tableau d'informations...mais comment les récupérer... entre autre duration dont j'ai besoin ?


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

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 810
    Points : 21 784
    Points
    21 784

    Par défaut

    ahah !il y a un bug dans l'unité Flash 8

    OnMetaData n'est pas un TInfoObject mais un TMetaData

    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
     
      TCueObject = class // or record
        name       : string;
        time       : Number;
        type       : string;
        parameters : Variant; // parameters['name'] = 'value'
      end;
     
      TMetaData = class
        videocodecid  : Number;
        framerate     : Number;
        videodatarate : Number;
        height        : Number;
        width         : Number;
        duration      : Number;
      end;
     
      TInfoObject = class // or record
        code : string;
        level: string;
      end;
     
      NetStream = external class
        property bufferLength: Number readonly;
        property bufferTime: Number readonly;
        property bytesLoaded: Number readonly;
        property bytesTotal: Number readonly;
        property checkPolicyFile: Boolean;
        property currentFps: Number readonly;
        property time: Number readonly;
     
        procedure onCuePoint(infoObject: TCueObject); virtual;
        procedure onMetaData(infoObject: TMetaData); virtual;
        procedure onStatus(infoObject: TInfoObject); virtual;
     
        constructor Create(connection: NetConnection);
     
        procedure attachVideo(theCamera: Camera; snapshotMilliseconds: Number);
        procedure close;
        procedure pause(flag: Boolean = False);
        //procedure play(name: TObject; start, len: Number; reset: TObject);
        procedure play(name: string; start, len: Number = 0; reset: TObject = nil);
        procedure seek(offset: Number);
        procedure setBufferTime(bufferTime: Number);
      end;
    l'exemple devient alors
    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
     
    program Video;
     
    uses
      Flash8;
     
    {$FRAME_WIDTH 640}
    {$FRAME_HEIGHT 400}
     
    // Flash 8 ne permet pas d'instancier l'objet Video par programme
    // la directive de compilation $VIDEO permet de 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="2" left="0" top="40" width="320" height="180"}
     
    (* syntaxe plus compacte équivalente
      {$VIDEO my_video 2 0 20 320 180}
    *)
     
    type
      MyNetStream = class(NetStream)
        procedure onStatus(infoObject: TInfoObject); override;
        procedure onMetaData(infoObject: TMetaData); override;
      end;
     
    var
      tf: TextField;
      md: TextField;
      nc: NetConnection;
      ns: MyNetStream;
      vo: Video external 'my_video';
     
    procedure MyNetStream.onStatus(infoObject: TInfoObject);
    begin
      tf.Text := infoObject.level + ' : ' + infoObject.code;
      if infoObject.code = 'NetStream.Buffer.Empty' then
        ns.play('Execute.re.flv');
    end;
     
    procedure MyNetStream.onMetaData(infoObject: TMetaData);
    begin
      md.Text := ' codec=' + FloatToStr(infoObject.videocodecid)
               + ',framerate=' + FloatToStr(infoObject.framerate)
               + ',videodatarate=' + FloatToStr(infoObject.videodatarate)
               + ',height=' + FloatToStr(infoObject.height)
               + ',width=' + FloatToStr(infoObject.width)
               + ',duration=' + FloatToStr(infoObject.duration);
    end;
     
    begin
      tf := TextField.Create(_root, 'tf', 0, 0, 0, Stage.Width, 20);
      md := TextField.Create(_root, 'md', 1, 0,20, Stage.Width, 20);
     
      nc := NetConnection.Create;
      nc.connect(nil);
     
      ns := MyNetStream.Create(nc);
     
      vo.attachVideo(ns);
      vo._xscale := 200;
      vo._yscale := 200;
     
    // accès http
    //ns.play('http://flashpascal.execute.re/Execute.re.flv');
     
    // accès local
      ns.play('Execute.re.flv');
    end.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 351
    Points : 1 505
    Points
    1 505

    Par défaut

    Ah oui, maintenant, ça risque d'aller plutôt mieux..
    Je me disais aussi... je n'ai pas percuté parce qu'en as3 le paramètre est un Object...



    merci, je vais pouvoir continuer quand j'aurai le temps...

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

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

    Informations forums :
    Inscription : novembre 2002
    Messages : 6 810
    Points : 21 784
    Points
    21 784

    Par défaut

    Citation Envoyé par Archimède Voir le message
    Ah oui, maintenant, ça risque d'aller plutôt mieux..
    Je me disais aussi... je n'ai pas percuté parce qu'en as3 le paramètre est un Object...



    merci, je vais pouvoir continuer quand j'aurai le temps...
    oui, en FlashPascal ça pourrait être un Variant aussi, comme ça tu peux lire n'importe quelle propriété...mais vu qu'elles sont identifiées j'ai préféré déclarer une classe.
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Produits : UPnP, RemoteOffice, FlashPascal

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

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : avril 2005
    Messages : 1 351
    Points : 1 505
    Points
    1 505

    Par défaut

    Citation Envoyé par Paul TOTH Voir le message
    oui, en FlashPascal ça pourrait être un Variant aussi, comme ça tu peux lire n'importe quelle propriété...mais vu qu'elles sont identifiées j'ai préféré déclarer une classe.
    Merci, ce n'est pas plus mal... c'est davantage ciblé comme ça vu que les propriétés sont reconnues... (autant créer une classe). On ne se pose pas de question.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [DOM] Parser une "duration"
    Par MrDuChnok dans le forum XML
    Réponses: 1
    Dernier message: 23/11/2007, 12h22
  2. Problème de code Duration
    Par landoltp dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/08/2007, 21h31
  3. [FLASH MX] Propriété duration d'un objet Sound
    Par Bisûnûrs dans le forum Flash
    Réponses: 12
    Dernier message: 13/02/2007, 09h50
  4. Réponses: 5
    Dernier message: 01/02/2007, 13h30
  5. [XML\XQuery] Caster xs:duration vers xdt:dayTimeDuration
    Par Otarie dans le forum XQUERY/SGBD
    Réponses: 1
    Dernier message: 13/11/2005, 19h20

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