Форум программистов, компьютерный форум, киберфорум
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/34: Рейтинг темы: голосов - 34, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 46
1

Захват видео с камеры

09.09.2014, 18:21. Показов 6390. Ответов 15
Метки нет (Все метки)

Как захватить видео с камери? Использовал DirectShow, но компилятор (работаю на Dev C++) не видит библиотеку dshow, может есть какиета другие методи, киньте мне какуюта книгу или пример, большое спасибо

Добавлено через 3 часа 37 минут
Может другово нету), отпишите на мою тему пожалуста:-)

Добавлено через 2 часа 59 минут
Ей ну ниужели никто не работал с камерой?
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.09.2014, 18:21
Ответы с готовыми решениями:

Обработка видео с камеры видео наблюдения (для экспертов)
Обработка видео с камеры видео наблюдения (для экспертов) Имеются несколько каналов видео с камер...

Видео захват с экрана
Всем привет. Озадачился темой видео захвата с экрана. Поискал в интернете - нашёл только...

Media Foundation получение видео источника с камеры
Не могу получить список устройств для записи видео. В качестве примера брал SimpleCapture,...

Захват видео с веб-камеры (C++)
Здравствуйте! Я установил Visual Studio 2015 Community и библиотеку OpenCV 3.1.0 на Windows 10....

15
Заблокирован
09.09.2014, 18:51 2
Есть avicap. Как раз библиотека винды, WinAPI можно сказать.
Поищите по нему в msdn и на форумах примеры. Он старый, чуть ли не времен Win 3.1, их должно хватать.
Но по этой же причине плохо совместим с современным железом и часто глючит, нет гарантии, что вообще будет с той или иной камерой работать.

Так что вариант это плохой, DirectShow рулит.

не видит библиотеку dshow
А DirectX SDK стоит?
Если стоит, попробуйте нужные хедеры добавить в библиотеку хедеров Dev-C++.
И с lib аналогично.

И что мешает взять Visual C++, например?
Гуглите visual c++ express 2008 go.microsoft.com
Первая ссылка прямая, скачиваете, ставите, пишите.
0
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 46
09.09.2014, 19:39  [ТС] 3
Ладно спасибо! Буду пробувать!
0
1160 / 1098 / 173
Регистрация: 19.02.2010
Сообщений: 3,270
14.09.2014, 21:55 4
andrij, дополню-уточню OutLet - старая технология видеозахвата и проигрывания видео называется VideoForWindows, заголовочный файл vfw.h, ну а далее по описанным в заголовочнике функциям MSDN поможет.
Примеры - были, например, в книге Рязанцев Д.Н. "Программирование мультимедиа в Win32 API", Краснодар, 2002.
Да и на форуме вроде были примеры её использования.
Т.е. если не победите DirectShow...
1
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 46
15.09.2014, 08:56  [ТС] 5
VideoForWindows - можете расказать об етом поподробнее
0
66 / 63 / 21
Регистрация: 01.05.2014
Сообщений: 247
15.09.2014, 14:32 6
Цитата Сообщение от andrij Посмотреть сообщение
можете расказать подробнее
Постараюсь. Смотрите листинг программы:
Основной модуль

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
////////////////////////////////////////////////////////////////////////////////
// OnCaptureAvi.cpp
 
#include <windows.h>
#include <vfw.h>
#include "WinMain.h"
#include "OnCaptureAvi.h"
 
#pragma comment(lib,"vfw32.lib")
 
// Получить список устройств ввода видео:
int GetListCaps()
{
    //TCHAR Buffer[1024];
    TCHAR svName[256];
    TCHAR svComment[512];
    int i, nCount;
    
    nCount=0x0FFFFFFFF;
 
    for (i=0;i<10;++i) {
        if (capGetDriverDescription(i, svName, 255, svComment, 511)) {
            //wsprintf(Buffer,TEXT("%d: %s %s"), i, svName, svComment);
            ++nCount;
        }
    }   
    //wsprintf(Buffer,TEXT("%d devices listed."), nCount);  
    return nCount;
}
 
