Форум » IP Kamera 9060AK/A-SL/A-MP/A Plus/I (IR)/O » Камера 9060АК в приложении под C++ » Ответить

Камера 9060АК в приложении под C++

al-131: Есть необходимость включить камеру 9060АК в приложение под Visual Studio C++. Для примера строим простое консольное приложение (я использовал VS .NET 2005) следующим образом: Создаем пустой проект под C++ Добавляем в Source Files С++ модуль и копируем в него код, приведенный ниже Инсталлируем на компьютере Windows Platform SDK с сайта Microsoft В меню проекта Project ->... Properties -> C/C++ добавляем путь к Additional Include Direction: c:\Program Files\Microsoft SDKs\Windows\V6.1\Include Копируем и включаем в проект две библиотеки (оттуда же): quartz.lib и strmiids.lib Подсоединяем камеру к компьютеру (через локальную сеть или напрямую к сетевой карте), включаем ее Запускаем компиляцию и выполнение (можно под отладкой), вводим пароль, получаем окно с изображением Код программы: // This simple console application shows how // to render media from web server camera AVIOSYS #include <dshow.h> #include <dshowasf.h> #include <wmsdk.h> #include <stdio.h> #include <conio.h> HRESULT FindAviosys( BSTR sFilterName, IBaseFilter **pSource ); void main( void ) { IGraphBuilder *pGraph = NULL; ICaptureGraphBuilder2 *pBuild = NULL; IMediaControl *pControl = NULL; IMediaEvent *pEvent = NULL; IBaseFilter *pSource = NULL; IAMStreamConfig *pConfig = NULL; // 1. Initialize the COM library: HRESULT hr = CoInitialize( NULL ); // 2. Create the Filter Graph Manager: hr = CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph ); // 3. Create the Capture Graph Builder: hr = CoCreateInstance( CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void **)&pBuild ); // Initialize the Capture Graph Builder. pBuild->SetFiltergraph( pGraph ); // 4. Find Source Filter IPCam9060 for camera: BSTR sName = L"IPCam9060"; hr = FindAviosys( sName, &pSource ); // 5. Add Source Filter IPCam9060 to the Graph: hr = pGraph->AddFilter( pSource, L"IPCam9060" ); // 6. Build rest of Graph: hr = pBuild->RenderStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, pSource, NULL, NULL ); // 7. Query interface for MediaControl: hr = pGraph->QueryInterface( IID_IMediaControl, (void **)&pControl ); // 8. Query interface for MediaEvent: hr = pGraph->QueryInterface( IID_IMediaEvent, (void **)&pEvent ); // 9. Run the graph: hr = pControl->Run(); // 10. Wait for completion: long evCode; pEvent->WaitForCompletion( INFINITE, &evCode ); // 11. Release all objects: pEvent->Release(); pControl->Release(); pSource->Release(); pBuild->Release(); pGraph->Release(); CoUninitialize(); } HRESULT FindAviosys( BSTR sFilterName, IBaseFilter **pSource ) { HRESULT hr; ICreateDevEnum *pSysDevEnum = NULL; IEnumMoniker *pEnumCat = NULL; IMoniker *pMoniker = NULL; IBaseFilter *pFilter = NULL; IPropertyBag *pPropBag; ULONG cFetched; VARIANT varName; hr = CoCreateInstance( CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void **)&pSysDevEnum ); if( FAILED(hr) ) return hr; // Obtain a class enumerator for the video compressor category. hr = pSysDevEnum->CreateClassEnumerator( CLSID_VideoInputDeviceCategory, &pEnumCat, 0 ); if( hr == S_OK ) { // Enumerate the monikers. while( pEnumCat->Next(1, &pMoniker, &cFetched) == S_OK ) { hr = pMoniker->BindToStorage( 0, 0, IID_IPropertyBag, (void **)&pPropBag ); if( SUCCEEDED(hr) ) { // To retrieve the filter's friendly name, do the following: VariantInit( &varName ); hr = pPropBag->Read( L"FriendlyName", &varName, 0 ); if( SUCCEEDED(hr) ) { if( *varName.bstrVal == *sFilterName ) { // Display the name in your UI somehow. VariantClear(&varName); // To create an instance of the filter, do the following: hr = pMoniker->BindToObject( NULL, NULL, IID_IBaseFilter, (void**)&pFilter ); if( hr == S_OK ) *pSource = pFilter; break; } pPropBag->Release(); } } pMoniker->Release(); } pEnumCat->Release(); } pSysDevEnum->Release(); return hr; } Программа написана под Direct Show. Из нее намеренно удалены все обработки ошибок (контроль HRESULT). Теперь о проблемах: Изображение получается всегда 360 х 240 точек При запуске нужно вводить пароль (а если камер несколько, - то и выбирать из списка) Может быть кто-то имеет опыт работы с Direct Show. Подскажите, как на RunTime задать URL, пароль и размер изображения? Спасибо.

Ответов - 0



полная версия страницы