Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Программирование графики > захват видео с web camera, DirectX SDK int VS2005


Автор: Ich_bin_Turisten 12.02.09, 18:31
Здравствуйте.
Установил directX sdk для того чтобы захватить видео с веб камеры.
Я только начал заниматься таким делом как захват видео, так что попрошу ногами не бить ;) а ответить чтоб я и другие кому это интересно поняли

Хочу написать прогу на С++ в VS2005 чтобы выводила мне на форму видео с web камеры ,

0. где, какие lib из DirectX подключить ?
1. какой компонент(control) для этого дела использовать и каким образом.
2. как задать разрешение видео и (получить список возможных разрешений)
3. как вывести список видео устройств чтоб user смог выбрать нужный

ссылки на литературу по данной тематики приветствуются, спасибо.

Автор: albom 12.02.09, 18:43
Цитата Ich_bin_Turisten @
какие lib из DirectX подключить ?
Никакие.
Для работы с видео тебе нужен DirectShow, который находится в Platform SDK (aka Windows SDK), а совсем не в DirectX SDK.
(Ещё можно осуществлять захват через VFW, но этот способ устарел).

Да, вот Video Capture и DirectShow Samples.

Автор: Ich_bin_Turisten 12.02.09, 20:07
Цитата albom @
Platform SDK

Windows SDK for Windows Server 2008 and .NET Framework 3.5- надеюсь я правильно качаю ))) ибо 1.3Г всетаки.
http://www.microsoft.com/downloads/details.aspx?FamilyId=F26B1AA4-741A-433A-9BE5-FA919850BDBF&displaylang=en

Автор: albom 12.02.09, 20:20
Цитата Ich_bin_Turisten @
надеюсь я правильно качаю
Да

Цитата Ich_bin_Turisten @
ибо 1.3Г всетаки
Можно скачать Windows SDK без .NET, можно даже выкачать более старую (хотя лучше не стоит, и только не раньше 05/2005) версию Platform SDK - они существенно меньше. Можно вообще WebInstall версию на сайте выбрать, и скачать только DirectShow и примеры.

Автор: Ich_bin_Turisten 16.02.09, 12:55
Windows Software Development Kit (SDK) for Windows Server 2008 and .NET Framework 3.5 Release Notes
- это штуковину я нашел у друзей. Поставил и следуя описанию
To run the Microsoft Visual Studio 2005 Registration Tool, go to Start > All Programs > Microsoft Windows SDK v6.1 > Visual Studio Registration > Windows SDK Configuration Tool (on Windows Vista or Windows Server 2008, right-click and select Run as Administrator).
нажал, и у меня вылезла ошибка.
Ну я подумал мол фиг с ней лишь бы примеры заработали. в папке Samples->Multimedia->DirectShow лежит проек BaseClass - там делается
lib который необходим для всех остальных примеров. Проект BaseClass - (сначала потребоввал include я подцепил) - а потом выдал кучу ошибок в основном связанных с типом LPCTSTR. :( Помогите чет у меня все боком.

Автор: albom 16.02.09, 13:20
Цитата Ich_bin_Turisten @
нажал, и у меня вылезла ошибка.
Что за ошибка? Тут нет телепатов <_<

Цитата Ich_bin_Turisten @
Проект BaseClass - (сначала потребоввал include я подцепил) - а потом выдал кучу ошибок в основном связанных с типом LPCTSTR.
Рассказывай подробно, что делал, что нажимал...

Навскидку, правда, предложу вариант, что ты пытаешься использовать старые заголовночные файлы (из твоей студии) с новым SDK.
Проверь, что в настройках студии корректно указаны пути к include и lib каталогам нового SDK, и что эти пути в соответствующих списках стоят на первом месте перед всеми другими.

Автор: Ich_bin_Turisten 16.02.09, 17:03
Описание ошибки Windows SDK Version Selection Tool has encountered a problem and needs to close. We are sorry for the inconvenience.
Error signature
EventType: clr20r3 P1: windowssdkver.exe P2: 1.0.0.0
P3: 477e9a65 P5: windowssdkver.exe P5: 1.0.0.0 P6 477e9a65
P7: 2d P8: 0 P9: system.invalidoperationexception
На лицо трабел с версией. Вопрос а какую надо версию если у мну VS2005 ver8.0.50727.42 FrameWork 2.0.50727

про BaseClass проект открыл в VS в свойствах проекта c/c++ general -> дополнительные подключаемые директории -> добавил
C:\Program Files\Microsoft SDKs\Windows\v6.1\Include
Lib-ы ему не нужны но на всякий случай(а бывает разный :D )добавил Librarian -> дополнительные lib директории
"C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib"
и запустил на компиляцию ошибки с типом LPCTSTR
Пробовал Include и lib прописывать первыми не помогло.

Автор: albom 16.02.09, 17:36
Цитата Ich_bin_Turisten @
Вопрос а какую надо версию если у мну VS2005 ver8.0.50727.42 FrameWork 2.0.50727
Эта версия студии прекрасно работает c SDK, указанным в сообщении #3. Проверено.

Цитата Ich_bin_Turisten @
про BaseClass проект открыл в VS в свойствах проекта c/c++ general -> дополнительные подключаемые директории -> добавил
C:\Program Files\Microsoft SDKs\Windows\v6.1\Include
Lib-ы ему не нужны но на всякий случай(а бывает разный )добавил Librarian -> дополнительные lib директории
"C:\Program Files\Microsoft SDKs\Windows\v6.1\Lib"
Не то, смотри:
Цитата albom @
Проверь, что в настройках студии корректно указаны пути к include и lib каталогам нового SDK
Исправляй настройки студии (Menu -> Tools -> Options -> Projects & Solutions -> VC++ Directories), а не проекта.

Цитата Ich_bin_Turisten @
и запустил на компиляцию ошибки с типом LPCTSTR
Что за ошибки?

Добавлено
Цитата Ich_bin_Turisten @
лежит проек BaseClass - там делается lib который необходим для всех остальных примеров.
Для playcap он не нужен. Хотя ошибки от этого, конечно, не исчезнут. Но можешь его посмотреть, там просто меньше строчек :)

