quinta-feira, 25 de julho de 2013

Player de Video em C++

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.