1 编程实现视频播放
配置环境
#include <streams.h>
#pragma comment(lib,"winmm.lib")
int _tmain(int argc, _TCHAR* argv[])
{
IGraphBuilder*pGraph = NULL; //滤波器图标管理器
IMediaControl*pControl = NULL; //媒体控制接口
IMediaEvent*pEvent = NULL; //媒体事件接口
HRESULThr = CoInitialize(NULL); //初始化COM库
if(FAILED(hr)) //初始化失败
{
printf("初始化COM失败!\n");
return-1;
}
//创建滤波器图表管理器
hr= CoCreateInstance(CLSID_FilterGraph,NULL,
CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void**)&pGraph);
if(FAILED(hr))
{
printf("初始化滤波器链表管理器失败!\n");
return-1;
}
//在管理器下获取媒体控制接口
hr= pGraph->QueryInterface(IID_IMediaControl,(void**)&pControl);
hr= pGraph->QueryInterface(IID_IMediaEvent,(void**)&pEvent);
printf("........................\n");
//创建filtergraph
hr= pGraph->RenderFile(L"E:\\ProgramFiles\\DXSDK\\Samples\\Media\\skiing.avi",NULL);
if(hr ==S_OK)
{
printf("开始播放..........\n");
//开始回放
hr= pControl->Run();
if(SUCCEEDED(hr))
{
//等待回放事件
longevCode;
pEvent->WaitForCompletion(INFINITE,&evCode);
}
}
//释放资源
pControl->Release();
pEvent->Release();
pGraph->Release();
//关闭COM
CoUninitialize();
printf("this is a test for open a avi !\n");
return0;
}
问题1、e:\program files\dxsdk\include\uuids.h : warning C4819: 该文件包含不能在当前代码页(936)中表示的字符。请将该文件保存为Unicode 格式以防止数据丢失
http://blog.sina.com.cn/s/blog_65f6edf90100ue33.html
问题2
网上说的加入注册表之类的都不可行,直接下载一个最新版本,重新安装就好了。
2 Filter Graph
滤波器检查媒体类型
http://wenku.baidu.com/view/400d831452d380eb62946d6b.html
枚举系统设备:
ICreateDevEnum *pDevEnum = NULL; //设备列举接口
CoCreateInstance(CLSID_SystemDeviceEnum,NULL,CLSCTX_INPROC,
IID_IcreateDevEnum,(void**)&pDevEnum);
IEnumMoniker *pClassEnum = NULL; //监视器
pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory,&pClassEnum,0);
ULONG cFetched;
While(pClassEnum->Next(1,&pMoniker,&cFetched)==S_OK)
{
pMoniker->BindToObject(0,0,IID_IbaseFilter,(void**)&pSrc);
pMoniker->Release();
break;
}
pClassEnum->Release();