//
// Основная процедура:
//
 
int CaptureAvi(DWORD dwDevice, TCHAR* svFilename)
{
    TCHAR Buffer[512];//Информационный буфер сообщений.
 
    // Создаю окно захвата (скрыто), внутри невидимого родительского окна:
    HWND hwnd,hwndCap;
 
    hwnd=CreateWindow(TEXT("OXY_SUPER_CLASS"),TEXT(""),0, 0, 0, 1, 1, HWND_DESKTOP, NULL, GInstance, NULL);
    if (hwnd==NULL) {
        // Не удалось создать "родительское" окно:
        MessageBox(NULL,TEXT("-->FAILED: Could not create parent window."),TEXT("Fatal Error"),MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
        return 1;
    }
    
    hwndCap=capCreateCaptureWindow(TEXT("OXY_CAPTURE"), WS_CHILD, 0, 0, 160, 120, hwnd, 1);
    if (hwndCap==NULL)
    {// Не удалось создать окно "захвата":
        DestroyWindow(hwnd);
        MessageBox(NULL,TEXT("-->FAILED: Could not create capture window"),TEXT("Fatal Error"),MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
        return 1;
    }
 
    // Подключаю драйвер захвата:
    if (capDriverConnect(hwndCap, dwDevice)==FALSE)
    {// Не удается подключиться к драйверу:
        DestroyWindow(hwnd);
        DestroyWindow(hwndCap);
        wsprintf(Buffer,TEXT("-->FAILED: Unable to connect to driver #%d"),dwDevice);
        MessageBox(NULL,Buffer,TEXT("Fatal Error"),MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
        return 1;   
    }
    
    // Контроль - "всё" проинициализировано:
    CAPDRIVERCAPS pcdc;
    capDriverGetCaps(hwndCap, &pcdc, sizeof(CAPDRIVERCAPS));
    if (!pcdc.fCaptureInitialized)
    {// Драйвер не был инициализирован (показываю номер устройства):
        DestroyWindow(hwnd);
        DestroyWindow(hwndCap);
        wsprintf(Buffer,TEXT("-->FAILED: Driver was not initialized for device #%d"), dwDevice);
        MessageBox(NULL,Buffer,TEXT("Fatal Error"),MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
        return 1;
    }
    
    // Получаю оригинальные параметры настройки камеры:
    DWORD dwSize;
    BITMAPINFO *pbiOrig, *pbiInfo;
    
    dwSize=capGetVideoFormatSize(hwndCap);
    pbiOrig=(BITMAPINFO *)malloc(dwSize);
    if (pbiOrig==NULL)
    {// Ошибка выделения памяти:
        DestroyWindow(hwndCap);
        DestroyWindow(hwnd);
        MessageBox(NULL,TEXT("-->FAILED: Memory allocation error."),TEXT("Fatal Error"),MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
        return 1;
    }
    pbiInfo=(BITMAPINFO *)malloc(dwSize);
    if (pbiInfo==NULL)
    {// Ошибка выделения памяти:
        DestroyWindow(hwndCap);
        DestroyWindow(hwnd);
        MessageBox(NULL,TEXT("-->FAILED: Memory allocation error."),TEXT("Fatal Error"),MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
        return 1;
    }
 
    capGetVideoFormat(hwndCap, pbiOrig, dwSize); 
    memcpy(pbiInfo, pbiOrig, dwSize);
 
    // Параметры видео:
    DWORD dwSeconds,dwWidth,dwHeight,dwBPP,dwFPS;
    dwSeconds   = 7;    // Длительность съёмки ( семь секунд ).
    dwWidth     = 160;  // Ширина.
    dwHeight    = 120;  // Высота.
    dwBPP       = 16;   // Глубина цвета.
    dwFPS       = 15;   // Частота кадров.
 
    pbiInfo->bmiHeader.biWidth          = dwWidth;
    pbiInfo->bmiHeader.biHeight         = dwHeight;
    pbiInfo->bmiHeader.biBitCount       = (WORD) dwBPP;
 
    pbiInfo->bmiHeader.biSizeImage      = 0;
    pbiInfo->bmiHeader.biCompression    = BI_RGB;
    pbiInfo->bmiHeader.biClrUsed        = 0;
    pbiInfo->bmiHeader.biClrImportant   = 0;
    pbiInfo->bmiHeader.biPlanes         = 1;
    
    pbiInfo->bmiColors->rgbBlue     = 0;
    pbiInfo->bmiColors->rgbGreen    = 0;
    pbiInfo->bmiColors->rgbRed      = 0;
    pbiInfo->bmiColors->rgbReserved = 0;
    
    // Установить формат видео, настройка и захват:
    CAPTUREPARMS capparms;
    capSetVideoFormat(hwndCap, pbiInfo, dwSize);
    capCaptureGetSetup(hwndCap, &capparms, sizeof(CAPTUREPARMS));       
    capparms.fMakeUserHitOKToCapture    = FALSE;
    capparms.vKeyAbort                  = 0;
    capparms.fAbortLeftMouse            = FALSE;
    capparms.fAbortRightMouse           = FALSE;
    capparms.fLimitEnabled              = TRUE;
    capparms.wTimeLimit                 = dwSeconds;
    capparms.dwRequestMicroSecPerFrame  = (1000000 / dwFPS);
                                                                        
    capCaptureSetSetup(hwndCap, &capparms, sizeof(CAPTUREPARMS));
 
    capFileSetCaptureFile(hwndCap, svFilename);
 
    //
    // Capturing, please wait...
    // Захват. Пожалуйста, подождите...
    //
                                    
    capCaptureSequence(hwndCap); 
    
    // Восстановить прежний формат видео:
    capSetVideoFormat(hwndCap, pbiOrig, dwSize);
    free(pbiOrig);
    //free(pbiInfo);
    
    capDriverDisconnect(hwndCap); 
    
    DestroyWindow(hwndCap);
    DestroyWindow(hwnd);
    
    // Запись успешна. Возпроизвести видео? :
    wsprintf(Buffer,TEXT("Record successful.\n%s\nPlay videos?"), svFilename);
    if (MessageBox(NULL,Buffer,TEXT("Capture AVI"),MB_YESNO|MB_ICONQUESTION|MB_SETFOREGROUND|MB_TOPMOST)!=IDYES) {
        return 0;
    }
    ShellExecute(0,TEXT("open"),svFilename,NULL,NULL,SW_SHOWNORMAL);
 
    return 0;
}
 
BOOL OnCaptureAvi()
{
    BOOL Result = 0x0FFFFFFFF;
 
    DWORD dwDevice;
    dwDevice=GetListCaps();
    if ( dwDevice == 0x0FFFFFFFF )
    { // Нет доступных видео-устройств:
        MessageBox(NULL,TEXT("-->FAILED: Get devices listed."),TEXT("Fatal Error"),MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
        return Result;
    }
 
    dwDevice = 0; // Здесь, делать выбор вам...
 
    TCHAR Filename[]=TEXT("C:\\TEST_CAPTURE.AVI");
    Result=CaptureAvi(dwDevice, Filename);
 
    return Result;
}
 
////////////////////////////////////////////////////////////////////////////////
// <<eof>> OnCaptureAvi.cpp
////////////////////////////////////////////////////////////////////////////////

WinMain.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
// WinMain.cpp
 
#include <windows.h>
#include "WinMain.h"
#include "OnCaptureAvi.h"
 
HINSTANCE GInstance;
 
int APIENTRY WinMain(
                     HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpCmdLine,
                     int nCmdShow
                     )
{
    // Понадобиться в другом модуле,
    // хотя можно передать в качестве параметра:
    GInstance = hInstance;
    
    // Создаю "родительское" окно,
    // одновременно регистрирую класс окна:
    WNDCLASS wndclass;
    wndclass.style          = 0;
    wndclass.lpfnWndProc    = DefWindowProc;
    wndclass.cbClsExtra     = 0;
    wndclass.cbWndExtra     = 0;
    wndclass.hInstance      = GInstance;
    wndclass.hIcon          = NULL;
    wndclass.hCursor        = NULL;
    wndclass.hbrBackground  = NULL;
    wndclass.lpszMenuName   = NULL;
    wndclass.lpszClassName  = TEXT("OXY_SUPER_CLASS");
    RegisterClass(&wndclass);
    if ( RegisterClass(&wndclass) )
    {// Не удалось зарегистрировать класс:
        MessageBox(NULL,TEXT("Could not RegisterClass"),TEXT("Fatal Error"),MB_OK|MB_ICONSTOP|MB_SETFOREGROUND|MB_TOPMOST);
        return -1;
    }
 
    // Захват видео:
    OnCaptureAvi();
 
    return 0;
}
 
////////////////////////////////////////////////////////////////////////////////
// <<eof>> WinMain.cpp
////////////////////////////////////////////////////////////////////////////////

OxyDemo_CaptureAvi_win32_vc80.zip
1
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 46
15.09.2014, 17:40  [ТС] 7
И штоб не создавать другой теми, ви можете посоветовать книгу по работе с камерой, аудіо и видео(плеерами)
0
66 / 63 / 21
Регистрация: 01.05.2014
Сообщений: 247
15.09.2014, 17:57 8
andrij, с моей точки зрения: Нужно изучить определённые функции и параметры для них.
Как - таково, в русско-язычном спектре, с чем желали-б ознакомиться вряд-ли.., хотя не сомневаюсь, в том,
что Грядёт День подобных "книг" / "литературы".
Вам решать.
1
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 46
15.09.2014, 18:10  [ТС] 9
Спасибо всем за помошь!
0
66 / 63 / 21
Регистрация: 01.05.2014
Сообщений: 247
15.09.2014, 18:17 10
Цитата Сообщение от andrij Посмотреть сообщение
Спасибо всем за помошь!
- не за что, andrij, если буду пока жив - отвечу всем
( ха ха ха : опять я наился
1
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 46
15.09.2014, 18:24  [ТС] 11
Живи долго) по крайней мере пока я учюсь@
0
66 / 63 / 21
Регистрация: 01.05.2014
Сообщений: 247
15.09.2014, 18:42 12
Спасибо, постараюсь.
1
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 46
15.09.2014, 21:54  [ТС] 13
Постарайся)
0
Заблокирован
15.09.2014, 23:48 14
ви можете посоветовать книгу по работе с камерой, аудіо и видео(плеерами)
Вряд ли. Просто статей в инете по этим темам - и то раз два и обчелся.
Тем не менее они есть, например, видел их тут http://basicsprog.ucoz.ru/publ/6 (сайт НЕ мой)
Но там Delphi, на C++ еще переписать надо.
Горе программисту, который знает мало языков...
0
66 / 63 / 21
Регистрация: 01.05.2014
Сообщений: 247
15.09.2014, 23:55 15
Фургон94, ни гони редиска. Тебе с колен никогда ни поднятся.
Если ещё, что оформишь здесь - кочан твоей уедет отдельно.
Oxyfat
1
0 / 0 / 0
Регистрация: 07.08.2014
Сообщений: 46
16.09.2014, 08:54  [ТС] 16
Ха...)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.09.2014, 08:54

Можно ли на c++ создать программу подобную camstudio (захват видео с экрана)?
Каким образом записывает видео с экрана?Можно ли на c++ сделать что то такое? И что нужно знать...

Запись видео с веб камеры
Новичок в этом деле. Я даже не знаю в какую тему мой вопрос опубликовать. Сейчас набираю теорию...

Захват видео с IP камеры
Доброго времени суток! Начальство захотело сделать в помещении запись видео и аудио для каких то...

Захват видео с камеры
кТО МОЖЕТ ПОДСКАЗАТЬ - КАК СКИНУТЬ ВИДЕО С КАМЕРЫ Samsung VP-W71 Hi 8, 0.32 Mpix, 22x / 880x В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru