HRESULT hr;
IGraphBuilder *pGB=NULL;
ICaptureGraphBuilder2* pCGB2=NULL;
IMediaControl *pMediaControl = NULL;
IBaseFilter *pMux =NULL;
IBaseFilter *pWriter=NULL;
IBaseFilter *pCompress=NULL;
IFileSinkFilter2 *pSink=NULL;
IBaseFilter *pSrcFilter =NULL;
hr=CoInitialize(NULL);
if( FAILED(hr))
AfxMessageBox("Initializing COM library failed!");
// 创建IGraphBuilder接口
hr=CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGB);
if( FAILED(hr))
{
AfxMessageBox("IGraphBuilder failed");
return ;
}
// 创建ICaptureGraphBuilder2接口
hr = CoCreateInstance (CLSID_CaptureGraphBuilder2 ,NULL,CLSCTX_INPROC,IID_ICaptureGraphBuilder2, (void **) &pCGB2);
if( FAILED(hr))
{
AfxMessageBox("IID_ICaptureGraphBuilder2 failed");
return ;
}
pCGB2->SetFiltergraph(pGB);
hr = pGB->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
if( FAILED(hr))
{
AfxMessageBox("IID_IMediaControl failed");
return ;
}
BindFilter(0,&pSrcFilter);//该函数可以正确运行
pGB->AddFilter(pSrcFilter, L"Capture Filter");
hr=pCGB2->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video,pSrcFilter,NULL,NULL);
if( FAILED(hr))
{
AfxMessageBox("RenderStream PIN_CATEGORY_PREVIEW failed");
hr = pCGB2->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,pSrcFilter,NULL,NULL);
if( FAILED(hr))
{
AfxMessageBox("RenderStream PIN_CATEGORY_CAPTURE failed");
return ;
}
}
else
{
AfxMessageBox("预览");
}
hr=pCGB2->SetOutputFileName(&MEDIASUBTYPE_Avi,L"e:\\test2.avi",&pMux,NULL);//生成Avi pMux
if( FAILED(hr))
{
AfxMessageBox("SetOutputFileName failed");
return ;
}
IConfigAviMux *pConfigMux=NULL;
hr=pMux->QueryInterface(IID_IConfigAviMux,(void **)&pConfigMux);
if( FAILED(hr))
{
AfxMessageBox("IID_IConfigAviMux failed");
return ;
}
pConfigMux->SetMasterStream(0);
pConfigMux->Release();
hr=pCGB2->RenderStream(&PIN_CATEGORY_CAPTURE,&MEDIATYPE_Video,pSrcFilter,NULL,pMux);//不带压缩
if( FAILED(hr))
{
AfxMessageBox("记录 PIN_CATEGORY_CAPTURE failed");
return ;
}
pMux->Release();
pMediaControl->Run();