Neste tutorial mostrarei como fazer um reprodutor videos em C++ utilizando a biblioteca DirectShow. Há uns tempos atrás precisei fazer isso e tive muita dificuldade de encontrar um local onde ensinasse, depois de apanhar muito consegui enfim fazer, e agora estou disponibilizando para quem precisar. Espero que ajude!
Download Projeto Visual Studio
Códigos fonte utilizados:
CPP
----------
#include "video.h"
using namespace System;
using namespace System::Windows::Forms;
[STAThread]
int main(array<String^>^args){
Application::EnableVisualStyles();
Application::SetCompatibleTextRenderingDefault(false);
// Create the main window and run it
teste::video form;
Application::Run(%form);
return 0;
}
----------
INCLUDES
----------
#pragma comment(lib, "strmiids.lib")
#pragma comment(lib, "ole32.lib")
#include <dshow.h>
#include <vcclr.h>
----------
PLAY
----------
IGraphBuilder *pGraph;
IMediaControl *pControl;
IMediaEvent *pEvent;
IVideoWindow *pWindow;
HRESULT hr;
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
if (FAILED(hr))
{
printf("ERROR - Could not create the Filter Graph Manager.");
return;
}
hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);
hr = pGraph->QueryInterface(IID_IVideoWindow, (void **)&pWindow);
String^ fileName = textBox1->Text;
pin_ptr<const wchar_t> wname = PtrToStringChars(fileName);
hr = pGraph->RenderFile(wname, NULL);
if (SUCCEEDED(hr))
{
System::Drawing::Rectangle rc = pictureBox1->ClientRectangle;
hr = pWindow->put_Owner(OAHWND(pictureBox1->Handle.ToInt64()));
hr = pWindow->put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS | WS_CLIPCHILDREN );
hr = pWindow->SetWindowPosition( 0, 0, rc.Right, rc.Bottom );
hr = pControl->Run();
} else {
MessageBox::Show("Vídeo nao aberto");
}
pControl->Release();
pEvent->Release();
pGraph->Release();
CoUninitialize();
0 comentários:
Postar um comentário
Obrigado por comentar! Em breve responderemos, se for o caso.