[wxWIDGETS] wxMediaCtrl + avi [Résolu]

cs_satellite34 688 Messages postés mercredi 6 avril 2005Date d'inscription 2 juin 2006 Dernière intervention - 2 août 2005 à 21:51 - Dernière réponse : cs_satellite34 688 Messages postés mercredi 6 avril 2005Date d'inscription 2 juin 2006 Dernière intervention
- 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
cs_satellite34 688 Messages postés mercredi 6 avril 2005Date d'inscription 2 juin 2006 Dernière intervention - 7 août 2005 à 04:09
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............

Merci cs_satellite34 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 69 internautes ce mois-ci

Commenter la réponse de cs_satellite34
cs_satellite34 688 Messages postés mercredi 6 avril 2005Date d'inscription 2 juin 2006 Dernière intervention - 2 août 2005 à 22:49
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
fredcl 547 Messages postés mercredi 8 janvier 2003Date d'inscription 7 octobre 2007 Dernière intervention - 3 août 2005 à 09:19
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
cs_satellite34 688 Messages postés mercredi 6 avril 2005Date d'inscription 2 juin 2006 Dernière intervention - 3 août 2005 à 10:28
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
cs_satellite34 688 Messages postés mercredi 6 avril 2005Date d'inscription 2 juin 2006 Dernière intervention - 3 août 2005 à 11:57
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
cs_satellite34 688 Messages postés mercredi 6 avril 2005Date d'inscription 2 juin 2006 Dernière intervention - 3 août 2005 à 22:40
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.