~~ petit lecteur video [ wxwidgets ----> wxmediactrl ] ~~

Soyez le premier à donner votre avis sur cette source.

Vue 14 127 fois - Téléchargée 1 165 fois

Description

En fait, le but de ce dev était, au départ, de lire des fichiers vidéos en n' utilisant que la librairie wxWIDGETS.Au bout du compte, le wxMediaCtrl lit les fichiers audios et vidéos donc, ce player peut lire aussi de la musique, mais comme vous pourrez le constater, il a été pensé pour la lectue de vidéos;

-Slider (gestion du temps);
-Boutons Play, Stop, Pause;
-le dialog de visualisation prends la taille du média a l' ouverture, ce dialog est sizable;
-utilisation d'un sizer;

Voila, c' est juste un p' tit exemple d' utilisation de wxMediaCtrl à améliorer bien entendu;
Il vous faudra probablement des codecs pour pouvoir regarder tous types de medias;
perso, j' use klite codec packs

Enfin, pour compiler les sources vous aurez besoin de wxDevCpp 6.8 beta (pour la gestion du volume)

téléchargez le .exe sur
http://satellitesound.free.fr/aSatAviPlayer.rar

Allé, Salut, god prog :-)

Source / Exemple :


//---------------------------------------------------------------------------
//
// Name:        SatAviPlayerFrm.cpp
// Author:      Nicolas Robert --> satellitesound@free.fr
// Created:     01/08/2005 12:12:35
//
//---------------------------------------------------------------------------

#include "SatAviPlayerFrm.h"

//----------------------------------------------------------------------------
// SatAviPlayerFrm
//----------------------------------------------------------------------------

BEGIN_EVENT_TABLE(SatAviPlayerFrm,wxFrame)
    EVT_TIMER(ID_TIMER,                              SatAviPlayerFrm::OnTimer)
	EVT_CLOSE(                                       SatAviPlayerFrm::SatAviPlayerFrmClose)
	EVT_MENU(ID_MNU_OUVRIR ,                         SatAviPlayerFrm::MnuouvrirClick)
	EVT_MENU(ID_MNU_QUITTER ,                        SatAviPlayerFrm::MnuquitterClick)
	EVT_BUTTON(ID_BUTTON1,                           SatAviPlayerFrm::Boutton1Click)
	EVT_BUTTON(ID_BUTTON2,                           SatAviPlayerFrm::Boutton2Click)
	EVT_BUTTON(ID_BUTTON3,                           SatAviPlayerFrm::Boutton3Click)
	EVT_COMMAND_SCROLL_THUMBTRACK(ID_SLIDER,         SatAviPlayerFrm::SliderThumbtrack)
	EVT_COMMAND_SCROLL(ID_SLIDER,                    SatAviPlayerFrm::SliderScroll)
	EVT_COMMAND_SCROLL_THUMBTRACK(ID_SLIDERVOL,      SatAviPlayerFrm::SlidervolThumbtrack)
	EVT_COMMAND_SCROLL(ID_SLIDERVOL,                 SatAviPlayerFrm::SliderScrollVol)
END_EVENT_TABLE()

SatAviPlayerFrm::SatAviPlayerFrm( wxWindow *parent, wxWindowID id, const wxString &title, const wxPoint &position, const wxSize& size, long style )
                                  : wxFrame( parent, id, title, position, size, style),
                                  m_timer(this, ID_TIMER)
{
    CreateGUIControls();
    m_timer.Start(24);
}

SatAviPlayerFrm::~SatAviPlayerFrm() {} 

IMPLEMENT_APP(SatAviPlayerFrmApp)

bool SatAviPlayerFrmApp::OnInit()
{
    SatAviPlayerFrm *Frame = new  SatAviPlayerFrm(NULL);
    SetTopWindow(Frame);
    Frame->Show(TRUE);		
    return TRUE;
}
 
int SatAviPlayerFrmApp::OnExit()
{
	return 0;
}

void SatAviPlayerFrm::CreateGUIControls()
{
	Slider =  new wxSlider(this, ID_SLIDER,0,0,10,wxPoint(10,20),wxSize(200,15)  , wxSL_HORIZONTAL|wxSL_AUTOTICKS);
	Slider->SetRange(0,10);
	Slider->SetValue(0);
    
    SliderVol = new wxSlider(this, ID_SLIDERVOL,0,0,10,wxPoint(320,2),wxSize(15,70)  , wxSL_VERTICAL|wxSL_AUTOTICKS|wxSL_INVERSE);
    SliderVol->SetRange(0, 10);
    SliderVol->SetValue(8);
    
	StatusBar =  new wxStatusBar(this, ID_STATUSBAR );
	StatusBar->SetFieldsCount(1);
	int StatusBar_Widths[1];
	StatusBar_Widths[0] = -1;
	StatusBar->SetStatusWidths(1,StatusBar_Widths);

	MenuBar =  new wxMenuBar( );
	wxMenu *ID_MNU_FICHIER_Mnu_Obj = new wxMenu(0);
	MenuBar->Append(ID_MNU_FICHIER_Mnu_Obj,_("Fichier"));
	
	ID_MNU_FICHIER_Mnu_Obj->Append(ID_MNU_OUVRIR,_("Ouvrir"),_(""), wxITEM_NORMAL);
	
	ID_MNU_FICHIER_Mnu_Obj->Append(ID_MNU_QUITTER,_("Quitter"),_(""), wxITEM_NORMAL);
	
	
	this->SetMenuBar(MenuBar);

	Button1 =  new wxButton(this, ID_BUTTON1, _(">"), wxPoint(280,20),wxSize(25,25));

	Button2 =  new wxButton(this, ID_BUTTON2, _("II"), wxPoint(250,20),wxSize(25,25));

	Button3 =  new wxButton(this, ID_BUTTON3, _("X"), wxPoint(220,20),wxSize(25,25));

	OpenFileDialog = new wxFileDialog(this, "Ouvrir un fichier..." , "" , "" , "", wxOPEN | wxHIDE_READONLY |  wxCHANGE_DIR  );
    wxFileDialog fd(OpenFileDialog);
    
    m_mediactrl = new wxMediaCtrl();
    m_dialog = new wxDialog(this, -1, "vidéo", wxPoint(0,0), wxSize(-1,-1), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER | wxMAXIMIZE_BOX | wxMINIMIZE_BOX | wxTHICK_FRAME ,"dialogBox");
    m_dialog->SetBackgroundColour(wxColour(0, 0, 0));
        
    m_mediactrl->Create(m_dialog, ID_MEDIA, fd.GetPath(), wxPoint(0, 0), wxSize(1024,768));
        
    m_sizerv = new wxBoxSizer(wxVERTICAL);    
    m_sizerv->Add(m_mediactrl, 1, wxALIGN_CENTER|wxGROW, 0);
   
    m_sizerh = new wxBoxSizer(wxHORIZONTAL);    
    m_sizerh->Add(m_sizerv, 1, wxALIGN_CENTER|wxGROW, 0);
    
    m_dialog->SetSizer(m_sizerh);
    m_dialog->SetAutoLayout(true);
    
	this->SetStatusBar(StatusBar);
	this->SetSize(8,8,370,150);
	this->SetTitle(_("SatAviPlayer"));
	this->Center();
	this->SetIcon(wxNullIcon);
	this->SetBackgroundColour(wxColour(80, 100, 75));
    ////GUI Items Creation End
}

void SatAviPlayerFrm::SatAviPlayerFrmClose(wxCloseEvent& event)
{
    m_timer.Stop();
    m_mediactrl->Destroy();
    Destroy();
}
 
