Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Flash Pascal Discussion :

onMetaData TInfoObject et duration


Sujet :

Flash Pascal

  1. #1
    Membre expérimenté
    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
    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
    Le Store Excute Store

  3. #3
    Membre expérimenté
    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
    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
    Le Store Excute Store

  5. #5
    Membre expérimenté
    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.

###raw>template_hook.ano_emploi###