Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1236 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Récuperer information d'un AVI

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Récuperer information d'un AVI

n°1092200
AlphaZone
Posté le 22-05-2005 à 10:04:33  profilanswer
 

Bonjour à tous,
 
Voila j'ai cherché à gauche et à droite mais je n'ai rien trouver de concret.
 
Est-ce que quelqu'un à un indice, un lien ou une source à me proposer pour récupérer les informations d'un fichier vidéo AVI tel que sa durée, sa résolution, ses codecs (audio & video) ?
 
Je vous remerci d'avance et passez bonne journée.

mood
Publicité
Posté le 22-05-2005 à 10:04:33  profilanswer
 

n°1092935
videaste95
je ne sais rien !
Posté le 23-05-2005 à 00:28:34  profilanswer
 

AlphaZone a écrit :

Bonjour à tous,
 
Voila j'ai cherché à gauche et à droite mais je n'ai rien trouver de concret.
 
Est-ce que quelqu'un à un indice, un lien ou une source à me proposer pour récupérer les informations d'un fichier vidéo AVI tel que sa durée, sa résolution, ses codecs (audio & video) ?
 
Je vous remerci d'avance et passez bonne journée.


    On trouve une description du fichier AVI ici: http://msdn.microsoft.com/library/ [...] ffform.asp
    Cherche aussi avec AVIFile et AVIStream.

n°1093012
AlphaZone
Posté le 23-05-2005 à 09:12:28  profilanswer
 

Merci videaste95 ;)

n°1094341
AlphaZone
Posté le 24-05-2005 à 08:01:30  profilanswer
 

J'ai essayé de trouver une classe ou une librairie de AVIFile ou AVIStream mais c'est sur linux or moi je veux que ce soit sous windows.
 
Le lien que tu m'as passé est destiné à la plateforme windows CE

Citation :

Platform Builder for Microsoft Windows CE 5.0


 
Quelqu'un ne sait pas où est-ce que je pourrrais trouver une classe ou librairie permet d'avoir toutes les informations nécéssaire à un fichier AVI ?


Message édité par AlphaZone le 24-05-2005 à 08:02:26
n°1094351
AlphaZone
Posté le 24-05-2005 à 08:18:36  profilanswer
 

J'ai trouvé un site qui propose plein de source tel que avi.h, riff.h :  
http://www.koders.com/cpp/fidCA2A6 [...] C3981.aspx

n°1095216
chicotruss
Posté le 24-05-2005 à 16:24:05  profilanswer
 

AlphaZone a écrit :

J'ai essayé de trouver une classe ou une librairie de AVIFile ou AVIStream mais c'est sur linux or moi je veux que ce soit sous windows.


 
AVIFile et AVIStream existe aussi sous windows -> VFW (Video for Windows)
 
je te fais un exemple y'a peut etre des erreurs de compil, je m'amuse pas a tout verifier
 

Code :
  1. #include <iostream>
  2. #include <windows.h>
  3. #include <vfw.h> //dispo avec dev-cpp ou vc++
  4. //soit tu fait un link static avec vfw32.lib (fourni avec le compilo)
  5. //soit tu te fait une liaison dynamique au run-time
  6. //Initialise la librairie
  7. AVIFileInit();
  8. PAVIFILE avi(NULL);
  9. if(AVIFileOpen(&avi, "fichier.avi", OF_READ, NULL) == 0) {//success
  10. AVIFILEINFO avi_info;
  11. if(AVIFileInfo(avi, &avi_info, sizeof(AVIFILEINFO)) == 0) {
  12. std::cout << avi_info.xxx << std::endl;
  13. //xxx dispo à [url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_avifileinfo_str.asp[/url]
  14. //la tu recupere les infos générales sur le fichier
  15. //avec avi_info.dwLength, avi_info.dwRate et avi_info.dwScale tu dois pouvoir calculer la durée (je sais plus si les 3 sont necessaires).
  16. }
  17. //ensuite pour les flux video
  18. PAVISTREAM avi_stream(NULL);
  19. int streamNumber(0);
  20. while(AVIFileGetStream(avi, &avi_stream, streamtypeVIDEO, streamNumber++) == 0) {//success
  21. AVISTREAMINFO avi_stream_info;
  22. if(AVIStreamInfo(avi_stream, &avi_stream_info, sizeof(AVISTREAMINFO)) == 0) {
  23. //pareil que precedemment:
  24. //[url]http://msdn.microsoft.com/library/default.asp?url=/library/en-us/multimed/htm/_win32_avistreaminfo_str.asp[/url]
  25. //avi_stream_info.fccType te donne le type de stream ici "vids" (attention stocké en little-endian donc "sidv" )
  26. //avi_stream_info.fccHandler te donne le fourCC du codec (aussi en little-endian  :non: ) -> ex: "divx" -> "xvid" -> codec XVID
  27. //liste des fourcc: http://www.fourcc.org ou alors passe par les "Video Compression Manager" (recherche dans msdn) pour avoir le nom,
  28. //si tu as un codec compatible installé, etc.
  29. }
  30. }
  31. //meme principe pour l'audio ...
  32. }
  33. //Ferme la librairie
  34. AVIFileExit();


 