Автор: Ninetta 22.12.10, 09:20
вот работающий код воспроизведения видео с камеры с помощью DirectShow:

<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    HRESULT hr;
     
     IGraphBuilder *pGraph = NULL; //менеджер графа фильтров
     ICaptureGraphBuilder2 *pBuild = NULL; //граф фильтра аудио\видео захвата
     
     IBaseFilter *pCapture = NULL; //видеофильтр
     
     ICreateDevEnum *pDevEnum = NULL; //счетчик для определенной категории устройств
     IEnumMoniker* pEnum = NULL;
     IMoniker* pMoniker = NULL;
     
     IMediaControl * pMediaControl(NULL);
     IMediaEventEx   * pEvent(NULL);
     
     //Инициализируем библиотеку COM
     hr = CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);
     if(SUCCEEDED(hr))
     {
        //Создание графа-фильтров - Create the Capture Graph Builder
        hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, (void**)&pBuild );
         if (SUCCEEDED(hr))
        {
            //Создание менеджера графа фильтров - Create the Filter Graph Manager
            hr = CoCreateInstance(CLSID_FilterGraph, 0, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&pGraph);
            if (SUCCEEDED(hr))
            {
                //Initialize the Capture Graph Builder
                pBuild->SetFiltergraph(pGraph);
                
                //Find system device enumerator to find a video capture device.
                hr = CoCreateInstance(CLSID_SystemDeviceEnum, 0, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (LPVOID*)&pDevEnum);
                
                if(SUCCEEDED(hr))
                {
                
                //создает счетчик для определенной категории устройств
                hr = pDevEnum->CreateClassEnumerator(CLSID_VideoInputDeviceCategory, &pEnum, 0);
                                    
                if(SUCCEEDED(hr))
                {
                  if( pEnum->Next(1, &pMoniker,0) == S_OK )
                  {
                    hr = pMoniker->BindToObject(0, 0, IID_IBaseFilter, (void **)&pCapture);
     
                  //hr = pGraph->AddFilter(pCapture, L"CaptureFilter");
                  //pGraph->RenderFile(L"D:\\Wildlife.wmv", NULL); //чтение файла - работает
                  
                  if(SUCCEEDED(hr))
                    {
                      pGraph->AddFilter(pCapture, L"Capture Filter");              
                      hr = pBuild->RenderStream(&PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pCapture, NULL, NULL);   //3,4,5 Параметры - фильтры, которые объединены в граф
                      
                      pDevEnum->Release();
                      pEnum->Release();
                      pMoniker->Release();
     
                      // Specify the owner window.
                      IVideoWindow *pVidWin = NULL;
                      OAHWND hWnd;
          
                      pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin);
     
                      pVidWin->put_Owner((OAHWND)hWnd);
                      pVidWin->put_WindowStyle( WS_CHILD | WS_CLIPSIBLINGS );
     
                      pVidWin->put_Left(0);
                      pVidWin->put_Top(0);
                      pVidWin->put_Width(1500);
                      pVidWin->put_Height(1000);
     
                      // Set the owner window to receive event notices.
                      pGraph->QueryInterface(IID_IMediaEventEx, (void **)&pEvent);
                      pEvent->SetNotifyWindow((OAHWND)hWnd, 0, 0);
     
                      // Run the graph.
                      pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
                      pMediaControl->Run();
     
     
     
                    }
                    else
                      pBuild->Release();
     
                  }
                  }
              }
            }
         }
     }

Автор: roma_lir 25.12.10, 16:33
Использую dspack(библиотека), дружит с Delphi и с BCB6, там есть примеры.
Посмотри http://sourceforge.net/projects/dspack/

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)