[wxWIDGETS] wxMediaCtrl + avi [Résolu]

Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
- - Dernière réponse : cs_satellite34
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
- 7 août 2005 à 04:09
salut!
petite question a 10 piastres:

je veux lire un avis avec la librairie wxWIDGETS et sa fonction wxMediaCtrl.
Quelqu' un pourrai - t-il me donner la marche a suivre???

merci bocoup
++
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
3
Merci
C'est bon, j' ai réussi tt comptes fait a bien me débrouiller;
voila le code, par contre , il ne lit que les wmv, je sais pas trop pkoi mais je me doute qui a une story de codecs la dessous,

/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
* MnuouvrirClick
*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void SatAviPlayerFrm::MnuouvrirClick(wxCommandEvent& event)
{

wxFileDialog fd(OpenFileDialog);
fd.SetWildcard("Fichiers Vidéo|*.avi;*.mpeg;*.mpg*;*.mov*;*.wmv*"); //détermine quels fichiers doivent etre vus
fd.SetMessage(_("Ouvrir un fichier vidéo")); //titre de la fenetre
if (fd.ShowModal()==wxID_OK) //si je clike sur ouvrir,
{
m_mediactrl = new wxMediaCtrl();
m_mediactrl->Create(this, ID_MEDIA, fd.GetPath(), wxPoint(20, 20));

if(!m_mediactrl->Load(fd.GetPath())) //c'est ca qui ne marche pas!
wxMessageBox(wxT("Couldn't load file!"));

if(!m_mediactrl->Play())
wxMessageBox(wxT("Couldn't play movie!"));

resetmedia();
}
}


/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
*reset
/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////8


void SatAviPlayerFrm::resetmedia()
{
m_basestatus = wxString::Format(_T("Size(x,y):%i,%i ")
_T("Length(Seconds):%u Speed:%1.1fx"),
m_mediactrl->GetBestSize().x,
m_mediactrl->GetBestSize().y,
(unsigned)((m_mediactrl->Length() / 1000)),
m_mediactrl->GetPlaybackRate()
);
StatusBar->SetStatusText(m_basestatus);
}
/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////
*PLAY
*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////


void SatAviPlayerFrm::OnPlay(wxCommandEvent& event)
{


if(!m_mediactrl->Play())
wxMessageBox(wxT("Couldn't play movie!"));
}


Recherche entreprise développement à Montpellier pour BTS Informatique de Gestion en alternance............

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 158 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_satellite34
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
0
Merci
bon ok, un peu de code :

/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
* Mnuouvrir1004Click
*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void SatAviPlayerFrm::Mnuouvrir1004Click(wxCommandEvent& event)
{
wxFileDialog fd(WxOpenFileDialog);
fd.SetWildcard("*.avi;*.mpeg;*.mpg*;*.mov*;"); //détermine quels fichiers doivent etre vus
fd.SetMessage(_("Ouvrir un fichier vidéo")); //titre de la fenetre
if (fd.ShowModal()= =wxID_OK) //si je clike sur ouvrir,
{
NomFichier = new wxFileName(fd.GetPath()); //pointeur NomFichier sur wxFileName pour le manipuler
chemin = NomFichier->GetFullPath(); //donne une valeur au pointeur *chemin;(cf mp3playrfrm.h)
OnStream(event);
}return;
}


/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
*STREAM
*///////////////////////////////////////////////////////////////////////////////////////////////////////////////////


void SatAviPlayerFrm::OnStream(wxCommandEvent& event)
{
f=fopen (chemin, "rb"); //j' ouvre le fichier
if (!f){wxString msg;
msg.Printf( _T("fichier non ouvert!"));
wxMessageBox(msg, _T("Infos"), wxOK | wxICON_INFORMATION, this);return;}//si ya pas de fichier, error!

fseek(f, 0, SEEK_END);
longueurf = ftell(f); //logueur du fichier en bits
fseek(f, 0, SEEK_SET);

data = (char *)malloc(longueurf); //data est alloué a un espace mémoire
fread(data, longueurf, 1, f); //read...
fclose(f); //tue
OnPlay(event);
}


/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////
*PLAY
*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////


void SatAviPlayerFrm::OnPlay(wxCommandEvent& event)
{
m_mediactrl = new wxMediaCtrl();
m_mediactrl->Load(chemin);
m_mediactrl->Play();
}


/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
* Mnuquitter1005Click
*//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void SatAviPlayerFrm::Mnuquitter1005Click(wxCommandEvent& event)
{
Destroy();
}


voila, avec
void SatAviPlayerFrm::OnPlay(wxCommandEvent& event)
{
m_mediactrl = new wxMediaCtrl();
m_mediactrl->Load(chemin);
m_mediactrl->Play();
}
pasq d'erreur de compilo maispas de lecture.
je me doute bien que ca ne peut pas marcher mais je n'arrive pas a appeler la fonction
wxMediaCtrl::Create


bool Create( wxWindow* parent , const wxString& fileName wxT(""), <gras>wxWindowID id, const wxPoint& pos</gras> wxDefaultPosition, const wxSize& size = wxDefaultSize , long style = 0, const wxString& szBackend = wxT(""), const wxValidator& validator = wxDefaultValidator , const wxString& name = wxPanelNameStr )


et ben ca j' arrive pas a le mettre en oeuvre!!!!