n°1095254
chicotruss
Posté le 24-05-2005 à 16:48:36  profilanswer
 

dsl pour les liens, j'avais pas vu que ca passait pas au milieu du code:
 
pour AVIFILEINFO:
http://msdn.microsoft.com/library/ [...] fo_str.asp
 
pour AVISTREAMINFO:
http://msdn.microsoft.com/library/ [...] fo_str.asp
 
en general pour la lib AVIFile:
http://msdn.microsoft.com/library/ [...] macros.asp
 
pour les codes fourCC:
http://www.fourcc.org


Message édité par chicotruss le 24-05-2005 à 16:49:04
n°1095392
AlphaZone
Posté le 24-05-2005 à 18:05:40  profilanswer
 

Merci chicotruss. C'est propre à visual C++ aussi.
 
J'ai surement fait l'erreur d'avoir oublié de vous dire que je développais sous Borland C++ Builder 5  :sweat:


Message édité par AlphaZone le 24-05-2005 à 18:14:46
n°1095507
chicotruss
Posté le 24-05-2005 à 20:19:34  profilanswer
 

AlphaZone a écrit :

Merci chicotruss. C'est propre à visual C++ aussi.
 
J'ai surement fait l'erreur d'avoir oublié de vous dire que je développais sous Borland C++ Builder 5  :sweat:


 
Ben normalement c'est integré dans windows donc si t'as pas les fichiers vfw.h et vfw32.lib tu peux essayer de faire un appel au run-time ca doit passer vu que la dll fait parti du systeme:
 

