Помогите разобраться с программированием IP камеры
Камера будет подключенна именно через Ethernet. Хотя может подключаться через USB, но по Ethernet поддерживается несколько режимов которые через USB не доступны.
Нужен самый простой механизм, без использования всех возможностей камеры.
Камера поддерживает GenICam, но как его использовать пока не пойму.
В SDK с камерой поставлялся ActiveX контрол, использования которого нужно избежать.
Как подключиться к ней и получать отдельные кадры?
http://msdn.microsoft.com/en-us/library/windows/desktop/dd757696(v=vs.85).aspx
http://www.xakep.ru/post/52926/default.asp
http://raxp.radioliga.com/cnt/s.php?p=wc.djvu
http://www.evgen.org.ua/content/view/19/49/
http://yandex.ru/clck/redir/AiuY0DBWFJ4ePaEse6rgeAjgs2pI3DW99KUdgowt9XvoT-twMUKrgIlqcQ8fVL941NJGSFzBZliV4-kQhe1NK5j3bD1yU9Ec4XVnmKxzod-VJdEBFwBF6dvFrMVlwRof3uNBbZ5z9GsSSMmtmPMH4Hz_0NTXRogWVZ4QFpQTWp8NGJA4s_IJq7UV4e0NFVf-3ab0r0wT3s9aXRafgsVuBg?data=UlNrNmk5WktYejR0eWJFYk1LdmtxaEQ0OHF3OUNCYmp6UFFyanpnTjN0MG9SdjZ0WlQ4RTVZSmREOTJKRnB4VnlGTUdsRFp3MTVtbGNBMEw1UFFob3RfUEtFNDNmOGg4MFFhM2VvbzJGb1RhbGxfdXhENF8xaUNiczV3Q09taG5fbXlQSGQzQzFTQQ&b64e=2&sign=e68614e3eb3402520cd255142cf9e830&keyno=8&l10n=uk&i=1
Хотел через сокеты, повторять за контролом. Но не могу перехватить все данные. И не могу перехватить как контрол ищет камеру, ибо он это делает сразу при запуске, а я смотрю апи монитором на запуск которого естественно уходит время.
Подскажите как перечислить все MAC всех устройств подключенных к сетевому адаптору.
Хочу в программе проверять подключенна ли камера, и делать все кнопки управления камерой активными только если подключенна камера
Код:
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif
#include "stdafx.h"
#include "Socket.h"
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#include "SocketDoc.h"
#include "SocketView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
...
...
...
int CSocketView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
WORD wVersionRequested;
WSADATA wsaData;
int err;
/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
/* Tell the user that we could not find a usable */
/* Winsock DLL. */
MessageBox(NULL, (LPCWSTR)L"WSAStartup failed\n", MB_ICONWARNING | MB_OK);
return 1;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
MessageBox(NULL, (LPCWSTR)L"Could not find a usable version of Winsock.dll\n", MB_OK|MB_ICONERROR );
WSACleanup();
return 1;
}
else
MessageBox(NULL, (LPCWSTR)L"The Winsock 2.2 dll was found okay", MB_OK|MB_ICONINFORMATION );
/* The Winsock DLL is acceptable. Proceed to use it. */
/* Add network programming using Winsock here */
/* then call WSACleanup when done using the Winsock dll */
return 0;
}
void CSocketView::OnDestroy()
{
CFormView::OnDestroy();
// TODO: Add your message handler code here
WSACleanup();
}
void CSocketView::OnBnClickedButton2()
{
// TODO: Add your control notification handler code here
int host_name_err;
char name[128] = "";
host_name_err = GetHostName(&name, sizeof(name));
}
#define WIN32_LEAN_AND_MEAN
#endif
#include "stdafx.h"
#include "Socket.h"
#include <winsock2.h>
#include <iphlpapi.h>
#include <stdio.h>
#include <stdlib.h>
#include "SocketDoc.h"
#include "SocketView.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#pragma comment(lib, "iphlpapi.lib")
#pragma comment(lib, "ws2_32.lib")
...
...
...
int CSocketView::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CFormView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
WORD wVersionRequested;
WSADATA wsaData;
int err;
/* Use the MAKEWORD(lowbyte, highbyte) macro declared in Windef.h */
wVersionRequested = MAKEWORD(2, 2);
err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
/* Tell the user that we could not find a usable */
/* Winsock DLL. */
MessageBox(NULL, (LPCWSTR)L"WSAStartup failed\n", MB_ICONWARNING | MB_OK);
return 1;
}
/* Confirm that the WinSock DLL supports 2.2.*/
/* Note that if the DLL supports versions greater */
/* than 2.2 in addition to 2.2, it will still return */
/* 2.2 in wVersion since that is the version we */
/* requested. */
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
/* Tell the user that we could not find a usable */
/* WinSock DLL. */
MessageBox(NULL, (LPCWSTR)L"Could not find a usable version of Winsock.dll\n", MB_OK|MB_ICONERROR );
WSACleanup();
return 1;
}
else
MessageBox(NULL, (LPCWSTR)L"The Winsock 2.2 dll was found okay", MB_OK|MB_ICONINFORMATION );
/* The Winsock DLL is acceptable. Proceed to use it. */
/* Add network programming using Winsock here */
/* then call WSACleanup when done using the Winsock dll */
return 0;
}
void CSocketView::OnDestroy()
{
CFormView::OnDestroy();
// TODO: Add your message handler code here
WSACleanup();
}
void CSocketView::OnBnClickedButton2()
{
// TODO: Add your control notification handler code here
int host_name_err;
char name[128] = "";
host_name_err = GetHostName(&name, sizeof(name));
}
Не подскажите почему может не компилироваться вот такой код?
Вылазит ошибка:
.\SocketView.cpp(210) : error C3861: 'GetHostName': identifier not found
Всё работало пока не появился код для кнопки 2
XP SP2. MSVS 2005. MFC прога