une idée?????????
Commenter la réponse de cs_satellite34
Messages postés
547
Date d'inscription
mercredi 8 janvier 2003
Statut
Membre
Dernière intervention
7 octobre 2007
1
0
Merci
Bonjour,



Dans les exemples de wxWidgets il est founi une source pour le wxMedriaCtrl à cet endroit \Examples\wx\mediaplayer



Je pense que celà répondra à ta question.



Cordialement



FredCL
Commenter la réponse de fredcl
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
0
Merci
non pas du tout! j'ai déja regardé cette source mais elle ne m'apporte rien! en +, elle ne lit pas les vidéos !

et pis franchement j' y comprends rien a leurs sources (trop orientées objet).

moi je veux des explications , pas du code!

merci ++
Commenter la réponse de cs_satellite34
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
0
Merci
voila ou l'erreur se situe et j'arrive pas a envoyer la fonction create pour utiliser un BACKEND direct show!!!

void SatAviPlayerFrm::OnPlay(wxCommandEvent& event)
{
m_mediactrl = new wxMediaCtrl();

if(!m_mediactrl){wxString msg;
msg.Printf( _T("m_mediactrl pas initialisé"));
wxMessageBox(msg, _T("Erreur"), wxOK | wxICON_EXCLAMATION, this);return;}

m_mediactrl->Load(chemin); //c'est ca qui ne marche pas!

if(m_mediactrl->Load(chemin)==false){wxString msg;
msg.Printf( _T("Load n' a pas marché"));
wxMessageBox(msg, _T("Erreur"), wxOK | wxICON_EXCLAMATION, this);return;}

m_mediactrl->Play();

if(m_mediactrl->Play()==false){wxString msg;
msg.Printf( _T("Play n' a pas marché"));
wxMessageBox(msg, _T("Erreur"), wxOK | wxICON_EXCLAMATION, this);return;}
}

et je n' arrive vraiment pas a appeller la fonction create!

tekno, tekno
Commenter la réponse de cs_satellite34
Messages postés
688
Date d'inscription
mercredi 6 avril 2005
Statut
Membre
Dernière intervention
2 juin 2006
1
0
Merci
yo!
bon, je viens de m' y remettre et j' arrive désormais a appeller Create, mais tjrs pareil, ca s'arrete au Load du fichier.J' aimerai vraiment si qqun pourrait m' EXPLIQUER le fonctionnement de wxMediaCtrl avec les fichiers vidéos ( pas de morceaux de codes seuls s' il vous plait, ca ne sert pas beaucoup a comprendre le systeme), car je programme dans une logique pédagogique et non de performance.

/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
* MnuouvrirClick
*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void SatAviPlayerFrm::MnuouvrirClick(wxCommandEvent& event)
{
wxFileDialog fd(OpenFileDialog);
fd.SetWildcard("*.avi;*.mpeg;*.mpg*;*.mov*;"); //détermine quels fichiers doivent etre vus
fd.SetMessage(_("Ouvrir un fichier vidéo")); //titre de la fenetre
if (fd.ShowModal()==wxID_OK) //si je clike sur ouvrir,
{
NomFichier = new wxFileName(fd.GetPath()); //pointeur NomFichier sur wxFileName pour le manipuler
chemin = NomFichier->GetFullPath(); //donne une valeur au pointeur *chemin;(cf mp3playrfrm.h)
OnStream(event);
}return;
}


/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
*STREAM
*///////////////////////////////////////////////////////////////////////////////////////////////////////////////////


void SatAviPlayerFrm::OnStream(wxCommandEvent& event)
{
free(data);
f=fopen (chemin, "rb"); //j' ouvre le fichier
if (!f){wxString msg;
msg.Printf( _T("fichier non ouvert!"));
wxMessageBox(msg, _T("Infos"), wxOK | wxICON_INFORMATION, this);return;}//si ya pas de fichier, error!

fseek(f, 0, SEEK_END);
longueurf = ftell(f); //logueur du fichier en bits
fseek(f, 0, SEEK_SET);

data = (char *)malloc(longueurf); //data est alloué a un espace mémoire
fread(data, longueurf, 1, f); //read...
fclose(f); //tue
OnPlay(event);
}


/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////
*PLAY
*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////


void SatAviPlayerFrm::OnPlay(wxCommandEvent& event)
{
m_mediactrl = new wxMediaCtrl();
m_mediactrl->Create(visuWnd, ID_MEDIA, wxMEDIABACKEND_DIRECTSHOW);

if(!m_mediactrl){wxString msg;
msg.Printf( _T("m_mediactrl pas initialisé"));
wxMessageBox(msg, _T("Erreur"), wxOK | wxICON_EXCLAMATION, this);return;}

m_mediactrl->Load(chemin); //c'est ca qui ne marche pas!

if(m_mediactrl->Load(chemin)==false){wxString msg;
msg.Printf( _T("Load n' a pas marché"));
wxMessageBox(msg, _T("Erreur"), wxOK | wxICON_EXCLAMATION, this);return;}

m_mediactrl->Play();

if(m_mediactrl->Play()==false){wxString msg;
msg.Printf( _T("Play n' a pas marché"));
wxMessageBox(msg, _T("Erreur"), wxOK | wxICON_EXCLAMATION, this);return;}
}

allé merci bocoup à tous

tekno, tekno
Commenter la réponse de cs_satellite34