梁志斌的专栏

游戏开发 DirectX技术

 
首页>>
关于作者

作  者:梁  志  斌

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();
}
≡≡≡≡≡ 评论(共 条)我要评论
 

 Copyright  @  好想~~~~好想 2005.03