IConfigAsfWriter *pConfig = 0;
hr = pASFWriter->QueryInterface(IID_IConfigAsfWriter, (void**)&pConfig);
if(SUCCEEDED(hr))
{
//Configure the ASF Writer filter
pConfig->Release();
}
然后调用ICaptureGraphBuilder2::RenderStream将capture Filter 和 ASF writer连接起来:
hr = pBuild->RenderStream(&PIN_CATEGORY_CAPTURE, //Capture pin
&MEDIATYPE_Video, //Video. Use MEDIATYPE_Audio for audio
pCap, //Pointer to the capture filter
0,
pASFWriter); //Pointer to the sink filter(ASF Filter)
3保存成自定义的文件格式
如果你想将文件保存成自己的格式,你必须有自己的 file writer。看下面的代码:
IBaseFilter *pMux = 0;
IFileSinkFilter *pSink = 0;
hr = pBuild->SetOutputFileName(&CLSID_MyCustomMuxFilter, //开发自己的Filter
L"C:VidCap.avi", &pMux, &pSink);
4如何将视频流保存进多个文件
当你将视频流保存进一个文件后,如果你想开始保存第二个文件,这时,你应该首先将graph停止,然后通过IFileSinkFilter::SetFileName改变 File Writer 的文件名称。注意,IFileSinkFilter指针你可以在SetOutputFileName时通过第四个参数返回的。
看看保存多个文件的代码:
IBaseFilter *pMux = 0;
IFileSinkFilter *pSink = 0;
hr = pBuild->SetOutputFileName(&MEDIASUBTYPE_Avi,
L"C:YourFileName.avi", &pMux, &pSink);
if(SUCCEEDED(hr))
{
hr = pBuild->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
pCap, NULL, pMux);
if(SUCCEEDED(hr))
{
pControl->Run();
pControl->Stop();
//Change the file name and run the graph again
pSink->SetFileName(L"YourFileName02.avi", 0);
pControl->Run();
}
pMux->Release();
pSink->Release();
}










