frdestroyers27
Messages postés
93
Date d'inscription
mardi 27 mai 2003
Statut
Membre
Dernière intervention
19 avril 2008
25 mars 2005 à 08:07
Salut!
tu peux faire ca avec directshow
voici ce qui peux te mettre sur la voie
tu doit inclure dans ton projet quartz.lib et strmiids.lib (en faisant add to project...)
tu doit aussi faire un #include<dshow.h> t'assurrer que les repertoire d'include du sdk de directx soit setter dans ton compilateur
ensuite dans ton fichier t'a besoin de:
IGraphBuilder *pGraph;
IMediaControl *pControl;
IMediaEventEx *pEvent;
IBasicAudio *pBasicAudio;
IMediaSeeking *pMediaSeek;
IMediaPosition *pMediaPos;
IVideoWindow *pVidWin;
HRESULT hr;
CoInitialize(NULL);
///ici wFile est de type WCHAR c'est la string qui contient le path et le nom de ton fichier///
hr=pGraph->RenderFile(wFile,NULL);
if(FAILED(hr))
{//si erreur//
//g_hWindowHandle etant le handle de ta fenetre type HWND///
MessageBox(g_hWindowHandle,"Impossible de faire le renderfile","Erreur!",MB_OK|MB_ICONERROR);
//ensuite ont doit aquerir les interface//
//noter que lorsque l'ont detruit directshow les element sont detruit dans l'ordre inverse ou ils sont creer!///
HRESULT hr;
//Aquerir IMediaControl au filtergraph//
hr=pGraph->QueryInterface(IID_IMediaControl,(void**)&pControl);
if(FAILED(hr))
{
MessageBox(g_hWindowHandle,"Ne peut Aquerir le IMediaComtrol","Erreur!",MB_OK|MB_ICONERROR);
pGraph->Release();
pGraph=NULL;
CoUninitialize();
return FALSE;
}
//Aquerir IMediaEvent au filtergraph//
hr=pGraph->QueryInterface(IID_IMediaEventEx,(void**)&pEvent);
if(FAILED(hr))
{
MessageBox(g_hWindowHandle,"Ne peut Aquerir le IMediaEvent","Erreur!",MB_OK|MB_ICONERROR);
pControl->Release();
pGraph->Release();
CoUninitialize();
return FALSE;
}
//Aquerir IMediaSeeking //
hr=pGraph->QueryInterface(IID_IMediaSeeking,(void**)&pMediaSeek);
if(FAILED(hr))
{
MessageBox(g_hWindowHandle,"Ne peut Aquerir le IMediaSeek","Erreur!",MB_OK|MB_ICONERROR);
pEvent->Release();
pControl->Release();
pGraph->Release();
CoUninitialize();
return FALSE;
}
//Aquerir IMediaPosition//
hr=pGraph->QueryInterface(IID_IMediaPosition,(void**)&pMediaPos);
if(FAILED(hr))
{
MessageBox(g_hWindowHandle,"Ne peut Aquerir le IMediaPosition","Erreur!",MB_OK|MB_ICONERROR);
pMediaSeek->Release();
pEvent->Release();
pControl->Release();
pGraph->Release();
CoUninitialize();
return FALSE;
}
//Aquerir IBasicAudio//
hr=pGraph->QueryInterface(IID_IBasicAudio,(void**)&pBasicAudio);
if(FAILED(hr))
{
MessageBox(g_hWindowHandle,"Ne peut Aquerir le IBasicAudio","Erreur!",MB_OK|MB_ICONERROR);
pMediaPos->Release();
pMediaSeek->Release();
pEvent->Release();
pControl->Release();
pGraph->Release();
CoUninitialize();
return FALSE;
}
//Aquerir IVideoWindow//
hr=pGraph->QueryInterface(IID_IVideoWindow,(void**)&pVidWin);
if(FAILED(hr))
{
MessageBox(g_hWindowHandle,"Ne peut Aquerir le IVideoWindow","Erreur!",MB_OK|MB_ICONERROR);
pBasicAudio->Release();
pMediaPos->Release();
pMediaSeek->Release();
pEvent->Release();
pControl->Release();
pGraph->Release();
CoUninitialize();
return FALSE;
}
//ont set la fenetre qui recoit les message//
pEvent->SetNotifyWindow((OAHWND)g_hWindowHandle, WM_GRAPHNOTIFY, 0);
SetMuteVolume(MUTE_OFF);
//ont set la fenetre parent//
pVidWin->put_Owner((OAHWND)g_hWindowHandle);
//ont set le style de la fenetre video//
pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS| WS_CLIPCHILDREN|WS_VISIBLE);
//ont set la position et la dimension de la fenetre ici 320/200 //
pVidWin->SetWindowPosition(2,65,320,200);
//ici ont met la videowindow en avant//
pVidWin->SetWindowForeground(OATRUE);
hr=pControl->Run();
ca ressemble a qqchose comme ca! bon maintenant c sur que tu doit setter une fonction de traitement des message pour ta fenetre video et la ca joue automatique tu devra faire tes fonction stop pause play rewind ffwrd etc...
bonne chance!
Destroyers27