| 关于作者 |
|
作 者:梁 志 斌
QQ :3055720
QQ群:14739153 |
|
微软的DirectShow播放音视频的代码 [2005-9-3] happy201 发表在 DirectX开发
| 微软的DirectShow播放音视频的代码,写得很简洁。 注释是英文的,也没有太难理解的,不懂得可以问我,也可以上网查。 ************************************************************** 这是个Win32控制台应用程序,编译的话要先搞清楚,再有就是要找一个 视频文件作为播放的对象。 关于DirectShow支持的文件类型可以自己查看,反正支持的类型很多。 这里我用了一个MP3文件,就是反恐精英1.6开始的背景音乐。 ************************************************************** 原代码如下: ************************************************************** #include <dshow.h> #include <stdio.h> #pragma comment(lib,"Strmbasd.lib") void main(void) { IGraphBuilder *pGraph = NULL; IMediaControl *pControl = NULL; IMediaEvent *pEvent = NULL;
// Initialize the COM library. HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) { printf("ERROR - Could not initialize COM library"); return; }
// Create the filter graph manager and query for interfaces. 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);
// Build the graph. IMPORTANT: Change this string to a file on your system. hr = pGraph->RenderFile(L"CounterStrike.mp3", NULL);
if (SUCCEEDED(hr)) { // Run the graph. hr = pControl->Run(); if (SUCCEEDED(hr)) { // Wait for completion. long evCode; pEvent->WaitForCompletion(INFINITE, &evCode);
// Note: Do not use INFINITE in a real application, because it // can block indefinitely. } } pControl->Release(); pEvent->Release(); pGraph->Release(); CoUninitialize(); }
| |
|