none
Durée d'un fichier (video/musique) avec la classe FileInfo RRS feed

  • Question

  • Bonjour,

    je suis entrain de developper un client léger qui verifie les fichiers d'un repertoire et affiche differente information. Ces fichiers ont un point commun, ils ont chacun une durée (Music/Video).

    Je voudrais savoir comment récupérer cette information tout en sachant qu'il aura différents formats.

    il possible de la récuperer avec la classe "FileInfo" ? Si oui pouvez-vous m'orienter ? Si non est ce qu'il y a une autre classe ou librairie qu'on peut l'utiliser à sa place ?

    merci d'avance :)


    Cordialement, Merci de ne pas oublier de marquer les réponses à vos questions et de noter les interventions qui vous ont aidé

    jeudi 22 mai 2014 09:48

Réponses

  • merci pour vos aide j'ai réussit à avoir la duré avec bibliothèque WMP.dll.

    using WMPLib;
    // Dans la fonction :
    var lecteur = new WindowsMediaPlayer();
    var video = lecteur.newMedia(VideoPath);
    TimeSpan VideoDuration = TimeSpan.FromSeconds(video.duration);
    

    mais je dommage que je ne peux pas voir plus détail comme la résolution de la vidéo ou encore le propriétaire


    Cordialement, Merci de ne pas oublier de marquer les réponses à vos questions et de noter les interventions qui vous ont aidé

    • Marqué comme réponse Aurel Bera mercredi 28 mai 2014 07:41
    vendredi 23 mai 2014 14:07