Code :
  1. #include <windows.h> //pour les fonctions de dll
  2. HMODULE dll(LoadLibrary("avifile" )); //charge la dll qui dispose des fonctions AVI,
  3. // faut peut etre rajouter .dll mais essaye deja sans
  4. if(dll != NULL) {
  5. typedef STDAPI_(VOID) (*AVIFileInit_TYPE)(VOID); //prototype fonction init
  6. AVIFileInit_TYPE AVIFileInit((AVIFileInit_TYPE)GetProcAddress(dll, "AVIFileInit" ));
  7. if(AVIFileInit != NULL)
  8. AVIFileInit();
  9. else return(1);
  10. typedef HRESULT (*AVIFileOpen_TYPE)(PAVIFILE*, LPCTSTR, UINT, CLSID);
  11. AVIFileOpen_TYPE AVIFileOpen((AVIFileOpen_TYPE)GetProcAddress(dll, "AVIFileOpen" );
  12. if(AVIFileOpen != NULL) {
  13. //appel de la fonction
  14. //par contre y doit falloir aussi que tu recupere les types PAVIFILE, PAVISTREAM, etc.
  15. //mais la c'est comme au dessus apres
  16. }
  17. // idem pour le reste ...
  18. } else {
  19. //ben ca a foiré
  20. }


 
Si les noms de fonctions passent pas essaye en majuscule (AVIFILEINIT, ...) dans GetProcAddress car je sais pas comment elles ont été codé en interne, j'ai juste desassmblé pour voir s'il les fonctions étaient exportées.
 
pour les prototypes des fonctions:
http://msdn.microsoft.com/library/ [...] ctions.asp
 
toutes les fonctions qui renvoient 0 en cas de succes ou une erreur sinon retourne normalement un type HRESULT (faut peut etre rajouter STDAPI devant):
http://msdn.microsoft.com/library/ [...] macros.asp
 
Ca ca devrait marcher (pas sur de la syntaxe pour les pointeurs de fonction  :sweat: , j'utilise pas souvent)


Message édité par chicotruss le 24-05-2005 à 20:29:27
n°1097430
videaste95
je ne sais rien !
Posté le 25-05-2005 à 23:14:47  profilanswer
 

    Avec C++ Builder, tu as le SDK WIN32 qui fourni tous les fichiers d'entêtes necessaires. Le seul problème est leur ancienneté par rapport à windows XP (ils sont plus proches de Win95 que de XP). Il suffit souvent de lire les dernières infos du SDK pour Visual C++ et d'utiliser les fichiers de C++ Builder. En ajoutant parfois une définition.

mood
Publicité
Posté le 25-05-2005 à 23:14:47  profilanswer
 

n°1161102
fumidu
Posté le 27-07-2005 à 09:44:29  profilanswer
 

Bonjour,
 
En ce moment, j'essaie d'ouvrir un fichier AVI,et d'acceder à toutes les infos, et je pensais avoir trouvé ma solution avec ce forum. Malheureusement, ça ne marche pas. J'ai essayé de faire le plus simple possible pour limiter le nombre de sources d'erreurs et j'arrive à ça :
 

Code :
  1. #include <cstdlib>
  2. #include <iostream>
  3. #include <windows.h>
  4. #include <vfw.h> //dispo avec dev-cpp ou vc++
  5. using namespace std;
  6. int main(int argc, char *argv[])
  7. {
  8.     cout << "tentative de lecture d'une vidéo"<<endl<<endl;
  9.    
  10.     AVIFileInit();
  11.     AVIFileExit();
  12.     system("PAUSE" );
  13.     return EXIT_SUCCESS;
  14. }


 
Avec dev C++, j'obtiens ce message d'erreur à la compilation:
 

[linker error] undefined reference to `AVIFileInit@0'
[linker error] undefined reference to `AVIFileExit@0'


 
 
Avec visual C++6, la compilation ne donne pas d'erreur. par contre, c'est au moment de contruire l'executable que ça bloque, et je reçois ce message :
 

Linking...
lectureAvi.obj : error LNK2001: unresolved external symbol _AVIFileExit@0
lectureAvi.obj : error LNK2001: unresolved external symbol _AVIFileInit@0
Debug/lectureAvi.exe : fatal error LNK1120: 2 unresolved externals
Error executing link.exe.
 
lectureAvi.exe - 3 error(s), 0 warning(s)


 
Donc il trouve la bonne bibliothèque apparemment, mais les fonctions ne sont pas définies, à cause d'un pb dont je n'ai pas la moindre idée... Est ce que quelqu'un sait ce que je dois faire, ou au moins ou chercher ?
 
Gérald

n°1161132
Rits75
to?be:!be
Posté le 27-07-2005 à 10:11:36  profilanswer
 

g pas tt lu donc...
juste comme ca c'est la meme erreur entre devcpp et vc6...ca compile mais ca link pas!
l'utilsation de ta lib doit etre mal parametrer dans tes options de compil de ton projet

n°1161491
chicotruss
Posté le 27-07-2005 à 14:00:22  profilanswer
 

Ce sont des erreurs de link:
 
Sous dev-cpp: Projet -> options du projet -> paramètres
Dans la case éditeurs de lien tu rajoute -lvfw32 (ou alors tu utilise le bouton ajouter fichier et tu rajoute le fichier <chemin_devcpp>\lib\libvfw32.a
 
Pour vc6 il doit y avoir une option du style autres bibliothèques incluses dans un menu éditeur de liens dans les options du projet

n°1162686
fumidu
Posté le 28-07-2005 à 10:26:17  profilanswer
 

Merci !
Ca marche maintenant !


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Récuperer information d'un AVI

 

Sujets relatifs
recuperer une video java???Récupérer une chaine de caractère dans l'URL
[tomcat]recuperer le user connecte a la webapprecuperer le flux envoye par un autre programme && Redmon
[Struts/Java] Récupérer l'url utilisée pour arriver là. [résolu][Html/Php/Mysql] comment recuperer des données selon condition
[vba excel] recuperer le nom d'une feuille dans une variableRécupérer infos dans excel
Récuperer les paramètres d'une fonction VBA[Python] curl, récupérer le phpsessid ?
Plus de sujets relatifs à : Récuperer information d'un AVI


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR