IP Camera Directshow Filter

How to use the IP Camera Directshow Filter



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();