|
9.1.2 使用Capture Graph Builder
使用DirectShow的滤波器进行流媒体开发,需要一个管理器即滤波器链表管理器(Filter Graph Manager),DirectShow SDK提供的是Graph Builder接口IgraphBuilder。不过针对捕获任务(Capture),还有另一个接口ICaptureGraphBuilder2针对采集捕获的增强型接口。
/*创建滤波器链表管理器,查询其各种控制接口*/ HRESULT CCaptureClass::InitCaptureGraphBuilder() { HRESULT hr; //创建IGraphBuilder接口 hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGB); if (FAILED(hr)) return hr; //创建ICaptureGraphBuilder2接口 hr = CoCreateInstance(CLSID_CaptureGraphBuilder2 , NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void **)&m_pCapture); if (FAILED(hr)) return hr; //初始化滤波器链表管理器IGraphBuilder m_pCapture->SetFiltergraph(m_pGB); //查询媒体控制接口 hr = m_pGB->QueryInterface(IID_IMediaControl, (void **)&m_pMC); if (FAILED(hr)) return hr; //查询视频窗口接口 hr = m_pGB->QueryInterface(IID_IVideoWindow, (LPVOID *) &m_pVW); if (FAILED(hr)) return hr; return hr; } | 在上述程序中,首先创建IGraphBuilder接口,然后创建ICaptureGraphBuilder2接口,接着使用ICaptureGraphBuilder2初始化IGraphBuilder接口。在IGraphBuilder接口下查询媒体控制接口、视频窗口接口。
【责任编辑: 云霞 TEL:(010)68476606】
|