/*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  • MnuquitterClick
  • //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SatAviPlayerFrm::MnuquitterClick(wxCommandEvent& event) { m_timer.Stop(); m_mediactrl->Destroy(); Destroy(); } /*////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  • MnuouvrirClick
  • ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SatAviPlayerFrm::MnuouvrirClick(wxCommandEvent& event) { wxFileDialog fd(OpenFileDialog); fd.SetMessage(_("Ouvrir un fichier vidéo")); if (fd.ShowModal()==wxID_OK) { if(!m_mediactrl->Load(fd.GetPath())) wxMessageBox(wxT("Load n' a pas marché")); if(!m_mediactrl->Play()) wxMessageBox(wxT("Play n' a pas marché")); resetmedia(); } } /*/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  • reset
/*////////////////////////////////////////////////////////////////////////////////////////////////////////////////8 void SatAviPlayerFrm::resetmedia() { m_basestatus = wxString::Format(_T("Taille(x,y):%i,%i ")_T("Longueur(Secondes):%u Vitesse:%1.1fx"),m_mediactrl->GetBestSize().x,m_mediactrl->GetBestSize().y,(unsigned)((m_mediactrl->Length()/1000)),m_mediactrl->GetPlaybackRate()); StatusBar->SetStatusText(m_basestatus); m_dialog->SetSize(wxSize(m_mediactrl->GetBestSize().x, m_mediactrl->GetBestSize().y)); m_dialog->Show(true); } /*//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  • Mon timer
  • ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SatAviPlayerFrm::OnTimer(wxTimerEvent& event) { Slider->SetRange(0, m_mediactrl->Length()/1000); Slider->SetValue(m_mediactrl->Tell()/1000); } /*///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  • gestion du temps par le slider
  • ///////////////////////////////////////////////////////////////////////////5///////////////////////////////////////8
void SatAviPlayerFrm::SliderThumbtrack(wxScrollEvent& event) { if(!m_timer.IsRunning())return; int time=Slider->GetValue()*1000; m_mediactrl->Seek(time); } void SatAviPlayerFrm::SliderScroll(wxScrollEvent& event) { SliderThumbtrack(event); } /*//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  • gestion du volume par le slider
  • //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
void SatAviPlayerFrm::SlidervolThumbtrack(wxScrollEvent& event) { double volume = SliderVol->GetValue(); m_mediactrl->SetVolume(volume*0.1); } void SatAviPlayerFrm::SliderScrollVol(wxScrollEvent& event) { SlidervolThumbtrack(event); }

Conclusion :


#include <wx/zip>

Codes Sources

A voir également

