3,248
社区成员




//创建File Writer
hr = ::CoCreateInstance(CLSID_FileWriter,NULL,CLSCTX_INPROC,
IID_IFileSinkFilter2,(LPVOID*)&FileSink);
if(FAILED(hr))
return hr;
if(FAILED(hr = FileSink->QueryInterface(IID_IBaseFilter,(void**)&FileWriter)))
return E_NOINTERFACE;
if(FAILED(hr =Graph->AddFilter(FileWriter,L"File Writer")))
return hr;
hr = CaptureGraph->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
VideoSourceFilter, VideoEncoder, AviMux);
if(FAILED(hr))
{
MESSAGEBOX("创建视频压缩链路失败");
return hr;
}
CaptureGraph->RenderStream(NULL, &MEDIATYPE_Audio,AudioSourceFilter,
AudioEncoder, AviMux);
if(FAILED(hr))
{
MESSAGEBOX("创建音频压缩链路失败");
return hr;
}
if(FAILED(hr = ConnectPin(AviMux,FileWriter)))
{
MESSAGEBOX("创建文件输出链路失败");
return hr;
}
我这个顺序创建的graph
启动采集时这样写的:
HRESULT TCaptureGraph::StartCapture(FileName)
{
HRESULT hr = FileSink->SetMode(1); //AM_FILE_OVERRITE
if(FAILED(hr))
return hr;
if(FAILED(hr = FileSink->SetFileName(FileName,NULL)))
return hr;
hr = MediaControl->Run();
if(SUCCEEDED(hr))
this->CaptureState = RUNNING;
return hr;
}