This article is intended to show you how to use the IP Camera Directshow Filters in a simple application with default parameters.
Start by calling CoInitialize to initialize the COM library:
HRESULT hr = CoInitialize(NULL);
Next, call CoCreateInstance to create the Filter Graph Manager.
hr = CoCreateInstance(CLSID_FilterGraph, NULL,CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);
Add the following header file. #include <InitGuid.h> #include "IIPCamViewerFilter.h"
call CoCreateInstance to create the IP Camera Directshow Filter
CComPtr _IPCamSource; hr = CoCreateInstance(CLSID_IPCamViewerFilter, NULL, CLSCTX_INPROC_SERVER,IID_IBaseFilter,(void **)&_IPCamSource);
Setup the IP Camera Directshow Filter parameter.
CComPtr<IFileSourceFilter> sourceFilter; hr = CoCreateInstance(CLSID_IPCamViewerFilter, NULL, CLSCTX_INPROC_SERVER,IID_IBaseFilter,(void **)&_IPCamSource); CComQIPtr<IPCamViewerFilter, &IID_IIPCamViewerFilter> netCamFilter(_IPCamSource); if (!_userName.empty()) netCamFilter->setAuthentication(_userName.c_str(), _password.c_str()); else netCamFilter->setAuthentication(NULL, NULL); netCamFilter->setConnectionTimeout(10000);
Add the IP Camera Directshow Filter to the graph
hr = _graphBuilder->AddFilter(_IPCamSource, L"IP Cam");
Create Video Renderer and add to the graph.
hr = dsHelper.createFilter(CLSID_VideoMixingRenderer9, &_videoRenderer); hr = _graphBuilder->AddFilter(_videoRenderer, L"Video Renderer");
Checking the IP Camera whether have audio stream, if it has audio stream, add Audio Renderer to the graph
if (SUCCEEDED(netCamFilter->hasAudio())) { // AudioRenderer: create renderer filter hr = dsHelper.createFilter(CLSID_DSoundRender, &_audioRenderer); // AudioRenderer: add renderer to graph hr = _graphBuilder->AddFilter(_audioRenderer, L"Audio Renderer"); }
Connect IP Camera Directshow Filter to Video Renderer
hr = dsHelper.connectFilters(_graphBuilder, _IPCamSource, _videoRenderer);
Connect IP Camera Directshow Filter to Audio Renderer
if (_audioRenderer) { hr = dsHelper.connectFilters(_graphBuilder, _IPCamSource, _audioRenderer); }
Query the IMediaControl interface to control the streaming.
hr = pGraph->QueryInterface(IID_IMediaControl, (void**)&pControl);
Run the graph.
hr = pControl->Run();
When you close your application, close the COM library.
CoUninitialize();
|