Ajouter un commentaire Commentaires
zebigboo Messages postés 1 Date d'inscription jeudi 9 décembre 2004 Statut Membre Dernière intervention 9 juin 2007
9 juin 2007 à 21:23
Ca compile c'est cool , jte remercie pour ce code inutile qui ne fonctionne pas :)
Gui59910 Messages postés 1 Date d'inscription dimanche 15 avril 2007 Statut Membre Dernière intervention 30 mai 2007
30 mai 2007 à 06:09
Meme probleme que Umis :)
Uims Messages postés 101 Date d'inscription vendredi 16 juillet 2004 Statut Membre Dernière intervention 31 octobre 2006
22 mars 2007 à 21:15
g++ boutons.cpp SatAviPlayerFrm.cpp -o uFrag `wx-config --libs --cppflags`
SatAviPlayerFrm.h:51: error: ISO C++ forbids declaration of ?wxMediaCtrl? with no type
SatAviPlayerFrm.h:51: error: expected ?;? before ?*? token
boutons.cpp: In member function ?void SatAviPlayerFrm::Boutton1Click(wxCommandEvent&)?:
boutons.cpp:9: error: ?m_mediactrl? was not declared in this scope
boutons.cpp: In member function ?void SatAviPlayerFrm::Boutton2Click(wxCommandEvent&)?:
boutons.cpp:21: error: ?m_mediactrl? was not declared in this scope
boutons.cpp: In member function ?void SatAviPlayerFrm::Boutton3Click(wxCommandEvent&)?:
boutons.cpp:32: error: ?m_mediactrl? was not declared in this scope
SatAviPlayerFrm.h:51: error: ISO C++ forbids declaration of ?wxMediaCtrl? with no type
SatAviPlayerFrm.h:51: error: expected ?;? before ?*? token
SatAviPlayerFrm.cpp: In member function ?void SatAviPlayerFrm::CreateGUIControls()?:
SatAviPlayerFrm.cpp:92: error: ?wxHIDE_READONLY? was not declared in this scope
SatAviPlayerFrm.cpp:95: error: ?m_mediactrl? was not declared in this scope
SatAviPlayerFrm.cpp:95: error: expected type-specifier before ?wxMediaCtrl?
SatAviPlayerFrm.cpp:95: error: expected `;' before ?wxMediaCtrl?
SatAviPlayerFrm.cpp: In member function ?void SatAviPlayerFrm::SatAviPlayerFrmClose(wxCloseEvent&)?:
SatAviPlayerFrm.cpp:122: error: ?m_mediactrl? was not declared in this scope
SatAviPlayerFrm.cpp: In member function ?void SatAviPlayerFrm::MnuquitterClick(wxCommandEvent&)?:
SatAviPlayerFrm.cpp:133: error: ?m_mediactrl? was not declared in this scope
SatAviPlayerFrm.cpp: In member function ?void SatAviPlayerFrm::MnuouvrirClick(wxCommandEvent&)?:
SatAviPlayerFrm.cpp:147: error: ?m_mediactrl? was not declared in this scope
SatAviPlayerFrm.cpp:150: error: ?m_mediactrl? was not declared in this scope
SatAviPlayerFrm.cpp: In member function ?void SatAviPlayerFrm::resetmedia()?:
SatAviPlayerFrm.cpp:163: error: ?m_mediactrl? was not declared in this scope
SatAviPlayerFrm.cpp: In member function ?void SatAviPlayerFrm::OnTimer(wxTimerEvent&)?:
SatAviPlayerFrm.cpp:176: error: ?m_mediactrl? was not declared in this scope
SatAviPlayerFrm.cpp: In member function ?void SatAviPlayerFrm::SliderThumbtrack(wxScrollEvent&)?:
SatAviPlayerFrm.cpp:188: error: ?m_mediactrl? was not declared in this scope
SatAviPlayerFrm.cpp: In member function ?void SatAviPlayerFrm::SlidervolThumbtrack(wxScrollEvent&)?:
SatAviPlayerFrm.cpp:202: error: ?m_mediactrl? was not declared in this scope

Euh...

Sa vient de mon linkage? Ou du code?

Je mettrais une note si sa marche!

A+
Funto66 Messages postés 1267 Date d'inscription mercredi 1 janvier 2003 Statut Membre Dernière intervention 28 février 2007 4
10 août 2005 à 02:29
Moui t'es un peu dur là BruNews, personnellement j'y ai vu un intérêt je ne savais pas que wxMediaCtrl existait ^^
cs_satellite34 Messages postés 688 Date d'inscription mercredi 6 avril 2005 Statut Membre Dernière intervention 2 juin 2006 1
8 août 2005 à 21:39
merci bru, désolé j' ai pas fait exprés d'etre un débutant, la prochaine fois je le saurai.
Et puis il ya des catégories sur ce site! Me suis-je trompé???

C'est vrai que c'est super simple mais c'était le but! Enfin, je peux toujours m'amuser a le compliquer et a le rendre obscur, pour le plaisir :-(

Enfin, sache que je ne suis pas d' un tempérament a mal prendre les choses, au contraire c'est bien, o, en apprends bocoup....

Bon allé promis la prochaine source sera compliquée....
tchao
Afficher les 9 commentaires

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.