Toutes les réponses

  • Bonjour,

    D'après ce que j'ai recherché, il existe un module de Microsoft appelé "WindowsAPICodePack" qui permet entre autres d'obtenir la durée d'un média à partir de Windows 7. Il ne semble plus être à son emplacement d'origine, à savoir les archives de MSDN, mais on peut encore l'obtenir via nuGet. Tape "Windows api code pack" comme recherche dans nuGet.


    Autre possibilité que j'ai trouvé : utiliser la commande mciSendString via pinvoke. Tu déclare l'appel ainsi :

    [DllImport("winmm.dll")]
    public static extern int mciSendString(string lpstrCommand, StringBuilder lpstrReturnString, int uReturnLength, int hwndCallback);

    puis tu peux l'utiliser ainsi :

    private int GetMediaLength(string file)
    {
       string cmd = "open " + file + " alias monMedia";
       StringBuilder response = new StringBuilder(255);
       mciSendString(cmd, null, 0, 0);
       mciSendString("set monMedia time format ms", null, 0, 0);
       mciSendString("status monMedia length", response, response.Capacity, 0);
       int nbMs = int.Parse(response.ToString());
       return nbMS;
    }

    • Proposé comme réponse Nimzozo jeudi 22 mai 2014 12:55
    jeudi 22 mai 2014 12:40
  • je ne sais pas exactement. C'est une question bête, mais je veux m'en assurer.

    cette deuxième manipulation permet de récupérer la durée d'un fichier audio/Vidéo en seconde n'est ce pas??

    je l'ai essayer et il me renvoie ce code d'erreur :

    System.FormatException was unhandled by user code
      Message=Le format de la chaîne d'entrée est incorrect.
      Source=mscorlib
      StackTrace:
           à System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
           à System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
           à System.Int32.Parse(String s)
           à OctobreBleuWebManager.GestionRapportVideo.GetMediaLength(String file) dans D:\utilisateurs\abenjema\documents\visual studio 2010\Projects\OctobreBleuWebManager\OctobreBleuWebManager\GestionRapportVideo.aspx.cs:ligne 67
           à OctobreBleuWebManager.GestionRapportVideo.Page_Load(Object sender, EventArgs e) dans D:\utilisateurs\abenjema\documents\visual studio 2010\Projects\OctobreBleuWebManager\OctobreBleuWebManager\GestionRapportVideo.aspx.cs:ligne 40
           à System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
           à System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
           à System.Web.UI.Control.OnLoad(EventArgs e)
           à System.Web.UI.Control.LoadRecursive()
           à System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
      InnerException: 
    

    Je ne sais pas ce qu'il veux dire. Un point important que j'ai oublié de le mentionner. Cette Solution est application ASP.net

    merci d'avance :)


    Cordialement, Merci de ne pas oublier de marquer les réponses à vos questions et de noter les interventions qui vous ont aidé

    jeudi 22 mai 2014 13:47
  • cette deuxième manipulation permet de récupérer la durée d'un fichier audio/Vidéo en seconde n'est ce pas??

    En millisecondes en fait.

    je l'ai essayer et il me renvoie ce code d'erreur :

    System.FormatException was unhandled by user code
      Message=Le format de la chaîne d'entrée est incorrect.
      Source=mscorlib
      StackTrace:
           à System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
           à System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info)
           à System.Int32.Parse(String s)
           à OctobreBleuWebManager.GestionRapportVideo.GetMediaLength(String file) dans D:\utilisateurs\abenjema\documents\visual studio 2010\Projects\OctobreBleuWebManager\OctobreBleuWebManager\GestionRapportVideo.aspx.cs:ligne 67
           à OctobreBleuWebManager.GestionRapportVideo.Page_Load(Object sender, EventArgs e) dans D:\utilisateurs\abenjema\documents\visual studio 2010\Projects\OctobreBleuWebManager\OctobreBleuWebManager\GestionRapportVideo.aspx.cs:ligne 40
           à System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e)
           à System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e)
           à System.Web.UI.Control.OnLoad(EventArgs e)
           à System.Web.UI.Control.LoadRecursive()
           à System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)
      InnerException: 

    Je ne sais pas ce qu'il veux dire.

    J'avais testé cette 2ème solution sur des fichiers wav et mp3 et ça a fonctionné. Mais je n'ai pas testé sur des vidéos. Il faut voir si la chaîne de caractères renvoyée est vide. Si c'est le cas, tu auras cette exception forcément.
    Sinon, as-tu essayé de télécharger le package nuGet dont je t'ai parlé?

    Un point important que j'ai oublié de le mentionner. Cette Solution est application ASP.net
    Oups, au temps pour moi, je n'avais pas tout de suite percuté alors que tu avais bien parlé de "client léger"...

    Là je ne sais pas si la solution est bien applicable...

    jeudi 22 mai 2014 15:13
  • Bonjour

    Le plus probable cela vas fonctionner, s'il n'utilise pas des composantes Windows Forms.

    Le problème sera d'avoir accès au système de fichiers, et sera un gros problème de sécurité.

    Bien cordialement,


    Aurel BERA, MSFT
    MSDN Community Support. LE CONTENU EST FOURNI "TEL QUEL" SANS GARANTIE D'AUCUNE SORTE, EXPLICITE OU IMPLICITE.
    S'il vous plaît n'oubliez pas de "Marquer comme réponse" les réponses qui ont résolu votre problème. C'est une voie commune pour reconnaître ceux qui vous ont aidé, et rend plus facile pour les autres visiteurs de trouver plus tard la résolution.

    vendredi 23 mai 2014 09:33
  • merci pour vos aide j'ai réussit à avoir la duré avec bibliothèque WMP.dll.

    using WMPLib;
    // Dans la fonction :
    var lecteur = new WindowsMediaPlayer();
    var video = lecteur.newMedia(VideoPath);
    TimeSpan VideoDuration = TimeSpan.FromSeconds(video.duration);
    

    mais je dommage que je ne peux pas voir plus détail comme la résolution de la vidéo ou encore le propriétaire


    Cordialement, Merci de ne pas oublier de marquer les réponses à vos questions et de noter les interventions qui vous ont aidé

    • Marqué comme réponse Aurel Bera mercredi 28 mai 2014 07:41
    vendredi 23 mai 2014 14:07