var
DC : HDC;
Bt : BITMAPINFO;
h_wnd : HWND;
h_cam : HWND;
//== Получение и обработка кадра
function FrameCallback(hWnd: HWND; lpVHdr: PVIDEOHDR): DWORD; stdcall;
type
TByteArray = array [0..1] of Byte;
PByteArray = ^TByteArray;
var
i, j : Integer;
sum : Single;
status : TCapStatus;
str : string;
begin
Result := 0;
// информация о изображении
SendMessage(h_cam, WM_CAP_GET_STATUS, SizeOf(status), Integer(@status));
// проверка на корректность формата изображения
if (status.uiImageWidth > 640) or (status.uiImageHeight > 480) or
(lpVhdr^.dwBytesUsed div (status.uiImageWidth * status.uiImageHeight) <> 3) then
begin
TextOut(DC, 0, 0, 'Размер изображения не должен превышать 640х480 пикселей', 55);
TextOut(DC, 0, 18, 'Изображение должно быть 24 битным', 33);
Exit;
end;
// вывод результата в окно
bt.bmiHeader.biWidth := status.uiImageWidth;
bt.bmiHeader.biHeight := status.uiImageHeight;
StretchDIBits(DC, 0, 0, 640, 480, 0, 0, status.uiImageWidth, status.uiImageHeight, lpVHdr.lpData, bt, 0, SRCCOPY);
end;
// настройка подключения-
DC := GetDC(h_wnd);
if SendMessage(h_cam, WM_CAP_DRIVER_CONNECT, 0, 0) <> 0 then
begin
SendMessage(h_cam, WM_CAP_GET_VIDEOFORMAT, SizeOf(Bt), LongInt(@Bt));
Bt.bmiHeader.biWidth := 320;
Bt.bmiHeader.biHeight := 240;
Bt.bmiHeader.biSize := SizeOf(Bt.bmiHeader);
Bt.bmiHeader.biPlanes := 1;
Bt.bmiHeader.biBitCount := 24;
SendMessage(h_cam, WM_CAP_SET_VIDEOFORMAT, SizeOf(Bt), LongInt(@Bt));
SendMessage(h_cam, WM_CAP_SET_CALLBACK_FRAME, 0, Integer(@FrameCallback));
...
// получить кадр, например по таймеру
//SendMessage(h_cam, WM_CAP_GRAB_FRAME, 0, 0);
Работа С Веб Камерой ?
Подскажите какой протокол обмена у USB веб камеры, что посылаем, что получаем ?
Знаю что есть API по работе с джойстиком, может есть API для работы с веб камерой ?
Но все же кто знает где найти протокол обмена с веб камерой, что делать с данными получая их с конечной точки веб камеры, как обрабатывать... ?
Код:
(модуль с хэдерами прилагаю, передать по сети проблем не составит, можно реализовать сервером, а с нета например браузером смотреть)
...кроме того есть готовый компонент для работы через эту dll - TJLCVideo/ В нем реализовано получение и аудиопотока
(тоже прилагаю)
2) если вы хотите передавать видео и у вас потоковая камера
...лучше использовать AsfWriter из набора dspack, доступ через интерфейс IWMWriterSink... пример передачи:
Код:
AsfWriter1.WriterNetworkSink.SetNetworkProtocol(WMT_PROTOCOL_HTTP);
AsfWriter1.WriterNetworkSink.SetMaximumClients(10);
AsfWriter1.WriterNetworkSink.Open(номер порта);
AsfWriter1.WriterAdvanced2.AddSink(AsfWriter1.WriterNetworkSink);
AsfWriter1.WriterAdvanced2.SetLiveSource(True)
AsfWriter1.WriterNetworkSink.SetMaximumClients(10);
AsfWriter1.WriterNetworkSink.Open(номер порта);
AsfWriter1.WriterAdvanced2.AddSink(AsfWriter1.WriterNetworkSink);
AsfWriter1.WriterAdvanced2.SetLiveSource(True)
...это годится только если стандарт и интерфейс у камеры не какой-нибудь собственный (прокатывают потоковые камеры от axic)
...для просмотра можно импортировать - AxisCamControl activex (там же есть и управление)
А как быть если нужно написать свой драйвер для работы с камерой, я немогу найти протокол обмена с усб веб камерой ну хотя бы дескриптор ?