IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Delphi Discussion :

[TMediaPlayer] connaître la durée d'une vidéo


Sujet :

Delphi

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Par défaut [TMediaPlayer] connaître la durée d'une vidéo
    (D7) Avec ce composant je n'arrive pas à obtenir la durée d'une vidéo.
    On obtient bien le nombre de frames mais comme on ne connait pas la valeur frames/secondes on est coincé.

    Avec le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     if (mcisendcommand( Mediaplayer1.deviceid
                         , MCI_WHERE
                         , MCI_ANIM_WHERE_SOURCE
                         , longint(@rectparm)) <> 0 ) then showmessage('erreur' );
    on récupère bien les dimensions de la vidéo, mais je ne vois rien dans la doc donnant le frames/seconde ou directement la durée.

  2. #2
    Membre éclairé Avatar de petitprince
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2006
    Messages
    322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués

    Informations forums :
    Inscription : Juillet 2006
    Messages : 322
    Par défaut
    Essaie ca à tout hazard (chez moi ca marche pas, et j'utilise DSPack pour la vidéo, donc...)
    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
    procedure THiddenForm.GetProperties(
      FileName: String;
      var MediaFrames, MediaLength, MediaWidth, MediaHeight: Integer);
    begin
      MediaPlayer.FileName := FileName;
      MediaPlayer.Wait := False;
      MediaPlayer.Open;
      MediaPlayer.TimeFormat := tfFrames;
      MediaFrames := MediaPlayer.Length;
      MediaPlayer.TimeFormat := tfMilliseconds;
      MediaLength := MediaPlayer.Length;
      MediaPlayer.DisplayRect := Rect(1, 1, 0, 0); {"0, 0" forces resolution autodetect}
      MediaWidth := MediaPlayer.DisplayRect.Right;
      MediaHeight := MediaPlayer.DisplayRect.Bottom;
      if (MediaWidth <= 0) or (MediaHeight <= 0) then begin {invalid values mean not video}
        MediaWidth := 0;
        MediaHeight := 0;
      end;
      MediaPlayer.Close;
    end;

  3. #3
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut !

    La propriété Length du TMediaPlayer doit faire l'affaire

    Exemple extrait de l'aide de Delphi:
    Le code suivant déclare un enregistrement HMSRec avec des champs de quatre octets.Si le format de TimeFormat est tfHMS,le premier champ spécifie les heures,le second les minutes,le troisième les secondes et le quatrième correspond àl'octet non utilisédu format tfHMS.Une variable LongInt est transtypée dans un enregistrement HMSRec,puis les heures,minutes,et secondes de la taille du média chargésont affichées dans les libellés lorsque l'utilisateur clique sur un bouton.

    type
    HMSRec =record
    Hours:byte;
    Minutes:byte;
    Seconds:byte;
    NotUsed:byte;
    end;

    procedureTForm1.Button1Click(Sender:TObject);
    var
    TheLength:LongInt;
    begin

    {Définit le format de l'heure –remarquez que certains périphériques ne prennent pas en charge tfHMS }

    MediaPlayer1.TimeFormat :=tfHMS;
    {stocke la longueur du média chargé}
    TheLength :=MediaPlayer1.Length;
    withHMSRec(TheLength)do
    {Transtype TheLength en tant qu'enregistrement HMSRec }
    begin
    Label1.Caption :=IntToStr(Hours);{Affiche Hours dans Label1 }
    Label2.Caption :=IntToStr(Minutes);{Affiche Minutes dans Label2 }
    Label3.Caption :=IntToStr(Seconds);{Affiche Seconds dans Label3 }
    end;
    end;
    @+

  4. #4
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Par défaut
    Merci pour vos réponses.

    Apparemment, tout au moins en D7, quelque soit le format indiqué pour la propriété Length de TMediaPlayer, on récupère le nombre de Frames de la vidéo AVI ou MPG.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    type TMPTimeFormats = (tfMilliseconds, tfHMS, tfMSF, tfFrames
                          , tfSMPTE24, tfSMPTE25, tfSMPTE30
                          , tfSMPTE30Drop, tfBytes, tfSamples, tfTMSF);
    Par contre je ne connaissais pas DSPACK et cela a l'air très concurrentiel par rapport à TMediaPlayer et je vais explorer cela.

  5. #5
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Par défaut
    J'ai installé DSPACK selon la méthode indiquée par le fichier ReadME associé. Cela marche impeccable j'ai juste un petit souci.
    Je n'arrive pas à obtenir l'aide. Que dois-je faire du fichier../help/help.chm qui documente le package?

    Pour ce qui est de la durée d'une vidéo, DSPACK semble la connaître car il l'affiche dans un des exemples fournis.

    Cela a l'air d'être une propriété de IMediaSeeking mais comment la récupérer?

    D'autre part si DSPACK accepte les fichiers sons MP3, WAV, WMA il n'a pas l'air de connaître OGG. Ai-je loupé quelque chose?

  6. #6
    Membre confirmé

    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    126
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 126
    Par défaut
    Ca yest, je l'ai la durée de la vidéo.

    Je n'ai toujours pas d'aide pour DSPACK mais en fouillant un peu dans le code j'ai trouvé une propriété Duration

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        Duree := FilterGraph.Duration;         // durée en millisecondes
                                               // affiche par ex: '00:03:24,500'
        showmessage( TimeToStr(Duree / MilliSecParJour)+','+ inttostr(Duree mod 1000));

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

Discussions similaires

  1. Connaître le temps d'une vidéo
    Par Nathan707 dans le forum Objective-C
    Réponses: 1
    Dernier message: 18/12/2013, 14h49
  2. Récupérer la durée d'une vidéo que l'on upload.
    Par EmyClone dans le forum Servlets/JSP
    Réponses: 0
    Dernier message: 20/06/2011, 10h30
  3. Récupérer la durée d'une vidéo
    Par pj_19 dans le forum ActionScript 3
    Réponses: 2
    Dernier message: 16/01/2011, 10h32
  4. Comment obtenir la durée d'une vidéo?
    Par bakabdel dans le forum ASP.NET
    Réponses: 0
    Dernier message: 13/04/2009, 13h39
  5. Mettre du texte sur une vidéo(ou par dessus un tmediaplayer)
    Par souch dans le forum Composants VCL
    Réponses: 9
    Dernier message: 08/07/2004, 13h30

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